Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Revert "rtnl: Add support for netdev event to link messages"

This reverts commit def12888c161e6fec0702e5ec9c3962846e3a21d.

As per discussion between Roopa Prabhu and David Ahern, it is
advisable that we instead have the code collect the setlink triggered
events into a bitmask emitted in the IFLA_EVENT netlink attribute.

Signed-off-by: David S. Miller <davem@davemloft.net>

+11 -107
+1 -2
include/linux/rtnetlink.h
··· 18 18 19 19 void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change, gfp_t flags); 20 20 struct sk_buff *rtmsg_ifinfo_build_skb(int type, struct net_device *dev, 21 - unsigned change, unsigned long event, 22 - gfp_t flags); 21 + unsigned change, gfp_t flags); 23 22 void rtmsg_ifinfo_send(struct sk_buff *skb, struct net_device *dev, 24 23 gfp_t flags); 25 24
-21
include/uapi/linux/if_link.h
··· 157 157 IFLA_GSO_MAX_SIZE, 158 158 IFLA_PAD, 159 159 IFLA_XDP, 160 - IFLA_EVENT, 161 160 __IFLA_MAX 162 161 }; 163 162 ··· 898 899 }; 899 900 900 901 #define IFLA_XDP_MAX (__IFLA_XDP_MAX - 1) 901 - 902 - enum { 903 - IFLA_EVENT_UNSPEC, 904 - IFLA_EVENT_REBOOT, 905 - IFLA_EVENT_CHANGE_MTU, 906 - IFLA_EVENT_CHANGE_ADDR, 907 - IFLA_EVENT_CHANGE_NAME, 908 - IFLA_EVENT_FEAT_CHANGE, 909 - IFLA_EVENT_BONDING_FAILOVER, 910 - IFLA_EVENT_POST_TYPE_CHANGE, 911 - IFLA_EVENT_NOTIFY_PEERS, 912 - IFLA_EVENT_CHANGE_UPPER, 913 - IFLA_EVENT_RESEND_IGMP, 914 - IFLA_EVENT_PRE_CHANGE_MTU, 915 - IFLA_EVENT_CHANGE_INFO_DATA, 916 - IFLA_EVENT_PRE_CHANGE_UPPER, 917 - IFLA_EVENT_CHANGE_LOWER_STATE, 918 - IFLA_EVENT_UDP_TUNNEL_PUSH_INFO, 919 - IFLA_EVENT_CHANGE_TX_QUEUE_LEN, 920 - }; 921 902 922 903 #endif /* _UAPI_LINUX_IF_LINK_H */
+1 -1
net/core/dev.c
··· 6840 6840 6841 6841 if (!dev->rtnl_link_ops || 6842 6842 dev->rtnl_link_state == RTNL_LINK_INITIALIZED) 6843 - skb = rtmsg_ifinfo_build_skb(RTM_DELLINK, dev, ~0U, 0, 6843 + skb = rtmsg_ifinfo_build_skb(RTM_DELLINK, dev, ~0U, 6844 6844 GFP_KERNEL); 6845 6845 6846 6846 /*
+9 -83
net/core/rtnetlink.c
··· 944 944 + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_SWITCH_ID */ 945 945 + nla_total_size(IFNAMSIZ) /* IFLA_PHYS_PORT_NAME */ 946 946 + rtnl_xdp_size(dev) /* IFLA_XDP */ 947 - + nla_total_size(4) /* IFLA_EVENT */ 948 947 + nla_total_size(1); /* IFLA_PROTO_DOWN */ 949 948 950 949 } ··· 1276 1277 return err; 1277 1278 } 1278 1279 1279 - static int rtnl_fill_link_event(struct sk_buff *skb, unsigned long event) 1280 - { 1281 - u32 rtnl_event; 1282 - 1283 - switch (event) { 1284 - case NETDEV_REBOOT: 1285 - rtnl_event = IFLA_EVENT_REBOOT; 1286 - break; 1287 - case NETDEV_CHANGEMTU: 1288 - rtnl_event = IFLA_EVENT_CHANGE_MTU; 1289 - break; 1290 - case NETDEV_CHANGEADDR: 1291 - rtnl_event = IFLA_EVENT_CHANGE_ADDR; 1292 - break; 1293 - case NETDEV_CHANGENAME: 1294 - rtnl_event = IFLA_EVENT_CHANGE_NAME; 1295 - break; 1296 - case NETDEV_FEAT_CHANGE: 1297 - rtnl_event = IFLA_EVENT_FEAT_CHANGE; 1298 - break; 1299 - case NETDEV_BONDING_FAILOVER: 1300 - rtnl_event = IFLA_EVENT_BONDING_FAILOVER; 1301 - break; 1302 - case NETDEV_POST_TYPE_CHANGE: 1303 - rtnl_event = IFLA_EVENT_POST_TYPE_CHANGE; 1304 - break; 1305 - case NETDEV_NOTIFY_PEERS: 1306 - rtnl_event = IFLA_EVENT_NOTIFY_PEERS; 1307 - break; 1308 - case NETDEV_CHANGEUPPER: 1309 - rtnl_event = IFLA_EVENT_CHANGE_UPPER; 1310 - break; 1311 - case NETDEV_RESEND_IGMP: 1312 - rtnl_event = IFLA_EVENT_RESEND_IGMP; 1313 - break; 1314 - case NETDEV_PRECHANGEMTU: 1315 - rtnl_event = IFLA_EVENT_PRE_CHANGE_MTU; 1316 - break; 1317 - case NETDEV_CHANGEINFODATA: 1318 - rtnl_event = IFLA_EVENT_CHANGE_INFO_DATA; 1319 - break; 1320 - case NETDEV_PRECHANGEUPPER: 1321 - rtnl_event = IFLA_EVENT_PRE_CHANGE_UPPER; 1322 - break; 1323 - case NETDEV_CHANGELOWERSTATE: 1324 - rtnl_event = IFLA_EVENT_CHANGE_LOWER_STATE; 1325 - break; 1326 - case NETDEV_UDP_TUNNEL_PUSH_INFO: 1327 - rtnl_event = IFLA_EVENT_UDP_TUNNEL_PUSH_INFO; 1328 - break; 1329 - case NETDEV_CHANGE_TX_QUEUE_LEN: 1330 - rtnl_event = IFLA_EVENT_CHANGE_TX_QUEUE_LEN; 1331 - break; 1332 - default: 1333 - return 0; 1334 - } 1335 - 1336 - return nla_put_u32(skb, IFLA_EVENT, rtnl_event); 1337 - } 1338 - 1339 1280 static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev, 1340 1281 int type, u32 pid, u32 seq, u32 change, 1341 - unsigned int flags, u32 ext_filter_mask, 1342 - unsigned long event) 1282 + unsigned int flags, u32 ext_filter_mask) 1343 1283 { 1344 1284 struct ifinfomsg *ifm; 1345 1285 struct nlmsghdr *nlh; ··· 1325 1387 nla_put_u32(skb, IFLA_CARRIER_CHANGES, 1326 1388 atomic_read(&dev->carrier_changes)) || 1327 1389 nla_put_u8(skb, IFLA_PROTO_DOWN, dev->proto_down)) 1328 - goto nla_put_failure; 1329 - 1330 - if (rtnl_fill_link_event(skb, event)) 1331 1390 goto nla_put_failure; 1332 1391 1333 1392 if (rtnl_fill_link_ifmap(skb, dev)) ··· 1461 1526 [IFLA_LINK_NETNSID] = { .type = NLA_S32 }, 1462 1527 [IFLA_PROTO_DOWN] = { .type = NLA_U8 }, 1463 1528 [IFLA_XDP] = { .type = NLA_NESTED }, 1464 - [IFLA_EVENT] = { .type = NLA_U32 }, 1465 1529 }; 1466 1530 1467 1531 static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = { ··· 1619 1685 NETLINK_CB(cb->skb).portid, 1620 1686 cb->nlh->nlmsg_seq, 0, 1621 1687 flags, 1622 - ext_filter_mask, 0); 1688 + ext_filter_mask); 1623 1689 /* If we ran out of room on the first message, 1624 1690 * we're in trouble 1625 1691 */ ··· 2710 2776 return -ENOBUFS; 2711 2777 2712 2778 err = rtnl_fill_ifinfo(nskb, dev, RTM_NEWLINK, NETLINK_CB(skb).portid, 2713 - nlh->nlmsg_seq, 0, 0, ext_filter_mask, 0); 2779 + nlh->nlmsg_seq, 0, 0, ext_filter_mask); 2714 2780 if (err < 0) { 2715 2781 /* -EMSGSIZE implies BUG in if_nlmsg_size */ 2716 2782 WARN_ON(err == -EMSGSIZE); ··· 2782 2848 } 2783 2849 2784 2850 struct sk_buff *rtmsg_ifinfo_build_skb(int type, struct net_device *dev, 2785 - unsigned int change, 2786 - unsigned long event, gfp_t flags) 2851 + unsigned int change, gfp_t flags) 2787 2852 { 2788 2853 struct net *net = dev_net(dev); 2789 2854 struct sk_buff *skb; ··· 2793 2860 if (skb == NULL) 2794 2861 goto errout; 2795 2862 2796 - err = rtnl_fill_ifinfo(skb, dev, type, 0, 0, change, 0, 0, event); 2863 + err = rtnl_fill_ifinfo(skb, dev, type, 0, 0, change, 0, 0); 2797 2864 if (err < 0) { 2798 2865 /* -EMSGSIZE implies BUG in if_nlmsg_size() */ 2799 2866 WARN_ON(err == -EMSGSIZE); ··· 2814 2881 rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, flags); 2815 2882 } 2816 2883 2817 - static void rtmsg_ifinfo_event(int type, struct net_device *dev, 2818 - unsigned int change, unsigned long event, 2819 - gfp_t flags) 2884 + void rtmsg_ifinfo(int type, struct net_device *dev, unsigned int change, 2885 + gfp_t flags) 2820 2886 { 2821 2887 struct sk_buff *skb; 2822 2888 2823 2889 if (dev->reg_state != NETREG_REGISTERED) 2824 2890 return; 2825 2891 2826 - skb = rtmsg_ifinfo_build_skb(type, dev, change, event, flags); 2892 + skb = rtmsg_ifinfo_build_skb(type, dev, change, flags); 2827 2893 if (skb) 2828 2894 rtmsg_ifinfo_send(skb, dev, flags); 2829 - } 2830 - 2831 - void rtmsg_ifinfo(int type, struct net_device *dev, unsigned int change, 2832 - gfp_t flags) 2833 - { 2834 - rtmsg_ifinfo_event(type, dev, change, 0, flags); 2835 2895 } 2836 2896 EXPORT_SYMBOL(rtmsg_ifinfo); 2837 2897 ··· 4132 4206 case NETDEV_CHANGELOWERSTATE: 4133 4207 case NETDEV_UDP_TUNNEL_PUSH_INFO: 4134 4208 case NETDEV_CHANGE_TX_QUEUE_LEN: 4135 - rtmsg_ifinfo_event(RTM_NEWLINK, dev, 0, event, GFP_KERNEL); 4209 + rtmsg_ifinfo(RTM_NEWLINK, dev, 0, GFP_KERNEL); 4136 4210 break; 4137 4211 default: 4138 4212 break;