Am Montag 28 November 2005 23:13 schrieb Thomas Graf:
> Looks good, it would be nice if you could separate the vlan part as a
> separate patch for later on though.
This will happen when I submit the final patch for kernel inclusion.
> The effort is nice but why do we need sysfs? Isn't netlink enough for
> you?
Well, there are already a *lot* of device attributes in sysfs (just ls
-l /sys/class/net/eth0 f.e.), so it seems politically correct to add mine,
too ;-)
> > +#define IFF_CARRIER 0x10000 /* driver signals carrier
> > */
> > +#define IFF_DORMANT 0x20000 /* driver signals dormant
> > */
>
> I would favour another name for IFF_CARRIER such as IFF_LOWERLAYER or
> something like that so we can use it to define it to be the status of
> the lower layer in general not just of underlying hardware media.
OTOH this naming is consistent to the names of the
netif_carrier_*()-functions.
> > + IF_OPER_NOTPRESENT,
>
> Why don't we use this to represent the hardware not being present?
Currently, a netdevice that is not present is removed due to the way the
device model works, so I just omitted the code for it. I can add it though.
> I did like your way of leaving gaps to ease inserting new states.
But not needed anymore since I dropped the higher/lower comparisons against
operstate.
> Nice idea although I think it's not needed. I disagree with adding a new
> feature flag just to please an RFC which is obviously incomplete in this
> regard. The purpose of LOWERLAYERDOWN proposed by the RFC is correct but
> it can easly be extended to include the hardware carrier without violating
> any rules. LOWERLAYERDOWN is a refinement of DOWN so all stacking rules
> will continue to work.
I must admit that I interpret the RFC differently here. But the question
remains, do we want to differ between LOWERLAYERDOWN and DOWN. Jamal, your
thoughts?
Too bad that I had to drop the device specific oper_state() method, it would
have avoided that flag ;-)
> > + unsigned char operstate; /* RFC2863 operstate */
>
> Why do we have to store the operstate?
userspace interaction below.
> > + unsigned char link_mode; /* mapping policy to operstate */
>
> We can't use flags for this? Do we really need a new field just to
> mark an interface to go dormant?
I'd ask the other way: Will we need further link modes in the future? Not
sure, but willing to sacrifice a byte for it that would be alignment
otherwise.
> > +void vlan_transfer_operstate(const struct net_device *dev, struct
> [...]
> Dormant state should be handled before announcing the carrier or
> UP state is leaked for a moment.
Will fix, even though it runs in process context under RTNL, locking out
linkwatch_event().
> > + vlan_transfer_operstate(VLAN_DEV_INFO(dev)->real_dev, dev);
> > + linkwatch_fire_event(dev); /* force event to setup operstate */
>
> Shouldn't this be handled by vlan_transfer_operstate() already?
Not if carrier flag or operstate of the underlying device changes while the
VLAN device is admin down. I'll check of I can solve it by calling
rfc2863_policy() outside of if (dev->flags & IFF_UP).
> > +static void set_operstate(struct net_device *dev, unsigned char
> > transition) { + unsigned char operstate = dev->operstate;
> [...]
> Now this is really racy.
Why? We have RTNL, so no other writer preparing for an update will interfere.
Before doing the actual write, we get dev_base_lock, locking out pure
readers, too. I can't see how this is racy.
Stefan
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html