[lxc-devel] [PATCH] setup_netdev: re-read ifindex in LXC_NET_PHYS case

Bogdan Purcareata bogdan.purcareata at freescale.com
Thu Nov 14 15:38:41 UTC 2013


> -----Original Message-----
> From: Serge Hallyn [mailto:serge.hallyn at ubuntu.com]
> Sent: Thursday, November 14, 2013 5:24 PM
> To: Purcareata Bogdan-B43198
> Cc: lxc-devel at lists.sourceforge.net
> Subject: Re: [lxc-devel] [PATCH] setup_netdev: re-read ifindex in LXC_NET_PHYS
> case
> 
> Quoting Bogdan Purcareata (bogdan.purcareata at freescale.com):
> > When moving an interface from the host netns to a container's,
> > the ifindex might not remain the same. This happens when the
> > index of the host interface is already assigned to another interface
> > in the new netns.
> >
> > For veth/vlan/macvlan, virtual interfaces are first created on the host,
> > and then moved in the container. Since they are created after all other
> > interfaces are discovered, there is no chance for its assigned ifindex
> > to be already present in a freshly created netns, because it's a greater
> > number.
> >
> > However, when moving a physical interface, there is a chance that its
> > ifindex in the host netns is not free in the new netns. The patch
> > forces ifindex re-read for the LXC_NET_PHYS case to update the
> > lxc_netdev structure.
> >
> > Signed-off-by: Bogdan Purcareata <bogdan.purcareata at freescale.com>
> 
> Thanks.  I wasn't ignoring your previous email, was rather still
> considering :)

No problem, I thought about it a little more myself and gave it a shot at a fix attempt.

Thank you for the feedback!

> 
> Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>
> 
> Though really, in this case we should skip the subsequent
> index_to_name, but that's not needed for correctness.
> 
> > ---
> >  src/lxc/conf.c | 8 ++++++++
> >  1 file changed, 8 insertions(+)
> >
> > diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> > index 6b3f318..08b0d0f 100644
> > --- a/src/lxc/conf.c
> > +++ b/src/lxc/conf.c
> > @@ -1846,6 +1846,14 @@ static int setup_netdev(struct lxc_netdev *netdev)
> >  		return 0;
> >  	}
> >
> > +	/* get the new ifindex in case of physical netdev */
> > +	if (netdev->type == LXC_NET_PHYS)
> > +		if (!(netdev->ifindex = if_nametoindex(netdev->link))) {
> > +			ERROR("failed to get ifindex for %s",
> > +				netdev->link);
> > +			return -1;
> > +		}
> > +
> >  	/* retrieve the name of the interface */
> >  	if (!if_indextoname(netdev->ifindex, current_ifname)) {
> >  		ERROR("no interface corresponding to index '%d'",
> > --
> > 1.7.11.7
> >
> >
> >
> > ----------------------------------------------------------------------------
> --
> > DreamFactory - Open Source REST & JSON Services for HTML5 & Native Apps
> > OAuth, Users, Roles, SQL, NoSQL, BLOB Storage and External API Access
> > Free app hosting. Or install the open source package on any LAMP server.
> > Sign up and see examples for AngularJS, jQuery, Sencha Touch and Native!
> > http://pubads.g.doubleclick.net/gampad/clk?id=63469471&iu=/4140/ostg.clktrk
> > _______________________________________________
> > Lxc-devel mailing list
> > Lxc-devel at lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/lxc-devel






More information about the lxc-devel mailing list