Hi, > I forgot about this. I hate to rain on your parade Stefan, but > if you made one global worklist that will complete the discussion. here we go. Changes since the last version: -One global worklist. Still using __LINK_STATE_LINKWATCH_PENDING to know of a pending event fast -unsigned char operstate instead of short. If there was no alignment, this would have reduced the size of struct net_device by one byte ;-) -removed usage if in-kernel-IFF_RUNNING as a mirror. Useless if we want to broadcast complete operstate via netlink -Map only NETDEV_OPER_UP and NETDEV_OPER_UNKNOWN to IFF_RUNNING. I have kept UNKNOWN as a compatibility kludge for the majority of drivers that cannot determine any operstate yet -Use dev_hold()/dev_put() While doing tests with a hacked vlan driver that creates NETDEV_OPER_LOWERDOWN/_UP events I found that I get a "No buffer space available" in ip monitor if the event list is longer than about 20 entries. This can be worked around with setsockopt on SO_RCVBUF, but does anyone have a clue why netlink events are that expensive? Cheers, Stefan