diff options
author | stephen hemminger <shemminger@vyatta.com> | 2012-06-26 01:48:45 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-07-16 11:47:37 -0400 |
commit | 4acd9a65e16de99c4afe89e4ac8a16b501c92450 (patch) | |
tree | 403b36acc479ada1d2edf20f5dab3a87db329276 | |
parent | d3a673fb54a4d7f6d8cb4f7e72dac5f91583e6f1 (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.c | 1 | ||||
-rw-r--r-- | net/bridge/br_netlink.c | 2 | ||||
-rw-r--r-- | net/bridge/br_private.h | 1 |
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 | ||
206 | static struct rtnl_link_ops br_link_ops __read_mostly = { | 206 | struct 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 */ |
532 | extern struct rtnl_link_ops br_link_ops; | ||
532 | extern int br_netlink_init(void); | 533 | extern int br_netlink_init(void); |
533 | extern void br_netlink_fini(void); | 534 | extern void br_netlink_fini(void); |
534 | extern void br_ifinfo_notify(int event, struct net_bridge_port *port); | 535 | extern void br_ifinfo_notify(int event, struct net_bridge_port *port); |