]> git.proxmox.com Git - mirror_ovs.git/blame - utilities/ovs-ofctl.8.in
Vagrantfile: Update to Fedora 22 base box
[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+.
82c22d34
BP
69.IP "\fBmod\-table \fIswitch\fR \fItable_id\fR \fIsetting\fR"
70This command configures flow table settings for OpenFlow table
71\fItable_id\fR within \fIswitch\fR. The available settings depend on
72the OpenFlow version in use. In OpenFlow 1.1 and 1.2 (which must be
73enabled with the \fB\-O\fR option) only, \fBmod\-table\fR configures
74behavior when no flow is found when a packet is looked up in a flow
75table. The following \fIsetting\fR values are available:
c354fcc5
TG
76.RS
77.IP \fBdrop\fR
78Drop the packet.
79.IP \fBcontinue\fR
80Continue to the next table in the pipeline. (This is how an OpenFlow
811.0 switch always handles packets that do not match any flow, in
82tables other than the last one.)
83.IP \fBcontroller\fR
84Send to controller. (This is how an OpenFlow 1.0 switch always
85handles packets that do not match any flow in the last table.)
86.RE
82c22d34
BP
87.IP
88In OpenFlow 1.4 and later (which must be enabled with the \fB\-O\fR
89option) only, \fBmod\-table\fR configures the behavior when a
90controller attempts to add a flow to a flow table that is full. The
91following \fIsetting\fR values are available:
92.RS
93.IP \fBevict\fR
94Delete some existing flow from the flow table, according to the
95algorithm described for the \fBFlow_Table\fR table in
96\fBovs-vswitchd.conf.db\fR(5).
97.IP \fBnoevict\fR
98Refuse to add the new flow. (Eviction might still be enabled through
de7d3c07 99the \fBoverflow_policy\fR column in the \fBFlow_Table\fR table
82c22d34 100documented in \fBovs-vswitchd.conf.db\fR(5).)
de7d3c07
SJ
101.IP \fBvacancy:\fIlow\fB,\fIhigh\fR
102Enables sending vacancy events to controllers using \fBTABLE_STATUS\fR
103messages, based on percentage thresholds \fIlow\fR and \fIhigh\fR.
104.IP \fBnovacancy\fR
105Disables vacancy events.
82c22d34 106.RE
c354fcc5 107.
064af421 108.TP
4e312e69 109\fBdump\-ports \fIswitch\fR [\fInetdev\fR]
abaad8cf
JP
110Prints to the console statistics for network devices associated with
111\fIswitch\fR. If \fInetdev\fR is specified, only the statistics
112associated with that device will be printed. \fInetdev\fR can be an
113OpenFlow assigned port number or device name, e.g. \fBeth0\fR.
a9b4a41a 114.
70ae4f93 115.IP "\fBdump\-ports\-desc \fIswitch\fR [\fIport\fR]"
2be393ed 116Prints to the console detailed information about network devices
70ae4f93
BP
117associated with \fIswitch\fR. To dump only a specific port, specify
118its number as \fIport\fR. Otherwise, if \fIport\fR is omitted, or if
119it is specified as \fBANY\fR, then all ports are printed. This is a
120subset of the information provided by the \fBshow\fR command.
121.IP
122If the connection to \fIswitch\fR negotiates OpenFlow 1.0, 1.2, or
1231.2, this command uses an OpenFlow extension only implemented in Open
124vSwitch (version 1.7 and later).
125.IP
126Only OpenFlow 1.5 and later support dumping a specific port. Earlier
127versions of OpenFlow always dump all ports.
2be393ed 128.
c6100d92
BP
129.IP "\fBmod\-port \fIswitch\fR \fIport\fR \fIaction\fR"
130Modify characteristics of port \fBport\fR in \fIswitch\fR. \fIport\fR
131may be an OpenFlow port number or name or the keyword \fBLOCAL\fR (the
132preferred way to refer to the OpenFlow local port). The \fIaction\fR
133may be any one of the following:
a9b4a41a 134.
064af421 135.RS
28124950
BP
136.IQ \fBup\fR
137.IQ \fBdown\fR
138Enable or disable the interface. This is equivalent to \fBifconfig
139up\fR or \fBifconfig down\fR on a Unix system.
140.
141.IP \fBstp\fR
142.IQ \fBno\-stp\fR
143Enable or disable 802.1D spanning tree protocol (STP) on the
144interface. OpenFlow implementations that don't support STP will
145refuse to enable it.
146.
147.IP \fBreceive\fR
148.IQ \fBno\-receive\fR
149.IQ \fBreceive\-stp\fR
150.IQ \fBno\-receive\-stp\fR
151Enable or disable OpenFlow processing of packets received on this
152interface. When packet processing is disabled, packets will be
153dropped instead of being processed through the OpenFlow table. The
154\fBreceive\fR or \fBno\-receive\fR setting applies to all packets
155except 802.1D spanning tree packets, which are separately controlled
156by \fBreceive\-stp\fR or \fBno\-receive\-stp\fR.
a9b4a41a 157.
451256f6 158.IP \fBforward\fR
28124950
BP
159.IQ \fBno\-forward\fR
160Allow or disallow forwarding of traffic to this interface. By
161default, forwarding is enabled.
451256f6 162.
064af421 163.IP \fBflood\fR
28124950
BP
164.IQ \fBno\-flood\fR
165Controls whether an OpenFlow \fBflood\fR action will send traffic out
166this interface. By default, flooding is enabled. Disabling flooding
167is primarily useful to prevent loops when a spanning tree protocol is
168not in use.
169.
170.IP \fBpacket\-in\fR
171.IQ \fBno\-packet\-in\fR
172Controls whether packets received on this interface that do not match
173a flow table entry generate a ``packet in'' message to the OpenFlow
174controller. By default, ``packet in'' messages are enabled.
064af421 175.RE
28124950
BP
176.IP
177The \fBshow\fR command displays (among other information) the
178configuration that \fBmod\-port\fR changes.
a9b4a41a 179.
7257b535
BP
180.IP "\fBget\-frags \fIswitch\fR"
181Prints \fIswitch\fR's fragment handling mode. See \fBset\-frags\fR,
182below, for a description of each fragment handling mode.
183.IP
184The \fBshow\fR command also prints the fragment handling mode among
185its other output.
186.
187.IP "\fBset\-frags \fIswitch frag_mode\fR"
188Configures \fIswitch\fR's treatment of IPv4 and IPv6 fragments. The
189choices for \fIfrag_mode\fR are:
190.RS
191.IP "\fBnormal\fR"
192Fragments pass through the flow table like non-fragmented packets.
193The TCP ports, UDP ports, and ICMP type and code fields are always set
194to 0, even for fragments where that information would otherwise be
195available (fragments with offset 0). This is the default fragment
196handling mode for an OpenFlow switch.
197.IP "\fBdrop\fR"
198Fragments are dropped without passing through the flow table.
199.IP "\fBreassemble\fR"
200The switch reassembles fragments into full IP packets before passing
201them through the flow table. Open vSwitch does not implement this
202fragment handling mode.
203.IP "\fBnx\-match\fR"
204Fragments pass through the flow table like non-fragmented packets.
205The TCP ports, UDP ports, and ICMP type and code fields are available
206for matching for fragments with offset 0, and set to 0 in fragments
207with nonzero offset. This mode is a Nicira extension.
208.RE
209.IP
210See the description of \fBip_frag\fR, below, for a way to match on
211whether a packet is a fragment and on its fragment offset.
212.
064af421 213.TP
4e312e69 214\fBdump\-flows \fIswitch \fR[\fIflows\fR]
064af421
BP
215Prints to the console all flow entries in \fIswitch\fR's
216tables that match \fIflows\fR. If \fIflows\fR is omitted, all flows
217in the switch are retrieved. See \fBFlow Syntax\fR, below, for the
bdcc5925 218syntax of \fIflows\fR. The output format is described in
064af421 219\fBTable Entry Output\fR.
a9b4a41a 220.
bdcc5925
BP
221.IP
222By default, \fBovs\-ofctl\fR prints flow entries in the same order
223that the switch sends them, which is unlikely to be intuitive or
224consistent. See the description of \fB\-\-sort\fR and \fB\-\-rsort\fR,
225under \fBOPTIONS\fR below, to influence the display order.
226.
064af421 227.TP
4e312e69 228\fBdump\-aggregate \fIswitch \fR[\fIflows\fR]
bdcc5925 229Prints to the console aggregate statistics for flows in
064af421
BP
230\fIswitch\fR's tables that match \fIflows\fR. If \fIflows\fR is omitted,
231the statistics are aggregated across all flows in the switch's flow
232tables. See \fBFlow Syntax\fR, below, for the syntax of \fIflows\fR.
3845a3fd 233The output format is described in \fBTable Entry Output\fR.
a9b4a41a 234.
d2805da2
BP
235.IP "\fBqueue\-stats \fIswitch \fR[\fIport \fR[\fIqueue\fR]]"
236Prints to the console statistics for the specified \fIqueue\fR on
c6100d92
BP
237\fIport\fR within \fIswitch\fR. \fIport\fR can be an OpenFlow port
238number or name, the keyword \fBLOCAL\fR (the preferred way to refer to
239the OpenFlow local port), or the keyword \fBALL\fR. Either of
240\fIport\fR or \fIqueue\fR or both may be omitted (or equivalently the
241keyword \fBALL\fR). If both are omitted, statistics are printed for
242all queues on all ports. If only \fIqueue\fR is omitted, then
243statistics are printed for all queues on \fIport\fR; if only
244\fIport\fR is omitted, then statistics are printed for \fIqueue\fR on
245every port where it exists.
d2805da2 246.
3200ed58 247.SS "OpenFlow 1.1+ Group Table Commands"
7395c052
NZ
248.
249The following commands work only with switches that support OpenFlow
2501.1 or later. Because support for OpenFlow 1.1 and later is still
251experimental in Open vSwitch, it is necessary to explicitly enable
252these protocol versions in \fBovs\-ofctl\fR (using \fB\-O\fR) and in
253the switch itself (with the \fBprotocols\fR column in the \fBBridge\fR
254table). For more information, see ``Q: What versions of OpenFlow does
255Open vSwitch support?'' in the Open vSwitch FAQ.
256.
19187a71
BP
257.IP "\fBdump\-groups \fIswitch\fR [\fIgroup\fR]"
258Prints group entries in \fIswitch\fR's tables to console. To dump
259only a specific group, specify its number as \fIgroup\fR. Otherwise,
260if \fIgroup\fR is omitted, or if it is specified as \fBALL\fR, then
261all groups are printed. Each line of output is a group entry as
262described in \fBGroup Syntax\fR below.
263.IP
264Only OpenFlow 1.5 and later support dumping a specific group. Earlier
265versions of OpenFlow always dump all groups.
7395c052
NZ
266.
267.IP "\fBdump\-group\-features \fIswitch"
268Prints to the console the group features of the \fIswitch\fR.
269.
270.IP "\fBdump\-group-stats \fIswitch \fR[\fIgroups\fR]"
271Prints to the console statistics for the specified \fIgroups in the
272\fIswitch\fR's tables. If \fIgroups\fR is omitted then statistics for all
273groups are printed. See \fBGroup Syntax\fR, below, for the syntax of
274\fIgroups\fR.
275.
3200ed58
JR
276.SS "OpenFlow 1.3+ Switch Meter Table Commands"
277.
278These commands manage the meter table in an OpenFlow switch. In each
279case, \fImeter\fR specifies a meter entry in the format described in
280\fBMeter Syntax\fR, below.
281.
282.PP
283OpenFlow 1.3 introduced support for meters, so these commands only
284work with switches that support OpenFlow 1.3 or later. The caveats
285described for groups in the previous section also apply to meters.
286.
287.IP "\fBadd\-meter \fIswitch meter\fR"
288Add a meter entry to \fIswitch\fR's tables. The \fImeter\fR syntax is
289described in section \fBMeter Syntax\fR, below.
290.
291.IP "\fBmod\-meter \fIswitch meter\fR"
292Modify an existing meter.
293.
294.IP "\fBdel\-meters \fIswitch\fR"
295.IQ "\fBdel\-meter \fIswitch\fR [\fImeter\fR]"
296Delete entries from \fIswitch\fR's meter table. \fImeter\fR can specify
297a single meter with syntax \fBmeter=\fIid\fR, or all meters with syntax
298\fBmeter=all\fR.
299.
300.IP "\fBdump\-meters \fIswitch\fR"
301.IQ "\fBdump\-meter \fIswitch\fR [\fImeter\fR]"
302Print meter configuration. \fImeter\fR can specify a single meter with
303syntax \fBmeter=\fIid\fR, or all meters with syntax \fBmeter=all\fR.
304.
305.IP "\fBmeter\-stats \fIswitch\fR [\fImeter\fR]"
306Print meter statistics. \fImeter\fR can specify a single meter with
307syntax \fBmeter=\fIid\fR, or all meters with syntax \fBmeter=all\fR.
308.
309.IP "\fBmeter\-features \fIswitch\fR"
310Print meter features.
311.
4989c59f
BP
312.SS "OpenFlow Switch Flow Table Commands"
313.
314These commands manage the flow table in an OpenFlow switch. In each
315case, \fIflow\fR specifies a flow entry in the format described in
db5076ee
JR
316\fBFlow Syntax\fR, below, \fIfile\fR is a text file that contains zero
317or more flows in the same syntax, one per line, and the optional
39c94593
JR
318\fB\-\-bundle\fR option operates the command as a single atomic
319transation, see option \fB\-\-bundle\fR, below.
db5076ee
JR
320.
321.IP "[\fB\-\-bundle\fR] \fBadd\-flow \fIswitch flow\fR"
322.IQ "[\fB\-\-bundle\fR] \fBadd\-flow \fIswitch \fB\- < \fIfile\fR"
323.IQ "[\fB\-\-bundle\fR] \fBadd\-flows \fIswitch file\fR"
4989c59f
BP
324Add each flow entry to \fIswitch\fR's tables.
325.
db5076ee
JR
326Each flow specification (e.g., each line in \fIfile\fR) may start with
327\fBadd\fR, \fBmodify\fR, \fBdelete\fR, \fBmodify_strict\fR, or
328\fBdelete_strict\fR keyword to specify whether a flow is to be added,
329modified, or deleted, and whether the modify or delete is strict or
330not. For backwards compatibility a flow specification without one of
331these keywords is treated as a flow add. All flow mods are executed
332in the order specified.
333.
334.IP "[\fB\-\-bundle\fR] [\fB\-\-strict\fR] \fBmod\-flows \fIswitch flow\fR"
335.IQ "[\fB\-\-bundle\fR] [\fB\-\-strict\fR] \fBmod\-flows \fIswitch \fB\- < \fIfile\fR"
4989c59f
BP
336Modify the actions in entries from \fIswitch\fR's tables that match
337the specified flows. With \fB\-\-strict\fR, wildcards are not treated
338as active for matching purposes.
339.
db5076ee
JR
340.IP "[\fB\-\-bundle\fR] \fBdel\-flows \fIswitch\fR"
341.IQ "[\fB\-\-bundle\fR] [\fB\-\-strict\fR] \fBdel\-flows \fIswitch \fR[\fIflow\fR]"
342.IQ "[\fB\-\-bundle\fR] [\fB\-\-strict\fR] \fBdel\-flows \fIswitch \fB\- < \fIfile\fR"
4989c59f
BP
343Deletes entries from \fIswitch\fR's flow table. With only a
344\fIswitch\fR argument, deletes all flows. Otherwise, deletes flow
345entries that match the specified flows. With \fB\-\-strict\fR,
346wildcards are not treated as active for matching purposes.
a9b4a41a 347.
db5076ee 348.IP "[\fB\-\-bundle\fR] [\fB\-\-readd\fR] \fBreplace\-flows \fIswitch file\fR"
0199c526
BP
349Reads flow entries from \fIfile\fR (or \fBstdin\fR if \fIfile\fR is
350\fB\-\fR) and queries the flow table from \fIswitch\fR. Then it fixes
351up any differences, adding flows from \fIflow\fR that are missing on
352\fIswitch\fR, deleting flows from \fIswitch\fR that are not in
353\fIfile\fR, and updating flows in \fIswitch\fR whose actions, cookie,
354or timeouts differ in \fIfile\fR.
355.
c4ea79bf
BP
356.IP
357With \fB\-\-readd\fR, \fBovs\-ofctl\fR adds all the flows from
358\fIfile\fR, even those that exist with the same actions, cookie, and
359timeout in \fIswitch\fR. This resets all the flow packet and byte
360counters to 0, which can be useful for debugging.
361.
0199c526
BP
362.IP "\fBdiff\-flows \fIsource1 source2\fR"
363Reads flow entries from \fIsource1\fR and \fIsource2\fR and prints the
364differences. A flow that is in \fIsource1\fR but not in \fIsource2\fR
365is printed preceded by a \fB\-\fR, and a flow that is in \fIsource2\fR
366but not in \fIsource1\fR is printed preceded by a \fB+\fR. If a flow
367exists in both \fIsource1\fR and \fIsource2\fR with different actions,
368cookie, or timeouts, then both versions are printed preceded by
369\fB\-\fR and \fB+\fR, respectively.
370.IP
371\fIsource1\fR and \fIsource2\fR may each name a file or a switch. If
372a name begins with \fB/\fR or \fB.\fR, then it is considered to be a
373file name. A name that contains \fB:\fR is considered to be a switch.
374Otherwise, it is a file if a file by that name exists, a switch if
375not.
376.IP
377For this command, an exit status of 0 means that no differences were
378found, 1 means that an error occurred, and 2 means that some
379differences were found.
380.
0c3d5fc8
BP
381.IP "\fBpacket\-out \fIswitch in_port actions packet\fR..."
382Connects to \fIswitch\fR and instructs it to execute the OpenFlow
4eb58d34
BP
383\fIactions\fR on each \fIpacket\fR. Each \fBpacket\fR is specified as a
384series of hex digits. For the purpose of executing the
0c3d5fc8 385actions, the packets are considered to have arrived on \fIin_port\fR,
c6100d92
BP
386which may be an OpenFlow port number or name (e.g. \fBeth0\fR), the
387keyword \fBLOCAL\fR (the preferred way to refer to the OpenFlow
388``local'' port), or the keyword \fBNONE\fR to indicate that the packet
389was generated by the switch itself.
0c3d5fc8 390.
7395c052
NZ
391.SS "OpenFlow Switch Group Table Commands"
392.
393These commands manage the group table in an OpenFlow switch. In each
394case, \fIgroup\fR specifies a group entry in the format described in
395\fBGroup Syntax\fR, below, and \fIfile\fR is a text file that contains
396zero or more groups in the same syntax, one per line.
397
398.IP "\fBadd\-group \fIswitch group\fR"
399.IQ "\fBadd\-group \fIswitch \fB\- < \fIfile\fR"
400.IQ "\fBadd\-groups \fIswitch file\fR"
401Add each group entry to \fIswitch\fR's tables.
402.
403.IP "\fBmod\-group \fIswitch group\fR"
404.IQ "\fBmod\-group \fIswitch \fB\- < \fIfile\fR"
405Modify the action buckets in entries from \fIswitch\fR's tables for
406each group entry.
407.
408.IP "\fBdel\-groups \fIswitch\fR"
409.IQ "\fBdel\-groups \fIswitch \fR[\fIgroup\fR]"
410.IQ "\fBdel\-groups \fIswitch \fB\- < \fIfile\fR"
411Deletes entries from \fIswitch\fR's group table. With only a
412\fIswitch\fR argument, deletes all groups. Otherwise, deletes the group
413for each group entry.
414.
bdbb8426
SH
415.IP "\fBinsert\-buckets \fIswitch group\fR"
416.IQ "\fBinsert\-buckets \fIswitch \fB\- < \fIfile\fR"
417Add buckets to an existing group present in the \fIswitch\fR's group table.
418If no \fIcommand_bucket_id\fR is present in the group specification then all
419buckets of the group are removed.
420.
421.IP "\fBremove\-buckets \fIswitch group\fR"
422.IQ "\fBremove\-buckets \fIswitch \fB\- < \fIfile\fR"
423Remove buckets to an existing group present in the \fIswitch\fR's group table.
424If no \fIcommand_bucket_id\fR is present in the group specification then all
425buckets of the group are removed.
426.
6159c531
JG
427.SS "OpenFlow Switch Geneve Option Table Commands"
428.
1e71b944
BP
429Open vSwitch maintains a mapping table between Geneve options (defined
430by <class, type, length>) and an NXM field \fBtun_metadata\fIn\fR,
431where \fIn\fR ranges from 0 to 63, that can be operated on for the
432purposes of matches, actions, etc. This mapping must be explicitly
433specified by the user through the following commands.
6159c531 434
1e71b944
BP
435A Geneve option mapping is specified with the syntax
436\fB{class=\fIclass\fB,type=\fItype\fB,len=\fIlength\fB}->tun_metadata\fIn\fR.
437When an option mapping exists for a given \fBtun_metadata\fIn\fR,
438matching on the defined field becomes possible, e.g.:
439
440.RS
441ovs-ofctl add-geneve-map br0 "{class=0xffff,type=0,len=4}->tun_metadata0"
442.PP
443ovs-ofctl add-flow br0 tun_metadata0=1234,actions=controller
444.RE
445
446A mapping should not be changed while it is in active
447use by a flow. The result of doing so is undefined.
6159c531 448
9558d2a5
JG
449Currently, the Geneve mapping table is shared between all OpenFlow
450switches in a given instance of Open vSwitch. This restriction will
451be lifted in the future to allow for easier management.
452
6159c531
JG
453These commands are Nicira extensions to OpenFlow and require Open vSwitch
4542.5 or later.
455
1e71b944
BP
456.IP "\fBadd\-geneve\-map \fIswitch option\fR[\fB,\fIoption\fR]..."
457Add each \fIoption\fR to \fIswitch\fR's tables. Duplicate fields are
6159c531
JG
458rejected.
459.
1e71b944
BP
460.IP "\fBdel\-geneve\-map \fIswitch \fR[\fIoption\fR[\fB,\fIoption\fR]]..."
461Delete each \fIoption\fR from \fIswitch\fR's table, or all Geneve option
462mapping if no \fIoption\fR is specified.
463Fields that aren't mapped are ignored.
6159c531
JG
464.
465.IP "\fBdump\-geneve\-map \fIswitch\fR"
466Show the currently mapped fields in the switch's option table as well
467as switch capabilities.
468.
4989c59f
BP
469.SS "OpenFlow Switch Monitoring Commands"
470.
0caf6bde
BP
471.IP "\fBsnoop \fIswitch\fR"
472Connects to \fIswitch\fR and prints to the console all OpenFlow
473messages received. Unlike other \fBovs\-ofctl\fR commands, if
474\fIswitch\fR is the name of a bridge, then the \fBsnoop\fR command
475connects to a Unix domain socket named
421e818c 476\fB@RUNDIR@/\fIswitch\fB.snoop\fR. \fBovs\-vswitchd\fR listens on
0caf6bde
BP
477such a socket for each bridge and sends to it all of the OpenFlow
478messages sent to or received from its configured OpenFlow controller.
479Thus, this command can be used to view OpenFlow protocol activity
480between a switch and its controller.
481.IP
482When a switch has more than one controller configured, only the
e2bfacb6
BP
483traffic to and from a single controller is output. If none of the
484controllers is configured as a master or a slave (using a Nicira
70d0aed3
BP
485extension to OpenFlow 1.0 or 1.1, or a standard request in OpenFlow
4861.2 or later), then a controller is chosen arbitrarily among
e2bfacb6
BP
487them. If there is a master controller, it is chosen; otherwise, if
488there are any controllers that are not masters or slaves, one is
489chosen arbitrarily; otherwise, a slave controller is chosen
490arbitrarily. This choice is made once at connection time and does not
491change as controllers reconfigure their roles.
492.IP
493If a switch has no controller configured, or if
0caf6bde
BP
494the configured controller is disconnected, no traffic is sent, so
495monitoring will not show any traffic.
496.
2b07c8b1 497.IP "\fBmonitor \fIswitch\fR [\fImiss-len\fR] [\fBinvalid_ttl\fR] [\fBwatch:\fR[\fIspec\fR...]]"
064af421 498Connects to \fIswitch\fR and prints to the console all OpenFlow
045b2e5c
BP
499messages received. Usually, \fIswitch\fR should specify the name of a
500bridge in the \fBovs\-vswitchd\fR database.
a9b4a41a 501.IP
064af421
BP
502If \fImiss-len\fR is provided, \fBovs\-ofctl\fR sends an OpenFlow ``set
503configuration'' message at connection setup time that requests
0caf6bde
BP
504\fImiss-len\fR bytes of each packet that misses the flow table. Open vSwitch
505does not send these and other asynchronous messages to an
064af421 506\fBovs\-ofctl monitor\fR client connection unless a nonzero value is
0caf6bde
BP
507specified on this argument. (Thus, if \fImiss\-len\fR is not
508specified, very little traffic will ordinarily be printed.)
a9b4a41a 509.IP
f0fd1a17
PS
510If \fBinvalid_ttl\fR is passed, \fBovs\-ofctl\fR sends an OpenFlow ``set
511configuration'' message at connection setup time that requests
5484c47a
BP
512\fBINVALID_TTL_TO_CONTROLLER\fR, so that \fBovs\-ofctl monitor\fR can
513receive ``packet-in'' messages when TTL reaches zero on \fBdec_ttl\fR action.
f0fd1a17 514.IP
2b07c8b1
BP
515\fBwatch:\fR[\fB\fIspec\fR...] causes \fBovs\-ofctl\fR to send a
516``monitor request'' Nicira extension message to the switch at
517connection setup time. This message causes the switch to send
518information about flow table changes as they occur. The following
519comma-separated \fIspec\fR syntax is available:
520.RS
521.IP "\fB!initial\fR"
522Do not report the switch's initial flow table contents.
523.IP "\fB!add\fR"
524Do not report newly added flows.
525.IP "\fB!delete\fR"
526Do not report deleted flows.
527.IP "\fB!modify\fR"
528Do not report modifications to existing flows.
529.IP "\fB!own\fR"
530Abbreviate changes made to the flow table by \fBovs\-ofctl\fR's own
531connection to the switch. (These could only occur using the
532\fBofctl/send\fR command described below under \fBRUNTIME MANAGEMENT
533COMMANDS\fR.)
534.IP "\fB!actions\fR"
535Do not report actions as part of flow updates.
536.IP "\fBtable=\fInumber\fR"
537Limits the monitoring to the table with the given \fInumber\fR between
5380 and 254. By default, all tables are monitored.
539.IP "\fBout_port=\fIport\fR"
c6100d92
BP
540If set, only flows that output to \fIport\fR are monitored. The
541\fIport\fR may be an OpenFlow port number or keyword
542(e.g. \fBLOCAL\fR).
2b07c8b1
BP
543.IP "\fIfield\fB=\fIvalue\fR"
544Monitors only flows that have \fIfield\fR specified as the given
545\fIvalue\fR. Any syntax valid for matching on \fBdump\-flows\fR may
546be used.
547.RE
548.IP
064af421 549This command may be useful for debugging switch or controller
2b07c8b1
BP
550implementations. With \fBwatch:\fR, it is particularly useful for
551observing how a controller updates flow tables.
a9b4a41a 552.
064af421 553.SS "OpenFlow Switch and Controller Commands"
a9b4a41a 554.
064af421
BP
555The following commands, like those in the previous section, may be
556applied to OpenFlow switches, using any of the connection methods
557described in that section. Unlike those commands, these may also be
558applied to OpenFlow controllers.
a9b4a41a 559.
064af421
BP
560.TP
561\fBprobe \fItarget\fR
562Sends a single OpenFlow echo-request message to \fItarget\fR and waits
4e312e69 563for the response. With the \fB\-t\fR or \fB\-\-timeout\fR option, this
064af421
BP
564command can test whether an OpenFlow switch or controller is up and
565running.
a9b4a41a 566.
064af421
BP
567.TP
568\fBping \fItarget \fR[\fIn\fR]
569Sends a series of 10 echo request packets to \fItarget\fR and times
570each reply. The echo request packets consist of an OpenFlow header
571plus \fIn\fR bytes (default: 64) of randomly generated payload. This
572measures the latency of individual requests.
a9b4a41a 573.
064af421
BP
574.TP
575\fBbenchmark \fItarget n count\fR
576Sends \fIcount\fR echo request packets that each consist of an
577OpenFlow header plus \fIn\fR bytes of payload and waits for each
578response. Reports the total time required. This is a measure of the
579maximum bandwidth to \fItarget\fR for round-trips of \fIn\fR-byte
580messages.
a9b4a41a 581.
1ac0e975
BP
582.SS "Other Commands"
583.
584.IP "\fBofp\-parse\fR \fIfile\fR"
585Reads \fIfile\fR (or \fBstdin\fR if \fIfile\fR is \fB\-\fR) as a
586series of OpenFlow messages in the binary format used on an OpenFlow
587connection, and prints them to the console. This can be useful for
588printing OpenFlow messages captured from a TCP stream.
589.
f3dd1419
BP
590.IP "\fBofp\-parse\-pcap\fR \fIfile\fR [\fIport\fR...]"
591Reads \fIfile\fR, which must be in the PCAP format used by network
592capture tools such as \fBtcpdump\fR or \fBwireshark\fR, extracts all
593the TCP streams for OpenFlow connections, and prints the OpenFlow
594messages in those connections in human-readable format on
595\fBstdout\fR.
596.IP
597OpenFlow connections are distinguished by TCP port number.
598Non-OpenFlow packets are ignored. By default, data on TCP ports 6633
599and 6653 are considered to be OpenFlow. Specify one or more
600\fIport\fR arguments to override the default.
601.IP
602This command cannot usefully print SSL encrypted traffic. It does not
603understand IPv6.
604.
064af421 605.SS "Flow Syntax"
a9b4a41a 606.PP
064af421
BP
607Some \fBovs\-ofctl\fR commands accept an argument that describes a flow or
608flows. Such flow descriptions comprise a series
609\fIfield\fB=\fIvalue\fR assignments, separated by commas or white
610space. (Embedding spaces into a flow description normally requires
611quoting to prevent the shell from breaking the description into
612multiple arguments.)
a9b4a41a 613.PP
0b3f2725
BP
614Flow descriptions should be in \fBnormal form\fR. This means that a
615flow may only specify a value for an L3 field if it also specifies a
616particular L2 protocol, and that a flow may only specify an L4 field
617if it also specifies particular L2 and L3 protocol types. For
618example, if the L2 protocol type \fBdl_type\fR is wildcarded, then L3
619fields \fBnw_src\fR, \fBnw_dst\fR, and \fBnw_proto\fR must also be
620wildcarded. Similarly, if \fBdl_type\fR or \fBnw_proto\fR (the L3
1c58a78b
BP
621protocol type) is wildcarded, so must be the L4 fields \fBtcp_dst\fR and
622\fBtcp_src\fR. \fBovs\-ofctl\fR will warn about
0b3f2725
BP
623flows not in normal form.
624.PP
064af421
BP
625The following field assignments describe how a flow matches a packet.
626If any of these assignments is omitted from the flow syntax, the field
627is treated as a wildcard; thus, if all of them are omitted, the
bedde04c
GS
628resulting flow matches all packets. The string \fB*\fR may be specified
629to explicitly mark any of these fields as a wildcard.
064af421 630(\fB*\fR should be quoted to protect it from shell expansion.)
a9b4a41a 631.
c6100d92
BP
632.IP \fBin_port=\fIport\fR
633Matches OpenFlow port \fIport\fR, which may be an OpenFlow port number
634or keyword (e.g. \fBLOCAL\fR).
635\fBovs\-ofctl show\fR.
03a8a29e
BP
636.IP
637(The \fBresubmit\fR action can search OpenFlow flow tables with
638arbitrary \fBin_port\fR values, so flows that match port numbers that
639do not exist from an OpenFlow perspective can still potentially be
640matched.)
a9b4a41a 641.
064af421 642.IP \fBdl_vlan=\fIvlan\fR
f30f26be
JP
643Matches IEEE 802.1q Virtual LAN tag \fIvlan\fR. Specify \fB0xffff\fR
644as \fIvlan\fR to match packets that are not tagged with a Virtual LAN;
064af421
BP
645otherwise, specify a number between 0 and 4095, inclusive, as the
64612-bit VLAN ID to match.
a9b4a41a 647.
959a2ecd
JP
648.IP \fBdl_vlan_pcp=\fIpriority\fR
649Matches IEEE 802.1q Priority Code Point (PCP) \fIpriority\fR, which is
650specified as a value between 0 and 7, inclusive. A higher value
651indicates a higher frame priority level.
a9b4a41a 652.
ed951f15
BP
653.IP \fBdl_src=\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fR
654.IQ \fBdl_dst=\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fR
655Matches an Ethernet source (or destination) address specified as 6
656pairs of hexadecimal digits delimited by colons
657(e.g. \fB00:0A:E4:25:6B:B0\fR).
658.
73c0ce34
JS
659.IP \fBdl_src=\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB/\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fR
660.IQ \fBdl_dst=\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB/\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fR
cb8ca532
BP
661Matches an Ethernet destination address specified as 6 pairs of
662hexadecimal digits delimited by colons (e.g. \fB00:0A:E4:25:6B:B0\fR),
73c0ce34
JS
663with a wildcard mask following the slash. Open vSwitch 1.8 and later
664support arbitrary masks for source and/or destination. Earlier
665versions only support masking the destination with the following masks:
cb8ca532
BP
666.RS
667.IP \fB01:00:00:00:00:00\fR
668Match only the multicast bit. Thus,
669\fBdl_dst=01:00:00:00:00:00/01:00:00:00:00:00\fR matches all multicast
670(including broadcast) Ethernet packets, and
671\fBdl_dst=00:00:00:00:00:00/01:00:00:00:00:00\fR matches all unicast
672Ethernet packets.
673.IP \fBfe:ff:ff:ff:ff:ff\fR
674Match all bits except the multicast bit. This is probably not useful.
675.IP \fBff:ff:ff:ff:ff:ff\fR
676Exact match (equivalent to omitting the mask).
677.IP \fB00:00:00:00:00:00\fR
678Wildcard all bits (equivalent to \fBdl_dst=*\fR.)
679.RE
680.
064af421
BP
681.IP \fBdl_type=\fIethertype\fR
682Matches Ethernet protocol type \fIethertype\fR, which is specified as an
683integer between 0 and 65535, inclusive, either in decimal or as a
684hexadecimal number prefixed by \fB0x\fR (e.g. \fB0x0806\fR to match ARP
685packets).
a9b4a41a 686.
064af421 687.IP \fBnw_src=\fIip\fR[\fB/\fInetmask\fR]
ed951f15
BP
688.IQ \fBnw_dst=\fIip\fR[\fB/\fInetmask\fR]
689When \fBdl_type\fR is 0x0800 (possibly via shorthand, e.g. \fBip\fR
690or \fBtcp\fR), matches IPv4 source (or destination) address \fIip\fR,
691which may be specified as an IP address or host name
692(e.g. \fB192.168.1.1\fR or \fBwww.example.com\fR). The optional
693\fInetmask\fR allows restricting a match to an IPv4 address prefix.
694The netmask may be specified as a dotted quad
695(e.g. \fB192.168.1.0/255.255.255.0\fR) or as a CIDR block
c08201d6
BP
696(e.g. \fB192.168.1.0/24\fR). Open vSwitch 1.8 and later support
697arbitrary dotted quad masks; earlier versions support only CIDR masks,
698that is, the dotted quads that are equivalent to some CIDR block.
ed951f15
BP
699.IP
700When \fBdl_type=0x0806\fR or \fBarp\fR is specified, matches the
701\fBar_spa\fR or \fBar_tpa\fR field, respectively, in ARP packets for
702IPv4 and Ethernet.
703.IP
8087f5ff
MM
704When \fBdl_type=0x8035\fR or \fBrarp\fR is specified, matches the
705\fBar_spa\fR or \fBar_tpa\fR field, respectively, in RARP packets for
706IPv4 and Ethernet.
707.IP
708When \fBdl_type\fR is wildcarded or set to a value other than 0x0800,
7090x0806, or 0x8035, the values of \fBnw_src\fR and \fBnw_dst\fR are ignored
0b3f2725 710(see \fBFlow Syntax\fR above).
a9b4a41a 711.
064af421 712.IP \fBnw_proto=\fIproto\fR
44a7e26d 713.IQ \fBip_proto=\fIproto\fR
ed951f15
BP
714When \fBip\fR or \fBdl_type=0x0800\fR is specified, matches IP
715protocol type \fIproto\fR, which is specified as a decimal number
d31f1109
JP
716between 0 and 255, inclusive (e.g. 1 to match ICMP packets or 6 to match
717TCP packets).
718.IP
719When \fBipv6\fR or \fBdl_type=0x86dd\fR is specified, matches IPv6
720header type \fIproto\fR, which is specified as a decimal number between
7210 and 255, inclusive (e.g. 58 to match ICMPv6 packets or 6 to match
722TCP). The header type is the terminal header as described in the
723\fBDESIGN\fR document.
ed951f15
BP
724.IP
725When \fBarp\fR or \fBdl_type=0x0806\fR is specified, matches the lower
7268 bits of the ARP opcode. ARP opcodes greater than 255 are treated as
7270.
728.IP
8087f5ff
MM
729When \fBrarp\fR or \fBdl_type=0x8035\fR is specified, matches the lower
7308 bits of the ARP opcode. ARP opcodes greater than 255 are treated as
7310.
732.IP
d31f1109 733When \fBdl_type\fR is wildcarded or set to a value other than 0x0800,
8087f5ff
MM
7340x0806, 0x8035 or 0x86dd, the value of \fBnw_proto\fR is ignored (see
735\fBFlow Syntax\fR above).
a9b4a41a 736.
834377ea 737.IP \fBnw_tos=\fItos\fR
d31f1109
JP
738Matches IP ToS/DSCP or IPv6 traffic class field \fItos\fR, which is
739specified as a decimal number between 0 and 255, inclusive. Note that
740the two lower reserved bits are ignored for matching purposes.
ed951f15 741.IP
5c0ceb0a
JP
742When \fBdl_type\fR is wildcarded or set to a value other than 0x0800 or
7430x86dd, the value of \fBnw_tos\fR is ignored (see \fBFlow Syntax\fR
744above).
a9b4a41a 745.
44a7e26d
JR
746.IP \fBip_dscp=\fIdscp\fR
747Matches IP ToS/DSCP or IPv6 traffic class field \fIdscp\fR, which is
748specified as a decimal number between 0 and 63, inclusive.
749.IP
750When \fBdl_type\fR is wildcarded or set to a value other than 0x0800 or
7510x86dd, the value of \fBip_dscp\fR is ignored (see \fBFlow Syntax\fR
752above).
753.
530180fd 754.IP \fBnw_ecn=\fIecn\fR
44a7e26d 755.IQ \fBip_ecn=\fIecn\fR
530180fd
JP
756Matches \fIecn\fR bits in IP ToS or IPv6 traffic class fields, which is
757specified as a decimal number between 0 and 3, inclusive.
758.IP
759When \fBdl_type\fR is wildcarded or set to a value other than 0x0800 or
7600x86dd, the value of \fBnw_ecn\fR is ignored (see \fBFlow Syntax\fR
761above).
762.
a61680c6
JP
763.IP \fBnw_ttl=\fIttl\fR
764Matches IP TTL or IPv6 hop limit value \fIttl\fR, which is
765specified as a decimal number between 0 and 255, inclusive.
766.IP
767When \fBdl_type\fR is wildcarded or set to a value other than 0x0800 or
7680x86dd, the value of \fBnw_ttl\fR is ignored (see \fBFlow Syntax\fR
769above).
770.IP
771.
1c58a78b
BP
772.IP \fBtcp_src=\fIport\fR
773.IQ \fBtcp_dst=\fIport\fR
774.IQ \fBudp_src=\fIport\fR
775.IQ \fBudp_dst=\fIport\fR
776.IQ \fBsctp_src=\fIport\fR
777.IQ \fBsctp_dst=\fIport\fR
778Matches a TCP, UDP, or SCTP source or destination port \fIport\fR,
779which is specified as a decimal number between 0 and 65535, inclusive.
780.IP
781When \fBdl_type\fR and \fBnw_proto\fR are wildcarded or set to values
782that do not indicate an appropriate protocol, the values of these
783settings are ignored (see \fBFlow Syntax\fR above).
784.
785.IP \fBtcp_src=\fIport\fB/\fImask\fR
786.IQ \fBtcp_dst=\fIport\fB/\fImask\fR
787.IQ \fBudp_src=\fIport\fB/\fImask\fR
788.IQ \fBudp_dst=\fIport\fB/\fImask\fR
789.IQ \fBsctp_src=\fIport\fB/\fImask\fR
790.IQ \fBsctp_dst=\fIport\fB/\fImask\fR
791Bitwise match on TCP (or UDP or SCTP) source or destination port.
792The \fIport\fR and \fImask\fR are 16-bit numbers
73f33563
BP
793written in decimal or in hexadecimal prefixed by \fB0x\fR. Each 1-bit
794in \fImask\fR requires that the corresponding bit in \fIport\fR must
795match. Each 0-bit in \fImask\fR causes the corresponding bit to be
796ignored.
797.IP
798Bitwise matches on transport ports are rarely useful in isolation, but
799a group of them can be used to reduce the number of flows required to
800match on a range of transport ports. For example, suppose that the
801goal is to match TCP source ports 1000 to 1999, inclusive. One way is
edcbeb4d 802to insert 1000 flows, each of which matches on a single source port.
73f33563
BP
803Another way is to look at the binary representations of 1000 and 1999,
804as follows:
805.br
806.B "01111101000"
807.br
808.B "11111001111"
809.br
810and then to transform those into a series of bitwise matches that
811accomplish the same results:
812.br
813.B "01111101xxx"
814.br
815.B "0111111xxxx"
816.br
817.B "10xxxxxxxxx"
818.br
819.B "110xxxxxxxx"
820.br
821.B "1110xxxxxxx"
822.br
823.B "11110xxxxxx"
824.br
825.B "1111100xxxx"
826.br
827which become the following when written in the syntax required by
828\fBovs\-ofctl\fR:
829.br
1c58a78b 830.B "tcp,tcp_src=0x03e8/0xfff8"
73f33563 831.br
1c58a78b 832.B "tcp,tcp_src=0x03f0/0xfff0"
73f33563 833.br
1c58a78b 834.B "tcp,tcp_src=0x0400/0xfe00"
73f33563 835.br
1c58a78b 836.B "tcp,tcp_src=0x0600/0xff00"
73f33563 837.br
1c58a78b 838.B "tcp,tcp_src=0x0700/0xff80"
73f33563 839.br
1c58a78b 840.B "tcp,tcp_src=0x0780/0xffc0"
73f33563 841.br
1c58a78b 842.B "tcp,tcp_src=0x07c0/0xfff0"
73f33563
BP
843.IP
844Only Open vSwitch 1.6 and later supports bitwise matching on transport
845ports.
846.IP
1c58a78b 847Like the exact-match forms described
edcbeb4d 848above, the bitwise match forms apply only when \fBdl_type\fR and
0d56eaf2 849\fBnw_proto\fR specify TCP or UDP or SCTP.
73f33563 850.
1c58a78b
BP
851.IP \fBtp_src=\fIport\fR
852.IQ \fBtp_dst=\fIport\fR
853These are deprecated generic forms of L4 port matches. In new code,
854please use the TCP-, UDP-, or SCTP-specific forms described above.
855.
dc235f7f 856.IP \fBtcp_flags=\fIflags\fB/\fImask\fR
61bf6666 857.IQ \fBtcp_flags=\fR[\fB+\fIflag\fR...][\fB-\fIflag\fR...]
dc235f7f
JR
858Bitwise match on TCP flags. The \fIflags\fR and \fImask\fR are 16-bit
859numbers written in decimal or in hexadecimal prefixed by \fB0x\fR.
860Each 1-bit in \fImask\fR requires that the corresponding bit in
861\fIflags\fR must match. Each 0-bit in \fImask\fR causes the corresponding
862bit to be ignored.
863.IP
61bf6666
JR
864Alternatively, the flags can be specified by their symbolic names
865(listed below), each preceded by either \fB+\fR for a flag that must
866be set, or \fB\-\fR for a flag that must be unset, without any other
867delimiters between the flags. Flags not mentioned are wildcarded.
868For example, \fBtcp,tcp_flags=+syn\-ack\fR matches TCP SYNs that are
869not ACKs.
870.IP
dc235f7f
JR
871TCP protocol currently defines 9 flag bits, and additional 3 bits are
872reserved (must be transmitted as zero), see RFCs 793, 3168, and 3540.
873The flag bits are, numbering from the least significant bit:
874.RS
61bf6666 875.IP "\fB0: fin\fR"
dc235f7f 876No more data from sender.
61bf6666 877.IP "\fB1: syn\fR"
dc235f7f 878Synchronize sequence numbers.
61bf6666 879.IP "\fB2: rst\fR"
dc235f7f 880Reset the connection.
61bf6666 881.IP "\fB3: psh\fR"
dc235f7f 882Push function.
61bf6666 883.IP "\fB4: ack\fR"
dc235f7f 884Acknowledgement field significant.
61bf6666 885.IP "\fB5: urg\fR"
dc235f7f 886Urgent pointer field significant.
61bf6666 887.IP "\fB6: ece\fR"
dc235f7f 888ECN Echo.
61bf6666 889.IP "\fB7: cwr\fR"
dc235f7f 890Congestion Windows Reduced.
61bf6666 891.IP "\fB8: ns\fR"
dc235f7f
JR
892Nonce Sum.
893.IP "\fB9-11:\fR"
894Reserved.
895.IP "\fB12-15:\fR"
896Not matchable, must be zero.
897.RE
064af421 898.IP \fBicmp_type=\fItype\fR
ed951f15 899.IQ \fBicmp_code=\fIcode\fR
d31f1109
JP
900When \fBdl_type\fR and \fBnw_proto\fR specify ICMP or ICMPv6, \fItype\fR
901matches the ICMP type and \fIcode\fR matches the ICMP code. Each is
902specified as a decimal number between 0 and 255, inclusive.
ed951f15
BP
903.IP
904When \fBdl_type\fR and \fBnw_proto\fR take other values, the values of
0b3f2725 905these settings are ignored (see \fBFlow Syntax\fR above).
71e17a7a 906.
6c1491fb 907.IP \fBtable=\fInumber\fR
0e197060
BP
908For flow dump commands, limits the flows dumped to those in the table
909with the given \fInumber\fR between 0 and 254. If not specified (or if
910255 is specified as \fInumber\fR), then flows in all tables are
911dumped.
912.
913.IP
914For flow table modification commands, behavior varies based on the
915OpenFlow version used to connect to the switch:
916.
917.RS
918.IP "OpenFlow 1.0"
919OpenFlow 1.0 does not support \fBtable\fR for modifying flows.
920\fBovs\-ofctl\fR will exit with an error if \fBtable\fR (other than
921\fBtable=255\fR) is specified for a switch that only supports OpenFlow
9221.0.
923.IP
924In OpenFlow 1.0, the switch chooses the table into which to insert a
925new flow. The Open vSwitch software switch always chooses table 0.
926Other Open vSwitch datapaths and other OpenFlow implementations may
927choose different tables.
928.IP
929The OpenFlow 1.0 behavior in Open vSwitch for modifying or removing
930flows depends on whether \fB\-\-strict\fR is used. Without
931\fB\-\-strict\fR, the command applies to matching flows in all tables.
932With \fB\-\-strict\fR, the command will operate on any single matching
933flow in any table; it will do nothing if there are matches in more
934than one table. (The distinction between these behaviors only matters
935if non-OpenFlow 1.0 commands were also used, because OpenFlow 1.0
936alone cannot add flows with the same matching criteria to multiple
937tables.)
938.
939.IP "OpenFlow 1.0 with table_id extension"
940Open vSwitch implements an OpenFlow extension that allows the
941controller to specify the table on which to operate. \fBovs\-ofctl\fR
942automatically enables the extension when \fBtable\fR is specified and
943OpenFlow 1.0 is used. \fBovs\-ofctl\fR automatically detects whether
944the switch supports the extension. As of this writing, this extension
945is only known to be implemented by Open vSwitch.
946.
947.IP
948With this extension, \fBovs\-ofctl\fR operates on the requested table
949when \fBtable\fR is specified, and acts as described for OpenFlow 1.0
950above when no \fBtable\fR is specified (or for \fBtable=255\fR).
951.
952.IP "OpenFlow 1.1"
953OpenFlow 1.1 requires flow table modification commands to specify a
954table. When \fBtable\fR is not specified (or \fBtable=255\fR is
955specified), \fBovs\-ofctl\fR defaults to table 0.
956.
957.IP "OpenFlow 1.2 and later"
958OpenFlow 1.2 and later allow flow deletion commands, but not other
959flow table modification commands, to operate on all flow tables, with
960the behavior described above for OpenFlow 1.0.
961.RE
6c1491fb 962.
54fa24c5
JS
963.IP \fBmetadata=\fIvalue\fR[\fB/\fImask\fR]
964Matches \fIvalue\fR either exactly or with optional \fImask\fR in the metadata
965field. \fIvalue\fR and \fImask\fR are 64-bit integers, by default in decimal
966(use a \fB0x\fR prefix to specify hexadecimal). Arbitrary \fImask\fR values
967are allowed: a 1-bit in \fImask\fR indicates that the corresponding bit in
968\fIvalue\fR must match exactly, and a 0-bit wildcards that bit. Matching on
969metadata was added in Open vSwitch 1.8.
970.
71e17a7a 971.PP
d31f1109
JP
972The following shorthand notations are also available:
973.
974.IP \fBip\fR
975Same as \fBdl_type=0x0800\fR.
976.
c5a41255
JP
977.IP \fBipv6\fR
978Same as \fBdl_type=0x86dd\fR.
979.
d31f1109
JP
980.IP \fBicmp\fR
981Same as \fBdl_type=0x0800,nw_proto=1\fR.
982.
c5a41255
JP
983.IP \fBicmp6\fR
984Same as \fBdl_type=0x86dd,nw_proto=58\fR.
985.
d31f1109
JP
986.IP \fBtcp\fR
987Same as \fBdl_type=0x0800,nw_proto=6\fR.
988.
c5a41255
JP
989.IP \fBtcp6\fR
990Same as \fBdl_type=0x86dd,nw_proto=6\fR.
991.
d31f1109
JP
992.IP \fBudp\fR
993Same as \fBdl_type=0x0800,nw_proto=17\fR.
994.
c5a41255
JP
995.IP \fBudp6\fR
996Same as \fBdl_type=0x86dd,nw_proto=17\fR.
997.
0d56eaf2
JS
998.IP \fBsctp\fR
999Same as \fBdl_type=0x0800,nw_proto=132\fR.
1000.
c5a41255
JP
1001.IP \fBsctp6\fR
1002Same as \fBdl_type=0x86dd,nw_proto=132\fR.
1003.
d31f1109
JP
1004.IP \fBarp\fR
1005Same as \fBdl_type=0x0806\fR.
1006.
8087f5ff
MM
1007.IP \fBrarp\fR
1008Same as \fBdl_type=0x8035\fR.
1009.
c5a41255
JP
1010.IP \fBmpls\fR
1011Same as \fBdl_type=0x8847\fR.
1012.
1013.IP \fBmplsm\fR
1014Same as \fBdl_type=0x8848\fR.
1015.
d31f1109 1016.PP
71e17a7a
JP
1017The following field assignments require support for the NXM (Nicira
1018Extended Match) extension to OpenFlow. When one of these is specified,
1019\fBovs\-ofctl\fR will automatically attempt to negotiate use of this
1020extension. If the switch does not support NXM, then \fBovs\-ofctl\fR
1021will report a fatal error.
1022.
33d8c6b4
BP
1023.IP \fBvlan_tci=\fItci\fR[\fB/\fImask\fR]
1024Matches modified VLAN TCI \fItci\fR. If \fImask\fR is omitted,
1025\fItci\fR is the exact VLAN TCI to match; if \fImask\fR is specified,
a8600e1a 1026then a 1-bit in \fImask\fR indicates that the corresponding bit in
33d8c6b4
BP
1027\fItci\fR must match exactly, and a 0-bit wildcards that bit. Both
1028\fItci\fR and \fImask\fR are 16-bit values that are decimal by
1029default; use a \fB0x\fR prefix to specify them in hexadecimal.
1030.
1031.IP
1032The value that \fBvlan_tci\fR matches against is 0 for a packet that
1033has no 802.1Q header. Otherwise, it is the TCI value from the 802.1Q
1034header with the CFI bit (with value \fB0x1000\fR) forced to 1.
1035.IP
1036Examples:
1037.RS
1038.IP \fBvlan_tci=0\fR
1039Match only packets without an 802.1Q header.
1040.IP \fBvlan_tci=0xf123\fR
1041Match packets tagged with priority 7 in VLAN 0x123.
1042.IP \fBvlan_tci=0x1123/0x1fff\fR
1043Match packets tagged with VLAN 0x123 (and any priority).
1044.IP \fBvlan_tci=0x5000/0xf000\fR
1045Match packets tagged with priority 2 (in any VLAN).
1046.IP \fBvlan_tci=0/0xfff\fR
1047Match packets with no 802.1Q header or tagged with VLAN 0 (and any
1048priority).
1049.IP \fBvlan_tci=0x5000/0xe000\fR
1050Match packets with no 802.1Q header or tagged with priority 2 (in any
1051VLAN).
1052.IP \fBvlan_tci=0/0xefff\fR
1053Match packets with no 802.1Q header or tagged with VLAN 0 and priority
10540.
1055.RE
1056.IP
1057Some of these matching possibilities can also be achieved with
1058\fBdl_vlan\fR and \fBdl_vlan_pcp\fR.
1059.
7257b535
BP
1060.IP \fBip_frag=\fIfrag_type\fR
1061When \fBdl_type\fR specifies IP or IPv6, \fIfrag_type\fR
1062specifies what kind of IP fragments or non-fragments to match. The
1063following values of \fIfrag_type\fR are supported:
1064.RS
1065.IP "\fBno\fR"
1066Matches only non-fragmented packets.
1067.IP "\fByes\fR"
1068Matches all fragments.
1069.IP "\fBfirst\fR"
1070Matches only fragments with offset 0.
1071.IP "\fBlater\fR"
1072Matches only fragments with nonzero offset.
1073.IP "\fBnot_later\fR"
1074Matches non-fragmented packets and fragments with zero offset.
1075.RE
1076.IP
1077The \fBip_frag\fR match type is likely to be most useful in
1078\fBnx\-match\fR mode. See the description of the \fBset\-frags\fR
1079command, above, for more details.
1080.
1e6fbba0
SH
1081.IP \fBarp_spa=\fIip\fR[\fB/\fInetmask\fR]
1082.IQ \fBarp_tpa=\fIip\fR[\fB/\fInetmask\fR]
1083When \fBdl_type\fR specifies either ARP or RARP, \fBarp_spa\fR and
e935fc32 1084\fBarp_tpa\fR match the source and target IPv4 address, respectively.
1e6fbba0
SH
1085An address may be specified as an IP address or host name
1086(e.g. \fB192.168.1.1\fR or \fBwww.example.com\fR). The optional
1087\fInetmask\fR allows restricting a match to an IPv4 address prefix.
1088The netmask may be specified as a dotted quad
1089(e.g. \fB192.168.1.0/255.255.255.0\fR) or as a CIDR block
1090(e.g. \fB192.168.1.0/24\fR).
1091.
bad68a99
JP
1092.IP \fBarp_sha=\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fR
1093.IQ \fBarp_tha=\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fR
8087f5ff
MM
1094When \fBdl_type\fR specifies either ARP or RARP, \fBarp_sha\fR and
1095\fBarp_tha\fR match the source and target hardware address, respectively. An
9183708a
SH
1096address is specified as 6 pairs of hexadecimal digits delimited by colons
1097(e.g. \fB00:0A:E4:25:6B:B0\fR).
bad68a99 1098.
9183708a
SH
1099.IP \fBarp_sha=\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB/\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fR
1100.IQ \fBarp_tha=\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB/\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fR
1101When \fBdl_type\fR specifies either ARP or RARP, \fBarp_sha\fR and
1102\fBarp_tha\fR match the source and target hardware address, respectively. An
1103address is specified as 6 pairs of hexadecimal digits delimited by colons
1104(e.g. \fB00:0A:E4:25:6B:B0\fR), with a wildcard mask following the slash.
1105.
1106
d31f1109
JP
1107.IP \fBipv6_src=\fIipv6\fR[\fB/\fInetmask\fR]
1108.IQ \fBipv6_dst=\fIipv6\fR[\fB/\fInetmask\fR]
1109When \fBdl_type\fR is 0x86dd (possibly via shorthand, e.g., \fBipv6\fR
1110or \fBtcp6\fR), matches IPv6 source (or destination) address \fIipv6\fR,
1111which may be specified as defined in RFC 2373. The preferred format is
1112\fIx\fB:\fIx\fB:\fIx\fB:\fIx\fB:\fIx\fB:\fIx\fB:\fIx\fB:\fIx\fR, where
1113\fIx\fR are the hexadecimal values of the eight 16-bit pieces of the
1114address. A single instance of \fB::\fR may be used to indicate multiple
1115groups of 16-bits of zeros. The optional \fInetmask\fR allows
1116restricting a match to an IPv6 address prefix. A netmask is specified
ff0b06ee
BP
1117as an IPv6 address (e.g. \fB2001:db8:3c4d:1::/ffff:ffff:ffff:ffff::\fR)
1118or a CIDR block (e.g. \fB2001:db8:3c4d:1::/64\fR). Open vSwitch 1.8
1119and later support arbitrary masks; earlier versions support only CIDR
1120masks, that is, CIDR block and IPv6 addresses that are equivalent to
1121CIDR blocks.
d31f1109 1122.
fa8223b7
JP
1123.IP \fBipv6_label=\fIlabel\fR
1124When \fBdl_type\fR is 0x86dd (possibly via shorthand, e.g., \fBipv6\fR
1125or \fBtcp6\fR), matches IPv6 flow label \fIlabel\fR.
1126.
47284b1f 1127.IP \fBnd_target=\fIipv6\fR[\fB/\fInetmask\fR]
685a51a5
JP
1128When \fBdl_type\fR, \fBnw_proto\fR, and \fBicmp_type\fR specify
1129IPv6 Neighbor Discovery (ICMPv6 type 135 or 136), matches the target address
1130\fIipv6\fR. \fIipv6\fR is in the same format described earlier for the
1131\fBipv6_src\fR and \fBipv6_dst\fR fields.
1132.
1133.IP \fBnd_sll=\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fR
1134When \fBdl_type\fR, \fBnw_proto\fR, and \fBicmp_type\fR specify IPv6
1135Neighbor Solicitation (ICMPv6 type 135), matches the source link\-layer
1136address option. An address is specified as 6 pairs of hexadecimal
1137digits delimited by colons.
1138.
1139.IP \fBnd_tll=\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fB:\fIxx\fR
1140When \fBdl_type\fR, \fBnw_proto\fR, and \fBicmp_type\fR specify IPv6
1141Neighbor Advertisement (ICMPv6 type 136), matches the target link\-layer
1142address option. An address is specified as 6 pairs of hexadecimal
1143digits delimited by colons.
1144.
b4dca848
SH
1145.IP \fBmpls_bos=\fIbos\fR
1146When \fBdl_type\fR is 0x8847 or 0x8848 (possibly via shorthand e.g.,
1147\fBmpls\fR or \fBmplsm\fR), matches the bottom-of-stack bit of the
1148outer-most MPLS label stack entry. Valid values are 0 and 1.
1149.IP
1150If 1 then for a packet with a well-formed MPLS label stack the
1151bottom-of-stack bit indicates that the outer label stack entry is also
1152the inner-most label stack entry and thus that is that there is only one
1153label stack entry present. Conversely, if 0 then for a packet with a
1154well-formed MPLS label stack the bottom-of-stack bit indicates that the
1155outer label stack entry is not the inner-most label stack entry and
1156thus there is more than one label stack entry present.
1157.
1158.IP \fBmpls_label=\fIlabel\fR
1159When \fBdl_type\fR is 0x8847 or 0x8848 (possibly via shorthand e.g.,
1160\fBmpls\fR or \fBmplsm\fR), matches the label of the outer
1161MPLS label stack entry. The label is a 20-bit value that is decimal by default;
1162use a \fB0x\fR prefix to specify them in hexadecimal.
1163.
1164.IP \fBmpls_tc=\fItc\fR
1165When \fBdl_type\fR is 0x8847 or 0x8848 (possibly via shorthand e.g.,
1166\fBmpls\fR or \fBmplsm\fR), matches the traffic-class of the outer
1167MPLS label stack entry. Valid values are between 0 (lowest) and 7 (highest).
1168.
8368c090 1169.IP \fBtun_id=\fItunnel-id\fR[\fB/\fImask\fR]
44a7e26d 1170.IQ \fBtunnel_id=\fItunnel-id\fR[\fB/\fImask\fR]
8368c090 1171Matches tunnel identifier \fItunnel-id\fR. Only packets that arrive
4c5df7f7 1172over a tunnel that carries a key (e.g. GRE with the RFC 2890 key
bcb90943
SH
1173extension and a nonzero key value) will have a nonzero tunnel ID.
1174If \fImask\fR is omitted, \fItunnel-id\fR is the exact tunnel ID to match;
1175if \fImask\fR is specified, then a 1-bit in \fImask\fR indicates that the
1176corresponding bit in \fItunnel-id\fR must match exactly, and a 0-bit
1177wildcards that bit.
71e17a7a 1178.
b666962b
JG
1179.IP \fBtun_flags=\fIflags\fR
1180Matches flags indicating various aspects of the tunnel encapsulation. Currently,
1181there is only one flag defined:
1182.IP
1183\fBoam\fR: The tunnel protocol indicated that this is an OAM control packet.
1184.IP
1185Flags can be prefixed by \fB+\fR or \fB-\fR to indicate that the flag should
1186be matched as either present or not present, respectively. In addition, flags
1187can be specified without a prefix and separated by \fB|\fR to indicate an exact
1188match.
1189.IP
1190Note that it is possible for newer version of Open vSwitch to introduce
1191additional flags with varying meaning. It is therefore not recommended to use
1192an exact match on this field since the behavior of these new flags is unknown
1193and should be ignored.
1194.IP
1195For non-tunneled packets, the value is 0.
1196.IP
1197This field was introduced in Open vSwitch 2.5.
1198.
0ad90c84
JR
1199.IP \fBtun_src=\fIip\fR[\fB/\fInetmask\fR]
1200.IQ \fBtun_dst=\fIip\fR[\fB/\fInetmask\fR]
1201Matches tunnel IPv4 source (or destination) address \fIip\fR. Only packets
1202that arrive over a tunnel will have nonzero tunnel addresses.
1203The address may be specified as an IP address or host name
1204(e.g. \fB192.168.1.1\fR or \fBwww.example.com\fR). The optional
1205\fInetmask\fR allows restricting a match to a masked IPv4 address.
1206The netmask may be specified as a dotted quad
1207(e.g. \fB192.168.1.0/255.255.255.0\fR) or as a CIDR block
1208(e.g. \fB192.168.1.0/24\fR).
1209.
ac6073e3
MC
1210.IP \fBtun_gbp_id=\fIvalue\fR[\fB/\fImask\fR]
1211.IQ \fBtun_gbp_flags=\fIvalue\fR[\fB/\fImask\fR]
1212Matches the group policy identifier and flags in the VXLAN header. Only
1213packets that arrive over a VXLAN tunnel with the "gbp" extension
1214enabled can have this field set. The fields may also be referred to by
1215NXM_NX_TUN_GBP_ID[] (16 bits) and NXM_NX_TUN_GBP_FLAGS[] (8 bits) in
1216the context of field manipulation actions. If these fields are set and
1217the packet matched by the flow is encapsulated in a VXLAN-GBP tunnel,
1218then the policy identifier and flags are transmitted to the destination
1219VXLAN tunnel endpoint.
1220.IP
1221The \fBtun_gbp_flags\fR field has the following format:
1222.IP
1223.in +2
1224\f(CR+-+-+-+-+-+-+-+-+\fR
1225.br
1226\f(CR|-|D|-|-|A|-|-|-|\fR
1227.br
1228\f(CR+-+-+-+-+-+-+-+-+\fR
1229
1230.B D :=
1231Don't Learn bit. When set, this bit indicates that the egress
1232tunnel endpoint MUST NOT learn the source address of the encapsulated
1233frame.
1234
1235.B A :=
1236Indicates that the group policy has already been applied to
1237this packet. Policies MUST NOT be applied by devices when the A bit is
1238set.
1239.in -2
1240.IP
1241For more information, please see the corresponding IETF draft:
1242https://tools.ietf.org/html/draft-smith-vxlan-group-policy
1243.
1cb20095 1244.IP "\fBtun_metadata\fIidx\fR[\fB=\fIvalue\fR[\fB/\fImask\fR]]"
9558d2a5
JG
1245Matches \fIvalue\fR either exactly or with optional \fImask\fR in
1246tunnel metadata field number \fIidx\fR (numbered from 0 to 63).
1cb20095
JG
1247The act of specifying a field implies a match on the existence
1248of that field in the packet in addition to the masked value. As
1249a shorthand, it is possible to specify only the field name to
1250simply match on an option being present.
1251.IP
9558d2a5
JG
1252Tunnel metadata fields can be dynamically assigned onto the data
1253contained in the options of Geneve packets using the commands
1254described in the section \fBOpenFlow Switch Geneve Option Table
1255Commands\fR. Once assigned, the length of the field is variable
1256according to the size of the option. Before updating a mapping in
1257the option table, flows with references to it should be removed,
1258otherwise the result is non-deterministic.
1259.IP
1260These fields were introduced in Open vSwitch 2.5.
1261.
00b1c62f
BP
1262.IP "\fBreg\fIidx\fB=\fIvalue\fR[\fB/\fImask\fR]"
1263Matches \fIvalue\fR either exactly or with optional \fImask\fR in
1264register number \fIidx\fR. The valid range of \fIidx\fR depends on
1265the switch. \fIvalue\fR and \fImask\fR are 32-bit integers, by
1266default in decimal (use a \fB0x\fR prefix to specify hexadecimal).
1267Arbitrary \fImask\fR values are allowed: a 1-bit in \fImask\fR
1268indicates that the corresponding bit in \fIvalue\fR must match
1269exactly, and a 0-bit wildcards that bit.
1270.IP
1271When a packet enters an OpenFlow switch, all of the registers are set
79fe0f46
BP
1272to 0. Only explicit actions change register values.
1273.
1274.IP "\fBxreg\fIidx\fB=\fIvalue\fR[\fB/\fImask\fR]"
1275Matches \fIvalue\fR either exactly or with optional \fImask\fR in
127664-bit ``extended register'' number \fIidx\fR. Each of the 64-bit
1277extended registers overlays two of the 32-bit registers: \fBxreg0\fR
1278overlays \fBreg0\fR and \fBreg1\fR, with \fBreg0\fR supplying the
1279most-significant bits of \fBxreg0\fR and \fBreg1\fR the
5e0464a0 1280least-significant. \fBxreg1\fR similarly overlays \fBreg2\fR and
79fe0f46
BP
1281\fBreg3\fR, and so on.
1282.IP
1283These fields were added in Open vSwitch 2.3 to conform with the
d3cb080e 1284OpenFlow 1.5 specification. OpenFlow 1.5 calls these fields
79fe0f46
BP
1285just the ``packet registers,'' but Open vSwitch already had 32-bit
1286registers by that name, which is why Open vSwitch refers to the
1287standard registers as ``extended registers''.
a9b4a41a 1288.
ac923e91
JG
1289.IP \fBpkt_mark=\fIvalue\fR[\fB/\fImask\fR]
1290Matches packet metadata mark \fIvalue\fR either exactly or with optional
1291\fImask\fR. The mark is associated data that may be passed into other
1292system components in order to facilitate interaction between subsystems.
1293On Linux this corresponds to the skb mark but the exact implementation is
1294platform-dependent.
1295.
c61f3870
BP
1296.IP \fBactset_output=\fIport\fR
1297Matches the output port currently in the OpenFlow action set, where
1298\fIport\fR may be an OpenFlow port number or keyword
1299(e.g. \fBLOCAL\fR). If there is no output port in the OpenFlow action
1300set, or if the output port will be ignored (e.g. because there is an
1301output group in the OpenFlow action set), then the value will be
1302\fBUNSET\fR.
1303.IP
1304This field was introduced in Open vSwitch 2.4 to conform with the
d3cb080e 1305OpenFlow 1.5 specification.
18080541
BP
1306.
1307.IP \fBconj_id=\fIvalue\fR
1308Matches the given 32-bit \fIvalue\fR against the conjunction ID. This
1309is used only with the \fBconjunction\fR action (see below).
1310.IP
1311This field was introduced in Open vSwitch 2.4.
1312.
07659514
JS
1313.IP \fBct_state=\fIflags\fB/\fImask\fR
1314.IQ \fBct_state=\fR[\fB+\fIflag\fR...][\fB-\fIflag\fR...]
1315Bitwise match on connection state flags. This is used with the \fBct\fR
1316action (see below).
1317.IP
1318The \fBct_state\fR field provides information from a connection tracking
1319module. It describes whether the packet has previously traversed the
1320connection tracker (tracked, or trk) and, if it has been tracked, any
1321additional information that the connection tracker was able to provide about
1322the connection that the current packet belongs to.
1323.IP
1324Individual packets may be in one of two states: Untracked or tracked. When the
1325\fBct\fR action is executed on a packet, it becomes tracked for the the
1326remainder of OpenFlow pipeline processing. Once a packet has become tracked,
1327the state of its corresponding connection may be determined. Note that the
1328\fBct_state\fR is only significant for the current \fBct_zone\fR.
1329.IP
1330Connections may be in one of two states: uncommitted or committed. Connections
1331are uncommitted by default. To determine ongoing information about a
1332connection, like whether the connection is established or not, the connection
1333must be committed. When the \fBct\fR action is executed on a packet with the
1334\fBcommit\fR parameter, the connection will become committed and will remain in
1335this state until the end of the connection. Committed connections store state
1336beyond the duration of packet processing.
1337.IP
1338The \fIflags\fR and \fImask\fR are 32-bit numbers written in decimal or
1339in hexadecimal prefixed by \fB0x\fR. Each 1-bit in \fImask\fR requires
1340that the corresponding bit in \fIflags\fR must match. Each 0-bit in
1341\fImask\fR causes the corresponding bit to be ignored.
1342.IP
1343Alternatively, the flags can be specified by their symbolic names
1344(listed below), each preceded by either \fB+\fR for a flag that must
1345be set, or \fB\-\fR for a flag that must be unset, without any other
1346delimiters between the flags. Flags not mentioned are wildcarded. For
1347example, \fBtcp,ct_state=+trk\-new\fR matches TCP packets that
1348have been run through the connection tracker and do not establish a new
1349flow.
1350.IP
1351The following flags describe the state of the tracking:
1352.RS
1353.IP "\fB0x80: trk\fR"
1354This packet is tracked, meaning that it has previously traversed the connection
1355tracker. If this flag is not set, then no other flags will be set. If this flag
1356is set, then the packet is tracked and other flags may also be set.
1357.IP "\fB0x40: rpl\fR"
1358The flow is in the reply direction, meaning it did not initiate the
1359connection. This flag may only be present for committed connections.
1360.IP "\fB0x20: inv\fR"
1361The state is invalid, meaning that the connection tracker couldn't identify the
1362connection. This flag is a catch-all for any problems that the connection
1363tracker may have, for example:
1364.RS
1365.PP
1366- L3/L4 protocol handler is not loaded/unavailable. With the Linux kernel
1367datapath, this may mean that the "nf_conntrack_ipv4" or "nf_conntrack_ipv6"
1368modules are not loaded.
1369.PP
1370- L3/L4 protocol handler determines that the packet is malformed.
1371.PP
1372- Packets are unexpected length for protocol.
1373.RE
1374.IP "\fB0x01: new\fR"
1375This is the beginning of a new connection. This flag may only be present for
1376uncommitted connections.
1377.IP "\fB0x02: est\fR"
1378This is part of an already existing connection. This flag may only be present
1379for committed connections.
1380.IP "\fB0x04: rel\fR"
1381This is a connection that is related to an existing connection, for
1382instance ICMP "destination unreachable" messages or FTP data connections. This
1383flag may only be present for committed connections.
1384.PP
1385This field was introduced in Open vSwitch 2.5.
1386.RE
1387.
1388.PP
1389The following fields are associated with the connection tracker and will only
1390be populated for tracked packets. The \fBct\fR action will populate these
1391fields, and allows modification of some of the below fields.
1392.IP \fBct_zone=\fIzone
1393Matches the given 16-bit connection \fIzone\fR exactly. This represents the
1394most recent connection tracking context that \fBct\fR was executed in. Each
1395zone is an independent connection tracking context, so if you wish to track
1396the same packet in multiple contexts then you must use the \fBct\fR action
1397multiple times. Introduced in Open vSwitch 2.5.
1398.
8e53fe8c
JS
1399.IP \fBct_mark=\fIvalue\fR[\fB/\fImask\fR]
1400Matches the given 32-bit connection mark \fIvalue\fR either exactly or with
1401optional \fImask\fR. This represents metadata associated with the connection
1402that the current packet is part of. Introduced in Open vSwitch 2.5.
1403.
9daf2348
JS
1404.IP \fBct_label=\fIvalue\fR[\fB/\fImask\fR]
1405Matches the given 128-bit connection labels \fIvalue\fR either exactly or with
1406optional \fImask\fR. This represents metadata associated with the connection
1407that the current packet is part of. Introduced in Open vSwitch 2.5.
1408.
064af421 1409.PP
d31f1109
JP
1410Defining IPv6 flows (those with \fBdl_type\fR equal to 0x86dd) requires
1411support for NXM. The following shorthand notations are available for
1412IPv6-related flows:
a9b4a41a 1413.
d31f1109
JP
1414.IP \fBipv6\fR
1415Same as \fBdl_type=0x86dd\fR.
a9b4a41a 1416.
d31f1109
JP
1417.IP \fBtcp6\fR
1418Same as \fBdl_type=0x86dd,nw_proto=6\fR.
a9b4a41a 1419.
d31f1109
JP
1420.IP \fBudp6\fR
1421Same as \fBdl_type=0x86dd,nw_proto=17\fR.
a9b4a41a 1422.
0d56eaf2
JS
1423.IP \fBsctp6\fR
1424Same as \fBdl_type=0x86dd,nw_proto=132\fR.
1425.
d31f1109
JP
1426.IP \fBicmp6\fR
1427Same as \fBdl_type=0x86dd,nw_proto=58\fR.
a9b4a41a 1428.
064af421 1429.PP
2c6d8411
BP
1430Finally, field assignments to \fBduration\fR, \fBn_packets\fR, or
1431\fBn_bytes\fR are ignored to allow output from the \fBdump\-flows\fR
1432command to be used as input for other commands that parse flows.
1433.
1434.PP
c821124b
BP
1435The \fBadd\-flow\fR, \fBadd\-flows\fR, and \fBmod\-flows\fR commands
1436require an additional field, which must be the final field specified:
a9b4a41a 1437.
d1ba66e9 1438.IP \fBactions=\fR[\fIaction\fR][\fB,\fIaction\fR...]\fR
064af421 1439Specifies a comma-separated list of actions to take on a packet when the
d1ba66e9
BP
1440flow entry matches. If no \fIaction\fR is specified, then packets
1441matching the flow are dropped. The following forms of \fIaction\fR
1442are supported:
a9b4a41a 1443.
064af421 1444.RS
d1ba66e9
BP
1445.IP \fIport\fR
1446.IQ \fBoutput:\fIport\fR
1447Outputs the packet to OpenFlow port number \fIport\fR. If \fIport\fR
1448is the packet's input port, the packet is not output.
c6100d92
BP
1449.
1450.IP \fBoutput:\fIsrc\fB[\fIstart\fB..\fIend\fB]
1451Outputs the packet to the OpenFlow port number read from \fIsrc\fR,
1452which must be an NXM field as described above. For example,
1453\fBoutput:NXM_NX_REG0[16..31]\fR outputs to the OpenFlow port number
d1ba66e9
BP
1454written in the upper half of register 0. If the port number is the
1455packet's input port, the packet is not output.
1456.IP
1457This form of \fBoutput\fR was added in Open vSwitch 1.3.0. This form
1458of \fBoutput\fR uses an OpenFlow extension that is not supported by
1459standard OpenFlow switches.
5682f723 1460.
b47e67c4
TG
1461.IP \fBgroup:\fIgroup_id\fR
1462Outputs the packet to the OpenFlow group \fIgroup_id\fR. Group tables
1463are only supported in OpenFlow 1.1+. See Group Syntax for more details.
1464.
064af421
BP
1465.IP \fBnormal\fR
1466Subjects the packet to the device's normal L2/L3 processing. (This
1467action is not implemented by all OpenFlow switches.)
a9b4a41a 1468.
064af421
BP
1469.IP \fBflood\fR
1470Outputs the packet on all switch physical ports other than the port on
1471which it was received and any ports on which flooding is disabled
1472(typically, these would be ports disabled by the IEEE 802.1D spanning
1473tree protocol).
a9b4a41a 1474.
064af421
BP
1475.IP \fBall\fR
1476Outputs the packet on all switch physical ports other than the port on
1477which it was received.
a9b4a41a 1478.
d1ba66e9
BP
1479.IP \fBlocal\fR
1480Outputs the packet on the ``local port,'' which corresponds to the
1481network device that has the same name as the bridge.
1482.
1483.IP \fBin_port\fR
1484Outputs the packet on the port from which it was received.
1485.
a7349929 1486.IP \fBcontroller(\fIkey\fB=\fIvalue\fR...\fB)
064af421 1487Sends the packet to the OpenFlow controller as a ``packet in''
a7349929
BP
1488message. The supported key-value pairs are:
1489.RS
1490.IP "\fBmax_len=\fInbytes\fR"
1491Limit to \fInbytes\fR the number of bytes of the packet to send to
1492the controller. By default the entire packet is sent.
1493.IP "\fBreason=\fIreason\fR"
1494Specify \fIreason\fR as the reason for sending the message in the
1495``packet in'' message. The supported reasons are \fBaction\fR (the
1496default), \fBno_match\fR, and \fBinvalid_ttl\fR.
1497.IP "\fBid=\fIcontroller-id\fR"
1498Specify \fIcontroller-id\fR, a 16-bit integer, as the connection ID of
1499the OpenFlow controller or controllers to which the ``packet in''
1500message should be sent. The default is zero. Zero is also the
1501default connection ID for each controller connection, and a given
1502controller connection will only have a nonzero connection ID if its
1503controller uses the \fBNXT_SET_CONTROLLER_ID\fR Nicira extension to
1504OpenFlow.
1505.RE
d1ba66e9 1506.IP
a7349929
BP
1507Any \fIreason\fR other than \fBaction\fR and any nonzero
1508\fIcontroller-id\fR uses a Nicira vendor extension that, as of this
1509writing, is only known to be implemented by Open vSwitch (version 1.6
1510or later).
1511.
1512.IP \fBcontroller\fR
1513.IQ \fBcontroller\fR[\fB:\fInbytes\fR]
1514Shorthand for \fBcontroller()\fR or
1515\fBcontroller(max_len=\fInbytes\fB)\fR, respectively.
a9b4a41a 1516.
d1ba66e9
BP
1517.IP \fBenqueue(\fIport\fB,\fIqueue\fB)\fR
1518Enqueues the packet on the specified \fIqueue\fR within port
1519\fIport\fR, which must be an OpenFlow port number or keyword
1520(e.g. \fBLOCAL\fR). The number of supported queues depends on the
1521switch; some OpenFlow implementations do not support queuing at all.
64c1e8af 1522.
064af421
BP
1523.IP \fBdrop\fR
1524Discards the packet, so no further processing or forwarding takes place.
1525If a drop action is used, no other actions may be specified.
a9b4a41a 1526.
064af421
BP
1527.IP \fBmod_vlan_vid\fR:\fIvlan_vid\fR
1528Modifies the VLAN id on a packet. The VLAN tag is added or modified
1529as necessary to match the value specified. If the VLAN tag is added,
1530a priority of zero is used (see the \fBmod_vlan_pcp\fR action to set
1531this).
a9b4a41a 1532.
064af421
BP
1533.IP \fBmod_vlan_pcp\fR:\fIvlan_pcp\fR
1534Modifies the VLAN priority on a packet. The VLAN tag is added or modified
1535as necessary to match the value specified. Valid values are between 0
1536(lowest) and 7 (highest). If the VLAN tag is added, a vid of zero is used
1537(see the \fBmod_vlan_vid\fR action to set this).
a9b4a41a 1538.
064af421
BP
1539.IP \fBstrip_vlan\fR
1540Strips the VLAN tag from a packet if it is present.
a9b4a41a 1541.
3e34fbdd 1542.IP \fBpush_vlan\fR:\fIethertype\fR
898dcef1 1543Push a new VLAN tag onto the packet. Ethertype is used as the Ethertype
3e34fbdd
IY
1544for the tag. Only ethertype 0x8100 should be used. (0x88a8 which the spec
1545allows isn't supported at the moment.)
1546A priority of zero and the tag of zero are used for the new tag.
1547.
b02475c5 1548.IP \fBpush_mpls\fR:\fIethertype\fR
912c1938
SH
1549Changes the packet's Ethertype to \fIethertype\fR, which must be either
1550\fB0x8847\fR or \fB0x8848\fR, and pushes an MPLS LSE.
1551.IP
1552If the packet does not already contain any MPLS labels then an initial
1553label stack entry is pushed. The label stack entry's label is 2 if the
1554packet contains IPv6 and 0 otherwise, its default traffic control value is
1555the low 3 bits of the packet's DSCP value (0 if the packet is not IP), and
1556its TTL is copied from the IP TTL (64 if the packet is not IP).
b02475c5
SH
1557.IP
1558If the packet does already contain an MPLS label, pushes a new
1559outermost label as a copy of the existing outermost label.
1560.IP
b0a17866
SH
1561A limitation of the implementation is that processing of actions will stop
1562if \fBpush_mpls\fR follows another \fBpush_mpls\fR unless there is a
1563\fBpop_mpls\fR in between.
b02475c5
SH
1564.
1565.IP \fBpop_mpls\fR:\fIethertype\fR
799a91bb
SH
1566Strips the outermost MPLS label stack entry.
1567Currently the implementation restricts \fIethertype\fR to a non-MPLS Ethertype
1568and thus \fBpop_mpls\fR should only be applied to packets with
b0a17866
SH
1569an MPLS label stack depth of one. A further limitation is that processing of
1570actions will stop if \fBpop_mpls\fR follows another \fBpop_mpls\fR unless
1571there is a \fBpush_mpls\fR in between.
b02475c5 1572.
064af421
BP
1573.IP \fBmod_dl_src\fB:\fImac\fR
1574Sets the source Ethernet address to \fImac\fR.
a9b4a41a 1575.
064af421
BP
1576.IP \fBmod_dl_dst\fB:\fImac\fR
1577Sets the destination Ethernet address to \fImac\fR.
a9b4a41a 1578.
e423eca6
JP
1579.IP \fBmod_nw_src\fB:\fIip\fR
1580Sets the IPv4 source address to \fIip\fR.
a9b4a41a 1581.
e423eca6
JP
1582.IP \fBmod_nw_dst\fB:\fIip\fR
1583Sets the IPv4 destination address to \fIip\fR.
a9b4a41a 1584.
e423eca6 1585.IP \fBmod_tp_src\fB:\fIport\fR
0d56eaf2 1586Sets the TCP or UDP or SCTP source port to \fIport\fR.
a9b4a41a 1587.
e423eca6 1588.IP \fBmod_tp_dst\fB:\fIport\fR
0d56eaf2 1589Sets the TCP or UDP or SCTP destination port to \fIport\fR.
a9b4a41a 1590.
959a2ecd 1591.IP \fBmod_nw_tos\fB:\fItos\fR
04f01c24
BP
1592Sets the DSCP bits in the IPv4 ToS/DSCP or IPv6 traffic class field to
1593\fItos\fR, which must be a multiple of 4 between 0 and 255. This action
1594does not modify the two least significant bits of the ToS field (the ECN bits).
ff14eb7a
JR
1595.
1596.IP \fBmod_nw_ecn\fB:\fIecn\fR
1597Sets the ECN bits in the IPv4 ToS or IPv6 traffic class field to \fIecn\fR,
1598which must be a value between 0 and 3, inclusive. This action does not modify
1599the six most significant bits of the field (the DSCP bits).
1600.IP
1601Requires OpenFlow 1.1 or later.
0c20dbe4
JR
1602.
1603.IP \fBmod_nw_ttl\fB:\fIttl\fR
1604Sets the IPv4 TTL or IPv6 hop limit field to \fIttl\fR, which is specified as
1605a decimal number between 0 and 255, inclusive. Switch behavior when setting
1606\fIttl\fR to zero is not well specified, though.
1607.IP
1608Requires OpenFlow 1.1 or later.
659586ef
JG
1609.RE
1610.IP
1611The following actions are Nicira vendor extensions that, as of this writing, are
1612only known to be implemented by Open vSwitch:
1613.
1614.RS
1615.
3a2fe1f3 1616.IP \fBresubmit\fB:\fIport\fR
29901626
BP
1617.IQ \fBresubmit\fB(\fR[\fIport\fR]\fB,\fR[\fItable\fR]\fB)
1618Re-searches this OpenFlow flow table (or the table whose number is
1619specified by \fItable\fR) with the \fBin_port\fR field replaced by
1620\fIport\fR (if \fIport\fR is specified) and executes the actions
1621found, if any, in addition to any other actions in this flow entry.
1622.IP
1623Recursive \fBresubmit\fR actions are obeyed up to an
1624implementation-defined maximum depth. Open vSwitch 1.0.1 and earlier
1625did not support recursion; Open vSwitch before 1.2.90 did not support
1626\fItable\fR.
659586ef
JG
1627.
1628.IP \fBset_tunnel\fB:\fIid\fR
b9298d3f
BP
1629.IQ \fBset_tunnel64\fB:\fIid\fR
1630If outputting to a port that encapsulates the packet in a tunnel and
5a6861aa 1631supports an identifier (such as GRE), sets the identifier to \fIid\fR.
b9298d3f
BP
1632If the \fBset_tunnel\fR form is used and \fIid\fR fits in 32 bits,
1633then this uses an action extension that is supported by Open vSwitch
16341.0 and later. Otherwise, if \fIid\fR is a 64-bit value, it requires
1635Open vSwitch 1.1 or later.
3a2fe1f3 1636.
eedc0097
JP
1637.IP \fBset_queue\fB:\fIqueue\fR
1638Sets the queue that should be used to \fIqueue\fR when packets are
1639output. The number of supported queues depends on the switch; some
1640OpenFlow implementations do not support queuing at all.
1641.
1642.IP \fBpop_queue\fR
1643Restores the queue to the value it was before any \fBset_queue\fR
1644actions were applied.
1645.
07659514
JS
1646.IP \fBct\fR
1647.IQ \fBct\fB(\fR[\fIargument\fR][\fB,\fIargument\fR...]\fB)
1648Send the packet through the connection tracker. Refer to the \fBct_state\fR
1649documentation above for possible packet and connection states. The following
1650arguments are supported:
1651
1652.RS
1653.IP \fBcommit\fR
1654.RS
1655Commit the connection to the connection tracking module. Information about the
1656connection will be stored beyond the lifetime of the packet in the pipeline.
1657Some \fBct_state\fR flags are only available for committed connections.
1658.RE
1659.IP \fBtable=\fInumber\fR
1660Fork pipeline processing in two. The original instance of the packet will
1661continue processing the current actions list as an untracked packet. An
1662additional instance of the packet will be sent to the connection tracker, which
1663will be re-injected into the OpenFlow pipeline to resume processing in table
1664\fInumber\fR, with the \fBct_state\fR and other ct match fields set. If the
1665\fBtable\fR is not specified, then the packet is submitted to the connection
1666tracker, but the pipeline does not fork and the ct match fields are not
1667populated. It is strongly recommended to specify a table later than the current
1668table to prevent loops.
1669.IP \fBzone=\fIvalue\fR
1670.IQ \fBzone=\fIsrc\fB[\fIstart\fB..\fIend\fB]\fR
1671A 16-bit context id that can be used to isolate connections into separate
1672domains, allowing overlapping network addresses in different zones. If a zone
1673is not provided, then the default is to use zone zero. The \fBzone\fR may be
1674specified either as an immediate 16-bit \fIvalue\fR, or may be provided from an
8e53fe8c
JS
1675NXM field \fIsrc\fR. The \fIstart\fR and \fIend\fR pair are inclusive, and must
1676specify a 16-bit range within the field.
1677.IP \fBexec\fB(\fR[\fIaction\fR][\fB,\fIaction\fR...]\fB)\fR
1678Perform actions within the context of connection tracking. These actions
1679are in the same format as the actions accepted as part of a flow, however
1680there are additional restrictions applied. For instance, only actions which
1681modify the ct fields are accepted within the \fBexec\fR action. Furthermore,
1682some actions may only be performed in this context, for instance modifying the
1683ct_mark field:
1684.
1685.RS
1686.IP \fBset_field:\fIvalue\fR->ct_mark\fR
1687Store a 32-bit metadata value with the connection. If the connection is
1688committed, then subsequent lookups for packets in this connection will
1689populate the \fBct_mark\fR flow field when the packet is sent to the
1690connection tracker with the \fBtable\fR specified.
9daf2348
JS
1691.IP \fBset_field:\fIvalue\fR->ct_label\fR
1692Store a 128-bit metadata value with the connection. If the connection is
1693committed, then subsequent lookups for packets in this connection will
1694populate the \fBct_label\fR flow field when the packet is sent to the
1695connection tracker with the \fBtable\fR specified.
8e53fe8c
JS
1696.RE
1697.IP
1698The \fBcommit\fR parameter must be specified to use \fBexec(...)\fR.
1699.
d787ad39
JS
1700.IP \fBalg=\fIalg\fR
1701Specify application layer gateway \fIalg\fR to track specific connection
1702types. Supported types include:
1703.RS
1704.IP \fBftp\fR
1705Look for negotiation of FTP data connections. If a subsequent FTP data
1706connection arrives which is related, the \fBct\fR action will set the
1707\fBrel\fR flag in the \fBct_state\fR field for packets sent through \fBct\fR.
1708.RE
1709.
07659514
JS
1710.RE
1711.IP
1712The \fBct\fR action may be used as a primitive to construct stateful firewalls
1713by selectively committing some traffic, then matching the \fBct_state\fR to
1714allow established connections while denying new connections. The following
1715flows provide an example of how to implement a simple firewall that allows new
1716connections from port 1 to port 2, and only allows established connections to
1717send traffic from port 2 to port 1:
1718 \fBtable=0,priority=1,action=drop
1719 table=0,priority=10,arp,action=normal
1720 table=0,priority=100,ip,ct_state=-trk,action=ct(table=1)
1721 table=1,in_port=1,ip,ct_state=+trk+new,action=ct(commit),2
1722 table=1,in_port=1,ip,ct_state=+trk+est,action=2
1723 table=1,in_port=2,ip,ct_state=+trk+new,action=drop
1724 table=1,in_port=2,ip,ct_state=+trk+est,action=1\fR
1725.IP
1726If \fBct\fR is executed on IP (or IPv6) fragments, then the message is
1727implicitly reassembled before sending to the connection tracker and
1728refragmented upon \fBoutput\fR, to the original maximum received fragment size.
1729Reassembly occurs within the context of the \fBzone\fR. Pipeline processing
1730for the initial fragments is halted; When the final fragment is received,
1731the message is assembled and pipeline processing will continue for that flow.
1732Because packet ordering is not guaranteed by IP protocols, it is not possible
1733to determine which IP fragment will cause message reassembly (and therefore
1734continue pipeline processing). As such, it is strongly recommended that
1735multiple flows should not execute \fBct\fR to reassemble fragments from the
1736same IP message.
1737.IP
1738Currently, connection tracking is only available on Linux kernels with the
1739nf_conntrack module loaded.
1740.
8e53fe8c
JS
1741.RE
1742.
f0fd1a17 1743.IP \fBdec_ttl\fR
ef6d1b11 1744.IQ \fBdec_ttl(\fIid1\fR[\fB,\fIid2\fR]...\fB)\fR
f0fd1a17 1745Decrement TTL of IPv4 packet or hop limit of IPv6 packet. If the
972b5f38
JR
1746TTL or hop limit is initially zero or decrementing would make it so, no
1747decrement occurs, as packets reaching TTL zero must be rejected. Instead,
f0fd1a17
PS
1748a ``packet-in'' message with reason code \fBOFPR_INVALID_TTL\fR is
1749sent to each connected controller that has enabled receiving them,
c2d967a5
MM
1750if any. Processing the current set of actions then stops. However,
1751if the current set of actions was reached through ``resubmit'' then
ef6d1b11
JP
1752remaining actions in outer levels resume processing.
1753.IP
1754This action also optionally supports the ability to specify a list of
1755valid controller ids. Each of the controllers in the list will receive
1756the ``packet_in'' message only if they have registered to receive the
c2d967a5
MM
1757invalid ttl packets. If controller ids are not specified, the
1758``packet_in'' message will be sent only to the controllers having
1759controller id zero which have registered for the invalid ttl packets.
f0fd1a17 1760.
afd5ac06
SH
1761.IP \fBset_mpls_label\fR:\fIlabel\fR
1762Set the label of the outer MPLS label stack entry of a packet.
1763\fIlabel\fR should be a 20-bit value that is decimal by default;
1764use a \fB0x\fR prefix to specify them in hexadecimal.
1765.
1766.IP \fBset_mpls_tc\fR:\fItc\fR
1767Set the traffic-class of the outer MPLS label stack entry of a packet.
1768\fItc\fR should be a in the range 0 to 7 inclusive.
1769.
0f3f3c3d
SH
1770.IP \fBset_mpls_ttl\fR:\fIttl\fR
1771Set the TTL of the outer MPLS label stack entry of a packet.
1772\fIttl\fR should be in the range 0 to 255 inclusive.
1773.
b676167a
SH
1774.IP \fBdec_mpls_ttl\fR
1775Decrement TTL of the outer MPLS label stack entry of a packet. If the TTL
972b5f38
JR
1776is initially zero or decrementing would make it so, no decrement occurs.
1777Instead, a ``packet-in'' message with reason code \fBOFPR_INVALID_TTL\fR
1778is sent to the main controller (id zero), if it has enabled receiving them.
b676167a
SH
1779Processing the current set of actions then stops. However, if the current
1780set of actions was reached through ``resubmit'' then remaining actions in
1781outer levels resume processing.
1782.
96fc46e8
BP
1783.IP \fBnote:\fR[\fIhh\fR]...
1784Does nothing at all. Any number of bytes represented as hex digits
1785\fIhh\fR may be included. Pairs of hex digits may be separated by
1786periods for readability.
e0631927
BP
1787The \fBnote\fR action's format doesn't include an exact length for its
1788payload, so the provided bytes will be padded on the right by enough
1789bytes with value 0 to make the total number 6 more than a multiple of
17908.
f393f81e 1791.
5a6861aa 1792.IP "\fBmove:\fIsrc\fB[\fIstart\fB..\fIend\fB]\->\fIdst\fB[\fIstart\fB..\fIend\fB]\fR"
f393f81e
BP
1793Copies the named bits from field \fIsrc\fR to field \fIdst\fR.
1794\fIsrc\fR and \fIdst\fR must be NXM field names as defined in
1795\fBnicira\-ext.h\fR, e.g. \fBNXM_OF_UDP_SRC\fR or \fBNXM_NX_REG0\fR.
1796Each \fIstart\fR and \fIend\fR pair, which are inclusive, must specify
1797the same number of bits and must fit within its respective field.
1798Shorthands for \fB[\fIstart\fB..\fIend\fB]\fR exist: use
1799\fB[\fIbit\fB]\fR to specify a single bit or \fB[]\fR to specify an
1800entire field.
1801.IP
1802Examples: \fBmove:NXM_NX_REG0[0..5]\->NXM_NX_REG1[26..31]\fR copies the
1803six bits numbered 0 through 5, inclusive, in register 0 into bits 26
1804through 31, inclusive;
5a6861aa 1805\fBmove:NXM_NX_REG0[0..15]\->NXM_OF_VLAN_TCI[]\fR copies the least
f393f81e 1806significant 16 bits of register 0 into the VLAN TCI field.
1a12c419 1807.IP
914624f8
BP
1808In OpenFlow 1.0 through 1.4, \fBmove\fR ordinarily uses an Open
1809vSwitch extension to OpenFlow. In OpenFlow 1.5, \fBmove\fR uses the
d3cb080e 1810OpenFlow 1.5 standard \fBcopy_field\fR action. The ONF has
914624f8
BP
1811also made \fBcopy_field\fR available as an extension to OpenFlow 1.3.
1812Open vSwitch 2.4 and later understands this extension and uses it if a
1813controller uses it, but for backward compatibility with older versions
1814of Open vSwitch, \fBovs\-ofctl\fR does not use it.
f393f81e 1815.
7eb4b1f1
BP
1816.IP "\fBset_field:\fIvalue\fR[/\fImask\fR]\fB\->\fIdst"
1817.IQ "\fBload:\fIvalue\fB\->\fIdst\fB[\fIstart\fB..\fIend\fB]"
1818Loads a literal value into a field or part of a field. With
1819\fBset_field\fR, \fBvalue\fR and the optional \fBmask\fR are given in
1820the customary syntax for field \fIdst\fR, which is expressed as a
1821field name. For example, \fBset_field:00:11:22:33:44:55->eth_src\fR
1822sets the Ethernet source address to 00:11:22:33:44:55. With
1823\fBload\fR, \fIvalue\fR must be an integer value (in decimal or
1824prefixed by \fB0x\fR for hexadecimal) and \fIdst\fR is the NXM or OXM
1825name for the field. For example,
1826\fBload:0x001122334455->OXM_OF_ETH_DST[]\fR has the same effect as the
1827prior \fBset_field\fR example.
1828.IP
1829The two forms exist for historical reasons. Open vSwitch 1.1
1830introduced \fBNXAST_REG_LOAD\fR as a Nicira extension to OpenFlow 1.0
1831and used \fBload\fR to express it. Later, OpenFlow 1.2 introduced a
1832standard \fBOFPAT_SET_FIELD\fR action that was restricted to loading
1833entire fields, so Open vSwitch added the form \fBset_field\fR with
1834this restriction. OpenFlow 1.5 extended \fBOFPAT_SET_FIELD\fR to the
1835point that it became a superset of \fBNXAST_REG_LOAD\fR. Open vSwitch
1836translates either syntax as necessary for the OpenFlow version in use:
1837in OpenFlow 1.0 and 1.1, \fBNXAST_REG_LOAD\fR; in OpenFlow 1.2, 1.3,
1838and 1.4, \fBNXAST_REG_LOAD\fR for \fBload\fR or for loading a
1839subfield, \fBOFPAT_SET_FIELD\fR otherwise; and OpenFlow 1.5 and later,
1840\fBOFPAT_SET_FIELD\fR.
53ddd40a 1841.
bd85dac1
AZ
1842.IP "\fBpush:\fIsrc\fB[\fIstart\fB..\fIend\fB]"
1843Pushes \fIstart\fR to \fIend\fR bits inclusive, in fields
1844on top of the stack.
1845.IP
1846Example: \fBpush:NXM_NX_REG2[0..5]\fR push the value stored in register
18472 bits 0 through 5, inclusive, on to the internal stack.
1848.
1849.IP "\fBpop:\fIdst\fB[\fIstart\fB..\fIend\fB]"
1850Pops from the top of the stack, retrieves the \fIstart\fR to \fIend\fR bits
1851inclusive, from the value popped and store them into the corresponding
1852bits in \fIdst\fR.
1853.
1854.IP
1855Example: \fBpop:NXM_NX_REG2[0..5]\fR pops the value from top of the stack.
1856Set register 2 bits 0 through 5, inclusive, based on bits 0 through 5 from the
1857value just popped.
1858.
f5c45121 1859.
53ddd40a
BP
1860.IP "\fBmultipath(\fIfields\fB, \fIbasis\fB, \fIalgorithm\fB, \fIn_links\fB, \fIarg\fB, \fIdst\fB[\fIstart\fB..\fIend\fB])\fR"
1861Hashes \fIfields\fR using \fIbasis\fR as a universal hash parameter,
1862then the applies multipath link selection \fIalgorithm\fR (with
1863parameter \fIarg\fR) to choose one of \fIn_links\fR output links
1864numbered 0 through \fIn_links\fR minus 1, and stores the link into
43edca57 1865\fIdst\fB[\fIstart\fB..\fIend\fB]\fR, which must be an NXM field as
53ddd40a
BP
1866described above.
1867.IP
4249b547
JB
1868\fIfields\fR must be one of the following:
1869.RS
1870.IP \fBeth_src\fR
1871Hashes Ethernet source address only.
1872.IP \fBsymmetric_l4\fR
1873Hashes Ethernet source, destination, and type, VLAN ID, IPv4/IPv6
1874source, destination, and protocol, and TCP or SCTP (but not UDP)
1875ports. The hash is computed so that pairs of corresponding flows in
1876each direction hash to the same value, in environments where L2 paths
1877are the same in each direction. UDP ports are not included in the
1878hash to support protocols such as VXLAN that use asymmetric ports in
1879each direction.
1880.IP \fBsymmetric_l3l4\fR
1881Hashes IPv4/IPv6 source, destination, and protocol, and TCP or SCTP
1882(but not UDP) ports. Like \fBsymmetric_l4\fR, this is a symmetric
1883hash, but by excluding L2 headers it is more effective in environments
1884with asymmetric L2 paths (e.g. paths involving VRRP IP addresses on a
1885router). Not an effective hash function for protocols other than IPv4
1886and IPv6, which hash to a constant zero.
1887.IP \fBsymmetric_l3l4+udp\fR
1888Like \fBsymmetric_l3l4+udp\fR, but UDP ports are included in the hash.
1889This is a more effective hash when asymmetric UDP protocols such as
1890VXLAN are not a consideration.
1891.RE
1892.IP
1893\fIalgorithm\fR must be one of \fBmodulo_n\fR,
53ddd40a
BP
1894\fBhash_threshold\fR, \fBhrw\fR, and \fBiter_hash\fR. Only
1895the \fBiter_hash\fR algorithm uses \fIarg\fR.
1896.IP
1897Refer to \fBnicira\-ext.h\fR for more details.
3b6a2571 1898.
daff3353
EJ
1899.IP "\fBbundle(\fIfields\fB, \fIbasis\fB, \fIalgorithm\fB, \fIslave_type\fB, slaves:[\fIs1\fB, \fIs2\fB, ...])\fR"
1900Hashes \fIfields\fR using \fIbasis\fR as a universal hash parameter, then
1901applies the bundle link selection \fIalgorithm\fR to choose one of the listed
1902slaves represented as \fIslave_type\fR. Currently the only supported
1903\fIslave_type\fR is \fBofport\fR. Thus, each \fIs1\fR through \fIsN\fR should
1904be an OpenFlow port number. Outputs to the selected slave.
1905.IP
4249b547
JB
1906Currently, \fIfields\fR must be either \fBeth_src\fR, \fBsymmetric_l4\fR, \fBsymmetric_l3l4\fR, or \fBsymmetric_l3l4+udp\fR,
1907and \fIalgorithm\fR must be one of \fBhrw\fR and \fBactive_backup\fR.
daff3353
EJ
1908.IP
1909Example: \fBbundle(eth_src,0,hrw,ofport,slaves:4,8)\fR uses an Ethernet source
1910hash with basis 0, to select between OpenFlow ports 4 and 8 using the Highest
1911Random Weight algorithm.
1912.IP
1913Refer to \fBnicira\-ext.h\fR for more details.
a368bb53
EJ
1914.
1915.IP "\fBbundle_load(\fIfields\fB, \fIbasis\fB, \fIalgorithm\fB, \fIslave_type\fB, \fIdst\fB[\fIstart\fB..\fIend\fB], slaves:[\fIs1\fB, \fIs2\fB, ...])\fR"
1916Has the same behavior as the \fBbundle\fR action, with one exception. Instead
1917of outputting to the selected slave, it writes its selection to
1918\fIdst\fB[\fIstart\fB..\fIend\fB]\fR, which must be an NXM field as described
1919above.
1920.IP
2638c6dc
BP
1921Example: \fBbundle_load(eth_src, 0, hrw, ofport, NXM_NX_REG0[],
1922slaves:4, 8)\fR uses an Ethernet source hash with basis 0, to select
1923between OpenFlow ports 4 and 8 using the Highest Random Weight
1924algorithm, and writes the selection to \fBNXM_NX_REG0[]\fR.
a368bb53
EJ
1925.IP
1926Refer to \fBnicira\-ext.h\fR for more details.
75a75043
BP
1927.
1928.IP "\fBlearn(\fIargument\fR[\fB,\fIargument\fR]...\fB)\fR"
1929This action adds or modifies a flow in an OpenFlow table, similar to
1930\fBovs\-ofctl \-\-strict mod\-flows\fR. The arguments specify the
1931flow's match fields, actions, and other properties, as follows. At
1932least one match criterion and one action argument should ordinarily be
1933specified.
1934.RS
1935.IP \fBidle_timeout=\fIseconds\fR
1936.IQ \fBhard_timeout=\fIseconds\fR
1937.IQ \fBpriority=\fIvalue\fR
45d77538 1938.IQ \fBcookie=\fIvalue\fR
3d6832c2
BP
1939.IQ \fBsend_flow_rem\fR
1940These arguments have the same meaning as in the usual \fBovs\-ofctl\fR
1941flow syntax.
75a75043 1942.
0e553d9c
BP
1943.IP \fBfin_idle_timeout=\fIseconds\fR
1944.IQ \fBfin_hard_timeout=\fIseconds\fR
1945Adds a \fBfin_timeout\fR action with the specified arguments to the
1946new flow. This feature was added in Open vSwitch 1.5.90.
1947.
75a75043
BP
1948.IP \fBtable=\fInumber\fR
1949The table in which the new flow should be inserted. Specify a decimal
1950number between 0 and 254. The default, if \fBtable\fR is unspecified,
1951is table 1.
1952.
35f48b8b
BP
1953.IP \fBdelete_learned\fR
1954This flag enables deletion of the learned flows when the flow with the
1955\fBlearn\fR action is removed. Specifically, when the last
1956\fBlearn\fR action with this flag and particular \fBtable\fR and
1957\fBcookie\fR values is removed, the switch deletes all of the flows in
1958the specified table with the specified cookie.
1959.
1960.IP
1961This flag was added in Open vSwitch 2.4.
1962.
75a75043
BP
1963.IP \fIfield\fB=\fIvalue\fR
1964.IQ \fIfield\fB[\fIstart\fB..\fIend\fB]=\fIsrc\fB[\fIstart\fB..\fIend\fB]\fR
1965.IQ \fIfield\fB[\fIstart\fB..\fIend\fB]\fR
1966Adds a match criterion to the new flow.
1967.IP
1968The first form specifies that \fIfield\fR must match the literal
1969\fIvalue\fR, e.g. \fBdl_type=0x0800\fR. All of the fields and values
1970for \fBovs\-ofctl\fR flow syntax are available with their usual
1971meanings.
1972.IP
1973The second form specifies that \fIfield\fB[\fIstart\fB..\fIend\fB]\fR
1974in the new flow must match \fIsrc\fB[\fIstart\fB..\fIend\fB]\fR taken
1975from the flow currently being processed.
1976.IP
1977The third form is a shorthand for the second form. It specifies that
1978\fIfield\fB[\fIstart\fB..\fIend\fB]\fR in the new flow must match
1979\fIfield\fB[\fIstart\fB..\fIend\fB]\fR taken from the flow currently
1980being processed.
1981.
1982.IP \fBload:\fIvalue\fB\->\fIdst\fB[\fIstart\fB..\fIend\fB]
1983.IQ \fBload:\fIsrc\fB[\fIstart\fB..\fIend\fB]\->\fIdst\fB[\fIstart\fB..\fIend\fB]
1984.
1985Adds a \fBload\fR action to the new flow.
1986.IP
1987The first form loads the literal \fIvalue\fR into bits \fIstart\fR
1988through \fIend\fR, inclusive, in field \fIdst\fR. Its syntax is the
1989same as the \fBload\fR action described earlier in this section.
1990.IP
1991The second form loads \fIsrc\fB[\fIstart\fB..\fIend\fB]\fR, a value
1992from the flow currently being processed, into bits \fIstart\fR
1993through \fIend\fR, inclusive, in field \fIdst\fR.
1994.
1995.IP \fBoutput:\fIfield\fB[\fIstart\fB..\fIend\fB]\fR
1996Add an \fBoutput\fR action to the new flow's actions, that outputs to
1997the OpenFlow port taken from \fIfield\fB[\fIstart\fB..\fIend\fB]\fR,
1998which must be an NXM field as described above.
1999.RE
2000.IP
2001For best performance, segregate learned flows into a table (using
2002\fBtable=\fInumber\fR) that is not used for any other flows except
2003possibly for a lowest-priority ``catch-all'' flow, that is, a flow
2004with no match criteria. (This is why the default \fBtable\fR is 1, to
2005keep the learned flows separate from the primary flow table 0.)
c4f5d00b 2006.RE
a9b4a41a 2007.
8dd54666 2008.RS
8dd54666 2009.
b19e8793
IY
2010.IP \fBclear_actions\fR
2011Clears all the actions in the action set immediately.
2012.
7fdb60a7
SH
2013.IP \fBwrite_actions(\fR[\fIaction\fR][\fB,\fIaction\fR...]\fB)
2014Add the specific actions to the action set. The syntax of
2015\fIactions\fR is the same as in the \fBactions=\fR field. The action
2016set is carried between flow tables and then executed at the end of the
2017pipeline.
2018.
2019.IP
2020The actions in the action set are applied in the following order, as
2021required by the OpenFlow specification, regardless of the order in
2022which they were added to the action set. Except as specified
2023otherwise below, the action set only holds at most a single action of
2024each type. When more than one action of a single type is written to
2025the action set, the one written later replaces the earlier action:
2026.
2027.RS
2028.IP 1.
2029\fBstrip_vlan\fR
2030.IQ
2031\fBpop_mpls\fR
2032.
2033.IP 2.
2034\fBpush_mpls\fR
2035.
2036.IP 3.
2037\fBpush_vlan\fR
2038.
2039.IP 4.
2040\fBdec_ttl\fR
2041.IQ
2042\fBdec_mpls_ttl\fR
2043.
2044.IP 5.
2045\fBload\fR
2046.IQ
1b0ee636
TG
2047\fBmove\fR
2048.IQ
7fdb60a7
SH
2049\fBmod_dl_dst\fR
2050.IQ
2051\fBmod_dl_src\fR
2052.IQ
2053\fBmod_nw_dst\fR
2054.IQ
2055\fBmod_nw_src\fR
2056.IQ
2057\fBmod_nw_tos\fR
2058.IQ
ff14eb7a
JR
2059\fBmod_nw_ecn\fR
2060.IQ
0c20dbe4
JR
2061\fBmod_nw_ttl\fR
2062.IQ
7fdb60a7
SH
2063\fBmod_tp_dst\fR
2064.IQ
2065\fBmod_tp_src\fR
2066.IQ
2067\fBmod_vlan_pcp\fR
2068.IQ
2069\fBmod_vlan_vid\fR
2070.IQ
2071\fBset_field\fR
2072.IQ
2073\fBset_tunnel\fR
2074.IQ
2075\fBset_tunnel64\fR
2076.IQ
2077The action set can contain any number of these actions, with
1b0ee636
TG
2078cumulative effect. They will be applied in the order as added.
2079That is, when multiple actions modify the same part of a field,
2080the later modification takes effect, and when they modify
2081different parts of a field (or different fields), then both
7fdb60a7
SH
2082modifications are applied.
2083.
2084.IP 6.
2085\fBset_queue\fR
2086.
2087.IP 7.
2088\fBgroup\fR
2089.IQ
2090\fBoutput\fR
2091.IQ
2e34a6a3
SS
2092\fBresubmit\fR
2093.IQ
2094If more than one of these actions is present, then the one listed
2095earliest above is executed and the others are ignored, regardless of
2096the order in which they were added to the action set. (If none of these
2097actions is present, the action set has no real effect, because the
2098modified packet is not sent anywhere and thus the modifications are
2099not visible.)
7fdb60a7
SH
2100.RE
2101.IP
2102Only the actions listed above may be written to the action set.
2103.
4cceacb9
JS
2104.IP \fBwrite_metadata\fB:\fIvalue\fR[/\fImask\fR]
2105Updates the metadata field for the flow. If \fImask\fR is omitted, the
2106metadata field is set exactly to \fIvalue\fR; if \fImask\fR is specified, then
2107a 1-bit in \fImask\fR indicates that the corresponding bit in the metadata
2108field will be replaced with the corresponding bit from \fIvalue\fR. Both
2109\fIvalue\fR and \fImask\fR are 64-bit values that are decimal by default; use
2110a \fB0x\fR prefix to specify them in hexadecimal.
2111.
3200ed58
JR
2112.IP \fBmeter\fR:\fImeter_id\fR
2113Apply the \fImeter_id\fR before any other actions. If a meter band rate is
2114exceeded, the packet may be dropped, or modified, depending on the meter
2115band type. See the description of the \fBMeter Table Commands\fR, above,
2116for more details.
2117.
8dd54666
IY
2118.IP \fBgoto_table\fR:\fItable\fR
2119Indicates the next table in the process pipeline.
8dd54666 2120.
0e553d9c
BP
2121.IP "\fBfin_timeout(\fIargument\fR[\fB,\fIargument\fR]\fB)"
2122This action changes the idle timeout or hard timeout, or both, of this
2123OpenFlow rule when the rule matches a TCP packet with the FIN or RST
2124flag. When such a packet is observed, the action reduces the rule's
2125timeouts to those specified on the action. If the rule's existing
2126timeout is already shorter than the one that the action specifies,
2127then that timeout is unaffected.
2128.IP
2129\fIargument\fR takes the following forms:
2130.RS
2131.IP "\fBidle_timeout=\fIseconds\fR"
2132Causes the flow to expire after the given number of seconds of
2133inactivity.
2134.
2135.IP "\fBhard_timeout=\fIseconds\fR"
2136Causes the flow to expire after the given number of seconds,
2137regardless of activity. (\fIseconds\fR specifies time since the
2138flow's creation, not since the receipt of the FIN or RST.)
2139.RE
2140.IP
2141This action was added in Open vSwitch 1.5.90.
29089a54
RL
2142.
2143.IP "\fBsample(\fIargument\fR[\fB,\fIargument\fR]...\fB)\fR"
2144Samples packets and sends one sample for every sampled packet.
2145.IP
2146\fIargument\fR takes the following forms:
2147.RS
2148.IP "\fBprobability=\fIpackets\fR"
2149The number of sampled packets out of 65535. Must be greater or equal to 1.
2150.IP "\fBcollector_set_id=\fIid\fR"
2151The unsigned 32-bit integer identifier of the set of sample collectors
2152to send sampled packets to. Defaults to 0.
2153.IP "\fBobs_domain_id=\fIid\fR"
2154When sending samples to IPFIX collectors, the unsigned 32-bit integer
2155Observation Domain ID sent in every IPFIX flow record. Defaults to 0.
2156.IP "\fBobs_point_id=\fIid\fR"
2157When sending samples to IPFIX collectors, the unsigned 32-bit integer
2158Observation Point ID sent in every IPFIX flow record. Defaults to 0.
2159.RE
2160.IP
2161Refer to \fBovs\-vswitchd.conf.db\fR(8) for more details on
2162configuring sample collector sets.
2163.IP
2164This action was added in Open vSwitch 1.10.90.
2165.
848e8809 2166.IP "\fBexit\fR"
7fdb60a7
SH
2167This action causes Open vSwitch to immediately halt execution of
2168further actions. Those actions which have already been executed are
2169unaffected. Any further actions, including those which may be in
2170other tables, or different levels of the \fBresubmit\fR call stack,
2171are ignored. Actions in the action set is still executed (specify
2172\fBclear_actions\fR before \fBexit\fR to discard them).
18080541
BP
2173.
2174.IP "\fBconjunction(\fIid\fB, \fIk\fB/\fIn\fR\fB)\fR"
2175An individual OpenFlow flow can match only a single value for each
2176field. However, situations often arise where one wants to match one
2177of a set of values within a field or fields. For matching a single
2178field against a set, it is straightforward and efficient to add
2179multiple flows to the flow table, one for each value in the set. For
2180example, one might use the following flows to send packets with IP
2181source address \fIa\fR, \fIb\fR, \fIc\fR, or \fId\fR to the OpenFlow
2182controller:
2183.RS +1in
2184.br
2185\fBip,ip_src=\fIa\fB actions=controller\fR
2186.br
2187\fBip,ip_src=\fIb\fB actions=controller\fR
2188.br
2189\fBip,ip_src=\fIc\fB actions=controller\fR
2190.br
2191\fBip,ip_src=\fId\fB actions=controller\fR
2192.br
2193.RE
2194.IP
2195Similarly, these flows send packets with IP destination address
2196\fIe\fR, \fIf\fR, \fIg\fR, or \fIh\fR to the OpenFlow controller:
2197.RS +1in
2198.br
2199\fBip,ip_dst=\fIe\fB actions=controller\fR
2200.br
2201\fBip,ip_dst=\fIf\fB actions=controller\fR
2202.br
2203\fBip,ip_dst=\fIg\fB actions=controller\fR
2204.br
2205\fBip,ip_dst=\fIh\fB actions=controller\fR
2206.br
2207.RE
2208.IP
2209Installing all of the above flows in a single flow table yields a
2210disjunctive effect: a packet is sent to the controller if \fBip_src\fR
2211\[mo] {\fIa\fR,\fIb\fR,\fIc\fR,\fId\fR} or \fBip_dst\fR \[mo]
2212{\fIe\fR,\fIf\fR,\fIg\fR,\fIh\fR} (or both). (Pedantically, if both
2213of the above sets of flows are present in the flow table, they should
2214have different priorities, because OpenFlow says that the results are
2215undefined when two flows with same priority can both match a single
2216packet.)
2217.IP
2218Suppose, on the other hand, one wishes to match conjunctively, that
2219is, to send a packet to the controller only if both \fBip_src\fR \[mo]
2220{\fIa\fR,\fIb\fR,\fIc\fR,\fId\fR} and \fBip_dst\fR \[mo]
2221{\fIe\fR,\fIf\fR,\fIg\fR,\fIh\fR}. This requires 4 \[mu] 4 = 16
2222flows, one for each possible pairing of \fBip_src\fR and \fBip_dst\fR.
2223That is acceptable for our small example, but it does not gracefully
2224extend to larger sets or greater numbers of dimensions.
2225.IP
2226The \fBconjunction\fR action is a solution for conjunctive matches
2227that is built into Open vSwitch. A \fBconjunction\fR action ties
2228groups of individual OpenFlow flows into higher-level ``conjunctive
2229flows''. Each group corresponds to one dimension, and each flow
2230within the group matches one possible value for the dimension. A
2231packet that matches one flow from each group matches the conjunctive
2232flow.
2233.IP
2234To implement a conjunctive flow with \fBconjunction\fR, assign the
2235conjunctive flow a 32-bit \fIid\fR, which must be unique within an
2236OpenFlow table. Assign each of the \fIn\fR \[>=] 2 dimensions a
2237unique number from 1 to \fIn\fR; the ordering is unimportant. Add one
2238flow to the OpenFlow flow table for each possible value of each
2239dimension with \fBconjunction(\fIid, \fIk\fB/\fIn\fB)\fR as the flow's
2240actions, where \fIk\fR is the number assigned to the flow's dimension.
2241Together, these flows specify the conjunctive flow's match condition.
2242When the conjunctive match condition is met, Open vSwitch looks up one
2243more flow that specifies the conjunctive flow's actions and receives
2244its statistics. This flow is found by setting \fBconj_id\fR to the
2245specified \fIid\fR and then again searching the flow table.
2246.IP
2247The following flows provide an example. Whenever the IP source is one
2248of the values in the flows that match on the IP source (dimension 1 of
22492), \fIand\fR the IP destination is one of the values in the flows
2250that match on IP destination (dimension 2 of 2), Open vSwitch searches
2251for a flow that matches \fBconj_id\fR against the conjunction ID
2252(1234), finding the first flow listed below.
2253.RS +1in
2254.br
2255.B "conj_id=1234 actions=controller"
2256.br
2257.B "ip,ip_src=10.0.0.1 actions=conjunction(1234, 1/2)"
2258.br
2259.B "ip,ip_src=10.0.0.4 actions=conjunction(1234, 1/2)"
2260.br
2261.B "ip,ip_src=10.0.0.6 actions=conjunction(1234, 1/2)"
2262.br
2263.B "ip,ip_src=10.0.0.7 actions=conjunction(1234, 1/2)"
2264.br
2265.B "ip,ip_dst=10.0.0.2 actions=conjunction(1234, 2/2)"
2266.br
2267.B "ip,ip_dst=10.0.0.5 actions=conjunction(1234, 2/2)"
2268.br
2269.B "ip,ip_dst=10.0.0.7 actions=conjunction(1234, 2/2)"
2270.br
2271.B "ip,ip_dst=10.0.0.8 actions=conjunction(1234, 2/2)"
2272.RE
2273.IP
2274Many subtleties exist:
2275.RS
2276.IP \(bu
2277In the example above, every flow in a single dimension has the same
2278form, that is, dimension 1 matches on \fBip_src\fR, dimension 2 on
2279\fBip_dst\fR, but this is not a requirement. Different flows within a
2280dimension may match on different bits within a field (e.g. IP network
2281prefixes of different lengths, or TCP/UDP port ranges as bitwise
2282matches), or even on entirely different fields (e.g. to match packets
2283for TCP source port 80 or TCP destination port 80).
2284.IP \(bu
2285The flows within a dimension can vary their matches across more than
2286one field, e.g. to match only specific pairs of IP source and
2287destination addresses or L4 port numbers.
2288.IP \(bu
2289A flow may have multiple \fBconjunction\fR actions, with different
2290\fIid\fR values. This is useful for multiple conjunctive flows with
2291overlapping sets. If one conjunctive flow matches packets with both
2292\fBip_src\fR \[mo] {\fIa\fR,\fIb\fR} and \fBip_dst\fR \[mo]
2293{\fId\fR,\fIe\fR} and a second conjunctive flow matches \fBip_src\fR
2294\[mo] {\fIb\fR,\fIc\fR} and \fBip_dst\fR \[mo] {\fIf\fR,\fIg\fR}, for
2295example, then the flow that matches \fBip_src=\fIb\fR would have two
2296\fBconjunction\fR actions, one for each conjunctive flow. The order
2297of \fBconjunction\fR actions within a list of actions is not
2298significant.
2299.IP \(bu
f08e39dd
BP
2300A flow with \fBconjunction\fR actions may also include \fBnote\fR
2301actions for annotations, but not any other kind of actions. (They
2302would not be useful because they would never be executed.)
18080541
BP
2303.IP \(bu
2304All of the flows that constitute a conjunctive flow with a given
2305\fIid\fR must have the same priority. (Flows with the same \fIid\fR
2306but different priorities are currently treated as different
2307conjunctive flows, that is, currently \fIid\fR values need only be
2308unique within an OpenFlow table at a given priority. This behavior
2309isn't guaranteed to stay the same in later releases, so please use
2310\fIid\fR values unique within an OpenFlow table.)
2311.IP \(bu
2312Conjunctive flows must not overlap with each other, at a given
2313priority, that is, any given packet must be able to match at most one
2314conjunctive flow at a given priority. Overlapping conjunctive flows
2315yield unpredictable results.
2316.IP \(bu
2317Following a conjunctive flow match, the search for the flow with
2318\fBconj_id=\fIid\fR is done in the same general-purpose way as other flow
2319table searches, so one can use flows with \fBconj_id=\fIid\fR to act
2320differently depending on circumstances. (One exception is that the
2321search for the \fBconj_id=\fIid\fR flow itself ignores conjunctive flows,
2322to avoid recursion.) If the search with \fBconj_id=\fIid\fR fails, Open
2323vSwitch acts as if the conjunctive flow had not matched at all, and
2324continues searching the flow table for other matching flows.
2325.IP \(bu
2326OpenFlow prerequisite checking occurs for the flow with
2327\fBconj_id=\fIid\fR in the same way as any other flow, e.g. in an
2328OpenFlow 1.1+ context, putting a \fBmod_nw_src\fR action into the
2329example above would require adding an \fBip\fR match, like this:
2330.RS +1in
2331.br
2332.B "conj_id=1234,ip actions=mod_nw_src:1.2.3.4,controller"
2333.br
2334.RE
2335.IP \(bu
2336OpenFlow prerequisite checking also occurs for the individual flows
2337that comprise a conjunctive match in the same way as any other flow.
2338.IP \(bu
2339The flows that constitute a conjunctive flow do not have useful
2340statistics. They are never updated with byte or packet counts, and so
2341on. (For such a flow, therefore, the idle and hard timeouts work much
2342the same way.)
2343.IP \(bu
2344Conjunctive flows can be a useful building block for negation, that
2345is, inequality matches like \fBtcp_src\fR \[!=] 80. To implement an
2346inequality match, convert it to a pair of range matches, e.g. 0 \[<=]
2347\fBtcp_src\ < 80 and 80 < \fBtcp_src\fR \[<=] 65535, then convert each
2348of the range matches into a collection of bitwise matches as explained
2349above in the description of \fBtcp_src\fR.
2350.IP \(bu
2351Sometimes there is a choice of which flows include a particular match.
2352For example, suppose that we added an extra constraint to our example,
2353to match on \fBip_src\fR \[mo] {\fIa\fR,\fIb\fR,\fIc\fR,\fId\fR} and
2354\fBip_dst\fR \[mo] {\fIe\fR,\fIf\fR,\fIg\fR,\fIh\fR} and \fBtcp_dst\fR
2355= \fIi\fR. One way to implement this is to add the new constraint to
2356the \fBconj_id\fR flow, like this:
2357.RS +1in
2358.br
2359\fBconj_id=1234,tcp,tcp_dst=\fIi\fB actions=mod_nw_src:1.2.3.4,controller\fR
2360.br
2361.RE
2362.IP
2363\fIbut this is not recommended\fR because of the cost of the extra
2364flow table lookup. Instead, add the constraint to the individual
2365flows, either in one of the dimensions or (slightly better) all of
2366them.
2367.IP \(bu
2368A conjunctive match must have \fIn\fR \[>=] 2 dimensions (otherwise a
2369conjunctive match is not necessary). Open vSwitch enforces this.
2370.IP \(bu
2371Each dimension within a conjunctive match should ordinarily have more
2372than one flow. Open vSwitch does not enforce this.
2373.RE
2374.IP
2375The \fBconjunction\fR action and \fBconj_id\fR field were introduced
2376in Open vSwitch 2.4.
24362cd6 2377.RE
848e8809 2378.
064af421 2379.PP
e729e793
JP
2380An opaque identifier called a cookie can be used as a handle to identify
2381a set of flows:
2382.
623e1caf
JP
2383.IP \fBcookie=\fIvalue\fR
2384.
2385A cookie can be associated with a flow using the \fBadd\-flow\fR,
2386\fBadd\-flows\fR, and \fBmod\-flows\fR commands. \fIvalue\fR can be any
238764-bit number and need not be unique among flows. If this field is
2388omitted, a default cookie value of 0 is used.
2389.
2390.IP \fBcookie=\fIvalue\fR\fB/\fImask\fR
e729e793 2391.
e729e793 2392When using NXM, the cookie can be used as a handle for querying,
623e1caf
JP
2393modifying, and deleting flows. \fIvalue\fR and \fImask\fR may be
2394supplied for the \fBdel\-flows\fR, \fBmod\-flows\fR, \fBdump\-flows\fR, and
2395\fBdump\-aggregate\fR commands to limit matching cookies. A 1-bit in
2396\fImask\fR indicates that the corresponding bit in \fIcookie\fR must
2397match exactly, and a 0-bit wildcards that bit. A mask of \-1 may be used
2398to exactly match a cookie.
2399.IP
2400The \fBmod\-flows\fR command can update the cookies of flows that
2401match a cookie by specifying the \fIcookie\fR field twice (once with a
2402mask for matching and once without to indicate the new value):
2403.RS
2404.IP "\fBovs\-ofctl mod\-flows br0 cookie=1,actions=normal\fR"
2405Change all flows' cookies to 1 and change their actions to \fBnormal\fR.
2406.IP "\fBovs\-ofctl mod\-flows br0 cookie=1/\-1,cookie=2,actions=normal\fR"
2407Update cookies with a value of 1 to 2 and change their actions to
2408\fBnormal\fR.
2409.RE
2410.IP
2411The ability to match on cookies was added in Open vSwitch 1.5.0.
8cce2125
JP
2412.
2413.PP
4b6b46ce
BP
2414The following additional field sets the priority for flows added by
2415the \fBadd\-flow\fR and \fBadd\-flows\fR commands. For
2416\fBmod\-flows\fR and \fBdel\-flows\fR when \fB\-\-strict\fR is
2417specified, priority must match along with the rest of the flow
623e1caf 2418specification. For \fBmod-flows\fR without \fB\-\-strict\fR,
fdb3539e
BP
2419priority is only significant if the command creates a new flow, that
2420is, non-strict \fBmod\-flows\fR does not match on priority and will
2421not change the priority of existing flows. Other commands do not
2422allow priority to be specified.
a9b4a41a 2423.
064af421
BP
2424.IP \fBpriority=\fIvalue\fR
2425The priority at which a wildcarded entry will match in comparison to
2426others. \fIvalue\fR is a number between 0 and 65535, inclusive. A higher
2427\fIvalue\fR will match before a lower one. An exact-match entry will always
2428have priority over an entry containing wildcards, so it has an implicit
2429priority value of 65535. When adding a flow, if the field is not specified,
2430the flow's priority will default to 32768.
4530afba
BP
2431.IP
2432OpenFlow leaves behavior undefined when two or more flows with the
2433same priority can match a single packet. Some users expect
2434``sensible'' behavior, such as more specific flows taking precedence
2435over less specific flows, but OpenFlow does not specify this and Open
2436vSwitch does not implement it. Users should therefore take care to
2437use priorities to ensure the behavior that they expect.
a9b4a41a 2438.
064af421 2439.PP
fdb3539e
BP
2440The \fBadd\-flow\fR, \fBadd\-flows\fR, and \fBmod\-flows\fR commands
2441support the following additional options. These options affect only
2442new flows. Thus, for \fBadd\-flow\fR and \fBadd\-flows\fR, these
2443options are always significant, but for \fBmod\-flows\fR they are
2444significant only if the command creates a new flow, that is, their
a993007b 2445values do not update or affect existing flows.
a9b4a41a 2446.
fdb3539e 2447.IP "\fBidle_timeout=\fIseconds\fR"
064af421 2448Causes the flow to expire after the given number of seconds of
fdb3539e
BP
2449inactivity. A value of 0 (the default) prevents a flow from expiring
2450due to inactivity.
a9b4a41a 2451.
064af421
BP
2452.IP \fBhard_timeout=\fIseconds\fR
2453Causes the flow to expire after the given number of seconds,
2454regardless of activity. A value of 0 (the default) gives the flow no
2455hard expiration deadline.
a9b4a41a 2456.
ca26eb44
RB
2457.IP "\fBimportance=\fIvalue\fR"
2458Sets the importance of a flow. The flow entry eviction mechanism can
2459use importance as a factor in deciding which flow to evict. A value
2460of 0 (the default) makes the flow non-evictable on the basis of
2461importance. Specify a value between 0 and 65535.
2462.IP
2463Only OpenFlow 1.4 and later support \fBimportance\fR.
2464.
a993007b
BP
2465.IP "\fBsend_flow_rem\fR"
2466Marks the flow with a flag that causes the switch to generate a ``flow
2467removed'' message and send it to interested controllers when the flow
2468later expires or is removed.
2469.
2470.IP "\fBcheck_overlap\fR"
2471Forces the switch to check that the flow match does not overlap that
2472of any different flow with the same priority in the same table. (This
2473check is expensive so it is best to avoid it.)
2474.
064af421 2475.PP
4e312e69 2476The \fBdump\-flows\fR, \fBdump\-aggregate\fR, \fBdel\-flow\fR
6d5d1f3b 2477and \fBdel\-flows\fR commands support these additional optional fields:
a9b4a41a 2478.
064af421
BP
2479.TP
2480\fBout_port=\fIport\fR
c6100d92 2481If set, a matching flow must include an output action to \fIport\fR,
60a0b9e5 2482which must be an OpenFlow port number or name (e.g. \fBlocal\fR).
a9b4a41a 2483.
6d5d1f3b
BP
2484.TP
2485\fBout_group=\fIport\fR
2486If set, a matching flow must include an \fBgroup\fR action naming
2487\fIgroup\fR, which must be an OpenFlow group number. This field
2488is supported in Open vSwitch 2.5 and later and requires OpenFlow 1.1
2489or later.
2490.
064af421 2491.SS "Table Entry Output"
a9b4a41a 2492.
4e312e69 2493The \fBdump\-tables\fR and \fBdump\-aggregate\fR commands print information
064af421 2494about the entries in a datapath's tables. Each line of output is a
f27f2134
BP
2495flow entry as described in \fBFlow Syntax\fR, above, plus some
2496additional fields:
a9b4a41a 2497.
f27f2134
BP
2498.IP \fBduration=\fIsecs\fR
2499The time, in seconds, that the entry has been in the table.
2500\fIsecs\fR includes as much precision as the switch provides, possibly
2501to nanosecond resolution.
a9b4a41a 2502.
064af421
BP
2503.IP \fBn_packets\fR
2504The number of packets that have matched the entry.
a9b4a41a 2505.
064af421
BP
2506.IP \fBn_bytes\fR
2507The total number of bytes from packets that have matched the entry.
a9b4a41a 2508.
064af421 2509.PP
f27f2134
BP
2510The following additional fields are included only if the switch is
2511Open vSwitch 1.6 or later and the NXM flow format is used to dump the
2512flow (see the description of the \fB\-\-flow-format\fR option below).
2513The values of these additional fields are approximations only and in
2514particular \fBidle_age\fR will sometimes become nonzero even for busy
2515flows.
2516.
2517.IP \fBhard_age=\fIsecs\fR
2518The integer number of seconds since the flow was added or modified.
2519\fBhard_age\fR is displayed only if it differs from the integer part
2520of \fBduration\fR. (This is separate from \fBduration\fR because
2521\fBmod\-flows\fR restarts the \fBhard_timeout\fR timer without zeroing
2522\fBduration\fR.)
2523.
2524.IP \fBidle_age=\fIsecs\fR
2525The integer number of seconds that have passed without any packets
2526passing through the flow.
a9b4a41a 2527.
7395c052
NZ
2528.SS "Group Syntax"
2529.PP
2530Some \fBovs\-ofctl\fR commands accept an argument that describes a group or
2531groups. Such flow descriptions comprise a series
2532\fIfield\fB=\fIvalue\fR assignments, separated by commas or white
2533space. (Embedding spaces into a group description normally requires
2534quoting to prevent the shell from breaking the description into
2535multiple arguments.). Unless noted otherwise only the last instance
2536of each field is honoured.
2537.PP
2538.IP \fBgroup_id=\fIid\fR
2539The integer group id of group.
19187a71 2540When this field is specified in \fBdel\-groups\fR or \fBdump\-groups\fR,
7395c052
NZ
2541the keyword "all" may be used to designate all groups.
2542.
2543This field is required.
2544
2545
2546.IP \fBtype=\fItype\fR
bdbb8426 2547The type of the group. The \fBadd-group\fR, \fBadd-groups\fR and
ed1d5ef3 2548\fBmod-groups\fR commands require this field. It is prohibited for
bdbb8426 2549other commands. The following keywords designated the allowed types:
7395c052
NZ
2550.RS
2551.IP \fBall\fR
2552Execute all buckets in the group.
2553.IP \fBselect\fR
2554Execute one bucket in the group.
2555The switch should select the bucket in such a way that should implement
2556equal load sharing is achieved. The switch may optionally select the
2557bucket based on bucket weights.
2558.IP \fBindirect\fR
2559Executes the one bucket in the group.
2560.IP \fBff\fR
2561.IQ \fBfast_failover\fR
2562Executes the first live bucket in the group which is associated with
2563a live port or group.
2564.RE
2565
bdbb8426
SH
2566.IP \fBcommand_bucket_id=\fIid\fR
2567The bucket to operate on. The \fBinsert-buckets\fR and \fBremove-buckets\fR
2568commands require this field. It is prohibited for other commands.
2569\fIid\fR may be an integer or one of the following keywords:
2570.RS
2571.IP \fBall\fR
2572Operate on all buckets in the group.
2573Only valid when used with the \fBremove-buckets\fR command in which
2574case the effect is to remove all buckets from the group.
2575.IP \fBfirst\fR
2576Operate on the first bucket present in the group.
2577In the case of the \fBinsert-buckets\fR command the effect is to
2578insert new bucets just before the first bucket already present in the group;
2579or to replace the buckets of the group if there are no buckets already present
2580in the group.
2581In the case of the \fBremove-buckets\fR command the effect is to
2582remove the first bucket of the group; or do nothing if there are no
2583buckets present in the group.
2584.IP \fBlast\fR
2585Operate on the last bucket present in the group.
2586In the case of the \fBinsert-buckets\fR command the effect is to
2587insert new bucets just after the last bucket already present in the group;
2588or to replace the buckets of the group if there are no buckets already present
2589in the group.
2590In the case of the \fBremove-buckets\fR command the effect is to
2591remove the last bucket of the group; or do nothing if there are no
2592buckets present in the group.
2593.RE
2594.IP
2595If \fIid\fR is an integer then it should correspond to the \fBbucket_id\fR
2596of a bucket present in the group.
2597In case of the \fBinsert-buckets\fR command the effect is to
2598insert buckets just before the bucket in the group whose \fBbucket_id\fR is
2599\fIid\fR.
2600In case of the \fBiremove-buckets\fR command the effect is to
2601remove the in the group whose \fBbucket_id\fR is \fIid\fR.
2602It is an error if there is no bucket persent group in whose \fBbucket_id\fR is
2603\fIid\fR.
2604
b879391e
SH
2605.IP \fBselection_method\fR=\fImethod\fR
2606The selection method used to select a bucket for a select group.
2607This is a string of 1 to 15 bytes in length known to lower layers.
2608This field is optional for \fBadd\-group\fR, \fBadd\-groups\fR and
2609\fBmod\-group\fR commands on groups of type \fBselect\fR. Prohibited
2610otherwise. The default value is the empty string.
2611.IP
68dfc25b
BP
2612Other than the empty string, \fBhash\fR is currently the only defined
2613selection method.
2614.IP
b879391e
SH
2615This option will use a Netronome OpenFlow extension which is only supported
2616when using Open vSwitch 2.4 and later with OpenFlow 1.5 and later.
2617
2618.IP \fBselection_method_param\fR=\fIparam\fR
261964-bit integer parameter to the selection method selected by the
2620\fBselection_method\fR field. The parameter's use is defined by the
2621lower-layer that implements the \fBselection_method\fR. It is optional if
2622the \fBselection_method\fR field is specified as a non-empty string.
2623Prohibited otherwise. The default value is zero.
2624.IP
2625This option will use a Netronome OpenFlow extension which is only supported
2626when using Open vSwitch 2.4 and later with OpenFlow 1.5 and later.
2627
68dfc25b
BP
2628.IP \fBfields\fR=\fIfield\fR
2629.IQ \fBfields(\fIfield\fR[\fB=\fImask\fR]\fR...\fB)\fR
b879391e
SH
2630The field parameters to selection method selected by the
2631\fBselection_method\fR field. The syntax is described in \fBFlow Syntax\fR
2632with the additional restrictions that if a value is provided it is
2633treated as a wildcard mask and wildcard masks following a slash are
2634prohibited. The pre-requisites of fields must be provided by any flows that
2635output to the group. The use of the fields is defined by the lower-layer
2636that implements the \fBselection_method\fR. They are optional if the
2637\fBselection_method\fR field is specified as a non-empty string.
2638Prohibited otherwise. The default is no fields.
2639.IP
2640This option will use a Netronome OpenFlow extension which is only supported
2641when using Open vSwitch 2.4 and later with OpenFlow 1.5 and later.
2642
7395c052
NZ
2643.IP \fBbucket\fR=\fIbucket_parameters\fR
2644The \fBadd-group\fR, \fBadd-groups\fR and \fBmod-group\fR commands
2645require at least one bucket field. Bucket fields must appear after
2646all other fields.
2647.
2648Multiple bucket fields to specify multiple buckets.
2649The order in which buckets are specified corresponds to their order in
2650the group. If the type of the group is "indirect" then only one group may
2651be specified.
2652.
2653\fIbucket_parameters\fR consists of a list of \fIfield\fB=\fIvalue\fR
2654assignments, separated by commas or white space followed by a
2655comma-separated list of actions.
7395c052
NZ
2656The fields for \fIbucket_parameters\fR are:
2657.
2658.RS
2d5d050c
SH
2659.IP \fBbucket_id=\fIid\fR
2660The 32-bit integer group id of the bucket. Values greater than
26610xffffff00 are reserved.
2662.
2663This field was added in Open vSwitch 2.4 to conform with the OpenFlow
d3cb080e 26641.5 specification. It is not supported when earlier versions
2d5d050c
SH
2665of OpenFlow are used. Open vSwitch will automatically allocate bucket
2666ids when they are not specified.
f1457c26
TG
2667.IP \fBactions=\fR[\fIaction\fR][\fB,\fIaction\fR...]\fR
2668The syntax of actions are identical to the \fBactions=\fR field described in
2669\fBFlow Syntax\fR above. Specyfing \fBactions=\fR is optional, any unknown
2670bucket parameter will be interpreted as an action.
7395c052
NZ
2671.IP \fBweight=\fIvalue\fR
2672The relative weight of the bucket as an integer. This may be used by the switch
2673during bucket select for groups whose \fBtype\fR is \fBselect\fR.
2674.IP \fBwatch_port=\fIport\fR
2675Port used to determine liveness of group.
2676This or the \fBwatch_group\fR field is required
2677for groups whose \fBtype\fR is \fBff\fR or \fBfast_failover\fR.
2678.IP \fBwatch_group=\fIgroup_id\fR
2679Group identifier of group used to determine liveness of group.
2680This or the \fBwatch_port\fR field is required
2681for groups whose \fBtype\fR is \fBff\fR or \fBfast_failover\fR.
2682.RE
2683.
3200ed58
JR
2684.SS "Meter Syntax"
2685.PP
2686The meter table commands accept an argument that describes a meter.
2687Such meter descriptions comprise a series \fIfield\fB=\fIvalue\fR
2688assignments, separated by commas or white space.
2689(Embedding spaces into a group description normally requires
2690quoting to prevent the shell from breaking the description into
2691multiple arguments.). Unless noted otherwise only the last instance
2692of each field is honoured.
2693.PP
2694.IP \fBmeter=\fIid\fR
2695The integer meter id of the meter.
2696When this field is specified in \fBdel-meter\fR, \fBdump-meter\fR, or
2697\fBmeter-stats\fR, the keyword "all" may be used to designate all meters.
2698.
2699This field is required, exept for \fBmeter-stats\fR, which dumps all stats
2700when this field is not specified.
2701
2702.IP \fBkbps\fR
2703.IQ \fBpktps\fR
2704The unit for the meter band rate parameters, either kilobits per second, or
2705packets per second, respectively. One of these must be specified. The burst
2706size unit corresponds to the rate unit by dropping the "per second", i.e.,
2707burst is in units of kilobits or packets, respectively.
2708
2709.IP \fBburst\fR
2710Specify burst size for all bands, or none of them, if this flag is not given.
2711
2712.IP \fBstats\fR
2713Collect meter and band statistics.
2714
2715.IP \fBbands\fR=\fIband_parameters\fR
2716The \fBadd-meter\fR and \fBmod-meter\fR commands require at least one
2717band specification. Bands must appear after all other fields.
2718.RS
2719.IP \fBtype=\fItype\fR
2720The type of the meter band. This keyword starts a new band specification.
2721Each band specifies a rate above which the band is to take some action. The
2722action depends on the band type. If multiple bands' rate is exceeded, then
2723the band with the highest rate among the exceeded bands is selected.
2724The following keywords designate the allowed
2725meter band types:
2726.RS
2727.IP \fBdrop\fR
2728Drop packets exceeding the band's rate limit.
2729.RE
2730.
2731.IP "The other \fIband_parameters\fR are:"
2732.IP \fBrate=\fIvalue\fR
2733The relative rate limit for this band, in kilobits per second or packets per
2734second, depending on the meter flags defined above.
96660ed1
BP
2735.IP \fBburst_size=\fIsize\fR
2736The maximum burst allowed for the band. If \fBpktps\fR is specified,
2737then \fIsize\fR is a packet count, otherwise it is in kilobits. If
2738unspecified, the switch is free to select some reasonable value
2739depending on its configuration.
3200ed58
JR
2740.RE
2741.
064af421
BP
2742.SH OPTIONS
2743.TP
4e312e69 2744\fB\-\-strict\fR
064af421 2745Uses strict matching when running flow modification commands.
a9b4a41a 2746.
db5076ee 2747.IP "\fB\-\-bundle\fR"
39c94593 2748Execute flow mods as an OpenFlow 1.4 atomic bundle transaction.
db5076ee
JR
2749.RS
2750.IP \(bu
2751Within a bundle, all flow mods are processed in the order they appear
39c94593
JR
2752and as a single atomic transaction, meaning that if one of them fails,
2753the whole transaction fails and none of the changes are made to the
2754\fIswitch\fR's flow table, and that each given datapath packet
2755traversing the OpenFlow tables sees the flow tables either as before
2756the transaction, or after all the flow mods in the bundle have been
2757successfully applied.
db5076ee
JR
2758.IP \(bu
2759The beginning and the end of the flow table modification commands in a
2760bundle are delimited with OpenFlow 1.4 bundle control messages, which
2761makes it possible to stream the included commands without explicit
2762OpenFlow barriers, which are otherwise used after each flow table
2763modification command. This may make large modifications execute
2764faster as a bundle.
2765.IP \(bu
2766Bundles require OpenFlow 1.4 or higher. An explicit \fB-O
2767OpenFlow14\fR option is not needed, but you may need to enable
2768OpenFlow 1.4 support for OVS by setting the OVSDB \fIprotocols\fR
2769column in the \fIbridge\fR table.
db5076ee
JR
2770.RE
2771.
a53a8efa
SH
2772.so lib/ofp-version.man
2773.
27527aa0
BP
2774.IP "\fB\-F \fIformat\fR[\fB,\fIformat\fR...]"
2775.IQ "\fB\-\-flow\-format=\fIformat\fR[\fB,\fIformat\fR...]"
2776\fBovs\-ofctl\fR supports the following individual flow formats, any
2777number of which may be listed as \fIformat\fR:
88ca35ee 2778.RS
27527aa0
BP
2779.IP "\fBOpenFlow10\-table_id\fR"
2780This is the standard OpenFlow 1.0 flow format. All OpenFlow switches
2781and all versions of Open vSwitch support this flow format.
88ca35ee 2782.
27527aa0
BP
2783.IP "\fBOpenFlow10+table_id\fR"
2784This is the standard OpenFlow 1.0 flow format plus a Nicira extension
2785that allows \fBovs\-ofctl\fR to specify the flow table in which a
2786particular flow should be placed. Open vSwitch 1.2 and later supports
2787this flow format.
2788.
2789.IP "\fBNXM\-table_id\fR (Nicira Extended Match)"
88ca35ee
BP
2790This Nicira extension to OpenFlow is flexible and extensible. It
2791supports all of the Nicira flow extensions, such as \fBtun_id\fR and
27527aa0
BP
2792registers. Open vSwitch 1.1 and later supports this flow format.
2793.
2794.IP "\fBNXM+table_id\fR (Nicira Extended Match)"
2795This combines Nicira Extended match with the ability to place a flow
2796in a specific table. Open vSwitch 1.2 and later supports this flow
2797format.
e71bff1b
BP
2798.
2799.IP "\fBOXM-OpenFlow12\fR"
2800.IQ "\fBOXM-OpenFlow13\fR"
aa233d57 2801.IQ "\fBOXM-OpenFlow14\fR"
e71bff1b 2802These are the standard OXM (OpenFlow Extensible Match) flow format in
aa233d57 2803OpenFlow 1.2, 1.3, and 1.4, respectively.
88ca35ee 2804.RE
27527aa0 2805.
88ca35ee 2806.IP
27527aa0
BP
2807\fBovs\-ofctl\fR also supports the following abbreviations for
2808collections of flow formats:
2809.RS
2810.IP "\fBany\fR"
aa233d57 2811Any supported flow format.
27527aa0
BP
2812.IP "\fBOpenFlow10\fR"
2813\fBOpenFlow10\-table_id\fR or \fBOpenFlow10+table_id\fR.
2814.IP "\fBNXM\fR"
2815\fBNXM\-table_id\fR or \fBNXM+table_id\fR.
e71bff1b 2816.IP "\fBOXM\fR"
aa233d57 2817\fBOXM-OpenFlow12\fR, \fBOXM-OpenFlow13\fR, or \fBOXM-OpenFlow14\fR.
27527aa0 2818.RE
4f564f8d 2819.
27527aa0
BP
2820.IP
2821For commands that modify the flow table, \fBovs\-ofctl\fR by default
2822negotiates the most widely supported flow format that supports the
2823flows being added. For commands that query the flow table,
2824\fBovs\-ofctl\fR by default uses the most advanced format supported by
2825the switch.
2826.IP
2827This option, where \fIformat\fR is a comma-separated list of one or
2828more of the formats listed above, limits \fBovs\-ofctl\fR's choice of
2829flow format. If a command cannot work as requested using one of the
2830specified flow formats, \fBovs\-ofctl\fR will report a fatal error.
54834960
EJ
2831.
2832.IP "\fB\-P \fIformat\fR"
2833.IQ "\fB\-\-packet\-in\-format=\fIformat\fR"
2834\fBovs\-ofctl\fR supports the following packet_in formats, in order of
2835increasing capability:
2836.RS
2837.IP "\fBopenflow10\fR"
2838This is the standard OpenFlow 1.0 packet in format. It should be supported by
2839all OpenFlow switches.
2840.
2841.IP "\fBnxm\fR (Nicira Extended Match)"
2842This packet_in format includes flow metadata encoded using the NXM format.
2843.
2844.RE
2845.IP
2846Usually, \fBovs\-ofctl\fR prefers the \fBnxm\fR packet_in format, but will
2847allow the switch to choose its default if \fBnxm\fR is unsupported. When
2848\fIformat\fR is one of the formats listed in the above table, \fBovs\-ofctl\fR
2849will insist on the selected format. If the switch does not support the
2850requested format, \fBovs\-ofctl\fR will report a fatal error. This option only
ca8526e0 2851affects the \fBmonitor\fR command.
54834960 2852.
0c9560b7
BP
2853.IP "\fB\-\-timestamp\fR"
2854Print a timestamp before each received packet. This option only
f3dd1419
BP
2855affects the \fBmonitor\fR, \fBsnoop\fR, and \fBofp\-parse\-pcap\fR
2856commands.
0c9560b7 2857.
4f564f8d
BP
2858.IP "\fB\-m\fR"
2859.IQ "\fB\-\-more\fR"
2860Increases the verbosity of OpenFlow messages printed and logged by
2861\fBovs\-ofctl\fR commands. Specify this option more than once to
2862increase verbosity further.
1eb85ef5 2863.
bdcc5925
BP
2864.IP \fB\-\-sort\fR[\fB=\fIfield\fR]
2865.IQ \fB\-\-rsort\fR[\fB=\fIfield\fR]
2866Display output sorted by flow \fIfield\fR in ascending
2867(\fB\-\-sort\fR) or descending (\fB\-\-rsort\fR) order, where
2868\fIfield\fR is any of the fields that are allowed for matching or
2869\fBpriority\fR to sort by priority. When \fIfield\fR is omitted, the
2870output is sorted by priority. Specify these options multiple times to
2871sort by multiple fields.
2872.IP
2873Any given flow will not necessarily specify a value for a given
2874field. This requires special treatement:
2875.RS
2876.IP \(bu
2877A flow that does not specify any part of a field that is used for sorting is
2878sorted after all the flows that do specify the field. For example,
2879\fB\-\-sort=tcp_src\fR will sort all the flows that specify a TCP
2880source port in ascending order, followed by the flows that do not
0d56eaf2 2881specify a TCP source port at all.
bdcc5925
BP
2882.IP \(bu
2883A flow that only specifies some bits in a field is sorted as if the
2884wildcarded bits were zero. For example, \fB\-\-sort=nw_src\fR would
2885sort a flow that specifies \fBnw_src=192.168.0.0/24\fR the same as
2886\fBnw_src=192.168.0.0\fR.
2887.RE
2888.IP
2889These options currently affect only \fBdump\-flows\fR output.
2890.
1eb85ef5
EJ
2891.ds DD \
2892\fBovs\-ofctl\fR detaches only when executing the \fBmonitor\fR or \
2893\fBsnoop\fR commands.
2894.so lib/daemon.man
19945013 2895.so lib/unixctl.man
ac300505 2896.SS "Public Key Infrastructure Options"
84ee7bcf 2897.so lib/ssl.man
064af421
BP
2898.so lib/vlog.man
2899.so lib/common.man
a9b4a41a 2900.
1eb85ef5 2901.SH "RUNTIME MANAGEMENT COMMANDS"
96761f58
BP
2902\fBovs\-appctl\fR(8) can send commands to a running \fBovs\-ofctl\fR
2903process. The supported commands are listed below.
2904.
1eb85ef5 2905.IP "\fBexit\fR"
96761f58
BP
2906Causes \fBovs\-ofctl\fR to gracefully terminate. This command applies
2907only when executing the \fBmonitor\fR or \fBsnoop\fR commands.
2908.
1e1d00a5
BP
2909.IP "\fBofctl/set\-output\-file \fIfile\fR"
2910Causes all subsequent output to go to \fIfile\fR instead of stderr.
2911This command applies only when executing the \fBmonitor\fR or
2912\fBsnoop\fR commands.
2913.
96761f58
BP
2914.IP "\fBofctl/send \fIofmsg\fR..."
2915Sends each \fIofmsg\fR, specified as a sequence of hex digits that
2916express an OpenFlow message, on the OpenFlow connection. This command
2917is useful only when executing the \fBmonitor\fR command.
2918.
bb638b9a
BP
2919.IP "\fBofctl/barrier\fR"
2920Sends an OpenFlow barrier request on the OpenFlow connection and waits
2921for a reply. This command is useful only for the \fBmonitor\fR
2922command.
2923.
064af421 2924.SH EXAMPLES
a9b4a41a 2925.
045b2e5c
BP
2926The following examples assume that \fBovs\-vswitchd\fR has a bridge
2927named \fBbr0\fR configured.
a9b4a41a 2928.
064af421 2929.TP
045b2e5c 2930\fBovs\-ofctl dump\-tables br0\fR
064af421
BP
2931Prints out the switch's table stats. (This is more interesting after
2932some traffic has passed through.)
a9b4a41a 2933.
064af421 2934.TP
045b2e5c 2935\fBovs\-ofctl dump\-flows br0\fR
064af421 2936Prints the flow entries in the switch.
a9b4a41a 2937.
064af421 2938.SH "SEE ALSO"
a9b4a41a 2939.
064af421 2940.BR ovs\-appctl (8),
064af421 2941.BR ovs\-vswitchd (8)
29089a54 2942.BR ovs\-vswitchd.conf.db (8)