[ovs-dev] [RFC PATCH ovn 2/7] northd-ddlog: Add LB Group support.

Dumitru Ceara dceara at redhat.com
Thu Nov 25 21:34:23 UTC 2021


Port f6aba21c9de8 ("nb: Add support for Load_Balancer_Groups.").

Signed-off-by: Dumitru Ceara <dceara at redhat.com>
---
 northd/lrouter.dl    |    7 +++++++
 northd/lswitch.dl    |    6 ++++++
 northd/ovn-nb.dlopts |    1 +
 northd/ovn_northd.dl |   18 ++++++++++++++++++
 4 files changed, 32 insertions(+)

diff --git a/northd/lrouter.dl b/northd/lrouter.dl
index 0e4308eb5..4782599e5 100644
--- a/northd/lrouter.dl
+++ b/northd/lrouter.dl
@@ -410,6 +410,13 @@ LogicalRouterLB(lr, lb) :-
     var lb_uuid = FlatMap(lbs),
     lb in &LoadBalancer(.lb = &nb::Load_Balancer{._uuid = lb_uuid}).
 
+LogicalRouterLB(lr, lb) :-
+    nb::Logical_Router(._uuid = lr, .load_balancer_group = lbg_ids),
+    var lbg_id = FlatMap(lbg_ids),
+    lbg in &nb::Load_Balancer_Group(._uuid = lbg_id, .load_balancer = lb_ids),
+    var lb_id = FlatMap(lb_ids),
+    lb in &LoadBalancer(.lb = &nb::Load_Balancer{._uuid = lb_uuid}).
+
 relation LogicalRouterLBs(lr: uuid, lb: Vec<Intern<LoadBalancer>>)
 
 LogicalRouterLBs(lr, lbs) :-
diff --git a/northd/lswitch.dl b/northd/lswitch.dl
index 33c5c706b..82c1b4b93 100644
--- a/northd/lswitch.dl
+++ b/northd/lswitch.dl
@@ -322,6 +322,12 @@ LogicalSwitchLB(sw_uuid, lb) :-
     var lb_id = FlatMap(lb_ids),
     lb in &nb::Load_Balancer(._uuid = lb_id).
 
+LogicalSwitchLB(sw_uuid, lb) :-
+    &nb::Logical_Switch(._uuid = sw_uuid, .load_balancer_group = lbg_ids),
+    var lbg_id = FlatMap(lbg_ids),
+    lbg in &nb::Load_Balancer_Group(._uuid = lbg_id, .load_balancer = lb_ids),
+    var lb_id = FlatMap(lb_ids),
+    lb in &nb::Load_Balancer(._uuid = lb_id).
 
 relation SwitchLB(sw: Intern<Switch>, lb_uuid: uuid)
 
diff --git a/northd/ovn-nb.dlopts b/northd/ovn-nb.dlopts
index 9a460adef..d4c620d25 100644
--- a/northd/ovn-nb.dlopts
+++ b/northd/ovn-nb.dlopts
@@ -18,6 +18,7 @@
 --intern-table ACL
 --intern-table QoS
 --intern-table Load_Balancer
+--intern-table Load_Balancer_Group
 --intern-table Logical_Switch
 --intern-table Load_Balancer_Health_Check
 --intern-table Meter
diff --git a/northd/ovn_northd.dl b/northd/ovn_northd.dl
index 817b11bdc..56f0a04ac 100644
--- a/northd/ovn_northd.dl
+++ b/northd/ovn_northd.dl
@@ -8905,6 +8905,24 @@ sb::Out_Load_Balancer(._uuid = lb._uuid,
      */
     var options = lb.options.insert_imm(i"hairpin_orig_tuple", i"true").
 
+sb::Out_Load_Balancer(._uuid = lb._uuid,
+                      .name = lb.name,
+                      .vips = lb.vips,
+                      .protocol = lb.protocol,
+                      .datapaths = datapaths,
+                      .external_ids = [i"lb_id" -> uuid2str(lb_uuid).intern()],
+                      .options = options) :-
+    nb in &nb::Logical_Switch(._uuid = ls_uuid, .load_balancer_group = lbg_uuids),
+    var lbg_uuid = FlatMap(lbg_uuids),
+    lbg in &nb::Load_Balancer_Group(._uuid = lbg_uuid, .load_balancer = lb_uuids),
+    var lb_uuid = FlatMap(lb_uuids),
+    var datapaths = ls_uuid.group_by(lb_uuid).to_set(),
+    lb in &nb::Load_Balancer(._uuid = lb_uuid),
+    /* Store the fact that northd provides the original (destination IP +
+     * transport port) tuple.
+     */
+    var options = lb.options.insert_imm(i"hairpin_orig_tuple", i"true").
+
 sb::Out_Service_Monitor(._uuid = hash128((svc_monitor.port_name, lbvipbackend.ip, lbvipbackend.port, protocol)),
                        .ip = i"${lbvipbackend.ip}",
                        .protocol = Some{protocol},



More information about the dev mailing list