ovn: Add VLAN support for localnet ports.
[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 three 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>Bindings data</h3>
81
82   <p>
83     Bindings data 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     Bindings 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   <h2>Common Columns</h2>
107
108   <p>
109     Some tables contain a special column named <code>external_ids</code>.  This
110     column has the same form and purpose each place that it appears, so we
111     describe it here to save space later.
112   </p>
113
114   <dl>
115     <dt><code>external_ids</code>: map of string-string pairs</dt>
116     <dd>
117       Key-value pairs for use by the software that manages the OVN Southbound
118       database rather than by
119       <code>ovn-controller</code>/<code>ovn-controller-vtep</code>.  In
120       particular, <code>ovn-northd</code> can use key-value pairs in this
121       column to relate entities in the southbound database to higher-level
122       entities (such as entities in the OVN Northbound database).  Individual
123       key-value pairs in this column may be documented in some cases to aid
124       in understanding and troubleshooting, but the reader should not mistake
125       such documentation as comprehensive.
126     </dd>
127   </dl>
128
129   <table name="Chassis" title="Physical Network Hypervisor and Gateway Information">
130     <p>
131       Each row in this table represents a hypervisor or gateway (a chassis) in
132       the physical network (PN).  Each chassis, via
133       <code>ovn-controller</code>/<code>ovn-controller-vtep</code>, adds
134       and updates its own row, and keeps a copy of the remaining rows to
135       determine how to reach other hypervisors.
136     </p>
137
138     <p>
139       When a chassis shuts down gracefully, it should remove its own row.
140       (This is not critical because resources hosted on the chassis are equally
141       unreachable regardless of whether the row is present.)  If a chassis
142       shuts down permanently without removing its row, some kind of manual or
143       automatic cleanup is eventually needed; we can devise a process for that
144       as necessary.
145     </p>
146
147     <column name="name">
148       A chassis name, taken from <ref key="system-id" table="Open_vSwitch"
149       column="external_ids" db="Open_vSwitch"/> in the Open_vSwitch
150       database's <ref table="Open_vSwitch" db="Open_vSwitch"/> table.  OVN does
151       not prescribe a particular format for chassis names.
152     </column>
153
154     <group title="Encapsulation Configuration">
155       <p>
156         OVN uses encapsulation to transmit logical dataplane packets
157         between chassis.
158       </p>
159
160       <column name="encaps">
161         Points to supported encapsulation configurations to transmit
162         logical dataplane packets to this chassis.  Each entry is a <ref
163         table="Encap"/> record that describes the configuration.
164       </column>
165     </group>
166
167      <group title="Gateway Configuration">
168        <p>
169         A <dfn>gateway</dfn> is a chassis that forwards traffic between the
170         OVN-managed part of a logical network and a physical VLAN, extending a
171         tunnel-based logical network into a physical network.  Gateways are
172         typically dedicated nodes that do not host VMs and will be controlled
173         by <code>ovn-controller-vtep</code>.
174       </p>
175
176       <column name="vtep_logical_switches">
177         Stores all VTEP logical switch names connected by this gateway
178         chassis.  The <ref table="Port_Binding"/> table entry with
179         <ref column="options" table="Port_Binding"/>:<code>vtep-physical-switch</code>
180         equal <ref table="Chassis"/> <ref column="name" table="Chassis"/>, and
181         <ref column="options" table="Port_Binding"/>:<code>vtep-logical-switch</code>
182         value in <ref table="Chassis"/>
183         <ref column="vtep_logical_switches" table="Chassis"/>, will be
184         associated with this <ref table="Chassis"/>.
185       </column>
186      </group>
187   </table>
188
189   <table name="Encap" title="Encapsulation Types">
190     <p>
191       The <ref column="encaps" table="Chassis"/> column in the <ref
192       table="Chassis"/> table refers to rows in this table to identify
193       how OVN may transmit logical dataplane packets to this chassis.
194       Each chassis, via <code>ovn-controller</code>(8) or
195       <code>ovn-controller-vtep</code>(8), adds and updates its own rows
196       and keeps a copy of the remaining rows to determine how to reach
197       other chassis.
198     </p>
199
200     <column name="type">
201       The encapsulation to use to transmit packets to this chassis.
202       Hypervisors must use either <code>geneve</code> or
203       <code>stt</code>.  Gateways may use <code>vxlan</code>,
204       <code>geneve</code>, or <code>stt</code>.
205     </column>
206
207     <column name="options">
208       Options for configuring the encapsulation, e.g. IPsec parameters when
209       IPsec support is introduced.  No options are currently defined.
210     </column>
211
212     <column name="ip">
213       The IPv4 address of the encapsulation tunnel endpoint.
214     </column>
215   </table>
216
217   <table name="Logical_Flow" title="Logical Network Flows">
218     <p>
219       Each row in this table represents one logical flow.
220       <code>ovn-northd</code> populates this table with logical flows
221       that implement the L2 and L3 topologies specified in the
222       <ref db="OVN_Northbound"/> database.  Each hypervisor, via
223       <code>ovn-controller</code>, translates the logical flows into
224       OpenFlow flows specific to its hypervisor and installs them into
225       Open vSwitch.
226     </p>
227
228     <p>
229       Logical flows are expressed in an OVN-specific format, described here.  A
230       logical datapath flow is much like an OpenFlow flow, except that the
231       flows are written in terms of logical ports and logical datapaths instead
232       of physical ports and physical datapaths.  Translation between logical
233       and physical flows helps to ensure isolation between logical datapaths.
234       (The logical flow abstraction also allows the OVN centralized
235       components to do less work, since they do not have to separately
236       compute and push out physical flows to each chassis.)
237     </p>
238
239     <p>
240       The default action when no flow matches is to drop packets.
241     </p>
242
243     <p><em>Logical Life Cycle of a Packet</em></p>
244
245     <p>
246       This following description focuses on the life cycle of a packet through
247       a logical datapath, ignoring physical details of the implementation.
248       Please refer to <em>Life Cycle of a Packet</em> in
249       <code>ovn-architecture</code>(7) for the physical information.
250     </p>
251
252     <p>
253       The description here is written as if OVN itself executes these steps,
254       but in fact OVN (that is, <code>ovn-controller</code>) programs Open
255       vSwitch, via OpenFlow and OVSDB, to execute them on its behalf.
256     </p>
257
258     <p>
259       At a high level, OVN passes each packet through the logical datapath's
260       logical ingress pipeline, which may output the packet to one or more
261       logical port or logical multicast groups.  For each such logical output
262       port, OVN passes the packet through the datapath's logical egress
263       pipeline, which may either drop the packet or deliver it to the
264       destination.  Between the two pipelines, outputs to logical multicast
265       groups are expanded into logical ports, so that the egress pipeline only
266       processes a single logical output port at a time.  Between the two
267       pipelines is also where, when necessary, OVN encapsulates a packet in a
268       tunnel (or tunnels) to transmit to remote hypervisors.
269     </p>
270
271     <p>
272       In more detail, to start, OVN searches the <ref table="Logical_Flow"/>
273       table for a row with correct <ref column="logical_datapath"/>, a <ref
274       column="pipeline"/> of <code>ingress</code>, a <ref column="table_id"/>
275       of 0, and a <ref column="match"/> that is true for the packet.  If none
276       is found, OVN drops the packet.  If OVN finds more than one, it chooses
277       the match with the highest <ref column="priority"/>.  Then OVN executes
278       each of the actions specified in the row's <ref table="actions"/> column,
279       in the order specified.  Some actions, such as those to modify packet
280       headers, require no further details.  The <code>next</code> and
281       <code>output</code> actions are special.
282     </p>
283
284     <p>
285       The <code>next</code> action causes the above process to be repeated
286       recursively, except that OVN searches for <ref column="table_id"/> of 1
287       instead of 0.  Similarly, any <code>next</code> action in a row found in
288       that table would cause a further search for a <ref column="table_id"/> of
289       2, and so on.  When recursive processing completes, flow control returns
290       to the action following <code>next</code>.
291     </p>
292
293     <p>
294       The <code>output</code> action also introduces recursion.  Its effect
295       depends on the current value of the <code>outport</code> field.  Suppose
296       <code>outport</code> designates a logical port.  First, OVN compares
297       <code>inport</code> to <code>outport</code>; if they are equal, it treats
298       the <code>output</code> as a no-op.  In the common case, where they are
299       different, the packet enters the egress pipeline.  This transition to the
300       egress pipeline discards register data, e.g. <code>reg0</code>
301       ... <code>reg5</code>, to achieve uniform behavior regardless of whether
302       the egress pipeline is on a different hypervisor (because registers
303       aren't preserve across tunnel encapsulation).
304     </p>
305
306     <p>
307       To execute the egress pipeline, OVN again searches the <ref
308       table="Logical_Flow"/> table for a row with correct <ref
309       column="logical_datapath"/>, a <ref column="table_id"/> of 0, a <ref
310       column="match"/> that is true for the packet, but now looking for a <ref
311       column="pipeline"/> of <code>egress</code>.  If no matching row is found,
312       the output becomes a no-op.  Otherwise, OVN executes the actions for the
313       matching flow (which is chosen from multiple, if necessary, as already
314       described).
315     </p>
316
317     <p>
318       In the <code>egress</code> pipeline, the <code>next</code> action acts as
319       already described, except that it, of course, searches for
320       <code>egress</code> flows.  The <code>output</code> action, however, now
321       directly outputs the packet to the output port (which is now fixed,
322       because <code>outport</code> is read-only within the egress pipeline).
323     </p>
324
325     <p>
326       The description earlier assumed that <code>outport</code> referred to a
327       logical port.  If it instead designates a logical multicast group, then
328       the description above still applies, with the addition of fan-out from
329       the logical multicast group to each logical port in the group.  For each
330       member of the group, OVN executes the logical pipeline as described, with
331       the logical output port replaced by the group member.
332     </p>
333
334     <p><em>Pipeline Stages</em></p>
335
336     <p>
337       <code>ovn-northd</code> is responsible for populating the
338       <ref table="Logical_Flow"/> table, so the stages are an
339       implementation detail and subject to change.  This section
340       describes the current logical flow table.
341     </p>
342
343     <p>
344       The ingress pipeline consists of the following stages:
345     </p>
346     <ul>
347       <li>
348         Port Security (Table 0): Validates the source address, drops
349         packets with a VLAN tag, and, if configured, verifies that the
350         logical port is allowed to send with the source address.
351       </li>
352
353       <li>
354         L2 Destination Lookup (Table 1): Forwards known unicast
355         addresses to the appropriate logical port.  Unicast packets to
356         unknown hosts are forwarded to logical ports configured with the
357         special <code>unknown</code> mac address.  Broadcast, and
358         multicast are flooded to all ports in the logical switch.
359       </li>
360     </ul>
361
362     <p>
363       The egress pipeline consists of the following stages:
364     </p>
365     <ul>
366       <li>
367         ACL (Table 0): Applies any specified access control lists.
368       </li>
369
370       <li>
371         Port Security (Table 1): If configured, verifies that the
372         logical port is allowed to receive packets with the destination
373         address.
374       </li>
375     </ul>
376
377     <column name="logical_datapath">
378       The logical datapath to which the logical flow belongs.
379     </column>
380
381     <column name="pipeline">
382       <p>
383         The primary flows used for deciding on a packet's destination are the
384         <code>ingress</code> flows.  The <code>egress</code> flows implement
385         ACLs.  See <em>Logical Life Cycle of a Packet</em>, above, for details.
386       </p>
387     </column>
388
389     <column name="table_id">
390       The stage in the logical pipeline, analogous to an OpenFlow table number.
391     </column>
392
393     <column name="priority">
394       The flow's priority.  Flows with numerically higher priority take
395       precedence over those with lower.  If two logical datapath flows with the
396       same priority both match, then the one actually applied to the packet is
397       undefined.
398     </column>
399
400     <column name="match">
401       <p>
402         A matching expression.  OVN provides a superset of OpenFlow matching
403         capabilities, using a syntax similar to Boolean expressions in a
404         programming language.
405       </p>
406
407       <p>
408         The most important components of match expression are
409         <dfn>comparisons</dfn> between <dfn>symbols</dfn> and
410         <dfn>constants</dfn>, e.g. <code>ip4.dst == 192.168.0.1</code>,
411         <code>ip.proto == 6</code>, <code>arp.op == 1</code>, <code>eth.type ==
412         0x800</code>.  The logical AND operator <code>&amp;&amp;</code> and
413         logical OR operator <code>||</code> can combine comparisons into a
414         larger expression.
415       </p>
416
417       <p>
418         Matching expressions also support parentheses for grouping, the logical
419         NOT prefix operator <code>!</code>, and literals <code>0</code> and
420         <code>1</code> to express ``false'' or ``true,'' respectively.  The
421         latter is useful by itself as a catch-all expression that matches every
422         packet.
423       </p>
424
425       <p><em>Symbols</em></p>
426
427       <p>
428         <em>Type</em>.  Symbols have <dfn>integer</dfn> or <dfn>string</dfn>
429         type.  Integer symbols have a <dfn>width</dfn> in bits.
430       </p>
431
432       <p>
433         <em>Kinds</em>.  There are three kinds of symbols:
434       </p>
435
436       <ul>
437         <li>
438           <p>
439             <dfn>Fields</dfn>.  A field symbol represents a packet header or
440             metadata field.  For example, a field
441             named <code>vlan.tci</code> might represent the VLAN TCI field in a
442             packet.
443           </p>
444
445           <p>
446             A field symbol can have integer or string type.  Integer fields can
447             be nominal or ordinal (see <em>Level of Measurement</em>,
448             below).
449           </p>
450         </li>
451
452         <li>
453           <p>
454             <dfn>Subfields</dfn>.  A subfield represents a subset of bits from
455             a larger field.  For example, a field <code>vlan.vid</code> might
456             be defined as an alias for <code>vlan.tci[0..11]</code>.  Subfields
457             are provided for syntactic convenience, because it is always
458             possible to instead refer to a subset of bits from a field
459             directly.
460           </p>
461
462           <p>
463             Only ordinal fields (see <em>Level of Measurement</em>,
464             below) may have subfields.  Subfields are always ordinal.
465           </p>
466         </li>
467
468         <li>
469           <p>
470             <dfn>Predicates</dfn>.  A predicate is shorthand for a Boolean
471             expression.  Predicates may be used much like 1-bit fields.  For
472             example, <code>ip4</code> might expand to <code>eth.type ==
473             0x800</code>.  Predicates are provided for syntactic convenience,
474             because it is always possible to instead specify the underlying
475             expression directly.
476           </p>
477
478           <p>
479             A predicate whose expansion refers to any nominal field or
480             predicate (see <em>Level of Measurement</em>, below) is nominal;
481             other predicates have Boolean level of measurement.
482           </p>
483         </li>
484       </ul>
485
486       <p>
487         <em>Level of Measurement</em>.  See
488         http://en.wikipedia.org/wiki/Level_of_measurement for the statistical
489         concept on which this classification is based.  There are three
490         levels:
491       </p>
492
493       <ul>
494         <li>
495           <p>
496             <dfn>Ordinal</dfn>.  In statistics, ordinal values can be ordered
497             on a scale.  OVN considers a field (or subfield) to be ordinal if
498             its bits can be examined individually.  This is true for the
499             OpenFlow fields that OpenFlow or Open vSwitch makes ``maskable.''
500           </p>
501
502           <p>
503             Any use of a nominal field may specify a single bit or a range of
504             bits, e.g. <code>vlan.tci[13..15]</code> refers to the PCP field
505             within the VLAN TCI, and <code>eth.dst[40]</code> refers to the
506             multicast bit in the Ethernet destination address.
507           </p>
508
509           <p>
510             OVN supports all the usual arithmetic relations (<code>==</code>,
511             <code>!=</code>, <code>&lt;</code>, <code>&lt;=</code>,
512             <code>&gt;</code>, and <code>&gt;=</code>) on ordinal fields and
513             their subfields, because OVN can implement these in OpenFlow and
514             Open vSwitch as collections of bitwise tests.
515           </p>
516         </li>
517
518         <li>
519           <p>
520             <dfn>Nominal</dfn>.  In statistics, nominal values cannot be
521             usefully compared except for equality.  This is true of OpenFlow
522             port numbers, Ethernet types, and IP protocols are examples: all of
523             these are just identifiers assigned arbitrarily with no deeper
524             meaning.  In OpenFlow and Open vSwitch, bits in these fields
525             generally aren't individually addressable.
526           </p>
527
528           <p>
529             OVN only supports arithmetic tests for equality on nominal fields,
530             because OpenFlow and Open vSwitch provide no way for a flow to
531             efficiently implement other comparisons on them.  (A test for
532             inequality can be sort of built out of two flows with different
533             priorities, but OVN matching expressions always generate flows with
534             a single priority.)
535           </p>
536
537           <p>
538             String fields are always nominal.
539           </p>
540         </li>
541
542         <li>
543           <p>
544             <dfn>Boolean</dfn>.  A nominal field that has only two values, 0
545             and 1, is somewhat exceptional, since it is easy to support both
546             equality and inequality tests on such a field: either one can be
547             implemented as a test for 0 or 1.
548           </p>
549
550           <p>
551             Only predicates (see above) have a Boolean level of measurement.
552           </p>
553
554           <p>
555             This isn't a standard level of measurement.
556           </p>
557         </li>
558       </ul>
559
560       <p>
561         <em>Prerequisites</em>.  Any symbol can have prerequisites, which are
562         additional condition implied by the use of the symbol.  For example,
563         For example, <code>icmp4.type</code> symbol might have prerequisite
564         <code>icmp4</code>, which would cause an expression <code>icmp4.type ==
565         0</code> to be interpreted as <code>icmp4.type == 0 &amp;&amp;
566         icmp4</code>, which would in turn expand to <code>icmp4.type == 0
567         &amp;&amp; eth.type == 0x800 &amp;&amp; ip4.proto == 1</code> (assuming
568         <code>icmp4</code> is a predicate defined as suggested under
569         <em>Types</em> above).
570       </p>
571
572       <p><em>Relational operators</em></p>
573
574       <p>
575         All of the standard relational operators <code>==</code>,
576         <code>!=</code>, <code>&lt;</code>, <code>&lt;=</code>,
577         <code>&gt;</code>, and <code>&gt;=</code> are supported.  Nominal
578         fields support only <code>==</code> and <code>!=</code>, and only in a
579         positive sense when outer <code>!</code> are taken into account,
580         e.g. given string field <code>inport</code>, <code>inport ==
581         "eth0"</code> and <code>!(inport != "eth0")</code> are acceptable, but
582         not <code>inport != "eth0"</code>.
583       </p>
584
585       <p>
586         The implementation of <code>==</code> (or <code>!=</code> when it is
587         negated), is more efficient than that of the other relational
588         operators.
589       </p>
590
591       <p><em>Constants</em></p>
592
593       <p>
594         Integer constants may be expressed in decimal, hexadecimal prefixed by
595         <code>0x</code>, or as dotted-quad IPv4 addresses, IPv6 addresses in
596         their standard forms, or Ethernet addresses as colon-separated hex
597         digits.  A constant in any of these forms may be followed by a slash
598         and a second constant (the mask) in the same form, to form a masked
599         constant.  IPv4 and IPv6 masks may be given as integers, to express
600         CIDR prefixes.
601       </p>
602
603       <p>
604         String constants have the same syntax as quoted strings in JSON (thus,
605         they are Unicode strings).
606       </p>
607
608       <p>
609         Some operators support sets of constants written inside curly braces
610         <code>{</code> ... <code>}</code>.  Commas between elements of a set,
611         and after the last elements, are optional.  With <code>==</code>,
612         ``<code><var>field</var> == { <var>constant1</var>,
613         <var>constant2</var>,</code> ... <code>}</code>'' is syntactic sugar
614         for ``<code><var>field</var> == <var>constant1</var> ||
615         <var>field</var> == <var>constant2</var> || </code>...<code></code>.
616         Similarly, ``<code><var>field</var> != { <var>constant1</var>,
617         <var>constant2</var>, </code>...<code> }</code>'' is equivalent to
618         ``<code><var>field</var> != <var>constant1</var> &amp;&amp;
619         <var>field</var> != <var>constant2</var> &amp;&amp;
620         </code>...<code></code>''.
621       </p>
622
623       <p><em>Miscellaneous</em></p>
624
625       <p>
626         Comparisons may name the symbol or the constant first,
627         e.g. <code>tcp.src == 80</code> and <code>80 == tcp.src</code> are both
628         acceptable.
629       </p>
630
631       <p>
632         Tests for a range may be expressed using a syntax like <code>1024 &lt;=
633         tcp.src &lt;= 49151</code>, which is equivalent to <code>1024 &lt;=
634         tcp.src &amp;&amp; tcp.src &lt;= 49151</code>.
635       </p>
636
637       <p>
638         For a one-bit field or predicate, a mention of its name is equivalent
639         to <code><var>symobl</var> == 1</code>, e.g. <code>vlan.present</code>
640         is equivalent to <code>vlan.present == 1</code>.  The same is true for
641         one-bit subfields, e.g. <code>vlan.tci[12]</code>.  There is no
642         technical limitation to implementing the same for ordinal fields of all
643         widths, but the implementation is expensive enough that the syntax
644         parser requires writing an explicit comparison against zero to make
645         mistakes less likely, e.g. in <code>tcp.src != 0</code> the comparison
646         against 0 is required.
647       </p>
648
649       <p>
650         <em>Operator precedence</em> is as shown below, from highest to lowest.
651         There are two exceptions where parentheses are required even though the
652         table would suggest that they are not: <code>&amp;&amp;</code> and
653         <code>||</code> require parentheses when used together, and
654         <code>!</code> requires parentheses when applied to a relational
655         expression.  Thus, in <code>(eth.type == 0x800 || eth.type == 0x86dd)
656         &amp;&amp; ip.proto == 6</code> or <code>!(arp.op == 1)</code>, the
657         parentheses are mandatory.
658       </p>
659
660       <ul>
661         <li><code>()</code></li>
662         <li><code>==   !=   &lt;   &lt;=   &gt;   &gt;=</code></li>
663         <li><code>!</code></li>
664         <li><code>&amp;&amp;   ||</code></li>
665       </ul>
666
667       <p>
668         <em>Comments</em> may be introduced by <code>//</code>, which extends
669         to the next new-line.  Comments within a line may be bracketed by
670         <code>/*</code> and <code>*/</code>.  Multiline comments are not
671         supported.
672       </p>
673
674       <p><em>Symbols</em></p>
675
676       <p>
677         Most of the symbols below have integer type.  Only <code>inport</code>
678         and <code>outport</code> have string type.  <code>inport</code> names a
679         logical port.  Thus, its value is a <ref column="logical_port"/> name
680         from the <ref table="Port_Binding"/> table.  <code>outport</code> may
681         name a logical port, as <code>inport</code>, or a logical multicast
682         group defined in the <ref table="Multicast_Group"/> table.  For both
683         symbols, only names within the flow's logical datapath may be used.
684       </p>
685
686       <ul>
687         <li><code>reg0</code>...<code>reg5</code></li>
688         <li><code>inport</code> <code>outport</code></li>
689         <li><code>eth.src</code> <code>eth.dst</code> <code>eth.type</code></li>
690         <li><code>vlan.tci</code> <code>vlan.vid</code> <code>vlan.pcp</code> <code>vlan.present</code></li>
691         <li><code>ip.proto</code> <code>ip.dscp</code> <code>ip.ecn</code> <code>ip.ttl</code> <code>ip.frag</code></li>
692         <li><code>ip4.src</code> <code>ip4.dst</code></li>
693         <li><code>ip6.src</code> <code>ip6.dst</code> <code>ip6.label</code></li>
694         <li><code>arp.op</code> <code>arp.spa</code> <code>arp.tpa</code> <code>arp.sha</code> <code>arp.tha</code></li>
695         <li><code>tcp.src</code> <code>tcp.dst</code> <code>tcp.flags</code></li>
696         <li><code>udp.src</code> <code>udp.dst</code></li>
697         <li><code>sctp.src</code> <code>sctp.dst</code></li>
698         <li><code>icmp4.type</code> <code>icmp4.code</code></li>
699         <li><code>icmp6.type</code> <code>icmp6.code</code></li>
700         <li><code>nd.target</code> <code>nd.sll</code> <code>nd.tll</code></li>
701       </ul>
702
703       <p>
704         The following predicates are supported:
705       </p>
706
707       <ul>
708         <li><code>vlan.present</code> expands to <code>vlan.tci[12]</code></li>
709         <li><code>ip4</code> expands to <code>eth.type == 0x800</code></li>
710         <li><code>ip6</code> expands to <code>eth.type == 0x86dd</code></li>
711         <li><code>ip</code> expands to <code>ip4 || ip6</code></li>
712         <li><code>icmp4</code> expands to <code>ip4 &amp;&amp; ip.proto == 1</code></li>
713         <li><code>icmp6</code> expands to <code>ip6 &amp;&amp; ip.proto == 58</code></li>
714         <li><code>icmp</code> expands to <code>icmp4 || icmp6</code></li>
715         <li><code>ip.is_frag</code> expands to <code>ip.frag[0]</code></li>
716         <li><code>ip.later_frag</code> expands to <code>ip.frag[1]</code></li>
717         <li><code>ip.first_frag</code> expands to <code>ip.is_frag &amp;&amp; !ip.later_frag</code></li>
718         <li><code>arp</code> expands to <code>eth.type == 0x806</code></li>
719         <li><code>nd</code> expands to <code>icmp6.type == {135, 136} &amp;&amp; icmp6.code == 0</code></li>
720         <li><code>tcp</code> expands to <code>ip.proto == 6</code></li>
721         <li><code>udp</code> expands to <code>ip.proto == 17</code></li>
722         <li><code>sctp</code> expands to <code>ip.proto == 132</code></li>
723       </ul>
724     </column>
725
726     <column name="actions">
727       <p>
728         Logical datapath actions, to be executed when the logical flow
729         represented by this row is the highest-priority match.
730       </p>
731
732       <p>
733         Actions share lexical syntax with the <ref column="match"/> column.  An
734         empty set of actions (or one that contains just white space or
735         comments), or a set of actions that consists of just
736         <code>drop;</code>, causes the matched packets to be dropped.
737         Otherwise, the column should contain a sequence of actions, each
738         terminated by a semicolon.
739       </p>
740
741       <p>
742         The following actions are defined:
743       </p>
744
745       <dl>
746         <dt><code>output;</code></dt>
747         <dd>
748           <p>
749             In the ingress pipeline, this action executes the
750             <code>egress</code> pipeline as a subroutine.  If
751             <code>outport</code> names a logical port, the egress pipeline
752             executes once; if it is a multicast group, the egress pipeline runs
753             once for each logical port in the group.
754           </p>
755
756           <p>
757             In the egress pipeline, this action performs the actual
758             output to the <code>outport</code> logical port.  (In the egress
759             pipeline, <code>outport</code> never names a multicast group.)
760           </p>
761
762           <p>
763             Output to the input port is implicitly dropped, that is,
764             <code>output</code> becomes a no-op if <code>outport</code> ==
765             <code>inport</code>.
766           </p>
767         </dd>
768
769         <dt><code>next;</code></dt>
770         <dd>
771           Executes the next logical datapath table as a subroutine.
772         </dd>
773
774         <dt><code><var>field</var> = <var>constant</var>;</code></dt>
775         <dd>
776           <p>
777             Sets data or metadata field <var>field</var> to constant value
778             <var>constant</var>, e.g. <code>outport = "vif0";</code> to set the
779             logical output port.  To set only a subset of bits in a field,
780             specify a subfield for <var>field</var> or a masked
781             <var>constant</var>, e.g. one may use <code>vlan.pcp[2] = 1;</code>
782             or <code>vlan.pcp = 4/4;</code> to set the most sigificant bit of
783             the VLAN PCP.
784           </p>
785
786           <p>
787             Assigning to a field with prerequisites implicitly adds those
788             prerequisites to <ref column="match"/>; thus, for example, a flow
789             that sets <code>tcp.dst</code> applies only to TCP flows,
790             regardless of whether its <ref column="match"/> mentions any TCP
791             field.
792           </p>
793
794           <p>
795             Not all fields are modifiable (e.g. <code>eth.type</code> and
796             <code>ip.proto</code> are read-only), and not all modifiable fields
797             may be partially modified (e.g. <code>ip.ttl</code> must assigned
798             as a whole).  The <code>outport</code> field is modifiable in the
799             <code>ingress</code> pipeline but not in the <code>egress</code>
800             pipeline.
801           </p>
802         </dd>
803       </dl>
804
805       <p>
806         The following actions will likely be useful later, but they have not
807         been thought out carefully.
808       </p>
809
810       <dl>
811         <dt><code><var>field1</var> = <var>field2</var>;</code></dt>
812         <dd>
813           Extends the assignment action to allow copying between fields.
814         </dd>
815
816         <dt><code>learn</code></dt>
817
818         <dt><code>conntrack</code></dt>
819
820         <dt><code>dec_ttl { <var>action</var>, </code>...<code> } { <var>action</var>; </code>...<code>};</code></dt>
821         <dd>
822           decrement TTL; execute first set of actions if
823           successful, second set if TTL decrement fails
824         </dd>
825
826         <dt><code>icmp_reply { <var>action</var>, </code>...<code> };</code></dt>
827         <dd>generate ICMP reply from packet, execute <var>action</var>s</dd>
828
829         <dt><code>arp { <var>action</var>, </code>...<code> }</code></dt>
830         <dd>generate ARP from packet, execute <var>action</var>s</dd>
831       </dl>
832     </column>
833
834     <column name="external_ids" key="stage-name">
835       Human-readable name for this flow's stage in the pipeline.
836     </column>
837
838     <group title="Common Columns">
839       The overall purpose of these columns is described under <code>Common
840       Columns</code> at the beginning of this document.
841
842       <column name="external_ids"/>
843     </group>
844   </table>
845
846   <table name="Multicast_Group" title="Logical Port Multicast Groups">
847     <p>
848       The rows in this table define multicast groups of logical ports.
849       Multicast groups allow a single packet transmitted over a tunnel to a
850       hypervisor to be delivered to multiple VMs on that hypervisor, which
851       uses bandwidth more efficiently.
852     </p>
853
854     <p>
855       Each row in this table defines a logical multicast group numbered <ref
856       column="tunnel_key"/> within <ref column="datapath"/>, whose logical
857       ports are listed in the <ref column="ports"/> column.
858     </p>
859
860     <column name="datapath">
861       The logical datapath in which the multicast group resides.
862     </column>
863
864     <column name="tunnel_key">
865       The value used to designate this logical egress port in tunnel
866       encapsulations.  An index forces the key to be unique within the <ref
867       column="datapath"/>.  The unusual range ensures that multicast group IDs
868       do not overlap with logical port IDs.
869     </column>
870
871     <column name="name">
872       <p>
873         The logical multicast group's name.  An index forces the name to be
874         unique within the <ref column="datapath"/>.  Logical flows in the
875         ingress pipeline may output to the group just as for individual logical
876         ports, by assigning the group's name to <code>outport</code> and
877         executing an <code>output</code> action.
878       </p>
879
880       <p>
881         Multicast group names and logical port names share a single namespace
882         and thus should not overlap (but the database schema cannot enforce
883         this).  To try to avoid conflicts, <code>ovn-northd</code> uses names
884         that begin with <code>_MC_</code>.
885       </p>
886     </column>
887
888     <column name="ports">
889       The logical ports included in the multicast group.  All of these ports
890       must be in the <ref column="datapath"/> logical datapath (but the
891       database schema cannot enforce this).
892     </column>
893   </table>
894
895   <table name="Datapath_Binding" title="Physical-Logical Datapath Bindings">
896     <p>
897       Each row in this table identifies physical bindings of a logical
898       datapath.  A logical datapath implements a logical pipeline among the
899       ports in the <ref table="Port_Binding"/> table associated with it.  In
900       practice, the pipeline in a given logical datapath implements either a
901       logical switch or a logical router.
902     </p>
903
904     <column name="tunnel_key">
905       The tunnel key value to which the logical datapath is bound.
906       The <code>Tunnel Encapsulation</code> section in
907       <code>ovn-architecture</code>(7) describes how tunnel keys are
908       constructed for each supported encapsulation.
909     </column>
910
911     <column name="external_ids" key="logical-switch" type='{"type": "uuid"}'>
912       Each row in <ref table="Datapath_Binding"/> is associated with some
913       logical datapath.  <code>ovn-northd</code> uses this key to store the
914       UUID of the logical datapath <ref table="Logical_Switch"
915       db="OVN_Northbound"/> row in the <ref db="OVN_Northbound"/> database.
916     </column>
917
918     <group title="Common Columns">
919       The overall purpose of these columns is described under <code>Common
920       Columns</code> at the beginning of this document.
921
922       <column name="external_ids"/>
923     </group>
924   </table>
925
926   <table name="Port_Binding" title="Physical-Logical Port Bindings">
927     <p>
928       Each row in this table identifies the physical location of a logical
929       port.
930     </p>
931
932     <p>
933       For every <code>Logical_Port</code> record in <code>OVN_Northbound</code>
934       database, <code>ovn-northd</code> creates a record in this table.
935       <code>ovn-northd</code> populates and maintains every column except
936       the <code>chassis</code> column, which it leaves empty in new records.
937     </p>
938
939     <p>
940       <code>ovn-controller</code>/<code>ovn-controller-vtep</code>
941       populates the <code>chassis</code> column for the records that
942       identify the logical ports that are located on its hypervisor/gateway,
943       which <code>ovn-controller</code>/<code>ovn-controller-vtep</code> in
944       turn finds out by monitoring the local hypervisor's Open_vSwitch
945       database, which identifies logical ports via the conventions described
946       in <code>IntegrationGuide.md</code>.
947     </p>
948
949     <p>
950       When a chassis shuts down gracefully, it should clean up the
951       <code>chassis</code> column that it previously had populated.
952       (This is not critical because resources hosted on the chassis are equally
953       unreachable regardless of whether their rows are present.)  To handle the
954       case where a VM is shut down abruptly on one chassis, then brought up
955       again on a different one,
956       <code>ovn-controller</code>/<code>ovn-controller-vtep</code> must
957       overwrite the <code>chassis</code> column with new information.
958     </p>
959
960     <column name="datapath">
961       The logical datapath to which the logical port belongs.
962     </column>
963
964     <column name="logical_port">
965       A logical port, taken from <ref table="Logical_Port" column="name"
966       db="OVN_Northbound"/> in the OVN_Northbound database's
967       <ref table="Logical_Port" db="OVN_Northbound"/> table.  OVN does not
968       prescribe a particular format for the logical port ID.
969     </column>
970
971     <column name="type">
972       <p>
973       A type for this logical port.  Logical ports can be used to model
974       other types of connectivity into an OVN logical switch.  Leaving this
975       column blank maintains the default logical port behavior, which
976       is for a VM (or VIF) interface.  The following other types are defined:
977       </p>
978
979       <dl>
980         <dt><code>localnet</code></dt>
981         <dd>A connection to a locally accessible network from each
982         <code>ovn-controller</code> instance.  A logical switch can only
983         have a single <code>localnet</code> port attached and at most one
984         regular logical port.  This is used to model direct connectivity
985         to an existing network.</dd>
986       </dl>
987
988       <dl>
989         <dt><code>vtep</code></dt>
990         <dd>A port to a logical switch on a VTEP gateway chassis.  In order
991         to get this port correctly recognized by the OVN controller, the
992         <ref column="options" table="Port_Binding"/>:<code>vtep-physical-switch</code>
993         and <ref column="options" table="Port_Binding"/>:<code>vtep-logical-switch</code>
994         must also be defined.</dd>
995       </dl>
996     </column>
997
998     <column name="options">
999       <p>
1000         This column provides key/value settings specific to the logical port
1001         <ref column="type"/>.  The following options are defined:
1002       </p>
1003
1004       <dl>
1005         <dt><code>network_name</code></dt>
1006         <dd>
1007           Must be set when <ref column="type"/> is <code>localnet</code>.
1008           <code>ovn-controller</code> uses the configuration entry
1009           <code>ovn-bridge-mappings</code> to determine how to connect to
1010           this network.  <code>ovn-bridge-mappings</code> is a list of
1011           network names mapped to a local OVS bridge that provides access
1012           to that network.  An example of configuring
1013           <code>ovn-bridge-mappings</code> would be:
1014
1015           <p>
1016             <code>$ ovs-vsctl set open
1017             . external-ids:ovn-bridge-mappings=physnet1:br-eth0,physnet2:br-eth1</code>
1018           </p>
1019
1020           <p>
1021             Also note that when a logical switch has a <code>localnet</code>
1022             port attached, every chassis that may have a local vif attached
1023             to that logical switch must have a bridge mapping configured to
1024             reach that <code>localnet</code>.  Traffic that arrives on a
1025             <code>localnet</code> port is never forwarded over a tunnel to
1026             another chassis.
1027           </p>
1028         </dd>
1029       </dl>
1030
1031       <dl>
1032         <dt><code>vtep-physical-switch</code></dt>
1033         <dd>
1034           The name of the VTEP gateway.  Must be set when
1035           <ref column="type"/> is <code>vtep</code>.
1036         </dd>
1037       </dl>
1038
1039       <dl>
1040         <dt><code>vtep-logical-switch</code></dt>
1041         <dd>
1042           A logical switch name connected by the VTEP gateway.  Must be
1043           set when <ref column="type"/> is <code>vtep</code>.
1044         </dd>
1045       </dl>
1046     </column>
1047
1048     <column name="tunnel_key">
1049       <p>
1050         A number that represents the logical port in the key (e.g. STT key or
1051         Geneve TLV) field carried within tunnel protocol packets.
1052       </p>
1053
1054       <p>
1055         The tunnel ID must be unique within the scope of a logical datapath.
1056       </p>
1057     </column>
1058
1059     <column name="parent_port">
1060       For containers created inside a VM, this is taken from
1061       <ref table="Logical_Port" column="parent_name" db="OVN_Northbound"/>
1062       in the OVN_Northbound database's <ref table="Logical_Port"
1063       db="OVN_Northbound"/> table.  It is left empty if
1064       <ref column="logical_port"/> belongs to a VM or a container created
1065       in the hypervisor.
1066     </column>
1067
1068     <column name="tag">
1069      <p>
1070       When <ref column="type"/> is empty and <ref column="logical_port"/>
1071       identifies the interface of a container spawned inside a VM, this column
1072       identifies the VLAN tag in the network traffic associated with that
1073       container's network interface. It is left empty if
1074       <ref column="logical_port"/> belongs to a VM or a container created in the
1075       hypervisor.
1076      </p>
1077
1078      <p>
1079       When <ref column="type"/> is set to <code>localnet</code>, this can be
1080       set to indicate that the port represents a connection to a specific
1081       VLAN on a locally accessible network. The VLAN ID is used to match
1082       incoming traffic and is also added to outgoing traffic.
1083      </p>
1084     </column>
1085
1086     <column name="chassis">
1087       The physical location of the logical port.  To successfully identify a
1088       chassis, this column must be a <ref table="Chassis"/> record.  This is
1089       populated by <code>ovn-controller</code>/<code>ovn-controller-vtep</code>.
1090     </column>
1091
1092     <column name="mac">
1093       <p>
1094         The Ethernet address or addresses used as a source address on the
1095         logical port, each in the form
1096         <var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>.
1097         The string <code>unknown</code> is also allowed to indicate that the
1098         logical port has an unknown set of (additional) source addresses.
1099       </p>
1100
1101       <p>
1102         A VM interface would ordinarily have a single Ethernet address.  A
1103         gateway port might initially only have <code>unknown</code>, and then
1104         add MAC addresses to the set as it learns new source addresses.
1105       </p>
1106     </column>
1107   </table>
1108 </database>