On Wed, Nov 06, 2019 at 12:35:49PM -0800, William Tu wrote:
> On Tue, Nov 05, 2019 at 04:49:10PM -0800, Ben Pfaff wrote:
> > On Tue, Nov 05, 2019 at 02:57:46PM -0800, William Tu wrote:
> > > + /* ODP_SUPPORT_FIELDS */
> > > + str_value = xasprintf("%"PRIuSIZE, odp.max_vlan_headers);
> > > + smap_add(cap, "max_vlan_headers", str_value);
> > > + free(str_value);
> >
> > I think that you can shorten the above to:
> > smap_add_format(cap, "max_vlan_headers", "%"PRIuSIZE,
> > odp.max_vlan_headers);
> > and similarly for other cases.
>
> Yes, thank you.
> >
> > I think that we can improve the documentation. I'm working on a
> > suggestion for that, please give me a while to write it up.
>
> Sure, I will wait.
Here's my suggestion, as an incremental:
-8<--------------------------cut here-------------------------->8--
diff --git a/lib/meta-flow.xml b/lib/meta-flow.xml
index d8763eb0b718..90b405c73750 100644
--- a/lib/meta-flow.xml
+++ b/lib/meta-flow.xml
@@ -2488,7 +2488,7 @@ actions=clone(load:0->NXM_OF_IN_PORT[],output:123)
<group title="Connection Tracking">
<p>
- Open vSwitch 2.5 and later support ``connection tracking,'' which allows
+ Open vSwitch supports ``connection tracking,'' which allows
bidirectional streams of packets to be statefully grouped into
connections. Open vSwitch connection tracking, for example, identifies
the patterns of TCP packets that indicates a successfully initiated
@@ -2524,7 +2524,14 @@ actions=clone(load:0->NXM_OF_IN_PORT[],output:123)
</p>
<p>
- Connection tracking is an Open vSwitch extension to OpenFlow.
+ Connection tracking is an Open vSwitch extension to OpenFlow. Open
+ vSwitch 2.5 added the initial support for connection tracking.
+ Subsequent versions of Open vSwitch added many refinements and extensions
+ to the initial support. Many of these capabilities depend on the Open
+ vSwitch datapath rather than simply the userspace version. The
+ <code>capabilities</code> column in the <code>Datapath</code> table (see
+ <code>ovs-vswitchd.conf.db</code>(5)) reports the detailed capabilities
+ of a particular Open vSwitch datapath.
</p>
<field id="MFF_CT_STATE" title="Connection Tracking State">
@@ -2713,7 +2720,8 @@ actions=clone(load:0->NXM_OF_IN_PORT[],output:123)
</p>
<p>
- The following fields are populated by the ct action, and require a
+ The following fields are populated by the <code>ct</code>
+ action, and require a
match to a valid connection tracking state as a prerequisite, in
addition to the IP or IPv6 ethertype match. Examples of valid
connection tracking state matches include <code>ct_state=+new</code>,
diff --git a/manpages.mk b/manpages.mk
index 281ebd8fe946..09b0f9eccf4e 100644
--- a/manpages.mk
+++ b/manpages.mk
@@ -1,23 +1,5 @@
# Generated automatically -- do not modify! -*- buffer-read-only: t -*-
-ovn/utilities/ovn-sbctl.8: \
- ovn/utilities/ovn-sbctl.8.in \
- lib/common.man \
- lib/db-ctl-base.man \
- lib/ovs.tmac \
- lib/ssl-bootstrap.man \
- lib/ssl.man \
- lib/table.man \
- lib/vlog.man
-ovn/utilities/ovn-sbctl.8.in:
-lib/common.man:
-lib/db-ctl-base.man:
-lib/ovs.tmac:
-lib/ssl-bootstrap.man:
-lib/ssl.man:
-lib/table.man:
-lib/vlog.man:
-
ovsdb/ovsdb-client.1: \
ovsdb/ovsdb-client.1.in \
lib/common-syn.man \
@@ -116,6 +98,12 @@ lib/vlog-syn.man:
lib/vlog.man:
ovsdb/ovsdb-schemas.man:
+utilities/bugtool/ovs-bugtool.8: \
+ utilities/bugtool/ovs-bugtool.8.in \
+ lib/ovs.tmac
+utilities/bugtool/ovs-bugtool.8.in:
+lib/ovs.tmac:
+
utilities/ovs-appctl.8: \
utilities/ovs-appctl.8.in \
lib/common.man \
diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
index 8d86a5c5016b..7998bd091810 100644
--- a/vswitchd/vswitch.xml
+++ b/vswitchd/vswitch.xml
@@ -5662,81 +5662,234 @@ ovs-vsctl add-port br0 p0 -- set Interface p0
type=patch options:peer=p1 \
connection tracking-related OpenFlow matches and actions).
</column>
- <column name="capabilities" key="max_vlan_headers"
- type='{"type": "integer", "minInteger": 0}'>
- Maximum number of 802.1q VLAN headers to serialize in a mask.
- </column>
- <column name="capabilities" key="max_mpls_depth"
- type='{"type": "integer", "minInteger": 0}'>
- Maximum number of MPLS label stack entries to serialise in a mask.
- </column>
- <column name="capabilities" key="recirc" type='{"type": "boolean"}'>
- If this is true, then recirculation fields will always be serialised.
- </column>
- <column name="capabilities" key="ct_state" type='{"type": "boolean"}'>
- If true, datapath supports OVS_KEY_ATTR_CT_STATE.
- </column>
- <column name="capabilities" key="ct_zone" type='{"type": "boolean"}'>
- If true, datapath supports OVS_KEY_ATTR_CT_ZONE.
- </column>
- <column name="capabilities" key="ct_mark" type='{"type": "boolean"}'>
- If true, datapath supports OVS_KEY_ATTR_CT_MARK.
- </column>
- <column name="capabilities" key="ct_label" type='{"type": "boolean"}'>
- If true, datapath supports OVS_KEY_ATTR_CT_LABEL.
- </column>
- <column name="capabilities" key="ct_state_nat" type='{"type": "boolean"}'>
- If true, it means that the datapath supports the NAT bits in
- 'ct_state'. The above 'ct_state' member must be true for this
- to make sense.
- </column>
- <column name="capabilities" key="ct_orig_tuple"
- type='{"type": "boolean"}'>
- Conntrack original direction tuple matching * supported.
- </column>
- <column name="capabilities" key="ct_orig_tuple6"
- type='{"type": "boolean"}'>
- Conntrack original direction tuple6 matching * supported.
- </column>
- <column name="capabilities" key="masked_set_action"
- type='{"type": "boolean"}'>
- True if the datapath supports masked data in
- OVS_ACTION_ATTR_SET actions.
- </column>
- <column name="capabilities" key="tnl_push_pop" type='{"type": "boolean"}'>
- True if the datapath supports tnl_push and pop actions.
- </column>
- <column name="capabilities" key="ufid" type='{"type": "boolean"}'>
- True if the datapath supports OVS_FLOW_ATTR_UFID.
- </column>
- <column name="capabilities" key="trunc" type='{"type": "boolean"}'>
- True if the datapath supports OVS_ACTION_ATTR_TRUNC action.
- </column>
- <column name="capabilities" key="clone" type='{"type": "boolean"}'>
- True if the datapath supports OVS_ACTION_ATTR_CLONE action.
- </column>
- <column name="capabilities" key="sample_nesting"
- type='{"type": "integer", "minInteger": 0}'>
- Maximum level of nesting allowed by OVS_ACTION_ATTR_SAMPLE action.
- </column>
- <column name="capabilities" key="ct_eventmask" type='{"type": "boolean"}'>
- OVS_CT_ATTR_EVENTMASK supported by OVS_ACTION_ATTR_CT action.
- </column>
- <column name="capabilities" key="ct_clear" type='{"type": "boolean"}'>
- True if the datapath supports OVS_ACTION_ATTR_CT_CLEAR action.
- </column>
- <column name="capabilities" key="max_hash_alg"
- type='{"type": "integer", "minInteger": 0}'>
- Highest supported dp_hash algorithm.
- </column>
- <column name="capabilities" key="check_pkt_len"
- type='{"type": "boolean"}'>
- True if the datapath supports OVS_ACTION_ATTR_CHECK_PKT_LEN.
- </column>
- <column name="capabilities" key="ct_timeout" type='{"type": "boolean"}'>
- True if the datapath supports OVS_CT_ATTR_TIMEOUT in
- OVS_ACTION_ATTR_CTaction.
- </column>
+ <group title="Capabilities">
+ <p>
+ The <ref column="capabilities"/> column reports a datapath's
+ features. For the <code>netdev</code> datapath, the
+ capabilities are fixed for a given version of Open vSwitch
+ because this datapath is built into the
+ <code>ovs-vswitchd</code> binary. The Linux kernel and
+ Windows and other datapaths, which are external to OVS
+ userspace, can vary in version and capabilities independently
+ from <code>ovs-vswitchd</code>.
+ </p>
+
+ <p>
+ Some of these features indicate whether higher-level Open vSwitch
+ features are available. For example, OpenFlow features for
+ connection-tracking are available only when <ref column="capabilities"
+ key="ct_state"/> is <code>true</code>. A controller that wishes to
+ determine whether a feature is supported could, therefore, consult the
+ relevant capabilities in this table. However, as a general rule, it is
+ better for a controller to try to use the higher-level feature and use
+ the result as an indication of support, since the low-level
+ capabilities are more likely to shift over time than the high-level
+ features that rely on them.
+ </p>
+
+ <column name="capabilities" key="max_vlan_headers"
+ type='{"type": "integer", "minInteger": 0}'>
+ Number of 802.1q VLAN headers supported by the datapath, as probed by
+ the <code>ovs-vswitchd</code> slow path. If the datapath supports more
+ VLAN headers than the slow path, this reports the slow path's limit.
+ The value of <ref column="other-config" key="vlan-limit"/> in the <ref
+ table="Open_vSwitch"/> table does not influence the number reported
+ here.
+ </column>
+ <column name="capabilities" key="recirc" type='{"type": "boolean"}'>
+ If this is true, then the datapath supports recirculation,
+ specifically OVS_KEY_ATTR_RECIRC_ID. Recirculation enables
+ higher performance for MPLS and active-active load balancing
+ bonding modes.
+ </column>
+ <group title="Connection-Tracking Capabilities">
+ <p>
+ These capabilities are granular because Open vSwitch and its
+ datapaths added support for connection tracking over several
+ releases, with features added individually over that time.
+ </p>
+
+ <column name="capabilities" key="ct_state" type='{"type": "boolean"}'>
+ <p>
+ If true, datapath supports OVS_KEY_ATTR_CT_STATE, which indicates
+ support for the bits in the OpenFlow <code>ct_state</code> field
+ (see <code>ovs-fields</code>(7)) other than <code>snat</code> and
+ <code>dnat</code>, which have a separate capability.
+ </p>
+
+ <p>
+ If this is false, the datapath does not support connection-tracking
+ at all and the remaining connection-tracking capabilities should
+ all be false. In this case, Open vSwitch will reject flows that
+ match on the <code>ct_state</code> field or use the <code>ct</code>
+ action.
+ </p>
+ </column>
+ <column name="capabilities" key="ct_state_nat" type='{"type":
"boolean"}'>
+ <p>
+ If true, it means that the datapath supports the <code>snat</code>
+ and <code>dnat</code> flags in the OpenFlow <code>ct_state</code>
+ field. The <code>ct_state</code> capability must be true for this
to
+ make sense.
+ </p>
+
+ <p>
+ If false, Open vSwitch will reject flows that match on the
+ <code>snat</code> or <code>dnat</code> bits in
+ <code>ct_state</code> or use <code>nat</code> in the
+ <code>ct</code> action.
+ </p>
+ </column>
+ <column name="capabilities" key="ct_zone" type='{"type": "boolean"}'>
+ If true, datapath supports OVS_KEY_ATTR_CT_ZONE. If false, Open
+ vSwitch rejects flows that match on the <code>ct_zone</code> field or
+ that specify a nonzero zone or a zone field on the <code>ct</code>
+ action.
+ </column>
+ <column name="capabilities" key="ct_mark" type='{"type": "boolean"}'>
+ If true, datapath supports OVS_KEY_ATTR_CT_MARK. If false, Open
+ vSwitch rejects flows that match on the <code>ct_mark</code> field or
+ that set <code>ct_mark</code> in the <code>ct</code> action.
+ </column>
+ <column name="capabilities" key="ct_label" type='{"type": "boolean"}'>
+ If true, datapath supports OVS_KEY_ATTR_CT_LABEL. If false, Open
+ vSwitch rejects flows that match on the <code>ct_label</code> field
or
+ that set <code>ct_label</code> in the <code>ct</code> action.
+ </column>
+ <column name="capabilities" key="ct_orig_tuple"
+ type='{"type": "boolean"}'>
+ <p>
+ If true, the datapath supports matching the 5-tuple from the
+ connection's original direction for IPv4 traffic. If false, Open
+ vSwitch rejects flows that match on <code>ct_nw_src</code> or
+ <code>ct_nw_dst</code>, that use the <code>ct</code> feature of the
+ <code>resubmit</code> action, or the <code>force</code> keyword in
+ the <code>ct</code> action. (The latter isn't tied to connection
+ tracking support of original tuples in any technical way. They are
+ conflated because all current datapaths implemented the two
+ features at the same time.)
+ </p>
+
+ <p>
+ If this and <ref column="capabilities" key="ct_orig_tuple6"/> are
+ both false, Open vSwitch rejects flows that match on
+ <code>ct_nw_proto</code>, <code>ct_tp_src</code>, or
+ <code>ct_tp_dst</code>.
+ </p>
+ </column>
+ <column name="capabilities" key="ct_orig_tuple6"
+ type='{"type": "boolean"}'>
+ If true, the datapath supports matching the 5-tuple from the
+ connection's original direction for IPv6 traffic. If false, Open
+ vSwitch rejects flows that match on <code>ct_ipv6_src</code> or
+ <code>ct_ipv6_dst</code>.
+ </column>
+ </group>
+ <column name="capabilities" key="masked_set_action"
+ type='{"type": "boolean"}'>
+ True if the datapath supports masked data in OVS_ACTION_ATTR_SET
+ actions. Masked data can improve performance by allowing megaflows to
+ match on fewer fields.
+ </column>
+ <column name="capabilities" key="tnl_push_pop" type='{"type":
"boolean"}'>
+ True if the datapath supports tnl_push and pop actions. This is a
+ prerequisite for a datapath to support native tunneling.
+ </column>
+ <column name="capabilities" key="ufid" type='{"type": "boolean"}'>
+ True if the datapath supports OVS_FLOW_ATTR_UFID. UFID support
+ improves revalidation performance by transferring less data between
+ the slow path and the datapath.
+ </column>
+ <column name="capabilities" key="trunc" type='{"type": "boolean"}'>
+ True if the datapath supports OVS_ACTION_ATTR_TRUNC action. If false,
+ the <code>output</code> action with packet truncation requires every
+ packet to be sent to the Open vSwitch slow path, which is likely to
+ make it too slow for mirroring traffic in bulk.
+ </column>
+ <group title="Clone Actions">
+ <p>
+ When Open vSwitch translates actions from OpenFlow into the datapath
+ representation, some of the datapath actions may modify the packet or
+ have other side effects that later datapath actions can't undo. The
+ OpenFlow <code>ct</code>, <code>meter</code>, <code>output</code>
+ with truncation, <code>encap</code>, <code>decap</code>, and
+ <code>dec_nsh_ttl</code> actions fall into this category. Often,
+ this is not a problem because nothing later on needs the original
+ packet.
+ </p>
+
+ <p>
+ Such actions can, however, occur in circumstances where the
+ translation does require the original packet. For example, an
+ OpenFlow <code>output</code> action might direct a packet to a patch
+ port, which might in turn lead to a <code>ct</code> action that NATs
+ the packet (which cannot be undone), and then afterward when control
+ flow pops back across the patch port some other action might need to
+ act on the original packet.
+ </p>
+
+ <p>
+ Open vSwitch has two different ways to implement this ``save and
+ restore'' via datapath actions. These capabilities indicate which
+ one Open vSwitch will choose. When neither is available, Open
+ vSwitch simply fails in situations that require this feature.
+ </p>
+
+ <column name="capabilities" key="clone" type='{"type": "boolean"}'>
+ <p>
+ True if the datapath supports OVS_ACTION_ATTR_CLONE action. This
+ is the preferred option for saving and restoring packets, since it
+ is intended for the purpose, but old datapaths do not support it.
+ Open vSwitch will use it whenever it is available.
+ </p>
+
+ <p>
+ (The OpenFlow <code>clone</code> action does not always yield a
+ OVS_ACTION_ATTR_CLONE action. It only does so when the datapath
+ supports it and the <code>clone</code> brackets actions that
+ otherwise cannot be undone.)
+ </p>
+ </column>
+ <column name="capabilities" key="sample_nesting"
+ type='{"type": "integer", "minInteger": 0}'>
+ Maximum level of nesting allowed by OVS_ACTION_ATTR_SAMPLE action.
+ Open vSwitch misuses this action for saving and restoring packets
+ when the datapath supports more than 3 levels of nesting and
+ OVS_ACTION_ATTR_CLONE is not available.
+ </column>
+ </group>
+ <column name="capabilities" key="ct_eventmask" type='{"type":
"boolean"}'>
+ True if the datapath's OVS_ACTION_ATTR_CT action implements the
+ OVS_CT_ATTR_EVENTMASK attribute. When this is true, Open vSwitch uses
+ the event mask feature to limit the kinds of events reported to
+ conntrack update listeners. When Open vSwitch doesn't limit the event
+ mask, listeners receive reports of numerous usually unimportant events,
+ such as TCP state machine changes, which can waste CPU time.
+ </column>
+ <column name="capabilities" key="ct_clear" type='{"type": "boolean"}'>
+ True if the datapath supports OVS_ACTION_ATTR_CT_CLEAR action.
+ If false, the OpenFlow <code>ct_clear</code> action has no effect
+ on the datapath.
+ </column>
+ <column name="capabilities" key="max_hash_alg"
+ type='{"type": "integer", "minInteger": 0}'>
+ Highest supported dp_hash algorithm. This allows Open vSwitch to avoid
+ requesting a packet hash that the datapath does not support.
+ </column>
+ <column name="capabilities" key="check_pkt_len"
+ type='{"type": "boolean"}'>
+ True if the datapath supports OVS_ACTION_ATTR_CHECK_PKT_LEN. If false,
+ Open vSwitch implements the <code>check_pkt_larger</code> action by
+ sending every packet through the Open vSwitch slow path, which is
+ likely to make it too slow for handling traffic in bulk.
+ </column>
+ <column name="capabilities" key="ct_timeout" type='{"type": "boolean"}'>
+ True if the datapath supports OVS_CT_ATTR_TIMEOUT in the
+ OVS_ACTION_ATTR_CT action. If false, Open vswitch cannot implement
+ timeout policies based on connection tracking zones, as configured
+ through the <code>CT_Timeout_Policy</code> table.
+ </column>
+ </group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev