vtep: additions to BFD configuration and status reporting
[cascardo/ovs.git] / vtep / vtep.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <database title="Hardware VTEP Database">
3   <p>
4     This schema specifies relations that a VTEP can use to integrate
5     physical ports into logical switches maintained by a network
6     virtualization controller such as NSX.
7   </p>
8   
9   <p>Glossary:</p>
10
11   <dl>
12     <dt>VTEP</dt>
13     <dd>
14       VXLAN Tunnel End Point, an entity which originates and/or terminates
15       VXLAN tunnels.
16     </dd>
17
18     <dt>HSC</dt>
19     <dd>
20       Hardware Switch Controller.
21     </dd>
22
23     <dt>NVC</dt>
24     <dd>
25       Network Virtualization Controller, e.g. NSX.
26     </dd>
27
28     <dt>VRF</dt>
29     <dd>
30       Virtual Routing and Forwarding instance.
31     </dd>
32  </dl>
33
34   <table name="Global" title="Top-level configuration.">
35     Top-level configuration for a hardware VTEP.  There must be
36     exactly one record in the <ref table="Global"/> table.
37
38     <column name="switches">
39       The physical switches managed by the VTEP.
40     </column>
41
42     <group title="Database Configuration">
43       <p>
44         These columns primarily configure the database server
45         (<code>ovsdb-server</code>), not the hardware VTEP itself.
46       </p>
47
48       <column name="managers">
49         Database clients to which the database server should connect or
50         to which it should listen, along with options for how these
51         connection should be configured.  See the <ref table="Manager"/>
52         table for more information.
53       </column>
54     </group>
55   </table>
56
57   <table name="Manager" title="OVSDB management connection.">
58     <p>
59       Configuration for a database connection to an Open vSwitch Database
60       (OVSDB) client.
61     </p>
62
63     <p>
64       The database server can initiate and maintain active connections
65       to remote clients.  It can also listen for database connections.
66     </p>
67
68     <group title="Core Features">
69       <column name="target">
70         <p>Connection method for managers.</p>
71         <p>
72           The following connection methods are currently supported:
73         </p>
74         <dl>
75           <dt><code>ssl:<var>ip</var></code>[<code>:<var>port</var></code>]</dt>
76           <dd>
77             <p>
78               The specified SSL <var>port</var> (default: 6632) on the host at
79               the given <var>ip</var>, which must be expressed as an IP address
80               (not a DNS name).
81             </p>
82             <p>
83               SSL key and certificate configuration happens outside the
84               database.
85             </p>
86           </dd>
87
88           <dt><code>tcp:<var>ip</var></code>[<code>:<var>port</var></code>]</dt>
89           <dd>
90             The specified TCP <var>port</var> (default: 6632) on the host at
91             the given <var>ip</var>, which must be expressed as an IP address
92             (not a DNS name).
93           </dd>
94           <dt><code>pssl:</code>[<var>port</var>][<code>:<var>ip</var></code>]</dt>
95           <dd>
96             <p>
97               Listens for SSL connections on the specified TCP <var>port</var>
98               (default: 6632).  If <var>ip</var>, which must be expressed as an
99               IP address (not a DNS name), is specified, then connections are
100               restricted to the specified local IP address.
101             </p>
102           </dd>
103           <dt><code>ptcp:</code>[<var>port</var>][<code>:<var>ip</var></code>]</dt>
104           <dd>
105             Listens for connections on the specified TCP <var>port</var>
106             (default: 6632).  If <var>ip</var>, which must be expressed as an
107             IP address (not a DNS name), is specified, then connections are
108             restricted to the specified local IP address.
109           </dd>
110         </dl>
111       </column>
112     </group>
113
114     <group title="Client Failure Detection and Handling">
115       <column name="max_backoff">
116         Maximum number of milliseconds to wait between connection attempts.
117         Default is implementation-specific.
118       </column>
119
120       <column name="inactivity_probe">
121         Maximum number of milliseconds of idle time on connection to the
122         client before sending an inactivity probe message.  If the Open
123         vSwitch database does not communicate with the client for the
124         specified number of seconds, it will send a probe.  If a
125         response is not received for the same additional amount of time,
126         the database server assumes the connection has been broken
127         and attempts to reconnect.  Default is implementation-specific.
128         A value of 0 disables inactivity probes.
129       </column>
130     </group>
131
132     <group title="Status">
133       <column name="is_connected">
134         <code>true</code> if currently connected to this manager,
135         <code>false</code> otherwise.
136       </column>
137
138       <column name="status" key="last_error">
139         A human-readable description of the last error on the connection
140         to the manager; i.e. <code>strerror(errno)</code>.  This key
141         will exist only if an error has occurred.
142       </column>
143
144       <column name="status" key="state"
145               type='{"type": "string", "enum": ["set", ["VOID", "BACKOFF", "CONNECTING", "ACTIVE", "IDLE"]]}'>
146         <p>
147           The state of the connection to the manager:
148         </p>
149         <dl>
150           <dt><code>VOID</code></dt>
151           <dd>Connection is disabled.</dd>
152
153           <dt><code>BACKOFF</code></dt>
154           <dd>Attempting to reconnect at an increasing period.</dd>
155
156           <dt><code>CONNECTING</code></dt>
157           <dd>Attempting to connect.</dd>
158
159           <dt><code>ACTIVE</code></dt>
160           <dd>Connected, remote host responsive.</dd>
161
162           <dt><code>IDLE</code></dt>
163           <dd>Connection is idle.  Waiting for response to keep-alive.</dd>
164         </dl>
165         <p>
166           These values may change in the future.  They are provided only for
167           human consumption.
168         </p>
169       </column>
170
171       <column name="status" key="sec_since_connect"
172               type='{"type": "integer", "minInteger": 0}'>
173         The amount of time since this manager last successfully connected
174         to the database (in seconds). Value is empty if manager has never
175         successfully connected.
176       </column>
177
178       <column name="status" key="sec_since_disconnect"
179               type='{"type": "integer", "minInteger": 0}'>
180         The amount of time since this manager last disconnected from the
181         database (in seconds). Value is empty if manager has never
182         disconnected.
183       </column>
184
185       <column name="status" key="locks_held">
186         Space-separated list of the names of OVSDB locks that the connection
187         holds.  Omitted if the connection does not hold any locks.
188       </column>
189
190       <column name="status" key="locks_waiting">
191         Space-separated list of the names of OVSDB locks that the connection is
192         currently waiting to acquire.  Omitted if the connection is not waiting
193         for any locks.
194       </column>
195
196       <column name="status" key="locks_lost">
197         Space-separated list of the names of OVSDB locks that the connection
198         has had stolen by another OVSDB client.  Omitted if no locks have been
199         stolen from this connection.
200       </column>
201
202       <column name="status" key="n_connections"
203               type='{"type": "integer", "minInteger": 2}'>
204         <p>
205           When <ref column="target"/> specifies a connection method that
206           listens for inbound connections (e.g. <code>ptcp:</code> or
207           <code>pssl:</code>) and more than one connection is actually active,
208           the value is the number of active connections.  Otherwise, this
209           key-value pair is omitted.
210         </p>
211         <p>
212           When multiple connections are active, status columns and key-value
213           pairs (other than this one) report the status of one arbitrarily
214           chosen connection.
215         </p>
216       </column>
217     </group>
218
219     <group title="Connection Parameters">
220       <p>
221         Additional configuration for a connection between the manager
222         and the database server.
223       </p>
224
225       <column name="other_config" key="dscp"
226                 type='{"type": "integer"}'>
227         The Differentiated Service Code Point (DSCP) is specified using 6 bits
228         in the Type of Service (TOS) field in the IP header. DSCP provides a
229         mechanism to classify the network traffic and provide Quality of
230         Service (QoS) on IP networks.
231
232         The DSCP value specified here is used when establishing the
233         connection between the manager and the database server.  If no
234         value is specified, a default value of 48 is chosen.  Valid DSCP
235         values must be in the range 0 to 63.
236       </column>
237     </group>
238   </table>
239
240   <table name="Physical_Switch" title="A physical switch.">
241     A physical switch that implements a VTEP.
242
243     <column name="ports">
244       The physical ports within the switch.
245     </column>
246
247     <column name="tunnels">
248       Tunnels created by this switch as instructed by the NVC.
249     </column>
250
251     <group title="Network Status">
252       <column name="management_ips">
253         IPv4 or IPv6 addresses at which the switch may be contacted
254         for management purposes.
255       </column>
256
257       <column name="tunnel_ips">
258         <p>
259           IPv4 or IPv6 addresses on which the switch may originate or
260           terminate tunnels.
261         </p>
262
263         <p>
264           This column is intended to allow a <ref table="Manager"/> to
265           determine the <ref table="Physical_Switch"/> that terminates
266           the tunnel represented by a <ref table="Physical_Locator"/>.
267         </p>
268       </column>
269     </group>
270
271     <group title="Identification">
272       <column name="name">
273         Symbolic name for the switch, such as its hostname.
274       </column>
275       
276       <column name="description">
277         An extended description for the switch, such as its switch login
278         banner.
279       </column>
280     </group>
281     <group title="Error Notification">
282       <p>
283         An entry in this column indicates to the NVC that this switch
284         has encountered a fault. The switch must clear this column
285         when the fault has been cleared.
286       </p>
287
288       <column name="switch_fault_status" key="mac_table_exhaustion">
289         Indicates that the switch has been unable to process MAC
290         entries requested by the NVC due to lack of table resources.
291       </column>
292
293       <column name="switch_fault_status" key="tunnel_exhaustion">
294         Indicates that the switch has been unable to create tunnels
295         requested by the NVC due to lack of resources.
296       </column>
297
298       <column name="switch_fault_status" key="unspecified_fault">
299         Indicates that an error has occurred in the switch but that no
300         more specific information is available.
301       </column>
302
303     </group>
304   </table>
305
306   <table name="Tunnel" title="A tunnel created by a physical switch.">
307     A tunnel created by a <ref table="Physical_Switch"/>.
308
309     <column name="local">
310       Tunnel end-point local to the physical switch.
311     </column>
312
313     <column name="remote">
314       Tunnel end-point remote to the physical switch.
315     </column>
316
317     <group title="Bidirectional Forwarding Detection (BFD)">
318       <p>
319         BFD, defined in RFC 5880, allows point to point detection of
320         connectivity failures by occasional transmission of BFD control
321         messages. VTEPs are expected to implement BFD.
322       </p>
323
324       <p>
325         BFD operates by regularly transmitting BFD control messages at a
326         rate negotiated independently in each direction.  Each endpoint
327         specifies the rate at which it expects to receive control messages,
328         and the rate at which it's willing to transmit them.  An endpoint
329         which fails to receive BFD control messages for a period of three
330         times the expected reception rate will signal a connectivity
331         fault.  In the case of a unidirectional connectivity issue, the
332         system not receiving BFD control messages will signal the problem
333         to its peer in the messages it transmits.
334       </p>
335
336       <p>
337         A hardware VTEP is expected to use BFD to determine reachability of
338         devices at the end of the tunnels with which it exchanges data. This
339         can enable the VTEP to choose a functioning service node among a set of
340         service nodes providing high availability. It also enables the NVC to
341         report the health status of tunnels.
342       </p>
343
344       <p>
345         In most cases the BFD peer of a hardware VTEP will be an Open vSwitch
346         instance. The Open vSwitch implementation of BFD aims to comply
347         faithfully with the requirements put forth in RFC 5880.  Open vSwitch
348         does not implement the optional Authentication or ``Echo Mode''
349         features.
350       </p>
351
352       <group title="BFD Local Configuration">
353         <p>
354           The HSC writes the key-value pairs in the
355           <ref column="bfd_config_local"/> column to specifiy the local
356           configurations to be used for BFD sessions on this tunnel.
357         </p>
358
359         <column name="bfd_config_local" key="bfd_dst_mac">
360           Set to an Ethernet address in the form
361           <var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>
362           to set the MAC expected as destination for received BFD packets.
363           The default is <code>00:23:20:00:00:01</code>.
364         </column>
365
366         <column name="bfd_config_local" key="bfd_dst_ip">
367           Set to an IPv4 address to set the IP address that is expected as destination
368           for received BFD packets.  The default is <code>169.254.1.0</code>.
369         </column>
370
371       </group>
372
373       <group title="BFD Remote Configuration">
374         <p>
375           The <ref column="bfd_config_remote"/> column is the remote
376           counterpart of the <ref column="bfd_config_local"/> column.
377           The NVC writes the key-value pairs in this column.
378         </p>
379
380         <column name="bfd_config_remote" key="bfd_dst_mac">
381           Set to an Ethernet address in the form
382           <var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>
383           to set the destination MAC to be used for transmitted BFD packets.
384           The default is <code>00:23:20:00:00:01</code>.
385         </column>
386
387         <column name="bfd_config_remote" key="bfd_dst_ip">
388           Set to an IPv4 address to set the IP address used as destination
389           for transmitted BFD packets.  The default is <code>169.254.1.1</code>.
390         </column>
391
392       </group>
393
394       <group title="BFD Parameters">
395         <p>
396           The NVC sets up key-value pairs in the <ref column="bfd_params"/>
397           column to enable and configure BFD.
398         </p>
399
400         <column name="bfd_params" key="enable" type='{"type": "boolean"}'>
401           True to enable BFD on this tunnel.
402           The default is False.
403         </column>
404
405         <column name="bfd_params" key="min_rx"
406                 type='{"type": "integer", "minInteger": 1}'>
407           The shortest interval, in milliseconds, at which this BFD session
408           offers to receive BFD control messages.  The remote endpoint may
409           choose to send messages at a slower rate.  Defaults to
410           <code>1000</code>.
411         </column>
412
413         <column name="bfd_params" key="min_tx"
414                 type='{"type": "integer", "minInteger": 1}'>
415           The shortest interval, in milliseconds, at which this BFD session is
416           willing to transmit BFD control messages.  Messages will actually be
417           transmitted at a slower rate if the remote endpoint is not willing to
418           receive as quickly as specified.  Defaults to <code>100</code>.
419         </column>
420
421         <column name="bfd_params" key="decay_min_rx" type='{"type": "integer"}'>
422           An alternate receive interval, in milliseconds, that must be greater
423           than or equal to <ref column="bfd" key="min_rx"/>.  The
424           implementation switches from <ref column="bfd" key="min_rx"/> to <ref
425           column="bfd" key="decay_min_rx"/> when there is no obvious incoming
426           data traffic at the interface, to reduce the CPU and bandwidth cost
427           of monitoring an idle interface.  This feature may be disabled by
428           setting a value of 0.  This feature is reset whenever <ref
429           column="bfd" key="decay_min_rx"/> or <ref column="bfd" key="min_rx"/>
430           changes.
431         </column>
432
433         <column name="bfd_params" key="forwarding_if_rx" type='{"type": "boolean"}'>
434           True to consider the interface capable of packet I/O as long as it
435           continues to receive any packets (not just BFD packets).  This
436           prevents link congestion that causes consecutive BFD control packets
437           to be lost from marking the interface down.
438         </column>
439
440         <column name="bfd_params" key="cpath_down" type='{"type": "boolean"}'>
441           Set to true to notify the remote endpoint that traffic should not be
442           forwarded to this system for some reason other than a connectivty
443           failure on the interface being monitored.  The typical underlying
444           reason is ``concatenated path down,'' that is, that connectivity
445           beyond the local system is down.  Defaults to false.
446         </column>
447
448         <column name="bfd_params" key="check_tnl_key" type='{"type": "boolean"}'>
449           Set to true to make BFD accept only control messages with a tunnel
450           key of zero.  By default, BFD accepts control messages with any
451           tunnel key.
452         </column>
453
454       </group>
455
456      <group title="BFD Status">
457       <p>
458         The VTEP sets key-value pairs in the <ref column="bfd_status"/>
459         column to report the status of BFD on this tunnel.  When BFD is
460         not enabled, with <ref column="bfd_params" key="enable"/>, the
461         HSC clears all key-value pairs from <ref column="bfd_status"/>.
462       </p>
463
464       <column name="bfd_status" key="enabled"
465         type='{"type": "boolean"}'>
466         Set to true if the BFD session has been successfully
467         enabled. Set to false if the VTEP cannot support BFD or has
468         insufficient resources to enable BFD on this tunnel. The NVC
469         will disable the BFD monitoring on the other side of the tunnel
470         once this value is set to false.
471       </column>
472
473       <column name="bfd_status" key="state"
474         type='{"type": "string",
475               "enum": ["set", ["admin_down", "down", "init", "up"]]}'>
476         Reports the state of the BFD session.  The BFD session is fully
477         healthy and negotiated if <code>UP</code>.
478       </column>
479
480       <column name="bfd_status" key="forwarding" type='{"type": "boolean"}'>
481         Reports whether the BFD session believes this tunnel
482         may be used to forward traffic.  Typically this means the local session
483         is signaling <code>UP</code>, and the remote system isn't signaling a
484         problem such as concatenated path down.
485       </column>
486
487       <column name="bfd_status" key="diagnostic">
488         In case of a problem, set to an error message that reports what the
489         local BFD session thinks is wrong.  The error messages are defined
490         in section 4.1 of [RFC 5880].
491       </column>
492
493       <column name="bfd_status" key="remote_state"
494         type='{"type": "string",
495               "enum": ["set", ["admin_down", "down", "init", "up"]]}'>
496         Reports the state of the remote endpoint's BFD session.
497       </column>
498
499       <column name="bfd_status" key="remote_diagnostic">
500         In case of a problem, set to an error message that reports what the
501         remote endpoint's BFD session thinks is wrong.  The error messages
502         are defined in section 4.1 of [RFC 5880].
503       </column>
504
505       <column name="bfd_status" key="info">
506         A short message providing further information about the BFD status
507         (possibly including reasons why BFD could not be enabled).
508       </column>
509       </group>
510     </group>
511   </table>
512
513   <table name="Physical_Port" title="A port within a physical switch.">
514     A port within a <ref table="Physical_Switch"/>.
515
516     <column name="vlan_bindings">
517       Identifies how VLANs on the physical port are bound to logical switches.
518       If, for example, the map contains a (VLAN, logical switch) pair, a packet
519       that arrives on the port in the VLAN is considered to belong to the
520       paired logical switch.
521     </column>
522
523     <column name="vlan_stats">
524       Statistics for VLANs bound to logical switches on the physical port.  An
525       implementation that fully supports such statistics would populate this
526       column with a mapping for every VLAN that is bound in <ref
527       column="vlan_bindings"/>.  An implementation that does not support such
528       statistics or only partially supports them would not populate this column
529       or partially populate it, respectively.
530     </column>
531
532     <group title="Identification">
533       <column name="name">
534         Symbolic name for the port.  The name ought to be unique within a given
535         <ref table="Physical_Switch"/>, but the database is not capable of
536         enforcing this.
537       </column>
538       
539       <column name="description">
540         An extended description for the port.
541       </column>
542     </group>
543     <group title="Error Notification">
544       <p>
545         An entry in this column indicates to the NVC that the physical port has
546         encountered a fault. The switch must clear this column when the errror
547         has been cleared.
548       </p>
549       <column name="port_fault_status" key="invalid_vlan_map">
550         <p>
551           Indicates that a VLAN-to-logical-switch mapping requested by
552           the controller could not be instantiated by the switch
553           because of a conflict with local configuration.
554         </p>
555       </column>
556       <column name="port_fault_status" key="unspecified_fault">
557         <p>
558           Indicates that an error has occurred on the port but that no
559           more specific information is available.
560         </p>
561       </column>
562     </group>
563
564   </table>
565
566   <table name="Logical_Binding_Stats" title="Statistics for a VLAN on a physical port bound to a logical network.">
567     Reports statistics for the <ref table="Logical_Switch"/> with which a VLAN
568     on a <ref table="Physical_Port"/> is associated.
569
570     <group title="Statistics">
571       These statistics count only packets to which the binding applies.
572
573       <column name="packets_from_local">
574         Number of packets sent by the <ref table="Physical_Switch"/>.
575       </column>
576
577       <column name="bytes_from_local">
578         Number of bytes in packets sent by the <ref table="Physical_Switch"/>.
579       </column>
580
581       <column name="packets_to_local">
582         Number of packets received by the <ref table="Physical_Switch"/>.
583       </column>
584
585       <column name="bytes_to_local">
586         Number of bytes in packets received by the <ref
587         table="Physical_Switch"/>.
588       </column>
589     </group>
590   </table>
591
592   <table name="Logical_Switch" title="A layer-2 domain.">
593     A logical Ethernet switch, whose implementation may span physical and
594     virtual media, possibly crossing L3 domains via tunnels; a logical layer-2
595     domain; an Ethernet broadcast domain.
596
597
598
599     <group title="Per Logical-Switch Tunnel Key">
600       <p>
601         Tunnel protocols tend to have a field that allows the tunnel
602         to be partitioned into sub-tunnels: VXLAN has a VNI, GRE and
603         STT have a key, CAPWAP has a WSI, and so on.  We call these
604         generically ``tunnel keys.''  Given that one needs to use a
605         tunnel key at all, there are at least two reasonable ways to
606         assign their values:
607       </p>
608
609       <ul>
610         <li>
611           <p>
612             Per <ref table="Logical_Switch"/>+<ref table="Physical_Locator"/>
613             pair.  That is, each logical switch may be assigned a different
614             tunnel key on every <ref table="Physical_Locator"/>.  This model is
615             especially flexible.
616           </p>
617
618           <p>
619             In this model, <ref table="Physical_Locator"/> carries the tunnel
620             key.  Therefore, one <ref table="Physical_Locator"/> record will
621             exist for each logical switch carried at a given IP destination.
622           </p>
623         </li>
624
625         <li>
626           <p>
627             Per <ref table="Logical_Switch"/>.  That is, every tunnel
628             associated with a particular logical switch carries the same tunnel
629             key, regardless of the <ref table="Physical_Locator"/> to which the
630             tunnel is addressed.  This model may ease switch implementation
631             because it imposes fewer requirements on the hardware datapath.
632           </p>
633
634           <p>
635             In this model, <ref table="Logical_Switch"/> carries the tunnel
636             key.  Therefore, one <ref table="Physical_Locator"/> record will
637             exist for each IP destination.
638           </p>
639         </li>
640       </ul>
641
642       <column name="tunnel_key">
643         <p>
644           This column is used only in the tunnel key per <ref
645           table="Logical_Switch"/> model (see above), because only in that
646           model is there a tunnel key associated with a logical switch.
647         </p>
648
649         <p>
650           For <code>vxlan_over_ipv4</code> encapsulation, this column
651           is the VXLAN VNI that identifies a logical switch.  It must
652           be in the range 0 to 16,777,215.
653         </p>
654       </column>
655     </group>
656
657     <group title="Identification">
658       <column name="name">
659         Symbolic name for the logical switch.
660       </column>
661       
662       <column name="description">
663         An extended description for the logical switch, such as its switch
664         login banner.
665       </column>
666     </group>
667   </table>
668
669   <table name="Ucast_Macs_Local" title="Unicast MACs (local)">
670     <p>
671       Mapping of unicast MAC addresses to tunnels (physical
672       locators). This table is written by the HSC, so it contains the
673       MAC addresses that have been learned on physical ports by a
674       VTEP. 
675     </p>
676
677     <column name="MAC">
678       A MAC address that has been learned by the VTEP.
679     </column>
680
681     <column name="logical_switch">
682       The Logical switch to which this mapping applies.
683     </column>
684
685     <column name="locator">
686       The physical locator to be used to reach this MAC address. In
687       this table, the physical locator will be one of the tunnel IP
688       addresses of the appropriate VTEP.
689     </column>
690
691     <column name="ipaddr">
692       The IP address to which this MAC corresponds. Optional field for
693       the purpose of ARP supression.
694     </column>
695
696   </table>
697
698  <table name="Ucast_Macs_Remote" title="Unicast MACs (remote)">
699     <p>
700       Mapping of unicast MAC addresses to tunnels (physical
701       locators). This table is written by the NVC, so it contains the
702       MAC addresses that the NVC has learned. These include VM MAC
703       addresses, in which case the physical locators will be
704       hypervisor IP addresses. The NVC will also report MACs that it
705       has learned from other HSCs in the network, in which case the
706       physical locators will be tunnel IP addresses of the
707       corresponding VTEPs.
708     </p>
709
710     <column name="MAC">
711       A MAC address that has been learned by the NVC.
712     </column>
713
714     <column name="logical_switch">
715       The Logical switch to which this mapping applies.
716     </column>
717
718     <column name="locator">
719       The physical locator to be used to reach this MAC address. In
720       this table, the physical locator will be either a hypervisor IP
721       address or a tunnel IP addresses of another VTEP.
722     </column>
723
724     <column name="ipaddr">
725       The IP address to which this MAC corresponds. Optional field for
726       the purpose of ARP supression.
727     </column>
728
729   </table>
730
731   <table name="Mcast_Macs_Local" title="Multicast MACs (local)">
732     <p>
733       Mapping of multicast MAC addresses to tunnels (physical
734       locators). This table is written by the HSC, so it contains the
735       MAC addresses that have been learned on physical ports by a
736       VTEP. These may be learned by IGMP snooping, for example. This
737       table also specifies how to handle unknown unicast and broadcast packets.
738     </p>
739
740     <column name="MAC">
741       <p>
742         A MAC address that has been learned by the VTEP. 
743       </p>
744       <p>
745         The keyword <code>unknown-dst</code> is used as a special
746         ``Ethernet address'' that indicates the locations to which
747         packets in a logical switch whose destination addresses do not
748         otherwise appear in <ref table="Ucast_Macs_Local"/> (for
749         unicast addresses) or <ref table="Mcast_Macs_Local"/> (for
750         multicast addresses) should be sent.
751       </p>
752     </column>
753
754     <column name="logical_switch">
755       The Logical switch to which this mapping applies.
756     </column>
757
758     <column name="locator_set">
759       The physical locator set to be used to reach this MAC address. In
760       this table, the physical locator set will be contain one or more tunnel IP
761       addresses of the appropriate VTEP(s).
762     </column>
763
764   </table>
765
766   <table name="Mcast_Macs_Remote" title="Multicast MACs (remote)">
767     <p>
768       Mapping of multicast MAC addresses to tunnels (physical
769       locators). This table is written by the NVC, so it contains the
770       MAC addresses that the NVC has learned. This
771       table also specifies how to handle unknown unicast and broadcast
772       packets.
773     </p>
774     <p>
775       Multicast packet replication may be handled by a service node,
776       in which case the physical locators will be IP addresses of
777       service nodes. If the VTEP supports replication onto multiple
778       tunnels, then this may be used to replicate directly onto
779       VTEP-hyperisor tunnels.
780     </p>
781
782     <column name="MAC">
783       <p>
784         A MAC address that has been learned by the NVC.
785       </p>
786       <p>
787         The keyword <code>unknown-dst</code> is used as a special
788         ``Ethernet address'' that indicates the locations to which
789         packets in a logical switch whose destination addresses do not
790         otherwise appear in <ref table="Ucast_Macs_Remote"/> (for
791         unicast addresses) or <ref table="Mcast_Macs_Remote"/> (for
792         multicast addresses) should be sent.
793       </p>
794     </column>
795
796     <column name="logical_switch">
797       The Logical switch to which this mapping applies.
798     </column>
799
800     <column name="locator_set">
801       The physical locator set to be used to reach this MAC address. In
802       this table, the physical locator set will be either a service node IP
803       address or a set of tunnel IP addresses of hypervisors (and
804       potentially other VTEPs).
805     </column>
806
807     <column name="ipaddr">
808       The IP address to which this MAC corresponds. Optional field for
809       the purpose of ARP supression.
810     </column>
811
812   </table>
813
814   <table name="Logical_Router" title="A logical L3 router.">
815     <p>
816       A logical router, or VRF. A logical router may be connected to one or more
817       logical switches. Subnet addresses and interface addresses may be configured on the 
818       interfaces.
819     </p>
820     
821     <column name="switch_binding">
822       Maps from an IPv4 or IPv6 address prefix in CIDR notation to a
823       logical switch. Multiple prefixes may map to the same switch. By
824       writing a 32-bit (or 128-bit for v6) address with a /N prefix
825       length, both the router's interface address and the subnet
826       prefix can be configured. For example, 192.68.1.1/24 creates a
827       /24 subnet for the logical switch attached to the interface and
828       assigns the address 192.68.1.1 to the router interface.
829     </column>
830
831     <column name="static_routes">
832       One or more static routes, mapping IP prefixes to next hop IP addresses.
833     </column>
834
835     <group title="Identification">
836       <column name="name">
837         Symbolic name for the logical router.
838       </column>
839       
840       <column name="description">
841         An extended description for the logical router.
842       </column>
843     </group>
844   </table>
845
846   <table name="Arp_Sources_Local" title="ARP source addresses for logical routers">
847     <p>
848       MAC address to be used when a VTEP issues ARP requests on behalf
849       of a logical router.
850     </p>
851
852     <p>
853       A distributed logical router is implemented by a set of VTEPs
854       (both hardware VTEPs and vswitches). In order for a given VTEP
855       to populate the local ARP cache for a logical router, it issues
856       ARP requests with a source MAC address that is unique to the VTEP. A
857       single per-VTEP MAC can be re-used across all logical
858       networks. This table contains the MACs that are used by the
859       VTEPs of a given HSC. The table provides the mapping from MAC to
860       physical locator for each VTEP so that replies to the ARP
861       requests can be sent back to the correct VTEP using the
862       appropriate physical locator.
863     </p>
864
865     <column name="src_mac">
866       The source MAC to be used by a given VTEP.
867     </column>
868
869     <column name="locator">
870       The <ref table="Physical_Locator"/> to use for replies to ARP
871       requests from this MAC address.
872     </column>
873   </table>
874
875   <table name="Arp_Sources_Remote" title="ARP source addresses for logical routers">
876     <p>
877       MAC address to be used when a remote VTEP issues ARP requests on behalf
878       of a logical router.
879     </p>
880
881     <p>
882       This table is the remote counterpart of <ref
883       table="Arp_sources_local"/>. The NVC writes this table to notify
884       the HSC of the MACs that will be used by remote VTEPs when they
885       issue ARP requests on behalf of a distributed logical router.
886     </p>
887
888     <column name="src_mac">
889       The source MAC to be used by a given VTEP.
890     </column>
891
892     <column name="locator">
893       The <ref table="Physical_Locator"/> to use for replies to ARP
894       requests from this MAC address.
895     </column>
896   </table>
897
898   <table name="Physical_Locator_Set">
899     <p>
900       A set of one or more <ref table="Physical_Locator"/>s.
901     </p>
902
903     <p>
904       This table exists only because OVSDB does not have a way to
905       express the type ``map from string to one or more <ref
906       table="Physical_Locator"/> records.''
907     </p>
908
909     <column name="locators"/>    
910   </table>
911
912   <table name="Physical_Locator">
913     <p>
914       Identifies an endpoint to which logical switch traffic may be
915       encapsulated and forwarded.
916     </p>
917
918     <p>
919       For the <code>vxlan_over_ipv4</code> encapsulation, the only
920       encapsulation defined so far, all endpoints associated with a given <ref
921       table="Logical_Switch"/> must use a common tunnel key, which is carried
922       in the <ref table="Logical_Switch" column="tunnel_key"/> column of <ref
923       table="Logical_Switch"/>.
924     </p>
925
926     <p>
927       For some encapsulations yet to be defined, we expect <ref
928       table="Physical_Locator"/> to identify both an endpoint and a tunnel key.
929       When the first such encapsulation is defined, we expect to add a
930       ``tunnel_key'' column to <ref table="Physical_Locator"/> to allow the
931       tunnel key to be defined.
932     </p>
933
934     <p>
935       See the ``Per Logical-Switch Tunnel Key'' section in the <ref
936       table="Logical_Switch"/> table for further discussion of the model.
937     </p>
938
939     <column name="encapsulation_type">
940       The type of tunneling encapsulation.
941     </column>
942
943     <column name="dst_ip">
944       <p>
945         For <code>vxlan_over_ipv4</code> encapsulation, the IPv4 address of the
946         VXLAN tunnel endpoint.
947       </p>
948
949       <p>
950         We expect that this column could be used for IPv4 or IPv6 addresses in
951         encapsulations to be introduced later.
952       </p>
953     </column>
954
955   </table>
956
957 </database>