ovs-vswitchd: Add support for 802.1D STP.
[sliver-openvswitch.git] / vswitchd / vswitch.xml
index b85d26c..239a9e8 100644 (file)
           omitted.
         </p>
 
-        <column name="other_config" key="enable-statistics">
+        <column name="other_config" key="enable-statistics"
+                type='{"type": "boolean"}'>
           Statistics are disabled by default to avoid overhead in the common
           case when statistics gathering is not useful.  Set this value to
           <code>true</code> to enable populating the <ref column="statistics"/>
           column or to <code>false</code> to explicitly disable it.
         </column>
 
-        <column name="statistics" key="cpu">
+        <column name="statistics" key="cpu"
+                type='{"type": "integer", "minInteger": 1}'>
           <p>
             Number of CPU processors, threads, or cores currently online and
             available to the operating system on which Open vSwitch is running,
         value.  May not be all-zero.
       </column>
 
-      <column name="other_config" key="disable-in-band">
+      <column name="other_config" key="disable-in-band"
+              type='{"type": "boolean"}'>
         If set to <code>true</code>, disable in-band control on the bridge
         regardless of controller and manager settings.
       </column>
 
-      <column name="other_config" key="in-band-queue">
+      <column name="other_config" key="in-band-queue"
+              type='{"type": "integer", "minInteger": 0, "maxInteger": 4294967295}'>
         A queue ID as a nonnegative integer.  This sets the OpenFlow queue ID
         that will be used by flows set up by in-band control on this bridge.
         If unset, or if the port used by an in-band control flow does not have
       </column>
     </group>
 
+    <group title="Spanning Tree Configuration">
+      The IEEE 802.1D Spanning Tree Protocol (STP) is a network protocol
+      that ensures loop-free topologies.  It allows redundant links to
+      be included in the network to provide automatic backup paths if
+      the active links fails.
+
+      <column name="stp_enable">
+        Enable spanning tree on the bridge.  By default, STP is disabled
+        on bridges.  Bond, internal, and mirror ports are not supported
+        and will not participate in the spanning tree.
+      </column>
+      <column name="other_config" key="stp-system-id">
+        The bridge's STP identifier (the lower 48 bits of the bridge-id)
+        in the form
+        <var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>.
+        By default, the identifier is the MAC address of the bridge.
+      </column>
+
+      <column name="other_config" key="stp-priority"
+              type='{"type": "integer", "minInteger": 0, "maxInteger": 65535}'>
+        The bridge's relative priority value for determining the root
+        bridge (the upper 16 bits of the bridge-id).  A bridge with the
+        lowest bridge-id is elected the root.  By default, the priority
+        is 0x8000.
+      </column>
+
+      <column name="other_config" key="stp-hello-time"
+              type='{"type": "integer", "minInteger": 1, "maxInteger": 10}'>
+        The interval between transmissions of hello messages by
+        designated ports, in seconds.  By default the hello interval is
+        2 seconds.
+      </column>
+
+      <column name="other_config" key="stp-max-age"
+              type='{"type": "integer", "minInteger": 6, "maxInteger": 40}'>
+        The maximum age of the information transmitted by the bridge
+        when it is the root bridge, in seconds.  By default, the maximum
+        age is 20 seconds.
+      </column>
+
+      <column name="other_config" key="stp-forward-delay"
+              type='{"type": "integer", "minInteger": 4, "maxInteger": 30}'>
+        The delay to wait between transitioning root and designated
+        ports to <code>forwarding</code>, in seconds.  By default, the
+        forwarding delay is 15 seconds.
+      </column>
+    </group>
+
     <group title="Other Features">
       <column name="datapath_type">
         Name of datapath provider.  The kernel datapath has
         datapath ID.
       </column>
 
-      <column name="other_config" key="flow-eviction-threshold">
+      <column name="other_config" key="flow-eviction-threshold"
+              type='{"type": "integer", "minInteger": 0}'>
         <p>
           A number of flows as a nonnegative integer.  This sets number of
           flows at which eviction from the kernel flow table will be triggered.
         </p>
       </column>
 
