meta-flow: Correctly set destination MAC in mf_set_flow_value().
[sliver-openvswitch.git] / vswitchd / vswitch.xml
index bcb6b6f..cee28a5 100644 (file)
 
     <group title="OpenFlow Configuration">
       <column name="controller">
-        OpenFlow controller set.  If unset, then no OpenFlow controllers
-        will be used.
+        <p>
+          OpenFlow controller set.  If unset, then no OpenFlow controllers
+          will be used.
+        </p>
+
+        <p>
+          If there are primary controllers, removing all of them clears the
+          flow table.  If there are no primary controllers, adding one also
+          clears the flow table.  Other changes to the set of controllers, such
+          as adding or removing a service controller, adding another primary
+          controller to supplement an existing primary controller, or removing
+          only one of two primary controllers, have no effect on the flow
+          table.
+        </p>
       </column>
 
       <column name="fail_mode">
         <p>When more than one controller is configured,
         <ref column="fail_mode"/> is considered only when none of the
         configured controllers can be contacted.</p>
+        <p>
+          Changing <ref column="fail_mode"/> when no primary controllers are
+          configured clears the flow table.
+        </p>
       </column>
 
       <column name="datapath_id">
         should be enabled.  Default is disabled, set to
         <code>true</code> to enable.
       </column>
+
+      <column name="other_config" key="mac-aging-time"
+              type='{"type": "integer", "minInteger": 1}'>
+        <p>
+          The maximum number of seconds to retain a MAC learning entry for
+          which no packets have been seen.  The default is currently 300
+          seconds (5 minutes).  The value, if specified, is forced into a
+          reasonable range, currently 15 to 3600 seconds.
+        </p>
+
+        <p>
+          A short MAC aging time allows a network to more quickly detect that a
+          host is no longer connected to a switch port.  However, it also makes
+          it more likely that packets will be flooded unnecessarily, when they
+          are addressed to a connected host that rarely transmits packets.  To
+          reduce the incidence of unnecessary flooding, use a MAC aging time
+          longer than the maximum interval at which a host will ordinarily
+          transmit packets.
+        </p>
+      </column>
     </group>
 
     <group title="Bridge Status">
             VLAN).  A packet that ingresses on a trunk port is in the VLAN
             specified in its 802.1Q header, or VLAN 0 if the packet has no
             802.1Q header.  A packet that egresses through a trunk port will
-            have a 802.1Q header if it has a nonzero VLAN ID (or a nonzero
-            802.1Q priority).
+            have an 802.1Q header if it has a nonzero VLAN ID.
           </p>
 
           <p>
         <dd>
           <p>
             An access port carries packets on exactly one VLAN specified in the
-            <ref column="tag"/> column.  Packets ingressing and egressing on an
-            access port have no 802.1Q header.
+            <ref column="tag"/> column.  Packets egressing on an access port
+            have no 802.1Q header.
           </p>
 
           <p>
-            Any packet with an 802.1Q header that ingresses on an access port
-            is dropped, regardless of whether the VLAN ID in the header is the
-            access port's VLAN ID.
+            Any packet with an 802.1Q header with a nonzero VLAN ID that
+            ingresses on an access port is dropped, regardless of whether the
+            VLAN ID in the header is the access port's VLAN ID.
           </p>
         </dd>
 
         <dd>
           A native-untagged port resembles a native-tagged port, with the
           exception that a packet that egresses on a native-untagged port in
-          the native VLAN not have an 802.1Q header.
+          the native VLAN will not have an 802.1Q header.
         </dd>
       </dl>
       <p>
           VLAN.
         </p>
       </column>
+
+      <column name="other_config" key="priority-tags"
+              type='{"type": "boolean"}'>
+        <p>
+          An 802.1Q header contains two important pieces of information: a VLAN
+          ID and a priority.  A frame with a zero VLAN ID, called a
+          ``priority-tagged'' frame, is supposed to be treated the same way as
+          a frame without an 802.1Q header at all (except for the priority).
+        </p>
+
+        <p>
+          However, some network elements ignore any frame that has 802.1Q
+          header at all, even when the VLAN ID is zero.  Therefore, by default
+          Open vSwitch does not output priority-tagged frames, instead omitting
+          the 802.1Q header entirely if the VLAN ID is zero.  Set this key to
+          <code>true</code> to enable priority-tagged frames on a port.
+        </p>
+
+        <p>
+          Regardless of this setting, Open vSwitch omits the 802.1Q header on
+          output if both the VLAN ID and priority would be zero.
+        </p>
+
+        <p>
+          All frames output to native-tagged ports have a nonzero VLAN ID, so
+          this setting is not meaningful on native-tagged ports.
+        </p>
+      </column>
     </group>
 
     <group title="Bonding Configuration">
         </p>
       </column>
 
