netns bridge: allow bridges in netns!
Bridge as netdevice doesn't cross netns boundaries. Bridge ports and bridge itself live in same netns. Notifiers are fixed. netns propagated from userspace socket for setup and teardown. Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Acked-by: Stephen Hemminger <shemming@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
5337407c67
commit
4aa678ba44
@@ -168,7 +168,7 @@ static void del_br(struct net_bridge *br)
|
||||
unregister_netdevice(br->dev);
|
||||
}
|
||||
|
||||
static struct net_device *new_bridge_dev(const char *name)
|
||||
static struct net_device *new_bridge_dev(struct net *net, const char *name)
|
||||
{
|
||||
struct net_bridge *br;
|
||||
struct net_device *dev;
|
||||
@@ -178,6 +178,7 @@ static struct net_device *new_bridge_dev(const char *name)
|
||||
|
||||
if (!dev)
|
||||
return NULL;
|
||||
dev_net_set(dev, net);
|
||||
|
||||
br = netdev_priv(dev);
|
||||
br->dev = dev;
|
||||
@@ -262,12 +263,12 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br,
|
||||
return p;
|
||||
}
|
||||
|
||||
int br_add_bridge(const char *name)
|
||||
int br_add_bridge(struct net *net, const char *name)
|
||||
{
|
||||
struct net_device *dev;
|
||||
int ret;
|
||||
|
||||
dev = new_bridge_dev(name);
|
||||
dev = new_bridge_dev(net, name);
|
||||
if (!dev)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -294,13 +295,13 @@ out_free:
|
||||
goto out;
|
||||
}
|
||||
|
||||
int br_del_bridge(const char *name)
|
||||
int br_del_bridge(struct net *net, const char *name)
|
||||
{
|
||||
struct net_device *dev;
|
||||
int ret = 0;
|
||||
|
||||
rtnl_lock();
|
||||
dev = __dev_get_by_name(&init_net, name);
|
||||
dev = __dev_get_by_name(net, name);
|
||||
if (dev == NULL)
|
||||
ret = -ENXIO; /* Could not find device */
|
||||
|
||||
|
Reference in New Issue
Block a user