-      <column name="other_config" key="forward-bpdu">
-        Option to allow forwarding of BPDU frames when NORMAL action if
-        invoked. Frames with reserved Ethernet addresses (e.g. STP BPDU) will
-        be forwarded when this option is enabled.  If the Open vSwitch bridge
-        is used to connect different Ethernet networks, and if Open vSwitch
-        node does not run STP, then this option should be enabled.  Default is
-        disabled, set to <code>true</code> to enable.
+      <column name="other_config" key="forward-bpdu"
+              type='{"type": "boolean"}'>
+        Option to allow forwarding of BPDU frames when NORMAL action is
+        invoked.  Frames with reserved Ethernet addresses (e.g. STP
+        BPDU) will be forwarded when this option is enabled and the
+        switch is not providing that functionality.  If STP is enabled
+        on the port, STP BPDUs will never be forwarded.  If the Open
+        vSwitch bridge is used to connect different Ethernet networks,
+        and if Open vSwitch node does not run STP, then this option
+        should be enabled.  Default is disabled, set to
+        <code>true</code> to enable.
+      </column>
+    </group>
+
+    <group title="Bridge Status">
+      <p>
+        Status information about bridges.
+      </p>
+      <column name="status">
+        Key-value pairs that report bridge status.
+      </column>
+      <column name="status" key="stp_bridge_id">
+        <p>
+          The bridge-id (in hex) used in spanning tree advertisements.
+          Configuring the bridge-id is described in the
+          <code>stp-system-id</code> and <code>stp-priority</code> keys
+          of the <code>other_config</code> section earlier.
+        </p>
+      </column>
+      <column name="status" key="stp_designated_root">
+        <p>
+          The designated root (in hex) for this spanning tree.
+        </p>
+      </column>
+      <column name="status" key="stp_root_path_cost">
+        <p>
+          The path cost of reaching the designated bridge.  A lower
+          number is better.
+        </p>
       </column>
     </group>
 
           detects link failure.
         </p>
 
-        <column name="other_config" key="bond-detect-mode">
-          The means used to detect link failures.  Options are
-          <code>carrier</code> and <code>miimon</code>. Defaults to
+        <column name="other_config" key="bond-detect-mode"
+                type='{"type": "string", "enum": ["set", ["carrier", "miimon"]]}'>
+          The means used to detect link failures.  Defaults to
           <code>carrier</code> which uses each interface's carrier to detect
           failures.  When set to <code>miimon</code>, will check for failures
           by polling each interface's MII.
         </column>
 
-        <column name="other_config" key="bond-miimon-interval">
+        <column name="other_config" key="bond-miimon-interval"
+                type='{"type": "integer"}'>
           The interval, in milliseconds, between successive attempts to poll
           each interface's MII.  Relevant only when <ref column="other_config"
           key="bond-detect-mode"/> is <code>miimon</code>.
           nonzero MAC address.
         </column>
 
-        <column name="other_config" key="lacp-system-priority">
+        <column name="other_config" key="lacp-system-priority"
+                type='{"type": "integer", "minInteger": 1, "maxInteger": 65535}'>
           The LACP system priority of this <ref table="Port"/>.  In LACP
           negotiations, link status decisions are made by the system with the
-          numerically lower priority.  Must be a number between 1 and 65535.
+          numerically lower priority.
         </column>
 
         <column name="other_config" key="lacp-time">
           </p>
         </column>
 
-        <column name="other_config" key="lacp-heartbeat">
-          Treats LACP like a simple heartbeat protocol for link state
-          monitoring.  Most features of the LACP protocol are disabled when
-          this mode is in use.
+        <column name="other_config" key="lacp-heartbeat"
+                type='{"type": "boolean"}'>
+          Treat LACP like a simple heartbeat protocol for link state
+          monitoring.  Most features of the LACP protocol are disabled
+          when this mode is in use.  The default if not specified is
+          <code>false</code>.
         </column>
 
