list: Remove lib/list.h completely.
[cascardo/ovs.git] / ovn / ovn-sb.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <database name="ovn-sb" title="OVN Southbound Database">
3   <p>
4     This database holds logical and physical configuration and state for the
5     Open Virtual Network (OVN) system to support virtual network abstraction.
6     For an introduction to OVN, please see <code>ovn-architecture</code>(7).
7   </p>
8
9   <p>
10     The OVN Southbound database sits at the center of the OVN
11     architecture.  It is the one component that speaks both southbound
12     directly to all the hypervisors and gateways, via
13     <code>ovn-controller</code>/<code>ovn-controller-vtep</code>, and
14     northbound to the Cloud Management System, via <code>ovn-northd</code>:
15   </p>
16
17   <h2>Database Structure</h2>
18
19   <p>
20     The OVN Southbound database contains classes of data with
21     different properties, as described in the sections below.
22   </p>
23
24   <h3>Physical Network (PN) data</h3>
25
26   <p>
27     PN tables contain information about the chassis nodes in the system.  This
28     contains all the information necessary to wire the overlay, such as IP
29     addresses, supported tunnel types, and security keys.
30   </p>
31
32   <p>
33     The amount of PN data is small (O(n) in the number of chassis) and it
34     changes infrequently, so it can be replicated to every chassis.
35   </p>
36
37   <p>
38     The <ref table="Chassis"/> table comprises the PN tables.
39   </p>
40
41   <h3>Logical Network (LN) data</h3>
42
43   <p>
44     LN tables contain the topology of logical switches and routers, ACLs,
45     firewall rules, and everything needed to describe how packets traverse a
46     logical network, represented as logical datapath flows (see Logical
47     Datapath Flows, below).
48   </p>
49
50   <p>
51     LN data may be large (O(n) in the number of logical ports, ACL rules,
52     etc.).  Thus, to improve scaling, each chassis should receive only data
53     related to logical networks in which that chassis participates.  Past
54     experience shows that in the presence of large logical networks, even
55     finer-grained partitioning of data, e.g. designing logical flows so that
56     only the chassis hosting a logical port needs related flows, pays off
57     scale-wise.  (This is not necessary initially but it is worth bearing in
58     mind in the design.)
59   </p>
60
61   <p>
62     The LN is a slave of the cloud management system running northbound of OVN.
63     That CMS determines the entire OVN logical configuration and therefore the
64     LN's content at any given time is a deterministic function of the CMS's
65     configuration, although that happens indirectly via the
66     <ref db="OVN_Northbound"/> database and <code>ovn-northd</code>.
67   </p>
68
69   <p>
70     LN data is likely to change more quickly than PN data.  This is especially
71     true in a container environment where VMs are created and destroyed (and
72     therefore added to and deleted from logical switches) quickly.
73   </p>
74
75   <p>
76     <ref table="Logical_Flow"/> and <ref table="Multicast_Group"/> contain LN
77     data.
78   </p>
79
80   <h3>Logical-physical bindings</h3>
81
82   <p>
83     These tables link logical and physical components.  They show the current
84     placement of logical components (such as VMs and VIFs) onto chassis, and
85     map logical entities to the values that represent them in tunnel
86     encapsulations.
87   </p>
88
89   <p>
90     These tables change frequently, at least every time a VM powers up or down
91     or migrates, and especially quickly in a container environment.  The
92     amount of data per VM (or VIF) is small.
93   </p>
94
95   <p>
96     Each chassis is authoritative about the VMs and VIFs that it hosts at any
97     given time and can efficiently flood that state to a central location, so
98     the consistency needs are minimal.
99   </p>
100
101   <p>
102     The <ref table="Port_Binding"/> and <ref table="Datapath_Binding"/> tables
103     contain binding data.
104   </p>
105
106   <h3>MAC bindings</h3>
107
108   <p>
109     The <ref table="MAC_Binding"/> table tracks the bindings from IP addresses
110     to Ethernet addresses that are dynamically discovered using ARP (for IPv4)
111     and neighbor discovery (for IPv6).  Usually, IP-to-MAC bindings for virtual
112     machines are statically populated into the <ref table="Port_Binding"/>
113     table, so <ref table="MAC_Binding"/> is primarily used to discover bindings
114     on physical networks.
115   </p>
116
117   <h2>Common Columns</h2>
118
119   <p>
120     Some tables contain a special column named <code>external_ids</code>.  This
121     column has the same form and purpose each place that it appears, so we
122     describe it here to save space later.
123   </p>
124
125   <dl>
126     <dt><code>external_ids</code>: map of string-string pairs</dt>
127     <dd>
128       Key-value pairs for use by the software that manages the OVN Southbound
129       database rather than by
130       <code>ovn-controller</code>/<code>ovn-controller-vtep</code>.  In
131       particular, <code>ovn-northd</code> can use key-value pairs in this
132       column to relate entities in the southbound database to higher-level
133       entities (such as entities in the OVN Northbound database).  Individual
134       key-value pairs in this column may be documented in some cases to aid
135       in understanding and troubleshooting, but the reader should not mistake
136       such documentation as comprehensive.
137     </dd>
138   </dl>
139
140   <table name="Chassis" title="Physical Network Hypervisor and Gateway Information">
141     <p>
142       Each row in this table represents a hypervisor or gateway (a chassis) in
143       the physical network (PN).  Each chassis, via
144       <code>ovn-controller</code>/<code>ovn-controller-vtep</code>, adds
145       and updates its own row, and keeps a copy of the remaining rows to
146       determine how to reach other hypervisors.
147     </p>
148
149     <p>
150       When a chassis shuts down gracefully, it should remove its own row.
151       (This is not critical because resources hosted on the chassis are equally
152       unreachable regardless of whether the row is present.)  If a chassis
153       shuts down permanently without removing its row, some kind of manual or
154       automatic cleanup is eventually needed; we can devise a process for that
155       as necessary.
156     </p>
157
158     <column name="name">
159       OVN does not prescribe a particular format for chassis names.
160       ovn-controller populates this column using <ref key="system-id"
161       table="Open_vSwitch" column="external_ids" db="Open_vSwitch"/>
162       in the Open_vSwitch database's <ref table="Open_vSwitch"
163       db="Open_vSwitch"/> table.  ovn-controller-vtep populates this
164       column with <ref table="Physical_Switch" column="name"
165       db="hardware_vtep"/> in the hardware_vtep database's
166       <ref table="Physical_Switch" db="hardware_vtep"/> table.
167     </column>
168
169     <column name="hostname">
170       The hostname of the chassis, if applicable.  ovn-controller will populate
171       this column with the hostname of the host it is running on.
172       ovn-controller-vtep will leave this column empty.
173     </column>
174
175     <column name="external_ids" key="ovn-bridge-mappings">
176       <code>ovn-controller</code> populates this key with the set of bridge
177       mappings it has been configured to use.  Other applications should treat
178       this key as read-only.  See <code>ovn-controller</code>(8) for more
179       information.
180     </column>
181
182     <group title="Common Columns">
183       The overall purpose of these columns is described under <code>Common
184       Columns</code> at the beginning of this document.
185
186       <column name="external_ids"/>
187     </group>
188
189     <group title="Encapsulation Configuration">
190       <p>
191         OVN uses encapsulation to transmit logical dataplane packets
192         between chassis.
193       </p>
194
195       <column name="encaps">
196         Points to supported encapsulation configurations to transmit
197         logical dataplane packets to this chassis.  Each entry is a <ref
198         table="Encap"/> record that describes the configuration.
199       </column>
200     </group>
201
202      <group title="Gateway Configuration">
203        <p>
204         A <dfn>gateway</dfn> is a chassis that forwards traffic between the
205         OVN-managed part of a logical network and a physical VLAN, extending a
206         tunnel-based logical network into a physical network.  Gateways are
207         typically dedicated nodes that do not host VMs and will be controlled
208         by <code>ovn-controller-vtep</code>.
209       </p>
210
211       <column name="vtep_logical_switches">
212         Stores all VTEP logical switch names connected by this gateway
213         chassis.  The <ref table="Port_Binding"/> table entry with
214         <ref column="options" table="Port_Binding"/>:<code>vtep-physical-switch</code>
215         equal <ref table="Chassis"/> <ref column="name" table="Chassis"/>, and
216         <ref column="options" table="Port_Binding"/>:<code>vtep-logical-switch</code>
217         value in <ref table="Chassis"/>
218         <ref column="vtep_logical_switches" table="Chassis"/>, will be
219         associated with this <ref table="Chassis"/>.
220       </column>
221      </group>
222   </table>
223
224   <table name="Encap" title="Encapsulation Types">
225     <p>
226       The <ref column="encaps" table="Chassis"/> column in the <ref
227       table="Chassis"/> table refers to rows in this table to identify
228       how OVN may transmit logical dataplane packets to this chassis.
229       Each chassis, via <code>ovn-controller</code>(8) or
230       <code>ovn-controller-vtep</code>(8), adds and updates its own rows
231       and keeps a copy of the remaining rows to determine how to reach
232       other chassis.
233     </p>
234
235     <column name="type">
236       The encapsulation to use to transmit packets to this chassis.
237       Hypervisors must use either <code>geneve</code> or
238       <code>stt</code>.  Gateways may use <code>vxlan</code>,
239       <code>geneve</code>, or <code>stt</code>.
240     </column>
241
242     <column name="options">
243       Options for configuring the encapsulation, e.g. IPsec parameters when
244       IPsec support is introduced.  No options are currently defined.
245     </column>
246
247     <column name="ip">
248       The IPv4 address of the encapsulation tunnel endpoint.
249     </column>
250   </table>
251
252   <table name="Logical_Flow" title="Logical Network Flows">
253     <p>
254       Each row in this table represents one logical flow.
255       <code>ovn-northd</code> populates this table with logical flows
256       that implement the L2 and L3 topologies specified in the
257       <ref db="OVN_Northbound"/> database.  Each hypervisor, via
258       <code>ovn-controller</code>, translates the logical flows into
259       OpenFlow flows specific to its hypervisor and installs them into
260       Open vSwitch.
261     </p>
262
263     <p>
264       Logical flows are expressed in an OVN-specific format, described here.  A
265       logical datapath flow is much like an OpenFlow flow, except that the
266       flows are written in terms of logical ports and logical datapaths instead
267       of physical ports and physical datapaths.  Translation between logical
268       and physical flows helps to ensure isolation between logical datapaths.
269       (The logical flow abstraction also allows the OVN centralized
270       components to do less work, since they do not have to separately
271       compute and push out physical flows to each chassis.)
272     </p>
273
274     <p>
275       The default action when no flow matches is to drop packets.
276     </p>
277
278     <p><em>Architectural Logical Life Cycle of a Packet</em></p>
279
280     <p>
281       This following description focuses on the life cycle of a packet through
282       a logical datapath, ignoring physical details of the implementation.
283       Please refer to <em>Architectural Physical Life Cycle of a Packet</em> in
284       <code>ovn-architecture</code>(7) for the physical information.
285     </p>
286
287     <p>
288       The description here is written as if OVN itself executes these steps,
289       but in fact OVN (that is, <code>ovn-controller</code>) programs Open
290       vSwitch, via OpenFlow and OVSDB, to execute them on its behalf.
291     </p>
292
293     <p>
294       At a high level, OVN passes each packet through the logical datapath's
295       logical ingress pipeline, which may output the packet to one or more
296       logical port or logical multicast groups.  For each such logical output
297       port, OVN passes the packet through the datapath's logical egress
298       pipeline, which may either drop the packet or deliver it to the
299       destination.  Between the two pipelines, outputs to logical multicast
300       groups are expanded into logical ports, so that the egress pipeline only
301       processes a single logical output port at a time.  Between the two
302       pipelines is also where, when necessary, OVN encapsulates a packet in a
303       tunnel (or tunnels) to transmit to remote hypervisors.
304     </p>
305
306     <p>
307       In more detail, to start, OVN searches the <ref table="Logical_Flow"/>
308       table for a row with correct <ref column="logical_datapath"/>, a <ref
309       column="pipeline"/> of <code>ingress</code>, a <ref column="table_id"/>
310       of 0, and a <ref column="match"/> that is true for the packet.  If none
311       is found, OVN drops the packet.  If OVN finds more than one, it chooses
312       the match with the highest <ref column="priority"/>.  Then OVN executes
313       each of the actions specified in the row's <ref table="actions"/> column,
314       in the order specified.  Some actions, such as those to modify packet
315       headers, require no further details.  The <code>next</code> and
316       <code>output</code> actions are special.
317     </p>
318
319     <p>
320       The <code>next</code> action causes the above process to be repeated
321       recursively, except that OVN searches for <ref column="table_id"/> of 1
322       instead of 0.  Similarly, any <code>next</code> action in a row found in
323       that table would cause a further search for a <ref column="table_id"/> of
324       2, and so on.  When recursive processing completes, flow control returns
325       to the action following <code>next</code>.
326     </p>
327
328     <p>
329       The <code>output</code> action also introduces recursion.  Its effect
330       depends on the current value of the <code>outport</code> field.  Suppose
331       <code>outport</code> designates a logical port.  First, OVN compares
332       <code>inport</code> to <code>outport</code>; if they are equal, it treats
333       the <code>output</code> as a no-op.  In the common case, where they are
334       different, the packet enters the egress pipeline.  This transition to the
335       egress pipeline discards register data, e.g. <code>reg0</code> ...
336       <code>reg4</code> and connection tracking state, to achieve
337       uniform behavior regardless of whether the egress pipeline is on a
338       different hypervisor (because registers aren't preserve across
339       tunnel encapsulation).
340     </p>
341
342     <p>
343       To execute the egress pipeline, OVN again searches the <ref
344       table="Logical_Flow"/> table for a row with correct <ref
345       column="logical_datapath"/>, a <ref column="table_id"/> of 0, a <ref
346       column="match"/> that is true for the packet, but now looking for a <ref
347       column="pipeline"/> of <code>egress</code>.  If no matching row is found,
348       the output becomes a no-op.  Otherwise, OVN executes the actions for the
349       matching flow (which is chosen from multiple, if necessary, as already
350       described).
351     </p>
352
353     <p>
354       In the <code>egress</code> pipeline, the <code>next</code> action acts as
355       already described, except that it, of course, searches for
356       <code>egress</code> flows.  The <code>output</code> action, however, now
357       directly outputs the packet to the output port (which is now fixed,
358       because <code>outport</code> is read-only within the egress pipeline).
359     </p>
360
361     <p>
362       The description earlier assumed that <code>outport</code> referred to a
363       logical port.  If it instead designates a logical multicast group, then
364       the description above still applies, with the addition of fan-out from
365       the logical multicast group to each logical port in the group.  For each
366       member of the group, OVN executes the logical pipeline as described, with
367       the logical output port replaced by the group member.
368     </p>
369
370     <p><em>Pipeline Stages</em></p>
371
372     <p>
373       <code>ovn-northd</code> is responsible for populating the
374       <ref table="Logical_Flow"/> table, so the stages are an
375       implementation detail and subject to change.  This section
376       describes the current logical flow table.
377     </p>
378
379     <p>
380       The ingress pipeline consists of the following stages:
381     </p>
382     <ul>
383       <li>
384         Port Security (Table 0): Validates the source address, drops
385         packets with a VLAN tag, and, if configured, verifies that the
386         logical port is allowed to send with the source address.
387       </li>
388
389       <li>
390         L2 Destination Lookup (Table 1): Forwards known unicast
391         addresses to the appropriate logical port.  Unicast packets to
392         unknown hosts are forwarded to logical ports configured with the
393         special <code>unknown</code> mac address.  Broadcast, and
394         multicast are flooded to all ports in the logical switch.
395       </li>
396     </ul>
397
398     <p>
399       The egress pipeline consists of the following stages:
400     </p>
401     <ul>
402       <li>
403         ACL (Table 0): Applies any specified access control lists.
404       </li>
405
406       <li>
407         Port Security (Table 1): If configured, verifies that the
408         logical port is allowed to receive packets with the destination
409         address.
410       </li>
411     </ul>
412
413     <column name="logical_datapath">
414       The logical datapath to which the logical flow belongs.
415     </column>
416
417     <column name="pipeline">
418       <p>
419         The primary flows used for deciding on a packet's destination are the
420         <code>ingress</code> flows.  The <code>egress</code> flows implement
421         ACLs.  See <em>Logical Life Cycle of a Packet</em>, above, for details.
422       </p>
423     </column>
424
425     <column name="table_id">
426       The stage in the logical pipeline, analogous to an OpenFlow table number.
427     </column>
428
429     <column name="priority">
430       The flow's priority.  Flows with numerically higher priority take
431       precedence over those with lower.  If two logical datapath flows with the
432       same priority both match, then the one actually applied to the packet is
433       undefined.
434     </column>
435
436     <column name="match">
437       <p>
438         A matching expression.  OVN provides a superset of OpenFlow matching
439         capabilities, using a syntax similar to Boolean expressions in a
440         programming language.
441       </p>
442
443       <p>
444         The most important components of match expression are
445         <dfn>comparisons</dfn> between <dfn>symbols</dfn> and
446         <dfn>constants</dfn>, e.g. <code>ip4.dst == 192.168.0.1</code>,
447         <code>ip.proto == 6</code>, <code>arp.op == 1</code>, <code>eth.type ==
448         0x800</code>.  The logical AND operator <code>&amp;&amp;</code> and
449         logical OR operator <code>||</code> can combine comparisons into a
450         larger expression.
451       </p>
452
453       <p>
454         Matching expressions also support parentheses for grouping, the logical
455         NOT prefix operator <code>!</code>, and literals <code>0</code> and
456         <code>1</code> to express ``false'' or ``true,'' respectively.  The
457         latter is useful by itself as a catch-all expression that matches every
458         packet.
459       </p>
460
461       <p><em>Symbols</em></p>
462
463       <p>
464         <em>Type</em>.  Symbols have <dfn>integer</dfn> or <dfn>string</dfn>
465         type.  Integer symbols have a <dfn>width</dfn> in bits.
466       </p>
467
468       <p>
469         <em>Kinds</em>.  There are three kinds of symbols:
470       </p>
471
472       <ul>
473         <li>
474           <p>
475             <dfn>Fields</dfn>.  A field symbol represents a packet header or
476             metadata field.  For example, a field
477             named <code>vlan.tci</code> might represent the VLAN TCI field in a
478             packet.
479           </p>
480
481           <p>
482             A field symbol can have integer or string type.  Integer fields can
483             be nominal or ordinal (see <em>Level of Measurement</em>,
484             below).
485           </p>
486         </li>
487
488         <li>
489           <p>
490             <dfn>Subfields</dfn>.  A subfield represents a subset of bits from
491             a larger field.  For example, a field <code>vlan.vid</code> might
492             be defined as an alias for <code>vlan.tci[0..11]</code>.  Subfields
493             are provided for syntactic convenience, because it is always
494             possible to instead refer to a subset of bits from a field
495             directly.
496           </p>
497
498           <p>
499             Only ordinal fields (see <em>Level of Measurement</em>,
500             below) may have subfields.  Subfields are always ordinal.
501           </p>
502         </li>
503
504         <li>
505           <p>
506             <dfn>Predicates</dfn>.  A predicate is shorthand for a Boolean
507             expression.  Predicates may be used much like 1-bit fields.  For
508             example, <code>ip4</code> might expand to <code>eth.type ==
509             0x800</code>.  Predicates are provided for syntactic convenience,
510             because it is always possible to instead specify the underlying
511             expression directly.
512           </p>
513
514           <p>
515             A predicate whose expansion refers to any nominal field or
516             predicate (see <em>Level of Measurement</em>, below) is nominal;
517             other predicates have Boolean level of measurement.
518           </p>
519         </li>
520       </ul>
521
522       <p>
523         <em>Level of Measurement</em>.  See
524         http://en.wikipedia.org/wiki/Level_of_measurement for the statistical
525         concept on which this classification is based.  There are three
526         levels:
527       </p>
528
529       <ul>
530         <li>
531           <p>
532             <dfn>Ordinal</dfn>.  In statistics, ordinal values can be ordered
533             on a scale.  OVN considers a field (or subfield) to be ordinal if
534             its bits can be examined individually.  This is true for the
535             OpenFlow fields that OpenFlow or Open vSwitch makes ``maskable.''
536           </p>
537
538           <p>
539             Any use of a nominal field may specify a single bit or a range of
540             bits, e.g. <code>vlan.tci[13..15]</code> refers to the PCP field
541             within the VLAN TCI, and <code>eth.dst[40]</code> refers to the
542             multicast bit in the Ethernet destination address.
543           </p>
544
545           <p>
546             OVN supports all the usual arithmetic relations (<code>==</code>,
547             <code>!=</code>, <code>&lt;</code>, <code>&lt;=</code>,
548             <code>&gt;</code>, and <code>&gt;=</code>) on ordinal fields and
549             their subfields, because OVN can implement these in OpenFlow and
550             Open vSwitch as collections of bitwise tests.
551           </p>
552         </li>
553
554         <li>
555           <p>
556             <dfn>Nominal</dfn>.  In statistics, nominal values cannot be
557             usefully compared except for equality.  This is true of OpenFlow
558             port numbers, Ethernet types, and IP protocols are examples: all of
559             these are just identifiers assigned arbitrarily with no deeper
560             meaning.  In OpenFlow and Open vSwitch, bits in these fields
561             generally aren't individually addressable.
562           </p>
563
564           <p>
565             OVN only supports arithmetic tests for equality on nominal fields,
566             because OpenFlow and Open vSwitch provide no way for a flow to
567             efficiently implement other comparisons on them.  (A test for
568             inequality can be sort of built out of two flows with different
569             priorities, but OVN matching expressions always generate flows with
570             a single priority.)
571           </p>
572
573           <p>
574             String fields are always nominal.
575           </p>
576         </li>
577
578         <li>
579           <p>
580             <dfn>Boolean</dfn>.  A nominal field that has only two values, 0
581             and 1, is somewhat exceptional, since it is easy to support both
582             equality and inequality tests on such a field: either one can be
583             implemented as a test for 0 or 1.
584           </p>
585
586           <p>
587             Only predicates (see above) have a Boolean level of measurement.
588           </p>
589
590           <p>
591             This isn't a standard level of measurement.
592           </p>
593         </li>
594       </ul>
595
596       <p>
597         <em>Prerequisites</em>.  Any symbol can have prerequisites, which are
598         additional condition implied by the use of the symbol.  For example,
599         For example, <code>icmp4.type</code> symbol might have prerequisite
600         <code>icmp4</code>, which would cause an expression <code>icmp4.type ==
601         0</code> to be interpreted as <code>icmp4.type == 0 &amp;&amp;
602         icmp4</code>, which would in turn expand to <code>icmp4.type == 0
603         &amp;&amp; eth.type == 0x800 &amp;&amp; ip4.proto == 1</code> (assuming
604         <code>icmp4</code> is a predicate defined as suggested under
605         <em>Types</em> above).
606       </p>
607
608       <p><em>Relational operators</em></p>
609
610       <p>
611         All of the standard relational operators <code>==</code>,
612         <code>!=</code>, <code>&lt;</code>, <code>&lt;=</code>,
613         <code>&gt;</code>, and <code>&gt;=</code> are supported.  Nominal
614         fields support only <code>==</code> and <code>!=</code>, and only in a
615         positive sense when outer <code>!</code> are taken into account,
616         e.g. given string field <code>inport</code>, <code>inport ==
617         "eth0"</code> and <code>!(inport != "eth0")</code> are acceptable, but
618         not <code>inport != "eth0"</code>.
619       </p>
620
621       <p>
622         The implementation of <code>==</code> (or <code>!=</code> when it is
623         negated), is more efficient than that of the other relational
624         operators.
625       </p>
626
627       <p><em>Constants</em></p>
628
629       <p>
630         Integer constants may be expressed in decimal, hexadecimal prefixed by
631         <code>0x</code>, or as dotted-quad IPv4 addresses, IPv6 addresses in
632         their standard forms, or Ethernet addresses as colon-separated hex
633         digits.  A constant in any of these forms may be followed by a slash
634         and a second constant (the mask) in the same form, to form a masked
635         constant.  IPv4 and IPv6 masks may be given as integers, to express
636         CIDR prefixes.
637       </p>
638
639       <p>
640         String constants have the same syntax as quoted strings in JSON (thus,
641         they are Unicode strings).
642       </p>
643
644       <p>
645         Some operators support sets of constants written inside curly braces
646         <code>{</code> ... <code>}</code>.  Commas between elements of a set,
647         and after the last elements, are optional.  With <code>==</code>,
648         ``<code><var>field</var> == { <var>constant1</var>,
649         <var>constant2</var>,</code> ... <code>}</code>'' is syntactic sugar
650         for ``<code><var>field</var> == <var>constant1</var> ||
651         <var>field</var> == <var>constant2</var> || </code>...<code></code>.
652         Similarly, ``<code><var>field</var> != { <var>constant1</var>,
653         <var>constant2</var>, </code>...<code> }</code>'' is equivalent to
654         ``<code><var>field</var> != <var>constant1</var> &amp;&amp;
655         <var>field</var> != <var>constant2</var> &amp;&amp;
656         </code>...<code></code>''.
657       </p>
658
659       <p><em>Miscellaneous</em></p>
660
661       <p>
662         Comparisons may name the symbol or the constant first,
663         e.g. <code>tcp.src == 80</code> and <code>80 == tcp.src</code> are both
664         acceptable.
665       </p>
666
667       <p>
668         Tests for a range may be expressed using a syntax like <code>1024 &lt;=
669         tcp.src &lt;= 49151</code>, which is equivalent to <code>1024 &lt;=
670         tcp.src &amp;&amp; tcp.src &lt;= 49151</code>.
671       </p>
672
673       <p>
674         For a one-bit field or predicate, a mention of its name is equivalent
675         to <code><var>symobl</var> == 1</code>, e.g. <code>vlan.present</code>
676         is equivalent to <code>vlan.present == 1</code>.  The same is true for
677         one-bit subfields, e.g. <code>vlan.tci[12]</code>.  There is no
678         technical limitation to implementing the same for ordinal fields of all
679         widths, but the implementation is expensive enough that the syntax
680         parser requires writing an explicit comparison against zero to make
681         mistakes less likely, e.g. in <code>tcp.src != 0</code> the comparison
682         against 0 is required.
683       </p>
684
685       <p>
686         <em>Operator precedence</em> is as shown below, from highest to lowest.
687         There are two exceptions where parentheses are required even though the
688         table would suggest that they are not: <code>&amp;&amp;</code> and
689         <code>||</code> require parentheses when used together, and
690         <code>!</code> requires parentheses when applied to a relational
691         expression.  Thus, in <code>(eth.type == 0x800 || eth.type == 0x86dd)
692         &amp;&amp; ip.proto == 6</code> or <code>!(arp.op == 1)</code>, the
693         parentheses are mandatory.
694       </p>
695
696       <ul>
697         <li><code>()</code></li>
698         <li><code>==   !=   &lt;   &lt;=   &gt;   &gt;=</code></li>
699         <li><code>!</code></li>
700         <li><code>&amp;&amp;   ||</code></li>
701       </ul>
702
703       <p>
704         <em>Comments</em> may be introduced by <code>//</code>, which extends
705         to the next new-line.  Comments within a line may be bracketed by
706         <code>/*</code> and <code>*/</code>.  Multiline comments are not
707         supported.
708       </p>
709
710       <p><em>Symbols</em></p>
711
712       <p>
713         Most of the symbols below have integer type.  Only <code>inport</code>
714         and <code>outport</code> have string type.  <code>inport</code> names a
715         logical port.  Thus, its value is a <ref column="logical_port"/> name
716         from the <ref table="Port_Binding"/> table.  <code>outport</code> may
717         name a logical port, as <code>inport</code>, or a logical multicast
718         group defined in the <ref table="Multicast_Group"/> table.  For both
719         symbols, only names within the flow's logical datapath may be used.
720       </p>
721
722       <ul>
723         <li><code>reg0</code>...<code>reg4</code></li>
724         <li><code>inport</code> <code>outport</code></li>
725         <li><code>eth.src</code> <code>eth.dst</code> <code>eth.type</code></li>
726         <li><code>vlan.tci</code> <code>vlan.vid</code> <code>vlan.pcp</code> <code>vlan.present</code></li>
727         <li><code>ip.proto</code> <code>ip.dscp</code> <code>ip.ecn</code> <code>ip.ttl</code> <code>ip.frag</code></li>
728         <li><code>ip4.src</code> <code>ip4.dst</code></li>
729         <li><code>ip6.src</code> <code>ip6.dst</code> <code>ip6.label</code></li>
730         <li><code>arp.op</code> <code>arp.spa</code> <code>arp.tpa</code> <code>arp.sha</code> <code>arp.tha</code></li>
731         <li><code>tcp.src</code> <code>tcp.dst</code> <code>tcp.flags</code></li>
732         <li><code>udp.src</code> <code>udp.dst</code></li>
733         <li><code>sctp.src</code> <code>sctp.dst</code></li>
734         <li><code>icmp4.type</code> <code>icmp4.code</code></li>
735         <li><code>icmp6.type</code> <code>icmp6.code</code></li>
736         <li><code>nd.target</code> <code>nd.sll</code> <code>nd.tll</code></li>
737         <li><code>ct_mark</code> <code>ct_label</code></li>
738         <li>
739           <p>
740             <code>ct_state</code>, which has the following Boolean subfields:
741           </p>
742           <ul>
743             <li><code>ct.new</code>: True for a new flow</li>
744             <li><code>ct.est</code>: True for an established flow</li>
745             <li><code>ct.rel</code>: True for a related flow</li>
746             <li><code>ct.rpl</code>: True for a reply flow</li>
747             <li><code>ct.inv</code>: True for a connection entry in a bad state</li>
748           </ul>
749           <p>
750             <code>ct_state</code> and its subfields are initialized by the
751             <code>ct_next</code> action, described below.
752           </p>
753         </li>
754       </ul>
755
756       <p>
757         The following predicates are supported:
758       </p>
759
760       <ul>
761         <li><code>eth.bcast</code> expands to <code>eth.dst == ff:ff:ff:ff:ff:ff</code></li>
762         <li><code>eth.mcast</code> expands to <code>eth.dst[40]</code></li>
763         <li><code>vlan.present</code> expands to <code>vlan.tci[12]</code></li>
764         <li><code>ip4</code> expands to <code>eth.type == 0x800</code></li>
765         <li><code>ip4.mcast</code> expands to <code>ip4.dst[28..31] == 0xe</code></li>
766         <li><code>ip6</code> expands to <code>eth.type == 0x86dd</code></li>
767         <li><code>ip</code> expands to <code>ip4 || ip6</code></li>
768         <li><code>icmp4</code> expands to <code>ip4 &amp;&amp; ip.proto == 1</code></li>
769         <li><code>icmp6</code> expands to <code>ip6 &amp;&amp; ip.proto == 58</code></li>
770         <li><code>icmp</code> expands to <code>icmp4 || icmp6</code></li>
771         <li><code>ip.is_frag</code> expands to <code>ip.frag[0]</code></li>
772         <li><code>ip.later_frag</code> expands to <code>ip.frag[1]</code></li>
773         <li><code>ip.first_frag</code> expands to <code>ip.is_frag &amp;&amp; !ip.later_frag</code></li>
774         <li><code>arp</code> expands to <code>eth.type == 0x806</code></li>
775         <li><code>nd</code> expands to <code>icmp6.type == {135, 136} &amp;&amp; icmp6.code == 0</code></li>
776         <li><code>tcp</code> expands to <code>ip.proto == 6</code></li>
777         <li><code>udp</code> expands to <code>ip.proto == 17</code></li>
778         <li><code>sctp</code> expands to <code>ip.proto == 132</code></li>
779       </ul>
780     </column>
781
782     <column name="actions">
783       <p>
784         Logical datapath actions, to be executed when the logical flow
785         represented by this row is the highest-priority match.
786       </p>
787
788       <p>
789         Actions share lexical syntax with the <ref column="match"/> column.  An
790         empty set of actions (or one that contains just white space or
791         comments), or a set of actions that consists of just
792         <code>drop;</code>, causes the matched packets to be dropped.
793         Otherwise, the column should contain a sequence of actions, each
794         terminated by a semicolon.
795       </p>
796
797       <p>
798         The following actions are defined:
799       </p>
800
801       <dl>
802         <dt><code>output;</code></dt>
803         <dd>
804           <p>
805             In the ingress pipeline, this action executes the
806             <code>egress</code> pipeline as a subroutine.  If
807             <code>outport</code> names a logical port, the egress pipeline
808             executes once; if it is a multicast group, the egress pipeline runs
809             once for each logical port in the group.
810           </p>
811
812           <p>
813             In the egress pipeline, this action performs the actual
814             output to the <code>outport</code> logical port.  (In the egress
815             pipeline, <code>outport</code> never names a multicast group.)
816           </p>
817
818           <p>
819             Output to the input port is implicitly dropped, that is,
820             <code>output</code> becomes a no-op if <code>outport</code> ==
821             <code>inport</code>.  Occasionally it may be useful to override
822             this behavior, e.g. to send an ARP reply to an ARP request; to do
823             so, use <code>inport = "";</code> to set the logical input port to
824             an empty string (which should not be used as the name of any
825             logical port).
826           </p>
827         </dd>
828
829         <dt><code>next;</code></dt>
830         <dt><code>next(<var>table</var>);</code></dt>
831         <dd>
832           Executes another logical datapath table as a subroutine.  By default,
833           the table after the current one is executed.  Specify
834           <var>table</var> to jump to a specific table in the same pipeline.
835         </dd>
836
837         <dt><code><var>field</var> = <var>constant</var>;</code></dt>
838         <dd>
839           <p>
840             Sets data or metadata field <var>field</var> to constant value
841             <var>constant</var>, e.g. <code>outport = "vif0";</code> to set the
842             logical output port.  To set only a subset of bits in a field,
843             specify a subfield for <var>field</var> or a masked
844             <var>constant</var>, e.g. one may use <code>vlan.pcp[2] = 1;</code>
845             or <code>vlan.pcp = 4/4;</code> to set the most sigificant bit of
846             the VLAN PCP.
847           </p>
848
849           <p>
850             Assigning to a field with prerequisites implicitly adds those
851             prerequisites to <ref column="match"/>; thus, for example, a flow
852             that sets <code>tcp.dst</code> applies only to TCP flows,
853             regardless of whether its <ref column="match"/> mentions any TCP
854             field.
855           </p>
856
857           <p>
858             Not all fields are modifiable (e.g. <code>eth.type</code> and
859             <code>ip.proto</code> are read-only), and not all modifiable fields
860             may be partially modified (e.g. <code>ip.ttl</code> must assigned
861             as a whole).  The <code>outport</code> field is modifiable in the
862             <code>ingress</code> pipeline but not in the <code>egress</code>
863             pipeline.
864           </p>
865         </dd>
866
867         <dt><code><var>field1</var> = <var>field2</var>;</code></dt>
868         <dd>
869           <p>
870             Sets data or metadata field <var>field1</var> to the value of data
871             or metadata field <var>field2</var>, e.g. <code>reg0 =
872             ip4.src;</code> copies <code>ip4.src</code> into <code>reg0</code>.
873             To modify only a subset of a field's bits, specify a subfield for
874             <var>field1</var> or <var>field2</var> or both, e.g. <code>vlan.pcp
875             = reg0[0..2];</code> copies the least-significant bits of
876             <code>reg0</code> into the VLAN PCP.
877           </p>
878
879           <p>
880             <var>field1</var> and <var>field2</var> must be the same type,
881             either both string or both integer fields.  If they are both
882             integer fields, they must have the same width.
883           </p>
884
885           <p>
886             If <var>field1</var> or <var>field2</var> has prerequisites, they
887             are added implicitly to <ref column="match"/>.  It is possible to
888             write an assignment with contradictory prerequisites, such as
889             <code>ip4.src = ip6.src[0..31];</code>, but the contradiction means
890             that a logical flow with such an assignment will never be matched.
891           </p>
892         </dd>
893
894         <dt><code><var>field1</var> &lt;-&gt; <var>field2</var>;</code></dt>
895         <dd>
896           <p>
897             Similar to <code><var>field1</var> = <var>field2</var>;</code>
898             except that the two values are exchanged instead of copied.  Both
899             <var>field1</var> and <var>field2</var> must modifiable.
900           </p>
901         </dd>
902
903         <dt><code>ip.ttl--;</code></dt>
904         <dd>
905           <p>
906             Decrements the IPv4 or IPv6 TTL.  If this would make the TTL zero
907             or negative, then processing of the packet halts; no further
908             actions are processed.  (To properly handle such cases, a
909             higher-priority flow should match on
910             <code>ip.ttl == {0, 1};</code>.)
911           </p>
912
913           <p><b>Prerequisite:</b> <code>ip</code></p>
914         </dd>
915
916         <dt><code>ct_next;</code></dt>
917         <dd>
918           <p>
919             Apply connection tracking to the flow, initializing
920             <code>ct_state</code> for matching in later tables.
921             Automatically moves on to the next table, as if followed by
922             <code>next</code>.
923           </p>
924
925           <p>
926             As a side effect, IP fragments will be reassembled for matching.
927             If a fragmented packet is output, then it will be sent with any
928             overlapping fragments squashed.  The connection tracking state is
929             scoped by the logical port, so overlapping addresses may be used.
930             To allow traffic related to the matched flow, execute
931             <code>ct_commit</code>.
932           </p>
933
934           <p>
935             It is possible to have actions follow <code>ct_next</code>,
936             but they will not have access to any of its side-effects and
937             is not generally useful.
938           </p>
939         </dd>
940
941         <dt><code>ct_commit;</code></dt>
942         <dd>
943           Commit the flow to the connection tracking entry associated
944           with it by a previous call to <code>ct_next</code>.
945         </dd>
946
947         <dt><code>arp { <var>action</var>; </code>...<code> };</code></dt>
948         <dd>
949           <p>
950             Temporarily replaces the IPv4 packet being processed by an ARP
951             packet and executes each nested <var>action</var> on the ARP
952             packet.  Actions following the <var>arp</var> action, if any, apply
953             to the original, unmodified packet.
954           </p>
955
956           <p>
957             The ARP packet that this action operates on is initialized based on
958             the IPv4 packet being processed, as follows.  These are default
959             values that the nested actions will probably want to change:
960           </p>
961
962           <ul>
963             <li><code>eth.src</code> unchanged</li>
964             <li><code>eth.dst</code> unchanged</li>
965             <li><code>eth.type = 0x0806</code></li>
966             <li><code>arp.op = 1</code> (ARP request)</li>
967             <li><code>arp.sha</code> copied from <code>eth.src</code></li>
968             <li><code>arp.spa</code> copied from <code>ip4.src</code></li>
969             <li><code>arp.tha = 00:00:00:00:00:00</code></li>
970             <li><code>arp.tpa</code> copied from <code>ip4.dst</code></li>
971           </ul>
972
973           <p>
974             The ARP packet has the same VLAN header, if any, as the IP packet
975             it replaces.
976           </p>
977
978           <p><b>Prerequisite:</b> <code>ip4</code></p>
979         </dd>
980
981         <dt><code>get_arp(<var>P</var>, <var>A</var>);</code></dt>
982
983         <dd>
984           <p>
985             <b>Parameters</b>: logical port string field <var>P</var>, 32-bit
986             IP address field <var>A</var>.
987           </p>
988
989           <p>
990             Looks up <var>A</var> in <var>P</var>'s ARP table.  If an entry is
991             found, stores its Ethernet address in <code>eth.dst</code>,
992             otherwise stores <code>00:00:00:00:00:00</code> in
993             <code>eth.dst</code>.
994           </p>
995
996           <p><b>Example:</b> <code>get_arp(outport, ip4.dst);</code></p>
997         </dd>
998
999         <dt>
1000           <code>put_arp(<var>P</var>, <var>A</var>, <var>E</var>);</code>
1001         </dt>
1002
1003         <dd>
1004           <p>
1005             <b>Parameters</b>: logical port string field <var>P</var>, 32-bit
1006             IP address field <var>A</var>, 48-bit Ethernet address field
1007             <var>E</var>.
1008           </p>
1009
1010           <p>
1011             Adds or updates the entry for IP address <var>A</var> in logical
1012             port <var>P</var>'s ARP table, setting its Ethernet address to
1013             <var>E</var>.
1014           </p>
1015
1016           <p><b>Example:</b> <code>put_arp(inport, arp.spa, arp.sha);</code></p>
1017         </dd>
1018       </dl>
1019
1020       <p>
1021         The following actions will likely be useful later, but they have not
1022         been thought out carefully.
1023       </p>
1024
1025       <dl>
1026         <dt><code>icmp4 { <var>action</var>; </code>...<code> };</code></dt>
1027         <dd>
1028           <p>
1029             Temporarily replaces the IPv4 packet being processed by an ICMPv4
1030             packet and executes each nested <var>action</var> on the ICMPv4
1031             packet.  Actions following the <var>icmp4</var> action, if any,
1032             apply to the original, unmodified packet.
1033           </p>
1034
1035           <p>
1036             The ICMPv4 packet that this action operates on is initialized based
1037             on the IPv4 packet being processed, as follows.  These are default
1038             values that the nested actions will probably want to change.
1039             Ethernet and IPv4 fields not listed here are not changed:
1040           </p>
1041
1042           <ul>
1043             <li><code>ip.proto = 1</code> (ICMPv4)</li>
1044             <li><code>ip.frag = 0</code> (not a fragment)</li>
1045             <li><code>icmp4.type = 3</code> (destination unreachable)</li>
1046             <li><code>icmp4.code = 1</code> (host unreachable)</li>
1047           </ul>
1048
1049           <p>
1050             Details TBD.
1051           </p>
1052
1053           <p><b>Prerequisite:</b> <code>ip4</code></p>
1054         </dd>
1055
1056         <dt><code>tcp_reset;</code></dt>
1057         <dd>
1058           <p>
1059             This action transforms the current TCP packet according to the
1060             following pseudocode:
1061           </p>
1062
1063           <pre>
1064 if (tcp.ack) {
1065         tcp.seq = tcp.ack;
1066 } else {
1067         tcp.ack = tcp.seq + length(tcp.payload);
1068         tcp.seq = 0;
1069 }
1070 tcp.flags = RST;
1071 </pre>
1072
1073           <p>
1074             Then, the action drops all TCP options and payload data, and
1075             updates the TCP checksum.
1076           </p>
1077
1078           <p>
1079             Details TBD.
1080           </p>
1081
1082           <p><b>Prerequisite:</b> <code>tcp</code></p>
1083         </dd>
1084       </dl>
1085     </column>
1086
1087     <column name="external_ids" key="stage-name">
1088       Human-readable name for this flow's stage in the pipeline.
1089     </column>
1090
1091     <group title="Common Columns">
1092       The overall purpose of these columns is described under <code>Common
1093       Columns</code> at the beginning of this document.
1094
1095       <column name="external_ids"/>
1096     </group>
1097   </table>
1098
1099   <table name="Multicast_Group" title="Logical Port Multicast Groups">
1100     <p>
1101       The rows in this table define multicast groups of logical ports.
1102       Multicast groups allow a single packet transmitted over a tunnel to a
1103       hypervisor to be delivered to multiple VMs on that hypervisor, which
1104       uses bandwidth more efficiently.
1105     </p>
1106
1107     <p>
1108       Each row in this table defines a logical multicast group numbered <ref
1109       column="tunnel_key"/> within <ref column="datapath"/>, whose logical
1110       ports are listed in the <ref column="ports"/> column.
1111     </p>
1112
1113     <column name="datapath">
1114       The logical datapath in which the multicast group resides.
1115     </column>
1116
1117     <column name="tunnel_key">
1118       The value used to designate this logical egress port in tunnel
1119       encapsulations.  An index forces the key to be unique within the <ref
1120       column="datapath"/>.  The unusual range ensures that multicast group IDs
1121       do not overlap with logical port IDs.
1122     </column>
1123
1124     <column name="name">
1125       <p>
1126         The logical multicast group's name.  An index forces the name to be
1127         unique within the <ref column="datapath"/>.  Logical flows in the
1128         ingress pipeline may output to the group just as for individual logical
1129         ports, by assigning the group's name to <code>outport</code> and
1130         executing an <code>output</code> action.
1131       </p>
1132
1133       <p>
1134         Multicast group names and logical port names share a single namespace
1135         and thus should not overlap (but the database schema cannot enforce
1136         this).  To try to avoid conflicts, <code>ovn-northd</code> uses names
1137         that begin with <code>_MC_</code>.
1138       </p>
1139     </column>
1140
1141     <column name="ports">
1142       The logical ports included in the multicast group.  All of these ports
1143       must be in the <ref column="datapath"/> logical datapath (but the
1144       database schema cannot enforce this).
1145     </column>
1146   </table>
1147
1148   <table name="Datapath_Binding" title="Physical-Logical Datapath Bindings">
1149     <p>
1150       Each row in this table identifies physical bindings of a logical
1151       datapath.  A logical datapath implements a logical pipeline among the
1152       ports in the <ref table="Port_Binding"/> table associated with it.  In
1153       practice, the pipeline in a given logical datapath implements either a
1154       logical switch or a logical router.
1155     </p>
1156
1157     <column name="tunnel_key">
1158       The tunnel key value to which the logical datapath is bound.
1159       The <code>Tunnel Encapsulation</code> section in
1160       <code>ovn-architecture</code>(7) describes how tunnel keys are
1161       constructed for each supported encapsulation.
1162     </column>
1163
1164     <group title="OVN_Northbound Relationship">
1165       <p>
1166         Each row in <ref table="Datapath_Binding"/> is associated with some
1167         logical datapath.  <code>ovn-northd</code> uses these keys to track the
1168         association of a logical datapath with concepts in the <ref
1169         db="OVN_Northbound"/> database.
1170       </p>
1171
1172       <column name="external_ids" key="logical-switch" type='{"type": "uuid"}'>
1173         For a logical datapath that represents a logical switch,
1174         <code>ovn-northd</code> stores in this key the UUID of the
1175         corresponding <ref table="Logical_Switch" db="OVN_Northbound"/> row in
1176         the <ref db="OVN_Northbound"/> database.
1177       </column>
1178
1179       <column name="external_ids" key="logical-router" type='{"type": "uuid"}'>
1180         For a logical datapath that represents a logical router,
1181         <code>ovn-northd</code> stores in this key the UUID of the
1182         corresponding <ref table="Logical_Router" db="OVN_Northbound"/> row in
1183         the <ref db="OVN_Northbound"/> database.
1184       </column>
1185     </group>
1186
1187     <group title="Common Columns">
1188       The overall purpose of these columns is described under <code>Common
1189       Columns</code> at the beginning of this document.
1190
1191       <column name="external_ids"/>
1192     </group>
1193   </table>
1194
1195   <table name="Port_Binding" title="Physical-Logical Port Bindings">
1196     <p>
1197       Most rows in this table identify the physical location of a logical port.
1198       (The exceptions are logical patch ports, which do not have any physical
1199       location.)
1200     </p>
1201
1202     <p>
1203       For every <code>Logical_Port</code> record in <code>OVN_Northbound</code>
1204       database, <code>ovn-northd</code> creates a record in this table.
1205       <code>ovn-northd</code> populates and maintains every column except
1206       the <code>chassis</code> column, which it leaves empty in new records.
1207     </p>
1208
1209     <p>
1210       <code>ovn-controller</code>/<code>ovn-controller-vtep</code>
1211       populates the <code>chassis</code> column for the records that
1212       identify the logical ports that are located on its hypervisor/gateway,
1213       which <code>ovn-controller</code>/<code>ovn-controller-vtep</code> in
1214       turn finds out by monitoring the local hypervisor's Open_vSwitch
1215       database, which identifies logical ports via the conventions described
1216       in <code>IntegrationGuide.md</code>.
1217     </p>
1218
1219     <p>
1220       When a chassis shuts down gracefully, it should clean up the
1221       <code>chassis</code> column that it previously had populated.
1222       (This is not critical because resources hosted on the chassis are equally
1223       unreachable regardless of whether their rows are present.)  To handle the
1224       case where a VM is shut down abruptly on one chassis, then brought up
1225       again on a different one,
1226       <code>ovn-controller</code>/<code>ovn-controller-vtep</code> must
1227       overwrite the <code>chassis</code> column with new information.
1228     </p>
1229
1230     <group title="Core Features">
1231       <column name="datapath">
1232         The logical datapath to which the logical port belongs.
1233       </column>
1234
1235       <column name="logical_port">
1236         A logical port, taken from <ref table="Logical_Port" column="name"
1237         db="OVN_Northbound"/> in the OVN_Northbound database's <ref
1238         table="Logical_Port" db="OVN_Northbound"/> table.  OVN does not
1239         prescribe a particular format for the logical port ID.
1240       </column>
1241
1242       <column name="chassis">
1243         The physical location of the logical port.  To successfully identify a
1244         chassis, this column must be a <ref table="Chassis"/> record.  This is
1245         populated by
1246         <code>ovn-controller</code>/<code>ovn-controller-vtep</code>.
1247       </column>
1248
1249       <column name="tunnel_key">
1250         <p>
1251           A number that represents the logical port in the key (e.g. STT key or
1252           Geneve TLV) field carried within tunnel protocol packets.
1253         </p>
1254
1255         <p>
1256           The tunnel ID must be unique within the scope of a logical datapath.
1257         </p>
1258       </column>
1259
1260       <column name="mac">
1261         <p>
1262           The Ethernet address or addresses used as a source address on the
1263           logical port, each in the form
1264           <var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>.
1265           The string <code>unknown</code> is also allowed to indicate that the
1266           logical port has an unknown set of (additional) source addresses.
1267         </p>
1268
1269         <p>
1270           A VM interface would ordinarily have a single Ethernet address.  A
1271           gateway port might initially only have <code>unknown</code>, and then
1272           add MAC addresses to the set as it learns new source addresses.
1273         </p>
1274       </column>
1275
1276       <column name="type">
1277         <p>
1278           A type for this logical port.  Logical ports can be used to model other
1279           types of connectivity into an OVN logical switch.  The following types
1280           are defined:
1281         </p>
1282
1283         <dl>
1284           <dt>(empty string)</dt>
1285           <dd>VM (or VIF) interface.</dd>
1286
1287           <dt><code>patch</code></dt>
1288           <dd>
1289             One of a pair of logical ports that act as if connected by a patch
1290             cable.  Useful for connecting two logical datapaths, e.g. to connect
1291             a logical router to a logical switch or to another logical router.
1292           </dd>
1293
1294           <dt><code>localnet</code></dt>
1295           <dd>
1296             A connection to a locally accessible network from each
1297             <code>ovn-controller</code> instance.  A logical switch can only
1298             have a single <code>localnet</code> port attached.  This is used
1299             to model direct connectivity to an existing network.
1300           </dd>
1301
1302           <dt><code>vtep</code></dt>
1303           <dd>
1304             A port to a logical switch on a VTEP gateway chassis.  In order to
1305             get this port correctly recognized by the OVN controller, the <ref
1306             column="options"
1307             table="Port_Binding"/>:<code>vtep-physical-switch</code> and <ref
1308             column="options"
1309             table="Port_Binding"/>:<code>vtep-logical-switch</code> must also
1310             be defined.
1311           </dd>
1312         </dl>
1313       </column>
1314     </group>
1315
1316     <group title="Patch Options">
1317       <p>
1318         These options apply to logical ports with <ref column="type"/> of
1319         <code>patch</code>.
1320       </p>
1321
1322       <column name="options" key="peer">
1323         The <ref column="logical_port"/> in the <ref table="Port_Binding"/>
1324         record for the other side of the patch.  The named <ref
1325         column="logical_port"/> must specify this <ref column="logical_port"/>
1326         in its own <code>peer</code> option.  That is, the two patch logical
1327         ports must have reversed <ref column="logical_port"/> and
1328         <code>peer</code> values.
1329       </column>
1330     </group>
1331
1332     <group title="Localnet Options">
1333       <p>
1334         These options apply to logical ports with <ref column="type"/> of
1335         <code>localnet</code>.
1336       </p>
1337
1338       <column name="options" key="network_name">
1339         Required.  <code>ovn-controller</code> uses the configuration entry
1340         <code>ovn-bridge-mappings</code> to determine how to connect to this
1341         network.  <code>ovn-bridge-mappings</code> is a list of network names
1342         mapped to a local OVS bridge that provides access to that network.  An
1343         example of configuring <code>ovn-bridge-mappings</code> would be:
1344
1345         <pre>$ ovs-vsctl set open . external-ids:ovn-bridge-mappings=physnet1:br-eth0,physnet2:br-eth1</pre>
1346
1347         <p>
1348           When a logical switch has a <code>localnet</code> port attached,
1349           every chassis that may have a local vif attached to that logical
1350           switch must have a bridge mapping configured to reach that
1351           <code>localnet</code>.  Traffic that arrives on a
1352           <code>localnet</code> port is never forwarded over a tunnel to
1353           another chassis.
1354         </p>
1355       </column>
1356
1357       <column name="tag">
1358         If set, indicates that the port represents a connection to a specific
1359         VLAN on a locally accessible network. The VLAN ID is used to match
1360         incoming traffic and is also added to outgoing traffic.
1361       </column>
1362     </group>
1363
1364     <group title="VTEP Options">
1365       <p>
1366         These options apply to logical ports with <ref column="type"/> of
1367         <code>vtep</code>.
1368       </p>
1369
1370       <column name="options" key="vtep-physical-switch">
1371         Required. The name of the VTEP gateway.
1372       </column>
1373
1374       <column name="options" key="vtep-logical-switch">
1375         Required.  A logical switch name connected by the VTEP gateway.  Must
1376         be set when <ref column="type"/> is <code>vtep</code>.
1377       </column>
1378     </group>
1379
1380     <group title="VMI (or VIF) Options">
1381       <p>
1382         These options apply to logical ports with <ref column="type"/> having
1383         (empty string)
1384       </p>
1385
1386       <column name="options" key="policing_rate">
1387         If set, indicates the maximum rate for data sent from this interface,
1388         in kbps. Data exceeding this rate is dropped.
1389       </column>
1390
1391       <column name="options" key="policing_burst">
1392         If set, indicates the maximum burst size for data sent from this
1393         interface, in kb.
1394       </column>
1395     </group>
1396
1397     <group title="Nested Containers">
1398       <p>
1399         These columns support containers nested within a VM.  Specifically,
1400         they are used when <ref column="type"/> is empty and <ref
1401         column="logical_port"/> identifies the interface of a container spawned
1402         inside a VM.  They are empty for containers or VMs that run directly on
1403         a hypervisor.
1404       </p>
1405
1406       <column name="parent_port">
1407         This is taken from
1408         <ref table="Logical_Port" column="parent_name" db="OVN_Northbound"/>
1409         in the OVN_Northbound database's <ref table="Logical_Port"
1410         db="OVN_Northbound"/> table.
1411       </column>
1412
1413       <column name="tag">
1414         <p>
1415           Identifies the VLAN tag in the network traffic associated with that
1416           container's network interface.
1417         </p>
1418
1419         <p>
1420           This column is used for a different purpose when <ref column="type"/>
1421           is <code>localnet</code> (see <code>Localnet Options</code>, above).
1422         </p>
1423       </column>
1424     </group>
1425   </table>
1426
1427   <table name="MAC_Binding" title="IP to MAC bindings">
1428     <p>
1429       Each row in this table specifies a binding from an IP address to an
1430       Ethernet address that has been discovered through ARP (for IPv4) or
1431       neighbor discovery (for IPv6).  This table is primarily used to discover
1432       bindings on physical networks, because IP-to-MAC bindings for virtual
1433       machines are usually populated statically into the <ref
1434       table="Port_Binding"/> table.
1435     </p>
1436
1437     <p>
1438       This table expresses a functional relationship: <ref
1439       table="MAC_Binding"/>(<ref column="logical_port"/>, <ref column="ip"/>) =
1440       <ref column="mac"/>.
1441     </p>
1442
1443     <p>
1444       In outline, the lifetime of a logical router's MAC binding looks like
1445       this:
1446     </p>
1447
1448     <ol>
1449       <li>
1450         On hypervisor 1, a logical router determines that a packet should be
1451         forwarded to IP address <var>A</var> on one of its router ports.  It
1452         uses its logical flow table to determine that <var>A</var> lacks a
1453         static IP-to-MAC binding and the <code>get_arp</code> action to
1454         determine that it lacks a dynamic IP-to-MAC binding.
1455       </li>
1456
1457       <li>
1458         Using an OVN logical <code>arp</code> action, the logical router
1459         generates and sends a broadcast ARP request to the router port.  It
1460         drops the IP packet.
1461       </li>
1462
1463       <li>
1464         The logical switch attached to the router port delivers the ARP request
1465         to all of its ports.  (It might make sense to deliver it only to ports
1466         that have no static IP-to-MAC bindings, but this could also be
1467         surprising behavior.)
1468       </li>
1469
1470       <li>
1471         A host or VM on hypervisor 2 (which might be the same as hypervisor 1)
1472         attached to the logical switch owns the IP address in question.  It
1473         composes an ARP reply and unicasts it to the logical router port's
1474         Ethernet address.
1475       </li>
1476
1477       <li>
1478         The logical switch delivers the ARP reply to the logical router port.
1479       </li>
1480
1481       <li>
1482         The logical router flow table executes a <code>put_arp</code> action.
1483         To record the IP-to-MAC binding, <code>ovn-controller</code> adds a row
1484         to the <ref table="MAC_Binding"/> table.
1485       </li>
1486
1487       <li>
1488         On hypervisor 1, <code>ovn-controller</code> receives the updated <ref
1489         table="MAC_Binding"/> table from the OVN southbound database.  The next
1490         packet destined to <var>A</var> through the logical router is sent
1491         directly to the bound Ethernet address.
1492       </li>
1493     </ol>
1494
1495     <column name="logical_port">
1496       The logical port on which the binding was discovered.
1497     </column>
1498
1499     <column name="ip">
1500       The bound IP address.
1501     </column>
1502
1503     <column name="mac">
1504       The Ethernet address to which the IP is bound.
1505     </column>
1506   </table>
1507 </database>