<!-- A Relax NG schema for the libvirt network XML format -->
<element name="network" xmlns="http://relaxng.org/ns/structure/1.0"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <!-- The name of the network, used to refer to it through the API
       and in virsh -->
  <element name="name"><text/></element>
  <optional>
    <element name="uuid"><text/></element>
  </optional>
  <optional>
    <!-- The name of the network to be set up; this will back
         the network on the host -->
    <element name="bridge">
      <optional>
        <attribute name="name"><text/></attribute>
      </optional>
      <optional>
        <attribute name="stp">
          <choice>
            <value>on</value>
            <value>off</value>
          </choice>
        </attribute>
      </optional>
      <optional>
        <attribute name="delay"><data type="integer"/></attribute>
      </optional>
    </element>
  </optional>
  <optional>
    <!-- The IP element sets up NAT'ing and an optional DHCP server
         local to the host. -->
    <!-- FIXME: address, netmask and the start and end of the ranges
         are IP addresses, and should be validated as such in the scheme -->
    <element name="ip">
      <optional>
        <attribute name="address"><text/></attribute>
      </optional>
      <optional>
        <attribute name="netmask"><text/></attribute>
      </optional>
      <!-- Define the range(s) of IP addresses that the DHCP
           server should hand out -->
      <element name="dhcp">
        <zeroOrMore>
          <element name="range">
            <attribute name="start"><text/></attribute>
            <attribute name="end"><text/></attribute>
          </element>
        </zeroOrMore>
      </element>
    </element>
  </optional>
  <optional>
    <!-- The device through which the bridge is connected to the
         rest of the network -->
    <element name="forward">
      <optional><attribute name="dev"><text/></attribute></optional>
      <optional>
        <attribute name="mode">
          <choice>
            <value>nat</value>
            <value>routed</value>
          </choice>
        </attribute>
      </optional>
    </element>
  </optional>
</element>
