]> git.proxmox.com Git - mirror_ovs.git/blame - utilities/ovs-ofctl.8.in
ofproto: Add support for specifying a meter in controller actions.
[mirror_ovs.git] / utilities / ovs-ofctl.8.in
CommitLineData
a9b4a41a
BP
1.\" -*- nroff -*-
2.de IQ
3. br
4. ns
5. IP "\\$1"
6..
d2cb6c95 7.TH ovs\-ofctl 8 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
064af421 8.ds PN ovs\-ofctl
a9b4a41a 9.
064af421
BP
10.SH NAME
11ovs\-ofctl \- administer OpenFlow switches
a9b4a41a 12.
064af421
BP
13.SH SYNOPSIS
14.B ovs\-ofctl
15[\fIoptions\fR] \fIcommand \fR[\fIswitch\fR] [\fIargs\fR\&...]
a9b4a41a 16.
064af421
BP
17.SH DESCRIPTION
18The
19.B ovs\-ofctl
20program is a command line tool for monitoring and administering
21OpenFlow switches. It can also show the current state of an OpenFlow
22switch, including features, configuration, and table entries.
0d8e9638 23It should work with any OpenFlow switch, not just Open vSwitch.
a9b4a41a 24.
064af421 25.SS "OpenFlow Switch Management Commands"
a9b4a41a 26.PP
064af421
BP
27These commands allow \fBovs\-ofctl\fR to monitor and administer an OpenFlow
28switch. It is able to show the current state of a switch, including
29features, configuration, and table entries.
a9b4a41a 30.PP
064af421
BP
31Most of these commands take an argument that specifies the method for
32connecting to an OpenFlow switch. The following connection methods
33are supported:
a9b4a41a 34.
064af421 35.RS
84ee7bcf
BP
36.so lib/vconn-active.man
37.
064af421
BP
38.IP "\fIfile\fR"
39This is short for \fBunix:\fIfile\fR, as long as \fIfile\fR does not
40contain a colon.
84ee7bcf 41.
1a6f1e2a
JG
42.IP \fIbridge\fR
43This is short for \fBunix:@RUNDIR@/\fIbridge\fB.mgmt\fR, as long as
44\fIbridge\fR does not contain a colon.
45.
46.IP [\fItype\fB@\fR]\fIdp\fR
47Attempts to look up the bridge associated with \fIdp\fR and open as
48above. If \fItype\fR is given, it specifies the datapath provider of
49\fIdp\fR, otherwise the default provider \fBsystem\fR is assumed.
064af421 50.RE
a9b4a41a 51.
064af421
BP
52.TP
53\fBshow \fIswitch\fR
54Prints to the console information on \fIswitch\fR, including
55information on its flow tables and ports.
a9b4a41a 56.
064af421 57.TP
4e312e69 58\fBdump\-tables \fIswitch\fR
064af421
BP
59Prints to the console statistics for each of the flow tables used by
60\fIswitch\fR.
5deff5aa
AW
61.TP
62\fBdump\-table\-features \fIswitch\fR
63Prints to the console features for each of the flow tables used by
64\fIswitch\fR.
03c72922
BP
65.TP
66\fBdump\-table\-desc \fIswitch\fR
67Prints to the console configuration for each of the flow tables used
68by \fIswitch\fR for OpenFlow 1.4+.
4bc938cc
BP
69.IP "\fBmod\-table \fIswitch\fR \fItable\fR \fIsetting\fR"
70This command configures flow table settings in \fIswitch\fR for
71OpenFlow table \fItable\fR, which may be expressed as a number or
72(unless \fB\-\-no\-names\fR is specified) a name.
73.IP
74The available settings depend on
82c22d34
BP
75the OpenFlow version in use. In OpenFlow 1.1 and 1.2 (which must be
76enabled with the \fB\-O\fR option) only, \fBmod\-table\fR configures
77behavior when no flow is found when a packet is looked up in a flow
78table. The following \fIsetting\fR values are available:
c354fcc5
TG
79.RS
80.IP \fBdrop\fR
81Drop the packet.
82.IP \fBcontinue\fR
83Continue to the next table in the pipeline. (This is how an OpenFlow
841.0 switch always handles packets that do not match any flow, in
85tables other than the last one.)
86.IP \fBcontroller\fR
87Send to controller. (This is how an OpenFlow 1.0 switch always
88handles packets that do not match any flow in the last table.)
89.RE
82c22d34
BP
90.IP
91In OpenFlow 1.4 and later (which must be enabled with the \fB\-O\fR
92option) only, \fBmod\-table\fR configures the behavior when a
93controller attempts to add a flow to a flow table that is full. The
94following \fIsetting\fR values are available:
95.RS
96.IP \fBevict\fR
97Delete some existing flow from the flow table, according to the
98algorithm described for the \fBFlow_Table\fR table in
99\fBovs-vswitchd.conf.db\fR(5).
100.IP \fBnoevict\fR
101Refuse to add the new flow. (Eviction might still be enabled through
de7d3c07 102the \fBoverflow_policy\fR column in the \fBFlow_Table\fR table
82c22d34 103documented in \fBovs-vswitchd.conf.db\fR(5).)
de7d3c07
SJ
104.IP \fBvacancy:\fIlow\fB,\fIhigh\fR
105Enables sending vacancy events to controllers using \fBTABLE_STATUS\fR
106messages, based on percentage thresholds \fIlow\fR and \fIhigh\fR.
107.IP \fBnovacancy\fR
108Disables vacancy events.
82c22d34 109.RE
c354fcc5 110.
064af421 111.TP
4e312e69 112\fBdump\-ports \fIswitch\fR [\fInetdev\fR]
abaad8cf
JP
113Prints to the console statistics for network devices associated with
114\fIswitch\fR. If \fInetdev\fR is specified, only the statistics
115associated with that device will be printed. \fInetdev\fR can be an
116OpenFlow assigned port number or device name, e.g. \fBeth0\fR.
a9b4a41a 117.
70ae4f93 118.IP "\fBdump\-ports\-desc \fIswitch\fR [\fIport\fR]"
2be393ed 119Prints to the console detailed information about network devices
70ae4f93
BP
120associated with \fIswitch\fR. To dump only a specific port, specify
121its number as \fIport\fR. Otherwise, if \fIport\fR is omitted, or if
122it is specified as \fBANY\fR, then all ports are printed. This is a
123subset of the information provided by the \fBshow\fR command.
124.IP
125If the connection to \fIswitch\fR negotiates OpenFlow 1.0, 1.2, or
1261.2, this command uses an OpenFlow extension only implemented in Open
127vSwitch (version 1.7 and later).
128.IP
129Only OpenFlow 1.5 and later support dumping a specific port. Earlier
130versions of OpenFlow always dump all ports.
2be393ed 131.
c6100d92
BP
132.IP "\fBmod\-port \fIswitch\fR \fIport\fR \fIaction\fR"
133Modify characteristics of port \fBport\fR in \fIswitch\fR. \fIport\fR
50f96b10
BP
134may be an OpenFlow port number or name (unless \fB\-\-no\-names\fR is
135specified) or the keyword \fBLOCAL\fR (the
c6100d92
BP
136preferred way to refer to the OpenFlow local port). The \fIaction\fR
137may be any one of the following:
a9b4a41a 138.
064af421 139.RS
28124950
BP
140.IQ \fBup\fR
141.IQ \fBdown\fR
0b2c7e69
BP
142Enable or disable the interface. This is equivalent to \fBip
143link set up\fR or \fBip link set down\fR on a Unix system.
28124950
BP
144.
145.IP \fBstp\fR
146.IQ \fBno\-stp\fR
147Enable or disable 802.1D spanning tree protocol (STP) on the
148interface. OpenFlow implementations that don't support STP will
149refuse to enable it.
150.
151.IP \fBreceive\fR
152.IQ \fBno\-receive\fR
153.IQ \fBreceive\-stp\fR
154.IQ \fBno\-receive\-stp\fR
155Enable or disable OpenFlow processing of packets received on this
156interface. When packet processing is disabled, packets will be
157dropped instead of being processed through the OpenFlow table. The
158\fBreceive\fR or \fBno\-receive\fR setting applies to all packets
159except 802.1D spanning tree packets, which are separately controlled
160by \fBreceive\-stp\fR or \fBno\-receive\-stp\fR.
a9b4a41a 161.
451256f6 162.IP \fBforward\fR
28124950
BP
163.IQ \fBno\-forward\fR
164Allow or disallow forwarding of traffic to this interface. By
165default, forwarding is enabled.
451256f6 166.
064af421 167.IP \fBflood\fR
28124950
BP
168.IQ \fBno\-flood\fR
169Controls whether an OpenFlow \fBflood\fR action will send traffic out
170this interface. By default, flooding is enabled. Disabling flooding
171is primarily useful to prevent loops when a spanning tree protocol is
172not in use.
173.
174.IP \fBpacket\-in\fR
175.IQ \fBno\-packet\-in\fR
176Controls whether packets received on this interface that do not match
177a flow table entry generate a ``packet in'' message to the OpenFlow
178controller. By default, ``packet in'' messages are enabled.
064af421 179.RE
28124950
BP
180.IP
181The \fBshow\fR command displays (among other information) the
182configuration that \fBmod\-port\fR changes.
a9b4a41a 183.
7257b535
BP
184.IP "\fBget\-frags \fIswitch\fR"
185Prints \fIswitch\fR's fragment handling mode. See \fBset\-frags\fR,
186below, for a description of each fragment handling mode.
187.IP
188The \fBshow\fR command also prints the fragment handling mode among
189its other output.
190.
191.IP "\fBset\-frags \fIswitch frag_mode\fR"
192Configures \fIswitch\fR's treatment of IPv4 and IPv6 fragments. The
193choices for \fIfrag_mode\fR are:
194.RS
195.IP "\fBnormal\fR"
196Fragments pass through the flow table like non-fragmented packets.
197The TCP ports, UDP ports, and ICMP type and code fields are always set
198to 0, even for fragments where that information would otherwise be
199available (fragments with offset 0). This is the default fragment
200handling mode for an OpenFlow switch.
201.IP "\fBdrop\fR"
202Fragments are dropped without passing through the flow table.
203.IP "\fBreassemble\fR"
204The switch reassembles fragments into full IP packets before passing
205them through the flow table. Open vSwitch does not implement this
206fragment handling mode.
207.IP "\fBnx\-match\fR"
208Fragments pass through the flow table like non-fragmented packets.
209The TCP ports, UDP ports, and ICMP type and code fields are available
210for matching for fragments with offset 0, and set to 0 in fragments
211with nonzero offset. This mode is a Nicira extension.
212.RE
213.IP
214See the description of \fBip_frag\fR, below, for a way to match on
215whether a packet is a fragment and on its fragment offset.
216.
064af421 217.TP
4e312e69 218\fBdump\-flows \fIswitch \fR[\fIflows\fR]
064af421
BP
219Prints to the console all flow entries in \fIswitch\fR's
220tables that match \fIflows\fR. If \fIflows\fR is omitted, all flows
221in the switch are retrieved. See \fBFlow Syntax\fR, below, for the
bdcc5925 222syntax of \fIflows\fR. The output format is described in
064af421 223\fBTable Entry Output\fR.
a9b4a41a 224.
bdcc5925
BP
225.IP
226By default, \fBovs\-ofctl\fR prints flow entries in the same order
227that the switch sends them, which is unlikely to be intuitive or
1b3758c3
BP
228consistent. Use \fB\-\-sort\fR and \fB\-\-rsort\fR to control display
229order. The \fB\-\-names\fR/\fB\-\-no\-names\fR and
230\fB\-\-stats\fR/\fB\-\-no\-stats\fR options also affect output
231formatting. See the descriptions of these options, under
232\fBOPTIONS\fR below, for more information
bdcc5925 233.
064af421 234.TP
4e312e69 235\fBdump\-aggregate \fIswitch \fR[\fIflows\fR]
bdcc5925 236Prints to the console aggregate statistics for flows in
064af421
BP
237\fIswitch\fR's tables that match \fIflows\fR. If \fIflows\fR is omitted,
238the statistics are aggregated across all flows in the switch's flow
239tables. See \fBFlow Syntax\fR, below, for the syntax of \fIflows\fR.
3845a3fd 240The output format is described in \fBTable Entry Output\fR.
a9b4a41a 241.
d2805da2
BP
242.IP "\fBqueue\-stats \fIswitch \fR[\fIport \fR[\fIqueue\fR]]"
243Prints to the console statistics for the specified \fIqueue\fR on
c6100d92
BP
244\fIport\fR within \fIswitch\fR. \fIport\fR can be an OpenFlow port
245number or name, the keyword \fBLOCAL\fR (the preferred way to refer to
246the OpenFlow local port), or the keyword \fBALL\fR. Either of
247\fIport\fR or \fIqueue\fR or both may be omitted (or equivalently the
248keyword \fBALL\fR). If both are omitted, statistics are printed for
249all queues on all ports. If only \fIqueue\fR is omitted, then
250statistics are printed for all queues on \fIport\fR; if only
251\fIport\fR is omitted, then statistics are printed for \fIqueue\fR on
252every port where it exists.
d2805da2 253.
e016fb63
BP
254.IP "\fBqueue\-get\-config \fIswitch [\fIport \fR[\fIqueue\fR]]"
255Prints to the console the configuration of \fIqueue\fR on \fIport\fR
256in \fIswitch\fR. If \fIport\fR is omitted or \fBANY\fR, reports
257queues for all port. If \fIqueue\fR is omitted or \fBANY\fR, reports
258all queues. For OpenFlow 1.3 and earlier, the output always includes
259all queues, ignoring \fIqueue\fR if specified.
56085be5
BP
260.IP
261This command has limited usefulness, because ports often have no
262configured queues and because the OpenFlow protocol provides only very
263limited information about the configuration of a queue.
264.
56fb20c4 265.IP "\fBdump\-ipfix\-bridge \fIswitch\fR"
fb8f22c1
BY
266Prints to the console the statistics of bridge IPFIX for \fIswitch\fR.
267If bridge IPFIX is configured on the \fIswitch\fR, IPFIX statistics
268can be retrieved. Otherwise, error message will be printed.
269.IP
270This command uses an Open vSwitch extension that is only in Open
271vSwitch 2.6 and later.
272.
56fb20c4 273.IP "\fBdump\-ipfix\-flow \fIswitch\fR"
fb8f22c1
BY
274Prints to the console the statistics of flow-based IPFIX for
275\fIswitch\fR. If flow-based IPFIX is configured on the \fIswitch\fR,
276statistics of all the collector set ids on the \fIswitch\fR will be
277printed. Otherwise, print error message.
278.IP
56fb20c4 279Refer to \fBovs\-vswitchd.conf.db\fR(5) for more details on configuring
fb8f22c1
BY
280flow based IPFIX and collector set ids.
281.IP
282This command uses an Open vSwitch extension that is only in Open
283vSwitch 2.6 and later.
284.
2a7c4805
JP
285.IP "\fBct\-flush\-zone \fIswitch zone\fR
286Flushes the connection tracking entries in \fIzone\fR on \fIswitch\fR.
287.IP
288This command uses an Open vSwitch extension that is only in Open
289vSwitch 2.6 and later.
290.
4989c59f
BP
291.SS "OpenFlow Switch Flow Table Commands"
292.
293These commands manage the flow table in an OpenFlow switch. In each
294case, \fIflow\fR specifies a flow entry in the format described in
db5076ee
JR
295\fBFlow Syntax\fR, below, \fIfile\fR is a text file that contains zero
296or more flows in the same syntax, one per line, and the optional
39c94593
JR
297\fB\-\-bundle\fR option operates the command as a single atomic
298transation, see option \fB\-\-bundle\fR, below.
db5076ee
JR
299.
300.IP "[\fB\-\-bundle\fR] \fBadd\-flow \fIswitch flow\fR"
301.IQ "[\fB\-\-bundle\fR] \fBadd\-flow \fIswitch \fB\- < \fIfile\fR"
302.IQ "[\fB\-\-bundle\fR] \fBadd\-flows \fIswitch file\fR"
4989c59f
BP
303Add each flow entry to \fIswitch\fR's tables.
304.
db5076ee
JR
305Each flow specification (e.g., each line in \fIfile\fR) may start with
306\fBadd\fR, \fBmodify\fR, \fBdelete\fR, \fBmodify_strict\fR, or
307\fBdelete_strict\fR keyword to specify whether a flow is to be added,
308modified, or deleted, and whether the modify or delete is strict or
309not. For backwards compatibility a flow specification without one of
310these keywords is treated as a flow add. All flow mods are executed
311in the order specified.
312.
313.IP "[\fB\-\-bundle\fR] [\fB\-\-strict\fR] \fBmod\-flows \fIswitch flow\fR"
314.IQ "[\fB\-\-bundle\fR] [\fB\-\-strict\fR] \fBmod\-flows \fIswitch \fB\- < \fIfile\fR"
4989c59f
BP
315Modify the actions in entries from \fIswitch\fR's tables that match
316the specified flows. With \fB\-\-strict\fR, wildcards are not treated
317as active for matching purposes.
318.
db5076ee
JR
319.IP "[\fB\-\-bundle\fR] \fBdel\-flows \fIswitch\fR"
320.IQ "[\fB\-\-bundle\fR] [\fB\-\-strict\fR] \fBdel\-flows \fIswitch \fR[\fIflow\fR]"
321.IQ "[\fB\-\-bundle\fR] [\fB\-\-strict\fR] \fBdel\-flows \fIswitch \fB\- < \fIfile\fR"
4989c59f
BP
322Deletes entries from \fIswitch\fR's flow table. With only a
323\fIswitch\fR argument, deletes all flows. Otherwise, deletes flow
324entries that match the specified flows. With \fB\-\-strict\fR,
325wildcards are not treated as active for matching purposes.
a9b4a41a 326.
db5076ee 327.IP "[\fB\-\-bundle\fR] [\fB\-\-readd\fR] \fBreplace\-flows \fIswitch file\fR"
0199c526
BP
328Reads flow entries from \fIfile\fR (or \fBstdin\fR if \fIfile\fR is
329\fB\-\fR) and queries the flow table from \fIswitch\fR. Then it fixes
330up any differences, adding flows from \fIflow\fR that are missing on
331\fIswitch\fR, deleting flows from \fIswitch\fR that are not in
332\fIfile\fR, and updating flows in \fIswitch\fR whose actions, cookie,
333or timeouts differ in \fIfile\fR.
334.
c4ea79bf
BP
335.IP
336With \fB\-\-readd\fR, \fBovs\-ofctl\fR adds all the flows from
337\fIfile\fR, even those that exist with the same actions, cookie, and
b6dc6b93
BP
338timeout in \fIswitch\fR. In OpenFlow 1.0 and 1.1, re-adding a flow
339always resets the flow's packet and byte counters to 0, and in
340OpenFlow 1.2 and later, it does so only if the \fBreset_counts\fR flag
341is set.
c4ea79bf 342.
0199c526
BP
343.IP "\fBdiff\-flows \fIsource1 source2\fR"
344Reads flow entries from \fIsource1\fR and \fIsource2\fR and prints the
345differences. A flow that is in \fIsource1\fR but not in \fIsource2\fR
346is printed preceded by a \fB\-\fR, and a flow that is in \fIsource2\fR
347but not in \fIsource1\fR is printed preceded by a \fB+\fR. If a flow
348exists in both \fIsource1\fR and \fIsource2\fR with different actions,
349cookie, or timeouts, then both versions are printed preceded by
350\fB\-\fR and \fB+\fR, respectively.
351.IP
352\fIsource1\fR and \fIsource2\fR may each name a file or a switch. If
353a name begins with \fB/\fR or \fB.\fR, then it is considered to be a
354file name. A name that contains \fB:\fR is considered to be a switch.
355Otherwise, it is a file if a file by that name exists, a switch if
356not.
357.IP
358For this command, an exit status of 0 means that no differences were
359found, 1 means that an error occurred, and 2 means that some
360differences were found.
361.
6dd3c787
JR
362.IP "\fBpacket\-out \fIswitch\fR \fIpacket-out\fR"
363Connects to \fIswitch\fR and instructs it to execute the
364\fIpacket-out\fR OpenFlow message, specified as defined in
365\fBPacket\-Out Syntax\fR section.
0c3d5fc8 366.
7b809df9 367.SS "Group Table Commands"
7395c052
NZ
368.
369These commands manage the group table in an OpenFlow switch. In each
370case, \fIgroup\fR specifies a group entry in the format described in
371\fBGroup Syntax\fR, below, and \fIfile\fR is a text file that contains
25070e04
JR
372zero or more groups in the same syntax, one per line, and the optional
373\fB\-\-bundle\fR option operates the command as a single atomic
374transation, see option \fB\-\-bundle\fR, below.
481bde49 375.PP
7b809df9
BP
376The group commands work only with switches that support OpenFlow 1.1
377or later or the Open vSwitch group extensions to OpenFlow 1.0 (added
378in Open vSwitch 2.9.90). For OpenFlow 1.1 or later, it is necessary
379to explicitly enable these protocol versions in \fBovs\-ofctl\fR
380(using \fB\-O\fR). For more information, see ``Q: What versions of
381OpenFlow does Open vSwitch support?'' in the Open vSwitch FAQ.
481bde49 382.
25070e04
JR
383.IP "[\fB\-\-bundle\fR] \fBadd\-group \fIswitch group\fR"
384.IQ "[\fB\-\-bundle\fR] \fBadd\-group \fIswitch \fB\- < \fIfile\fR"
385.IQ "[\fB\-\-bundle\fR] \fBadd\-groups \fIswitch file\fR"
7395c052
NZ
386Add each group entry to \fIswitch\fR's tables.
387.
25070e04
JR
388Each group specification (e.g., each line in \fIfile\fR) may start
389with \fBadd\fR, \fBmodify\fR, \fBadd_or_mod\fR, \fBdelete\fR,
390\fBinsert_bucket\fR, or \fBremove_bucket\fR keyword to specify whether
391a flow is to be added, modified, or deleted, or whether a group bucket
392is to be added or removed. For backwards compatibility a group
393specification without one of these keywords is treated as a group add.
394All group mods are executed in the order specified.
395.
396.IP "[\fB\-\-bundle\fR] [\fB\-\-may\-create\fR] \fBmod\-group \fIswitch group\fR"
397.IQ "[\fB\-\-bundle\fR] [\fB\-\-may\-create\fR] \fBmod\-group \fIswitch \fB\- < \fIfile\fR"
7395c052 398Modify the action buckets in entries from \fIswitch\fR's tables for
88b87a36
JS
399each group entry. If a specified group does not already exist, then
400without \fB\-\-may\-create\fR, this command has no effect; with
401\fB\-\-may\-create\fR, it creates a new group. The
402\fB\-\-may\-create\fR option uses an Open vSwitch extension to
403OpenFlow only implemented in Open vSwitch 2.6 and later.
7395c052 404.
25070e04
JR
405.IP "[\fB\-\-bundle\fR] \fBdel\-groups \fIswitch\fR"
406.IQ "[\fB\-\-bundle\fR] \fBdel\-groups \fIswitch \fR[\fIgroup\fR]"
407.IQ "[\fB\-\-bundle\fR] \fBdel\-groups \fIswitch \fB\- < \fIfile\fR"
7395c052
NZ
408Deletes entries from \fIswitch\fR's group table. With only a
409\fIswitch\fR argument, deletes all groups. Otherwise, deletes the group
410for each group entry.
411.
25070e04
JR
412.IP "[\fB\-\-bundle\fR] \fBinsert\-buckets \fIswitch group\fR"
413.IQ "[\fB\-\-bundle\fR] \fBinsert\-buckets \fIswitch \fB\- < \fIfile\fR"
bdbb8426
SH
414Add buckets to an existing group present in the \fIswitch\fR's group table.
415If no \fIcommand_bucket_id\fR is present in the group specification then all
416buckets of the group are removed.
417.
25070e04
JR
418.IP "[\fB\-\-bundle\fR] \fBremove\-buckets \fIswitch group\fR"
419.IQ "[\fB\-\-bundle\fR] \fBremove\-buckets \fIswitch \fB\- < \fIfile\fR"
bdbb8426
SH
420Remove buckets to an existing group present in the \fIswitch\fR's group table.
421If no \fIcommand_bucket_id\fR is present in the group specification then all
422buckets of the group are removed.
423.
481bde49
JP
424.IP "\fBdump\-groups \fIswitch\fR [\fIgroup\fR]"
425Prints group entries in \fIswitch\fR's tables to console. To dump
426only a specific group, specify its number as \fIgroup\fR. Otherwise,
427if \fIgroup\fR is omitted, or if it is specified as \fBALL\fR, then
428all groups are printed.
429.IP
430Only OpenFlow 1.5 and later support dumping a specific group. Earlier
431versions of OpenFlow always dump all groups.
432.
433.IP "\fBdump\-group\-features \fIswitch"
434Prints to the console the group features of the \fIswitch\fR.
435.
436.IP "\fBdump\-group\-stats \fIswitch \fR[\fIgroup\fR]"
437Prints to the console statistics for the specified \fIgroup\fR in
438\fIswitch\fR's tables. If \fIgroup\fR is omitted then statistics for all
439groups are printed.
440.
441.SS "OpenFlow 1.3+ Switch Meter Table Commands"
442.
443These commands manage the meter table in an OpenFlow switch. In each
444case, \fImeter\fR specifies a meter entry in the format described in
445\fBMeter Syntax\fR, below.
446.
447.PP
448OpenFlow 1.3 introduced support for meters, so these commands only work
449with switches that support OpenFlow 1.3 or later. It is necessary to
450explicitly enable these protocol versions in \fBovs\-ofctl\fR (using
451\fB\-O\fR) and in the switch itself (with the \fBprotocols\fR column in
452the \fBBridge\fR table). For more information, see ``Q: What versions
453of OpenFlow does Open vSwitch support?'' in the Open vSwitch FAQ.
454.
455.IP "\fBadd\-meter \fIswitch meter\fR"
456Add a meter entry to \fIswitch\fR's tables. The \fImeter\fR syntax is
457described in section \fBMeter Syntax\fR, below.
458.
459.IP "\fBmod\-meter \fIswitch meter\fR"
460Modify an existing meter.
461.
04f803fd
JP
462.IP "\fBdel\-meters \fIswitch\fR [\fImeter\fR]"
463Delete entries from \fIswitch\fR's meter table. To delete only a
464specific meter, specify its number as \fImeter\fR. Otherwise, if
465\fImeter\fR is omitted, or if it is specified as \fBall\fR, then all
466meters are deleted.
467.
468.IP "\fBdump\-meters \fIswitch\fR [\fImeter\fR]"
469Print entries from \fIswitch\fR's meter table. To print only a
470specific meter, specify its number as \fImeter\fR. Otherwise, if
471\fImeter\fR is omitted, or if it is specified as \fBall\fR, then all
472meters are printed.
481bde49
JP
473.
474.IP "\fBmeter\-stats \fIswitch\fR [\fImeter\fR]"
475Print meter statistics. \fImeter\fR can specify a single meter with
476syntax \fBmeter=\fIid\fR, or all meters with syntax \fBmeter=all\fR.
477.
478.IP "\fBmeter\-features \fIswitch\fR"
479Print meter features.
480.
25070e04
JR
481.SS OpenFlow Switch Bundle Command
482.
483Transactional updates to both flow and group tables can be made with
484the \fBbundle\fR command. \fIfile\fR is a text file that contains
6dd3c787
JR
485zero or more flow mods, group mods, or packet-outs in \fBFlow
486Syntax\fR, \fBGroup Syntax\fR, or \fBPacket\-Out Syntax\fR, each line
487preceded by \fBflow\fR, \fBgroup\fR, or \fBpacket\-out\fR keyword,
488correspondingly. The \fBflow\fR keyword may be optionally followed by
489one of the keywords \fBadd\fR, \fBmodify\fR, \fBmodify_strict\fR,
25070e04
JR
490\fBdelete\fR, or \fBdelete_strict\fR, of which the \fBadd\fR is
491assumed if a bare \fBflow\fR is given. Similarly, the \fBgroup\fR
492keyword may be optionally followed by one of the keywords \fBadd\fR,
493\fBmodify\fR, \fBadd_or_mod\fR, \fBdelete\fR, \fBinsert_bucket\fR, or
494\fBremove_bucket\fR, of which the \fBadd\fR is assumed if a bare
495\fBgroup\fR is given.
496.
497.IP "\fBbundle \fIswitch file\fR"
498Execute all flow and group mods in \fIfile\fR as a single atomic
499transaction against \fIswitch\fR's tables. All bundled mods are
500executed in the order specified.
501.
4e548ad9 502.SS "OpenFlow Switch Tunnel TLV Table Commands"
6159c531 503.
4e548ad9
ML
504Open vSwitch maintains a mapping table between tunnel option TLVs (defined
505by <class, type, length>) and NXM fields \fBtun_metadata\fIn\fR,
1e71b944 506where \fIn\fR ranges from 0 to 63, that can be operated on for the
4e548ad9
ML
507purposes of matches, actions, etc. This TLV table can be used for
508Geneve option TLVs or other protocols with options in same TLV format
509as Geneve options. This mapping must be explicitly specified by the user
510through the following commands.
6159c531 511
4e548ad9 512A TLV mapping is specified with the syntax
1e71b944
BP
513\fB{class=\fIclass\fB,type=\fItype\fB,len=\fIlength\fB}->tun_metadata\fIn\fR.
514When an option mapping exists for a given \fBtun_metadata\fIn\fR,
515matching on the defined field becomes possible, e.g.:
516
517.RS
4e548ad9 518ovs-ofctl add-tlv-map br0 "{class=0xffff,type=0,len=4}->tun_metadata0"
1e71b944
BP
519.PP
520ovs-ofctl add-flow br0 tun_metadata0=1234,actions=controller
521.RE
522
523A mapping should not be changed while it is in active
524use by a flow. The result of doing so is undefined.
6159c531
JG
525
526These commands are Nicira extensions to OpenFlow and require Open vSwitch
5272.5 or later.
528
b8e2f655 529.IP "\fBadd\-tlv\-map \fIswitch option\fR[\fB,\fIoption\fR]..."
1e71b944 530Add each \fIoption\fR to \fIswitch\fR's tables. Duplicate fields are
6159c531
JG
531rejected.
532.
b8e2f655 533.IP "\fBdel\-tlv\-map \fIswitch \fR[\fIoption\fR[\fB,\fIoption\fR]]..."
4e548ad9 534Delete each \fIoption\fR from \fIswitch\fR's table, or all option TLV
1e71b944
BP
535mapping if no \fIoption\fR is specified.
536Fields that aren't mapped are ignored.
6159c531 537.
b8e2f655 538.IP "\fBdump\-tlv\-map \fIswitch\fR"
6159c531
JG
539Show the currently mapped fields in the switch's option table as well
540as switch capabilities.
541.
4989c59f
BP
542.SS "OpenFlow Switch Monitoring Commands"
543.
0caf6bde
BP
544.IP "\fBsnoop \fIswitch\fR"
545Connects to \fIswitch\fR and prints to the console all OpenFlow
546messages received. Unlike other \fBovs\-ofctl\fR commands, if
547\fIswitch\fR is the name of a bridge, then the \fBsnoop\fR command
548connects to a Unix domain socket named
421e818c 549\fB@RUNDIR@/\fIswitch\fB.snoop\fR. \fBovs\-vswitchd\fR listens on
0caf6bde
BP
550such a socket for each bridge and sends to it all of the OpenFlow
551messages sent to or received from its configured OpenFlow controller.
552Thus, this command can be used to view OpenFlow protocol activity
553between a switch and its controller.
554.IP
555When a switch has more than one controller configured, only the
e2bfacb6
BP
556traffic to and from a single controller is output. If none of the
557controllers is configured as a master or a slave (using a Nicira
70d0aed3
BP
558extension to OpenFlow 1.0 or 1.1, or a standard request in OpenFlow
5591.2 or later), then a controller is chosen arbitrarily among
e2bfacb6
BP
560them. If there is a master controller, it is chosen; otherwise, if
561there are any controllers that are not masters or slaves, one is
562chosen arbitrarily; otherwise, a slave controller is chosen
563arbitrarily. This choice is made once at connection time and does not
564change as controllers reconfigure their roles.
565.IP
566If a switch has no controller configured, or if
0caf6bde
BP
567the configured controller is disconnected, no traffic is sent, so
568monitoring will not show any traffic.
569.
2b07c8b1 570.IP "\fBmonitor \fIswitch\fR [\fImiss-len\fR] [\fBinvalid_ttl\fR] [\fBwatch:\fR[\fIspec\fR...]]"
064af421 571Connects to \fIswitch\fR and prints to the console all OpenFlow
045b2e5c
BP
572messages received. Usually, \fIswitch\fR should specify the name of a
573bridge in the \fBovs\-vswitchd\fR database.
a9b4a41a 574.IP
064af421
BP
575If \fImiss-len\fR is provided, \fBovs\-ofctl\fR sends an OpenFlow ``set
576configuration'' message at connection setup time that requests
0caf6bde
BP
577\fImiss-len\fR bytes of each packet that misses the flow table. Open vSwitch
578does not send these and other asynchronous messages to an
064af421 579\fBovs\-ofctl monitor\fR client connection unless a nonzero value is
0caf6bde
BP
580specified on this argument. (Thus, if \fImiss\-len\fR is not
581specified, very little traffic will ordinarily be printed.)
a9b4a41a 582.IP
f0fd1a17
PS
583If \fBinvalid_ttl\fR is passed, \fBovs\-ofctl\fR sends an OpenFlow ``set
584configuration'' message at connection setup time that requests
5484c47a
BP
585\fBINVALID_TTL_TO_CONTROLLER\fR, so that \fBovs\-ofctl monitor\fR can
586receive ``packet-in'' messages when TTL reaches zero on \fBdec_ttl\fR action.
ad99e2ed
BP
587Only OpenFlow 1.1 and 1.2 support \fBinvalid_ttl\fR; Open vSwitch also
588implements it for OpenFlow 1.0 as an extension.
f0fd1a17 589.IP
2b07c8b1
BP
590\fBwatch:\fR[\fB\fIspec\fR...] causes \fBovs\-ofctl\fR to send a
591``monitor request'' Nicira extension message to the switch at
592connection setup time. This message causes the switch to send
593information about flow table changes as they occur. The following
594comma-separated \fIspec\fR syntax is available:
595.RS
596.IP "\fB!initial\fR"
597Do not report the switch's initial flow table contents.
598.IP "\fB!add\fR"
599Do not report newly added flows.
600.IP "\fB!delete\fR"
601Do not report deleted flows.
602.IP "\fB!modify\fR"
603Do not report modifications to existing flows.
604.IP "\fB!own\fR"
605Abbreviate changes made to the flow table by \fBovs\-ofctl\fR's own
606connection to the switch. (These could only occur using the
607\fBofctl/send\fR command described below under \fBRUNTIME MANAGEMENT
608COMMANDS\fR.)
609.IP "\fB!actions\fR"
610Do not report actions as part of flow updates.
4bc938cc
BP
611.IP "\fBtable=\fItable\fR"
612Limits the monitoring to the table with the given \fItable\fR, which
613may be expressed as a number between 0 and 254 or (unless
614\fB\-\-no\-names\fR is specified) a name. By default, all tables are
615monitored.
2b07c8b1 616.IP "\fBout_port=\fIport\fR"
c6100d92
BP
617If set, only flows that output to \fIport\fR are monitored. The
618\fIport\fR may be an OpenFlow port number or keyword
619(e.g. \fBLOCAL\fR).
2b07c8b1
BP
620.IP "\fIfield\fB=\fIvalue\fR"
621Monitors only flows that have \fIfield\fR specified as the given
622\fIvalue\fR. Any syntax valid for matching on \fBdump\-flows\fR may
623be used.
624.RE
625.IP
064af421 626This command may be useful for debugging switch or controller
2b07c8b1
BP
627implementations. With \fBwatch:\fR, it is particularly useful for
628observing how a controller updates flow tables.
a9b4a41a 629.
064af421 630.SS "OpenFlow Switch and Controller Commands"
a9b4a41a 631.
064af421
BP
632The following commands, like those in the previous section, may be
633applied to OpenFlow switches, using any of the connection methods
634described in that section. Unlike those commands, these may also be
635applied to OpenFlow controllers.
a9b4a41a 636.
064af421
BP
637.TP
638\fBprobe \fItarget\fR
639Sends a single OpenFlow echo-request message to \fItarget\fR and waits
4e312e69 640for the response. With the \fB\-t\fR or \fB\-\-timeout\fR option, this
064af421
BP
641command can test whether an OpenFlow switch or controller is up and
642running.
a9b4a41a 643.
064af421
BP
644.TP
645\fBping \fItarget \fR[\fIn\fR]
646Sends a series of 10 echo request packets to \fItarget\fR and times
647each reply. The echo request packets consist of an OpenFlow header
648plus \fIn\fR bytes (default: 64) of randomly generated payload. This
649measures the latency of individual requests.
a9b4a41a 650.
064af421
BP
651.TP
652\fBbenchmark \fItarget n count\fR
653Sends \fIcount\fR echo request packets that each consist of an
654OpenFlow header plus \fIn\fR bytes of payload and waits for each
655response. Reports the total time required. This is a measure of the
656maximum bandwidth to \fItarget\fR for round-trips of \fIn\fR-byte
657messages.
a9b4a41a 658.
1ac0e975
BP
659.SS "Other Commands"
660.
661.IP "\fBofp\-parse\fR \fIfile\fR"
662Reads \fIfile\fR (or \fBstdin\fR if \fIfile\fR is \fB\-\fR) as a
663series of OpenFlow messages in the binary format used on an OpenFlow
664connection, and prints them to the console. This can be useful for
665printing OpenFlow messages captured from a TCP stream.
666.
f3dd1419
BP
667.IP "\fBofp\-parse\-pcap\fR \fIfile\fR [\fIport\fR...]"
668Reads \fIfile\fR, which must be in the PCAP format used by network
669capture tools such as \fBtcpdump\fR or \fBwireshark\fR, extracts all
670the TCP streams for OpenFlow connections, and prints the OpenFlow
671messages in those connections in human-readable format on
672\fBstdout\fR.
673.IP
674OpenFlow connections are distinguished by TCP port number.
675Non-OpenFlow packets are ignored. By default, data on TCP ports 6633
676and 6653 are considered to be OpenFlow. Specify one or more
677\fIport\fR arguments to override the default.
678.IP
679This command cannot usefully print SSL encrypted traffic. It does not
680understand IPv6.
681.
064af421 682.SS "Flow Syntax"
a9b4a41a 683.PP
064af421 684Some \fBovs\-ofctl\fR commands accept an argument that describes a flow or
96fee5e0 685flows. Such flow descriptions comprise a series of
064af421
BP
686\fIfield\fB=\fIvalue\fR assignments, separated by commas or white
687space. (Embedding spaces into a flow description normally requires
688quoting to prevent the shell from breaking the description into
689multiple arguments.)
a9b4a41a 690.PP
0b3f2725
BP
691Flow descriptions should be in \fBnormal form\fR. This means that a
692flow may only specify a value for an L3 field if it also specifies a
693particular L2 protocol, and that a flow may only specify an L4 field
694if it also specifies particular L2 and L3 protocol types. For
695example, if the L2 protocol type \fBdl_type\fR is wildcarded, then L3
696fields \fBnw_src\fR, \fBnw_dst\fR, and \fBnw_proto\fR must also be
697wildcarded. Similarly, if \fBdl_type\fR or \fBnw_proto\fR (the L3
1c58a78b
BP
698protocol type) is wildcarded, so must be the L4 fields \fBtcp_dst\fR and
699\fBtcp_src\fR. \fBovs\-ofctl\fR will warn about
0b3f2725
BP
700flows not in normal form.
701.PP
96fee5e0
BP
702\fBovs\-fields\fR(7) describes the supported fields and how to match
703them. In addition to match fields, commands that operate on flows
704accept a few additional key-value pairs:
71e17a7a 705.
4bc938cc
BP
706.IP \fBtable=\fItable\fR
707For flow dump commands, limits the flows dumped to those in
708\fItable\fR, which may be expressed as a number between 0 and 255 or
709(unless \fB\-\-no\-names\fR is specified) a name. If not specified
710(or if 255 is specified as \fItable\fR), then flows in all tables are
0e197060
BP
711dumped.
712.
713.IP
714For flow table modification commands, behavior varies based on the
715OpenFlow version used to connect to the switch:
716.
717.RS
718.IP "OpenFlow 1.0"
719OpenFlow 1.0 does not support \fBtable\fR for modifying flows.
720\fBovs\-ofctl\fR will exit with an error if \fBtable\fR (other than
721\fBtable=255\fR) is specified for a switch that only supports OpenFlow
7221.0.
723.IP
724In OpenFlow 1.0, the switch chooses the table into which to insert a
725new flow. The Open vSwitch software switch always chooses table 0.
726Other Open vSwitch datapaths and other OpenFlow implementations may
727choose different tables.
728.IP
729The OpenFlow 1.0 behavior in Open vSwitch for modifying or removing
730flows depends on whether \fB\-\-strict\fR is used. Without
731\fB\-\-strict\fR, the command applies to matching flows in all tables.
732With \fB\-\-strict\fR, the command will operate on any single matching
733flow in any table; it will do nothing if there are matches in more
734than one table. (The distinction between these behaviors only matters
735if non-OpenFlow 1.0 commands were also used, because OpenFlow 1.0
736alone cannot add flows with the same matching criteria to multiple
737tables.)
738.
739.IP "OpenFlow 1.0 with table_id extension"
740Open vSwitch implements an OpenFlow extension that allows the
741controller to specify the table on which to operate. \fBovs\-ofctl\fR
742automatically enables the extension when \fBtable\fR is specified and
743OpenFlow 1.0 is used. \fBovs\-ofctl\fR automatically detects whether
744the switch supports the extension. As of this writing, this extension
745is only known to be implemented by Open vSwitch.
746.
747.IP
748With this extension, \fBovs\-ofctl\fR operates on the requested table
749when \fBtable\fR is specified, and acts as described for OpenFlow 1.0
750above when no \fBtable\fR is specified (or for \fBtable=255\fR).
751.
752.IP "OpenFlow 1.1"
753OpenFlow 1.1 requires flow table modification commands to specify a
754table. When \fBtable\fR is not specified (or \fBtable=255\fR is
755specified), \fBovs\-ofctl\fR defaults to table 0.
756.
757.IP "OpenFlow 1.2 and later"
758OpenFlow 1.2 and later allow flow deletion commands, but not other
759flow table modification commands, to operate on all flow tables, with
760the behavior described above for OpenFlow 1.0.
761.RE
96fee5e0
BP
762.IP "\fBduration=\fR..."
763.IQ "\fBn_packet=\fR..."
764.IQ "\fBn_bytes=\fR..."
765\fBovs\-ofctl\fR ignores assignments to these ``fields'' to allow
766output from the \fBdump\-flows\fR command to be used as input for
767other commands that parse flows.
2c6d8411
BP
768.
769.PP
c821124b
BP
770The \fBadd\-flow\fR, \fBadd\-flows\fR, and \fBmod\-flows\fR commands
771require an additional field, which must be the final field specified:
a9b4a41a 772.
d1ba66e9 773.IP \fBactions=\fR[\fIaction\fR][\fB,\fIaction\fR...]\fR
064af421 774Specifies a comma-separated list of actions to take on a packet when the
d1ba66e9
BP
775flow entry matches. If no \fIaction\fR is specified, then packets
776matching the flow are dropped. The following forms of \fIaction\fR
777are supported:
a9b4a41a 778.
064af421 779.RS
d1ba66e9
BP
780.IP \fIport\fR
781.IQ \fBoutput:\fIport\fR
782Outputs the packet to OpenFlow port number \fIport\fR. If \fIport\fR
783is the packet's input port, the packet is not output.
c6100d92
BP
784.
785.IP \fBoutput:\fIsrc\fB[\fIstart\fB..\fIend\fB]
786Outputs the packet to the OpenFlow port number read from \fIsrc\fR,
21b2fa61
JR
787which may be an NXM field name, as described above, or a match field name.
788\fBoutput:reg0[16..31]\fR outputs to the OpenFlow port number
d1ba66e9
BP
789written in the upper half of register 0. If the port number is the
790packet's input port, the packet is not output.
791.IP
792This form of \fBoutput\fR was added in Open vSwitch 1.3.0. This form
793of \fBoutput\fR uses an OpenFlow extension that is not supported by
794standard OpenFlow switches.
5682f723 795.
aaca4fe0
WT
796.IP \fBoutput(port=\fIport\fR\fB,max_len=\fInbytes\fR)
797Outputs the packet to the OpenFlow port number read from \fIport\fR,
798with maximum packet size set to \fInbytes\fR. \fIport\fR may be OpenFlow
799port number, \fBlocal\fR, or \fBin_port\fR. Patch port is not supported.
800Packets larger than \fInbytes\fR will be trimmed to \fInbytes\fR while
801packets smaller than \fInbytes\fR remains the original size.
802.
b47e67c4 803.IP \fBgroup:\fIgroup_id\fR
88c8ca26
BP
804Outputs the packet to the OpenFlow group \fIgroup_id\fR. OpenFlow 1.1
805introduced support for groups; Open vSwitch 2.6 and later also
806supports output to groups as an extension to OpenFlow 1.0. See
807\fBGroup Syntax\fR for more details.
b47e67c4 808.
064af421
BP
809.IP \fBnormal\fR
810Subjects the packet to the device's normal L2/L3 processing. (This
811action is not implemented by all OpenFlow switches.)
a9b4a41a 812.
064af421
BP
813.IP \fBflood\fR
814Outputs the packet on all switch physical ports other than the port on
815which it was received and any ports on which flooding is disabled
816(typically, these would be ports disabled by the IEEE 802.1D spanning
817tree protocol).
a9b4a41a 818.
064af421
BP
819.IP \fBall\fR
820Outputs the packet on all switch physical ports other than the port on
821which it was received.
a9b4a41a 822.
d1ba66e9
BP
823.IP \fBlocal\fR
824Outputs the packet on the ``local port,'' which corresponds to the
825network device that has the same name as the bridge.
826.
827.IP \fBin_port\fR
828Outputs the packet on the port from which it was received.
829.
a7349929 830.IP \fBcontroller(\fIkey\fB=\fIvalue\fR...\fB)
77ab5fd2 831Sends the packet and its metadata to the OpenFlow controller as a ``packet in''
a7349929
BP
832message. The supported key-value pairs are:
833.RS
834.IP "\fBmax_len=\fInbytes\fR"
835Limit to \fInbytes\fR the number of bytes of the packet to send to
836the controller. By default the entire packet is sent.
837.IP "\fBreason=\fIreason\fR"
838Specify \fIreason\fR as the reason for sending the message in the
839``packet in'' message. The supported reasons are \fBaction\fR (the
840default), \fBno_match\fR, and \fBinvalid_ttl\fR.
841.IP "\fBid=\fIcontroller-id\fR"
842Specify \fIcontroller-id\fR, a 16-bit integer, as the connection ID of
843the OpenFlow controller or controllers to which the ``packet in''
844message should be sent. The default is zero. Zero is also the
845default connection ID for each controller connection, and a given
846controller connection will only have a nonzero connection ID if its
847controller uses the \fBNXT_SET_CONTROLLER_ID\fR Nicira extension to
848OpenFlow.
bdcad671
BP
849.IP "\fBuserdata=\fIhh\fR...\fR"
850Supplies the bytes represented as hex digits \fIhh\fR as additional
851data to the controller in the packet-in message. Pairs of hex digits
852may be separated by periods for readability.
77ab5fd2
BP
853.IP "\fBpause\fR"
854Causes the switch to freeze the packet's trip through Open vSwitch
855flow tables and serializes that state into the packet-in message as a
856``continuation,'' an additional property in the \fBNXT_PACKET_IN2\fR
857message. The controller can later send the continuation back to the
858switch in an \fBNXT_RESUME\fR message, which will restart the packet's
859traversal from the point where it was interrupted. This permits an
860OpenFlow controller to interpose on a packet midway through processing
861in Open vSwitch.
206ddb9a
JP
862.IP "\fBmeter_id=\fIid\fR"
863Use meter \fIid\fR to rate-limit the OpenFlow packet-in messages that
864this action sends to the controller. By default, packets sent to the
865controller are associated with the "controller" virtual meter, if one
866was configured.
bdcad671 867.
a7349929 868.RE
d1ba66e9 869.IP
bdcad671
BP
870If any \fIreason\fR other than \fBaction\fR or any nonzero
871\fIcontroller-id\fR is supplied, Open vSwitch extension
872\fBNXAST_CONTROLLER\fR, supported by Open vSwitch 1.6 and later, is
873used. If \fBuserdata\fR is supplied, then \fBNXAST_CONTROLLER2\fR,
874supported by Open vSwitch 2.6 and later, is used.
a7349929
BP
875.
876.IP \fBcontroller\fR
877.IQ \fBcontroller\fR[\fB:\fInbytes\fR]
878Shorthand for \fBcontroller()\fR or
879\fBcontroller(max_len=\fInbytes\fB)\fR, respectively.
a9b4a41a 880.
d1ba66e9
BP
881.IP \fBenqueue(\fIport\fB,\fIqueue\fB)\fR
882Enqueues the packet on the specified \fIqueue\fR within port
883\fIport\fR, which must be an OpenFlow port number or keyword
884(e.g. \fBLOCAL\fR). The number of supported queues depends on the
885switch; some OpenFlow implementations do not support queuing at all.
64c1e8af 886.
064af421
BP
887.IP \fBdrop\fR
888Discards the packet, so no further processing or forwarding takes place.
889If a drop action is used, no other actions may be specified.
a9b4a41a 890.
064af421
BP
891.IP \fBmod_vlan_vid\fR:\fIvlan_vid\fR
892Modifies the VLAN id on a packet. The VLAN tag is added or modified
893as necessary to match the value specified. If the VLAN tag is added,
894a priority of zero is used (see the \fBmod_vlan_pcp\fR action to set
895this).
a9b4a41a 896.
064af421
BP
897.IP \fBmod_vlan_pcp\fR:\fIvlan_pcp\fR
898Modifies the VLAN priority on a packet. The VLAN tag is added or modified
899as necessary to match the value specified. Valid values are between 0
900(lowest) and 7 (highest). If the VLAN tag is added, a vid of zero is used
901(see the \fBmod_vlan_vid\fR action to set this).
a9b4a41a 902.
064af421
BP
903.IP \fBstrip_vlan\fR
904Strips the VLAN tag from a packet if it is present.
a9b4a41a 905.
3e34fbdd 906.IP \fBpush_vlan\fR:\fIethertype\fR
898dcef1 907Push a new VLAN tag onto the packet. Ethertype is used as the Ethertype
3e34fbdd
IY
908for the tag. Only ethertype 0x8100 should be used. (0x88a8 which the spec
909allows isn't supported at the moment.)
910A priority of zero and the tag of zero are used for the new tag.
911.
b02475c5 912.IP \fBpush_mpls\fR:\fIethertype\fR
912c1938
SH
913Changes the packet's Ethertype to \fIethertype\fR, which must be either
914\fB0x8847\fR or \fB0x8848\fR, and pushes an MPLS LSE.
915.IP
916If the packet does not already contain any MPLS labels then an initial
917label stack entry is pushed. The label stack entry's label is 2 if the
918packet contains IPv6 and 0 otherwise, its default traffic control value is
919the low 3 bits of the packet's DSCP value (0 if the packet is not IP), and
920its TTL is copied from the IP TTL (64 if the packet is not IP).
b02475c5
SH
921.IP
922If the packet does already contain an MPLS label, pushes a new
923outermost label as a copy of the existing outermost label.
924.IP
b0a17866
SH
925A limitation of the implementation is that processing of actions will stop
926if \fBpush_mpls\fR follows another \fBpush_mpls\fR unless there is a
927\fBpop_mpls\fR in between.
b02475c5
SH
928.
929.IP \fBpop_mpls\fR:\fIethertype\fR
799a91bb
SH
930Strips the outermost MPLS label stack entry.
931Currently the implementation restricts \fIethertype\fR to a non-MPLS Ethertype
932and thus \fBpop_mpls\fR should only be applied to packets with
b0a17866
SH
933an MPLS label stack depth of one. A further limitation is that processing of
934actions will stop if \fBpop_mpls\fR follows another \fBpop_mpls\fR unless
935there is a \fBpush_mpls\fR in between.
b02475c5 936.
064af421
BP
937.IP \fBmod_dl_src\fB:\fImac\fR
938Sets the source Ethernet address to \fImac\fR.
a9b4a41a 939.
064af421
BP
940.IP \fBmod_dl_dst\fB:\fImac\fR
941Sets the destination Ethernet address to \fImac\fR.
a9b4a41a 942.
e423eca6
JP
943.IP \fBmod_nw_src\fB:\fIip\fR
944Sets the IPv4 source address to \fIip\fR.
a9b4a41a 945.
e423eca6
JP
946.IP \fBmod_nw_dst\fB:\fIip\fR
947Sets the IPv4 destination address to \fIip\fR.
a9b4a41a 948.
e423eca6 949.IP \fBmod_tp_src\fB:\fIport\fR
0d56eaf2 950Sets the TCP or UDP or SCTP source port to \fIport\fR.
a9b4a41a 951.
e423eca6 952.IP \fBmod_tp_dst\fB:\fIport\fR
0d56eaf2 953Sets the TCP or UDP or SCTP destination port to \fIport\fR.
a9b4a41a 954.
959a2ecd 955.IP \fBmod_nw_tos\fB:\fItos\fR
04f01c24
BP
956Sets the DSCP bits in the IPv4 ToS/DSCP or IPv6 traffic class field to
957\fItos\fR, which must be a multiple of 4 between 0 and 255. This action
958does not modify the two least significant bits of the ToS field (the ECN bits).
ff14eb7a
JR
959.
960.IP \fBmod_nw_ecn\fB:\fIecn\fR
961Sets the ECN bits in the IPv4 ToS or IPv6 traffic class field to \fIecn\fR,
962which must be a value between 0 and 3, inclusive. This action does not modify
963the six most significant bits of the field (the DSCP bits).
964.IP
965Requires OpenFlow 1.1 or later.
0c20dbe4
JR
966.
967.IP \fBmod_nw_ttl\fB:\fIttl\fR
968Sets the IPv4 TTL or IPv6 hop limit field to \fIttl\fR, which is specified as
969a decimal number between 0 and 255, inclusive. Switch behavior when setting
970\fIttl\fR to zero is not well specified, though.
971.IP
972Requires OpenFlow 1.1 or later.
659586ef
JG
973.RE
974.IP
975The following actions are Nicira vendor extensions that, as of this writing, are
976only known to be implemented by Open vSwitch:
977.
978.RS
979.
3a2fe1f3 980.IP \fBresubmit\fB:\fIport\fR
29901626 981.IQ \fBresubmit\fB(\fR[\fIport\fR]\fB,\fR[\fItable\fR]\fB)
2cd20955 982.IQ \fBresubmit\fB(\fR[\fIport\fR]\fB,\fR[\fItable\fR]\fB,ct)
4bc938cc
BP
983Re-searches this OpenFlow flow table (or table \fItable\fR, if
984specified) with the \fBin_port\fR field replaced by
2cd20955
JR
985\fIport\fR (if \fIport\fR is specified) and the packet 5-tuple fields
986swapped with the corresponding conntrack original direction tuple
987fields (if \fBct\fR is specified, see \fBct_nw_src\fR above), and
988executes the actions found, if any, in addition to any other actions
989in this flow entry. The \fBin_port\fR and swapped 5-tuple fields are
990restored immediately after the search, before any actions are
991executed.
992.IP
4bc938cc
BP
993The \fItable\fR may be expressed as a number between 0 and 254 or
994(unless \fB\-\-no\-names\fR is specified) a name.
995.IP
2cd20955
JR
996The \fBct\fR option requires a valid connection tracking state as a
997match prerequisite in the flow where this action is placed. Examples
998of valid connection tracking state matches include
999\fBct_state=+new\fR, \fBct_state=+est\fR, \fBct_state=+rel\fR, and
1000\fBct_state=+trk-inv\fR.
29901626 1001.IP
790c5d26
BP
1002Recursive \fBresubmit\fR actions are obeyed up to
1003implementation-defined limits:
1004.RS
1005.IP \(bu
1006Open vSwitch 1.0.1 and earlier did not support recursion.
1007.IP \(bu
1008Open vSwitch 1.0.2 and 1.0.3 limited recursion to 8 levels.
1009.IP \(bu
1010Open vSwitch 1.1 and 1.2 limited recursion to 16 levels.
1011.IP \(bu
1012Open vSwitch 1.2 through 1.8 limited recursion to 32 levels.
1013.IP \(bu
1014Open vSwitch 1.9 through 2.0 limited recursion to 64 levels.
1015.IP \(bu
1016Open vSwitch 2.1 through 2.5 limited recursion to 64 levels and impose
1017a total limit of 4,096 resubmits per flow translation (earlier versions
1018did not impose any total limit).
1019.IP \(bu
1020Open vSwitch 2.6 and later imposes the same limits as 2.5, with one
1021exception: \fBresubmit\fR from table \fIx\fR to any table \fIy\fR >
1022\fIx\fR does not count against the recursion limit.
1023.RE
1024.IP
2cd20955
JR
1025Open vSwitch before 1.2.90 did not support \fItable\fR. Open vSwitch
1026before 2.7 did not support \fBct\fR.
659586ef
JG
1027.
1028.IP \fBset_tunnel\fB:\fIid\fR
b9298d3f
BP
1029.IQ \fBset_tunnel64\fB:\fIid\fR
1030If outputting to a port that encapsulates the packet in a tunnel and
5a6861aa 1031supports an identifier (such as GRE), sets the identifier to \fIid\fR.
b9298d3f
BP
1032If the \fBset_tunnel\fR form is used and \fIid\fR fits in 32 bits,
1033then this uses an action extension that is supported by Open vSwitch
10341.0 and later. Otherwise, if \fIid\fR is a 64-bit value, it requires
1035Open vSwitch 1.1 or later.
3a2fe1f3 1036.
eedc0097
JP
1037.IP \fBset_queue\fB:\fIqueue\fR
1038Sets the queue that should be used to \fIqueue\fR when packets are
1039output. The number of supported queues depends on the switch; some
1040OpenFlow implementations do not support queuing at all.
1041.
1042.IP \fBpop_queue\fR
1043Restores the queue to the value it was before any \fBset_queue\fR
1044actions were applied.
1045.
07659514 1046.IP \fBct\fR
f6fabcc6 1047.IQ \fBct(\fR[\fIargument\fR][\fB,\fIargument\fR...]\fB)
07659514 1048Send the packet through the connection tracker. Refer to the \fBct_state\fR
f6fabcc6
JP
1049documentation above for possible packet and connection states. A \fBct\fR
1050action always sets the packet to an untracked state and clears out the
1051\fBct_state\fR fields for the current processing path. Those fields are
1052only available for the processing path pointed to by the \fBtable\fR
1053argument. The following arguments are supported:
07659514
JS
1054.RS
1055.IP \fBcommit\fR
1056.RS
1057Commit the connection to the connection tracking module. Information about the
1058connection will be stored beyond the lifetime of the packet in the pipeline.
1059Some \fBct_state\fR flags are only available for committed connections.
1060.RE
a76a37ef
JR
1061.IP \fBforce\fR
1062.RS
1063A committed connection always has the directionality of the packet
1064that caused the connection to be committed in the first place. This
1065is the ``original direction'' of the connection, and the opposite
1066direction is the ``reply direction''. If a connection is already
1067committed, but it is in the wrong direction, \fBforce\fR flag may be
1068used in addition to \fBcommit\fR flag to effectively terminate the
1069existing connection and start a new one in the current direction.
1070This flag has no effect if the original direction of the connection is
1071already the same as that of the current packet.
1072.RE
4bc938cc 1073.IP \fBtable=\fItable\fR
07659514
JS
1074Fork pipeline processing in two. The original instance of the packet will
1075continue processing the current actions list as an untracked packet. An
1076additional instance of the packet will be sent to the connection tracker, which
1077will be re-injected into the OpenFlow pipeline to resume processing in table
4bc938cc
BP
1078\fInumber\fR (which may be specified as a number between 0 and 254 or,
1079unless \fB\-\-no\-names\fR is specified, a name), with the
1080\fBct_state\fR and other ct match fields set. If
54da48f4
JS
1081\fBtable\fR is not specified, then the packet which is submitted to the
1082connection tracker is not re-injected into the OpenFlow pipeline. It is
1083strongly recommended to specify a table later than the current table to prevent
1084loops.
07659514
JS
1085.IP \fBzone=\fIvalue\fR
1086.IQ \fBzone=\fIsrc\fB[\fIstart\fB..\fIend\fB]\fR
1087A 16-bit context id that can be used to isolate connections into separate
1088domains, allowing overlapping network addresses in different zones. If a zone
1089is not provided, then the default is to use zone zero. The \fBzone\fR may be
1090specified either as an immediate 16-bit \fIvalue\fR, or may be provided from an
8e53fe8c 1091NXM field \fIsrc\fR. The \fIstart\fR and \fIend\fR pair are inclusive, and must
54da48f4
JS
1092specify a 16-bit range within the field. This value is copied to the
1093\fBct_zone\fR match field for packets which are re-injected into the pipeline
1094using the \fBtable\fR option.
8e53fe8c 1095.IP \fBexec\fB(\fR[\fIaction\fR][\fB,\fIaction\fR...]\fB)\fR
54da48f4
JS
1096Perform actions within the context of connection tracking. This is a restricted
1097set of actions which are in the same format as their specifications as part
1098of a flow. Only actions which modify the \fBct_mark\fR or \fBct_label\fR
1099fields are accepted within the \fBexec\fR action, and these fields may only be
1100modified with this option. For example:
8e53fe8c
JS
1101.
1102.RS
96f46bfc 1103.IP \fBset_field:\fIvalue\fR[\fB/\fImask\fR]->ct_mark\fR
91440329
JR
1104Store a 32-bit metadata value with the connection. Subsequent lookups
1105for packets in this connection will populate the \fBct_mark\fR flow
1106field when the packet is sent to the connection tracker with the
1107\fBtable\fR specified.
96f46bfc 1108.IP \fBset_field:\fIvalue\fR[\fB/\fImask\fR]->ct_label\fR
91440329
JR
1109Store a 128-bit metadata value with the connection. Subsequent
1110lookups for packets in this connection will populate the
1111\fBct_label\fR flow field when the packet is sent to the connection
1112tracker with the \fBtable\fR specified.
8e53fe8c
JS
1113.RE
1114.IP
3a103e4a 1115The \fBcommit\fR parameter must be specified to use \fBexec(...)\fR.
8e53fe8c 1116.
d787ad39
JS
1117.IP \fBalg=\fIalg\fR
1118Specify application layer gateway \fIalg\fR to track specific connection
40c7b2fc
JS
1119types. If subsequent related connections are sent through the \fBct\fR
1120action, then the \fBrel\fR flag in the \fBct_state\fR field will be set.
1121Supported types include:
d787ad39
JS
1122.RS
1123.IP \fBftp\fR
40c7b2fc
JS
1124Look for negotiation of FTP data connections. Specify this option for FTP
1125control connections to detect related data connections and populate the
1126\fBrel\fR flag for the data connections.
1127.
1128.IP \fBtftp\fR
1129Look for negotiation of TFTP data connections. Specify this option for TFTP
1130control connections to detect related data connections and populate the
1131\fBrel\fR flag for the data connections.
d787ad39
JS
1132.RE
1133.
54da48f4 1134.IP
3a103e4a
RB
1135The \fBcommit\fR parameter must be specified to use \fBalg=\fIalg\fR.
1136.
1137.IP
54da48f4
JS
1138When committing related connections, the \fBct_mark\fR for that connection is
1139inherited from the current \fBct_mark\fR stored with the original connection
1140(ie, the connection created by \fBct(alg=...)\fR).
ae8b9260 1141.
8c019a41
JS
1142.IP
1143Note that with the Linux datapath, global sysctl options affect the usage of
1144the \fBct\fR action. In particular, if \fBnet.netfilter.nf_conntrack_helper\fR
1145is enabled then application layer gateway helpers may be executed even if the
1146\fBalg\fR option is not specified. This is the default setting until Linux 4.7.
1147For security reasons, the netfilter team recommends users to disable this
1148option. See this blog post for further details:
1149.
1150http://www.netfilter.org/news.html#2012-04-03
1151.
ae8b9260
JR
1152.IP \fBnat\fR[\fB(\fR(\fBsrc\fR|\fBdst\fR)\fB=\fIaddr1\fR[\fB-\fIaddr2\fR][\fB:\fIport1\fR[\fB-\fIport2\fR]][\fB,\fIflags\fR]\fB)\fR]
1153.
1154Specify address and port translation for the connection being tracked.
1155For new connections either \fBsrc\fR or \fBdst\fR argument must be
1156provided to set up either source address/port translation (SNAT) or
1157destination address/port translation (DNAT), respectively. Setting up
1158address translation for a new connection takes effect only if the
1159\fBcommit\fR flag is also provided for the enclosing \fBct\fR action.
1160A bare \fBnat\fR action will only translate the packet being processed
1161in the way the connection has been set up with an earlier \fBct\fR
1162action. Also a \fBnat\fR action with \fBsrc\fR or \fBdst\fR, when
1163applied to a packet belonging to an established (rather than new)
1164connection, will behave the same as a bare \fBnat\fR.
1165.IP
1166\fBsrc\fR and \fBdst\fR options take the following arguments:
1167.RS
1168.IP \fIaddr1\fR[\fB-\fIaddr2\fR]
1169The address range from which the translated address should be
1170selected. If only one address is given, then that address will always
1171be selected, otherwise the address selection can be informed by the
1172optional \fBpersistent\fR flag as described below. Either IPv4 or
1173IPv6 addresses can be provided, but both addresses must be of the same
1174type, and the datapath behavior is undefined in case of providing IPv4
1175address range for an IPv6 packet, or IPv6 address range for an IPv4
1176packet. IPv6 addresses must be bracketed with '[' and ']' if a port
1177range is also given.
1178.RE
1179.
1180.RS
1181.IP \fIport1\fR[\fB-\fIport2\fR]
1182The port range from which the translated port should be selected. If
1183only one port number is provided, then that should be selected. In
1184case of a mapping conflict the datapath may choose any other
1185non-conflicting port number instead, even when no port range is
1186specified. The port number selection can be informed by the optional
1187\fBrandom\fR and \fBhash\fR flags as described below.
1188.RE
1189.IP
1190The optional flags are:
1191.RS
1192.IP \fBrandom\fR
1193The selection of the port from the given range should be done using a
1194fresh random number. This flag is mutually exclusive with \fBhash\fR.
1195.RE
1196.
1197.RS
1198.IP \fBhash\fR
1199The selection of the port from the given range should be done using a
1200datapath specific hash of the packet's IP addresses and the other,
1201non-mapped port number. This flag is mutually exclusive with
1202\fBrandom\fR.
1203.RE
1204.
1205.RS
1206.IP \fBpersistent\fR
1207The selection of the IP address from the given range should be done so
1208that the same mapping can be provided after the system restarts.
1209.RE
1210.IP
1211If an \fBalg\fR is specified for the committing \fBct\fR action that
1212also includes \fBnat\fR with a \fBsrc\fR or \fBdst\fR attribute,
1213then the datapath tries to set up the helper to be NAT aware. This
1214functionality is datapath specific and may not be supported by all
1215datapaths.
1216.IP
1217\fBnat\fR was introduced in Open vSwitch 2.6. The first datapath that
1218implements \fBct nat\fR support is the one that ships with Linux 4.6.
07659514
JS
1219.RE
1220.IP
1221The \fBct\fR action may be used as a primitive to construct stateful firewalls
1222by selectively committing some traffic, then matching the \fBct_state\fR to
1223allow established connections while denying new connections. The following
1224flows provide an example of how to implement a simple firewall that allows new
1225connections from port 1 to port 2, and only allows established connections to
1226send traffic from port 2 to port 1:
1227 \fBtable=0,priority=1,action=drop
1228 table=0,priority=10,arp,action=normal
1229 table=0,priority=100,ip,ct_state=-trk,action=ct(table=1)
1230 table=1,in_port=1,ip,ct_state=+trk+new,action=ct(commit),2
1231 table=1,in_port=1,ip,ct_state=+trk+est,action=2
1232 table=1,in_port=2,ip,ct_state=+trk+new,action=drop
1233 table=1,in_port=2,ip,ct_state=+trk+est,action=1\fR
1234.IP
1235If \fBct\fR is executed on IP (or IPv6) fragments, then the message is
1236implicitly reassembled before sending to the connection tracker and
1237refragmented upon \fBoutput\fR, to the original maximum received fragment size.
54da48f4
JS
1238Reassembly occurs within the context of the \fBzone\fR, meaning that IP
1239fragments in different zones are not assembled together. Pipeline processing
1240for the initial fragments is halted; When the final fragment is received, the
1241message is assembled and pipeline processing will continue for that flow.
07659514
JS
1242Because packet ordering is not guaranteed by IP protocols, it is not possible
1243to determine which IP fragment will cause message reassembly (and therefore
1244continue pipeline processing). As such, it is strongly recommended that
1245multiple flows should not execute \fBct\fR to reassemble fragments from the
1246same IP message.
1247.IP
de759da2 1248The \fBct\fR action was introduced in Open vSwitch 2.5.
07659514 1249.
72fe7578
BP
1250.IP \fBct_clear\fR
1251Clears connection tracking state from the flow, zeroing
1252\fBct_state\fR, \fBct_zone\fR, \fBct_mark\fR, and \fBct_label\fR.
1253.IP
1254This action was introduced in Open vSwitch 2.6.90.
1255.
f0fd1a17 1256.IP \fBdec_ttl\fR
ef6d1b11 1257.IQ \fBdec_ttl(\fIid1\fR[\fB,\fIid2\fR]...\fB)\fR
f0fd1a17 1258Decrement TTL of IPv4 packet or hop limit of IPv6 packet. If the
972b5f38
JR
1259TTL or hop limit is initially zero or decrementing would make it so, no
1260decrement occurs, as packets reaching TTL zero must be rejected. Instead,
f0fd1a17
PS
1261a ``packet-in'' message with reason code \fBOFPR_INVALID_TTL\fR is
1262sent to each connected controller that has enabled receiving them,
c2d967a5
MM
1263if any. Processing the current set of actions then stops. However,
1264if the current set of actions was reached through ``resubmit'' then
ef6d1b11
JP
1265remaining actions in outer levels resume processing.
1266.IP
1267This action also optionally supports the ability to specify a list of
1268valid controller ids. Each of the controllers in the list will receive
1269the ``packet_in'' message only if they have registered to receive the
c2d967a5
MM
1270invalid ttl packets. If controller ids are not specified, the
1271``packet_in'' message will be sent only to the controllers having
1272controller id zero which have registered for the invalid ttl packets.
f0fd1a17 1273.
afd5ac06
SH
1274.IP \fBset_mpls_label\fR:\fIlabel\fR
1275Set the label of the outer MPLS label stack entry of a packet.
1276\fIlabel\fR should be a 20-bit value that is decimal by default;
1277use a \fB0x\fR prefix to specify them in hexadecimal.
1278.
1279.IP \fBset_mpls_tc\fR:\fItc\fR
1280Set the traffic-class of the outer MPLS label stack entry of a packet.
1281\fItc\fR should be a in the range 0 to 7 inclusive.
1282.
0f3f3c3d
SH
1283.IP \fBset_mpls_ttl\fR:\fIttl\fR
1284Set the TTL of the outer MPLS label stack entry of a packet.
1285\fIttl\fR should be in the range 0 to 255 inclusive.
1286.
b676167a
SH
1287.IP \fBdec_mpls_ttl\fR
1288Decrement TTL of the outer MPLS label stack entry of a packet. If the TTL
972b5f38
JR
1289is initially zero or decrementing would make it so, no decrement occurs.
1290Instead, a ``packet-in'' message with reason code \fBOFPR_INVALID_TTL\fR
1291is sent to the main controller (id zero), if it has enabled receiving them.
b676167a
SH
1292Processing the current set of actions then stops. However, if the current
1293set of actions was reached through ``resubmit'' then remaining actions in
1294outer levels resume processing.
1295.
491e05c2
YY
1296.IP \fBdec_nsh_ttl\fR
1297Decrement TTL of the outer NSH header of a packet. If the TTL
1298is initially zero or decrementing would make it so, no decrement occurs.
1299Instead, a ``packet-in'' message with reason code \fBOFPR_INVALID_TTL\fR
1300is sent to the main controller (id zero), if it has enabled receiving them.
1301Processing the current set of actions then stops. However, if the current
1302set of actions was reached through ``resubmit'' then remaining actions in
1303outer levels resume processing.
1304.
96fc46e8
BP
1305.IP \fBnote:\fR[\fIhh\fR]...
1306Does nothing at all. Any number of bytes represented as hex digits
1307\fIhh\fR may be included. Pairs of hex digits may be separated by
1308periods for readability.
e0631927
BP
1309The \fBnote\fR action's format doesn't include an exact length for its
1310payload, so the provided bytes will be padded on the right by enough
1311bytes with value 0 to make the total number 6 more than a multiple of
13128.
f393f81e 1313.
5a6861aa 1314.IP "\fBmove:\fIsrc\fB[\fIstart\fB..\fIend\fB]\->\fIdst\fB[\fIstart\fB..\fIend\fB]\fR"
f393f81e 1315Copies the named bits from field \fIsrc\fR to field \fIdst\fR.
21b2fa61
JR
1316\fIsrc\fR and \fIdst\fR may be NXM field names as defined in
1317\fBnicira\-ext.h\fR, e.g. \fBNXM_OF_UDP_SRC\fR or \fBNXM_NX_REG0\fR,
1318or a match field name, e.g. \fBreg0\fR. Each
1319\fIstart\fR and \fIend\fR pair, which are inclusive, must specify the
1320same number of bits and must fit within its respective field.
f393f81e
BP
1321Shorthands for \fB[\fIstart\fB..\fIend\fB]\fR exist: use
1322\fB[\fIbit\fB]\fR to specify a single bit or \fB[]\fR to specify an
21b2fa61 1323entire field (in the latter case the brackets can also be left off).
f393f81e
BP
1324.IP
1325Examples: \fBmove:NXM_NX_REG0[0..5]\->NXM_NX_REG1[26..31]\fR copies the
1326six bits numbered 0 through 5, inclusive, in register 0 into bits 26
1327through 31, inclusive;
21b2fa61 1328\fBmove:reg0[0..15]\->vlan_tci\fR copies the least
f393f81e 1329significant 16 bits of register 0 into the VLAN TCI field.
1a12c419 1330.IP
914624f8
BP
1331In OpenFlow 1.0 through 1.4, \fBmove\fR ordinarily uses an Open
1332vSwitch extension to OpenFlow. In OpenFlow 1.5, \fBmove\fR uses the
d3cb080e 1333OpenFlow 1.5 standard \fBcopy_field\fR action. The ONF has
914624f8
BP
1334also made \fBcopy_field\fR available as an extension to OpenFlow 1.3.
1335Open vSwitch 2.4 and later understands this extension and uses it if a
1336controller uses it, but for backward compatibility with older versions
1337of Open vSwitch, \fBovs\-ofctl\fR does not use it.
f393f81e 1338.
7eb4b1f1
BP
1339.IP "\fBset_field:\fIvalue\fR[/\fImask\fR]\fB\->\fIdst"
1340.IQ "\fBload:\fIvalue\fB\->\fIdst\fB[\fIstart\fB..\fIend\fB]"
1341Loads a literal value into a field or part of a field. With
1342\fBset_field\fR, \fBvalue\fR and the optional \fBmask\fR are given in
1343the customary syntax for field \fIdst\fR, which is expressed as a
1344field name. For example, \fBset_field:00:11:22:33:44:55->eth_src\fR
1345sets the Ethernet source address to 00:11:22:33:44:55. With
1346\fBload\fR, \fIvalue\fR must be an integer value (in decimal or
21b2fa61
JR
1347prefixed by \fB0x\fR for hexadecimal) and \fIdst\fR can also be the
1348NXM or OXM name for the field. For example,
1349\fBload:0x001122334455->OXM_OF_ETH_SRC[]\fR has the same effect as the
7eb4b1f1
BP
1350prior \fBset_field\fR example.
1351.IP
1352The two forms exist for historical reasons. Open vSwitch 1.1
1353introduced \fBNXAST_REG_LOAD\fR as a Nicira extension to OpenFlow 1.0
1354and used \fBload\fR to express it. Later, OpenFlow 1.2 introduced a
1355standard \fBOFPAT_SET_FIELD\fR action that was restricted to loading
1356entire fields, so Open vSwitch added the form \fBset_field\fR with
1357this restriction. OpenFlow 1.5 extended \fBOFPAT_SET_FIELD\fR to the
1358point that it became a superset of \fBNXAST_REG_LOAD\fR. Open vSwitch
1359translates either syntax as necessary for the OpenFlow version in use:
1360in OpenFlow 1.0 and 1.1, \fBNXAST_REG_LOAD\fR; in OpenFlow 1.2, 1.3,
1361and 1.4, \fBNXAST_REG_LOAD\fR for \fBload\fR or for loading a
1362subfield, \fBOFPAT_SET_FIELD\fR otherwise; and OpenFlow 1.5 and later,
1363\fBOFPAT_SET_FIELD\fR.
53ddd40a 1364.
bd85dac1 1365.IP "\fBpush:\fIsrc\fB[\fIstart\fB..\fIend\fB]"
81ce8036
BP
1366.IQ "\fBpop:\fIdst\fB[\fIstart\fB..\fIend\fB]"
1367These Open vSwitch extension actions act on bits \fIstart\fR to
1368\fIend\fR, inclusive, in the named field, pushing or popping the bits
1369on a general-purpose stack of fields or subfields. Controllers can
1370use this stack for saving and restoring data or metadata around
1371\fBresubmit\fR actions, for swapping or rearranging data and metadata,
1372or for other purposes. Any data or metadata field, or part of one,
1373may be pushed, and any modifiable field or subfield may be popped.
bd85dac1 1374.IP
81ce8036
BP
1375The number of bits pushed in a stack entry do not have to match the
1376number of bits later popped from that entry. If more bits are popped
1377from an entry than were pushed, then the entry is conceptually
1378left-padded with 0-bits as needed. If fewer bits are popped than
1379pushed, then bits are conceptually trimmed from the left side of the
1380entry.
bd85dac1 1381.IP
81ce8036
BP
1382The stack's size is intended to have a large enough limit that
1383``normal'' use will not pose problems. Stack overflow or underflow is
1384an error that causes action execution to stop.
1385.IP
1386Example: \fBpush:NXM_NX_REG2[0..5]\fR or \fBpush:reg2[0..5]\fR push
1387the value stored in register 2 bits 0 through 5, inclusive, on the
1388internal stack, and \fBpop:NXM_NX_REG2[0..5]\fR or
1389\fBpop:reg2[0..5]\fR pops the value from top of the stack and sets
1390register 2 bits 0 through 5, inclusive, based on bits 0 through 5 from
1391the value just popped.
f5c45121 1392.
53ddd40a
BP
1393.IP "\fBmultipath(\fIfields\fB, \fIbasis\fB, \fIalgorithm\fB, \fIn_links\fB, \fIarg\fB, \fIdst\fB[\fIstart\fB..\fIend\fB])\fR"
1394Hashes \fIfields\fR using \fIbasis\fR as a universal hash parameter,
1395then the applies multipath link selection \fIalgorithm\fR (with
1396parameter \fIarg\fR) to choose one of \fIn_links\fR output links
1397numbered 0 through \fIn_links\fR minus 1, and stores the link into
43edca57 1398\fIdst\fB[\fIstart\fB..\fIend\fB]\fR, which must be an NXM field as
53ddd40a
BP
1399described above.
1400.IP
4249b547
JB
1401\fIfields\fR must be one of the following:
1402.RS
1403.IP \fBeth_src\fR
1404Hashes Ethernet source address only.
1405.IP \fBsymmetric_l4\fR
1406Hashes Ethernet source, destination, and type, VLAN ID, IPv4/IPv6
1407source, destination, and protocol, and TCP or SCTP (but not UDP)
1408ports. The hash is computed so that pairs of corresponding flows in
1409each direction hash to the same value, in environments where L2 paths
1410are the same in each direction. UDP ports are not included in the
1411hash to support protocols such as VXLAN that use asymmetric ports in
1412each direction.
1413.IP \fBsymmetric_l3l4\fR
1414Hashes IPv4/IPv6 source, destination, and protocol, and TCP or SCTP
1415(but not UDP) ports. Like \fBsymmetric_l4\fR, this is a symmetric
1416hash, but by excluding L2 headers it is more effective in environments
1417with asymmetric L2 paths (e.g. paths involving VRRP IP addresses on a
1418router). Not an effective hash function for protocols other than IPv4
1419and IPv6, which hash to a constant zero.
1420.IP \fBsymmetric_l3l4+udp\fR
1421Like \fBsymmetric_l3l4+udp\fR, but UDP ports are included in the hash.
1422This is a more effective hash when asymmetric UDP protocols such as
1423VXLAN are not a consideration.
417cfdb6 1424.IP \fBnw_src\fR
1425Hashes Network source address only.
1426.IP \fBnw_dst\fR
1427Hashes Network destination address only.
4249b547
JB
1428.RE
1429.IP
1430\fIalgorithm\fR must be one of \fBmodulo_n\fR,
53ddd40a
BP
1431\fBhash_threshold\fR, \fBhrw\fR, and \fBiter_hash\fR. Only
1432the \fBiter_hash\fR algorithm uses \fIarg\fR.
1433.IP
1434Refer to \fBnicira\-ext.h\fR for more details.
3b6a2571 1435.
daff3353
EJ
1436.IP "\fBbundle(\fIfields\fB, \fIbasis\fB, \fIalgorithm\fB, \fIslave_type\fB, slaves:[\fIs1\fB, \fIs2\fB, ...])\fR"
1437Hashes \fIfields\fR using \fIbasis\fR as a universal hash parameter, then
1438applies the bundle link selection \fIalgorithm\fR to choose one of the listed
1439slaves represented as \fIslave_type\fR. Currently the only supported
1440\fIslave_type\fR is \fBofport\fR. Thus, each \fIs1\fR through \fIsN\fR should
1441be an OpenFlow port number. Outputs to the selected slave.
1442.IP
417cfdb6 1443Currently, \fIfields\fR must be either \fBeth_src\fR, \fBsymmetric_l4\fR, \fBsymmetric_l3l4\fR, \fBsymmetric_l3l4+udp\fR,
1444\fBnw_src\fR, or \fBnw_dst\fR, and \fIalgorithm\fR must be one of \fBhrw\fR and \fBactive_backup\fR.
daff3353
EJ
1445.IP
1446Example: \fBbundle(eth_src,0,hrw,ofport,slaves:4,8)\fR uses an Ethernet source
1447hash with basis 0, to select between OpenFlow ports 4 and 8 using the Highest
1448Random Weight algorithm.
1449.IP
1450Refer to \fBnicira\-ext.h\fR for more details.
a368bb53
EJ
1451.
1452.IP "\fBbundle_load(\fIfields\fB, \fIbasis\fB, \fIalgorithm\fB, \fIslave_type\fB, \fIdst\fB[\fIstart\fB..\fIend\fB], slaves:[\fIs1\fB, \fIs2\fB, ...])\fR"
1453Has the same behavior as the \fBbundle\fR action, with one exception. Instead
1454of outputting to the selected slave, it writes its selection to
1455\fIdst\fB[\fIstart\fB..\fIend\fB]\fR, which must be an NXM field as described
1456above.
1457.IP
2638c6dc
BP
1458Example: \fBbundle_load(eth_src, 0, hrw, ofport, NXM_NX_REG0[],
1459slaves:4, 8)\fR uses an Ethernet source hash with basis 0, to select
1460between OpenFlow ports 4 and 8 using the Highest Random Weight
21b2fa61
JR
1461algorithm, and writes the selection to \fBNXM_NX_REG0[]\fR. Also the
1462match field name can be used, for example, instead of 'NXM_NX_REG0'
1463the name 'reg0' can be used. When the while field is indicated the
1464empty brackets can also be left off.
a368bb53
EJ
1465.IP
1466Refer to \fBnicira\-ext.h\fR for more details.
75a75043
BP
1467.
1468.IP "\fBlearn(\fIargument\fR[\fB,\fIargument\fR]...\fB)\fR"
1469This action adds or modifies a flow in an OpenFlow table, similar to
1470\fBovs\-ofctl \-\-strict mod\-flows\fR. The arguments specify the
1471flow's match fields, actions, and other properties, as follows. At
1472least one match criterion and one action argument should ordinarily be
1473specified.
1474.RS
1475.IP \fBidle_timeout=\fIseconds\fR
1476.IQ \fBhard_timeout=\fIseconds\fR
1477.IQ \fBpriority=\fIvalue\fR
45d77538 1478.IQ \fBcookie=\fIvalue\fR
3d6832c2
BP
1479.IQ \fBsend_flow_rem\fR
1480These arguments have the same meaning as in the usual \fBovs\-ofctl\fR
1481flow syntax.
75a75043 1482.
0e553d9c
BP
1483.IP \fBfin_idle_timeout=\fIseconds\fR
1484.IQ \fBfin_hard_timeout=\fIseconds\fR
1485Adds a \fBfin_timeout\fR action with the specified arguments to the
1486new flow. This feature was added in Open vSwitch 1.5.90.
1487.
4bc938cc 1488.IP \fBtable=\fItable\fR
75a75043 1489The table in which the new flow should be inserted. Specify a decimal
4bc938cc
BP
1490number between 0 and 254 or (unless \fB\-\-no\-names\fR is specified)
1491a name. The default, if \fBtable\fR is unspecified, is table 1.
75a75043 1492.
35f48b8b
BP
1493.IP \fBdelete_learned\fR
1494This flag enables deletion of the learned flows when the flow with the
1495\fBlearn\fR action is removed. Specifically, when the last
1496\fBlearn\fR action with this flag and particular \fBtable\fR and
1497\fBcookie\fR values is removed, the switch deletes all of the flows in
1498the specified table with the specified cookie.
1499.
1500.IP
1501This flag was added in Open vSwitch 2.4.
1502.
4c71600d
DDP
1503.IP \fBlimit=\fInumber\fR
1504If the number of flows in table \fBtable\fR with cookie id \fBcookie\fR exceeds
1505\fInumber\fR, a new flow will not be learned by this action. By default
1746822c 1506there's no limit. limit=0 is a long-hand for no limit.
4c71600d
DDP
1507.
1508.IP
1509This flag was added in Open vSwitch 2.8.
1510.
1511.IP \fBresult_dst=\fIfield\fB[\fIbit\fB]\fR
1512If learning failed (because the number of flows exceeds \fBlimit\fR),
1513the action sets \fIfield\fB[\fIbit\fB]\fR to 0, otherwise it will be set to 1.
1514\fIfield\fB[\fIbit\fB]\fR must be a single bit.
1515.
1516.IP
1517This flag was added in Open vSwitch 2.8.
1518.
75a75043
BP
1519.IP \fIfield\fB=\fIvalue\fR
1520.IQ \fIfield\fB[\fIstart\fB..\fIend\fB]=\fIsrc\fB[\fIstart\fB..\fIend\fB]\fR
1521.IQ \fIfield\fB[\fIstart\fB..\fIend\fB]\fR
1522Adds a match criterion to the new flow.
1523.IP
1524The first form specifies that \fIfield\fR must match the literal
1525\fIvalue\fR, e.g. \fBdl_type=0x0800\fR. All of the fields and values
1526for \fBovs\-ofctl\fR flow syntax are available with their usual
5b10f305
OS
1527meanings. Shorthand notation matchers (e.g. \fBip\fR in place of
1528\fBdl_type=0x0800\fR) are not currently implemented.
75a75043
BP
1529.IP
1530The second form specifies that \fIfield\fB[\fIstart\fB..\fIend\fB]\fR
1531in the new flow must match \fIsrc\fB[\fIstart\fB..\fIend\fB]\fR taken
1532from the flow currently being processed.
5b10f305
OS
1533For example, \fINXM_OF_UDP_DST\fB[]\fR=\fINXM_OF_UDP_SRC\fB[]\fR on a
1534TCP packet for which the UDP src port is \fB53\fR, creates a flow which
1535matches \fINXM_OF_UDP_DST\fB[]\fR=\fB53\fR.
75a75043
BP
1536.IP
1537The third form is a shorthand for the second form. It specifies that
5b10f305 1538\fIfield\fB[\fIstart\fB..\fIend\fB]\fR in the new flow must match the same
75a75043
BP
1539\fIfield\fB[\fIstart\fB..\fIend\fB]\fR taken from the flow currently
1540being processed.
5b10f305
OS
1541For example, \fINXM_OF_TCP_DST\fB[]\fR on a TCP packet
1542for which the TCP dst port is \fB80\fR, creates a flow which
1543matches \fINXM_OF_TCP_DST\fB[]\fR=\fB80\fR.
75a75043
BP
1544.
1545.IP \fBload:\fIvalue\fB\->\fIdst\fB[\fIstart\fB..\fIend\fB]
1546.IQ \fBload:\fIsrc\fB[\fIstart\fB..\fIend\fB]\->\fIdst\fB[\fIstart\fB..\fIend\fB]
1547.
1548Adds a \fBload\fR action to the new flow.
1549.IP
1550The first form loads the literal \fIvalue\fR into bits \fIstart\fR
1551through \fIend\fR, inclusive, in field \fIdst\fR. Its syntax is the
1552same as the \fBload\fR action described earlier in this section.
1553.IP
1554The second form loads \fIsrc\fB[\fIstart\fB..\fIend\fB]\fR, a value
1555from the flow currently being processed, into bits \fIstart\fR
1556through \fIend\fR, inclusive, in field \fIdst\fR.
1557.
1558.IP \fBoutput:\fIfield\fB[\fIstart\fB..\fIend\fB]\fR
1559Add an \fBoutput\fR action to the new flow's actions, that outputs to
1560the OpenFlow port taken from \fIfield\fB[\fIstart\fB..\fIend\fB]\fR,
1561which must be an NXM field as described above.
1562.RE
c4f5d00b 1563.RE
a9b4a41a 1564.
8dd54666 1565.RS
8dd54666 1566.
b19e8793
IY
1567.IP \fBclear_actions\fR
1568Clears all the actions in the action set immediately.
1569.
7fdb60a7
SH
1570.IP \fBwrite_actions(\fR[\fIaction\fR][\fB,\fIaction\fR...]\fB)
1571Add the specific actions to the action set. The syntax of
1572\fIactions\fR is the same as in the \fBactions=\fR field. The action
1573set is carried between flow tables and then executed at the end of the
1574pipeline.
1575.
1576.IP
1577The actions in the action set are applied in the following order, as
1578required by the OpenFlow specification, regardless of the order in
1579which they were added to the action set. Except as specified
1580otherwise below, the action set only holds at most a single action of
1581each type. When more than one action of a single type is written to
1582the action set, the one written later replaces the earlier action:
1583.
1584.RS
1585.IP 1.
1586\fBstrip_vlan\fR
1587.IQ
1588\fBpop_mpls\fR
1589.
1590.IP 2.
f839892a 1591\fBdecap\fR
7fdb60a7
SH
1592.
1593.IP 3.
f839892a 1594\fBencap\fR
7fdb60a7
SH
1595.
1596.IP 4.
f839892a
JS
1597\fBpush_mpls\fR
1598.
1599.IP 5.
1600\fBpush_vlan\fR
1601.
1602.IP 6.
7fdb60a7
SH
1603\fBdec_ttl\fR
1604.IQ
1605\fBdec_mpls_ttl\fR
491e05c2
YY
1606.IQ
1607\fBdec_nsh_ttl\fR
7fdb60a7 1608.
f839892a 1609.IP 7.
7fdb60a7
SH
1610\fBload\fR
1611.IQ
1b0ee636
TG
1612\fBmove\fR
1613.IQ
7fdb60a7
SH
1614\fBmod_dl_dst\fR
1615.IQ
1616\fBmod_dl_src\fR
1617.IQ
1618\fBmod_nw_dst\fR
1619.IQ
1620\fBmod_nw_src\fR
1621.IQ
1622\fBmod_nw_tos\fR
1623.IQ
ff14eb7a
JR
1624\fBmod_nw_ecn\fR
1625.IQ
0c20dbe4
JR
1626\fBmod_nw_ttl\fR
1627.IQ
7fdb60a7
SH
1628\fBmod_tp_dst\fR
1629.IQ
1630\fBmod_tp_src\fR
1631.IQ
1632\fBmod_vlan_pcp\fR
1633.IQ
1634\fBmod_vlan_vid\fR
1635.IQ
1636\fBset_field\fR
1637.IQ
1638\fBset_tunnel\fR
1639.IQ
1640\fBset_tunnel64\fR
1641.IQ
1642The action set can contain any number of these actions, with
1b0ee636
TG
1643cumulative effect. They will be applied in the order as added.
1644That is, when multiple actions modify the same part of a field,
1645the later modification takes effect, and when they modify
1646different parts of a field (or different fields), then both
7fdb60a7
SH
1647modifications are applied.
1648.
f839892a 1649.IP 8.
7fdb60a7
SH
1650\fBset_queue\fR
1651.
f839892a 1652.IP 9.
7fdb60a7
SH
1653\fBgroup\fR
1654.IQ
1655\fBoutput\fR
1656.IQ
2e34a6a3
SS
1657\fBresubmit\fR
1658.IQ
1659If more than one of these actions is present, then the one listed
1660earliest above is executed and the others are ignored, regardless of
1661the order in which they were added to the action set. (If none of these
1662actions is present, the action set has no real effect, because the
1663modified packet is not sent anywhere and thus the modifications are
1664not visible.)
7fdb60a7
SH
1665.RE
1666.IP
1667Only the actions listed above may be written to the action set.
491e05c2 1668\fBencap\fR, \fBdecap\fR and \fBdec_nsh_ttl\fR actions are nonstandard.
7fdb60a7 1669.
4cceacb9
JS
1670.IP \fBwrite_metadata\fB:\fIvalue\fR[/\fImask\fR]
1671Updates the metadata field for the flow. If \fImask\fR is omitted, the
1672metadata field is set exactly to \fIvalue\fR; if \fImask\fR is specified, then
1673a 1-bit in \fImask\fR indicates that the corresponding bit in the metadata
1674field will be replaced with the corresponding bit from \fIvalue\fR. Both
1675\fIvalue\fR and \fImask\fR are 64-bit values that are decimal by default; use
1676a \fB0x\fR prefix to specify them in hexadecimal.
1677.
3200ed58
JR
1678.IP \fBmeter\fR:\fImeter_id\fR
1679Apply the \fImeter_id\fR before any other actions. If a meter band rate is
1680exceeded, the packet may be dropped, or modified, depending on the meter
1681band type. See the description of the \fBMeter Table Commands\fR, above,
1682for more details.
1683.
8dd54666 1684.IP \fBgoto_table\fR:\fItable\fR
4bc938cc
BP
1685Jumps to \fItable\Fr as the next table in the process pipeline. The
1686\fItable\fR may be a number between 0 and 254 or (unless
1687\fB\-\-no\-names\fR is specified) a name.
8dd54666 1688.
0e553d9c
BP
1689.IP "\fBfin_timeout(\fIargument\fR[\fB,\fIargument\fR]\fB)"
1690This action changes the idle timeout or hard timeout, or both, of this
1691OpenFlow rule when the rule matches a TCP packet with the FIN or RST
1692flag. When such a packet is observed, the action reduces the rule's
1693timeouts to those specified on the action. If the rule's existing
1694timeout is already shorter than the one that the action specifies,
1695then that timeout is unaffected.
1696.IP
1697\fIargument\fR takes the following forms:
1698.RS
1699.IP "\fBidle_timeout=\fIseconds\fR"
1700Causes the flow to expire after the given number of seconds of
1701inactivity.
1702.
1703.IP "\fBhard_timeout=\fIseconds\fR"
1704Causes the flow to expire after the given number of seconds,
1705regardless of activity. (\fIseconds\fR specifies time since the
1706flow's creation, not since the receipt of the FIN or RST.)
1707.RE
1708.IP
1709This action was added in Open vSwitch 1.5.90.
29089a54
RL
1710.
1711.IP "\fBsample(\fIargument\fR[\fB,\fIargument\fR]...\fB)\fR"
1712Samples packets and sends one sample for every sampled packet.
1713.IP
1714\fIargument\fR takes the following forms:
1715.RS
1716.IP "\fBprobability=\fIpackets\fR"
1717The number of sampled packets out of 65535. Must be greater or equal to 1.
1718.IP "\fBcollector_set_id=\fIid\fR"
1719The unsigned 32-bit integer identifier of the set of sample collectors
1720to send sampled packets to. Defaults to 0.
1721.IP "\fBobs_domain_id=\fIid\fR"
1722When sending samples to IPFIX collectors, the unsigned 32-bit integer
1723Observation Domain ID sent in every IPFIX flow record. Defaults to 0.
1724.IP "\fBobs_point_id=\fIid\fR"
1725When sending samples to IPFIX collectors, the unsigned 32-bit integer
1726Observation Point ID sent in every IPFIX flow record. Defaults to 0.
f69f713b 1727.IP "\fBsampling_port=\fIport\fR"
4930ea56
BP
1728Sample packets on \fIport\fR, which should be the ingress or egress
1729port. This option, which was added in Open vSwitch 2.5.90, allows the
1730IPFIX implementation to export egress tunnel information.
1731.IP "\fBingress\fR"
1732.IQ "\fBegress\fR"
1733Specifies explicitly that the packet is being sampled on ingress to or
1734egress from the switch. IPFIX reports sent by Open vSwitch before
1735version 2.5.90 did not include a direction. From 2.5.90 until 2.6.90,
1736IPFIX reports inferred a direction from \fBsampling_port\fR: if it was
1737the packet's output port, then the direction was reported as egress,
1738otherwise as ingress. Open vSwitch 2.6.90 introduced these options,
1739which allow the inferred direction to be overridden. This is
1740particularly useful when the ingress (or egress) port is not a tunnel.
29089a54
RL
1741.RE
1742.IP
fb8f22c1 1743Refer to \fBovs\-vswitchd.conf.db\fR(5) for more details on
29089a54
RL
1744configuring sample collector sets.
1745.IP
1746This action was added in Open vSwitch 1.10.90.
1747.
848e8809 1748.IP "\fBexit\fR"
7fdb60a7
SH
1749This action causes Open vSwitch to immediately halt execution of
1750further actions. Those actions which have already been executed are
1751unaffected. Any further actions, including those which may be in
1752other tables, or different levels of the \fBresubmit\fR call stack,
1753are ignored. Actions in the action set is still executed (specify
1754\fBclear_actions\fR before \fBexit\fR to discard them).
18080541
BP
1755.
1756.IP "\fBconjunction(\fIid\fB, \fIk\fB/\fIn\fR\fB)\fR"
96fee5e0
BP
1757This action allows for sophisticated ``conjunctive match'' flows.
1758Refer to \fBCONJUNCTIVE MATCH FIELDS\fR in \fBovs\-fields\fR(7) for details.
18080541
BP
1759.IP
1760The \fBconjunction\fR action and \fBconj_id\fR field were introduced
1761in Open vSwitch 2.4.
e8035fc0
BP
1762.
1763.IP "\fBclone(\fR[\fIaction\fR][\fB,\fIaction\fR...]\fB)\fR"
1764Executes each nested \fIaction\fR, saving much of the packet and
1765pipeline state beforehand and then restoring it afterward. The state
1766that is saved and restored includes all flow data and metadata
b827b231
BP
1767(including, for example, \fBct_state\fR), the stack accessed by
1768\fBpush\fR and \fBpop\fR actions, and the OpenFlow action set.
e8035fc0
BP
1769.IP
1770This action was added in Open vSwitch 2.6.90.
f839892a
JS
1771.
1772.IP "\fBencap(\fR\fIheader\fR[\fB(\fR\fIprop\fR\fB=\fR\fIvalue\fR,\fItlv\fR\fB(\fR\fIclass\fR,\fItype\fR,\fIvalue\fB)\fR,...\fB)\fR]\fB)\fR"
1773Encapsulates the packet with a new packet header, e.g., ethernet
1774or nsh.
1775.
1776.RS
1777.IP "\fIheader\fR"
1778Used to specify encapsulation header type.
1779.
1780.IP "\fIprop\fR\fB=\fR\fIvalue\fR"
1781Used to specify the initial value for the property in the encapsulation header.
1782.
1783.IP "\fItlv\fR\fB(\fR\fIclass\fR,\fItype\fR,\fIvalue\fB)\fR"
1784Used to specify the initial value for the TLV (Type Length Value)
1785in the encapsulation header.
1786.RE
1787.IP
1788For example, \fBencap(ethernet)\fR will encapsulate the L3 packet with
1789Ethernet header.
1790.IP
1791\fBencap(nsh(md_type=1))\fR will encapsulate the packet with nsh header
1792and nsh metadata type 1.
1793.IP
1794\fBencap(nsh(md_type=2,tlv(0x1000,10,0x12345678)))\fR will encapsulate
1795the packet with nsh header and nsh metadata type 2, and the nsh TLV with
1796class 0x1000 and type 10 is set to 0x12345678.
1797.IP
1798\fIprop\fR\fB=\fR\fIvalue\fR is just used to set some
1799necessary fields for encapsulation header initialization. Other fields
1800in the encapsulation header must be set by \fBset_field\fR action. New
1801encapsulation header implementation must add new match fields and
1802corresponding \fBset\fR action in order that \fBset_field\fR action can
1803change the fields in the encapsulation header on demand.
1804.IP
1805\fBencap(nsh(md_type=1)),\fR
1806\fBset_field:0x1234->nsh_spi,set_field:0x11223344->nsh_c1\fR
1807is an example to encapsulate nsh header and set nsh spi and c1.
1808.IP
1809This action was added in Open vSwitch 2.8.
1810.
1811.IP "\fBdecap(\fR[\fBpacket_type(ns=\fR\fInamespace\fR\fB,type=\fR\fItype\fR\fB)\fR]\fB)\fR"
1812Decapsulates the outer packet header.
1813.
1814.RS
1815.IP "\fBpacket_type(ns=\fR\fInamespace\fR\fB,type=\fR\fItype\fR\fB)\fR"
1816It is optional and used to specify the outer header type of the
1817decapsulated packet. \fInamespace\fR is 0 for Ethernet packet,
18181 for L3 packet, \fItype\fR\ is L3 protocol type, e.g.,
18190x894f for nsh, 0x0 for Ethernet.
1820.RE
1821.IP
1822By default, \fBdecap()\fR will decapsulate the outer packet header
1823according to the packet header type, if
1824\fBpacket_type(ns=\fR\fInamespace\fR\fB,type=\fR\fItype\fR\fB)\fR
1825is given, it will decapsulate the given packet header, it will fail
1826if the actual outer packet header type is not of
1827\fBpacket_type(ns=\fR\fInamespace\fR\fB,type=\fR\fItype\fR\fB)\fR.
1828.IP
1829This action was added in Open vSwitch 2.8.
24362cd6 1830.RE
848e8809 1831.
064af421 1832.PP
e729e793
JP
1833An opaque identifier called a cookie can be used as a handle to identify
1834a set of flows:
1835.
623e1caf
JP
1836.IP \fBcookie=\fIvalue\fR
1837.
1838A cookie can be associated with a flow using the \fBadd\-flow\fR,
1839\fBadd\-flows\fR, and \fBmod\-flows\fR commands. \fIvalue\fR can be any
184064-bit number and need not be unique among flows. If this field is
1841omitted, a default cookie value of 0 is used.
1842.
1843.IP \fBcookie=\fIvalue\fR\fB/\fImask\fR
e729e793 1844.
e729e793 1845When using NXM, the cookie can be used as a handle for querying,
623e1caf
JP
1846modifying, and deleting flows. \fIvalue\fR and \fImask\fR may be
1847supplied for the \fBdel\-flows\fR, \fBmod\-flows\fR, \fBdump\-flows\fR, and
1848\fBdump\-aggregate\fR commands to limit matching cookies. A 1-bit in
1849\fImask\fR indicates that the corresponding bit in \fIcookie\fR must
1850match exactly, and a 0-bit wildcards that bit. A mask of \-1 may be used
1851to exactly match a cookie.
1852.IP
1853The \fBmod\-flows\fR command can update the cookies of flows that
1854match a cookie by specifying the \fIcookie\fR field twice (once with a
1855mask for matching and once without to indicate the new value):
1856.RS
1857.IP "\fBovs\-ofctl mod\-flows br0 cookie=1,actions=normal\fR"
1858Change all flows' cookies to 1 and change their actions to \fBnormal\fR.
1859.IP "\fBovs\-ofctl mod\-flows br0 cookie=1/\-1,cookie=2,actions=normal\fR"
1860Update cookies with a value of 1 to 2 and change their actions to
1861\fBnormal\fR.
1862.RE
1863.IP
1864The ability to match on cookies was added in Open vSwitch 1.5.0.
8cce2125
JP
1865.
1866.PP
4b6b46ce
BP
1867The following additional field sets the priority for flows added by
1868the \fBadd\-flow\fR and \fBadd\-flows\fR commands. For
1869\fBmod\-flows\fR and \fBdel\-flows\fR when \fB\-\-strict\fR is
1870specified, priority must match along with the rest of the flow
623e1caf 1871specification. For \fBmod-flows\fR without \fB\-\-strict\fR,
fdb3539e
BP
1872priority is only significant if the command creates a new flow, that
1873is, non-strict \fBmod\-flows\fR does not match on priority and will
1874not change the priority of existing flows. Other commands do not
1875allow priority to be specified.
a9b4a41a 1876.
064af421
BP
1877.IP \fBpriority=\fIvalue\fR
1878The priority at which a wildcarded entry will match in comparison to
1879others. \fIvalue\fR is a number between 0 and 65535, inclusive. A higher
1880\fIvalue\fR will match before a lower one. An exact-match entry will always
1881have priority over an entry containing wildcards, so it has an implicit
1882priority value of 65535. When adding a flow, if the field is not specified,
1883the flow's priority will default to 32768.
4530afba
BP
1884.IP
1885OpenFlow leaves behavior undefined when two or more flows with the
1886same priority can match a single packet. Some users expect
1887``sensible'' behavior, such as more specific flows taking precedence
1888over less specific flows, but OpenFlow does not specify this and Open
1889vSwitch does not implement it. Users should therefore take care to
1890use priorities to ensure the behavior that they expect.
a9b4a41a 1891.
064af421 1892.PP
fdb3539e
BP
1893The \fBadd\-flow\fR, \fBadd\-flows\fR, and \fBmod\-flows\fR commands
1894support the following additional options. These options affect only
1895new flows. Thus, for \fBadd\-flow\fR and \fBadd\-flows\fR, these
1896options are always significant, but for \fBmod\-flows\fR they are
1897significant only if the command creates a new flow, that is, their
a993007b 1898values do not update or affect existing flows.
a9b4a41a 1899.
fdb3539e 1900.IP "\fBidle_timeout=\fIseconds\fR"
064af421 1901Causes the flow to expire after the given number of seconds of
fdb3539e
BP
1902inactivity. A value of 0 (the default) prevents a flow from expiring
1903due to inactivity.
a9b4a41a 1904.
064af421
BP
1905.IP \fBhard_timeout=\fIseconds\fR
1906Causes the flow to expire after the given number of seconds,
1907regardless of activity. A value of 0 (the default) gives the flow no
1908hard expiration deadline.
a9b4a41a 1909.
ca26eb44
RB
1910.IP "\fBimportance=\fIvalue\fR"
1911Sets the importance of a flow. The flow entry eviction mechanism can
1912use importance as a factor in deciding which flow to evict. A value
1913of 0 (the default) makes the flow non-evictable on the basis of
1914importance. Specify a value between 0 and 65535.
1915.IP
1916Only OpenFlow 1.4 and later support \fBimportance\fR.
1917.
a993007b
BP
1918.IP "\fBsend_flow_rem\fR"
1919Marks the flow with a flag that causes the switch to generate a ``flow
1920removed'' message and send it to interested controllers when the flow
1921later expires or is removed.
1922.
1923.IP "\fBcheck_overlap\fR"
1924Forces the switch to check that the flow match does not overlap that
1925of any different flow with the same priority in the same table. (This
1926check is expensive so it is best to avoid it.)
1927.
b6dc6b93
BP
1928.IP "\fBreset_counts\fR"
1929When this flag is specified on a flow being added to a switch, and the
1930switch already has a flow with an identical match, an OpenFlow 1.2 (or
1931later) switch resets the flow's packet and byte counters to 0.
1932Without the flag, the packet and byte counters are preserved.
1933.IP
1934OpenFlow 1.0 and 1.1 switches always reset counters in this situation,
1935as if \fBreset_counts\fR were always specified.
1936.IP
1937Open vSwitch 1.10 added support for \fBreset_counts\fR.
1938.
1939.IP "\fBno_packet_counts\fR"
1940.IQ "\fBno_byte_counts\fR"
1941Adding these flags to a flow advises an OpenFlow 1.3 (or later) switch
1942that the controller does not need packet or byte counters,
1943respectively, for the flow. Some switch implementations might achieve
1944higher performance or reduce resource consumption when these flags are
1945used. These flags provide no benefit to the Open vSwitch software
1946switch implementation.
1947.IP
1948OpenFlow 1.2 and earlier do not support these flags.
1949.IP
1950Open vSwitch 1.10 added support for \fBno_packet_counts\fR and
1951\fBno_byte_counts\fR.
1952.
064af421 1953.PP
4e312e69 1954The \fBdump\-flows\fR, \fBdump\-aggregate\fR, \fBdel\-flow\fR
6d5d1f3b 1955and \fBdel\-flows\fR commands support these additional optional fields:
a9b4a41a 1956.
064af421
BP
1957.TP
1958\fBout_port=\fIport\fR
c6100d92 1959If set, a matching flow must include an output action to \fIport\fR,
60a0b9e5 1960which must be an OpenFlow port number or name (e.g. \fBlocal\fR).
a9b4a41a 1961.
6d5d1f3b
BP
1962.TP
1963\fBout_group=\fIport\fR
1964If set, a matching flow must include an \fBgroup\fR action naming
1965\fIgroup\fR, which must be an OpenFlow group number. This field
1966is supported in Open vSwitch 2.5 and later and requires OpenFlow 1.1
1967or later.
1968.
064af421 1969.SS "Table Entry Output"
a9b4a41a 1970.
4e312e69 1971The \fBdump\-tables\fR and \fBdump\-aggregate\fR commands print information
064af421 1972about the entries in a datapath's tables. Each line of output is a
f27f2134
BP
1973flow entry as described in \fBFlow Syntax\fR, above, plus some
1974additional fields:
a9b4a41a 1975.
f27f2134
BP
1976.IP \fBduration=\fIsecs\fR
1977The time, in seconds, that the entry has been in the table.
1978\fIsecs\fR includes as much precision as the switch provides, possibly
1979to nanosecond resolution.
a9b4a41a 1980.
064af421
BP
1981.IP \fBn_packets\fR
1982The number of packets that have matched the entry.
a9b4a41a 1983.
064af421
BP
1984.IP \fBn_bytes\fR
1985The total number of bytes from packets that have matched the entry.
a9b4a41a 1986.
064af421 1987.PP
f27f2134
BP
1988The following additional fields are included only if the switch is
1989Open vSwitch 1.6 or later and the NXM flow format is used to dump the
1990flow (see the description of the \fB\-\-flow-format\fR option below).
1991The values of these additional fields are approximations only and in
1992particular \fBidle_age\fR will sometimes become nonzero even for busy
1993flows.
1994.
1995.IP \fBhard_age=\fIsecs\fR
1996The integer number of seconds since the flow was added or modified.
1997\fBhard_age\fR is displayed only if it differs from the integer part
1998of \fBduration\fR. (This is separate from \fBduration\fR because
1999\fBmod\-flows\fR restarts the \fBhard_timeout\fR timer without zeroing
2000\fBduration\fR.)
2001.
2002.IP \fBidle_age=\fIsecs\fR
2003The integer number of seconds that have passed without any packets
2004passing through the flow.
a9b4a41a 2005.
6dd3c787
JR
2006.SS "Packet\-Out Syntax"
2007.PP
2008\fBovs\-ofctl bundle\fR command accepts packet-outs to be specified in
2009the bundle file. Each packet-out comprises of a series of
2010\fIfield\fB=\fIvalue\fR assignments, separated by commas or white
2011space. (Embedding spaces into a packet-out description normally
2012requires quoting to prevent the shell from breaking the description
2013into multiple arguments.). Unless noted otherwise only the last
2014instance of each field is honoured. This same syntax is also
2015supported by the \fBovs\-ofctl packet-out\fR command.
2016.PP
2017.IP \fBin_port=\fIport\fR
2018The port number to be considered the in_port when processing actions.
2019This can be any valid OpenFlow port number, or any of the \fBLOCAL\fR,
2020\fBCONTROLLER\fR, or \fBNONE\fR.
2021.
2022This field is required.
2023
880b1458
YHW
2024.IP \fIpipeline_field\fR=\fIvalue\fR
2025Optionally, user can specify a list of pipeline fields for a packet-out
2026message. The supported pipeline fields includes \fBtunnel fields\fR and
2027\fBregister fields\fR as defined in \fBovs\-fields\fR(7).
2028
6dd3c787
JR
2029.IP \fBpacket=\fIhex-string\fR
2030The actual packet to send, expressed as a string of hexadecimal bytes.
2031.
2032This field is required.
2033
2034.IP \fBactions=\fR[\fIaction\fR][\fB,\fIaction\fR...]\fR
2035The syntax of actions are identical to the \fBactions=\fR field
2036described in \fBFlow Syntax\fR above. Specifying \fBactions=\fR is
2037optional, but omitting actions is interpreted as a drop, so the packet
2038will not be sent anywhere from the switch.
2039.
2040\fBactions\fR must be specified at the end of each line, like for flow mods.
2041.RE
2042.
7395c052
NZ
2043.SS "Group Syntax"
2044.PP
2045Some \fBovs\-ofctl\fR commands accept an argument that describes a group or
2046groups. Such flow descriptions comprise a series
2047\fIfield\fB=\fIvalue\fR assignments, separated by commas or white
2048space. (Embedding spaces into a group description normally requires
2049quoting to prevent the shell from breaking the description into
2050multiple arguments.). Unless noted otherwise only the last instance
2051of each field is honoured.
2052.PP
2053.IP \fBgroup_id=\fIid\fR
2054The integer group id of group.
19187a71 2055When this field is specified in \fBdel\-groups\fR or \fBdump\-groups\fR,
7395c052
NZ
2056the keyword "all" may be used to designate all groups.
2057.
2058This field is required.
2059
2060
2061.IP \fBtype=\fItype\fR
bdbb8426 2062The type of the group. The \fBadd-group\fR, \fBadd-groups\fR and
ed1d5ef3 2063\fBmod-groups\fR commands require this field. It is prohibited for
bdbb8426 2064other commands. The following keywords designated the allowed types:
7395c052
NZ
2065.RS
2066.IP \fBall\fR
2067Execute all buckets in the group.
2068.IP \fBselect\fR
9a84f468
BP
2069Execute one bucket in the group, balancing across the buckets
2070according to their weights. To select a bucket, for each live bucket,
2071Open vSwitch hashes flow data with the bucket ID and multiplies by the
2072bucket weight to obtain a ``score,'' and then selects the bucket with
2073the highest score. Use \fBselection_method\fR to control the flow
2074data used for selection.
7395c052
NZ
2075.IP \fBindirect\fR
2076Executes the one bucket in the group.
2077.IP \fBff\fR
2078.IQ \fBfast_failover\fR
2079Executes the first live bucket in the group which is associated with
2080a live port or group.
2081.RE
2082
bdbb8426
SH
2083.IP \fBcommand_bucket_id=\fIid\fR
2084The bucket to operate on. The \fBinsert-buckets\fR and \fBremove-buckets\fR
2085commands require this field. It is prohibited for other commands.
2086\fIid\fR may be an integer or one of the following keywords:
2087.RS
2088.IP \fBall\fR
2089Operate on all buckets in the group.
2090Only valid when used with the \fBremove-buckets\fR command in which
2091case the effect is to remove all buckets from the group.
2092.IP \fBfirst\fR
2093Operate on the first bucket present in the group.
2094In the case of the \fBinsert-buckets\fR command the effect is to
2095insert new bucets just before the first bucket already present in the group;
2096or to replace the buckets of the group if there are no buckets already present
2097in the group.
2098In the case of the \fBremove-buckets\fR command the effect is to
2099remove the first bucket of the group; or do nothing if there are no
2100buckets present in the group.
2101.IP \fBlast\fR
2102Operate on the last bucket present in the group.
2103In the case of the \fBinsert-buckets\fR command the effect is to
2104insert new bucets just after the last bucket already present in the group;
2105or to replace the buckets of the group if there are no buckets already present
2106in the group.
2107In the case of the \fBremove-buckets\fR command the effect is to
2108remove the last bucket of the group; or do nothing if there are no
2109buckets present in the group.
2110.RE
2111.IP
2112If \fIid\fR is an integer then it should correspond to the \fBbucket_id\fR
2113of a bucket present in the group.
2114In case of the \fBinsert-buckets\fR command the effect is to
2115insert buckets just before the bucket in the group whose \fBbucket_id\fR is
2116\fIid\fR.
2117In case of the \fBiremove-buckets\fR command the effect is to
2118remove the in the group whose \fBbucket_id\fR is \fIid\fR.
2119It is an error if there is no bucket persent group in whose \fBbucket_id\fR is
2120\fIid\fR.
2121
b879391e
SH
2122.IP \fBselection_method\fR=\fImethod\fR
2123The selection method used to select a bucket for a select group.
2124This is a string of 1 to 15 bytes in length known to lower layers.
2125This field is optional for \fBadd\-group\fR, \fBadd\-groups\fR and
2126\fBmod\-group\fR commands on groups of type \fBselect\fR. Prohibited
06db81cc
JS
2127otherwise. If no selection method is specified, Open vSwitch up to
2128release 2.9 applies the \fBhash\fR method with default fields. From
21292.10 onwards Open vSwitch defaults to the \fBdp_hash\fR method with symmetric
2130L3/L4 hash algorithm, unless the weighted group buckets cannot be mapped to
2131a maximum of 64 dp_hash values with sufficient accuracy.
2132In those rare cases Open vSwitch 2.10 and later fall back to the \fBhash\fR
2133method with the default set of hash fields.
53cc166a 2134.RS
53cc166a
JR
2135.IP \fBdp_hash\fR
2136Use a datapath computed hash value. The hash algorithm varies accross
2137different datapath implementations. \fBdp_hash\fR uses the upper 32
2138bits of the \fBselection_method_param\fR as the datapath hash
06db81cc
JS
2139algorithm selector. The supported values are \fB0\fR (corresponding to
2140hash computation over the IP 5-tuple) and \fB1\fR (corresponding to a
2141\fIsymmetric\fR hash computation over the IP 5-tuple). Selecting specific
2142fields with the \fBfields\fR option is not supported with \fBdp_hash\fR).
2143The lower 32 bits are used as the hash basis.
53cc166a
JR
2144.IP
2145Using \fBdp_hash\fR has the advantage that it does not require the
2146generated datapath flows to exact match any additional packet header
2147fields. For example, even if multiple TCP connections thus hashed to
2148different select group buckets have different source port numbers,
2149generally all of them would be handled with a small set of already
2150established datapath flows, resulting in less latency for TCP SYN
2151packets. The downside is that the shared datapath flows must match
2152each packet twice, as the datapath hash value calculation happens only
2153when needed, and a second match is required to match some bits of its
2154value. This double-matching incurs a small additional latency cost
2155for each packet, but this latency is orders of magnitude less than the
2156latency of creating new datapath flows for new TCP connections.
06db81cc
JS
2157.IP \fBhash\fR
2158Use a hash computed over the fields specified with the \fBfields\fR
2159option, see below. If no hash fields are specified, \fBhash\fR defaults
2160to a symmetric hash over the combination of MAC addresses, VLAN tags,
2161Ether type, IP addresses and L4 port numbers. \fBhash\fR uses the
2162\fBselection_method_param\fR as the hash basis.
2163.IP
2164Note that the hashed fields become exact matched by the datapath
2165flows. For example, if the TCP source port is hashed, the created
2166datapath flows will match the specific TCP source port value present
2167in the packet received. Since each TCP connection generally has a
2168different source port value, a separate datapath flow will be need to
2169be inserted for each TCP connection thus hashed to a select group
2170bucket.
53cc166a 2171.RE
68dfc25b 2172.IP
06db81cc 2173This option uses a Netronome OpenFlow extension which is only supported
b879391e
SH
2174when using Open vSwitch 2.4 and later with OpenFlow 1.5 and later.
2175
2176.IP \fBselection_method_param\fR=\fIparam\fR
217764-bit integer parameter to the selection method selected by the
2178\fBselection_method\fR field. The parameter's use is defined by the
2179lower-layer that implements the \fBselection_method\fR. It is optional if
2180the \fBselection_method\fR field is specified as a non-empty string.
2181Prohibited otherwise. The default value is zero.
2182.IP
06db81cc 2183This option uses a Netronome OpenFlow extension which is only supported
b879391e
SH
2184when using Open vSwitch 2.4 and later with OpenFlow 1.5 and later.
2185
68dfc25b
BP
2186.IP \fBfields\fR=\fIfield\fR
2187.IQ \fBfields(\fIfield\fR[\fB=\fImask\fR]\fR...\fB)\fR
b879391e 2188The field parameters to selection method selected by the
60dfb5ed
JR
2189\fBselection_method\fR field. The syntax is described in \fBFlow
2190Syntax\fR with the additional restrictions that if a value is provided
2191it is treated as a wildcard mask and wildcard masks following a slash
2192are prohibited. The pre-requisites of fields must be provided by any
2193flows that output to the group. The use of the fields is defined by
2194the lower-layer that implements the \fBselection_method\fR. They are
2195optional if the \fBselection_method\fR field is specified as ``hash',
2196prohibited otherwise. The default is no fields.
b879391e
SH
2197.IP
2198This option will use a Netronome OpenFlow extension which is only supported
2199when using Open vSwitch 2.4 and later with OpenFlow 1.5 and later.
2200
7395c052
NZ
2201.IP \fBbucket\fR=\fIbucket_parameters\fR
2202The \fBadd-group\fR, \fBadd-groups\fR and \fBmod-group\fR commands
2203require at least one bucket field. Bucket fields must appear after
2204all other fields.
2205.
2206Multiple bucket fields to specify multiple buckets.
2207The order in which buckets are specified corresponds to their order in
2208the group. If the type of the group is "indirect" then only one group may
2209be specified.
2210.
2211\fIbucket_parameters\fR consists of a list of \fIfield\fB=\fIvalue\fR
2212assignments, separated by commas or white space followed by a
2213comma-separated list of actions.
7395c052
NZ
2214The fields for \fIbucket_parameters\fR are:
2215.
2216.RS
2d5d050c
SH
2217.IP \fBbucket_id=\fIid\fR
2218The 32-bit integer group id of the bucket. Values greater than
22190xffffff00 are reserved.
2220.
2221This field was added in Open vSwitch 2.4 to conform with the OpenFlow
d3cb080e 22221.5 specification. It is not supported when earlier versions
2d5d050c
SH
2223of OpenFlow are used. Open vSwitch will automatically allocate bucket
2224ids when they are not specified.
f1457c26
TG
2225.IP \fBactions=\fR[\fIaction\fR][\fB,\fIaction\fR...]\fR
2226The syntax of actions are identical to the \fBactions=\fR field described in
6dd3c787 2227\fBFlow Syntax\fR above. Specifying \fBactions=\fR is optional, any unknown
f1457c26 2228bucket parameter will be interpreted as an action.
7395c052
NZ
2229.IP \fBweight=\fIvalue\fR
2230The relative weight of the bucket as an integer. This may be used by the switch
2231during bucket select for groups whose \fBtype\fR is \fBselect\fR.
2232.IP \fBwatch_port=\fIport\fR
2233Port used to determine liveness of group.
2234This or the \fBwatch_group\fR field is required
2235for groups whose \fBtype\fR is \fBff\fR or \fBfast_failover\fR.
2236.IP \fBwatch_group=\fIgroup_id\fR
2237Group identifier of group used to determine liveness of group.
2238This or the \fBwatch_port\fR field is required
2239for groups whose \fBtype\fR is \fBff\fR or \fBfast_failover\fR.
2240.RE
2241.
3200ed58
JR
2242.SS "Meter Syntax"
2243.PP
2244The meter table commands accept an argument that describes a meter.
2245Such meter descriptions comprise a series \fIfield\fB=\fIvalue\fR
2246assignments, separated by commas or white space.
2247(Embedding spaces into a group description normally requires
2248quoting to prevent the shell from breaking the description into
2249multiple arguments.). Unless noted otherwise only the last instance
2250of each field is honoured.
2251.PP
2252.IP \fBmeter=\fIid\fR
76b05258
JP
2253The identifier for the meter. An integer is used to specify a
2254user-defined meter. In addition, the keywords "all", "controller", and
2255"slowpath", are also supported as virtual meters. The "controller" and
2256"slowpath" virtual meters apply to packets sent to the controller and to
2257the OVS userspace, respectively.
2258.IP
3200ed58 2259When this field is specified in \fBdel-meter\fR, \fBdump-meter\fR, or
76b05258
JP
2260\fBmeter-stats\fR, the keyword "all" may be used to designate all
2261meters. This field is required, except for \fBmeter-stats\fR, which
2262dumps all stats when this field is not specified.
3200ed58
JR
2263.IP \fBkbps\fR
2264.IQ \fBpktps\fR
330f6f53
JP
2265The unit for the \fBrate\fR and \fBburst_size\fR band parameters.
2266\fBkbps\fR specifies kilobits per second, and \fBpktps\fR specifies
2267packets per second. A unit is required for the \fBadd-meter\fR and
2268\fBmod-meter\fR commands.
3200ed58
JR
2269
2270.IP \fBburst\fR
330f6f53
JP
2271If set, enables burst support for meter bands through the \fBburst_size\fR
2272parameter.
3200ed58
JR
2273
2274.IP \fBstats\fR
330f6f53 2275If set, enables the collection of meter and band statistics.
3200ed58
JR
2276
2277.IP \fBbands\fR=\fIband_parameters\fR
2278The \fBadd-meter\fR and \fBmod-meter\fR commands require at least one
2279band specification. Bands must appear after all other fields.
2280.RS
2281.IP \fBtype=\fItype\fR
2282The type of the meter band. This keyword starts a new band specification.
2283Each band specifies a rate above which the band is to take some action. The
2284action depends on the band type. If multiple bands' rate is exceeded, then
2285the band with the highest rate among the exceeded bands is selected.
2286The following keywords designate the allowed
2287meter band types:
2288.RS
2289.IP \fBdrop\fR
2290Drop packets exceeding the band's rate limit.
2291.RE
2292.
2293.IP "The other \fIband_parameters\fR are:"
2294.IP \fBrate=\fIvalue\fR
2295The relative rate limit for this band, in kilobits per second or packets per
330f6f53 2296second, depending on whether \fBkbps\fR or \fBpktps\fR was specified.
96660ed1 2297.IP \fBburst_size=\fIsize\fR
330f6f53
JP
2298If \fBburst\fR is specified for the meter entry, configures the maximum
2299burst allowed for the band in kilobits or packets, depending on whether
2300\fBkbps\fR or \fBpktps\fR was specified. If unspecified, the switch is
2301free to select some reasonable value depending on its configuration.
3200ed58
JR
2302.RE
2303.
064af421
BP
2304.SH OPTIONS
2305.TP
4e312e69 2306\fB\-\-strict\fR
064af421 2307Uses strict matching when running flow modification commands.
a9b4a41a 2308.
50f96b10
BP
2309.IP "\fB\-\-names\fR"
2310.IQ "\fB\-\-no\-names\fR"
4bc938cc
BP
2311Every OpenFlow port has a name and a number, and every OpenFlow flow
2312table has a number and sometimes a name. By default, \fBovs\-ofctl\fR
2313commands accept both port and table names and numbers, and they
2314display port and table names if \fBovs\-ofctl\fR is running on an
2315interactive console, numbers otherwise. With \fB\-\-names\fR,
2316\fBovs\-ofctl\fR commands both accept and display port and table
2317names; with \fB\-\-no\-names\fR, commands neither accept nor display
2318port and table names.
2319.IP
2320If a port or table name contains special characters or might be
2321confused with a keyword within a flow, it may be enclosed in double
2322quotes (escaped from the shell). If necessary, JSON-style escape
2323sequences may be used inside quotes, as specified in RFC 7159. When
2324it displays port and table names, \fBovs\-ofctl\fR quotes any name
2325that does not start with a letter followed by letters or digits.
2326.IP
2327Open vSwitch added support for port names and these options. Open
2328vSwitch 2.10 added support for table names. Earlier versions always
50f96b10
BP
2329behaved as if \fB\-\-no\-names\fR were specified.
2330.IP
2331Open vSwitch does not place its own limit on the length of port names,
2332but OpenFlow 1.0 to 1.5 limit port names to 15 bytes and OpenFlow 1.6
2333limits them to 63 bytes. Because \fRovs\-ofctl\fR uses OpenFlow to
2334retrieve the mapping between port names and numbers, names longer than
2335this limit will be truncated for both display and acceptance.
2336Truncation can also cause long names that are different to appear to
2337be the same; when a switch has two ports with the same (truncated)
2338name, \fBovs\-ofctl\fR refuses to display or accept the name, using
2339the number instead.
4bc938cc
BP
2340.IP
2341OpenFlow and Open vSwitch limit table names to 32 bytes.
50f96b10 2342.
1b3758c3
BP
2343.IP "\fB\-\-stats\fR"
2344.IQ "\fB\-\-no\-stats\fR"
2345The \fBdump\-flows\fR command by default, or with \fB\-\-stats\fR,
2346includes flow duration, packet and byte counts, and idle and hard age
2347in its output. With \fB\-\-no\-stats\fR, it omits all of these, as
2348well as cookie values and table IDs if they are zero.
2349.
1f4a7252
RM
2350.IP "\fB\-\-read-only\fR"
2351Do not execute read/write commands.
2352.
db5076ee 2353.IP "\fB\-\-bundle\fR"
39c94593 2354Execute flow mods as an OpenFlow 1.4 atomic bundle transaction.
db5076ee
JR
2355.RS
2356.IP \(bu
2357Within a bundle, all flow mods are processed in the order they appear
39c94593
JR
2358and as a single atomic transaction, meaning that if one of them fails,
2359the whole transaction fails and none of the changes are made to the
2360\fIswitch\fR's flow table, and that each given datapath packet
2361traversing the OpenFlow tables sees the flow tables either as before
2362the transaction, or after all the flow mods in the bundle have been
2363successfully applied.
db5076ee
JR
2364.IP \(bu
2365The beginning and the end of the flow table modification commands in a
2366bundle are delimited with OpenFlow 1.4 bundle control messages, which
2367makes it possible to stream the included commands without explicit
2368OpenFlow barriers, which are otherwise used after each flow table
2369modification command. This may make large modifications execute
2370faster as a bundle.
2371.IP \(bu
2372Bundles require OpenFlow 1.4 or higher. An explicit \fB-O
2373OpenFlow14\fR option is not needed, but you may need to enable
2374OpenFlow 1.4 support for OVS by setting the OVSDB \fIprotocols\fR
2375column in the \fIbridge\fR table.
db5076ee
JR
2376.RE
2377.
a53a8efa
SH
2378.so lib/ofp-version.man
2379.
27527aa0
BP
2380.IP "\fB\-F \fIformat\fR[\fB,\fIformat\fR...]"
2381.IQ "\fB\-\-flow\-format=\fIformat\fR[\fB,\fIformat\fR...]"
2382\fBovs\-ofctl\fR supports the following individual flow formats, any
2383number of which may be listed as \fIformat\fR:
88ca35ee 2384.RS
27527aa0
BP
2385.IP "\fBOpenFlow10\-table_id\fR"
2386This is the standard OpenFlow 1.0 flow format. All OpenFlow switches
2387and all versions of Open vSwitch support this flow format.
88ca35ee 2388.
27527aa0
BP
2389.IP "\fBOpenFlow10+table_id\fR"
2390This is the standard OpenFlow 1.0 flow format plus a Nicira extension
2391that allows \fBovs\-ofctl\fR to specify the flow table in which a
2392particular flow should be placed. Open vSwitch 1.2 and later supports
2393this flow format.
2394.
2395.IP "\fBNXM\-table_id\fR (Nicira Extended Match)"
88ca35ee
BP
2396This Nicira extension to OpenFlow is flexible and extensible. It
2397supports all of the Nicira flow extensions, such as \fBtun_id\fR and
27527aa0
BP
2398registers. Open vSwitch 1.1 and later supports this flow format.
2399.
2400.IP "\fBNXM+table_id\fR (Nicira Extended Match)"
2401This combines Nicira Extended match with the ability to place a flow
2402in a specific table. Open vSwitch 1.2 and later supports this flow
2403format.
e71bff1b
BP
2404.
2405.IP "\fBOXM-OpenFlow12\fR"
2406.IQ "\fBOXM-OpenFlow13\fR"
aa233d57 2407.IQ "\fBOXM-OpenFlow14\fR"
8d348579
BP
2408.IQ "\fBOXM-OpenFlow15\fR"
2409.IQ "\fBOXM-OpenFlow16\fR"
e71bff1b 2410These are the standard OXM (OpenFlow Extensible Match) flow format in
8d348579 2411OpenFlow 1.2 and later.
88ca35ee 2412.RE
27527aa0 2413.
88ca35ee 2414.IP
27527aa0
BP
2415\fBovs\-ofctl\fR also supports the following abbreviations for
2416collections of flow formats:
2417.RS
2418.IP "\fBany\fR"
aa233d57 2419Any supported flow format.
27527aa0
BP
2420.IP "\fBOpenFlow10\fR"
2421\fBOpenFlow10\-table_id\fR or \fBOpenFlow10+table_id\fR.
2422.IP "\fBNXM\fR"
2423\fBNXM\-table_id\fR or \fBNXM+table_id\fR.
e71bff1b 2424.IP "\fBOXM\fR"
aa233d57 2425\fBOXM-OpenFlow12\fR, \fBOXM-OpenFlow13\fR, or \fBOXM-OpenFlow14\fR.
27527aa0 2426.RE
4f564f8d 2427.
27527aa0
BP
2428.IP
2429For commands that modify the flow table, \fBovs\-ofctl\fR by default
2430negotiates the most widely supported flow format that supports the
2431flows being added. For commands that query the flow table,
2432\fBovs\-ofctl\fR by default uses the most advanced format supported by
2433the switch.
2434.IP
2435This option, where \fIformat\fR is a comma-separated list of one or
2436more of the formats listed above, limits \fBovs\-ofctl\fR's choice of
2437flow format. If a command cannot work as requested using one of the
2438specified flow formats, \fBovs\-ofctl\fR will report a fatal error.
54834960
EJ
2439.
2440.IP "\fB\-P \fIformat\fR"
2441.IQ "\fB\-\-packet\-in\-format=\fIformat\fR"
6409e008 2442\fBovs\-ofctl\fR supports the following ``packet-in'' formats, in order of
54834960
EJ
2443increasing capability:
2444.RS
6409e008
BP
2445.IP "\fBstandard\fR"
2446This uses the \fBOFPT_PACKET_IN\fR message, the standard ``packet-in''
2447message for any given OpenFlow version. Every OpenFlow switch that
2448supports a given OpenFlow version supports this format.
2449.
2450.IP "\fBnxt_packet_in\fR"
2451This uses the \fBNXT_PACKET_IN\fR message, which adds many of the
2452capabilities of the OpenFlow 1.1 and later ``packet-in'' messages
2453before those OpenFlow versions were available in Open vSwitch. Open
2454vSwitch 1.1 and later support this format. Only Open vSwitch 2.6 and
2455later, however, support it for OpenFlow 1.1 and later (but there is
2456little reason to use it with those versions of OpenFlow).
2457.
2458.IP "\fBnxt_packet_in2\fR"
2459This uses the \fBNXT_PACKET_IN2\fR message, which is extensible and
bdcad671
BP
2460should avoid the need to define new formats later. In particular,
2461this format supports passing arbitrary user-provided data to a
2462controller using the \fBuserdata\fB option on the \fBcontroller\fR
2463action. Open vSwitch 2.6 and later support this format.
54834960
EJ
2464.
2465.RE
2466.IP
6409e008
BP
2467Without this option, \fBovs\-ofctl\fR prefers \fBnxt_packet_in2\fR if
2468the switch supports it. Otherwise, if OpenFlow 1.0 is in use,
2469\fBovs\-ofctl\fR prefers \fBnxt_packet_in\fR if the switch supports
2470it. Otherwise, \fBovs\-ofctl\fR falls back to the \fBstandard\fR
2471packet-in format. When this option is specified, \fBovs\-ofctl\fR
2472insists on the selected format. If the switch does not support the
2473requested format, \fBovs\-ofctl\fR will report a fatal error.
2474.IP
2475Before version 2.6, Open vSwitch called \fBstandard\fR format
2476\fBopenflow10\fR and \fBnxt_packet_in\fR format \fBnxm\fR, and
2477\fBovs\-ofctl\fR still accepts these names as synonyms. (The name
2478\fBopenflow10\fR was a misnomer because this format actually varies
2479from one OpenFlow version to another; it is not consistently OpenFlow
24801.0 format. Similarly, when \fBnxt_packet_in2\fR was introduced, the
2481name \fBnxm\fR became confusing because it also uses OXM/NXM.)
2482.
2483.IP
2484This option affects only the \fBmonitor\fR command.
54834960 2485.
0c9560b7
BP
2486.IP "\fB\-\-timestamp\fR"
2487Print a timestamp before each received packet. This option only
f3dd1419
BP
2488affects the \fBmonitor\fR, \fBsnoop\fR, and \fBofp\-parse\-pcap\fR
2489commands.
0c9560b7 2490.
4f564f8d
BP
2491.IP "\fB\-m\fR"
2492.IQ "\fB\-\-more\fR"
2493Increases the verbosity of OpenFlow messages printed and logged by
2494\fBovs\-ofctl\fR commands. Specify this option more than once to
2495increase verbosity further.
1eb85ef5 2496.
bdcc5925
BP
2497.IP \fB\-\-sort\fR[\fB=\fIfield\fR]
2498.IQ \fB\-\-rsort\fR[\fB=\fIfield\fR]
2499Display output sorted by flow \fIfield\fR in ascending
2500(\fB\-\-sort\fR) or descending (\fB\-\-rsort\fR) order, where
2501\fIfield\fR is any of the fields that are allowed for matching or
2502\fBpriority\fR to sort by priority. When \fIfield\fR is omitted, the
2503output is sorted by priority. Specify these options multiple times to
2504sort by multiple fields.
2505.IP
2506Any given flow will not necessarily specify a value for a given
2507field. This requires special treatement:
2508.RS
2509.IP \(bu
2510A flow that does not specify any part of a field that is used for sorting is
2511sorted after all the flows that do specify the field. For example,
2512\fB\-\-sort=tcp_src\fR will sort all the flows that specify a TCP
2513source port in ascending order, followed by the flows that do not
0d56eaf2 2514specify a TCP source port at all.
bdcc5925
BP
2515.IP \(bu
2516A flow that only specifies some bits in a field is sorted as if the
2517wildcarded bits were zero. For example, \fB\-\-sort=nw_src\fR would
2518sort a flow that specifies \fBnw_src=192.168.0.0/24\fR the same as
2519\fBnw_src=192.168.0.0\fR.
2520.RE
2521.IP
2522These options currently affect only \fBdump\-flows\fR output.
2523.
679d3475 2524.SS "Daemon Options"
1eb85ef5
EJ
2525.ds DD \
2526\fBovs\-ofctl\fR detaches only when executing the \fBmonitor\fR or \
2527\fBsnoop\fR commands.
2528.so lib/daemon.man
19945013 2529.so lib/unixctl.man
ac300505 2530.SS "Public Key Infrastructure Options"
84ee7bcf 2531.so lib/ssl.man
064af421 2532.so lib/vlog.man
e7019d99 2533.so lib/colors.man
064af421 2534.so lib/common.man
a9b4a41a 2535.
1eb85ef5 2536.SH "RUNTIME MANAGEMENT COMMANDS"
96761f58
BP
2537\fBovs\-appctl\fR(8) can send commands to a running \fBovs\-ofctl\fR
2538process. The supported commands are listed below.
2539.
1eb85ef5 2540.IP "\fBexit\fR"
96761f58
BP
2541Causes \fBovs\-ofctl\fR to gracefully terminate. This command applies
2542only when executing the \fBmonitor\fR or \fBsnoop\fR commands.
2543.
1e1d00a5
BP
2544.IP "\fBofctl/set\-output\-file \fIfile\fR"
2545Causes all subsequent output to go to \fIfile\fR instead of stderr.
2546This command applies only when executing the \fBmonitor\fR or
2547\fBsnoop\fR commands.
2548.
96761f58
BP
2549.IP "\fBofctl/send \fIofmsg\fR..."
2550Sends each \fIofmsg\fR, specified as a sequence of hex digits that
2551express an OpenFlow message, on the OpenFlow connection. This command
2552is useful only when executing the \fBmonitor\fR command.
2553.
6dd3c787
JR
2554.IP "\fBofctl/packet\-out \fIpacket-out\fR"
2555Sends an OpenFlow PACKET_OUT message specified in \fBPacket\-Out
2556Syntax\fR, on the OpenFlow connection. See \fBPacket\-Out Syntax\fR
2557section for more information. This command is useful only when
2558executing the \fBmonitor\fR command.
2559.
bb638b9a
BP
2560.IP "\fBofctl/barrier\fR"
2561Sends an OpenFlow barrier request on the OpenFlow connection and waits
2562for a reply. This command is useful only for the \fBmonitor\fR
2563command.
2564.
064af421 2565.SH EXAMPLES
a9b4a41a 2566.
045b2e5c
BP
2567The following examples assume that \fBovs\-vswitchd\fR has a bridge
2568named \fBbr0\fR configured.
a9b4a41a 2569.
064af421 2570.TP
045b2e5c 2571\fBovs\-ofctl dump\-tables br0\fR
064af421
BP
2572Prints out the switch's table stats. (This is more interesting after
2573some traffic has passed through.)
a9b4a41a 2574.
064af421 2575.TP
045b2e5c 2576\fBovs\-ofctl dump\-flows br0\fR
064af421 2577Prints the flow entries in the switch.
a9b4a41a 2578.
5b10f305
OS
2579.TP
2580\fBovs\-ofctl add\-flow table=0 actions=learn(table=1,hard_timeout=10, NXM_OF_VLAN_TCI[0..11],output:NXM_OF_IN_PORT[]), resubmit(,1)\fR
2581\fBovs\-ofctl add\-flow table=1 priority=0 actions=flood\fR
2582Implements a level 2 MAC learning switch using the learn.
2583.
2584.TP
2585\fBovs\-ofctl add\-flow br0 'table=0,priority=0 actions=load:3->NXM_NX_REG0[0..15],learn(table=0,priority=1,idle_timeout=10,NXM_OF_ETH_SRC[],NXM_OF_VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2\fR
2586In this use of a learn action, the first packet from each source MAC
2587will be sent to port 2. Subsequent packets will be output to port 3,
21b2fa61
JR
2588with an idle timeout of 10 seconds. NXM field names and match field
2589names are both accepted, e.g. \fBNXM_NX_REG0\fR or \fBreg0\fR for the
2590first register, and empty brackets may be omitted.
2591.IP
5b10f305
OS
2592Additional examples may be found documented as part of related sections.
2593.
064af421 2594.SH "SEE ALSO"
a9b4a41a 2595.
96fee5e0 2596.BR ovs\-fields (7),
064af421 2597.BR ovs\-appctl (8),
96fee5e0 2598.BR ovs\-vswitchd (8),
29089a54 2599.BR ovs\-vswitchd.conf.db (8)