• L
    network: save bridge name in ActualNetDef when actualType==network too · a3609121
    Laine Stump 提交于
    When the actualType of a virDomainNetDef is "network", it means that
    we are connecting to a libvirt-managed network (routed, natted, or
    isolated) which does use a bridge device (created by libvirt). In the
    past we have required drivers such as qemu to call the public API to
    retrieve the bridge name in this case (even though it is available in
    the NetDef's ActualNetDef if the actualType is "bridge" (i.e., an
    externally-created bridge that isn't managed by libvirt). There is no
    real reason for this difference, and as a matter of fact it
    complicates things for qemu. Also, there is another bridge-related
    attribute (macTableManager) that will need to be available in both
    cases, so this makes things consistent.
    
    In order to avoid problems when restarting libvirtd after an update
    from an older version that *doesn't* store the network's bridgename in
    the ActualNetDef, we also need to put it in place during
    networkNotifyActualDevice() (this function is run for each interface
    of each domain whenever libvirtd is restarted).
    
    Along with making the bridge name available in the internal object, it
    is also now reported in the <source> element of the <interface> state
    XML (or the <actual> subelement in the internally-stored format).
    
    The one oddity about this change is that usually there is a separate
    union for every different "type" in a higher level object (e.g. in the
    case of a virDomainNetDef there are separate "network" and "bridge"
    members of the union that pivots on the type), but in this case
    network and bridge types both have exactly the same attributes, so the
    "bridge" member is used for both type==network and type==bridge.
    a3609121
domain_conf.c 694.6 KB