[libvirt] [PATCH] docs: describe new virtual switch configuration in network XML docs

Laine Stump laine at laine.org
Wed Aug 10 05:45:00 UTC 2011


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>
+  &lt/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>
+  &lt/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




More information about the libvir-list mailing list