+      <column name="other_config" key="bond-hash-basis"
+              type='{"type": "integer"}'>
+        An integer hashed along with flows when choosing output slaves in load
+        balanced bonds.  When changed, all flows will be assigned different
+        hash values possibly causing slave selection decisions to change.  Does
+        not affect bonding modes which do not employ load balancing such as
+        <code>active-backup</code>.
+      </column>
+
       <group title="Link Failure Detection">
         <p>
           An important part of link bonding is detecting that links are down so
           when this mode is in use.  The default if not specified is
           <code>false</code>.
         </column>
-
-        <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.
-        </column>
       </group>
 
       <group title="SLB Configuration">
       </column>
     </group>
 
+    <group title="Port Statistics">
+      <p>
+        Key-value pairs that report port statistics.
+      </p>
+      <group title="Statistics: STP transmit and receive counters">
+        <column name="statistics" key="stp_tx_count">
+          Number of STP BPDUs sent on this port by the spanning
+          tree library.
+        </column>
+        <column name="statistics" key="stp_rx_count">
+          Number of STP BPDUs received on this port and accepted by the
+          spanning tree library.
+        </column>
+        <column name="statistics" key="stp_error_count">
+          Number of bad STP BPDUs received on this port.  Bad BPDUs
+          include runt packets and those with an unexpected protocol ID.
+        </column>
+      </group>
+    </group>
+
     <group title="Common Columns">
       The overall purpose of these columns is described under <code>Common
       Columns</code> at the beginning of this document.
         OpenFlow action. This setting is ignored when CFM is not in extended
         mode.  Defaults to <code>up</code>.
       </column>
+
+      <column name="other_config" key="cfm_ccm_vlan"
+        type='{"type": "integer", "minInteger": 1, "maxInteger": 4095}'>
+        When set, the CFM module will apply a VLAN tag to all CCMs it generates
+        with the given value.
+      </column>
+
     </group>
 
     <group title="Bonding Configuration">
       </column>
     </group>
 
+    <group title="VLAN Splinters">
+      <p>
+       The ``VLAN splinters'' feature increases Open vSwitch compatibility
+       with buggy network drivers in old versions of Linux that do not
+       properly support VLANs when VLAN devices are not used, at some cost
+       in memory and performance.
+      </p>
+
+      <p>
+       When VLAN splinters are enabled on a particular interface, Open vSwitch
+       creates a VLAN device for each in-use VLAN.  For sending traffic tagged
+       with a VLAN on the interface, it substitutes the VLAN device.  Traffic
+       received on the VLAN device is treated as if it had been received on
+        the interface on the particular VLAN.
+      </p>
+
+      <p>
+        VLAN splinters consider a VLAN to be in use if:
+      </p>
+
+      <ul>
+        <li>
+          The VLAN is the <ref table="Port" column="tag"/> value in any <ref
+          table="Port"/> record.
+        </li>
+
+        <li>
+          The VLAN is listed within the <ref table="Port" column="trunks"/>
+          column of the <ref table="Port"/> record of an interface on which
+          VLAN splinters are enabled.
+
+          An empty <ref table="Port" column="trunks"/> does not influence the
+          in-use VLANs: creating 4,096 VLAN devices is impractical because it
+          will exceed the current 1,024 port per datapath limit.
+        </li>
+
+        <li>
+          An OpenFlow flow within any bridge matches the VLAN.
+        </li>
+      </ul>
+
+      <p>
+        The same set of in-use VLANs applies to every interface on which VLAN
+        splinters are enabled.  That is, the set is not chosen separately for
+        each interface but selected once as the union of all in-use VLANs based
+        on the rules above.
+      </p>
+
+      <p>
+        It does not make sense to enable VLAN splinters on an interface for an
+        access port, or on an interface that is not a physical port.
+      </p>
+
+      <p>
+       VLAN splinters are deprecated.  When broken device drivers are no
+       longer in widespread use, we will delete this feature.
+      </p>
+
+      <column name="other_config" key="enable-vlan-splinters"
+              type='{"type": "boolean"}'>
+        <p>
+          Set to <code>true</code> to enable VLAN splinters on this interface.
+          Defaults to <code>false</code>.
+        </p>
+
+        <p>
+          VLAN splinters increase kernel and userspace memory overhead, so do
+          not use them unless they are needed.
+        </p>
+
+        <p>
+          VLAN splinters do not support 802.1p priority tags.  Received
+          priorities will appear to be 0, regardless of their actual values,
+          and priorities on transmitted packets will also be cleared to 0.
+        </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.
       supported range of queue numbers depend on <ref column="type"/>.  The
       queue numbers are the same as the <code>queue_id</code> used in
       OpenFlow in <code>struct ofp_action_enqueue</code> and other
