[libvirt] RFC: configuring host interfaces with libvirt
David Lutterkort
lutter at redhat.com
Tue Jan 20 22:51:39 UTC 2009
On Tue, 2009-01-20 at 11:35 -0700, Jim Fehlig wrote:
> David Lutterkort wrote:
> > For certain applications, we want libvirt to be able to configure host
> > network interfaces in a variety of ways; currently, we are most
> > interested in teaching libvirt how to set up ordinary ethernet
> > interfaces, bridges, bonding and vlan's.
> >
> > Below is a high-level proposal of how that could be done. Please comment
> > copiously ;)
> >
> > 1. XML Format
> > =============
> >
> > The first question is how the user would describe the host interfaces they
> > want. Below are some sketches of what an XML representation of the various
> > kinds of interfaces would look like. This covers the minimal amount of
> > settings for these to be useful, though I am sure we'll need to add more
> > over time.
> >
> > <interface device="eth0" onboot="yes">
> > <hwaddr>00:19:d2:9f:88:96</hwaddr>
> > <dhcp peerdns="yes"/>
> > </interface>
> >
>
> For onboot="yes", something like startmode="onboot" would be better
> IMO. A startmode attribute would allow also using "manual", "hotplug",
> "ifplug", "nfsroot", etc.
This makes only sense if these additional modes are completely
orthogonal; I am not sure what the start modes 'manual', 'ifplug', and
'nfsroot' should do. For onboot, I assume you mean that they translate
into assignments in ifcfg in the following way
no startmode attribute -> ONBOOT=no
startmode='onboot' -> ONBOOT=yes
startmode='hotplug' -> ONBOOT=yes and HOTPLUG=yes
> WRT dhcp element, would it make sense to consider hostname (hostname to
> send to server) and if to change the local hostname to the hostname
> delivered via dhcp? E.g.
> hostname="foo" (default `hostname`)
> sethostname
>
> Also route:
> setrouting (default "yes")
> setdefaultroute (default "yes")
>
> and NIS:
> nis (default "yes")
> setnisdomain (default "yes")
Yes, they all make sense, though I would probably not support them in
the very first cut.
> What about dhcpv6? A separate <dhcp6 /> element?
Yeah, we probably need a separate element for that since it pulls in a
slew of other config options.
> > <interface device="eth1" onboot="yes">
> > <hwaddr>00:19:d2:9f:88:97</hwaddr>
> > <static ipaddr="192.168.0.5" gateway="192.168.0.1" netmask="255.255.255.0"/>
> > </interface>
> >
>
> Similarly, support for IPv6 here. Either 2 formats:
>
> ipaddr="192.168.0.5" netmask="255.255.255.0"
> ip6addr="2001:DB8:C::5/64"
>
> or allow /len for both:
>
> ipaddr="192.168.0.5/24"
> ipaddr="2001:DB8:ABCD::1/64"
Looks a little strange, but it would simplify notation.
> As for routing info, how about a separate route element:
>
> <route gateway="192.168.0.1" /> # destination=default
> <route destination="default" gateway="192.168.0.1" />
> <route destination="10.0.0.0/8" gateway="192.168.0.2" />
> <route destination="2001:DB8:C::/64" gateway="2001:DB8:C::1" />
> <route destination="2001:DB8::/32"> # unrecheable route (loopback)
>
> It would perhaps make sense to use iproute2 names, that is prefix
> instead of destination and nexthop instead of gateway.
For now, I want to stay out of setting up static routes, but I think
that has to come sooner or later.
> Don't recall if this was already brought up, but need a way to specify
> MTU and perhaps ethtool settings as well.
Yeah, that is definitely needed.
> > <interface device="eth2" onboot="yes">
> > <hwaddr>00:19:d2:9f:88:98</hwaddr>
> > </interface>
> >
> > <bond name="bond00" onboot="yes" mode="active-backup">
> > <slave device="eth0" primary="yes"/>
> > <slave device="eth1"/>
> > </bond>
> >
>
> In addition to mode attribute for bonds, support for miimon,
> arp_interval, and arp_ip_target?
Sure .. if the initscript suports it, it's easy enough to do ;)
> > <bridge name="br0" stp="off" onboot="yes">
> > <member device="eth2"/>
> > <dhcp peerdns="yes"/>
> > </bridge>
> >
>
> Attributes to support hellotime, forwarddelay, and maxage? This would allow
> <bridge name="br0" stp="on" hellotime="1" maxage="4" fowarddelay="4"
> ..>
My main concern with these is that only forwarddelay, stp, and gcint are
controllable by Fedora/RHEL networking scripts. For hellotime and
maxage, we'd need to hook into the various ifup scripts atthe right
place. Are these directly supported by the SuSe infrastructure ?
David
More information about the libvir-list
mailing list