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