On Thu, Aug 29, 2013 at 11:28:43AM +0100, Daniel P. Berrange wrote:
On Thu, Aug 29, 2013 at 01:00:15PM +0300, Oskari Saarenmaa wrote:
> Replace the loop trying to find a free veth interface name for the container
> by assigning the container if name to parent name + 'p' by default.
> Interface name selection logic is susceptible to race conditions, so try to
> select just one name by default and use that as a template for the second
> name. The parent name can also be overriden in domain configuration.
This doesn't do anything to solve the race condition AFAICT. You still
have the window between finding a free name, and calling the ip command
to allocate it.
That's true, but I think this change makes sense as a standalone change for
now; it makes sure libvirt uses the caller assigned names (if any) which
let's the caller work around this by selecting the name they like.
What we need here is a change that will catch the failure from the
ip
command, and then go back to the start and find free names and retry
the ip command.
I don't like this approach. It would require us to parse ip's stderr which
would be quite a bit of fragile code to handle a case that shouldn't ever
happen. We should just select a unique interface name in the first place, I
don't see any benefits in trying to force interface names to use low
integers in their names.
/ Oskari