-      structures.  Queue 0 is used by OpenFlow output actions that do not
-      specify a specific queue.</p>
+      structures.</p>
+
+      <p>
+        Queue 0 is the ``default queue.''  It is used by OpenFlow output
+        actions when no specific queue has been set.  Ordinarily <ref
+        column="queues"/> should include a configuration for queue 0.  When no
+        configuration for queue 0 is present, a default configuration is used.
+        (Before version 1.6, Open vSwitch would leave queue 0 unconfigured in
+        this case.  With some queuing disciplines, this dropped all packets
+        destined for the default queue.)
+      </p>
     </column>
 
     <group title="Configuration for linux-htb and linux-hfsc">
     Service (QoS) features.  May be referenced by <ref column="queues"
     table="QoS"/> column in <ref table="QoS"/> table.</p>
 
+    <column name="dscp">
+      If set, Open vSwitch will mark all traffic egressing this
+      <ref table="Queue"/> with the given DSCP bits.  Traffic egressing the
+      default <ref table="Queue"/> is only marked if it was explicitly selected
+      as the <ref table="Queue"/> at the time the packet was output.  If unset,
+      the DSCP bits of traffic egressing this <ref table="Queue"/> will remain
+      unchanged.
+    </column>
+
     <group title="Configuration for min-rate QoS">
       <p>
         These key-value pairs are defined for <ref table="QoS"/> <ref
 
     <group title="Configuration for linux-htb QoS">
       <p>
-        These key-value pairs are defined for <ref table="QoS"/> <ref
-        table="QoS" column="type"/> of <code>linux-htb</code>.
+        <ref table="QoS"/> <ref table="QoS" column="type"/>
+        <code>linux-htb</code> may use <code>queue_id</code>s less than 61440.
+        It has the following key-value pairs defined.
       </p>
       
       <column name="other_config" key="min-rate"
 
     <group title="Configuration for linux-hfsc QoS">
       <p>
-        These key-value pairs are defined for <ref table="QoS"/> <ref
-        table="QoS" column="type"/> of <code>linux-hfsc</code>.
+        <ref table="QoS"/> <ref table="QoS" column="type"/>
+        <code>linux-hfsc</code> may use <code>queue_id</code>s less than 61440.
+        It has the following key-value pairs defined.
       </p>
       
       <column name="other_config" key="min-rate"
     </group>
   </table>
 
-  <table name="Mirror" title="Port mirroring (SPAN/RSPAN/ERSPAN).">
+  <table name="Mirror" title="Port mirroring.">
     <p>A port mirror within a <ref table="Bridge"/>.</p>
     <p>A port mirror configures a bridge to send selected frames to special
     ``mirrored'' ports, in addition to their normal destinations.  Mirroring
-    traffic may also be referred to as SPAN, RSPAN, or ERSPAN, depending on how
+    traffic may also be referred to as SPAN or RSPAN, depending on how
     the mirrored traffic is sent.</p>
 
     <column name="name">
         <p>Output port for selected packets, if nonempty.</p>
         <p>Specifying a port for mirror output reserves that port exclusively
         for mirroring.  No frames other than those selected for mirroring
+        via this column
         will be forwarded to the port, and any frames received on the port
         will be discarded.</p>
         <p>
           The output port may be any kind of port supported by Open vSwitch.
-          It may be, for example, a physical port (sometimes called SPAN), or a
-          GRE tunnel (sometimes called ERSPAN).
+          It may be, for example, a physical port (sometimes called SPAN) or a
+          GRE tunnel.
         </p>
       </column>
 
       </column>
     </group>
 
+    <group title="Statistics: Mirror counters">
+      <p>
+        Key-value pairs that report mirror statistics.
+      </p>
+      <column name="statistics" key="tx_packets">
+        Number of packets transmitted through this mirror.
+      </column>
+      <column name="statistics" key="tx_bytes">
+        Number of bytes transmitted through this mirror.
+      </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.
 
     <column name="agent">
       Name of the network device whose IP address should be reported as the
-      ``agent address'' to collectors.  If not specified, the IP address
+      ``agent address'' to collectors.  If not specified, the agent device is
+      figured from the first target address and the routing table.  If the
+      routing table does not contain a route to the target, the IP address
       defaults to the <ref table="Controller" column="local_ip"/> in the
       collector's <ref table="Controller"/>.  If an agent IP address cannot be
-      determined either way, sFlow is disabled.
+      determined any of these ways, sFlow is disabled.
     </column>
 
     <column name="header">