Message ID | CAF2d9jhTcVgLHs_iqw+RRS=WhMtRF0ra5SygGMymuYQUW6HP0A@mail.gmail.com |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
"Mahesh Bandewar (महेश बंडेवार)" <maheshb@google.com> writes: > Creation of new network namespace is almost always followed up by > bringing up the loopback device. > > ip netns add foo > ip -netns foo link set lo up > > I'm not sure if there are any consequences of bringing the device UP > at the creation of network-namespace. Hard coded in net/core/net_namespace.c:copy_net_ns is definitely the wrong place in the code for something like this. If this lives anywhere it should live in driver/net/loopback.c, or possibly in net/core/dev.c:net_dev_init. If we want this we want to match what we do when we the primary network namespace. Just so that there are no unneeded surprises with network namespaces. Eric
On Thu, Jun 29, 2017 at 6:08 PM, Eric W. Biederman <ebiederm@xmission.com> wrote: > "Mahesh Bandewar (महेश बंडेवार)" <maheshb@google.com> writes: > >> Creation of new network namespace is almost always followed up by >> bringing up the loopback device. >> >> ip netns add foo >> ip -netns foo link set lo up >> >> I'm not sure if there are any consequences of bringing the device UP >> at the creation of network-namespace.jjh > > Hard coded in net/core/net_namespace.c:copy_net_ns is definitely the > wrong place in the code for something like this. If this lives anywhere > it should live in driver/net/loopback.c, or possibly in > net/core/dev.c:net_dev_init. > interestingly dev_open() needs RTNL while it's not recommended at net_dev_init() time. Also net_dev_init() is called at the sub-system registration, do you mean loopback_net_init() time? > If we want this we want to match what we do when we the primary network > namespace. Just so that there are no unneeded surprises with network > namespaces. > Yes, correct, it should be same whether it's init-net or some other. I can add the IFF_UP flag during loopback_setup() but then it will not perform anything that is done during dev_open() phase. I'll try moving the code to loopback_net_init() to achieve the same result so that I can avoid that hard-coding too. Thanks for comments Eric. --mahesh.. > Eric
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 2178db8e47cd..ac0e86c9a17f 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -428,6 +428,11 @@ struct net *copy_net_ns(unsigned long flags, net_drop_ns(net); return ERR_PTR(rv); } + /* Set the loopback device UP */ + rtnl_lock(); + dev_open(net->loopback_dev); + rtnl_unlock(); + return net; }