svn commit: r205024 - head/sys/net

Robert N. M. Watson rwatson at freebsd.org
Fri Mar 12 08:26:33 UTC 2010


On Mar 12, 2010, at 8:11 AM, Qing Li wrote:

> I like Julian's suggestion because it is simple and very low risk.
> And there isn't a need to check for interface type any more.
> Here is why:
> 
> 1. The interfaces that are popular and modern are already supporting
>    link_state. So for these drivers, and there are just a few, I will go set
>    its if_flags to include "can change link_state".
> 
> 2. For the existing dated drivers, because that flag bit is never set,
>    no check is done.
> 
> 3. In the mean time, we try to convert the drivers progressively.
> 
> 4. If one wants to do ECMP and not having packets go into a black
>    hole when the physical link is down, that person can ping the ML
>    and ask for driver compatibility list. If we haven't converted that
>    particular driver by then, we will update the driver if it's capable
>    at that time.


Today, we support three link state values:

170 /*
171  * Values for if_link_state.
172  */
173 #define LINK_STATE_UNKNOWN      0       /* link invalid/unknown */
174 #define LINK_STATE_DOWN         1       /* link is down */
175 #define LINK_STATE_UP           2       /* link is up */

I'm confused about Julian's proposal because it seems to me that we already know when a driver hasn't set or is unable to determine the link state: it will (should) be set to LINK_STATE_UNKNOWN by default.

So the only question we don't know the answer to, at run-time, is whether a driver may *ever* set the link state (i.e., it thinks it knows how to), and hence whether or not tools like dhclient should try to wait for that to happen. That is the problem that an interface capability would solve.

For the purposes of ECMP, you just need to decide on your policy: map UNKNOWN to either UP or DOWN for your purposes.

Robert


More information about the svn-src-head mailing list