• L
    qemu: don't reject interface update when switching to/from bridged network · bc85c34e
    Laine Stump 提交于
    If virDomainUpdateDeviceFlags() was used to update an <interface>, and
    the interface type changed from type='network' where the network was
    an unmanaged bridge (so actualType == bridge) to type='bridge'
    (i.e. actualType *also* == bridge), the update would fail due to the
    perceived change in type.
    
    In practice it is okay to switch between any interface types that end
    up using a tap device, since libvirt just needs to attach the device
    to a new bridge. But in this case we were erroneously rejecting it due
    to a conditional that was too restrictive. This is what the code was doing:
    
      if (old->type != new->type)
         [allow update]
      else
         if ((oldActual == bridge and newActual == network)
             || (oldActual == network and newActual == bridge)) {
             [allow update]
         else
             [error]
    
    In the case described above though, old->type and new->type don't match,
    but oldActual and newActual are both 'bridge', so we get an error.
    
    This patch changes the inner conditional so that any combination of
    'network' and 'bridge' for oldActual and newActual, since they both
    use a tap device connected to a bridge.
    Signed-off-by: NLaine Stump <laine@redhat.com>
    Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
    bc85c34e
qemu_hotplug.c 212.1 KB