[libvirt] 802.1q vlan-tagging support for libvirt

Daniel P. Berrange berrange at redhat.com
Wed Apr 8 09:31:49 UTC 2009

On Tue, Apr 07, 2009 at 06:32:43PM -0700, David Lutterkort wrote:
> On Tue, 2009-04-07 at 18:39 -0300, Klaus Heinrich Kiwi wrote:
> > I was thinking about the semantics I described above. It ultimately
> > means that we'll have a bridge for each VLAN tag that crosses the trunk
> > interface. So for example if guests A, B and C are all associated with
> > VLAN ID 20, then:
> > 
> > eth0 -> eth0.20 -> br0 -> [tap0, tap1, tap2]
> > 
> > (where tap[0-3] are associated with guests A, B, C respectively)
> Yes, I think that's how it should work; it would also mean that you'd
> first set up eth0 as a separate interface, and new bridge/vlan interface
> combos afterwards. AFAIK, for the bridge, only bootproto=none would make
> sense.
> > The things that concerns me the most are:
> >  1) How scalable this really is
> I don't know either ... we'll find out ;)

I don't think that's really a scalability problem from libvirt's POV. I
know people use this setup quite widely already even with plain ifcfg-XXX
scripts. Any scalability problems nmost likely fall into the kernel /
networking code and whether it is good at avoiding unneccessary data
copies when you have stacked  NIC -> VLAN -> BRIDGE -> TAP

> >  2) The semantics are really different from how physical, 802.1q-enabled
> > switches would work.
> > 
> > Because (2) really creates new switches for each new VLAN tag, I wonder
> > how management would be different from what we have today with physical
> > switches (i.e., defining a port with a VLAN ID, assigning that port to a
> > physical machine) - unless we hide it behind libvirt somehow.

I think one thing to consider is the difference between the physical and
logical models.  The libvirt API / representation here is fairly low 
level, dealing in individuals NICs. I think management apps would likely
want to present this in a slightly alternate way dealing more in logical
entities than physical NICs. eg oVirt's network model is closer to the
one you describe where the user defines a new switch for each VLAN tag.
It then maps this into the low level physical model of individual NICs
as needed. I think it si important that libvirt use the physical model
here  to give apps flexibility in how they expose it to users.

> The reason we are creating all those bridges isn't the VLAN's - it's
> that we want to share the same physical interface amongst several
> guests. And I don't know of another way to do that.
> > Are there other options? Since a tagged interface like eth0.20 is kind
> > of a virtual interface itself, would it be appropriate to use those
> > directly?
> You can use it directly, I just don't know how else you would share it
> amongst VM's without a bridge.

In the (nearish) future NICs will start appearing with SR-IOV capabilities.
This gives you one physical PCI device, whcih exposes multiple functions.
So a single physical NIC appears as 8 NICs to the OS. You can thus directly
assign each of these virtual NICs to a different VM directly,a voiding the
need to bridge them.

I don't think its worth spending too much time trying to come up with other
non-bridged NIC sharing setups when hardware is about todo it all for us :-)

|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

More information about the libvir-list mailing list