Nikolay Aleksandrov
2015-Oct-06 12:11 UTC
[Bridge] [PATCH net-next 1/8] bridge: netlink: export port's root id
From: Nikolay Aleksandrov <nikolay at cumulusnetworks.com> Add IFLA_BRPORT_ROOT_ID to allow getting the designated root id via netlink. Signed-off-by: Nikolay Aleksandrov <nikolay at cumulusnetworks.com> --- include/uapi/linux/if_link.h | 1 + net/bridge/br_netlink.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h index c5b15bfeabe2..c45c1d7894e7 100644 --- a/include/uapi/linux/if_link.h +++ b/include/uapi/linux/if_link.h @@ -292,6 +292,7 @@ enum { IFLA_BRPORT_PROXYARP, /* proxy ARP */ IFLA_BRPORT_LEARNING_SYNC, /* mac learning sync from device */ IFLA_BRPORT_PROXYARP_WIFI, /* proxy ARP for Wi-Fi */ + IFLA_BRPORT_ROOT_ID, /* designated root */ __IFLA_BRPORT_MAX }; #define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1) diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c index 330abf4b033a..cad4050310ee 100644 --- a/net/bridge/br_netlink.c +++ b/net/bridge/br_netlink.c @@ -127,6 +127,7 @@ static inline size_t br_port_info_size(void) + nla_total_size(1) /* IFLA_BRPORT_UNICAST_FLOOD */ + nla_total_size(1) /* IFLA_BRPORT_PROXYARP */ + nla_total_size(1) /* IFLA_BRPORT_PROXYARP_WIFI */ + + nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_ROOT_ID */ + 0; } @@ -160,7 +161,9 @@ static int br_port_fill_attrs(struct sk_buff *skb, nla_put_u8(skb, IFLA_BRPORT_UNICAST_FLOOD, !!(p->flags & BR_FLOOD)) || nla_put_u8(skb, IFLA_BRPORT_PROXYARP, !!(p->flags & BR_PROXYARP)) || nla_put_u8(skb, IFLA_BRPORT_PROXYARP_WIFI, - !!(p->flags & BR_PROXYARP_WIFI))) + !!(p->flags & BR_PROXYARP_WIFI)) || + nla_put(skb, IFLA_BRPORT_ROOT_ID, sizeof(struct ifla_bridge_id), + &p->designated_root)) return -EMSGSIZE; return 0; -- 2.4.3
kbuild test robot
2015-Oct-06 12:30 UTC
[Bridge] [PATCH net-next 1/8] bridge: netlink: export port's root id
Hi Nikolay, [auto build test ERROR on v4.3-rc4 -- if it's inappropriate base, please ignore] config: x86_64-randconfig-x016-201540 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All error/warnings (new ones prefixed by >>): net/bridge/br_netlink.c: In function 'br_port_info_size':>> net/bridge/br_netlink.c:116:27: error: invalid application of 'sizeof' to incomplete type 'struct ifla_bridge_id'+ nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_ROOT_ID */ ^ net/bridge/br_netlink.c: In function 'br_port_fill_attrs': net/bridge/br_netlink.c:151:47: error: invalid application of 'sizeof' to incomplete type 'struct ifla_bridge_id' nla_put(skb, IFLA_BRPORT_ROOT_ID, sizeof(struct ifla_bridge_id), ^ net/bridge/br_netlink.c: In function 'br_port_info_size':>> net/bridge/br_netlink.c:118:1: warning: control reaches end of non-void function [-Wreturn-type]} ^ vim +116 net/bridge/br_netlink.c 110 + nla_total_size(1) /* IFLA_BRPORT_PROTECT */ 111 + nla_total_size(1) /* IFLA_BRPORT_FAST_LEAVE */ 112 + nla_total_size(1) /* IFLA_BRPORT_LEARNING */ 113 + nla_total_size(1) /* IFLA_BRPORT_UNICAST_FLOOD */ 114 + nla_total_size(1) /* IFLA_BRPORT_PROXYARP */ 115 + nla_total_size(1) /* IFLA_BRPORT_PROXYARP_WIFI */ > 116 + nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_ROOT_ID */ 117 + 0; > 118 } 119 120 static inline size_t br_nlmsg_size(struct net_device *dev, u32 filter_mask) 121 { --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation -------------- next part -------------- A non-text attachment was scrubbed... Name: .config.gz Type: application/octet-stream Size: 25228 bytes Desc: not available URL: <http://lists.linuxfoundation.org/pipermail/bridge/attachments/20151006/01e922c3/attachment-0001.obj>
kbuild test robot
2015-Oct-06 12:30 UTC
[Bridge] [PATCH net-next 1/8] bridge: netlink: export port's root id
Hi Nikolay, [auto build test WARNING on v4.3-rc4 -- if it's inappropriate base, please ignore] config: i386-randconfig-x006-201540 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=i386 All warnings (new ones prefixed by >>): net/bridge/br_netlink.c: In function 'br_port_info_size': net/bridge/br_netlink.c:116:27: error: invalid application of 'sizeof' to incomplete type 'struct ifla_bridge_id' + nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_ROOT_ID */ ^ In file included from include/linux/linkage.h:4:0, from include/linux/kernel.h:6, from net/bridge/br_netlink.c:13: net/bridge/br_netlink.c: In function 'br_port_fill_attrs': net/bridge/br_netlink.c:151:47: error: invalid application of 'sizeof' to incomplete type 'struct ifla_bridge_id' nla_put(skb, IFLA_BRPORT_ROOT_ID, sizeof(struct ifla_bridge_id), ^ include/linux/compiler.h:147:28: note: in definition of macro '__trace_if' if (__builtin_constant_p((cond)) ? !!(cond) : \ ^>> net/bridge/br_netlink.c:139:2: note: in expansion of macro 'if'if (nla_put_u8(skb, IFLA_BRPORT_STATE, p->state) || ^ net/bridge/br_netlink.c:151:47: error: invalid application of 'sizeof' to incomplete type 'struct ifla_bridge_id' nla_put(skb, IFLA_BRPORT_ROOT_ID, sizeof(struct ifla_bridge_id), ^ include/linux/compiler.h:147:40: note: in definition of macro '__trace_if' if (__builtin_constant_p((cond)) ? !!(cond) : \ ^>> net/bridge/br_netlink.c:139:2: note: in expansion of macro 'if'if (nla_put_u8(skb, IFLA_BRPORT_STATE, p->state) || ^ net/bridge/br_netlink.c:151:47: error: invalid application of 'sizeof' to incomplete type 'struct ifla_bridge_id' nla_put(skb, IFLA_BRPORT_ROOT_ID, sizeof(struct ifla_bridge_id), ^ include/linux/compiler.h:158:16: note: in definition of macro '__trace_if' ______r = !!(cond); \ ^>> net/bridge/br_netlink.c:139:2: note: in expansion of macro 'if'if (nla_put_u8(skb, IFLA_BRPORT_STATE, p->state) || ^ net/bridge/br_netlink.c: In function 'br_port_info_size': net/bridge/br_netlink.c:118:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ vim +/if +139 net/bridge/br_netlink.c 11dc1f36 Stephen Hemminger 2006-05-25 7 * This program is free software; you can redistribute it and/or 11dc1f36 Stephen Hemminger 2006-05-25 8 * modify it under the terms of the GNU General Public License 11dc1f36 Stephen Hemminger 2006-05-25 9 * as published by the Free Software Foundation; either version 11dc1f36 Stephen Hemminger 2006-05-25 10 * 2 of the License, or (at your option) any later version. 11dc1f36 Stephen Hemminger 2006-05-25 11 */ 11dc1f36 Stephen Hemminger 2006-05-25 12 11dc1f36 Stephen Hemminger 2006-05-25 @13 #include <linux/kernel.h> 5a0e3ad6 Tejun Heo 2010-03-24 14 #include <linux/slab.h> bb900b27 stephen hemminger 2011-04-04 15 #include <linux/etherdevice.h> 32fe21c0 Thomas Graf 2007-03-22 16 #include <net/rtnetlink.h> 881d966b Eric W. Biederman 2007-09-17 17 #include <net/net_namespace.h> b854272b Denis V. Lunev 2007-12-01 18 #include <net/sock.h> 407af329 Vlad Yasevich 2013-02-13 19 #include <uapi/linux/if_bridge.h> bb900b27 stephen hemminger 2011-04-04 20 11dc1f36 Stephen Hemminger 2006-05-25 21 #include "br_private.h" b03b6dd5 Vitalii Demianets 2011-11-25 22 #include "br_private_stp.h" 11dc1f36 Stephen Hemminger 2006-05-25 23 fed0a159 Roopa Prabhu 2015-02-25 24 static int br_get_num_vlan_infos(const struct net_port_vlans *pv, fed0a159 Roopa Prabhu 2015-02-25 25 u32 filter_mask) fed0a159 Roopa Prabhu 2015-02-25 26 { fed0a159 Roopa Prabhu 2015-02-25 27 u16 vid_range_start = 0, vid_range_end = 0; fed0a159 Roopa Prabhu 2015-02-25 28 u16 vid_range_flags = 0; fed0a159 Roopa Prabhu 2015-02-25 29 u16 pvid, vid, flags; fed0a159 Roopa Prabhu 2015-02-25 30 int num_vlans = 0; fed0a159 Roopa Prabhu 2015-02-25 31 fed0a159 Roopa Prabhu 2015-02-25 32 if (filter_mask & RTEXT_FILTER_BRVLAN) fed0a159 Roopa Prabhu 2015-02-25 33 return pv->num_vlans; fed0a159 Roopa Prabhu 2015-02-25 34 fed0a159 Roopa Prabhu 2015-02-25 35 if (!(filter_mask & RTEXT_FILTER_BRVLAN_COMPRESSED)) fed0a159 Roopa Prabhu 2015-02-25 36 return 0; fed0a159 Roopa Prabhu 2015-02-25 37 fed0a159 Roopa Prabhu 2015-02-25 38 /* Count number of vlan info's fed0a159 Roopa Prabhu 2015-02-25 39 */ fed0a159 Roopa Prabhu 2015-02-25 40 pvid = br_get_pvid(pv); fed0a159 Roopa Prabhu 2015-02-25 41 for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID) { fed0a159 Roopa Prabhu 2015-02-25 42 flags = 0; fed0a159 Roopa Prabhu 2015-02-25 43 if (vid == pvid) fed0a159 Roopa Prabhu 2015-02-25 44 flags |= BRIDGE_VLAN_INFO_PVID; fed0a159 Roopa Prabhu 2015-02-25 45 fed0a159 Roopa Prabhu 2015-02-25 46 if (test_bit(vid, pv->untagged_bitmap)) fed0a159 Roopa Prabhu 2015-02-25 47 flags |= BRIDGE_VLAN_INFO_UNTAGGED; fed0a159 Roopa Prabhu 2015-02-25 48 fed0a159 Roopa Prabhu 2015-02-25 49 if (vid_range_start == 0) { fed0a159 Roopa Prabhu 2015-02-25 50 goto initvars; fed0a159 Roopa Prabhu 2015-02-25 51 } else if ((vid - vid_range_end) == 1 && fed0a159 Roopa Prabhu 2015-02-25 52 flags == vid_range_flags) { fed0a159 Roopa Prabhu 2015-02-25 53 vid_range_end = vid; fed0a159 Roopa Prabhu 2015-02-25 54 continue; fed0a159 Roopa Prabhu 2015-02-25 55 } else { fed0a159 Roopa Prabhu 2015-02-25 56 if ((vid_range_end - vid_range_start) > 0) fed0a159 Roopa Prabhu 2015-02-25 57 num_vlans += 2; fed0a159 Roopa Prabhu 2015-02-25 58 else fed0a159 Roopa Prabhu 2015-02-25 59 num_vlans += 1; fed0a159 Roopa Prabhu 2015-02-25 60 } fed0a159 Roopa Prabhu 2015-02-25 61 initvars: fed0a159 Roopa Prabhu 2015-02-25 62 vid_range_start = vid; fed0a159 Roopa Prabhu 2015-02-25 63 vid_range_end = vid; fed0a159 Roopa Prabhu 2015-02-25 64 vid_range_flags = flags; fed0a159 Roopa Prabhu 2015-02-25 65 } fed0a159 Roopa Prabhu 2015-02-25 66 fed0a159 Roopa Prabhu 2015-02-25 67 if (vid_range_start != 0) { fed0a159 Roopa Prabhu 2015-02-25 68 if ((vid_range_end - vid_range_start) > 0) fed0a159 Roopa Prabhu 2015-02-25 69 num_vlans += 2; fed0a159 Roopa Prabhu 2015-02-25 70 else fed0a159 Roopa Prabhu 2015-02-25 71 num_vlans += 1; fed0a159 Roopa Prabhu 2015-02-25 72 } fed0a159 Roopa Prabhu 2015-02-25 73 fed0a159 Roopa Prabhu 2015-02-25 74 return num_vlans; fed0a159 Roopa Prabhu 2015-02-25 75 } fed0a159 Roopa Prabhu 2015-02-25 76 fed0a159 Roopa Prabhu 2015-02-25 77 static size_t br_get_link_af_size_filtered(const struct net_device *dev, fed0a159 Roopa Prabhu 2015-02-25 78 u32 filter_mask) b7853d73 Roopa Prabhu 2015-02-21 79 { b7853d73 Roopa Prabhu 2015-02-21 80 struct net_port_vlans *pv; fed0a159 Roopa Prabhu 2015-02-25 81 int num_vlan_infos; b7853d73 Roopa Prabhu 2015-02-21 82 2f56f6be Johannes Berg 2015-03-03 83 rcu_read_lock(); b7853d73 Roopa Prabhu 2015-02-21 84 if (br_port_exists(dev)) 2f56f6be Johannes Berg 2015-03-03 85 pv = nbp_get_vlan_info(br_port_get_rcu(dev)); b7853d73 Roopa Prabhu 2015-02-21 86 else if (dev->priv_flags & IFF_EBRIDGE) b7853d73 Roopa Prabhu 2015-02-21 87 pv = br_get_vlan_info((struct net_bridge *)netdev_priv(dev)); b7853d73 Roopa Prabhu 2015-02-21 88 else 2f56f6be Johannes Berg 2015-03-03 89 pv = NULL; 2f56f6be Johannes Berg 2015-03-03 90 if (pv) fed0a159 Roopa Prabhu 2015-02-25 91 num_vlan_infos = br_get_num_vlan_infos(pv, filter_mask); 2f56f6be Johannes Berg 2015-03-03 92 else 2f56f6be Johannes Berg 2015-03-03 93 num_vlan_infos = 0; 2f56f6be Johannes Berg 2015-03-03 94 rcu_read_unlock(); 2f56f6be Johannes Berg 2015-03-03 95 fed0a159 Roopa Prabhu 2015-02-25 96 if (!num_vlan_infos) fed0a159 Roopa Prabhu 2015-02-25 97 return 0; fed0a159 Roopa Prabhu 2015-02-25 98 b7853d73 Roopa Prabhu 2015-02-21 99 /* Each VLAN is returned in bridge_vlan_info along with flags */ fed0a159 Roopa Prabhu 2015-02-25 100 return num_vlan_infos * nla_total_size(sizeof(struct bridge_vlan_info)); b7853d73 Roopa Prabhu 2015-02-21 101 } b7853d73 Roopa Prabhu 2015-02-21 102 25c71c75 stephen hemminger 2012-11-13 103 static inline size_t br_port_info_size(void) 25c71c75 stephen hemminger 2012-11-13 104 { 25c71c75 stephen hemminger 2012-11-13 105 return nla_total_size(1) /* IFLA_BRPORT_STATE */ 25c71c75 stephen hemminger 2012-11-13 106 + nla_total_size(2) /* IFLA_BRPORT_PRIORITY */ 25c71c75 stephen hemminger 2012-11-13 107 + nla_total_size(4) /* IFLA_BRPORT_COST */ 25c71c75 stephen hemminger 2012-11-13 108 + nla_total_size(1) /* IFLA_BRPORT_MODE */ a2e01a65 stephen hemminger 2012-11-13 109 + nla_total_size(1) /* IFLA_BRPORT_GUARD */ 1007dd1a stephen hemminger 2012-11-13 110 + nla_total_size(1) /* IFLA_BRPORT_PROTECT */ 3da889b6 stephen hemminger 2013-03-11 111 + nla_total_size(1) /* IFLA_BRPORT_FAST_LEAVE */ 9ba18891 Vlad Yasevich 2013-06-05 112 + nla_total_size(1) /* IFLA_BRPORT_LEARNING */ 867a5943 Vlad Yasevich 2013-06-05 113 + nla_total_size(1) /* IFLA_BRPORT_UNICAST_FLOOD */ 355b9f9d Nikolay Aleksandrov 2015-08-04 114 + nla_total_size(1) /* IFLA_BRPORT_PROXYARP */ 786c2077 Nikolay Aleksandrov 2015-08-04 115 + nla_total_size(1) /* IFLA_BRPORT_PROXYARP_WIFI */ 1706db4b Nikolay Aleksandrov 2015-10-06 116 + nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_ROOT_ID */ 25c71c75 stephen hemminger 2012-11-13 117 + 0; 25c71c75 stephen hemminger 2012-11-13 118 } 25c71c75 stephen hemminger 2012-11-13 119 fed0a159 Roopa Prabhu 2015-02-25 120 static inline size_t br_nlmsg_size(struct net_device *dev, u32 filter_mask) 339bf98f Thomas Graf 2006-11-10 121 { 339bf98f Thomas Graf 2006-11-10 122 return NLMSG_ALIGN(sizeof(struct ifinfomsg)) 339bf98f Thomas Graf 2006-11-10 123 + nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */ 339bf98f Thomas Graf 2006-11-10 124 + nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */ 339bf98f Thomas Graf 2006-11-10 125 + nla_total_size(4) /* IFLA_MASTER */ 339bf98f Thomas Graf 2006-11-10 126 + nla_total_size(4) /* IFLA_MTU */ 339bf98f Thomas Graf 2006-11-10 127 + nla_total_size(4) /* IFLA_LINK */ 339bf98f Thomas Graf 2006-11-10 128 + nla_total_size(1) /* IFLA_OPERSTATE */ b7853d73 Roopa Prabhu 2015-02-21 129 + nla_total_size(br_port_info_size()) /* IFLA_PROTINFO */ fed0a159 Roopa Prabhu 2015-02-25 130 + nla_total_size(br_get_link_af_size_filtered(dev, fed0a159 Roopa Prabhu 2015-02-25 131 filter_mask)); /* IFLA_AF_SPEC */ 25c71c75 stephen hemminger 2012-11-13 132 } 25c71c75 stephen hemminger 2012-11-13 133 25c71c75 stephen hemminger 2012-11-13 134 static int br_port_fill_attrs(struct sk_buff *skb, 25c71c75 stephen hemminger 2012-11-13 135 const struct net_bridge_port *p) 25c71c75 stephen hemminger 2012-11-13 136 { 25c71c75 stephen hemminger 2012-11-13 137 u8 mode = !!(p->flags & BR_HAIRPIN_MODE); 25c71c75 stephen hemminger 2012-11-13 138 25c71c75 stephen hemminger 2012-11-13 @139 if (nla_put_u8(skb, IFLA_BRPORT_STATE, p->state) || 25c71c75 stephen hemminger 2012-11-13 140 nla_put_u16(skb, IFLA_BRPORT_PRIORITY, p->priority) || 25c71c75 stephen hemminger 2012-11-13 141 nla_put_u32(skb, IFLA_BRPORT_COST, p->path_cost) || a2e01a65 stephen hemminger 2012-11-13 142 nla_put_u8(skb, IFLA_BRPORT_MODE, mode) || :::::: The code at line 139 was first introduced by commit :::::: 25c71c75ac87508528db053b818944f3650dd7a6 bridge: bridge port parameters over netlink :::::: TO: stephen hemminger <shemminger at vyatta.com> :::::: CC: David S. Miller <davem at davemloft.net> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation -------------- next part -------------- A non-text attachment was scrubbed... Name: .config.gz Type: application/octet-stream Size: 30865 bytes Desc: not available URL: <http://lists.linuxfoundation.org/pipermail/bridge/attachments/20151006/ae465214/attachment-0001.obj>
Nikolay Aleksandrov
2015-Oct-06 12:43 UTC
[Bridge] [PATCH net-next 1/8] bridge: netlink: export port's root id
On 10/06/2015 02:30 PM, kbuild test robot wrote:> Hi Nikolay, > > [auto build test ERROR on v4.3-rc4 -- if it's inappropriate base, please ignore] > > config: x86_64-randconfig-x016-201540 (attached as .config) > reproduce: > # save the attached .config to linux build tree > make ARCH=x86_64 > > All error/warnings (new ones prefixed by >>): > > net/bridge/br_netlink.c: In function 'br_port_info_size': >>> net/bridge/br_netlink.c:116:27: error: invalid application of 'sizeof' to incomplete type 'struct ifla_bridge_id' > + nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_ROOT_ID */ > ^ > net/bridge/br_netlink.c: In function 'br_port_fill_attrs': > net/bridge/br_netlink.c:151:47: error: invalid application of 'sizeof' to incomplete type 'struct ifla_bridge_id' > nla_put(skb, IFLA_BRPORT_ROOT_ID, sizeof(struct ifla_bridge_id), > ^ > net/bridge/br_netlink.c: In function 'br_port_info_size': >>> net/bridge/br_netlink.c:118:1: warning: control reaches end of non-void function [-Wreturn-type] > } > ^This is incorrect, the structure is in net-next. My previous set introduced it: commit 5127c81f84de ("bridge: netlink: export root id") Cheers, Nik