ovn-nb: Change how router ports work.
authorBen Pfaff <blp@nicira.com>
Wed, 7 Oct 2015 23:01:37 +0000 (16:01 -0700)
committerBen Pfaff <blp@nicira.com>
Sat, 17 Oct 2015 06:52:41 +0000 (23:52 -0700)
This is for two reasons.  First, a router port is not really much of a
special case from a logical switch's point of view.  For switching
purposes, it works exactly the same as any other port.  Having a special
column for it just adds artificial special cases.

Second, the previous form of router ports specified that all of them use
the logical port name "ROUTER".  This seemed to make sense at the time but
now it is just adding more special cases.  Instead just giving them names
like any other port makes life easier.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Justin Pettit <jpettit@nicira.com>
ovn/TODO
ovn/ovn-nb.ovsschema
ovn/ovn-nb.xml

index 9f1056a..3119169 100644 (file)
--- a/ovn/TODO
+++ b/ovn/TODO
@@ -12,20 +12,6 @@ one router to another, this doesn't seem to matter (just put more than
 one connection between them), but for connections between a router and
 a switch it might matter because a switch has only one router port.
 
-*** Logical router port names in ACLs
-
-Currently the ACL table documents that the logical router port is
-always named "ROUTER".  This can't work directly using logical patch
-ports to connect a logical switch to its logical router, because every
-row in the Logical_Port table must have a unique name.  This probably
-means that we should change the convention for the ACL table so that
-the logical router port name is unique; for example, we could change
-the Logical_Router_Port table to require the 'name' column to be
-unique, and then use that name in the ACL table.
-
-Another alternative would be to add a way to have aliases for logical
-ports, but I'm not sure that's a rathole we really want to go down.
-
 ** OVN_SB schema
 
 *** Allow output to ingress port
index 50930b7..9d254e8 100644 (file)
@@ -1,7 +1,7 @@
 {
     "name": "OVN_Northbound",
-    "version": "1.0.0",
-    "cksum": "1432579799 4805",
+    "version": "2.0.0",
+    "cksum": "1378979036 4524",
     "tables": {
         "Logical_Switch": {
             "columns": {
                                           "refType": "strong"},
                                   "min": 0,
                                   "max": "unlimited"}},
-                "router_port": {"type": {"key": {"type": "uuid",
-                                                 "refTable": "Logical_Router_Port",
-                                                 "refType": "weak"},
-                                         "min": 0, "max": 1}},
                 "external_ids": {
                     "type": {"key": "string", "value": "string",
                              "min": 0, "max": "unlimited"}}},
index c119a27..9a7435b 100644 (file)
       </p>
     </column>
 
-    <column name="router_port">
-      <p>
-        The router port to which this logical switch is connected, or empty if
-        this logical switch is not connected to any router.  A switch may be
-        connected to at most one logical router, but this is not a significant
-        restriction because logical routers may be connected into arbitrary
-        topologies.
-      </p>
-
-      <p>
-        It is an error for multiple logical switches to refer to the same
-        router port.
-      </p>
-    </column>
-
     <column name="acls">
       Access control rules that apply to packets within the logical switch.
     </column>
             A VM (or VIF) interface.
           </dd>
 
+          <dt><code>router</code></dt>
+          <dd>
+            A connection to a logical router.
+          </dd>
+
           <dt><code>localnet</code></dt>
           <dd>
             A connection to a locally accessible network from each
         individually below.
       </column>
 
+      <group title="Options for router ports">
+        <p>
+          These options apply when <ref column="type"/> is <code>router</code>.
+        </p>
+
+        <p>
+          A given logical switch may have at most one logical port of type
+          <code>router</code>.  (This is not a significant restriction because
+          logical routers may be connected into arbitrary topologies.)
+        </p>
+
+        <column name="options" key="router-port" type='{"type": "uuid"}'>
+          Required.  The UUID of the <ref table="Logical_Router_Port"/> to
+          which this logical switch port is connected.
+        </column>
+      </group>
+
       <group title="Options for localnet ports">
         <p>
           These options apply when <ref column="type"/> is
         restrictive policy, it is important to remember to allow flows
         such as ARP and IPv6 neighbor discovery packets.
       </p>
-
-      <p>
-        In logical switches connected to logical routers, the special
-        port name <code>ROUTER</code> refers to the logical router port.
-      </p>
     </column>
 
     <column name="action">
       <ul>
         <li>
           To attach a logical switch to a logical router.  A logical router
-          port of this type is referenced by exactly the <ref
-          column="router_port" table="Logical_Switch"/> column in exactly one
-          <ref table="Logical_Switch"/> row.  The <ref column="peer"/> column
-          is empty.
+          port of this type is referenced by exactly one <ref
+          table="Logical_Port"/> of type <code>router</code>.  The <ref
+          column="peer"/> column is empty.
         </li>
 
         <li>