Cong Wang <xiyou.wangc...@gmail.com> writes: > On Wed, May 31, 2017 at 11:32 PM, Eric W. Biederman > <ebied...@xmission.com> wrote: >> Cong Wang <xiyou.wangc...@gmail.com> writes: >>> Network namespace does not special-case the physical devices, >>> it treats them all equally as abstract net devices. >> >> Absolutely not true. >> >> The relevant code is in net/core/dev.c:default_device_exit >> >> If a network device does not implement rntl_link_ops it is returned to >> the initial network namespace. Anything else will loose physical >> devices. > > Hmm, I never noticed that if check... > >> >> Only for pure software based devices do we delete them. Perhaps your >> sub interface implements rtnl_link_ops? Either that or something is >> still holding a reference to your network namespace, which would prevent >> the network device from being returned. >> > > But this simply sucks: > > snprintf(fb_name, IFNAMSIZ, "dev%d", dev->ifindex); > err = dev_change_net_namespace(dev, &init_net, fb_name); > if (err) { > pr_emerg("%s: failed to move %s to init_net: %d\n", > __func__, dev->name, err); > BUG(); > } > > It is essentially hard to handle the error here, but it is quite easy to > trigger such BUG() by naming other device devX, it is no better > than just losing it.
The rename only happens if there is a conflicting device name. Beyond that there is the entire hotplug functionality so it should be possible to automatically detect a new device in your network namespace and do something with it. Eric