[libvirt] [PATCH v3 05/36] network: use 'bridge' as actual type instead of 'network'

Daniel P. Berrangé berrange at redhat.com
Fri Mar 22 14:55:01 UTC 2019


On Thu, Mar 21, 2019 at 09:07:36PM -0400, Cole Robinson wrote:
> On 3/19/19 8:46 AM, Daniel P. Berrangé wrote:
> > Ports allocated on virtual networks with type=nat|route|open all get
> > given an actual type of 'network'.
> > 
> > Only ports in networks with type=bridge use an actual type of 'bridge'.
> > 
> > This distinction makes little sense since the virtualization drivers
> > will treat both actual types in exactly the same way, as they're all
> > just bridge devices a VM needs to be connected to.
> > 
> > This doesn't affect user visible XML since the "actual" device XML
> > is internal only, but we need code to convert the data upgrades.
> > 
> > Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> > ---
> >  src/network/bridge_driver.c | 20 ++++++++++++--------
> >  1 file changed, 12 insertions(+), 8 deletions(-)
> > 
> 
> Conceptually this makes sense. I wonder what the original motivation for
> the differentiation was. This also makes me wish there was a separate
> enum for the internal actual->type field, it would make ambiguous code
> much more readable
> 
> > diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> > index 4770dd1e4e..40122612c8 100644
> > --- a/src/network/bridge_driver.c
> > +++ b/src/network/bridge_driver.c
> > @@ -4454,11 +4454,7 @@ networkAllocateActualDevice(virNetworkPtr net,
> >      case VIR_NETWORK_FORWARD_NAT:
> >      case VIR_NETWORK_FORWARD_ROUTE:
> >      case VIR_NETWORK_FORWARD_OPEN:
> > -        /* for these forward types, the actual net type really *is*
> > -         * NETWORK; we just keep the info from the portgroup in
> > -         * iface->data.network.actual
> > -         */
> > -        iface->data.network.actual->type = VIR_DOMAIN_NET_TYPE_NETWORK;
> > +        iface->data.network.actual->type = VIR_DOMAIN_NET_TYPE_BRIDGE;
> >  
> >          /* we also store the bridge device and macTableManager settings
> >           * in iface->data.network.actual->data.bridge for later use
> > @@ -4832,6 +4828,15 @@ networkNotifyActualDevice(virNetworkPtr net,
> >                      netdef->bridge) < 0))
> >              goto error;
> >  
> > +    /* Older libvirtd uses actualType==network, but we now
> > +     * just use actualType==bridge, as nothing needs to
> > +     * distinguish the two cases, and this simplifies virt
> > +     * drive code */
> > +    if (actualType == VIR_DOMAIN_NET_TYPE_NETWORK) {
> > +        iface->data.network.actual->type = VIR_DOMAIN_NET_TYPE_BRIDGE;
> > +        actualType = VIR_DOMAIN_NET_TYPE_BRIDGE;
> > +    }
> > +
> 
> Why do this here and not at the status XML parse time? This code path is
> only called on reconnected devices correct? So that should always be
> hitting the status XML parser too AFAICT. That would make it easier to
> audit any TYPE_NETWORK paths in the status parser as well

This has to come after the code that is a few lines higher outside
the diffstat. So the XML parser is too early. That said we might
delete the earlier code entirely.

> qemu_driver.c processNicRxFilterChangedEvent also has a
> 
> if (virDomainNetGetActualType(def) == VIR_DOMAIN_NET_TYPE_NETWORK) {
> 
> which looks sketchy after this. And it's involving bandwidth stuff so it
> may affect the previous patch too.

Yeah, that looks like something i missed.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list