This should have been done with the rest of the patch for virtual
switch / network device abstraction. If documents the new elements
(and new usage of existing elements) in the <network> XML to support
libvirt networks that use existing host bridges and macvtap direct
connections, as well as the new <portgroup> element.
---
docs/formatnetwork.html.in | 286 ++++++++++++++++++++++++++++++++++++++++----
1 files changed, 262 insertions(+), 24 deletions(-)
diff --git a/docs/formatnetwork.html.in b/docs/formatnetwork.html.in
index ddfa77c..4be03cd 100644
--- a/docs/formatnetwork.html.in
+++ b/docs/formatnetwork.html.in
@@ -70,36 +70,172 @@
bridge device allowing them to talk to each other. The bridge device
may also be connected to the LAN. It is recommended that bridge
device names started with the prefix <code>vir</code>, but the name
- <code>virbr0</code> is reserved for the "default" virtual
network.
- This element should always be provided when defining a new network.
- Attribute <code>stp</code> specifies if Spanning Tree Protocol is
- 'on' or 'off' (default is 'on'). Attribute
<code>delay</code> sets
- the bridge's forward delay value in seconds (default is 0).
+ <code>virbr0</code> is reserved for the "default" virtual
+ network. This element should always be provided when defining
+ a new network with a <code><forward></code> mode of
+ "nat" or "route" (or an isolated network with
+ no <code><forward></code> element).
+ Attribute <code>stp</code> specifies if Spanning Tree Protocol
+ is 'on' or 'off' (default is
+ 'on'). Attribute <code>delay</code> sets the bridge's
forward
+ delay value in seconds (default is 0).
<span class="since">Since 0.3.0</span>
</dd>
<dt><code>domain</code></dt>
<dd>
- The <code>name</code> attribute on the
<code>domain</code> element
- defines the DNS domain of the DHCP server. This element is optional.
- <span class="since">Since 0.4.5</span>
+ The <code>name</code> attribute on the
<code>domain</code>
+ element defines the DNS domain of the DHCP server. This
+ element is optional, and is only used for those networks with
+ a <code><forward></code> mode of "nat" or
"route" (or an
+ isolated network with no <code><forward></code>
+ element). <span class="since">Since 0.4.5</span>
</dd>
<dt><code>forward</code></dt>
<dd>Inclusion of the <code>forward</code> element indicates that
the virtual network is to be connected to the physical
- LAN. the <code>mode</code> attribute determines the method of
- forwarding; possible selections are 'nat' and 'route'. If mode
- is not specified, NAT forwarding will be used for
- connectivity. If a network has any IPv6 addresses defined,
- even if <code>mode</code> is given as 'nat', the IPv6
traffic
- will be forwarded using routing, since IPv6 has no concept of NAT.
- Firewall rules will allow forwarding to any other network device whether
- ethernet, wireless, dialup, or VPN. If the <code>dev</code>
attribute
- is set, the firewall rules will restrict forwarding to the named
- device only. If the <code>mode</code> attribute is set to
<code>route</code>
- then the traffic will not have NAT applied. This presumes that the
- local LAN router has suitable routing table entries to return traffic
- to this host. <span class="since">Since 0.3.0; 'mode'
attribute since
- 0.4.2</span></dd>
+ LAN.<span class="since">Since 0.3.0.</span>
+ The <code>mode</code> attribute determines the method of
+ forwarding. If there is no <code>forward</code> element, the
+ network will be isolated from any other network (unless a
+ guest connected to that network is acting as a router, of
+ course). The following are valid settings
+ for <code>mode</code> (if there is a
<code>forward</code>
+ element but mode is not specified, <code>mode='nat'</code>
is
+ assumed):
+ <dl>
+ <dt><code>nat</code></dt>
+ <dd>
+ All traffic between guests connected to this network and
+ the physical network will be forwarded to the physical
+ network via the host's IP routing stack, after the guest's
+ IP address is translated to appear as the host machine's
+ public IP address (a.k.a. Network Address Translation, or
+ "NAT"). This allows multiple guests, all having access to
+ the physical network, on a host that is only allowed a
+ single public IP address. If a network has any IPv6
+ addresses defined, the IPv6 traffic will be forwarded
+ using plain routing, since IPv6 has no concept of NAT.
+ Firewall rules will allow outbound connections to any
+ other network device whether ethernet, wireless, dialup,
+ or VPN. If the <code>dev</code> attribute is set, the
+ firewall rules will restrict forwarding to the named
+ device only. Inbound connections from other networks are
+ all prohibited; all connections between guests on the same
+ network, and to/from the host to the guests, are
+ unrestricted and not NATed.<span class="since">Since
+ 0.4.2</span>
+ </dd>
+
+ <dt><code>route</code></dt>
+ <dd>
+ Guest network traffic will be forwarded to the physical
+ network via the host's IP routing stack, but without
+ having NAT applied. Again, if the <code>dev</code>
+ attribute is set, firewall rules will restrict forwarding
+ to the named device only. This presumes that the local LAN
+ router has suitable routing table entries to return
+ traffic to this host. Firewall rules are also installed
+ that prevent incoming sessions from the physical network
+ to the guests, but outgoing sessions are unrestricted (as
+ are sessions from the host to the guests, and between
+ guests on the same network.)<span class="since">Since
+ 0.4.2</span>
+ </dd>
+
+ <dt><code>bridge</code></dt>
+ <dd>
+ This network describes either 1) an existing host bridge
+ that was configured outside of libvirt (if
+ a <code><bridge name='xyz'/></code> element
has been
+ specified), or 2) an interface or group of interfaces to
+ be used for a "direct" connection via macvtap using
+ macvtap's "bridge" mode (if the forward element has one or
+ more <code><interface></code> subelements)
+ (see <a href="formatdomain.html#elementsNICSDirect">Direct
+ attachment to physical interface</a> for descriptions of
+ the various macvtap modes). libvirt doesn't attempt to
+ manage the bridge interface at all, thus
+ the <code><bridge></code> element's
<code>stp</code>
+ and <code>delay</code> attributes are not allowed; no
+ iptables rules, IP addresses, or DHCP/DNS services are
+ added; at the IP level, the guest interface appears to be
+ directly connected to the physical
+ interface.<span class="since">Since 0.9.4</span>
+ </dd>
+ <dt><code>private</code></dt>
+ <dd>
+ This network uses a macvtap "direct" connection in
+ "private" mode to connect each guest to the network. The
+ physical interface to be used will be picked from among
+ those listed in <code><interface></code>
subelements
+ of the <code><forward></code> element; when using
+ 802.1Qbh mode (as indicated by
+ the <code><virtualport></code> type attribute -
note
+ that this requires an 802.1Qbh-capable hardware switch),
+ each physical interface can only be in use by a single
+ guest interface at a time; in modes other than 802.1Qbh,
+ multiple guest interfaces can share each physical
+ interface (libvirt will attempt to balance usage between
+ all available interfaces).<span class="since">Since
+ 0.9.4</span>
+ </dd>
+ <dt><code>vepa</code></dt>
+ <dd>
+ This network uses a macvtap "direct" connection in
"vepa"
+ mode to connect each guest to the network (this requires
+ that the physical interfaces used be connected to a
+ vepa-capable hardware switch. The physical interface to be
+ used will be picked from among those listed
+ in <code><interface></code> subelements of
+ the <code><forward></code> element; multiple guest
+ interfaces can share each physical interface (libvirt will
+ attempt to balance usage between all available
+ interfaces).<span class="since">Since 0.9.4</span>
+ </dd>
+ <dt><code>passthrough</code></dt>
+ <dd>
+ This network uses a macvtap "direct" connection in
+ "passthrough" mode to connect each guest to the network
+ (note that this is <i>not</i> the same thing as "PCI
+ passthrough"). The physical interface to be used will be
+ picked from among those listed
+ in <code><interface></code> subelements of
+ the <code><forward></code> element. Each physical
+ interface can only be in use by a single guest interface
+ at a time, so libvirt will keep track of which interfaces
+ are currently in use, and only assign unused interfaces
+ (if there are no available physical interfaces when a
+ domain interface is being attached, an error will be
+ logged, and the operation causing the attach will fail
+ (usually either a domain start, or a hotplug interface
+ attach to a domain).<span class="since">Since
0.9.4</span>
+ </dd>
+ </dl>
+ As mentioned above, a <code><forward></code> element
can
+ have multiple <code><interface></code> subelements,
each
+ one giving the name of a physical interface that can be used
+ for this network<span class="since">Since 0.9.4</span>:
+ <pre>
+...
+ <forward mode='passthrough'>
+ <interface dev='eth10'/>
+ <interface dev='eth11'/>
+ <interface dev='eth12'/>
+ <interface dev='eth13'/>
+ <interface dev='eth14'/>
+ </forward>
+...
+ </pre>
+ When a guest interface is being constructed, libvirt will pick
+ an interface from this list to use for the connection. In
+ modes where physical interfaces can be shared by multiple
+ guest interfaces, libvirt will choose the interface that
+ currently has the least number of connections. For those modes
+ that do not allow sharing of the physical device (in
+ particular, 'passthrough' mode, and 'private' mode when using
+ 802.1Qbh), libvirt will choose an unused physical interface
+ or, if it can't find an unused interface, fail the operation.
+ </dd>
</dl>
<h5><a name="elementQoS">Quality of
service</a></h5>
@@ -110,7 +246,6 @@
<inbound average='1000' peak='5000'
burst='5120'/>
<outbound average='128' peak='256'
burst='256'/>
</bandwidth></b>
- <mac address='00:16:3E:5D:C7:9E'/>
...</pre>
<p>
@@ -134,13 +269,66 @@
<span class="since">Since 0.9.4</span>
</p>
+ <h5><a
name="elementsPortgroup">Portgroups</a></h5>
+
+<pre>
+...
+ <forward mode='vepa'/>
+ <bridge name='br0'/>
+ <b><portgroup name='engineering' default='yes'>
+ <virtualport type='802.1Qbg'>
+ <parameters profileid='test'/>
+ </virtualport>
+ <bandwidth>
+ <inbound average='1000' peak='5000'
burst='5120'/>
+ <outbound average='1000' peak='5000'
burst='5120'/>
+ </bandwidth>
+ </portgroup></b>
+ <b><portgroup name='sales'>
+ <virtualport type='802.1Qbg'>
+ <parameters profileid='salestest'/>
+ </virtualport>
+ <bandwidth>
+ <inbound average='500' peak='2000'
burst='2560'/>
+ <outbound average='128' peak='256'
burst='256'/>
+ </bandwidth>
+ </portgroup></b>
+...</pre>
+
+ <p>
+ A portgroup provides a method of easily putting guest
+ connections to the network into different classes, with each
+ class potentially having a different level/type of service. Each
+ network can have multiple portgroup elements (and one of those
+ can optionally be designated as the 'default' portgroup for the
+ network), and each portgroup has a name, as well as various
+ subelements associated with it. The currently supported
+ subelements are <code><bandwidth></code>
+ and <code><virtualport></code>, which are both fully
+ described in the domain XML documentation. If a domain
+ interface definition specifies a portgroup (by adding
+ a <code>portgroup</code> attribute to
+ the <code><source></code> subelement), that
portgroup's
+ info will be merged into the interface's configuration. If no
+ portgroup is given in the interface definition, and one of the
+ network's portgroups has <code>default='yes'</code>, that
+ default portgroup will be used. If no portgroup is given in the
+ interface definition, and there is no default portgroup, then
+ none will be used. Any <code><bandwidth></code>
+ or <code><virtualport></code> specified directly in the
+ domain XML will take precedence over any setting in the chosen
+ portgroup.
+ </p>
+
<h3><a name="elementsAddress">Addressing</a></h3>
<p>
The final set of elements define the addresses (IPv4 and/or
IPv6, as well as MAC) to be assigned to the bridge device
associated with the virtual network, and optionally enable DHCP
- services.
+ services. These elements are only valid for isolated networks
+ (no <code>forward</code> element specified), and for those with
+ a forward mode of 'route' or 'nat'.
</p>
<pre>
@@ -345,5 +533,55 @@
<ip family="ipv6" address="2001:8794:ca2:3::1"
prefix="64" />
</network></pre>
+ <h3><a name="examplesBridge">Using an existing host
bridge</a></h3>
+
+ <p>
+ This shows how to use a pre-existing host bridge "br0". The
+ guests will effectively be directly connected to the physical
+ network (i.e. their IP addresses will all be on the subnet of
+ the physical network, and there will be no restrictions on
+ inbound or outbound connections).
+ </p>
+
+ <pre>
+ <network>
+ <name>host-bridge</name>
+ <forward mode="bridge"/>
+ <bridge name="br0"/>
+ </network></pre>
+
+ <h3><a name="examplesDirect">Using a macvtap "direct"
connection</a></h3>
+
+ <p>
+ This shows how to use macvtap to connect to the physical network
+ directly through one of a group of physical devices (without
+ using a host bridge device). As with the host bridge network,
+ the guests will effectively be directly connected to the
+ physical network so their IP addresses will all be on the subnet
+ of the physical network, and there will be no restrictions on
+ inbound or outbound connections. Note that, due to a limitation
+ in the implementation of macvtap, these connections do not allow
+ communication directly between the host and the guests - if you
+ require this you will either need the attached physical switch
+ to be operating in a mirroring mode (so that all traffic coming
+ to the switch is reflected back to the host's interface), or
+ provide alternate means for this communication (e.g. a second
+ interface on each guest that is connected to an isolated
+ network). The other forward modes that use macvtap (private,
+ vepa, and passthrough) would be used in a similar fashion.
+ </p>
+
+ <pre>
+ <network>
+ <name>direct-macvtap</name>
+ <forward mode="bridge">
+ <interface dev="eth20"/>
+ <interface dev="eth21"/>
+ <interface dev="eth22"/>
+ <interface dev="eth23"/>
+ <interface dev="eth24"/>
+ </forward>
+ </network></pre>
+
</body>
</html>
--
1.7.3.4