This patch brings northd-ddlog up to speed with the same feature
added to the C version of northd.

Signed-off-by: Frode Nordahl <[email protected]>
---
 northd/ovn_northd.dl | 68 ++++++++++++++++++++++++++++++++++++++------
 1 file changed, 60 insertions(+), 8 deletions(-)

diff --git a/northd/ovn_northd.dl b/northd/ovn_northd.dl
index 9cf4c373b..45132cf98 100644
--- a/northd/ovn_northd.dl
+++ b/northd/ovn_northd.dl
@@ -105,7 +105,6 @@ sb::Out_Datapath_Binding(uuid, tunkey, load_balancers, 
external_ids) :-
      */
     var load_balancers = set_empty().
 
-
 /* Proxy table for Out_Datapath_Binding: contains all Datapath_Binding fields,
  * except tunnel id, which is allocated separately (see PortTunKeyAllocation). 
*/
 relation OutProxy_Port_Binding (
@@ -120,10 +119,11 @@ relation OutProxy_Port_Binding (
     tag: Option<integer>,
     mac: Set<string>,
     nat_addresses: Set<string>,
-    external_ids: Map<string,string>
+    external_ids: Map<string,string>,
+    plugged_by: Option<uuid>
 )
 
-/* Case 1: Create a Port_Binding per logical switch port that is not of type 
"router" */
+/* Case 1a: Create a Port_Binding per logical switch port that is not of type 
"router" */
 OutProxy_Port_Binding(._uuid              = lsp._uuid,
                       .logical_port       = lsp.name,
                       .__type             = lsp.__type,
@@ -135,7 +135,8 @@ OutProxy_Port_Binding(._uuid              = lsp._uuid,
                       .tag                = tag,
                       .mac                = lsp.addresses,
                       .nat_addresses      = set_empty(),
-                      .external_ids       = eids) :-
+                      .external_ids       = eids,
+                      .plugged_by         = None) :-
     sp in &SwitchPort(.lsp = lsp, .sw = sw),
     SwitchPortNewDynamicTag(lsp._uuid, opt_tag),
     var tag = match (opt_tag) {
@@ -160,6 +161,53 @@ OutProxy_Port_Binding(._uuid              = lsp._uuid,
         options
     }.
 
+/* Case 1b: Create a Port_Binding per logical switch port that is not of type 
"router" and has options "plug-type" and "requested-chassis" */
+OutProxy_Port_Binding(._uuid              = lsp._uuid,
+                      .logical_port       = lsp.name,
+                      .__type             = lsp.__type,
+                      .gateway_chassis    = set_empty(),
+                      .ha_chassis_group   = sp.hac_group_uuid,
+                      .options            = options,
+                      .datapath           = sw._uuid,
+                      .parent_port        = lsp.parent_name,
+                      .tag                = tag,
+                      .mac                = lsp.addresses,
+                      .nat_addresses      = set_empty(),
+                      .external_ids       = eids,
+                      .plugged_by         = plugged_by) :-
+    sp in &SwitchPort(.lsp = lsp, .sw = sw),
+    SwitchPortNewDynamicTag(lsp._uuid, opt_tag),
+    var tag = match (opt_tag) {
+        None -> lsp.tag,
+        Some{t} -> Some{t}
+    },
+    lsp.__type != "router",
+    var eids = {
+        var eids = lsp.external_ids;
+        match (lsp.external_ids.get("neutron:port_name")) {
+            None -> (),
+            Some{name} -> eids.insert("name", name)
+        };
+        eids
+    },
+    var options = {
+        var options = lsp.options;
+        match (sw.other_config.get("vlan-passthru")) {
+            Some{"true"} -> options.insert("vlan-passthru", "true"),
+            _ -> ()
+        };
+        options
+    },
+    var chassis_name = match (options.get("plug-type")) {
+            Some{_} -> match(options.get("requested-chassis")) {
+                Some{chassis_name} -> chassis_name,
+                None -> "",
+            },
+            None -> "",
+    },
+    chassis_name != "",
+    chassis_rec in sb::Chassis(.name = chassis_name),
+    var plugged_by = Some{chassis_rec._uuid}.
 
 /* Case 2: Create a Port_Binding per logical switch port of type "router" */
 OutProxy_Port_Binding(._uuid              = lsp._uuid,
@@ -173,7 +221,8 @@ OutProxy_Port_Binding(._uuid              = lsp._uuid,
                       .tag                = None,
                       .mac                = lsp.addresses,
                       .nat_addresses      = nat_addresses,
-                      .external_ids       = eids) :-
+                      .external_ids       = eids,
+                      .plugged_by         = None) :-
     &SwitchPort(.lsp = lsp, .sw = sw, .peer = peer),
     var eids = {
         var eids = lsp.external_ids;
@@ -263,7 +312,8 @@ OutProxy_Port_Binding(._uuid              = lrp._uuid,
                       .tag                = None, // always empty for router 
ports
                       .mac                = set_singleton("${lrp.mac} 
${lrp.networks.join(\" \")}"),
                       .nat_addresses      = set_empty(),
-                      .external_ids       = lrp.external_ids) :-
+                      .external_ids       = lrp.external_ids,
+                      .plugged_by         = None) :-
     rp in &RouterPort(.lrp = lrp, .router = router, .peer = peer),
     RouterPortRAOptionsComplete(lrp._uuid, options0),
     (var __type, var options1) = match (router.options.get("chassis")) {
@@ -471,7 +521,8 @@ OutProxy_Port_Binding(// lrp._uuid is already in use; 
generate a new UUID by
                       .tag                = None,  //always empty for router 
ports
                       .mac                = set_singleton("${lrp.mac} 
${lrp.networks.join(\" \")}"),
                       .nat_addresses      = set_empty(),
-                      .external_ids       = lrp.external_ids) :-
+                      .external_ids       = lrp.external_ids,
+                      .plugged_by         = None) :-
     DistributedGatewayPort(lrp, lr_uuid),
     DistributedGatewayPortHAChassisGroup(lrp, hacg_uuid),
     var redirect_type = match (lrp.options.get("redirect-type")) {
@@ -516,7 +567,8 @@ sb::Out_Port_Binding(._uuid              = pbinding._uuid,
                     .mac                = pbinding.mac,
                     .nat_addresses      = pbinding.nat_addresses,
                     .external_ids       = pbinding.external_ids,
-                    .up                 = Some{up}) :-
+                    .up                 = Some{up},
+                    .plugged_by         = pbinding.plugged_by) :-
     pbinding in OutProxy_Port_Binding(),
     PortTunKeyAllocation(pbinding._uuid, tunkey),
     QueueIDAllocation(pbinding._uuid, qid),
-- 
2.32.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to