vtep: Initial checkin of vtep schema.
[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     <group title="Network Status">
248       <column name="management_ips">
249         IPv4 or IPv6 addresses at which the switch may be contacted
250         for management purposes.
251       </column>
252
253       <column name="tunnel_ips">
254         <p>
255           IPv4 or IPv6 addresses on which the switch may originate or
256           terminate tunnels.
257         </p>
258
259         <p>
260           This column is intended to allow a <ref table="Manager"/> to
261           determine the <ref table="Physical_Switch"/> that terminates
262           the tunnel represented by a <ref table="Physical_Locator"/>.
263         </p>
264       </column>
265     </group>
266
267     <group title="Identification">
268       <column name="name">
269         Symbolic name for the switch, such as its hostname.
270       </column>
271       
272       <column name="description">
273         An extended description for the switch, such as its switch login
274         banner.
275       </column>
276     </group>
277   </table>
278
279   <table name="Physical_Port" title="A port within a physical switch.">
280     A port within a <ref table="Physical_Switch"/>.
281
282     <column name="vlan_bindings">
283       Identifies how VLANs on the physical port are bound to logical switches.
284       If, for example, the map contains a (VLAN, logical switch) pair, a packet
285       that arrives on the port in the VLAN is considered to belong to the
286       paired logical switch.
287     </column>
288
289     <column name="vlan_stats">
290       Statistics for VLANs bound to logical switches on the physical port.  An
291       implementation that fully supports such statistics would populate this
292       column with a mapping for every VLAN that is bound in <ref
293       column="vlan_bindings"/>.  An implementation that does not support such
294       statistics or only partially supports them would not populate this column
295       or partially populate it, respectively.
296     </column>
297
298     <group title="Identification">
299       <column name="name">
300         Symbolic name for the port.  The name ought to be unique within a given
301         <ref table="Physical_Switch"/>, but the database is not capable of
302         enforcing this.
303       </column>
304       
305       <column name="description">
306         An extended description for the port.
307       </column>
308     </group>
309   </table>
310
311   <table name="Logical_Binding_Stats" title="Statistics for a VLAN on a physical port bound to a logical network.">
312     Reports statistics for the <ref table="Logical_Switch"/> with which a VLAN
313     on a <ref table="Physical_Port"/> is associated.
314
315     <group title="Statistics">
316       These statistics count only packets to which the binding applies.
317
318       <column name="packets_from_local">
319         Number of packets sent by the <ref table="Physical_Switch"/>.
320       </column>
321
322       <column name="bytes_from_local">
323         Number of bytes in packets sent by the <ref table="Physical_Switch"/>.
324       </column>
325
326       <column name="packets_to_local">
327         Number of packets received by the <ref table="Physical_Switch"/>.
328       </column>
329
330       <column name="bytes_to_local">
331         Number of bytes in packets received by the <ref
332         table="Physical_Switch"/>.
333       </column>
334     </group>
335   </table>
336
337   <table name="Logical_Switch" title="A layer-2 domain.">
338     A logical Ethernet switch, whose implementation may span physical and
339     virtual media, possibly crossing L3 domains via tunnels; a logical layer-2
340     domain; an Ethernet broadcast domain.
341
342
343
344     <group title="Per Logical-Switch Tunnel Key">
345       <p>
346         Tunnel protocols tend to have a field that allows the tunnel
347         to be partitioned into sub-tunnels: VXLAN has a VNI, GRE and
348         STT have a key, CAPWAP has a WSI, and so on.  We call these
349         generically ``tunnel keys.''  Given that one needs to use a
350         tunnel key at all, there are at least two reasonable ways to
351         assign their values:
352       </p>
353
354       <ul>
355         <li>
356           <p>
357             Per <ref table="Logical_Switch"/>+<ref table="Physical_Locator"/>
358             pair.  That is, each logical switch may be assigned a different
359             tunnel key on every <ref table="Physical_Locator"/>.  This model is
360             especially flexible.
361           </p>
362
363           <p>
364             In this model, <ref table="Physical_Locator"/> carries the tunnel
365             key.  Therefore, one <ref table="Physical_Locator"/> record will
366             exist for each logical switch carried at a given IP destination.
367           </p>
368         </li>
369
370         <li>
371           <p>
372             Per <ref table="Logical_Switch"/>.  That is, every tunnel
373             associated with a particular logical switch carries the same tunnel
374             key, regardless of the <ref table="Physical_Locator"/> to which the
375             tunnel is addressed.  This model may ease switch implementation
376             because it imposes fewer requirements on the hardware datapath.
377           </p>
378
379           <p>
380             In this model, <ref table="Logical_Switch"/> carries the tunnel
381             key.  Therefore, one <ref table="Physical_Locator"/> record will
382             exist for each IP destination.
383           </p>
384         </li>
385       </ul>
386
387       <column name="tunnel_key">
388         <p>
389           This column is used only in the tunnel key per <ref
390           table="Logical_Switch"/> model (see above), because only in that
391           model is there a tunnel key associated with a logical switch.
392         </p>
393
394         <p>
395           For <code>vxlan_over_ipv4</code> encapsulation, this column
396           is the VXLAN VNI that identifies a logical switch.  It must
397           be in the range 0 to 16,777,215.
398         </p>
399       </column>
400     </group>
401
402     <group title="Identification">
403       <column name="name">
404         Symbolic name for the logical switch.
405       </column>
406       
407       <column name="description">
408         An extended description for the logical switch, such as its switch
409         login banner.
410       </column>
411     </group>
412   </table>
413
414   <table name="Ucast_Macs_Local" title="Unicast MACs (local)">
415     <p>
416       Mapping of unicast MAC addresses to tunnels (physical
417       locators). This table is written by the HSC, so it contains the
418       MAC addresses that have been learned on physical ports by a
419       VTEP. 
420     </p>
421
422     <column name="MAC">
423       A MAC address that has been learned by the VTEP.
424     </column>
425
426     <column name="logical_switch">
427       The Logical switch to which this mapping applies.
428     </column>
429
430     <column name="locator">
431       The physical locator to be used to reach this MAC address. In
432       this table, the physical locator will be one of the tunnel IP
433       addresses of the appropriate VTEP.
434     </column>
435
436     <column name="ipaddr">
437       The IP address to which this MAC corresponds. Optional field for
438       the purpose of ARP supression.
439     </column>
440
441   </table>
442
443  <table name="Ucast_Macs_Remote" title="Unicast MACs (remote)">
444     <p>
445       Mapping of unicast MAC addresses to tunnels (physical
446       locators). This table is written by the NVC, so it contains the
447       MAC addresses that the NVC has learned. These include VM MAC
448       addresses, in which case the physical locators will be
449       hypervisor IP addresses. The NVC will also report MACs that it
450       has learned from other HSCs in the network, in which case the
451       physical locators will be tunnel IP addresses of the
452       corresponding VTEPs.
453     </p>
454
455     <column name="MAC">
456       A MAC address that has been learned by the NSC.
457     </column>
458
459     <column name="logical_switch">
460       The Logical switch to which this mapping applies.
461     </column>
462
463     <column name="locator">
464       The physical locator to be used to reach this MAC address. In
465       this table, the physical locator will be either a hypervisor IP
466       address or a tunnel IP addresses of another VTEP.
467     </column>
468
469     <column name="ipaddr">
470       The IP address to which this MAC corresponds. Optional field for
471       the purpose of ARP supression.
472     </column>
473
474   </table>
475
476   <table name="Mcast_Macs_Local" title="Multicast MACs (local)">
477     <p>
478       Mapping of multicast MAC addresses to tunnels (physical
479       locators). This table is written by the HSC, so it contains the
480       MAC addresses that have been learned on physical ports by a
481       VTEP. These may be learned by IGMP snooping, for example. This
482       table also specifies how to handle unknown unicast and broadcast packets.
483     </p>
484
485     <column name="MAC">
486       <p>
487         A MAC address that has been learned by the VTEP. 
488       </p>
489       <p>
490         The keyword <code>unknown-dst</code> is used as a special
491         ``Ethernet address'' that indicates the locations to which
492         packets in a logical switch whose destination addresses do not
493         otherwise appear in <ref table="Ucast_Macs_Local"/> (for
494         unicast addresses) or <ref table="Mcast_Macs_Local"/> (for
495         multicast addresses) should be sent.
496       </p>
497     </column>
498
499     <column name="logical_switch">
500       The Logical switch to which this mapping applies.
501     </column>
502
503     <column name="locator_set">
504       The physical locator set to be used to reach this MAC address. In
505       this table, the physical locator set will be contain one or more tunnel IP
506       addresses of the appropriate VTEP(s).
507     </column>
508
509   </table>
510
511   <table name="Mcast_Macs_Remote" title="Multicast MACs (remote)">
512     <p>
513       Mapping of multicast MAC addresses to tunnels (physical
514       locators). This table is written by the NVC, so it contains the
515       MAC addresses that the NVC has learned. This
516       table also specifies how to handle unknown unicast and broadcast
517       packets.
518     </p>
519     <p>
520       Multicast packet replication may be handled by a service node,
521       in which case the physical locators will be IP addresses of
522       service nodes. If the VTEP supports replication onto multiple
523       tunnels, then this may be used to replicate directly onto
524       VTEP-hyperisor tunnels.
525     </p>
526
527     <column name="MAC">
528       <p>
529         A MAC address that has been learned by the NSC.
530       </p>
531       <p>
532         The keyword <code>unknown-dst</code> is used as a special
533         ``Ethernet address'' that indicates the locations to which
534         packets in a logical switch whose destination addresses do not
535         otherwise appear in <ref table="Ucast_Macs_Remote"/> (for
536         unicast addresses) or <ref table="Mcast_Macs_Remote"/> (for
537         multicast addresses) should be sent.
538       </p>
539     </column>
540
541     <column name="logical_switch">
542       The Logical switch to which this mapping applies.
543     </column>
544
545     <column name="locator_set">
546       The physical locator set to be used to reach this MAC address. In
547       this table, the physical locator set will be either a service node IP
548       address or a set of tunnel IP addresses of hypervisors (and
549       potentially other VTEPs).
550     </column>
551
552     <column name="ipaddr">
553       The IP address to which this MAC corresponds. Optional field for
554       the purpose of ARP supression.
555     </column>
556
557   </table>
558
559   <table name="Logical_Router" title="A logical L3 router.">
560     <p>
561       A logical router, or VRF. A logical router may be connected to one or more
562       logical switches. Subnet addresses and interface addresses may be configured on the 
563       interfaces.
564     </p>
565     
566     <column name="switch_binding">
567       Maps from an IPv4 or IPv6 address prefix in CIDR notation to a
568       logical switch. Multiple prefixes may map to the same switch. By
569       writing a 32-bit (or 128-bit for v6) address with a /N prefix
570       length, both the router's interface address and the subnet
571       prefix can be configured. For example, 192.68.1.1/24 creates a
572       /24 subnet for the logical switch attached to the interface and
573       assigns the address 192.68.1.1 to the router interface.
574     </column>
575
576     <column name="static_routes">
577       One or more static routes, mapping IP prefixes to next hop IP addresses.
578     </column>
579
580     <group title="Identification">
581       <column name="name">
582         Symbolic name for the logical router.
583       </column>
584       
585       <column name="description">
586         An extended description for the logical router.
587       </column>
588     </group>
589   </table>
590
591   <table name="Physical_Locator_Set">
592     <p>
593       A set of one or more <ref table="Physical_Locator"/>s.
594     </p>
595
596     <p>
597       This table exists only because OVSDB does not have a way to
598       express the type ``map from string to one or more <ref
599       table="Physical_Locator"/> records.''
600     </p>
601
602     <column name="locators"/>    
603   </table>
604
605   <table name="Physical_Locator">
606     <p>
607       Identifies an endpoint to which logical switch traffic may be
608       encapsulated and forwarded.
609     </p>
610
611     <p>
612       For the <code>vxlan_over_ipv4</code> encapsulation, the only
613       encapsulation defined so far, all endpoints associated with a given <ref
614       table="Logical_Switch"/> must use a common tunnel key, which is carried
615       in the <ref table="Logical_Switch" column="tunnel_key"/> column of <ref
616       table="Logical_Switch"/>.
617     </p>
618
619     <p>
620       For some encapsulations yet to be defined, we expect <ref
621       table="Physical_Locator"/> to identify both an endpoint and a tunnel key.
622       When the first such encapsulation is defined, we expect to add a
623       ``tunnel_key'' column to <ref table="Physical_Locator"/> to allow the
624       tunnel key to be defined.
625     </p>
626
627     <p>
628       See the ``Per Logical-Switch Tunnel Key'' section in the <ref
629       table="Logical_Switch"/> table for further discussion of the model.
630     </p>
631
632     <column name="encapsulation_type">
633       The type of tunneling encapsulation.
634     </column>
635
636     <column name="dst_ip">
637       <p>
638         For <code>vxlan_over_ipv4</code> encapsulation, the IPv4 address of the
639         VXLAN tunnel endpoint.
640       </p>
641
642       <p>
643         We expect that this column could be used for IPv4 or IPv6 addresses in
644         encapsulations to be introduced later.
645       </p>
646     </column>
647     <group title="Bidirectional Forwarding Detection (BFD)">
648       <p>
649         BFD, defined in RFC 5880, allows point to point detection of
650         connectivity failures by occasional transmission of BFD control
651         messages.
652       </p>
653       
654       <p>
655         BFD operates by regularly transmitting BFD control messages at a
656         rate negotiated independently in each direction.  Each endpoint
657         specifies the rate at which it expects to receive control messages,
658         and the rate at which it's willing to transmit them.  An endpoint
659         which fails to receive BFD control messages for a period of three
660         times the expected reception rate, will signal a connectivity
661         fault.  In the case of a unidirectional connectivity issue, the
662         system not receiving BFD control messages will signal the problem
663         to its peer in the messages is transmists.
664       </p>
665       
666       <column name="bfd" key="min_rx">
667         The minimum rate, in milliseconds, at which this BFD session is
668         willing to receive BFD control messages.  The actual rate may slower
669         if the remote endpoint isn't willing to transmit as quickly as
670         specified.  Defaults to <code>1000</code>.
671       </column>
672       
673       <column name="bfd" key="min_tx">
674         The minimum rate, in milliseconds, at which this BFD session is
675         willing to transmit BFD control messages.  The actual rate may be
676         slower if the remote endpoint isn't willing to receive as quickly as
677         specified.  Defaults to <code>100</code>.
678       </column>
679       
680       <column name="bfd" key="cpath_down">
681         Concatenated path down may be used when the local system should not
682         have traffic forwarded to it for some reason other than a connectivty
683         failure on the interface being monitored.  The local BFD session will
684         notify the remote session of the connectivity problem, at which time
685         the remote session may choose not to forward traffic.  Defaults to
686         <code>false</code>.
687       </column>
688       
689       <column name="bfd_status" key="state">
690         State of the BFD session.  One of <code>ADMIN_DOWN</code>,
691         <code>DOWN</code>, <code>INIT</code>, or <code>UP</code>.
692       </column>
693       
694       <column name="bfd_status" key="forwarding">
695         True if the BFD session believes this <ref table="Physical_Locator"/> may be
696         used to forward traffic.  Typically this means the local session is
697         up, and the remote system isn't signalling a problem such as
698         concatenated path down.
699       </column>
700       
701       <column name="bfd_status" key="diagnostic">
702         A short message indicating what the BFD session thinks is wrong in
703         case of a problem.
704       </column>
705       
706       <column name="bfd_status" key="remote state">
707         State of the remote endpoint's BFD session.
708       </column>
709       
710       <column name="bfd_status" key="remote diagnostic">
711         A short message indicating what the remote endpoint's BFD session
712         thinks is wrong in case of a problem.
713       </column>
714     </group>
715   </table>
716
717 </database>