aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstephen hemminger <shemminger@vyatta.com>2012-06-26 01:48:45 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-07-16 11:47:37 -0400
commit4acd9a65e16de99c4afe89e4ac8a16b501c92450 (patch)
tree403b36acc479ada1d2edf20f5dab3a87db329276
parentd3a673fb54a4d7f6d8cb4f7e72dac5f91583e6f1 (diff)
bridge: Assign rtnl_link_ops to bridge devices created via ioctl (v2)
[ Upstream commit 149ddd83a92b02c658d6c61f3276eb6500d585e8 ] This ensures that bridges created with brctl(8) or ioctl(2) directly also carry IFLA_LINKINFO when dumped over netlink. This also allows to create a bridge with ioctl(2) and delete it with RTM_DELLINK. Signed-off-by: Thomas Graf <tgraf@suug.ch> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--net/bridge/br_if.c1
-rw-r--r--net/bridge/br_netlink.c2
-rw-r--r--net/bridge/br_private.h1
3 files changed, 3 insertions, 1 deletions
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index 449087373d8..eae6a4e9cbf 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -241,6 +241,7 @@ int br_add_bridge(struct net *net, const char *name)
241 return -ENOMEM; 241 return -ENOMEM;
242 242
243 dev_net_set(dev, net); 243 dev_net_set(dev, net);
244 dev->rtnl_link_ops = &br_link_ops;
244 245
245 res = register_netdev(dev); 246 res = register_netdev(dev);
246 if (res) 247 if (res)
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index 2c160552568..71861a9c400 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
@@ -203,7 +203,7 @@ static int br_validate(struct nlattr *tb[], struct nlattr *data[])
203 return 0; 203 return 0;
204} 204}
205 205
206static struct rtnl_link_ops br_link_ops __read_mostly = { 206struct rtnl_link_ops br_link_ops __read_mostly = {
207 .kind = "bridge", 207 .kind = "bridge",
208 .priv_size = sizeof(struct net_bridge), 208 .priv_size = sizeof(struct net_bridge),
209 .setup = br_dev_setup, 209 .setup = br_dev_setup,
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index 1ca1b1c7560..7c1f3a09712 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -529,6 +529,7 @@ extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr)
529#endif 529#endif
530 530
531/* br_netlink.c */ 531/* br_netlink.c */
532extern struct rtnl_link_ops br_link_ops;
532extern int br_netlink_init(void); 533extern int br_netlink_init(void);
533extern void br_netlink_fini(void); 534extern void br_netlink_fini(void);
534extern void br_ifinfo_notify(int event, struct net_bridge_port *port); 535extern void br_ifinfo_notify(int event, struct net_bridge_port *port);