1ovn-sb(5) Open vSwitch Manual ovn-sb(5)
2
3
4
6 ovn-sb - OVN_Southbound database schema
7
8 This database holds logical and physical configuration and state for
9 the Open Virtual Network (OVN) system to support virtual network ab‐
10 straction. For an introduction to OVN, please see ovn-architecture(7).
11
12 The OVN Southbound database sits at the center of the OVN architecture.
13 It is the one component that speaks both southbound directly to all the
14 hypervisors and gateways, via ovn-controller/ovn-controller-vtep, and
15 northbound to the Cloud Management System, via ovn-northd:
16
17 Database Structure
18 The OVN Southbound database contains classes of data with different
19 properties, as described in the sections below.
20
21 Physical network
22
23 Physical network tables contain information about the chassis nodes in
24 the system. This contains all the information necessary to wire the
25 overlay, such as IP addresses, supported tunnel types, and security
26 keys.
27
28 The amount of physical network data is small (O(n) in the number of
29 chassis) and it changes infrequently, so it can be replicated to every
30 chassis.
31
32 The Chassis and Encap tables are the physical network tables.
33
34 Logical Network
35
36 Logical network tables contain the topology of logical switches and
37 routers, ACLs, firewall rules, and everything needed to describe how
38 packets traverse a logical network, represented as logical datapath
39 flows (see Logical Datapath Flows, below).
40
41 Logical network data may be large (O(n) in the number of logical ports,
42 ACL rules, etc.). Thus, to improve scaling, each chassis should receive
43 only data related to logical networks in which that chassis partici‐
44 pates.
45
46 The logical network data is ultimately controlled by the cloud manage‐
47 ment system (CMS) running northbound of OVN. That CMS determines the
48 entire OVN logical configuration and therefore the logical network data
49 at any given time is a deterministic function of the CMS’s configura‐
50 tion, although that happens indirectly via the OVN_Northbound database
51 and ovn-northd.
52
53 Logical network data is likely to change more quickly than physical
54 network data. This is especially true in a container environment where
55 containers are created and destroyed (and therefore added to and
56 deleted from logical switches) quickly.
57
58 The Logical_Flow, Multicast_Group, Address_Group, DHCP_Options,
59 DHCPv6_Options, and DNS tables contain logical network data.
60
61 Logical-physical bindings
62
63 These tables link logical and physical components. They show the cur‐
64 rent placement of logical components (such as VMs and VIFs) onto chas‐
65 sis, and map logical entities to the values that represent them in tun‐
66 nel encapsulations.
67
68 These tables change frequently, at least every time a VM powers up or
69 down or migrates, and especially quickly in a container environment.
70 The amount of data per VM (or VIF) is small.
71
72 Each chassis is authoritative about the VMs and VIFs that it hosts at
73 any given time and can efficiently flood that state to a central loca‐
74 tion, so the consistency needs are minimal.
75
76 The Port_Binding and Datapath_Binding tables contain binding data.
77
78 MAC bindings
79
80 The MAC_Binding table tracks the bindings from IP addresses to Ethernet
81 addresses that are dynamically discovered using ARP (for IPv4) and
82 neighbor discovery (for IPv6). Usually, IP-to-MAC bindings for virtual
83 machines are statically populated into the Port_Binding table, so
84 MAC_Binding is primarily used to discover bindings on physical net‐
85 works.
86
87 Common Columns
88 Some tables contain a special column named external_ids. This column
89 has the same form and purpose each place that it appears, so we de‐
90 scribe it here to save space later.
91
92 external_ids: map of string-string pairs
93 Key-value pairs for use by the software that manages the
94 OVN Southbound database rather than by ovn-con‐
95 troller/ovn-controller-vtep. In particular, ovn-northd
96 can use key-value pairs in this column to relate entities
97 in the southbound database to higher-level entities (such
98 as entities in the OVN Northbound database). Individual
99 key-value pairs in this column may be documented in some
100 cases to aid in understanding and troubleshooting, but
101 the reader should not mistake such documentation as com‐
102 prehensive.
103
105 The following list summarizes the purpose of each of the tables in the
106 OVN_Southbound database. Each table is described in more detail on a
107 later page.
108
109 Table Purpose
110 SB_Global Southbound configuration
111 Chassis Physical Network Hypervisor and Gateway Information
112 Chassis_Private
113 Chassis Private
114 Encap Encapsulation Types
115 Address_Set
116 Address Sets
117 Port_Group
118 Port Groups
119 Logical_Flow
120 Logical Network Flows
121 Logical_DP_Group
122 Logical Datapath Groups
123 Multicast_Group
124 Logical Port Multicast Groups
125 Mirror Mirror Entry
126 Meter Meter entry
127 Meter_Band
128 Band for meter entries
129 Datapath_Binding
130 Physical-Logical Datapath Bindings
131 Port_Binding
132 Physical-Logical Port Bindings
133 MAC_Binding
134 IP to MAC bindings
135 DHCP_Options
136 DHCP Options supported by native OVN DHCP
137 DHCPv6_Options
138 DHCPv6 Options supported by native OVN DHCPv6
139 Connection
140 OVSDB client connections.
141 SSL SSL configuration.
142 DNS Native DNS resolution
143 RBAC_Role RBAC_Role configuration.
144 RBAC_Permission
145 RBAC_Permission configuration.
146 Gateway_Chassis
147 Gateway_Chassis configuration.
148 HA_Chassis
149 HA_Chassis configuration.
150 HA_Chassis_Group
151 HA_Chassis_Group configuration.
152 Controller_Event
153 Controller Event table
154 IP_Multicast
155 IP_Multicast configuration.
156 IGMP_Group
157 IGMP_Group configuration.
158 Service_Monitor
159 Service_Monitor configuration.
160 Load_Balancer
161 Load_Balancer configuration.
162 BFD BFD configuration.
163 FDB Port to MAC bindings
164 Static_MAC_Binding
165 IP to MAC bindings
166 Chassis_Template_Var
167 Chassis_Template_Var configuration.
168
170 Southbound configuration for an OVN system. This table must have ex‐
171 actly one row.
172
173 Summary:
174 Status:
175 nb_cfg integer
176 Common Columns:
177 external_ids map of string-string pairs
178 options map of string-string pairs
179 Common options:
180 options map of string-string pairs
181 Options for configuring BFD:
182 options : bfd-min-rx optional string
183 options : bfd-decay-min-rx
184 optional string
185 options : bfd-min-tx optional string
186 options : bfd-mult optional string
187 options : debug_drop_domain_id
188 optional string
189 options : debug_drop_collector_set
190 optional string
191 Options for configuring Load Balancers:
192 options : lb_hairpin_use_ct_mark
193 optional string
194 Connection Options:
195 connections set of Connections
196 ssl optional SSL
197 Security Configurations:
198 ipsec boolean
199
200 Details:
201 Status:
202
203 This column allow a client to track the overall configuration state of
204 the system.
205
206 nb_cfg: integer
207 Sequence number for the configuration. When a CMS or ovn-nbctl
208 updates the northbound database, it increments the nb_cfg column
209 in the NB_Global table in the northbound database. In turn, when
210 ovn-northd updates the southbound database to bring it up to
211 date with these changes, it updates this column to the same
212 value.
213
214 Common Columns:
215
216 external_ids: map of string-string pairs
217 See External IDs at the beginning of this document.
218
219 options: map of string-string pairs
220
221 Common options:
222
223 options: map of string-string pairs
224 This column provides general key/value settings. The supported
225 options are described individually below.
226
227 Options for configuring BFD:
228
229 These options apply when ovn-controller configures BFD on tunnels in‐
230 terfaces.
231
232 options : bfd-min-rx: optional string
233 BFD option min-rx value to use when configuring BFD on tunnel
234 interfaces.
235
236 options : bfd-decay-min-rx: optional string
237 BFD option decay-min-rx value to use when configuring BFD on
238 tunnel interfaces.
239
240 options : bfd-min-tx: optional string
241 BFD option min-tx value to use when configuring BFD on tunnel
242 interfaces.
243
244 options : bfd-mult: optional string
245 BFD option mult value to use when configuring BFD on tunnel in‐
246 terfaces.
247
248 options : debug_drop_domain_id: optional string
249 If set to a 8-bit number and if debug_drop_collector_set is also
250 configured, ovn-controller will add a sample action to every
251 flow that does not come from a logical flow that contains a
252 ’drop’ action. The 8 most significant bits of the observa‐
253 tion_domain_id field will be those specified in the de‐
254 bug_drop_domain_id. The 24 least significant bits of the obser‐
255 vation_domain_id field will be zero.
256
257 The observation_point_id will be set to the OpenFlow table num‐
258 ber.
259
260 options : debug_drop_collector_set: optional string
261 If set to a 32-bit number ovn-controller will add a sample ac‐
262 tion to every flow that does not come from a logical flow that
263 contains a ’drop’ action. The sample action will have the speci‐
264 fied collector_set_id. The value must match that of the local
265 OVS configuration as described in ovs-actions(7).
266
267 Options for configuring Load Balancers:
268
269 These options apply when ovn-controller configures load balancer re‐
270 lated flows.
271
272 options : lb_hairpin_use_ct_mark: optional string
273 By default this option is turned on (even if not present in the
274 database) unless its value is explicitly set to false. This
275 value is automatically set to false by ovn-northd when action
276 ct_lb_mark cannot be used for new load balancer sessions and ac‐
277 tion ct_lb will be used instead. ovn-controller then knows that
278 it should check ct_label.natted to detect load balanced traffic.
279
280 Connection Options:
281
282 connections: set of Connections
283 Database clients to which the Open vSwitch database server
284 should connect or on which it should listen, along with options
285 for how these connections should be configured. See the Connec‐
286 tion table for more information.
287
288 ssl: optional SSL
289 Global SSL configuration.
290
291 Security Configurations:
292
293 ipsec: boolean
294 Tunnel encryption configuration. If this column is set to be
295 true, all OVN tunnels will be encrypted with IPsec.
296
298 Each row in this table represents a hypervisor or gateway (a chassis)
299 in the physical network. Each chassis, via ovn-controller/ovn-con‐
300 troller-vtep, adds and updates its own row, and keeps a copy of the re‐
301 maining rows to determine how to reach other hypervisors.
302
303 When a chassis shuts down gracefully, it should remove its own row.
304 (This is not critical because resources hosted on the chassis are
305 equally unreachable regardless of whether the row is present.) If a
306 chassis shuts down permanently without removing its row, some kind of
307 manual or automatic cleanup is eventually needed; we can devise a
308 process for that as necessary.
309
310 Summary:
311 name string (must be unique within table)
312 hostname string
313 nb_cfg integer
314 other_config : ovn-bridge-mappings
315 optional string
316 other_config : datapath-type optional string
317 other_config : iface-types optional string
318 other_config : ovn-cms-options
319 optional string
320 other_config : is-interconn optional string
321 other_config : is-remote optional string
322 transport_zones set of strings
323 other_config : ovn-chassis-mac-mappings
324 optional string
325 other_config : port-up-notif optional string
326 Common Columns:
327 external_ids map of string-string pairs
328 Encapsulation Configuration:
329 encaps set of 1 or more Encaps
330 Gateway Configuration:
331 vtep_logical_switches set of strings
332
333 Details:
334 name: string (must be unique within table)
335 OVN does not prescribe a particular format for chassis names.
336 ovn-controller populates this column using external_ids:system-
337 id in the Open_vSwitch database’s Open_vSwitch table. ovn-con‐
338 troller-vtep populates this column with name in the hard‐
339 ware_vtep database’s Physical_Switch table.
340
341 hostname: string
342 The hostname of the chassis, if applicable. ovn-controller will
343 populate this column with the hostname of the host it is running
344 on. ovn-controller-vtep will leave this column empty.
345
346 nb_cfg: integer
347 Deprecated. This column is replaced by the nb_cfg column of the
348 Chassis_Private table.
349
350 other_config : ovn-bridge-mappings: optional string
351 ovn-controller populates this key with the set of bridge map‐
352 pings it has been configured to use. Other applications should
353 treat this key as read-only. See ovn-controller(8) for more in‐
354 formation.
355
356 other_config : datapath-type: optional string
357 ovn-controller populates this key with the datapath type config‐
358 ured in the datapath_type column of the Open_vSwitch database’s
359 Bridge table. Other applications should treat this key as read-
360 only. See ovn-controller(8) for more information.
361
362 other_config : iface-types: optional string
363 ovn-controller populates this key with the interface types con‐
364 figured in the iface_types column of the Open_vSwitch database’s
365 Open_vSwitch table. Other applications should treat this key as
366 read-only. See ovn-controller(8) for more information.
367
368 other_config : ovn-cms-options: optional string
369 ovn-controller populates this key with the set of options con‐
370 figured in the external_ids:ovn-cms-options column of the
371 Open_vSwitch database’s Open_vSwitch table. See ovn-con‐
372 troller(8) for more information.
373
374 other_config : is-interconn: optional string
375 ovn-controller populates this key with the setting configured in
376 the external_ids:ovn-is-interconn column of the Open_vSwitch
377 database’s Open_vSwitch table. If set to true, the chassis is
378 used as an interconnection gateway. See ovn-controller(8) for
379 more information.
380
381 other_config : is-remote: optional string
382 ovn-ic set this key to true for remote interconnection gateway
383 chassises learned from the interconnection southbound database.
384 See ovn-ic(8) for more information.
385
386 transport_zones: set of strings
387 ovn-controller populates this key with the transport zones con‐
388 figured in the external_ids:ovn-transport-zones column of the
389 Open_vSwitch database’s Open_vSwitch table. See ovn-con‐
390 troller(8) for more information.
391
392 other_config : ovn-chassis-mac-mappings: optional string
393 ovn-controller populates this key with the set of options con‐
394 figured in the external_ids:ovn-chassis-mac-mappings column of
395 the Open_vSwitch database’s Open_vSwitch table. See ovn-con‐
396 troller(8) for more information.
397
398 other_config : port-up-notif: optional string
399 ovn-controller populates this key with true when it supports
400 Port_Binding.up.
401
402 Common Columns:
403
404 The overall purpose of these columns is described under Common Columns
405 at the beginning of this document.
406
407 external_ids: map of string-string pairs
408
409 Encapsulation Configuration:
410
411 OVN uses encapsulation to transmit logical dataplane packets between
412 chassis.
413
414 encaps: set of 1 or more Encaps
415 Points to supported encapsulation configurations to transmit
416 logical dataplane packets to this chassis. Each entry is a Encap
417 record that describes the configuration.
418
419 Gateway Configuration:
420
421 A gateway is a chassis that forwards traffic between the OVN-managed
422 part of a logical network and a physical VLAN, extending a tunnel-based
423 logical network into a physical network. Gateways are typically dedi‐
424 cated nodes that do not host VMs and will be controlled by ovn-con‐
425 troller-vtep.
426
427 vtep_logical_switches: set of strings
428 Stores all VTEP logical switch names connected by this gateway
429 chassis. The Port_Binding table entry with options:vtep-physi‐
430 cal-switch equal Chassis name, and options:vtep-logical-switch
431 value in Chassis vtep_logical_switches, will be associated with
432 this Chassis.
433
435 Each row in this table maintains per chassis private data that are ac‐
436 cessed only by the owning chassis (write only) and ovn-northd, not by
437 any other chassis. These data are stored in this separate table instead
438 of the Chassis table for performance considerations: the rows in this
439 table can be conditionally monitored by chassises so that each chassis
440 only get update notifications for its own row, to avoid unnecessary
441 chassis private data update flooding in a large scale deployment.
442
443 Summary:
444 name string (must be unique within table)
445 chassis optional weak reference to Chassis
446 nb_cfg integer
447 nb_cfg_timestamp integer
448 Common Columns:
449 external_ids map of string-string pairs
450
451 Details:
452 name: string (must be unique within table)
453 The name of the chassis that owns these chassis-private data.
454
455 chassis: optional weak reference to Chassis
456 The reference to Chassis table for the chassis that owns these
457 chassis-private data.
458
459 nb_cfg: integer
460 Sequence number for the configuration. When ovn-controller up‐
461 dates the configuration of a chassis from the contents of the
462 southbound database, it copies nb_cfg from the SB_Global table
463 into this column.
464
465 nb_cfg_timestamp: integer
466 The timestamp when ovn-controller finishes processing the change
467 corresponding to nb_cfg.
468
469 Common Columns:
470
471 The overall purpose of these columns is described under Common Columns
472 at the beginning of this document.
473
474 external_ids: map of string-string pairs
475
477 The encaps column in the Chassis table refers to rows in this table to
478 identify how OVN may transmit logical dataplane packets to this chas‐
479 sis. Each chassis, via ovn-controller(8) or ovn-controller-vtep(8),
480 adds and updates its own rows and keeps a copy of the remaining rows to
481 determine how to reach other chassis.
482
483 Summary:
484 type string, one of geneve, stt, or vxlan
485 options map of string-string pairs
486 options : csum optional string, either true or false
487 options : dst_port optional string, containing an integer
488 ip string
489 chassis_name string
490
491 Details:
492 type: string, one of geneve, stt, or vxlan
493 The encapsulation to use to transmit packets to this chassis.
494 Hypervisors must use either geneve or stt. Gateways may use
495 vxlan, geneve, or stt.
496
497 options: map of string-string pairs
498 Options for configuring the encapsulation, which may be type
499 specific.
500
501 options : csum: optional string, either true or false
502 csum indicates whether this chassis can transmit and receive
503 packets that include checksums with reasonable performance. It
504 hints to senders transmitting data to this chassis that they
505 should use checksums to protect OVN metadata. ovn-controller
506 populates this key with the value defined in external_ids:ovn-
507 encap-csum column of the Open_vSwitch database’s Open_vSwitch
508 table. Other applications should treat this key as read-only.
509 See ovn-controller(8) for more information.
510
511 In terms of performance, checksumming actually significantly in‐
512 creases throughput in most common cases when running on Linux
513 based hosts without NICs supporting encapsulation hardware off‐
514 load (around 60% for bulk traffic). The reason is that generally
515 all NICs are capable of offloading transmitted and received
516 TCP/UDP checksums (viewed as ordinary data packets and not as
517 tunnels). The benefit comes on the receive side where the vali‐
518 dated outer checksum can be used to additionally validate an in‐
519 ner checksum (such as TCP), which in turn allows aggregation of
520 packets to be more efficiently handled by the rest of the stack.
521
522 Not all devices see such a benefit. The most notable exception
523 is hardware VTEPs. These devices are designed to not buffer en‐
524 tire packets in their switching engines and are therefore unable
525 to efficiently compute or validate full packet checksums. In ad‐
526 dition certain versions of the Linux kernel are not able to
527 fully take advantage of encapsulation NIC offloads in the pres‐
528 ence of checksums. (This is actually a pretty narrow corner case
529 though: earlier versions of Linux don’t support encapsulation
530 offloads at all and later versions support both offloads and
531 checksums well.)
532
533 csum defaults to false for hardware VTEPs and true for all other
534 cases.
535
536 This option applies to geneve and vxlan encapsulations.
537
538 options : dst_port: optional string, containing an integer
539 If set, overrides the UDP (for geneve and vxlan) or TCP (for
540 stt) destination port.
541
542 ip: string
543 The IPv4 address of the encapsulation tunnel endpoint.
544
545 chassis_name: string
546 The name of the chassis that created this encap.
547
549 This table contains address sets synced from the Address_Set table in
550 the OVN_Northbound database and address sets generated from the
551 Port_Group table in the OVN_Northbound database.
552
553 See the documentation for the Address_Set table and Port_Group table in
554 the OVN_Northbound database for details.
555
556 Summary:
557 name string (must be unique within table)
558 addresses set of strings
559
560 Details:
561 name: string (must be unique within table)
562
563 addresses: set of strings
564
566 This table contains names for the logical switch ports in the
567 OVN_Northbound database that belongs to the same group that is defined
568 in Port_Group in the OVN_Northbound database.
569
570 Summary:
571 name string (must be unique within table)
572 ports set of strings
573
574 Details:
575 name: string (must be unique within table)
576
577 ports: set of strings
578
580 Each row in this table represents one logical flow. ovn-northd popu‐
581 lates this table with logical flows that implement the L2 and L3
582 topologies specified in the OVN_Northbound database. Each hypervisor,
583 via ovn-controller, translates the logical flows into OpenFlow flows
584 specific to its hypervisor and installs them into Open vSwitch.
585
586 Logical flows are expressed in an OVN-specific format, described here.
587 A logical datapath flow is much like an OpenFlow flow, except that the
588 flows are written in terms of logical ports and logical datapaths in‐
589 stead of physical ports and physical datapaths. Translation between
590 logical and physical flows helps to ensure isolation between logical
591 datapaths. (The logical flow abstraction also allows the OVN central‐
592 ized components to do less work, since they do not have to separately
593 compute and push out physical flows to each chassis.)
594
595 The default action when no flow matches is to drop packets.
596
597 Architectural Logical Life Cycle of a Packet
598
599 This following description focuses on the life cycle of a packet
600 through a logical datapath, ignoring physical details of the implemen‐
601 tation. Please refer to Architectural Physical Life Cycle of a Packet
602 in ovn-architecture(7) for the physical information.
603
604 The description here is written as if OVN itself executes these steps,
605 but in fact OVN (that is, ovn-controller) programs Open vSwitch, via
606 OpenFlow and OVSDB, to execute them on its behalf.
607
608 At a high level, OVN passes each packet through the logical datapath’s
609 logical ingress pipeline, which may output the packet to one or more
610 logical port or logical multicast groups. For each such logical output
611 port, OVN passes the packet through the datapath’s logical egress pipe‐
612 line, which may either drop the packet or deliver it to the destina‐
613 tion. Between the two pipelines, outputs to logical multicast groups
614 are expanded into logical ports, so that the egress pipeline only pro‐
615 cesses a single logical output port at a time. Between the two pipe‐
616 lines is also where, when necessary, OVN encapsulates a packet in a
617 tunnel (or tunnels) to transmit to remote hypervisors.
618
619 In more detail, to start, OVN searches the Logical_Flow table for a row
620 with correct logical_datapath or a logical_dp_group, a pipeline of
621 ingress, a table_id of 0, and a match that is true for the packet. If
622 none is found, OVN drops the packet. If OVN finds more than one, it
623 chooses the match with the highest priority. Then OVN executes each of
624 the actions specified in the row’s actions column, in the order speci‐
625 fied. Some actions, such as those to modify packet headers, require no
626 further details. The next and output actions are special.
627
628 The next action causes the above process to be repeated recursively,
629 except that OVN searches for table_id of 1 instead of 0. Similarly, any
630 next action in a row found in that table would cause a further search
631 for a table_id of 2, and so on. When recursive processing completes,
632 flow control returns to the action following next.
633
634 The output action also introduces recursion. Its effect depends on the
635 current value of the outport field. Suppose outport designates a logi‐
636 cal port. First, OVN compares inport to outport; if they are equal, it
637 treats the output as a no-op by default. In the common case, where they
638 are different, the packet enters the egress pipeline. This transition
639 to the egress pipeline discards register data, e.g. reg0 ... reg9 and
640 connection tracking state, to achieve uniform behavior regardless of
641 whether the egress pipeline is on a different hypervisor (because reg‐
642 isters aren’t preserve across tunnel encapsulation).
643
644 To execute the egress pipeline, OVN again searches the Logical_Flow ta‐
645 ble for a row with correct logical_datapath or a logical_dp_group, a
646 table_id of 0, a match that is true for the packet, but now looking for
647 a pipeline of egress. If no matching row is found, the output becomes a
648 no-op. Otherwise, OVN executes the actions for the matching flow (which
649 is chosen from multiple, if necessary, as already described).
650
651 In the egress pipeline, the next action acts as already described, ex‐
652 cept that it, of course, searches for egress flows. The output action,
653 however, now directly outputs the packet to the output port (which is
654 now fixed, because outport is read-only within the egress pipeline).
655
656 The description earlier assumed that outport referred to a logical
657 port. If it instead designates a logical multicast group, then the de‐
658 scription above still applies, with the addition of fan-out from the
659 logical multicast group to each logical port in the group. For each
660 member of the group, OVN executes the logical pipeline as described,
661 with the logical output port replaced by the group member.
662
663 Pipeline Stages
664
665 ovn-northd populates the Logical_Flow table with the logical flows de‐
666 scribed in detail in ovn-northd(8).
667
668 Summary:
669 logical_datapath optional Datapath_Binding
670 logical_dp_group optional Logical_DP_Group
671 pipeline string, either egress or ingress
672 table_id integer, in range 0 to 32
673 priority integer, in range 0 to 65,535
674 match string
675 actions string
676 tags map of string-string pairs
677 controller_meter optional string
678 external_ids : stage-name optional string
679 external_ids : stage-hint optional string, containing an uuid
680 external_ids : source optional string
681 Common Columns:
682 external_ids map of string-string pairs
683
684 Details:
685 logical_datapath: optional Datapath_Binding
686 The logical datapath to which the logical flow belongs.
687
688 logical_dp_group: optional Logical_DP_Group
689 The group of logical datapaths to which the logical flow be‐
690 longs. This means that the same logical flow belongs to all
691 datapaths in a group.
692
693 pipeline: string, either egress or ingress
694 The primary flows used for deciding on a packet’s destination
695 are the ingress flows. The egress flows implement ACLs. See Log‐
696 ical Life Cycle of a Packet, above, for details.
697
698 table_id: integer, in range 0 to 32
699 The stage in the logical pipeline, analogous to an OpenFlow ta‐
700 ble number.
701
702 priority: integer, in range 0 to 65,535
703 The flow’s priority. Flows with numerically higher priority take
704 precedence over those with lower. If two logical datapath flows
705 with the same priority both match, then the one actually applied
706 to the packet is undefined.
707
708 match: string
709 A matching expression. OVN provides a superset of OpenFlow
710 matching capabilities, using a syntax similar to Boolean expres‐
711 sions in a programming language.
712
713 The most important components of match expression are compar‐
714 isons between symbols and constants, e.g. ip4.dst ==
715 192.168.0.1, ip.proto == 6, arp.op == 1, eth.type == 0x800. The
716 logical AND operator && and logical OR operator || can combine
717 comparisons into a larger expression.
718
719 Matching expressions also support parentheses for grouping, the
720 logical NOT prefix operator !, and literals 0 and 1 to express
721 ``false’’ or ``true,’’ respectively. The latter is useful by it‐
722 self as a catch-all expression that matches every packet.
723
724 Match expressions also support a kind of function syntax. The
725 following functions are supported:
726
727 is_chassis_resident(lport)
728 Evaluates to true on a chassis on which logical port
729 lport (a quoted string) resides, and to false elsewhere.
730 This function was introduced in OVN 2.7.
731
732 Symbols
733
734 Type. Symbols have integer or string type. Integer symbols have
735 a width in bits.
736
737 Kinds. There are three kinds of symbols:
738
739 • Fields. A field symbol represents a packet header or
740 metadata field. For example, a field named vlan.tci might
741 represent the VLAN TCI field in a packet.
742
743 A field symbol can have integer or string type. Integer
744 fields can be nominal or ordinal (see Level of Measure‐
745 ment, below).
746
747 • Subfields. A subfield represents a subset of bits from a
748 larger field. For example, a field vlan.vid might be de‐
749 fined as an alias for vlan.tci[0..11]. Subfields are pro‐
750 vided for syntactic convenience, because it is always
751 possible to instead refer to a subset of bits from a
752 field directly.
753
754 Only ordinal fields (see Level of Measurement, below) may
755 have subfields. Subfields are always ordinal.
756
757 • Predicates. A predicate is shorthand for a Boolean ex‐
758 pression. Predicates may be used much like 1-bit fields.
759 For example, ip4 might expand to eth.type == 0x800. Pred‐
760 icates are provided for syntactic convenience, because it
761 is always possible to instead specify the underlying ex‐
762 pression directly.
763
764 A predicate whose expansion refers to any nominal field
765 or predicate (see Level of Measurement, below) is nomi‐
766 nal; other predicates have Boolean level of measurement.
767
768 Level of Measurement. See
769 http://en.wikipedia.org/wiki/Level_of_measurement for the sta‐
770 tistical concept on which this classification is based. There
771 are three levels:
772
773 • Ordinal. In statistics, ordinal values can be ordered on
774 a scale. OVN considers a field (or subfield) to be ordi‐
775 nal if its bits can be examined individually. This is
776 true for the OpenFlow fields that OpenFlow or Open
777 vSwitch makes ``maskable.’’
778
779 Any use of a ordinal field may specify a single bit or a
780 range of bits, e.g. vlan.tci[13..15] refers to the PCP
781 field within the VLAN TCI, and eth.dst[40] refers to the
782 multicast bit in the Ethernet destination address.
783
784 OVN supports all the usual arithmetic relations (==, !=,
785 <, <=, >, and >=) on ordinal fields and their subfields,
786 because OVN can implement these in OpenFlow and Open
787 vSwitch as collections of bitwise tests.
788
789 • Nominal. In statistics, nominal values cannot be usefully
790 compared except for equality. This is true of OpenFlow
791 port numbers, Ethernet types, and IP protocols are exam‐
792 ples: all of these are just identifiers assigned arbi‐
793 trarily with no deeper meaning. In OpenFlow and Open
794 vSwitch, bits in these fields generally aren’t individu‐
795 ally addressable.
796
797 OVN only supports arithmetic tests for equality on nomi‐
798 nal fields, because OpenFlow and Open vSwitch provide no
799 way for a flow to efficiently implement other comparisons
800 on them. (A test for inequality can be sort of built out
801 of two flows with different priorities, but OVN matching
802 expressions always generate flows with a single prior‐
803 ity.)
804
805 String fields are always nominal.
806
807 • Boolean. A nominal field that has only two values, 0 and
808 1, is somewhat exceptional, since it is easy to support
809 both equality and inequality tests on such a field: ei‐
810 ther one can be implemented as a test for 0 or 1.
811
812 Only predicates (see above) have a Boolean level of mea‐
813 surement.
814
815 This isn’t a standard level of measurement.
816
817 Prerequisites. Any symbol can have prerequisites, which are ad‐
818 ditional condition implied by the use of the symbol. For exam‐
819 ple, For example, icmp4.type symbol might have prerequisite
820 icmp4, which would cause an expression icmp4.type == 0 to be in‐
821 terpreted as icmp4.type == 0 && icmp4, which would in turn ex‐
822 pand to icmp4.type == 0 && eth.type == 0x800 && ip4.proto == 1
823 (assuming icmp4 is a predicate defined as suggested under Types
824 above).
825
826 Relational operators
827
828 All of the standard relational operators ==, !=, <, <=, >, and
829 >= are supported. Nominal fields support only == and !=, and
830 only in a positive sense when outer ! are taken into account,
831 e.g. given string field inport, inport == "eth0" and !(inport !=
832 "eth0") are acceptable, but not inport != "eth0".
833
834 The implementation of == (or != when it is negated), is more ef‐
835 ficient than that of the other relational operators.
836
837 Constants
838
839 Integer constants may be expressed in decimal, hexadecimal pre‐
840 fixed by 0x, or as dotted-quad IPv4 addresses, IPv6 addresses in
841 their standard forms, or Ethernet addresses as colon-separated
842 hex digits. A constant in any of these forms may be followed by
843 a slash and a second constant (the mask) in the same form, to
844 form a masked constant. IPv4 and IPv6 masks may be given as in‐
845 tegers, to express CIDR prefixes.
846
847 String constants have the same syntax as quoted strings in JSON
848 (thus, they are Unicode strings).
849
850 Some operators support sets of constants written inside curly
851 braces { ... }. Commas between elements of a set, and after the
852 last elements, are optional. With ==, ``field == { constant1,
853 constant2, ... }’’ is syntactic sugar for ``field == constant1
854 || field == constant2 || .... Similarly, ``field != { constant1,
855 constant2, ... }’’ is equivalent to ``field != constant1 &&
856 field != constant2 && ...’’.
857
858 You may refer to a set of IPv4, IPv6, or MAC addresses stored in
859 the Address_Set table by its name. An Address_Set with a name of
860 set1 can be referred to as $set1.
861
862 You may refer to a group of logical switch ports stored in the
863 Port_Group table by its name. An Port_Group with a name of
864 port_group1 can be referred to as @port_group1.
865
866 Additionally, you may refer to the set of addresses belonging to
867 a group of logical switch ports stored in the Port_Group table
868 by its name followed by a suffix ’_ip4’/’_ip6’. The IPv4 address
869 set of a Port_Group with a name of port_group1 can be referred
870 to as $port_group1_ip4, and the IPv6 address set of the same
871 Port_Group can be referred to as $port_group1_ip6
872
873 Miscellaneous
874
875 Comparisons may name the symbol or the constant first, e.g.
876 tcp.src == 80 and 80 == tcp.src are both acceptable.
877
878 Tests for a range may be expressed using a syntax like 1024 <=
879 tcp.src <= 49151, which is equivalent to 1024 <= tcp.src &&
880 tcp.src <= 49151.
881
882 For a one-bit field or predicate, a mention of its name is
883 equivalent to symobl == 1, e.g. vlan.present is equivalent to
884 vlan.present == 1. The same is true for one-bit subfields, e.g.
885 vlan.tci[12]. There is no technical limitation to implementing
886 the same for ordinal fields of all widths, but the implementa‐
887 tion is expensive enough that the syntax parser requires writing
888 an explicit comparison against zero to make mistakes less
889 likely, e.g. in tcp.src != 0 the comparison against 0 is re‐
890 quired.
891
892 Operator precedence is as shown below, from highest to lowest.
893 There are two exceptions where parentheses are required even
894 though the table would suggest that they are not: && and || re‐
895 quire parentheses when used together, and ! requires parentheses
896 when applied to a relational expression. Thus, in (eth.type ==
897 0x800 || eth.type == 0x86dd) && ip.proto == 6 or !(arp.op == 1),
898 the parentheses are mandatory.
899
900 • ()
901
902 • == != < <= > >=
903
904 • !
905
906 • && ||
907
908 Comments may be introduced by //, which extends to the next new-
909 line. Comments within a line may be bracketed by /* and */. Mul‐
910 tiline comments are not supported.
911
912 Symbols
913
914 Most of the symbols below have integer type. Only inport and
915 outport have string type. inport names a logical port. Thus, its
916 value is a logical_port name from the Port_Binding table. out‐
917 port may name a logical port, as inport, or a logical multicast
918 group defined in the Multicast_Group table. For both symbols,
919 only names within the flow’s logical datapath may be used.
920
921 The regX symbols are 32-bit integers. The xxregX symbols are
922 128-bit integers, which overlay four of the 32-bit registers:
923 xxreg0 overlays reg0 through reg3, with reg0 supplying the most-
924 significant bits of xxreg0 and reg3 the least-significant.
925 xxreg1 similarly overlays reg4 through reg7.
926
927 • reg0...reg9
928
929 • xxreg0 xxreg1
930
931 • inport outport
932
933 • flags.loopback
934
935 • pkt.mark
936
937 • eth.src eth.dst eth.type
938
939 • vlan.tci vlan.vid vlan.pcp vlan.present
940
941 • ip.proto ip.dscp ip.ecn ip.ttl ip.frag
942
943 • ip4.src ip4.dst
944
945 • ip6.src ip6.dst ip6.label
946
947 • arp.op arp.spa arp.tpa arp.sha arp.tha
948
949 • rarp.op rarp.spa rarp.tpa rarp.sha rarp.tha
950
951 • tcp.src tcp.dst tcp.flags
952
953 • udp.src udp.dst
954
955 • sctp.src sctp.dst
956
957 • icmp4.type icmp4.code
958
959 • icmp6.type icmp6.code
960
961 • nd.target nd.sll nd.tll
962
963 • ct_mark ct_label
964
965 • ct_state, which has several Boolean subfields. The
966 ct_next action initializes the following subfields:
967
968 • ct.trk: Always set to true by ct_next to indicate
969 that connection tracking has taken place. All
970 other ct subfields have ct.trk as a prerequisite.
971
972 • ct.new: True for a new flow
973
974 • ct.est: True for an established flow
975
976 • ct.rel: True for a related flow
977
978 • ct.rpl: True for a reply flow
979
980 • ct.inv: True for a connection entry in a bad state
981
982 The ct_dnat, ct_snat, and ct_lb actions initialize the
983 following subfields:
984
985 • ct.dnat: True for a packet whose destination IP
986 address has been changed.
987
988 • ct.snat: True for a packet whose source IP address
989 has been changed.
990
991 The following predicates are supported:
992
993 • eth.bcast expands to eth.dst == ff:ff:ff:ff:ff:ff
994
995 • eth.mcast expands to eth.dst[40]
996
997 • vlan.present expands to vlan.tci[12]
998
999 • ip4 expands to eth.type == 0x800
1000
1001 • ip4.src_mcast expands to ip4.src[28..31] == 0xe
1002
1003 • ip4.mcast expands to ip4.dst[28..31] == 0xe
1004
1005 • ip6 expands to eth.type == 0x86dd
1006
1007 • ip expands to ip4 || ip6
1008
1009 • icmp4 expands to ip4 && ip.proto == 1
1010
1011 • icmp6 expands to ip6 && ip.proto == 58
1012
1013 • icmp expands to icmp4 || icmp6
1014
1015 • ip.is_frag expands to ip.frag[0]
1016
1017 • ip.later_frag expands to ip.frag[1]
1018
1019 • ip.first_frag expands to ip.is_frag && !ip.later_frag
1020
1021 • arp expands to eth.type == 0x806
1022
1023 • rarp expands to eth.type == 0x8035
1024
1025 • nd expands to icmp6.type == {135, 136} && icmp6.code == 0
1026 && ip.ttl == 255
1027
1028 • nd_ns expands to icmp6.type == 135 && icmp6.code == 0 &&
1029 ip.ttl == 255
1030
1031 • nd_na expands to icmp6.type == 136 && icmp6.code == 0 &&
1032 ip.ttl == 255
1033
1034 • nd_rs expands to icmp6.type == 133 && icmp6.code == 0 &&
1035 ip.ttl == 255
1036
1037 • nd_ra expands to icmp6.type == 134 && icmp6.code == 0 &&
1038 ip.ttl == 255
1039
1040 • tcp expands to ip.proto == 6
1041
1042 • udp expands to ip.proto == 17
1043
1044 • sctp expands to ip.proto == 132
1045
1046 actions: string
1047 Logical datapath actions, to be executed when the logical flow
1048 represented by this row is the highest-priority match.
1049
1050 Actions share lexical syntax with the match column. An empty set
1051 of actions (or one that contains just white space or comments),
1052 or a set of actions that consists of just drop;, causes the
1053 matched packets to be dropped. Otherwise, the column should con‐
1054 tain a sequence of actions, each terminated by a semicolon.
1055
1056 The following actions are defined:
1057
1058 output;
1059 In the ingress pipeline, this action executes the egress
1060 pipeline as a subroutine. If outport names a logical
1061 port, the egress pipeline executes once; if it is a mul‐
1062 ticast group, the egress pipeline runs once for each log‐
1063 ical port in the group.
1064
1065 In the egress pipeline, this action performs the actual
1066 output to the outport logical port. (In the egress pipe‐
1067 line, outport never names a multicast group.)
1068
1069 By default, output to the input port is implicitly
1070 dropped, that is, output becomes a no-op if outport ==
1071 inport. Occasionally it may be useful to override this
1072 behavior, e.g. to send an ARP reply to an ARP request; to
1073 do so, use flags.loopback = 1 to allow the packet to
1074 "hair-pin" back to the input port.
1075
1076 next;
1077 next(table);
1078 next(pipeline=pipeline, table=table);
1079 Executes the given logical datapath table in pipeline as a
1080 subroutine. The default table is just after the current
1081 one. If pipeline is specified, it may be ingress or egress;
1082 the default pipeline is the one currently executing. Ac‐
1083 tions in the both ingress and egress pipeline can use next
1084 to jump across the other pipeline. Actions in the ingress
1085 pipeline should use next to jump into the specific table of
1086 egress pipeline only if it is certain that the packets are
1087 local and not tunnelled and wants to skip certain stages in
1088 the packet processing.
1089
1090 field = constant;
1091 Sets data or metadata field field to constant value con‐
1092 stant, e.g. outport = "vif0"; to set the logical output
1093 port. To set only a subset of bits in a field, specify a
1094 subfield for field or a masked constant, e.g. one may use
1095 vlan.pcp[2] = 1; or vlan.pcp = 4/4; to set the most signif‐
1096 icant bit of the VLAN PCP.
1097
1098 Assigning to a field with prerequisites implicitly adds
1099 those prerequisites to match; thus, for example, a flow
1100 that sets tcp.dst applies only to TCP flows, regardless of
1101 whether its match mentions any TCP field.
1102
1103 Not all fields are modifiable (e.g. eth.type and ip.proto
1104 are read-only), and not all modifiable fields may be par‐
1105 tially modified (e.g. ip.ttl must assigned as a whole). The
1106 outport field is modifiable in the ingress pipeline but not
1107 in the egress pipeline.
1108
1109 ovn_field = constant;
1110 Sets OVN field ovn_field to constant value constant.
1111
1112 OVN supports setting the values of certain fields which are
1113 not yet supported in OpenFlow to set or modify them.
1114
1115 Below are the supported OVN fields:
1116
1117 • icmp4.frag_mtu icmp6.frag_mtu
1118
1119 This field sets the low-order 16 bits of the
1120 ICMP{4,6} header field that is labelled "unused" in
1121 the ICMP specification as defined in the RFC 1191
1122 with the value specified in constant.
1123
1124 Eg. icmp4.frag_mtu = 1500;
1125
1126 field1 = field2;
1127 Sets data or metadata field field1 to the value of data or
1128 metadata field field2, e.g. reg0 = ip4.src; copies ip4.src
1129 into reg0. To modify only a subset of a field’s bits, spec‐
1130 ify a subfield for field1 or field2 or both, e.g. vlan.pcp
1131 = reg0[0..2]; copies the least-significant bits of reg0
1132 into the VLAN PCP.
1133
1134 field1 and field2 must be the same type, either both string
1135 or both integer fields. If they are both integer fields,
1136 they must have the same width.
1137
1138 If field1 or field2 has prerequisites, they are added im‐
1139 plicitly to match. It is possible to write an assignment
1140 with contradictory prerequisites, such as ip4.src =
1141 ip6.src[0..31];, but the contradiction means that a logical
1142 flow with such an assignment will never be matched.
1143
1144 field1 <-> field2;
1145 Similar to field1 = field2; except that the two values are
1146 exchanged instead of copied. Both field1 and field2 must
1147 modifiable.
1148
1149 push(field);
1150 Push the value of field to the stack top.
1151
1152 pop(field);
1153 Pop the stack top and store the value to field, which must
1154 be modifiable.
1155
1156 ip.ttl--;
1157 Decrements the IPv4 or IPv6 TTL. If this would make the TTL
1158 zero or negative, then processing of the packet halts; no
1159 further actions are processed. (To properly handle such
1160 cases, a higher-priority flow should match on ip.ttl == {0,
1161 1};.)
1162
1163 Prerequisite: ip
1164
1165 ct_next;
1166 Apply connection tracking to the flow, initializing
1167 ct_state for matching in later tables. Automatically moves
1168 on to the next table, as if followed by next.
1169
1170 As a side effect, IP fragments will be reassembled for
1171 matching. If a fragmented packet is output, then it will be
1172 sent with any overlapping fragments squashed. The connec‐
1173 tion tracking state is scoped by the logical port when the
1174 action is used in a flow for a logical switch, so overlap‐
1175 ping addresses may be used. To allow traffic related to the
1176 matched flow, execute ct_commit . Connection tracking state
1177 is scoped by the logical topology when the action is used
1178 in a flow for a router.
1179
1180 It is possible to have actions follow ct_next, but they
1181 will not have access to any of its side-effects and is not
1182 generally useful.
1183
1184 ct_commit { };
1185 ct_commit { ct_mark=value[/mask]; };
1186 ct_commit { ct_label=value[/mask]; };
1187 ct_commit { ct_mark=value[/mask]; ct_label=value[/mask]; };
1188 Commit the flow to the connection tracking entry associated
1189 with it by a previous call to ct_next. When
1190 ct_mark=value[/mask] and/or ct_label=value[/mask] are sup‐
1191 plied, ct_mark and/or ct_label will be set to the values
1192 indicated by value[/mask] on the connection tracking entry.
1193 ct_mark is a 32-bit field. ct_label is a 128-bit field. The
1194 value[/mask] should be specified in hex string if more than
1195 64bits are to be used. Registers and other named fields can
1196 be used for value. ct_mark and ct_label may be sub-ad‐
1197 dressed in order to have specific bits set.
1198
1199 Note that if you want processing to continue in the next
1200 table, you must execute the next action after ct_commit.
1201 You may also leave out next which will commit connection
1202 tracking state, and then drop the packet. This could be
1203 useful for setting ct_mark on a connection tracking entry
1204 before dropping a packet, for example.
1205
1206 ct_dnat;
1207 ct_dnat(IP);
1208 ct_dnat sends the packet through the DNAT zone in connec‐
1209 tion tracking table to unDNAT any packet that was DNATed in
1210 the opposite direction. The packet is then automatically
1211 sent to to the next tables as if followed by next; action.
1212 The next tables will see the changes in the packet caused
1213 by the connection tracker.
1214
1215 ct_dnat(IP) sends the packet through the DNAT zone to
1216 change the destination IP address of the packet to the one
1217 provided inside the parentheses and commits the connection.
1218 The packet is then automatically sent to the next tables as
1219 if followed by next; action. The next tables will see the
1220 changes in the packet caused by the connection tracker.
1221
1222 ct_snat;
1223 ct_snat(IP);
1224 ct_snat sends the packet through the SNAT zone to unSNAT
1225 any packet that was SNATed in the opposite direction. The
1226 packet is automatically sent to the next tables as if fol‐
1227 lowed by the next; action. The next tables will see the
1228 changes in the packet caused by the connection tracker.
1229
1230 ct_snat(IP) sends the packet through the SNAT zone to
1231 change the source IP address of the packet to the one pro‐
1232 vided inside the parenthesis and commits the connection.
1233 The packet is then automatically sent to the next tables as
1234 if followed by next; action. The next tables will see the
1235 changes in the packet caused by the connection tracker.
1236
1237 ct_dnat_in_czone;
1238 ct_dnat_in_czone(IP);
1239 ct_dnat_in_czone sends the packet through the common NAT
1240 zone (used for both DNAT and SNAT) in connection tracking
1241 table to unDNAT any packet that was DNATed in the opposite
1242 direction. The packet is then automatically sent to to the
1243 next tables as if followed by next; action. The next tables
1244 will see the changes in the packet caused by the connection
1245 tracker.
1246
1247 ct_dnat_in_czone(IP) sends the packet through the common
1248 NAT zone to change the destination IP address of the packet
1249 to the one provided inside the parentheses and commits the
1250 connection. The packet is then automatically sent to the
1251 next tables as if followed by next; action. The next tables
1252 will see the changes in the packet caused by the connection
1253 tracker.
1254
1255 ct_snat_in_czone;
1256 ct_snat_in_czone(IP);
1257 ct_snat_in_czone sends the packet through the common NAT
1258 zone to unSNAT any packet that was SNATed in the opposite
1259 direction. The packet is automatically sent to the next ta‐
1260 bles as if followed by the next; action. The next tables
1261 will see the changes in the packet caused by the connection
1262 tracker.
1263
1264 ct_snat_in_czone(IP) sends the packet\ through the common
1265 NAT zone to change the source IP address of the packet to
1266 the one provided inside the parenthesis and commits the
1267 connection. The packet is then automatically sent to the
1268 next tables as if followed by next; action. The next tables
1269 will see the changes in the packet caused by the connection
1270 tracker.
1271
1272 ct_clear;
1273 Clears connection tracking state.
1274
1275 ct_commit_nat;
1276 Applies NAT and commits the connection to the CT. Automati‐
1277 cally moves on to the next table, as if followed by next.
1278 This is very useful for connections that are in related
1279 state for already existing connections and allows the NAT
1280 to be applied to them as well.
1281
1282 clone { action; ... };
1283 Makes a copy of the packet being processed and executes
1284 each action on the copy. Actions following the clone ac‐
1285 tion, if any, apply to the original, unmodified packet.
1286 This can be used as a way to ``save and restore’’ the
1287 packet around a set of actions that may modify it and
1288 should not persist.
1289
1290 arp { action; ... };
1291 Temporarily replaces the IPv4 packet being processed by an
1292 ARP packet and executes each nested action on the ARP
1293 packet. Actions following the arp action, if any, apply to
1294 the original, unmodified packet.
1295
1296 The ARP packet that this action operates on is initialized
1297 based on the IPv4 packet being processed, as follows. These
1298 are default values that the nested actions will probably
1299 want to change:
1300
1301 • eth.src unchanged
1302
1303 • eth.dst unchanged
1304
1305 • eth.type = 0x0806
1306
1307 • arp.op = 1 (ARP request)
1308
1309 • arp.sha copied from eth.src
1310
1311 • arp.spa copied from ip4.src
1312
1313 • arp.tha = 00:00:00:00:00:00
1314
1315 • arp.tpa copied from ip4.dst
1316
1317 The ARP packet has the same VLAN header, if any, as the IP
1318 packet it replaces.
1319
1320 Prerequisite: ip4
1321
1322 get_arp(P, A);
1323 Parameters: logical port string field P, 32-bit IP address
1324 field A.
1325
1326 Looks up A in P’s mac binding table. If an entry is found,
1327 stores its Ethernet address in eth.dst, otherwise stores
1328 00:00:00:00:00:00 in eth.dst.
1329
1330 Example: get_arp(outport, ip4.dst);
1331
1332 put_arp(P, A, E);
1333 Parameters: logical port string field P, 32-bit IP address
1334 field A, 48-bit Ethernet address field E.
1335
1336 Adds or updates the entry for IP address A in logical port
1337 P’s mac binding table, setting its Ethernet address to E.
1338
1339 Example: put_arp(inport, arp.spa, arp.sha);
1340
1341 R = lookup_arp(P, A, M);
1342 Parameters: logical port string field P, 32-bit IP address
1343 field A, 48-bit MAC address field M.
1344
1345 Result: stored to a 1-bit subfield R.
1346
1347 Looks up A and M in P’s mac binding table. If an entry is
1348 found, stores 1 in the 1-bit subfield R, else 0.
1349
1350 Example: reg0[0] = lookup_arp(inport, arp.spa, arp.sha);
1351
1352 R = lookup_arp_ip(P, A);
1353 Parameters: logical port string field P, 32-bit IP address
1354 field A.
1355
1356 Result: stored to a 1-bit subfield R.
1357
1358 Looks up A in P’s mac binding table. If an entry is found,
1359 stores 1 in the 1-bit subfield R, else 0.
1360
1361 Example: reg0[0] = lookup_arp_ip(inport, arp.spa);
1362
1363 P = get_fdb(A);
1364 Parameters:48-bit MAC address field A.
1365
1366 Looks up A in fdb table. If an entry is found, stores the
1367 logical port key to the out parameter P.
1368
1369 Example: outport = get_fdb(eth.src);
1370
1371 put_fdb(P, A);
1372 Parameters: logical port string field P, 48-bit MAC address
1373 field A.
1374
1375 Adds or updates the entry for Ethernet address A in fdb ta‐
1376 ble, setting its logical port key to P.
1377
1378 Example: put_fdb(inport, arp.spa);
1379
1380 R = lookup_fdb(P, A);
1381 Parameters: 48-bit MAC address field M, logical port string
1382 field P.
1383
1384 Result: stored to a 1-bit subfield R.
1385
1386 Looks up A in fdb table. If an entry is found and the the
1387 logical port key is P, P, stores 1 in the 1-bit subfield R,
1388 else 0.
1389
1390 Example: reg0[0] = lookup_fdb(inport, eth.src);
1391
1392 nd_ns { action; ... };
1393 Temporarily replaces the IPv6 packet being processed by an
1394 IPv6 Neighbor Solicitation packet and executes each nested
1395 action on the IPv6 NS packet. Actions following the nd_ns
1396 action, if any, apply to the original, unmodified packet.
1397
1398 The IPv6 NS packet that this action operates on is initial‐
1399 ized based on the IPv6 packet being processed, as follows.
1400 These are default values that the nested actions will prob‐
1401 ably want to change:
1402
1403 • eth.src unchanged
1404
1405 • eth.dst set to IPv6 multicast MAC address
1406
1407 • eth.type = 0x86dd
1408
1409 • ip6.src copied from ip6.src
1410
1411 • ip6.dst set to IPv6 Solicited-Node multicast address
1412
1413 • icmp6.type = 135 (Neighbor Solicitation)
1414
1415 • nd.target copied from ip6.dst
1416
1417 The IPv6 NS packet has the same VLAN header, if any, as the
1418 IP packet it replaces.
1419
1420 Prerequisite: ip6
1421
1422 nd_na { action; ... };
1423 Temporarily replaces the IPv6 neighbor solicitation packet
1424 being processed by an IPv6 neighbor advertisement (NA)
1425 packet and executes each nested action on the NA packet.
1426 Actions following the nd_na action, if any, apply to the
1427 original, unmodified packet.
1428
1429 The NA packet that this action operates on is initialized
1430 based on the IPv6 packet being processed, as follows. These
1431 are default values that the nested actions will probably
1432 want to change:
1433
1434 • eth.dst exchanged with eth.src
1435
1436 • eth.type = 0x86dd
1437
1438 • ip6.dst copied from ip6.src
1439
1440 • ip6.src copied from nd.target
1441
1442 • icmp6.type = 136 (Neighbor Advertisement)
1443
1444 • nd.target unchanged
1445
1446 • nd.sll = 00:00:00:00:00:00
1447
1448 • nd.tll copied from eth.dst
1449
1450 The ND packet has the same VLAN header, if any, as the IPv6
1451 packet it replaces.
1452
1453 Prerequisite: nd_ns
1454
1455 nd_na_router { action; ... };
1456 Temporarily replaces the IPv6 neighbor solicitation packet
1457 being processed by an IPv6 neighbor advertisement (NA)
1458 packet, sets ND_NSO_ROUTER in the RSO flags and executes
1459 each nested action on the NA packet. Actions following the
1460 nd_na_router action, if any, apply to the original, unmodi‐
1461 fied packet.
1462
1463 The NA packet that this action operates on is initialized
1464 based on the IPv6 packet being processed, as follows. These
1465 are default values that the nested actions will probably
1466 want to change:
1467
1468 • eth.dst exchanged with eth.src
1469
1470 • eth.type = 0x86dd
1471
1472 • ip6.dst copied from ip6.src
1473
1474 • ip6.src copied from nd.target
1475
1476 • icmp6.type = 136 (Neighbor Advertisement)
1477
1478 • nd.target unchanged
1479
1480 • nd.sll = 00:00:00:00:00:00
1481
1482 • nd.tll copied from eth.dst
1483
1484 The ND packet has the same VLAN header, if any, as the IPv6
1485 packet it replaces.
1486
1487 Prerequisite: nd_ns
1488
1489 get_nd(P, A);
1490 Parameters: logical port string field P, 128-bit IPv6 ad‐
1491 dress field A.
1492
1493 Looks up A in P’s mac binding table. If an entry is found,
1494 stores its Ethernet address in eth.dst, otherwise stores
1495 00:00:00:00:00:00 in eth.dst.
1496
1497 Example: get_nd(outport, ip6.dst);
1498
1499 put_nd(P, A, E);
1500 Parameters: logical port string field P, 128-bit IPv6 ad‐
1501 dress field A, 48-bit Ethernet address field E.
1502
1503 Adds or updates the entry for IPv6 address A in logical
1504 port P’s mac binding table, setting its Ethernet address to
1505 E.
1506
1507 Example: put_nd(inport, nd.target, nd.tll);
1508
1509 R = lookup_nd(P, A, M);
1510 Parameters: logical port string field P, 128-bit IP address
1511 field A, 48-bit MAC address field M.
1512
1513 Result: stored to a 1-bit subfield R.
1514
1515 Looks up A and M in P’s mac binding table. If an entry is
1516 found, stores 1 in the 1-bit subfield R, else 0.
1517
1518 Example: reg0[0] = lookup_nd(inport, ip6.src, eth.src);
1519
1520 R = lookup_nd_ip(P, A);
1521 Parameters: logical port string field P, 128-bit IP address
1522 field A.
1523
1524 Result: stored to a 1-bit subfield R.
1525
1526 Looks up A in P’s mac binding table. If an entry is found,
1527 stores 1 in the 1-bit subfield R, else 0.
1528
1529 Example: reg0[0] = lookup_nd_ip(inport, ip6.src);
1530
1531 R = put_dhcp_opts(D1 = V1, D2 = V2, ..., Dn = Vn);
1532 Parameters: one or more DHCP option/value pairs, which must
1533 include an offerip option (with code 0).
1534
1535 Result: stored to a 1-bit subfield R.
1536
1537 Valid only in the ingress pipeline.
1538
1539 When this action is applied to a DHCP request packet
1540 (DHCPDISCOVER or DHCPREQUEST), it changes the packet into a
1541 DHCP reply (DHCPOFFER or DHCPACK, respectively), replaces
1542 the options by those specified as parameters, and stores 1
1543 in R.
1544
1545 When this action is applied to a non-DHCP packet or a DHCP
1546 packet that is not DHCPDISCOVER or DHCPREQUEST, it leaves
1547 the packet unchanged and stores 0 in R.
1548
1549 The contents of the DHCP_Option table control the DHCP op‐
1550 tion names and values that this action supports.
1551
1552 Example: reg0[0] = put_dhcp_opts(offerip = 10.0.0.2, router
1553 = 10.0.0.1, netmask = 255.255.255.0, dns_server = {8.8.8.8,
1554 7.7.7.7});
1555
1556 R = put_dhcpv6_opts(D1 = V1, D2 = V2, ..., Dn = Vn);
1557 Parameters: one or more DHCPv6 option/value pairs.
1558
1559 Result: stored to a 1-bit subfield R.
1560
1561 Valid only in the ingress pipeline.
1562
1563 When this action is applied to a DHCPv6 request packet, it
1564 changes the packet into a DHCPv6 reply, replaces the op‐
1565 tions by those specified as parameters, and stores 1 in R.
1566
1567 When this action is applied to a non-DHCPv6 packet or an
1568 invalid DHCPv6 request packet , it leaves the packet un‐
1569 changed and stores 0 in R.
1570
1571 The contents of the DHCPv6_Options table control the DHCPv6
1572 option names and values that this action supports.
1573
1574 Example: reg0[3] = put_dhcpv6_opts(ia_addr = aef0::4,
1575 server_id = 00:00:00:00:10:02,
1576 dns_server={ae70::1,ae70::2});
1577
1578 set_queue(queue_number);
1579 Parameters: Queue number queue_number, in the range 0 to
1580 61440.
1581
1582 This is a logical equivalent of the OpenFlow set_queue ac‐
1583 tion. It affects packets that egress a hypervisor through a
1584 physical interface. For nonzero queue_number, it configures
1585 packet queuing to match the settings configured for the
1586 Port_Binding with options:qdisc_queue_id matching
1587 queue_number. When queue_number is zero, it resets queuing
1588 to the default strategy.
1589
1590 Example: set_queue(10);
1591
1592 ct_lb;
1593 ct_lb(backends=ip[:port][,...][;
1594 hash_fields=field1,field2,...][; ct_flag]);
1595 With arguments, ct_lb commits the packet to the connection
1596 tracking table and DNATs the packet’s destination IP ad‐
1597 dress (and port) to the IP address or addresses (and op‐
1598 tional ports) specified in the backends. If multiple comma-
1599 separated IP addresses are specified, each is given equal
1600 weight for picking the DNAT address. By default, dp_hash is
1601 used as the OpenFlow group selection method, but if
1602 hash_fields is specified, hash is used as the selection
1603 method, and the fields listed are used as the hash fields.
1604 The ct_flag field represents one of supported flag:
1605 skip_snat or force_snat, this flag will be stored in ct_la‐
1606 bel register.
1607
1608 Without arguments, ct_lb sends the packet to the connection
1609 tracking table to NAT the packets. If the packet is part of
1610 an established connection that was previously committed to
1611 the connection tracker via ct_lb(...), it will automati‐
1612 cally get DNATed to the same IP address as the first packet
1613 in that connection.
1614
1615 Processing automatically moves on to the next table, as if
1616 next; were specified, and later tables act on the packet as
1617 modified by the connection tracker. Connection tracking
1618 state is scoped by the logical port when the action is used
1619 in a flow for a logical switch, so overlapping addresses
1620 may be used. Connection tracking state is scoped by the
1621 logical topology when the action is used in a flow for a
1622 router.
1623
1624 ct_lb_mark;
1625 ct_lb_mark(backends=ip[:port][,...][;
1626 hash_fields=field1,field2,...][; ct_flag]);
1627 Same as ct_lb, except that it internally uses ct_mark to
1628 store the NAT flag, while ct_lb uses ct_label for the same
1629 purpose.
1630
1631 R = dns_lookup();
1632 Parameters: No parameters.
1633
1634 Result: stored to a 1-bit subfield R.
1635
1636 Valid only in the ingress pipeline.
1637
1638 When this action is applied to a valid DNS request (a UDP
1639 packet typically directed to port 53), it attempts to re‐
1640 solve the query using the contents of the DNS table. If it
1641 is successful, it changes the packet into a DNS reply and
1642 stores 1 in R. If the action is applied to a non-DNS
1643 packet, an invalid DNS request packet, or a valid DNS re‐
1644 quest for which the DNS table does not supply an answer, it
1645 leaves the packet unchanged and stores 0 in R.
1646
1647 Regardless of success, the action does not make any of the
1648 changes to the flow that are necessary to direct the packet
1649 back to the requester. The logical pipeline can implement
1650 this behavior with matches and actions in later tables.
1651
1652 Example: reg0[3] = dns_lookup();
1653
1654 Prerequisite: udp
1655
1656 R = put_nd_ra_opts(D1 = V1, D2 = V2, ..., Dn = Vn);
1657 Parameters: The following IPv6 ND Router Advertisement op‐
1658 tion/value pairs as defined in RFC 4861.
1659
1660 • addr_mode
1661
1662 Mandatory parameter which specifies the address mode
1663 flag to be set in the RA flag options field. The
1664 value of this option is a string and the following
1665 values can be defined - "slaac", "dhcpv6_stateful"
1666 and "dhcpv6_stateless".
1667
1668 • slla
1669
1670 Mandatory parameter which specifies the link-layer
1671 address of the interface from which the Router Ad‐
1672 vertisement is sent.
1673
1674 • mtu
1675
1676 Optional parameter which specifies the MTU.
1677
1678 • prefix
1679
1680 Optional parameter which should be specified if the
1681 addr_mode is "slaac" or "dhcpv6_stateless". The
1682 value should be an IPv6 prefix which will be used
1683 for stateless IPv6 address configuration. This op‐
1684 tion can be defined multiple times.
1685
1686 Result: stored to a 1-bit subfield R.
1687
1688 Valid only in the ingress pipeline.
1689
1690 When this action is applied to an IPv6 Router solicitation
1691 request packet, it changes the packet into an IPv6 Router
1692 Advertisement reply and adds the options specified in the
1693 parameters, and stores 1 in R.
1694
1695 When this action is applied to a non-IPv6 Router solicita‐
1696 tion packet or an invalid IPv6 request packet , it leaves
1697 the packet unchanged and stores 0 in R.
1698
1699 Example: reg0[3] = put_nd_ra_opts(addr_mode = "slaac", slla
1700 = 00:00:00:00:10:02, prefix = aef0::/64, mtu = 1450);
1701
1702 set_meter(rate);
1703 set_meter(rate, burst);
1704 Parameters: rate limit int field rate in kbps, burst rate
1705 limits int field burst in kbps.
1706
1707 This action sets the rate limit for a flow.
1708
1709 Example: set_meter(100, 1000);
1710
1711 R = check_pkt_larger(L)
1712 Parameters: packet length L to check for in bytes.
1713
1714 Result: stored to a 1-bit subfield R.
1715
1716 This is a logical equivalent of the OpenFlow
1717 check_pkt_larger action. If the packet is larger than the
1718 length specified in L, it stores 1 in the subfield R.
1719
1720 Example: reg0[6] = check_pkt_larger(1000);
1721
1722 log(key=value, ...);
1723 Causes ovn-controller to log the packet on the chassis
1724 that processes it. Packet logging currently uses the same
1725 logging mechanism as other Open vSwitch and OVN messages,
1726 which means that whether and where log messages appear
1727 depends on the local logging configuration that can be
1728 configured with ovs-appctl, etc.
1729
1730 The log action takes zero or more of the following key-
1731 value pair arguments that control what is logged:
1732
1733 name=string
1734 An optional name for the ACL. The string is cur‐
1735 rently limited to 64 bytes.
1736
1737 severity=level
1738 Indicates the severity of the event. The level is
1739 one of following (from more to less serious):
1740 alert, warning, notice, info, or debug. If a
1741 severity is not provided, the default is info.
1742
1743 verdict=value
1744 The verdict for packets matching the flow. The
1745 value must be one of allow, deny, or reject.
1746
1747 meter=string
1748 An optional rate-limiting meter to be applied to
1749 the logs. The string should reference a name entry
1750 from the Meter table. The only meter action that
1751 is appropriate is drop.
1752
1753 fwd_group(liveness=bool, childports=port, ...);
1754 Parameters: optional liveness, either true or false, de‐
1755 faulting to false; childports, a comma-delimited list of
1756 strings denoting logical ports to load balance across.
1757
1758 Load balance traffic to one or more child ports in a log‐
1759 ical switch. ovn-controller translates the fwd_group into
1760 an OpenFlow group with one bucket for each child port. If
1761 liveness=true is specified, it also integrates the bucket
1762 selection with BFD status on the tunnel interface corre‐
1763 sponding to child port.
1764
1765 Example: fwd_group(liveness=true, childports="p1", "p2");
1766
1767 icmp4 { action; ... };
1768 icmp4_error { action; ... };
1769 Temporarily replaces the IPv4 packet being processed by an
1770 ICMPv4 packet and executes each nested action on the ICMPv4
1771 packet. Actions following these actions, if any, apply to
1772 the original, unmodified packet.
1773
1774 The ICMPv4 packet that these actions operates on is ini‐
1775 tialized based on the IPv4 packet being processed, as fol‐
1776 lows. These are default values that the nested actions will
1777 probably want to change. Ethernet and IPv4 fields not
1778 listed here are not changed:
1779
1780 • ip.proto = 1 (ICMPv4)
1781
1782 • ip.frag = 0 (not a fragment)
1783
1784 • ip.ttl = 255
1785
1786 • icmp4.type = 3 (destination unreachable)
1787
1788 • icmp4.code = 1 (host unreachable)
1789
1790 icmp4_error action is expected to be used to generate an
1791 ICMPv4 packet in response to an error in original IP
1792 packet. When this action generates the ICMPv4 packet, it
1793 also copies the original IP datagram following the ICMPv4
1794 header as per RFC 1122: 3.2.2.
1795
1796 Prerequisite: ip4
1797
1798 icmp6 { action; ... };
1799 icmp6_error { action; ... };
1800 Temporarily replaces the IPv6 packet being processed by an
1801 ICMPv6 packet and executes each nested action on the ICMPv6
1802 packet. Actions following the icmp6 action, if any, apply
1803 to the original, unmodified packet.
1804
1805 The ICMPv6 packet that this action operates on is initial‐
1806 ized based on the IPv6 packet being processed, as follows.
1807 These are default values that the nested actions will prob‐
1808 ably want to change. Ethernet and IPv6 fields not listed
1809 here are not changed:
1810
1811 • ip.proto = 58 (ICMPv6)
1812
1813 • ip.ttl = 255
1814
1815 • icmp6.type = 1 (destination unreachable)
1816
1817 • icmp6.code = 1 (administratively prohibited)
1818
1819 icmp6_error action is expected to be used to generate an
1820 ICMPv6 packet in response to an error in original IPv6
1821 packet.
1822
1823 Prerequisite: ip6
1824
1825 tcp_reset;
1826 This action transforms the current TCP packet according to
1827 the following pseudocode:
1828
1829 if (tcp.ack) {
1830 tcp.seq = tcp.ack;
1831 } else {
1832 tcp.ack = tcp.seq + length(tcp.payload);
1833 tcp.seq = 0;
1834 }
1835 tcp.flags = RST;
1836
1837 Then, the action drops all TCP options and payload data,
1838 and updates the TCP checksum. IP ttl is set to 255.
1839
1840 Prerequisite: tcp
1841
1842 reject { action; ... };
1843 If the original packet is IPv4 or IPv6 TCP packet, it re‐
1844 places it with IPv4 or IPv6 TCP RST packet and executes the
1845 inner actions. Otherwise it replaces it with an ICMPv4 or
1846 ICMPv6 packet and executes the inner actions.
1847
1848 The inner actions should not attempt to swap eth source
1849 with eth destination and IP source with IP destination as
1850 this action implicitly does that.
1851
1852 trigger_event;
1853 This action is used to allow ovs-vswitchd to report CMS re‐
1854 lated events writing them in Controller_Event table. It is
1855 possible to associate a meter to a each event in order to
1856 not overload pinctrl thread under heavy load; each meter is
1857 identified though a defined naming convention. Supported
1858 events:
1859
1860 • empty_lb_backends. This event is raised if a re‐
1861 ceived packet is destined for a load balancer VIP
1862 that has no configured backend destinations. For
1863 this event, the event info includes the load bal‐
1864 ancer VIP, the load balancer UUID, and the transport
1865 protocol. Associated meter: event-elb
1866
1867 igmp;
1868 This action sends the packet to ovn-controller for multi‐
1869 cast snooping.
1870
1871 Prerequisite: igmp
1872
1873 bind_vport(V, P);
1874 Parameters: logical port string field V of type virtual,
1875 logical port string field P.
1876
1877 Binds the virtual logical port V and sets the chassis col‐
1878 umn and virtual_parent of the table Port_Binding. vir‐
1879 tual_parent is set to P.
1880
1881 handle_svc_check(P);
1882 Parameters: logical port string field P.
1883
1884 Handles the service monitor reply received from the VIF of
1885 the logical port P. ovn-controller periodically sends out
1886 the service monitor packets for the services configured in
1887 the Service_Monitor table and this action updates the sta‐
1888 tus of those services.
1889
1890 Example: handle_svc_check(inport);
1891
1892 handle_dhcpv6_reply;
1893 Handle DHCPv6 prefix delegation advertisements/replies from
1894 a IPv6 delegation server. ovn-controller will add an entry
1895 ipv6_ra_pd_list in the options table for each prefix re‐
1896 ceived from the delegation server
1897
1898 R = select(N1[=W1], N2[=W2], ...);
1899 Parameters: Integer N1, N2..., with optional weight W1, W2,
1900 ...
1901
1902 Result: stored to a logical field or subfield R.
1903
1904 Select from a list of integers N1, N2..., each within the
1905 range 0 ~ 65535, and store the selected one in the field R.
1906 There must be 2 or more integers listed, each with an op‐
1907 tional weight, which is an integer within the range 1 ~
1908 65535. If weight is not specified, it defaults to 100. The
1909 selection method is based on the 5-tuple hash of packet
1910 header.
1911
1912 Processing automatically moves on to the next table, as if
1913 next; were specified. The select action must be put as the
1914 last action of the logical flow when there are multiple ac‐
1915 tions (actions put after select will not take effect).
1916
1917 Example: reg8[16..31] = select(1=20, 2=30, 3=50);
1918
1919 handle_dhcpv6_reply;
1920 This action is used to parse DHCPv6 replies from IPv6 Dele‐
1921 gation Router and managed IPv6 Prefix delegation state ma‐
1922 chine
1923
1924 R = chk_lb_hairpin();
1925 This action checks if the packet under consideration was
1926 destined to a load balancer VIP and it is hairpinned, i.e.,
1927 after load balancing the destination IP matches the source
1928 IP. If it is so, then the 1-bit destination register R is
1929 set to 1.
1930
1931 R = chk_lb_hairpin_reply();
1932 This action checks if the packet under consideration is
1933 from one of the backend IP of a load balancer VIP and the
1934 destination IP is the load balancer VIP. If it is so, then
1935 the 1-bit destination register R is set to 1.
1936
1937 R = ct_snat_to_vip;
1938 This action sends the packet through the SNAT zone to
1939 change the source IP address of the packet to the load bal‐
1940 ancer VIP if the original destination IP was load balancer
1941 VIP and commits the connection. This action applies suc‐
1942 cessfully only for the hairpinned traffic i.e if the action
1943 chk_lb_hairpin returned success. This action doesn’t take
1944 any arguments and it determines the SNAT IP internally. The
1945 packet is not automatically sent to the next table. The
1946 caller has to execute the next; action explicitly after
1947 this action to advance the packet to the next stage.
1948
1949 R = check_in_port_sec();
1950 This action checks if the packet under consideration passes
1951 the inport port security checks. If the packet fails the
1952 port security checks, then 1 is stored in the destination
1953 register R. Else 0 is stored. The port security values to
1954 check are retrieved from the the inport logical port.
1955
1956 This action should be used in the ingress logical switch
1957 pipeline.
1958
1959 Example: reg8[0..7] = check_in_port_sec();
1960
1961 R = check_out_port_sec();
1962 This action checks if the packet under consideration passes
1963 the outport port security checks. If the packet fails the
1964 port security checks, then 1 is stored in the destination
1965 register R. Else 0 is stored. The port security values to
1966 check are retrieved from the the outport logical port.
1967
1968 This action should be used in the egress logical switch
1969 pipeline.
1970
1971 Example: reg8[0..7] = check_out_port_sec();
1972
1973 commit_ecmp_nh(ipv6);
1974 Parameters: IPv4/IPv6 traffic.
1975
1976 This action translates to an openflow "learn" action that
1977 inserts two new flows in tables 76 and 77.
1978
1979 • Match on the the 5-tuple and the expected next-hop
1980 mac address in table 76: nw_src=ip0, nw_dst=ip1,
1981 ip_proto,tp_src=l4_port0,
1982 tp_dst=l4_port1,dl_src=ethaddr and set reg9[5].
1983
1984 • Match on the 5-tuple in table 77: nw_src=ip1,
1985 nw_dst=ip0, ip_proto, tp_src=l4_port1,
1986 tp_dst=l4_port0 and set reg9[5] to 1
1987
1988 This action is applied if the packet arrives via ECMP route
1989 or if it is routed via an ECMP route
1990
1991 R = check_ecmp_nh_mac();
1992 This action checks if the packet under consideration
1993 matches any flow in table 76. If it is so, then the 1-bit
1994 destination register R is set to 1.
1995
1996 R = check_ecmp_nh();
1997 This action checks if the packet under consideration
1998 matches the any flow in table 77. If it is so, then the
1999 1-bit destination register R is set to 1.
2000
2001 commit_lb_aff(vip, backend, proto, timeout); Parameters:
2002 load-balancer virtual ip:port vip, load-balancer backend
2003 ip:port backend, load-balancer protocol proto, affinity
2004 timeout timeout.
2005
2006 This action translates to an openflow "learn" action that
2007 inserts a new flow in table 78.
2008
2009 • Match on the 4-tuple in table 78: nw_src=ip client,
2010 nw_dst=vip ip, ip_proto, tp_dst=vip port and set
2011 reg9[6] to 1, reg4 and reg8 to backend ip and port
2012 respectively. For IPv6 register xxreg1 is used to
2013 store the backend ip.
2014
2015 This action is applied for new connections received by a
2016 specific load-balacer with affinity timeout configured.
2017
2018 R = chk_lb_aff();
2019 This action checks if the packet under consideration
2020 matches any flow in table 78. If it is so, then the 1-bit
2021 destination register R is set to 1.
2022
2023 sample(probability=packets, ...)
2024 This action causes the matched traffic to be sampled using
2025 IPFIX protocol. More information about how per-flow IPFIX
2026 sampling works in OVS can be found in ovs-actions(7) and
2027 ovs-vswitchd.conf.db(5).
2028
2029 In order to reliably identify each sampled packet when it
2030 is received by the IPFIX collector, this action sets the
2031 content of the ObservationDomainID and ObservationPointID
2032 IPFIX fields (see argument description below).
2033
2034 The following key-value arguments are supported:
2035
2036 probability=packets
2037 The number of sampled packets out of 65535. It must
2038 be greater or equal to 1.
2039
2040 collector_set=id
2041 The unsigned 32-bit integer identifier of the sample
2042 collector to send sampled packets to. It must match
2043 the value configured in the Flow_Sample_Collec‐
2044 tor_Set Table in OVS. Defaults to 0.
2045
2046 obs_domain=id
2047 An unsigned 8-bit integer that identifies the sam‐
2048 pling application. It will be placed in the 8 most
2049 significant bits of the ObservationDomainID field of
2050 IPFIX samples. The 24 less significant bits will be
2051 automatically filled in with the datapath key. De‐
2052 faults to 0.
2053
2054 obs_point=id
2055 An unsigned 32-bit integer to be used as Obsserva‐
2056 tionPointID or the string @cookie to indicate that
2057 the first 32 bits of the Logical_Flow’s UUID shall
2058 be used instead.
2059
2060 tags: map of string-string pairs
2061 Key-value pairs that provide additional information to help ovn-
2062 controller processing the logical flow. Below are the tags used
2063 by ovn-controller.
2064
2065 in_out_port
2066 In the logical flow’s "match" column, if a logical port P
2067 is compared with "inport" and the logical flow is on a
2068 logical switch ingress pipeline, or if P is compared with
2069 "outport" and the logical flow is on a logical switch
2070 egress pipeline, and the expression is combined with
2071 other expressions (if any) using the operator &&, then
2072 the port P should be added as the value in this tag. If
2073 there are multiple logical ports meeting this criteria,
2074 one of them can be added. ovn-controller uses this infor‐
2075 mation to skip parsing flows that are not needed on the
2076 chassis. Failing to add the tag will affect efficiency,
2077 while adding wrong value will affect correctness.
2078
2079 controller_meter: optional string
2080 The name of the meter in table Meter to be used for all packets
2081 that the logical flow might send to ovn-controller.
2082
2083 external_ids : stage-name: optional string
2084 Human-readable name for this flow’s stage in the pipeline.
2085
2086 external_ids : stage-hint: optional string, containing an uuid
2087 UUID of a OVN_Northbound record that caused this logical flow to
2088 be created. Currently used only for attribute of logical flows
2089 to northbound ACL records.
2090
2091 external_ids : source: optional string
2092 Source file and line number of the code that added this flow to
2093 the pipeline.
2094
2095 Common Columns:
2096
2097 The overall purpose of these columns is described under Common Columns
2098 at the beginning of this document.
2099
2100 external_ids: map of string-string pairs
2101
2103 Each row in this table represents a group of logical datapaths refer‐
2104 enced by the logical_dp_group column in the Logical_Flow table.
2105
2106 Summary:
2107 datapaths set of weak reference to Datapath_Bind‐
2108 ings
2109
2110 Details:
2111 datapaths: set of weak reference to Datapath_Bindings
2112 List of Datapath_Binding entries.
2113
2115 The rows in this table define multicast groups of logical ports. Multi‐
2116 cast groups allow a single packet transmitted over a tunnel to a hyper‐
2117 visor to be delivered to multiple VMs on that hypervisor, which uses
2118 bandwidth more efficiently.
2119
2120 Each row in this table defines a logical multicast group numbered tun‐
2121 nel_key within datapath, whose logical ports are listed in the ports
2122 column.
2123
2124 Summary:
2125 datapath Datapath_Binding
2126 tunnel_key integer, in range 32,768 to 65,535
2127 name string
2128 ports set of weak reference to Port_Bindings
2129
2130 Details:
2131 datapath: Datapath_Binding
2132 The logical datapath in which the multicast group resides.
2133
2134 tunnel_key: integer, in range 32,768 to 65,535
2135 The value used to designate this logical egress port in tunnel
2136 encapsulations. An index forces the key to be unique within the
2137 datapath. The unusual range ensures that multicast group IDs do
2138 not overlap with logical port IDs.
2139
2140 name: string
2141 The logical multicast group’s name. An index forces the name to
2142 be unique within the datapath. Logical flows in the ingress
2143 pipeline may output to the group just as for individual logical
2144 ports, by assigning the group’s name to outport and executing an
2145 output action.
2146
2147 Multicast group names and logical port names share a single
2148 namespace and thus should not overlap (but the database schema
2149 cannot enforce this). To try to avoid conflicts, ovn-northd uses
2150 names that begin with _MC_.
2151
2152 ports: set of weak reference to Port_Bindings
2153 The logical ports included in the multicast group. All of these
2154 ports must be in the datapath logical datapath (but the database
2155 schema cannot enforce this).
2156
2158 Each row in this table represents a mirror that can be used for port
2159 mirroring. These mirrors are referenced by the mirror_rules column in
2160 the Port_Binding table.
2161
2162 Summary:
2163 name string (must be unique within table)
2164 filter string, either from-lport or to-lport
2165 sink string
2166 type string, either erspan or gre
2167 index integer
2168 external_ids map of string-string pairs
2169
2170 Details:
2171 name: string (must be unique within table)
2172 Represents the name of the mirror.
2173
2174 filter: string, either from-lport or to-lport
2175 The value of this field represents selection criteria of the
2176 mirror.
2177
2178 sink: string
2179 The value of this field represents the destination/sink of the
2180 mirror.
2181
2182 type: string, either erspan or gre
2183 The value of this field represents the type of the tunnel used
2184 for sending the mirrored packets
2185
2186 index: integer
2187 The value of this field represents the key/idx depending on the
2188 tunnel type configured
2189
2190 external_ids: map of string-string pairs
2191 See External IDs at the beginning of this document.
2192
2194 Each row in this table represents a meter that can be used for QoS or
2195 rate-limiting.
2196
2197 Summary:
2198 name string (must be unique within table)
2199 unit string, either kbps or pktps
2200 bands set of 1 or more Meter_Bands
2201
2202 Details:
2203 name: string (must be unique within table)
2204 A name for this meter.
2205
2206 Names that begin with "__" (two underscores) are reserved for
2207 OVN internal use and should not be added manually.
2208
2209 unit: string, either kbps or pktps
2210 The unit for rate and burst_rate parameters in the bands entry.
2211 kbps specifies kilobits per second, and pktps specifies packets
2212 per second.
2213
2214 bands: set of 1 or more Meter_Bands
2215 The bands associated with this meter. Each band specifies a rate
2216 above which the band is to take the action action. If multiple
2217 bands’ rates are exceeded, then the band with the highest rate
2218 among the exceeded bands is selected.
2219
2221 Each row in this table represents a meter band which specifies the rate
2222 above which the configured action should be applied. These bands are
2223 referenced by the bands column in the Meter table.
2224
2225 Summary:
2226 action string, must be drop
2227 rate integer, in range 1 to 4,294,967,295
2228 burst_size integer, in range 0 to 4,294,967,295
2229
2230 Details:
2231 action: string, must be drop
2232 The action to execute when this band matches. The only supported
2233 action is drop.
2234
2235 rate: integer, in range 1 to 4,294,967,295
2236 The rate limit for this band, in kilobits per second or bits per
2237 second, depending on whether the parent Meter entry’s unit col‐
2238 umn specified kbps or pktps.
2239
2240 burst_size: integer, in range 0 to 4,294,967,295
2241 The maximum burst allowed for the band in kilobits or packets,
2242 depending on whether kbps or pktps was selected in the parent
2243 Meter entry’s unit column. If the size is zero, the switch is
2244 free to select some reasonable value depending on its configura‐
2245 tion.
2246
2248 Each row in this table represents a logical datapath, which implements
2249 a logical pipeline among the ports in the Port_Binding table associated
2250 with it. In practice, the pipeline in a given logical datapath imple‐
2251 ments either a logical switch or a logical router.
2252
2253 The main purpose of a row in this table is provide a physical binding
2254 for a logical datapath. A logical datapath does not have a physical lo‐
2255 cation, so its physical binding information is limited: just tun‐
2256 nel_key. The rest of the data in this table does not affect packet for‐
2257 warding.
2258
2259 Summary:
2260 tunnel_key integer, in range 1 to 16,777,215 (must
2261 be unique within table)
2262 load_balancers set of uuids
2263 OVN_Northbound Relationship:
2264 external_ids : logical-switch
2265 optional string, containing an uuid
2266 external_ids : logical-router
2267 optional string, containing an uuid
2268 external_ids : interconn-ts
2269 optional string
2270 Naming:
2271 external_ids : name optional string
2272 external_ids : name2 optional string
2273 Common Columns:
2274 external_ids map of string-string pairs
2275
2276 Details:
2277 tunnel_key: integer, in range 1 to 16,777,215 (must be unique within
2278 table)
2279 The tunnel key value to which the logical datapath is bound. The
2280 Tunnel Encapsulation section in ovn-architecture(7) describes
2281 how tunnel keys are constructed for each supported encapsula‐
2282 tion.
2283
2284 load_balancers: set of uuids
2285 Not used anymore; kept for backwards compatibility of the
2286 schema.
2287
2288 OVN_Northbound Relationship:
2289
2290 Each row in Datapath_Binding is associated with some logical datapath.
2291 ovn-northd uses these keys to track the association of a logical data‐
2292 path with concepts in the OVN_Northbound database.
2293
2294 external_ids : logical-switch: optional string, containing an uuid
2295 For a logical datapath that represents a logical switch,
2296 ovn-northd stores in this key the UUID of the corresponding Log‐
2297 ical_Switch row in the OVN_Northbound database.
2298
2299 external_ids : logical-router: optional string, containing an uuid
2300 For a logical datapath that represents a logical router,
2301 ovn-northd stores in this key the UUID of the corresponding Log‐
2302 ical_Router row in the OVN_Northbound database.
2303
2304 external_ids : interconn-ts: optional string
2305 For a logical datapath that represents a logical switch that
2306 represents a transit switch for interconnection, ovn-northd
2307 stores in this key the value of the same interconn-ts key of the
2308 external_ids column of the corresponding Logical_Switch row in
2309 the OVN_Northbound database.
2310
2311 Naming:
2312
2313 ovn-northd copies these from the name fields in the OVN_Northbound
2314 database, either from name and external_ids:neutron:router_name in the
2315 Logical_Router table or from name and external_ids:neutron:network_name
2316 in the Logical_Switch table.
2317
2318 external_ids : name: optional string
2319 A name for the logical datapath.
2320
2321 external_ids : name2: optional string
2322 Another name for the logical datapath.
2323
2324 Common Columns:
2325
2326 The overall purpose of these columns is described under Common Columns
2327 at the beginning of this document.
2328
2329 external_ids: map of string-string pairs
2330
2332 Each row in this table binds a logical port to a realization. For most
2333 logical ports, this means binding to some physical location, for exam‐
2334 ple by binding a logical port to a VIF that belongs to a VM running on
2335 a particular hypervisor. Other logical ports, such as logical patch
2336 ports, can be realized without a specific physical location, but their
2337 bindings are still expressed through rows in this table.
2338
2339 For every Logical_Switch_Port record in OVN_Northbound database,
2340 ovn-northd creates a record in this table. ovn-northd populates and
2341 maintains every column except the chassis and virtual_parent columns,
2342 which it leaves empty in new records.
2343
2344 ovn-controller/ovn-controller-vtep populates the chassis column for the
2345 records that identify the logical ports that are located on its hyper‐
2346 visor/gateway, which ovn-controller/ovn-controller-vtep in turn finds
2347 out by monitoring the local hypervisor’s Open_vSwitch database, which
2348 identifies logical ports via the conventions described in Integra‐
2349 tionGuide.rst. (The exceptions are for Port_Binding records with type
2350 of l3gateway, whose locations are identified by ovn-northd via the op‐
2351 tions:l3gateway-chassis column in this table. ovn-controller is still
2352 responsible to populate the chassis column.)
2353
2354 ovn-controller also populates the virtual_parent column of records
2355 whose type is virtual.
2356
2357 When a chassis shuts down gracefully, it should clean up the chassis
2358 column that it previously had populated. (This is not critical because
2359 resources hosted on the chassis are equally unreachable regardless of
2360 whether their rows are present.) To handle the case where a VM is shut
2361 down abruptly on one chassis, then brought up again on a different one,
2362 ovn-controller/ovn-controller-vtep must overwrite the chassis column
2363 with new information.
2364
2365 Summary:
2366 Core Features:
2367 datapath Datapath_Binding
2368 logical_port string (must be unique within table)
2369 encap optional weak reference to Encap
2370 additional_encap set of weak reference to Encaps
2371 chassis optional weak reference to Chassis
2372 additional_chassis set of weak reference to Chassis
2373 gateway_chassis set of Gateway_Chassises
2374 ha_chassis_group optional HA_Chassis_Group
2375 up optional boolean
2376 tunnel_key integer, in range 1 to 32,767
2377 mac set of strings
2378 port_security set of strings
2379 type string
2380 requested_chassis optional weak reference to Chassis
2381 requested_additional_chassis
2382 set of weak reference to Chassis
2383 mirror_rules set of weak reference to Mirrors
2384 Patch Options:
2385 options : peer optional string
2386 nat_addresses set of strings
2387 L3 Gateway Options:
2388 options : peer optional string
2389 options : l3gateway-chassis
2390 optional string
2391 nat_addresses set of strings
2392 Localnet Options:
2393 options : network_name optional string
2394 tag optional integer, in range 1 to 4,095
2395 L2 Gateway Options:
2396 options : network_name optional string
2397 options : l2gateway-chassis
2398 optional string
2399 tag optional integer, in range 1 to 4,095
2400 VTEP Options:
2401 options : vtep-physical-switch
2402 optional string
2403 options : vtep-logical-switch
2404 optional string
2405 VMI (or VIF) Options:
2406 options : requested-chassis
2407 optional string
2408 options : activation-strategy
2409 optional string
2410 options : additional-chassis-activated
2411 optional string
2412 options : iface-id-ver optional string
2413 options : qos_min_rate optional string
2414 options : qos_max_rate optional string
2415 options : qos_burst optional string
2416 options : qdisc_queue_id optional string, containing an integer,
2417 in range 1 to 61,440
2418 Distributed Gateway Port Options:
2419 options : chassis-redirect-port
2420 optional string
2421 Chassis Redirect Options:
2422 options : distributed-port optional string
2423 options : redirect-type optional string
2424 options : always-redirect optional string
2425 Nested Containers:
2426 parent_port optional string
2427 tag optional integer, in range 1 to 4,095
2428 Virtual ports:
2429 virtual_parent optional string
2430 Naming:
2431 external_ids : name optional string
2432 Common Columns:
2433 external_ids map of string-string pairs
2434
2435 Details:
2436 Core Features:
2437
2438 datapath: Datapath_Binding
2439 The logical datapath to which the logical port belongs.
2440
2441 logical_port: string (must be unique within table)
2442 A logical port. For a logical switch port, this is taken from
2443 name in the OVN_Northbound database’s Logical_Switch_Port table.
2444 For a logical router port, this is taken from name in the
2445 OVN_Northbound database’s Logical_Router_port table. (This means
2446 that logical switch ports and router port names must not share
2447 names in an OVN deployment.) OVN does not prescribe a particular
2448 format for the logical port ID.
2449
2450 encap: optional weak reference to Encap
2451 Points to preferred encapsulation configuration to transmit log‐
2452 ical dataplane packets to this chassis. The entry is reference
2453 to a Encap record.
2454
2455 additional_encap: set of weak reference to Encaps
2456 Points to preferred encapsulation configuration to transmit log‐
2457 ical dataplane packets to this additional chassis. The entry is
2458 reference to a Encap record. See also additional_chassis.
2459
2460 chassis: optional weak reference to Chassis
2461 The meaning of this column depends on the value of the type col‐
2462 umn. This is the meaning for each type
2463
2464 (empty string)
2465 The physical location of the logical port. To success‐
2466 fully identify a chassis, this column must be a Chassis
2467 record. This is populated by ovn-controller.
2468
2469 vtep The physical location of the hardware_vtep gateway. To
2470 successfully identify a chassis, this column must be a
2471 Chassis record. This is populated by ovn-controller-vtep.
2472
2473 localnet
2474 Always empty. A localnet port is realized on every chas‐
2475 sis that has connectivity to the corresponding physical
2476 network.
2477
2478 localport
2479 Always empty. A localport port is present on every chas‐
2480 sis.
2481
2482 l3gateway
2483 The physical location of the L3 gateway. To successfully
2484 identify a chassis, this column must be a Chassis record.
2485 This is populated by ovn-controller based on the value of
2486 the options:l3gateway-chassis column in this table.
2487
2488 l2gateway
2489 The physical location of this L2 gateway. To successfully
2490 identify a chassis, this column must be a Chassis record.
2491 This is populated by ovn-controller based on the value of
2492 the options:l2gateway-chassis column in this table.
2493
2494 additional_chassis: set of weak reference to Chassis
2495 The meaning of this column is the same as for the chassis. The
2496 column is used to track an additional physical location of the
2497 logical port. Used with regular (empty type) port bindings.
2498
2499 gateway_chassis: set of Gateway_Chassises
2500 A list of Gateway_Chassis.
2501
2502 This should only be populated for ports with type set to chas‐
2503 sisredirect. This column defines the list of chassis used as
2504 gateways where traffic will be redirected through.
2505
2506 ha_chassis_group: optional HA_Chassis_Group
2507 This should only be populated for ports with type set to chas‐
2508 sisredirect. This column defines the HA chassis group with a
2509 list of HA chassis used as gateways where traffic will be redi‐
2510 rected through.
2511
2512 up: optional boolean
2513 This is set to true whenever all OVS flows required by this
2514 Port_Binding have been installed. This is populated by ovn-con‐
2515 troller.
2516
2517 tunnel_key: integer, in range 1 to 32,767
2518 A number that represents the logical port in the key (e.g. STT
2519 key or Geneve TLV) field carried within tunnel protocol packets.
2520
2521 The tunnel ID must be unique within the scope of a logical data‐
2522 path.
2523
2524 mac: set of strings
2525 This column is a misnomer as it may contain MAC addresses and IP
2526 addresses. It is copied from the addresses column in the Logi‐
2527 cal_Switch_Port table in the Northbound database. It follows the
2528 same format as that column.
2529
2530 port_security: set of strings
2531 This column controls the addresses from which the host attached
2532 to the logical port (``the host’’) is allowed to send packets
2533 and to which it is allowed to receive packets. If this column is
2534 empty, all addresses are permitted.
2535
2536 It is copied from the port_security column in the Logi‐
2537 cal_Switch_Port table in the Northbound database. It follows the
2538 same format as that column.
2539
2540 type: string
2541 A type for this logical port. Logical ports can be used to model
2542 other types of connectivity into an OVN logical switch. The fol‐
2543 lowing types are defined:
2544
2545 (empty string)
2546 VM (or VIF) interface.
2547
2548 patch One of a pair of logical ports that act as if connected
2549 by a patch cable. Useful for connecting two logical data‐
2550 paths, e.g. to connect a logical router to a logical
2551 switch or to another logical router.
2552
2553 l3gateway
2554 One of a pair of logical ports that act as if connected
2555 by a patch cable across multiple chassis. Useful for con‐
2556 necting a logical switch with a Gateway router (which is
2557 only resident on a particular chassis).
2558
2559 localnet
2560 A connection to a locally accessible network from
2561 ovn-controller instances that have a corresponding bridge
2562 mapping. A logical switch can have multiple localnet
2563 ports attached. This type is used to model direct connec‐
2564 tivity to existing networks. In this case, each chassis
2565 should have a mapping for one of the physical networks
2566 only. Note: nothing said above implies that a chassis
2567 cannot be plugged to multiple physical networks as long
2568 as they belong to different switches.
2569
2570 localport
2571 A connection to a local VIF. Traffic that arrives on a
2572 localport is never forwarded over a tunnel to another
2573 chassis. These ports are present on every chassis and
2574 have the same address in all of them. This is used to
2575 model connectivity to local services that run on every
2576 hypervisor.
2577
2578 l2gateway
2579 An L2 connection to a physical network. The chassis this
2580 Port_Binding is bound to will serve as an L2 gateway to
2581 the network named by options:network_name.
2582
2583 vtep A port to a logical switch on a VTEP gateway chassis. In
2584 order to get this port correctly recognized by the OVN
2585 controller, the options:vtep-physical-switch and op‐
2586 tions:vtep-logical-switch must also be defined.
2587
2588 chassisredirect
2589 A logical port that represents a particular instance,
2590 bound to a specific chassis, of an otherwise distributed
2591 parent port (e.g. of type patch). A chassisredirect port
2592 should never be used as an inport. When an ingress pipe‐
2593 line sets the outport, it may set the value to a logical
2594 port of type chassisredirect. This will cause the packet
2595 to be directed to a specific chassis to carry out the
2596 egress pipeline. At the beginning of the egress pipeline,
2597 the outport will be reset to the value of the distributed
2598 port.
2599
2600 virtual
2601 Represents a logical port with an virtual ip. This vir‐
2602 tual ip can be configured on a logical port (which is re‐
2603 ferred as virtual parent).
2604
2605 requested_chassis: optional weak reference to Chassis
2606 This column exists so that the ovn-controller can effectively
2607 monitor all Port_Binding records destined for it, and is a sup‐
2608 plement to the options:requested-chassis option. The option is
2609 still required so that the ovn-controller can check the CMS in‐
2610 tent when the chassis pointed to does not currently exist, which
2611 for example occurs when the ovn-controller is stopped without
2612 passing the -restart argument. This column must be a Chassis
2613 record. This is populated by ovn-northd when the options:re‐
2614 quested-chassis is defined and contains a string matching the
2615 name or hostname of an existing chassis. See also requested_ad‐
2616 ditional_chassis.
2617
2618 requested_additional_chassis: set of weak reference to Chassis
2619 This column exists so that the ovn-controller can effectively
2620 monitor all Port_Binding records destined for it, and is a sup‐
2621 plement to the options:requested-chassis option when multiple
2622 chassis are listed. This column must be a list of Chassis
2623 records. This is populated by ovn-northd when the options:re‐
2624 quested-chassis is defined as a list of chassis names or host‐
2625 names. See also requested_chassis.
2626
2627 mirror_rules: set of weak reference to Mirrors
2628 Mirror rules that apply to the port binding. Please see the Mir‐
2629 ror table.
2630
2631 Patch Options:
2632
2633 These options apply to logical ports with type of patch.
2634
2635 options : peer: optional string
2636 The logical_port in the Port_Binding record for the other side
2637 of the patch. The named logical_port must specify this logi‐
2638 cal_port in its own peer option. That is, the two patch logical
2639 ports must have reversed logical_port and peer values.
2640
2641 nat_addresses: set of strings
2642 MAC address followed by a list of SNAT and DNAT external IP ad‐
2643 dresses, followed by is_chassis_resident("lport"), where lport
2644 is the name of a logical port on the same chassis where the cor‐
2645 responding NAT rules are applied. This is used to send gratu‐
2646 itous ARPs for SNAT and DNAT external IP addresses via localnet,
2647 from the chassis where lport resides. Example: 80:fa:5b:06:72:b7
2648 158.36.44.22 158.36.44.24 is_chassis_resident("foo1"). This
2649 would result in generation of gratuitous ARPs for IP addresses
2650 158.36.44.22 and 158.36.44.24 with a MAC address of
2651 80:fa:5b:06:72:b7 from the chassis where the logical port "foo1"
2652 resides.
2653
2654 L3 Gateway Options:
2655
2656 These options apply to logical ports with type of l3gateway.
2657
2658 options : peer: optional string
2659 The logical_port in the Port_Binding record for the other side
2660 of the ’l3gateway’ port. The named logical_port must specify
2661 this logical_port in its own peer option. That is, the two
2662 ’l3gateway’ logical ports must have reversed logical_port and
2663 peer values.
2664
2665 options : l3gateway-chassis: optional string
2666 The chassis in which the port resides.
2667
2668 nat_addresses: set of strings
2669 MAC address of the l3gateway port followed by a list of SNAT and
2670 DNAT external IP addresses. This is used to send gratuitous ARPs
2671 for SNAT and DNAT external IP addresses via localnet. Example:
2672 80:fa:5b:06:72:b7 158.36.44.22 158.36.44.24. This would result
2673 in generation of gratuitous ARPs for IP addresses 158.36.44.22
2674 and 158.36.44.24 with a MAC address of 80:fa:5b:06:72:b7. This
2675 is used in OVS version 2.8 and later versions.
2676
2677 Localnet Options:
2678
2679 These options apply to logical ports with type of localnet.
2680
2681 options : network_name: optional string
2682 Required. ovn-controller uses the configuration entry
2683 ovn-bridge-mappings to determine how to connect to this network.
2684 ovn-bridge-mappings is a list of network names mapped to a local
2685 OVS bridge that provides access to that network. An example of
2686 configuring ovn-bridge-mappings would be: .IP
2687 $ ovs-vsctl set open . external-ids:ovn-bridge-mappings=physnet1:br-eth0,physnet2:br-eth1
2688
2689 When a logical switch has a localnet port attached, every chas‐
2690 sis that may have a local vif attached to that logical switch
2691 must have a bridge mapping configured to reach that localnet.
2692 Traffic that arrives on a localnet port is never forwarded over
2693 a tunnel to another chassis. If there are multiple localnet
2694 ports in a logical switch, each chassis should only have a sin‐
2695 gle bridge mapping for one of the physical networks. Note: In
2696 case of multiple localnet ports, to provide interconnectivity
2697 between all VIFs located on different chassis with different
2698 fabric connectivity, the fabric should implement some form of
2699 routing between the segments.
2700
2701 tag: optional integer, in range 1 to 4,095
2702 If set, indicates that the port represents a connection to a
2703 specific VLAN on a locally accessible network. The VLAN ID is
2704 used to match incoming traffic and is also added to outgoing
2705 traffic.
2706
2707 L2 Gateway Options:
2708
2709 These options apply to logical ports with type of l2gateway.
2710
2711 options : network_name: optional string
2712 Required. ovn-controller uses the configuration entry
2713 ovn-bridge-mappings to determine how to connect to this network.
2714 ovn-bridge-mappings is a list of network names mapped to a local
2715 OVS bridge that provides access to that network. An example of
2716 configuring ovn-bridge-mappings would be: .IP
2717 $ ovs-vsctl set open . external-ids:ovn-bridge-mappings=physnet1:br-eth0,physnet2:br-eth1
2718
2719 When a logical switch has a l2gateway port attached, the chassis
2720 that the l2gateway port is bound to must have a bridge mapping
2721 configured to reach the network identified by network_name.
2722
2723 options : l2gateway-chassis: optional string
2724 Required. The chassis in which the port resides.
2725
2726 tag: optional integer, in range 1 to 4,095
2727 If set, indicates that the gateway is connected to a specific
2728 VLAN on the physical network. The VLAN ID is used to match in‐
2729 coming traffic and is also added to outgoing traffic.
2730
2731 VTEP Options:
2732
2733 These options apply to logical ports with type of vtep.
2734
2735 options : vtep-physical-switch: optional string
2736 Required. The name of the VTEP gateway.
2737
2738 options : vtep-logical-switch: optional string
2739 Required. A logical switch name connected by the VTEP gateway.
2740 Must be set when type is vtep.
2741
2742 VMI (or VIF) Options:
2743
2744 These options apply to logical ports with type having (empty string)
2745
2746 options : requested-chassis: optional string
2747 If set, identifies a specific chassis (by name or hostname) that
2748 is allowed to bind this port. Using this option will prevent
2749 thrashing between two chassis trying to bind the same port dur‐
2750 ing a live migration. It can also prevent similar thrashing due
2751 to a mis-configuration, if a port is accidentally created on
2752 more than one chassis.
2753
2754 If set to a comma separated list, the first entry identifies the
2755 main chassis and the rest are one or more additional chassis
2756 that are allowed to bind the same port.
2757
2758 When multiple chassis are set for the port, and the logical
2759 switch is connected to an external network through a localnet
2760 port, tunneling is enforced for the port to guarantee delivery
2761 of packets directed to the port to all its locations. This has
2762 MTU implications because the network used for tunneling must
2763 have MTU larger than localnet for stable connectivity.
2764
2765 options : activation-strategy: optional string
2766 If used with multiple chassis set in requested-chassis, speci‐
2767 fies an activation strategy for all additional chassis. By de‐
2768 fault, no activation strategy is used, meaning additional port
2769 locations are immediately available for use. When set to "rarp",
2770 the port is blocked for ingress and egress communication until a
2771 RARP packet is sent from a new location. The "rarp" strategy is
2772 useful in live migration scenarios for virtual machines.
2773
2774 options : additional-chassis-activated: optional string
2775 When activation-strategy is set, this option indicates that the
2776 port was activated using the strategy specified.
2777
2778 options : iface-id-ver: optional string
2779 If set, this port will be bound by ovn-controller only if this
2780 same key and value is configured in the external_ids column in
2781 the Open_vSwitch database’s Interface table.
2782
2783 options : qos_min_rate: optional string
2784 If set, indicates the minimum guaranteed rate available for data
2785 sent from this interface, in bit/s.
2786
2787 options : qos_max_rate: optional string
2788 If set, indicates the maximum rate for data sent from this in‐
2789 terface, in bit/s. The traffic will be shaped according to this
2790 limit.
2791
2792 options : qos_burst: optional string
2793 If set, indicates the maximum burst size for data sent from this
2794 interface, in bits.
2795
2796 options : qdisc_queue_id: optional string, containing an integer, in
2797 range 1 to 61,440
2798 Indicates the queue number on the physical device. This is same
2799 as the queue_id used in OpenFlow in struct ofp_action_enqueue.
2800
2801 Distributed Gateway Port Options:
2802
2803 These options apply to the distributed parent ports of logical ports
2804 with type of chasssisredirect.
2805
2806 options : chassis-redirect-port: optional string
2807 The name of the chassis redirect port derived from this port if
2808 this port is a distributed parent of a chassis redirect port.
2809
2810 Chassis Redirect Options:
2811
2812 These options apply to logical ports with type of chassisredirect.
2813
2814 options : distributed-port: optional string
2815 The name of the distributed port for which this chassisredirect
2816 port represents a particular instance.
2817
2818 options : redirect-type: optional string
2819 The value is copied from the column options in the OVN_North‐
2820 bound database’s Logical_Router_Port table for the distributed
2821 parent of this port.
2822
2823 options : always-redirect: optional string
2824 A boolean option that is set to true if the distributed parent
2825 of this chassis redirect port does not need distributed process‐
2826 ing.
2827
2828 Nested Containers:
2829
2830 These columns support containers nested within a VM. Specifically, they
2831 are used when type is empty and logical_port identifies the interface
2832 of a container spawned inside a VM. They are empty for containers or
2833 VMs that run directly on a hypervisor.
2834
2835 parent_port: optional string
2836 This is taken from parent_name in the OVN_Northbound database’s
2837 Logical_Switch_Port table.
2838
2839 tag: optional integer, in range 1 to 4,095
2840 Identifies the VLAN tag in the network traffic associated with
2841 that container’s network interface.
2842
2843 This column is used for a different purpose when type is local‐
2844 net (see Localnet Options, above) or l2gateway (see L2 Gateway
2845 Options, above).
2846
2847 Virtual ports:
2848
2849 virtual_parent: optional string
2850 This column is set by ovn-controller with one of the value from
2851 the options:virtual-parents in the OVN_Northbound database’s
2852 Logical_Switch_Port table when the OVN action bind_vport is exe‐
2853 cuted. ovn-controller also sets the chassis column when it exe‐
2854 cutes this action with its chassis id.
2855
2856 ovn-controller sets this column only if the type is "virtual".
2857
2858 Naming:
2859
2860 external_ids : name: optional string
2861 For a logical switch port, ovn-northd copies this from exter‐
2862 nal_ids:neutron:port_name in the Logical_Switch_Port table in
2863 the OVN_Northbound database, if it is a nonempty string.
2864
2865 For a logical switch port, ovn-northd does not currently set
2866 this key.
2867
2868 Common Columns:
2869
2870 external_ids: map of string-string pairs
2871 See External IDs at the beginning of this document.
2872
2873 The ovn-northd program populates this column with all entries
2874 into the external_ids column of the Logical_Switch_Port and Log‐
2875 ical_Router_Port tables of the OVN_Northbound database.
2876
2878 Each row in this table specifies a binding from an IP address to an
2879 Ethernet address that has been discovered through ARP (for IPv4) or
2880 neighbor discovery (for IPv6). This table is primarily used to discover
2881 bindings on physical networks, because IP-to-MAC bindings for virtual
2882 machines are usually populated statically into the Port_Binding table.
2883
2884 This table expresses a functional relationship: MAC_Binding(logi‐
2885 cal_port, ip) = mac.
2886
2887 In outline, the lifetime of a logical router’s MAC binding looks like
2888 this:
2889
2890 1. On hypervisor 1, a logical router determines that a packet
2891 should be forwarded to IP address A on one of its router
2892 ports. It uses its logical flow table to determine that A
2893 lacks a static IP-to-MAC binding and the get_arp action to
2894 determine that it lacks a dynamic IP-to-MAC binding.
2895
2896 2. Using an OVN logical arp action, the logical router gener‐
2897 ates and sends a broadcast ARP request to the router port.
2898 It drops the IP packet.
2899
2900 3. The logical switch attached to the router port delivers the
2901 ARP request to all of its ports. (It might make sense to de‐
2902 liver it only to ports that have no static IP-to-MAC bind‐
2903 ings, but this could also be surprising behavior.)
2904
2905 4. A host or VM on hypervisor 2 (which might be the same as hy‐
2906 pervisor 1) attached to the logical switch owns the IP ad‐
2907 dress in question. It composes an ARP reply and unicasts it
2908 to the logical router port’s Ethernet address.
2909
2910 5. The logical switch delivers the ARP reply to the logical
2911 router port.
2912
2913 6. The logical router flow table executes a put_arp action. To
2914 record the IP-to-MAC binding, ovn-controller adds a row to
2915 the MAC_Binding table.
2916
2917 7. On hypervisor 1, ovn-controller receives the updated
2918 MAC_Binding table from the OVN southbound database. The next
2919 packet destined to A through the logical router is sent di‐
2920 rectly to the bound Ethernet address.
2921
2922 Summary:
2923 logical_port string
2924 ip string
2925 mac string
2926 timestamp integer
2927 datapath Datapath_Binding
2928
2929 Details:
2930 logical_port: string
2931 The logical port on which the binding was discovered.
2932
2933 ip: string
2934 The bound IP address.
2935
2936 mac: string
2937 The Ethernet address to which the IP is bound.
2938
2939 timestamp: integer
2940 The timestamp in msec when the MAC binding was added or updated.
2941 Records that existed before this column will have 0.
2942
2943 datapath: Datapath_Binding
2944 The logical datapath to which the logical port belongs.
2945
2947 Each row in this table stores the DHCP Options supported by native OVN
2948 DHCP. ovn-northd populates this table with the supported DHCP options.
2949 ovn-controller looks up this table to get the DHCP codes of the DHCP
2950 options defined in the "put_dhcp_opts" action. Please refer to the RFC
2951 2132 "https://tools.ietf.org/html/rfc2132" for the possible list of
2952 DHCP options that can be defined here.
2953
2954 Summary:
2955 name string
2956 code integer, in range 0 to 254
2957 type string, one of bool, domains, host_id,
2958 ipv4, static_routes, str, uint16, uint32,
2959 or uint8
2960
2961 Details:
2962 name: string
2963 Name of the DHCP option.
2964
2965 Example. name="router"
2966
2967 code: integer, in range 0 to 254
2968 DHCP option code for the DHCP option as defined in the RFC 2132.
2969
2970 Example. code=3
2971
2972 type: string, one of bool, domains, host_id, ipv4, static_routes, str,
2973 uint16, uint32, or uint8
2974 Data type of the DHCP option code.
2975
2976 value: bool
2977 This indicates that the value of the DHCP option is a
2978 bool.
2979
2980 Example. "name=ip_forward_enable", "code=19",
2981 "type=bool".
2982
2983 put_dhcp_opts(..., ip_forward_enable = 1,...)
2984
2985 value: uint8
2986 This indicates that the value of the DHCP option is an
2987 unsigned int8 (8 bits)
2988
2989 Example. "name=default_ttl", "code=23", "type=uint8".
2990
2991 put_dhcp_opts(..., default_ttl = 50,...)
2992
2993 value: uint16
2994 This indicates that the value of the DHCP option is an
2995 unsigned int16 (16 bits).
2996
2997 Example. "name=mtu", "code=26", "type=uint16".
2998
2999 put_dhcp_opts(..., mtu = 1450,...)
3000
3001 value: uint32
3002 This indicates that the value of the DHCP option is an
3003 unsigned int32 (32 bits).
3004
3005 Example. "name=lease_time", "code=51", "type=uint32".
3006
3007 put_dhcp_opts(..., lease_time = 86400,...)
3008
3009 value: ipv4
3010 This indicates that the value of the DHCP option is an
3011 IPv4 address or addresses.
3012
3013 Example. "name=router", "code=3", "type=ipv4".
3014
3015 put_dhcp_opts(..., router = 10.0.0.1,...)
3016
3017 Example. "name=dns_server", "code=6", "type=ipv4".
3018
3019 put_dhcp_opts(..., dns_server = {8.8.8.8 7.7.7.7},...)
3020
3021 value: static_routes
3022 This indicates that the value of the DHCP option contains
3023 a pair of IPv4 route and next hop addresses.
3024
3025 Example. "name=classless_static_route", "code=121",
3026 "type=static_routes".
3027
3028 put_dhcp_opts(..., classless_static_route =
3029 {30.0.0.0/24,10.0.0.4,0.0.0.0/0,10.0.0.1}...)
3030
3031 value: str
3032 This indicates that the value of the DHCP option is a
3033 string.
3034
3035 Example. "name=host_name", "code=12", "type=str".
3036
3037 value: host_id
3038 This indicates that the value of the DHCP option is a
3039 host_id. It can either be a host_name or an IP address.
3040
3041 Example. "name=tftp_server", "code=66", "type=host_id".
3042
3043 value: domains
3044 This indicates that the value of the DHCP option is a do‐
3045 main name or a comma separated list of domain names.
3046
3047 Example. "name=domain_search_list", "code=119", "type=do‐
3048 mains".
3049
3051 Each row in this table stores the DHCPv6 Options supported by native
3052 OVN DHCPv6. ovn-northd populates this table with the supported DHCPv6
3053 options. ovn-controller looks up this table to get the DHCPv6 codes of
3054 the DHCPv6 options defined in the put_dhcpv6_opts action. Please refer
3055 to RFC 3315 and RFC 3646 for the list of DHCPv6 options that can be de‐
3056 fined here.
3057
3058 Summary:
3059 name string
3060 code integer, in range 0 to 254
3061 type string, one of ipv6, mac, or str
3062
3063 Details:
3064 name: string
3065 Name of the DHCPv6 option.
3066
3067 Example. name="ia_addr"
3068
3069 code: integer, in range 0 to 254
3070 DHCPv6 option code for the DHCPv6 option as defined in the ap‐
3071 propriate RFC.
3072
3073 Example. code=3
3074
3075 type: string, one of ipv6, mac, or str
3076 Data type of the DHCPv6 option code.
3077
3078 value: ipv6
3079 This indicates that the value of the DHCPv6 option is an
3080 IPv6 address(es).
3081
3082 Example. "name=ia_addr", "code=5", "type=ipv6".
3083
3084 put_dhcpv6_opts(..., ia_addr = ae70::4,...)
3085
3086 value: str
3087 This indicates that the value of the DHCPv6 option is a
3088 string.
3089
3090 Example. "name=domain_search", "code=24", "type=str".
3091
3092 put_dhcpv6_opts(..., domain_search = ovn.domain,...)
3093
3094 value: mac
3095 This indicates that the value of the DHCPv6 option is a
3096 MAC address.
3097
3098 Example. "name=server_id", "code=2", "type=mac".
3099
3100 put_dhcpv6_opts(..., server_id = 01:02:03:04L05:06,...)
3101
3103 Configuration for a database connection to an Open vSwitch database
3104 (OVSDB) client.
3105
3106 This table primarily configures the Open vSwitch database server
3107 (ovsdb-server).
3108
3109 The Open vSwitch database server can initiate and maintain active con‐
3110 nections to remote clients. It can also listen for database connec‐
3111 tions.
3112
3113 Summary:
3114 Core Features:
3115 target string (must be unique within table)
3116 read_only boolean
3117 role string
3118 Client Failure Detection and Handling:
3119 max_backoff optional integer, at least 1,000
3120 inactivity_probe optional integer
3121 Status:
3122 is_connected boolean
3123 status : last_error optional string
3124 status : state optional string, one of ACTIVE, BACKOFF,
3125 CONNECTING, IDLE, or VOID
3126 status : sec_since_connect optional string, containing an integer,
3127 at least 0
3128 status : sec_since_disconnect
3129 optional string, containing an integer,
3130 at least 0
3131 status : locks_held optional string
3132 status : locks_waiting optional string
3133 status : locks_lost optional string
3134 status : n_connections optional string, containing an integer,
3135 at least 2
3136 status : bound_port optional string, containing an integer
3137 Common Columns:
3138 external_ids map of string-string pairs
3139 other_config map of string-string pairs
3140
3141 Details:
3142 Core Features:
3143
3144 target: string (must be unique within table)
3145 Connection methods for clients.
3146
3147 The following connection methods are currently supported:
3148
3149 ssl:host[:port]
3150 The specified SSL port on the given host, which can ei‐
3151 ther be a DNS name (if built with unbound library) or an
3152 IP address. A valid SSL configuration must be provided
3153 when this form is used, this configuration can be speci‐
3154 fied via command-line options or the SSL table.
3155
3156 If port is not specified, it defaults to 6640.
3157
3158 SSL support is an optional feature that is not always
3159 built as part of Open vSwitch.
3160
3161 tcp:host[:port]
3162 The specified TCP port on the given host, which can ei‐
3163 ther be a DNS name (if built with unbound library) or an
3164 IP address (IPv4 or IPv6). If host is an IPv6 address,
3165 wrap it in square brackets, e.g. tcp:[::1]:6640.
3166
3167 If port is not specified, it defaults to 6640.
3168
3169 pssl:[port][:host]
3170 Listens for SSL connections on the specified TCP port.
3171 Specify 0 for port to have the kernel automatically
3172 choose an available port. If host, which can either be a
3173 DNS name (if built with unbound library) or an IP ad‐
3174 dress, is specified, then connections are restricted to
3175 the resolved or specified local IP address (either IPv4
3176 or IPv6 address). If host is an IPv6 address, wrap in
3177 square brackets, e.g. pssl:6640:[::1]. If host is not
3178 specified then it listens only on IPv4 (but not IPv6) ad‐
3179 dresses. A valid SSL configuration must be provided when
3180 this form is used, this can be specified either via com‐
3181 mand-line options or the SSL table.
3182
3183 If port is not specified, it defaults to 6640.
3184
3185 SSL support is an optional feature that is not always
3186 built as part of Open vSwitch.
3187
3188 ptcp:[port][:host]
3189 Listens for connections on the specified TCP port. Spec‐
3190 ify 0 for port to have the kernel automatically choose an
3191 available port. If host, which can either be a DNS name
3192 (if built with unbound library) or an IP address, is
3193 specified, then connections are restricted to the re‐
3194 solved or specified local IP address (either IPv4 or IPv6
3195 address). If host is an IPv6 address, wrap it in square
3196 brackets, e.g. ptcp:6640:[::1]. If host is not specified
3197 then it listens only on IPv4 addresses.
3198
3199 If port is not specified, it defaults to 6640.
3200
3201 When multiple clients are configured, the target values must be
3202 unique. Duplicate target values yield unspecified results.
3203
3204 read_only: boolean
3205 true to restrict these connections to read-only transactions,
3206 false to allow them to modify the database.
3207
3208 role: string
3209 String containing role name for this connection entry.
3210
3211 Client Failure Detection and Handling:
3212
3213 max_backoff: optional integer, at least 1,000
3214 Maximum number of milliseconds to wait between connection at‐
3215 tempts. Default is implementation-specific.
3216
3217 inactivity_probe: optional integer
3218 Maximum number of milliseconds of idle time on connection to the
3219 client before sending an inactivity probe message. If Open
3220 vSwitch does not communicate with the client for the specified
3221 number of seconds, it will send a probe. If a response is not
3222 received for the same additional amount of time, Open vSwitch
3223 assumes the connection has been broken and attempts to recon‐
3224 nect. Default is implementation-specific. A value of 0 disables
3225 inactivity probes.
3226
3227 Status:
3228
3229 Key-value pair of is_connected is always updated. Other key-value pairs
3230 in the status columns may be updated depends on the target type.
3231
3232 When target specifies a connection method that listens for inbound con‐
3233 nections (e.g. ptcp: or punix:), both n_connections and is_connected
3234 may also be updated while the remaining key-value pairs are omitted.
3235
3236 On the other hand, when target specifies an outbound connection, all
3237 key-value pairs may be updated, except the above-mentioned two key-
3238 value pairs associated with inbound connection targets. They are omit‐
3239 ted.
3240
3241 is_connected: boolean
3242 true if currently connected to this client, false otherwise.
3243
3244 status : last_error: optional string
3245 A human-readable description of the last error on the connection
3246 to the manager; i.e. strerror(errno). This key will exist only
3247 if an error has occurred.
3248
3249 status : state: optional string, one of ACTIVE, BACKOFF, CONNECTING,
3250 IDLE, or VOID
3251 The state of the connection to the manager:
3252
3253 VOID Connection is disabled.
3254
3255 BACKOFF
3256 Attempting to reconnect at an increasing period.
3257
3258 CONNECTING
3259 Attempting to connect.
3260
3261 ACTIVE Connected, remote host responsive.
3262
3263 IDLE Connection is idle. Waiting for response to keep-alive.
3264
3265 These values may change in the future. They are provided only
3266 for human consumption.
3267
3268 status : sec_since_connect: optional string, containing an integer, at
3269 least 0
3270 The amount of time since this client last successfully connected
3271 to the database (in seconds). Value is empty if client has never
3272 successfully been connected.
3273
3274 status : sec_since_disconnect: optional string, containing an integer,
3275 at least 0
3276 The amount of time since this client last disconnected from the
3277 database (in seconds). Value is empty if client has never dis‐
3278 connected.
3279
3280 status : locks_held: optional string
3281 Space-separated list of the names of OVSDB locks that the con‐
3282 nection holds. Omitted if the connection does not hold any
3283 locks.
3284
3285 status : locks_waiting: optional string
3286 Space-separated list of the names of OVSDB locks that the con‐
3287 nection is currently waiting to acquire. Omitted if the connec‐
3288 tion is not waiting for any locks.
3289
3290 status : locks_lost: optional string
3291 Space-separated list of the names of OVSDB locks that the con‐
3292 nection has had stolen by another OVSDB client. Omitted if no
3293 locks have been stolen from this connection.
3294
3295 status : n_connections: optional string, containing an integer, at
3296 least 2
3297 When target specifies a connection method that listens for in‐
3298 bound connections (e.g. ptcp: or pssl:) and more than one con‐
3299 nection is actually active, the value is the number of active
3300 connections. Otherwise, this key-value pair is omitted.
3301
3302 status : bound_port: optional string, containing an integer
3303 When target is ptcp: or pssl:, this is the TCP port on which the
3304 OVSDB server is listening. (This is particularly useful when
3305 target specifies a port of 0, allowing the kernel to choose any
3306 available port.)
3307
3308 Common Columns:
3309
3310 The overall purpose of these columns is described under Common Columns
3311 at the beginning of this document.
3312
3313 external_ids: map of string-string pairs
3314
3315 other_config: map of string-string pairs
3316
3318 SSL configuration for ovn-sb database access.
3319
3320 Summary:
3321 private_key string
3322 certificate string
3323 ca_cert string
3324 bootstrap_ca_cert boolean
3325 ssl_protocols string
3326 ssl_ciphers string
3327 Common Columns:
3328 external_ids map of string-string pairs
3329
3330 Details:
3331 private_key: string
3332 Name of a PEM file containing the private key used as the
3333 switch’s identity for SSL connections to the controller.
3334
3335 certificate: string
3336 Name of a PEM file containing a certificate, signed by the cer‐
3337 tificate authority (CA) used by the controller and manager, that
3338 certifies the switch’s private key, identifying a trustworthy
3339 switch.
3340
3341 ca_cert: string
3342 Name of a PEM file containing the CA certificate used to verify
3343 that the switch is connected to a trustworthy controller.
3344
3345 bootstrap_ca_cert: boolean
3346 If set to true, then Open vSwitch will attempt to obtain the CA
3347 certificate from the controller on its first SSL connection and
3348 save it to the named PEM file. If it is successful, it will im‐
3349 mediately drop the connection and reconnect, and from then on
3350 all SSL connections must be authenticated by a certificate
3351 signed by the CA certificate thus obtained. This option exposes
3352 the SSL connection to a man-in-the-middle attack obtaining the
3353 initial CA certificate. It may still be useful for bootstrap‐
3354 ping.
3355
3356 ssl_protocols: string
3357 List of SSL protocols to be enabled for SSL connections. The de‐
3358 fault when this option is omitted is TLSv1,TLSv1.1,TLSv1.2.
3359
3360 ssl_ciphers: string
3361 List of ciphers (in OpenSSL cipher string format) to be sup‐
3362 ported for SSL connections. The default when this option is
3363 omitted is HIGH:!aNULL:!MD5.
3364
3365 Common Columns:
3366
3367 The overall purpose of these columns is described under Common Columns
3368 at the beginning of this document.
3369
3370 external_ids: map of string-string pairs
3371
3373 Each row in this table stores the DNS records. The OVN action
3374 dns_lookup uses this table for DNS resolution.
3375
3376 Summary:
3377 records map of string-string pairs
3378 datapaths set of 1 or more Datapath_Bindings
3379 Common Columns:
3380 external_ids map of string-string pairs
3381
3382 Details:
3383 records: map of string-string pairs
3384 Key-value pair of DNS records with DNS query name as the key and
3385 a string of IP address(es) separated by comma or space as the
3386 value. ovn-northd stores the DNS query name in all lowercase in
3387 order to facilitate case-insensitive lookups.
3388
3389 Example: "vm1.ovn.org" = "10.0.0.4 aef0::4"
3390
3391 datapaths: set of 1 or more Datapath_Bindings
3392 The DNS records defined in the column records will be applied
3393 only to the DNS queries originating from the datapaths defined
3394 in this column.
3395
3396 Common Columns:
3397
3398 external_ids: map of string-string pairs
3399 See External IDs at the beginning of this document.
3400
3402 Role table for role-based access controls.
3403
3404 Summary:
3405 name string
3406 permissions map of string-weak reference to RBAC_Per‐
3407 mission pairs
3408
3409 Details:
3410 name: string
3411 The role name, corresponding to the role column in the Connec‐
3412 tion table.
3413
3414 permissions: map of string-weak reference to RBAC_Permission pairs
3415 A mapping of table names to rows in the RBAC_Permission table.
3416
3418 Permissions table for role-based access controls.
3419
3420 Summary:
3421 table string
3422 authorization set of strings
3423 insert_delete boolean
3424 update set of strings
3425
3426 Details:
3427 table: string
3428 Name of table to which this row applies.
3429
3430 authorization: set of strings
3431 Set of strings identifying columns and column:key pairs to be
3432 compared with client ID. At least one match is required in order
3433 to be authorized. A zero-length string is treated as a special
3434 value indicating all clients should be considered authorized.
3435
3436 insert_delete: boolean
3437 When "true", row insertions and authorized row deletions are
3438 permitted.
3439
3440 update: set of strings
3441 Set of strings identifying columns and column:key pairs that au‐
3442 thorized clients are allowed to modify.
3443
3445 Association of Port_Binding rows of type chassisredirect to a Chassis.
3446 The traffic going out through a specific chassisredirect port will be
3447 redirected to a chassis, or a set of them in high availability configu‐
3448 rations.
3449
3450 Summary:
3451 name string (must be unique within table)
3452 chassis optional weak reference to Chassis
3453 priority integer, in range 0 to 32,767
3454 options map of string-string pairs
3455 Common Columns:
3456 external_ids map of string-string pairs
3457
3458 Details:
3459 name: string (must be unique within table)
3460 Name of the Gateway_Chassis.
3461
3462 A suggested, but not required naming convention is
3463 ${port_name}_${chassis_name}.
3464
3465 chassis: optional weak reference to Chassis
3466 The Chassis to which we send the traffic.
3467
3468 priority: integer, in range 0 to 32,767
3469 This is the priority the specific Chassis among all Gate‐
3470 way_Chassis belonging to the same Port_Binding.
3471
3472 options: map of string-string pairs
3473 Reserved for future use.
3474
3475 Common Columns:
3476
3477 The overall purpose of these columns is described under Common Columns
3478 at the beginning of this document.
3479
3480 external_ids: map of string-string pairs
3481
3483 Summary:
3484 chassis optional weak reference to Chassis
3485 priority integer, in range 0 to 32,767
3486 Common Columns:
3487 external_ids map of string-string pairs
3488
3489 Details:
3490 chassis: optional weak reference to Chassis
3491 The Chassis which provides the HA functionality.
3492
3493 priority: integer, in range 0 to 32,767
3494 Priority of the HA chassis. Chassis with highest priority will
3495 be the master in the HA chassis group.
3496
3497 Common Columns:
3498
3499 external_ids: map of string-string pairs
3500 See External IDs at the beginning of this document.
3501
3503 Table representing a group of chassis which can provide High availabil‐
3504 ity services. Each chassis in the group is represented by the table
3505 HA_Chassis. The HA chassis with highest priority will be the master of
3506 this group. If the master chassis failover is detected, the HA chassis
3507 with the next higher priority takes over the responsibility of provid‐
3508 ing the HA. If ha_chassis_group column of the table Port_Binding refer‐
3509 ences this table, then this HA chassis group provides the gateway func‐
3510 tionality and redirects the gateway traffic to the master of this
3511 group.
3512
3513 Summary:
3514 name string (must be unique within table)
3515 ha_chassis set of HA_Chassises
3516 ref_chassis set of weak reference to Chassis
3517 Common Columns:
3518 external_ids map of string-string pairs
3519
3520 Details:
3521 name: string (must be unique within table)
3522 Name of the HA_Chassis_Group. Name should be unique.
3523
3524 ha_chassis: set of HA_Chassises
3525 A list of HA_Chassis which belongs to this group.
3526
3527 ref_chassis: set of weak reference to Chassis
3528 The set of Chassis that reference this HA chassis group. To de‐
3529 termine the correct Chassis, find the chassisredirect type
3530 Port_Binding that references this HA_Chassis_Group. This
3531 Port_Binding is derived from some particular logical router.
3532 Starting from that LR, find the set of all logical switches and
3533 routers connected to it, directly or indirectly, across router
3534 ports that link one LRP to another or to a LSP. For each LSP in
3535 these logical switches, find the corresponding Port_Binding and
3536 add its bound Chassis (if any) to ref_chassis.
3537
3538 Common Columns:
3539
3540 external_ids: map of string-string pairs
3541 See External IDs at the beginning of this document.
3542
3544 Database table used by ovn-controller to report CMS related events.
3545 Please note there is no guarantee a given event is written exactly once
3546 in the db. It is CMS responsibility to squash duplicated lines or to
3547 filter out duplicated events
3548
3549 Summary:
3550 event_type string, must be empty_lb_backends
3551 event_info map of string-string pairs
3552 chassis optional weak reference to Chassis
3553 seq_num integer
3554
3555 Details:
3556 event_type: string, must be empty_lb_backends
3557 Event type occurred
3558
3559 event_info: map of string-string pairs
3560 Key-value pairs used to specify event info to the CMS. Possible
3561 values are:
3562
3563 • vip: VIP reported for the empty_lb_backends event
3564
3565 • protocol: Transport protocol reported for the
3566 empty_lb_backends event
3567
3568 • load_balancer: UUID of the load balancer reported for the
3569 empty_lb_backends event
3570
3571 chassis: optional weak reference to Chassis
3572 This column is a Chassis record to identify the chassis that has
3573 managed a given event.
3574
3575 seq_num: integer
3576 Event sequence number. Global counter for controller generated
3577 events. It can be used by the CMS to detect possible duplication
3578 of the same event.
3579
3581 IP Multicast configuration options. For now only applicable to IGMP.
3582
3583 Summary:
3584 datapath weak reference to Datapath_Binding (must
3585 be unique within table)
3586 enabled optional boolean
3587 querier optional boolean
3588 table_size optional integer
3589 idle_timeout optional integer
3590 query_interval optional integer
3591 seq_no integer
3592 Querier configuration options:
3593 eth_src string
3594 ip4_src string
3595 ip6_src string
3596 query_max_resp optional integer
3597
3598 Details:
3599 datapath: weak reference to Datapath_Binding (must be unique within ta‐
3600 ble)
3601 Datapath_Binding entry for which these configuration options are
3602 defined.
3603
3604 enabled: optional boolean
3605 Enables/disables multicast snooping. Default: disabled.
3606
3607 querier: optional boolean
3608 Enables/disables multicast querying. If enabled then multicast
3609 querying is enabled by default.
3610
3611 table_size: optional integer
3612 Limits the number of multicast groups that can be learned. De‐
3613 fault: 2048 groups per datapath.
3614
3615 idle_timeout: optional integer
3616 Configures the idle timeout (in seconds) for IP multicast groups
3617 if multicast snooping is enabled. Default: 300 seconds.
3618
3619 query_interval: optional integer
3620 Configures the interval (in seconds) for sending multicast
3621 queries if snooping and querier are enabled. Default: idle_time‐
3622 out/2 seconds.
3623
3624 seq_no: integer
3625 ovn-controller reads this value and flushes all learned multi‐
3626 cast groups when it detects that seq_no was changed.
3627
3628 Querier configuration options:
3629
3630 The ovn-controller process that runs on OVN hypervisor nodes uses the
3631 following columns to determine field values in IGMP/MLD queries that it
3632 originates:
3633
3634 eth_src: string
3635 Source Ethernet address.
3636
3637 ip4_src: string
3638 Source IPv4 address.
3639
3640 ip6_src: string
3641 Source IPv6 address.
3642
3643 query_max_resp: optional integer
3644 Value (in seconds) to be used as "max-response" field in multi‐
3645 cast queries. Default: 1 second.
3646
3648 Contains learned IGMP groups indexed by address/datapath/chassis.
3649
3650 Summary:
3651 address string
3652 datapath optional weak reference to Datapath_Bind‐
3653 ing
3654 chassis optional weak reference to Chassis
3655 ports set of weak reference to Port_Bindings
3656
3657 Details:
3658 address: string
3659 Destination IPv4 address for the IGMP group.
3660
3661 datapath: optional weak reference to Datapath_Binding
3662 Datapath to which this IGMP group belongs.
3663
3664 chassis: optional weak reference to Chassis
3665 Chassis to which this IGMP group belongs.
3666
3667 ports: set of weak reference to Port_Bindings
3668 The destination port bindings for this IGMP group.
3669
3671 Each row in this table configures monitoring a service for its live‐
3672 ness. The service can be an IPv4 TCP or UDP service. ovn-controller pe‐
3673 riodically sends out service monitor packets and updates the status of
3674 the service. Service monitoring for IPv6 services is not supported.
3675
3676 ovn-northd uses this feature to implement the load balancer health
3677 check feature offered to the CMS through the northbound database.
3678
3679 Summary:
3680 Configuration:
3681 ip string
3682 protocol optional string, either tcp or udp
3683 port integer, in range 0 to 65,535
3684 logical_port string
3685 src_mac string
3686 src_ip string
3687 options : interval optional string, containing an integer
3688 options : timeout optional string, containing an integer
3689 options : success_count optional string, containing an integer
3690 options : failure_count optional string, containing an integer
3691 Status Reporting:
3692 status optional string, one of error, offline,
3693 or online
3694 Common Columns:
3695 external_ids map of string-string pairs
3696
3697 Details:
3698 Configuration:
3699
3700 ovn-northd sets these columns and values to configure the service moni‐
3701 tor.
3702
3703 ip: string
3704 IP of the service to be monitored. Only IPv4 is supported.
3705
3706 protocol: optional string, either tcp or udp
3707 The protocol of the service.
3708
3709 port: integer, in range 0 to 65,535
3710 The TCP or UDP port of the service.
3711
3712 logical_port: string
3713 The VIF of the logical port on which the service is running. The
3714 ovn-controller that binds this logical_port monitors the service
3715 by sending periodic monitor packets.
3716
3717 src_mac: string
3718 Source Ethernet address to use in the service monitor packet.
3719
3720 src_ip: string
3721 Source IPv4 address to use in the service monitor packet.
3722
3723 options : interval: optional string, containing an integer
3724 The interval, in seconds, between service monitor checks.
3725
3726 options : timeout: optional string, containing an integer
3727 The time, in seconds, after which the service monitor check
3728 times out.
3729
3730 options : success_count: optional string, containing an integer
3731 The number of successful checks after which the service is con‐
3732 sidered online.
3733
3734 options : failure_count: optional string, containing an integer
3735 The number of failure checks after which the service is consid‐
3736 ered offline.
3737
3738 Status Reporting:
3739
3740 The ovn-controller on the chassis that hosts the logical_port updates
3741 this column to report the service’s status.
3742
3743 status: optional string, one of error, offline, or online
3744 For TCP service, ovn-controller sends a SYN to the service and
3745 expects an ACK response to consider the service to be online.
3746
3747 For UDP service, ovn-controller sends a UDP packet to the ser‐
3748 vice and doesn’t expect any reply. If it receives an ICMP reply,
3749 then it considers the service to be offline.
3750
3751 Common Columns:
3752
3753 external_ids: map of string-string pairs
3754 See External IDs at the beginning of this document.
3755
3757 Each row represents a load balancer.
3758
3759 Summary:
3760 name string
3761 vips map of string-string pairs
3762 protocol optional string, one of sctp, tcp, or udp
3763 datapaths set of Datapath_Bindings
3764 datapath_group optional Logical_DP_Group
3765 Load_Balancer options:
3766 options : hairpin_snat_ip optional string
3767 options : hairpin_orig_tuple
3768 optional string, either true or false
3769 Common Columns:
3770 external_ids map of string-string pairs
3771
3772 Details:
3773 name: string
3774 A name for the load balancer. This name has no special meaning
3775 or purpose other than to provide convenience for human interac‐
3776 tion with the ovn-nb database.
3777
3778 vips: map of string-string pairs
3779 A map of virtual IP addresses (and an optional port number with
3780 : as a separator) associated with this load balancer and their
3781 corresponding endpoint IP addresses (and optional port numbers
3782 with : as separators) separated by commas.
3783
3784 protocol: optional string, one of sctp, tcp, or udp
3785 Valid protocols are tcp, udp, or sctp. This column is useful
3786 when a port number is provided as part of the vips column. If
3787 this column is empty and a port number is provided as part of
3788 vips column, OVN assumes the protocol to be tcp.
3789
3790 datapaths: set of Datapath_Bindings
3791 Datapaths to which this load balancer applies to.
3792
3793 datapath_group: optional Logical_DP_Group
3794 The group of datapaths to which this load balancer applies to.
3795 This means that the same load balancer applies to all datapaths
3796 in a group.
3797
3798 Load_Balancer options:
3799
3800 options : hairpin_snat_ip: optional string
3801 IP to be used as source IP for packets that have been hair-
3802 pinned after load balancing. This value is automatically popu‐
3803 lated by ovn-northd.
3804
3805 options : hairpin_orig_tuple: optional string, either true or false
3806 This value is automatically set to true by ovn-northd when orig‐
3807 inal destination IP and transport port of the load balanced
3808 packets are stored in registers reg1, reg2, xxreg1.
3809
3810 Common Columns:
3811
3812 external_ids: map of string-string pairs
3813 See External IDs at the beginning of this document.
3814
3816 Contains BFD parameter for ovn-controller bfd configuration.
3817
3818 Summary:
3819 Configuration:
3820 src_port integer, in range 49,152 to 65,535
3821 disc integer
3822 logical_port string
3823 dst_ip string
3824 min_tx integer
3825 min_rx integer
3826 detect_mult integer
3827 options map of string-string pairs
3828 external_ids map of string-string pairs
3829 Status Reporting:
3830 status string, one of admin_down, down, init, or
3831 up
3832
3833 Details:
3834 Configuration:
3835
3836 src_port: integer, in range 49,152 to 65,535
3837 udp source port used in bfd control packets. The source port
3838 MUST be in the range 49152 through 65535 (RFC5881 section 4).
3839
3840 disc: integer
3841 A unique, nonzero discriminator value generated by the transmit‐
3842 ting system, used to demultiplex multiple BFD sessions between
3843 the same pair of systems.
3844
3845 logical_port: string
3846 OVN logical port when BFD engine is running.
3847
3848 dst_ip: string
3849 BFD peer IP address.
3850
3851 min_tx: integer
3852 This is the minimum interval, in milliseconds, that the local
3853 system would like to use when transmitting BFD Control packets,
3854 less any jitter applied. The value zero is reserved.
3855
3856 min_rx: integer
3857 This is the minimum interval, in milliseconds, between received
3858 BFD Control packets that this system is capable of supporting,
3859 less any jitter applied by the sender. If this value is zero,
3860 the transmitting system does not want the remote system to send
3861 any periodic BFD Control packets.
3862
3863 detect_mult: integer
3864 Detection time multiplier. The negotiated transmit interval,
3865 multiplied by this value, provides the Detection Time for the
3866 receiving system in Asynchronous mode.
3867
3868 options: map of string-string pairs
3869 Reserved for future use.
3870
3871 external_ids: map of string-string pairs
3872 See External IDs at the beginning of this document.
3873
3874 Status Reporting:
3875
3876 status: string, one of admin_down, down, init, or up
3877 BFD port logical states. Possible values are:
3878
3879 • admin_down
3880
3881 • down
3882
3883 • init
3884
3885 • up
3886
3888 This table is primarily used to learn the MACs observed on a VIF (or a
3889 localnet port with ’localnet_learn_fdb’ enabled) which belongs to a
3890 Logical_Switch_Port record in OVN_Northbound whose port security is
3891 disabled and ’unknown’ address set. If port security is disabled on a
3892 Logical_Switch_Port record, OVN should allow traffic with any source
3893 mac from the VIF. This table will be used to deliver a packet to the
3894 VIF, If a packet’s eth.dst is learnt.
3895
3896 Summary:
3897 mac string
3898 dp_key integer, in range 1 to 16,777,215
3899 port_key integer, in range 1 to 16,777,215
3900
3901 Details:
3902 mac: string
3903 The learnt mac address.
3904
3905 dp_key: integer, in range 1 to 16,777,215
3906 The key of the datapath on which this FDB was learnt.
3907
3908 port_key: integer, in range 1 to 16,777,215
3909 The key of the port binding on which this FDB was learnt.
3910
3912 Each record represents a Static_MAC_Binding entry for a logical router.
3913
3914 Summary:
3915 logical_port string
3916 ip string
3917 mac string
3918 override_dynamic_mac boolean
3919 datapath Datapath_Binding
3920
3921 Details:
3922 logical_port: string
3923 The logical router port for the binding.
3924
3925 ip: string
3926 The bound IP address.
3927
3928 mac: string
3929 The Ethernet address to which the IP is bound.
3930
3931 override_dynamic_mac: boolean
3932 Override dynamically learnt MACs.
3933
3934 datapath: Datapath_Binding
3935 The logical datapath to which the logical router port belongs.
3936
3938 Each record represents the set of template variable instantiations for
3939 a given chassis and is populated by ovn-northd from the contents of the
3940 OVN_Northbound.Chassis_Template_Var table.
3941
3942 Summary:
3943 chassis string (must be unique within table)
3944 variables map of string-string pairs
3945
3946 Details:
3947 chassis: string (must be unique within table)
3948 The chassis this set of variable values applies to.
3949
3950 variables: map of string-string pairs
3951 The set of variable values for a given chassis.
3952
3953
3954
3955Open vSwitch 22.12.0 DB Schema 20.27.0 ovn-sb(5)