On Thu, Jun 18, 2009 at 07:05:29PM +0100, Daniel P. Berrange wrote:
On Thu, Jun 18, 2009 at 05:53:59PM +0000, David Lutterkort wrote:
>
> For that, you'd nest them where they are used, e.g. one connection to
> establish the base ethernet interface (that might not exist at all):
>
> <interface type="ethernet" startmode="none">
> <name>eth0</name>
> <mtu size="1492"/>
> <mac address="aa:bb:cc:dd:ee:ff"/>
> <dhcp peerdns="no"/>
> </interface>
>
> and one for the bridge with a vlan enslaved:
>
> <interface type="bridge" startmode="onboot">
> <name>br0</name>
> ...
> <bridge stp="off">
> <interface type="vlan" device="eth0"
tag="42"/>
> </bridge>
> </interface>
>
> Similarly, a bond enslaved to a bridge, together with a vlan on that
> bond also enslaved to the bridge would look like
>
> <interface type="bridge" startmode="onboot">
> <name>br0</name>
> ...
> <bridge stp="off">
> <interface type="bond">
> <name>bond0</name>
> <bond mode="active-backup">
> <interface type="ethernet">
> <name>eth1</name>
> </interface>
> <interface type="ethernet">
> <name>eth0</name>
> </interface>
> </bond>
> </interface>
> <interface type="vlan" device="bond0"
tag="42"/>
> </bridge>
> </interface>
I think this is a really unpleasant format to deal with. IMHO there should
not be nesting for <bridge>/<bond> tags. They should just refer to their
slave device by name. So that last example would be better shown as a set
of independant intefaces
Rationalizing the reason why I don't like this format. The relationship of
NICs essentially forms a DAG. This format is attempting to define a tree
from the POV of a single leaf node. So to deal with multiple leaf nodes
you either end up having signficantly overlapping configs between leaves,
or have one leaf defining the main branch, and other leaves only defining
sub-branches. I don't think either is really satisfactory, and can be
avoiding by defining a flat list of interfaces, and encoding the parent/
child relationships in each. An application using this, still retains the
flexibility to display the information in the structure that is most
suitable for its needs, be it paths from the POV of a leaf, paths from
the POV of a root, the entire tree in one, or flat lists, or some other
hybrid.
<interface type='bond'>
<name>bond0</name>
<bond mode="active-backup">
<interface name='eth0'/>
<interface name='eth1'/>
</bond>
</interface>
So this shows children, while the XML for the physical interface could
show the inverse.
<interface type='physical'>
<name>eth0</name>
<master>
<interface name='bond0'/>
</master>
</interface>
The API contract might wish to specify the order for defining new
interfaces, eg whether to require the bond0 to be defined first
and then physical interfaces added, whether physical members must
be defined first & then the bond, or whether creation of the bon0
automatically implies that interfaces for eth0/eth1 appear in the
list.
Daniel
--
|: 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 :|