On 4/21/17 11:31 AM, Vladislav Yasevich wrote: > @@ -1276,9 +1277,40 @@ static int rtnl_xdp_fill(struct sk_buff *skb, struct > net_device *dev) > return err; > } > > +static int rtnl_fill_link_event(struct sk_buff *skb, unsigned long event) > +{ > + u32 rtnl_event; > + > + switch (event) { > + case NETDEV_REBOOT: > + rtnl_event = IFLA_EVENT_REBOOT; > + break; > + case NETDEV_FEAT_CHANGE: > + rtnl_event = IFLA_EVENT_FEAT_CHANGE; > + break; > + case NETDEV_BONDING_FAILOVER: > + rtnl_event = IFLA_EVENT_BONDING_FAILOVER; > + break; > + case NETDEV_NOTIFY_PEERS: > + rtnl_event = IFLA_EVENT_NOTIFY_PEERS; > + break; > + case NETDEV_RESEND_IGMP: > + rtnl_event = IFLA_EVENT_RESEND_IGMP; > + break; > + case NETDEV_CHANGEINFODATA: > + rtnl_event = IFLA_EVENT_CHANGE_INFO_DATA; > + break; > + default: > + return 0; > + } > + > + return nla_put_u32(skb, IFLA_EVENT, rtnl_event); > +} > +
I still have doubts about encoding kernel events into a uapi. For example, NETDEV_CHANGEINFODATA is only for bonds though nothing about the name suggests it is a bonding notification. This one was added specifically to notify userspace (d4261e5650004), yet seems to happen only during a changelink and that already generates a RTM_NEWLINK message via do_setlink. Since the rtnetlink_event message does not contain anything "NETDEV_CHANGEINFODATA" related what purpose does it really serve besides duplicating netlink messages to userspace. The REBOOT, IGMP, FEAT_CHANGE and BONDING_FAILOVER seem to be unique messages (code analysis only) which I get for notifying userspace. NETDEV_NOTIFY_PEERS is not so clear in how often it duplicates other messages.