-        <column name="other_config" key="bond-hash-basis">
+        <column name="other_config" key="bond-hash-basis"
+                type='{"type": "integer"}'>
           An integer hashed along with flows when choosing output slaves.  When
           changed, all flows will be assigned different hash values possibly
           causing slave selection decisions to change.
           because LACP negotiation failed.
         </p>
 
-        <column name="other_config" key="bond-rebalance-interval">
+        <column name="other_config" key="bond-rebalance-interval"
+                type='{"type": "integer", "minInteger": 1000, "maxInteger": 10000}'>
           For an SLB bonded port, the number of milliseconds between successive
           attempts to rebalance the bond, that is, to move source MACs and
           their flows from one interface on the bond to another in an attempt
-          to keep usage of each interface roughly equal.  The default is 10000
-          (10 seconds), and the minimum is 1000 (1 second).
+          to keep usage of each interface roughly equal.
         </column>
       </group>
 
       </column>
     </group>
 
+    <group title="Spanning Tree Configuration">
+      <column name="other_config" key="stp-enable"
+              type='{"type": "boolean"}'>
+        If spanning tree is enabled on the bridge, member ports are
+        enabled by default (with the exception of bond, internal, and
+        mirror ports which do not work with STP).  If this column's
+        value is <code>false</code> spanning tree is disabled on the
+        port.
+      </column>
+
+       <column name="other_config" key="stp-port-num"
+               type='{"type": "integer", "minInteger": 1, "maxInteger": 255}'>
+        The port number used for the lower 8 bits of the port-id.  By
+        default, the numbers will be assigned automatically.  If any
+        port's number is manually configured on a bridge, then they
+        must all be.
+      </column>
+
+       <column name="other_config" key="stp-port-priority"
+               type='{"type": "integer", "minInteger": 0, "maxInteger": 255}'>
+        The port's relative priority value for determining the root
+        port (the upper 8 bits of the port-id).  A port with a lower
+        port-id will be chosen as the root port.  By default, the
+        priority is 0x80.
+      </column>
+
+       <column name="other_config" key="stp-path-cost"
+               type='{"type": "integer", "minInteger": 0, "maxInteger": 65535}'>
+        Spanning tree path cost for the port.  A lower number indicates
+        a faster link.  By default, the cost is based on the maximum
+        speed of the link.
+      </column>
+    </group>
+
     <group title="Other Features">
       <column name="qos">
         Quality of Service configuration for this port.
       </column>
     </group>
 
+    <group title="Port Status">
+      <p>
+        Status information about ports attached to bridges.
+      </p>
+      <column name="status">
+        Key-value pairs that report port status.
+      </column>
+      <column name="status" key="stp_port_id">
+        <p>
+          The port-id (in hex) used in spanning tree advertisements for
+          this port.  Configuring the port-id is described in the
+          <code>stp-port-num</code> and <code>stp-port-priority</code>
+          keys of the <code>other_config</code> section earlier.
+        </p>
+      </column>
+      <column name="status" key="stp_state"
+              type='{"type": "string", "enum": ["set",
+                            ["disabled", "listening", "learning",
+                             "forwarding", "blocking"]]}'>
+        <p>
+          STP state of the port.
+        </p>
+      </column>
+      <column name="status" key="stp_sec_in_state"
+              type='{"type": "integer", "minInteger": 0}'>
+        <p>
+          The amount of time (in seconds) port has been in the current
+          STP state.
+        </p>
+      </column>
+      <column name="status" key="stp_role"
+              type='{"type": "string", "enum": ["set",
+                            ["root", "designated", "alternate"]]}'>
+        <p>
+          STP role of the port.
+        </p>
+      </column>
+    </group>
+
     <group title="Common Columns">
       The overall purpose of these columns is described under <code>Common
       Columns</code> at the beginning of this document.
             not support GRE.  Only the tunneling component of the protocol is
             implemented.  UDP ports 58881 and 58882 are used as the source and
             destination ports respectively.  CAPWAP is currently supported only
