svn commit: r205024 - head/sys/net
Robert N. M. Watson
rwatson at freebsd.org
Fri Mar 12 08:32:25 UTC 2010
On Mar 12, 2010, at 8:30 AM, Qing Li wrote:
> I believe what Julian means is the following:
> 1. in the driver, I do this
> ifp->if_flags |= IFF_KNOWS_LINK_STATE;
> 2. In route.h, I do this
> if (ifp->flags & IFF_KNOWS_LINK_STATE) && (ifp->if_link_state ==
> return 1;
Please do *NOT* do this:
(1) Do not overload if_flags with more run-time set flags without well-defined atomicity properties
(2) Why isn't LINK_STATE_UNKNOWN already sufficient here?
The only change I think would be useful is adding a new IFCAP flag that allows a driver to statically declare that it will someday set the link state. But I don't think that helps with ECMP, that's just for the benefit of programs like dhclient that care about future events rather than current state.
> -- Qing
> On Fri, Mar 12, 2010 at 12:26 AM, Robert N. M. Watson
> <rwatson at freebsd.org> wrote:
>> 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.
More information about the svn-src-all