[libvirt] [PATCH] qemu: fix ethernet network type ip/route assign

Vasiliy Tolstov v.tolstov at selfip.ru
Thu Aug 25 06:59:55 UTC 2016

25 Авг 2016 г. 9:00 пользователь "Laine Stump" <laine at laine.org> написал:
> On 08/24/2016 02:32 PM, Laine Stump wrote:
>> On 08/24/2016 12:09 PM, Vasiliy Tolstov wrote:
>>> IP and routes assigenment incorrectly placed on device stop.
>>> This is fixing it, also change device state according to xml.
>>> Note that as i know in linux routes can't be created on device that does
>>> not up.
>>> Signed-off-by: Vasiliy Tolstov <v.tolstov at selfip.ru>
>>> ---
>>>   src/qemu/qemu_interface.c | 23 ++++++++++++++++++-----
>>>   1 file changed, 18 insertions(+), 5 deletions(-)
>>> diff --git a/src/qemu/qemu_interface.c b/src/qemu/qemu_interface.c
>>> index e637d21fb77a..f80feff2d545 100644
>>> --- a/src/qemu/qemu_interface.c
>>> +++ b/src/qemu/qemu_interface.c
>>> @@ -108,8 +108,25 @@ qemuInterfaceStartDevice(virDomainNetDefPtr net)
>>>           break;
>>>       }
>>>   -    case VIR_DOMAIN_NET_TYPE_USER:
>>> +        switch (dev->linkstate) {
>>> +                if ((ret = virNetDevSetOnline(dev->ifname, true)) < 0)
>>> +                    goto cleanup;
>>> +                break;
>>> +
>>> +                if ((ret = virNetDevSetOnline(dev->ifname, false)) < 0)
>>> +                    goto cleanup;
>>> +                break;
>>> +        }
>> The Online/Offline handling of the tap device for ethernet devices
should be identical to that used for network/bridge network devices. If
something is necessary (and it may be), it should be in a separate patch.
> More on this - aside from code that you added in your patch 9717d6
"autocreate tap device for ethernet network type", the linkstate of a
device is only used to send qemu commands controlling the linkstate of the
*guest* device, but never to set the online status of the host side of the
tap device (several of us missed this during the review of multiple
versions of patches leading to 9717d6; heck, I didn't even realize it when
looking at this new patch until I went back and read through all the code
> This (plus a bit of investigation about when tap devices for bridge
networks are set online) leads to the following:
> 1) The above code is erroneous. It shouldn't be there at all.
> 2) The code in qemuDomainChangeNetLinkState() that modifies the online
status of the tap device when the interface is type='ethernet' also should
not be there.
> 3) The reason the tap interface isn't IFF_UP is that virNetDevTapCreate()
(called from qemuInterfaceEthernetConnect() in the same patch 9717d6)
*ignores the VIR_NETDEV_TAP_CREATE_IFUP flag* (and it is documented this
way). That's never been noticed before because the only previous call to
virNetDevTapCreate() is from virNetDevTapCreateInBridgePort(), which sets
IFF_UP on the tap device itself after calling virNetDevTapCreate().
> My assumption is that it was done this way possibly because the tap
device needed to be offline during some part of the initialization (or
possibly because that's just the way some function was split up during a
refactoring or something).
> Anyway, I think there are 3 patches needed:
> 1) The part of your patch that just moves the virNetDevIPInfoAddToDev()
> 2) A patch to remove the virNetDevSetOnline() from
> 3) A patch to call virNetDevSetOnline() after calling virNetDevTapCreate()
> I just modified your patch, created the other two patches, and sent the
resulting patch series to the list.
> If you can try it out and verify that it works for you (it works for me),
then I'll push it in the morning ( US EST) so it's in before the freeze.

May be I miss something but in you patch you always up tap device, but if I
create domain with link down in XML this not right.
What do you think?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160825/e6c63294/attachment-0001.htm>

More information about the libvir-list mailing list