-            with the Linux kernel datapath with kernel version 2.6.25 or later.
+            with the Linux kernel datapath with kernel version 2.6.26 or later.
           </dd>
 
           <dt><code>patch</code></dt>
         system default, typically 64).  Default is the system default TTL.
       </column>
       
-      <column name="options" key="df_inherit">
+      <column name="options" key="df_inherit" type='{"type": "boolean"}'>
         Optional.  If enabled, the Don't Fragment bit will be copied from the
         inner IP headers (those of the encapsulated traffic) to the outer
         (tunnel) headers.  Default is disabled; set to <code>true</code> to
         enable.
       </column>
 
-      <column name="options" key="df_default">
+      <column name="options" key="df_default"
+              type='{"type": "boolean"}'>
         Optional.  If enabled, the Don't Fragment bit will be set by default on
         tunnel headers if the <code>df_inherit</code> option is not set, or if
         the encapsulated packet is not IP.  Default is enabled; set to
         <code>false</code> to disable.
       </column>
 
-      <column name="options" key="pmtud">
+      <column name="options" key="pmtud" type='{"type": "boolean"}'>
         Optional.  Enable tunnel path MTU discovery.  If enabled ``ICMP
         Destination Unreachable - Fragmentation Needed'' messages will be
         generated for IPv4 packets with the DF bit set and IPv6 packets above
           Only <code>gre</code> interfaces support these options.
         </p>
 
-        <column name="options" key="header_cache">
+        <column name="options" key="header_cache" type='{"type": "boolean"}'>
           Enable caching of tunnel headers and the output path.  This can lead
           to a significant performance increase without changing behavior.  In
           general it should not be necessary to adjust this setting.  However,
           these options.
         </p>
 
-        <column name="options" key="csum">
+        <column name="options" key="csum" type='{"type": "boolean"}'>
           <p>
             Optional.  Compute GRE checksums on outgoing packets.  Default is
             disabled, set to <code>true</code> to enable.  Checksums present on
         </p>
       </column>
 
+      <column name="link_resets">
+        <p>
+          The number of times Open vSwitch has observed the
+          <ref column="link_state"/> of this <ref table="Interface"/> change.
+        </p>
+      </column>
+
       <column name="link_speed">
         <p>
           The negotiated speed of the physical network link.
         internal interface such as a bridge port.
       </column>
 
-      <column name="status" key="tunnel_egress_iface_carrier">
-        Whether a carrier is detected on <ref column="status"
-        key="tunnel_egress_iface"/>.  Valid values are <code>down</code> and
-        <code>up</code>.
+      <column name="status" key="tunnel_egress_iface_carrier"
+              type='{"type": "string", "enum": ["set", ["down", "up"]]}'>
+        Whether carrier is detected on <ref column="status"
+        key="tunnel_egress_iface"/>.
       </column>
     </group>
 
         collected and written to this column.
       </column>
 
-      <column name="other_config" key="cfm_interval">
+      <column name="other_config" key="cfm_interval"
+              type='{"type": "integer"}'>
         The interval, in milliseconds, between transmissions of CFM heartbeats.
         Three missed heartbeat receptions indicate a connectivity fault.
         Defaults to 1000.
       </column>
 
-      <column name="other_config" key="cfm_extended">
+      <column name="other_config" key="cfm_extended"
+              type='{"type": "boolean"}'>
         When <code>true</code>, the CFM module operates in extended mode. This
         causes it to use a nonstandard destination address to avoid conflicting
         with compliant implementations which may be running concurrently on the
         compatibility with 802.1ag compliant implementations.  Defaults to
         <code>false</code>.
       </column>
+      <column name="other_config" key="cfm_opstate"
+              type='{"type": "string", "enum": ["set", ["down", "up"]]}'>
+        When <code>down</code>, the CFM module marks all CCMs it generates as
+        operationally down without triggering a fault.  This allows remote
+        maintenance points to choose not to forward traffic to the
+        <ref table="Interface"/> on which this CFM module is running.
+        Currently, in Open vSwitch, the opdown bit of CCMs affects
+        <ref table="Interface"/>s participating in bonds, and the bundle
+        OpenFlow action. This setting is ignored when CFM is not in extended
+        mode.  Defaults to <code>up</code>.
+      </column>
     </group>
 
     <group title="Bonding Configuration">
-      <column name="other_config" key="bond-stable-id">
-        A positive integer using in <code>stable</code> bond mode to make slave
+      <column name="other_config" key="bond-stable-id"
+              type='{"type": "integer", "minInteger": 1}'>
+        Used in <code>stable</code> bond mode to make slave
         selection decisions.  Allocating <ref column="other_config"
         key="bond-stable-id"/> values consistently across interfaces
         participating in a bond will guarantee consistent slave selection
         <code>stable</code> bonding mode.
       </column>
 
-      <column name="other_config" key="lacp-port-id">
+      <column name="other_config" key="lacp-port-id"
+              type='{"type": "integer", "minInteger": 1, "maxInteger": 65535}'>
         The LACP port ID of this <ref table="Interface"/>.  Port IDs are
         used in LACP negotiations to identify individual ports
-        participating in a bond.  Must be a number between 1 and
-        65535.
+        participating in a bond.
       </column>
 
-      <column name="other_config" key="lacp-port-priority">
+      <column name="other_config" key="lacp-port-priority"
+              type='{"type": "integer", "minInteger": 1, "maxInteger": 65535}'>
         The LACP port priority of this <ref table="Interface"/>.  In LACP
         negotiations <ref table="Interface"/>s with numerically lower
-        priorities are preferred for aggregation.  Must be a number between 1
-        and 65535.
+        priorities are preferred for aggregation.
       </column>
 
-      <column name="other_config" key="lacp-aggregation-key">
+      <column name="other_config" key="lacp-aggregation-key"
+              type='{"type": "integer", "minInteger": 1, "maxInteger": 65535}'>
         The LACP aggregation key of this <ref table="Interface"/>.  <ref
         table="Interface"/>s with different aggregation keys may not be active
-        within a given <ref table="Port"/> at the same time. Must be a number
-        between 1 and 65535.
+        within a given <ref table="Port"/> at the same time.
       </column>
     </group>
 
         the following key-value pair:
       </p>
       
-      <column name="other_config" key="max-rate">
+      <column name="other_config" key="max-rate" type='{"type": "integer"}'>
         Maximum rate shared by all queued traffic, in bit/s.  Optional.  If not
         specified, for physical interfaces, the default is the link rate.  For
         other interfaces or if the link rate cannot be determined, the default
         table="QoS" column="type"/> of <code>min-rate</code>.
       </p>
       
-      <column name="other_config" key="min-rate">
+      <column name="other_config" key="min-rate"
+              type='{"type": "integer", "minInteger": 12000}'>
         Minimum guaranteed bandwidth, in bit/s.  Required.  The floor value is
         1500 bytes/s (12,000 bit/s).
       </column>
         table="QoS" column="type"/> of <code>linux-htb</code>.
       </p>
       
-      <column name="other_config" key="min-rate">
+      <column name="other_config" key="min-rate"
+              type='{"type": "integer", "minInteger": 1}'>
         Minimum guaranteed bandwidth, in bit/s.
       </column>
 
-      <column name="other_config" key="max-rate">
+      <column name="other_config" key="max-rate"
+              type='{"type": "integer", "minInteger": 1}'>
         Maximum allowed bandwidth, in bit/s.  Optional.  If specified, the
         queue's rate will not be allowed to exceed the specified value, even
         if excess bandwidth is available.  If unspecified, defaults to no
         limit.
       </column>
 
-      <column name="other_config" key="burst">
+      <column name="other_config" key="burst"
+              type='{"type": "integer", "minInteger": 1}'>
         Burst size, in bits.  This is the maximum amount of ``credits'' that a
         queue can accumulate while it is idle.  Optional.  Details of the
         <code>linux-htb</code> implementation require a minimum burst size, so
         a too-small <code>burst</code> will be silently ignored.
       </column>
 
-      <column name="other_config" key="priority">
-        A nonnegative 32-bit integer.  Defaults to 0 if unspecified.  A queue
-        with a smaller <code>priority</code> will receive all the excess
-        bandwidth that it can use before a queue with a larger value receives
-        any.  Specific priority values are unimportant; only relative ordering
-        matters.
+      <column name="other_config" key="priority"
+              type='{"type": "integer", "minInteger": 0, "maxInteger": 4294967295}'>
+        A queue with a smaller <code>priority</code> will receive all the
+        excess bandwidth that it can use before a queue with a larger value
+        receives any.  Specific priority values are unimportant; only relative
+        ordering matters.  Defaults to 0 if unspecified.
       </column>
     </group>
 
         table="QoS" column="type"/> of <code>linux-hfsc</code>.
       </p>
       
-      <column name="other_config" key="min-rate">
+      <column name="other_config" key="min-rate"
+              type='{"type": "integer", "minInteger": 1}'>
         Minimum guaranteed bandwidth, in bit/s.
       </column>
       
-      <column name="other_config" key="max-rate">
+      <column name="other_config" key="max-rate"
+              type='{"type": "integer", "minInteger": 1}'>
         Maximum allowed bandwidth, in bit/s.  Optional.  If specified, the
         queue's rate will not be allowed to exceed the specified value, even if
         excess bandwidth is available.  If unspecified, defaults to no
         <code>false</code> otherwise.
       </column>
 
-      <column name="role">
+      <column name="role"
+              type='{"type": "string", "enum": ["set", ["other", "master", "slave"]]}'>
         <p>The level of authority this controller has on the associated
         bridge. Possible values are:</p>
         <dl>
         will exist only if an error has occurred.
       </column>
 
-      <column name="status" key="state">
+      <column name="status" key="state"
+              type='{"type": "string", "enum": ["set", ["VOID", "BACKOFF", "CONNECTING", "ACTIVE", "IDLE"]]}'>
         <p>
-          The state of the connection to the controller.  Possible values are:
+          The state of the connection to the controller:
         </p>
         <dl>
           <dt><code>VOID</code></dt>
         </p>
       </column>
       
-      <column name="status" key="sec_since_connect">
+      <column name="status" key="sec_since_connect"
+              type='{"type": "integer", "minInteger": 0}'>
         The amount of time since this controller last successfully connected to
         the switch (in seconds).  Value is empty if controller has never
         successfully connected.
       </column>
       
-      <column name="status" key="sec_since_disconnect">
+      <column name="status" key="sec_since_disconnect"
+              type='{"type": "integer", "minInteger": 1}'>
         The amount of time since this controller last disconnected from
         the switch (in seconds). Value is empty if controller has never
         disconnected.
         will exist only if an error has occurred.
       </column>
 
-      <column name="status" key="state">
+      <column name="status" key="state"
+              type='{"type": "string", "enum": ["set", ["VOID", "BACKOFF", "CONNECTING", "ACTIVE", "IDLE"]]}'>
         <p>
-          The state of the connection to the manager.  Possible values are:
+          The state of the connection to the manager:
         </p>
         <dl>
           <dt><code>VOID</code></dt>
         </p>
       </column>
 
-      <column name="status" key="sec_since_connect">
+      <column name="status" key="sec_since_connect"
+              type='{"type": "integer", "minInteger": 0}'>
         The amount of time since this manager last successfully connected
         to the database (in seconds). Value is empty if manager has never
         successfully connected.
       </column>
 
-      <column name="status" key="sec_since_disconnect">
+      <column name="status" key="sec_since_disconnect"
+              type='{"type": "integer", "minInteger": 0}'>
         The amount of time since this manager last disconnected from the
         database (in seconds). Value is empty if manager has never
         disconnected.
         stolen from this connection.
       </column>
 
-      <column name="status" key="n_connections">
+      <column name="status" key="n_connections"
+              type='{"type": "integer", "minInteger": 2}'>
         <p>
           When <ref column="target"/> specifies a connection method that
           listens for inbound connections (e.g. <code>ptcp:</code> or