[ovs-dev] [PATCH ovn 2/8] ovn-northd-ddlog: Make joins for ARP/ND flows slightly more efficient.

Ben Pfaff blp at ovn.org
Fri Aug 27 22:33:54 UTC 2021


DDlog can index equality joins within a expression like this, but not
conditional expression that follow such an expression.  This doesn't
actually matter much in this case because ordinarily the expression
will be true (most router ports are enabled).

Signed-off-by: Ben Pfaff <blp at ovn.org>
---
 northd/lrouter.dl    |  6 ++++--
 northd/ovn_northd.dl | 16 +++++-----------
 2 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/northd/lrouter.dl b/northd/lrouter.dl
index cc3dced5f..b6e752f7c 100644
--- a/northd/lrouter.dl
+++ b/northd/lrouter.dl
@@ -596,7 +596,8 @@ typedef RouterPort = RouterPort {
     peer:             RouterPeer,
     mcast_cfg:        Intern<McastPortCfg>,
     sb_options:       Map<istring,istring>,
-    has_bfd:          bool
+    has_bfd:          bool,
+    enabled:          bool
 }
 
 relation RouterPort[Intern<RouterPort>]
@@ -610,7 +611,8 @@ RouterPort[RouterPort{
                .peer               = peer,
                .mcast_cfg          = mcast_cfg,
                .sb_options         = sb_options,
-               .has_bfd            = has_bfd
+               .has_bfd            = has_bfd,
+               .enabled            = lrp.is_enabled()
            }.intern()] :-
     lrp in &nb::Logical_Router_Port(),
     Some{var networks} = extract_lrp_networks(lrp.mac.ival(), lrp.networks.map(ival)),
diff --git a/northd/ovn_northd.dl b/northd/ovn_northd.dl
index 61d7d53ce..fd40b637e 100644
--- a/northd/ovn_northd.dl
+++ b/northd/ovn_northd.dl
@@ -4609,8 +4609,7 @@ relation &SwitchPortARPForwards(
                        .reachable_ips_v6 = reachable_ips_v6,
                        .unreachable_ips_v4 = unreachable_ips_v4,
                        .unreachable_ips_v6 = unreachable_ips_v6) :-
-    port in &SwitchPort(.peer = Some{rp}),
-    rp.is_enabled(),
+    port in &SwitchPort(.peer = Some{rp@&RouterPort{.enabled = true}}),
     (var reachable_ips_v4, var reachable_ips_v6, var unreachable_ips_v4, var unreachable_ips_v6) = get_arp_forward_ips(rp).
 
 /* Packets received from VXLAN tunnels have already been through the
@@ -4632,8 +4631,7 @@ Flow(.logical_datapath = sw._uuid,
      .stage_hint       = stage_hint(sp.lsp._uuid),
      .io_port          = None,
      .controller_meter = None) :-
-    sp in &SwitchPort(.sw = sw, .peer = Some{rp}),
-    rp.is_enabled(),
+    sp in &SwitchPort(.sw = sw, .peer = Some{rp@&RouterPort{.enabled = true}}),
     &SwitchPortARPForwards(.port = sp, .reachable_ips_v4 = ips_v4),
     var ipv4 = FlatMap(ips_v4),
     var mc_flood_l2 = json_escape(mC_FLOOD_L2().0).
@@ -4650,8 +4648,7 @@ Flow(.logical_datapath = sw._uuid,
      .stage_hint       = stage_hint(sp.lsp._uuid),
      .io_port          = None,
      .controller_meter = None) :-
-    sp in &SwitchPort(.sw = sw, .peer = Some{rp}),
-    rp.is_enabled(),
+    sp in &SwitchPort(.sw = sw, .peer = Some{rp@&RouterPort{.enabled = true}}),
     &SwitchPortARPForwards(.port = sp, .reachable_ips_v6 = ips_v6),
     var ipv6 = FlatMap(ips_v6),
     var mc_flood_l2 = json_escape(mC_FLOOD_L2().0).
@@ -4664,12 +4661,10 @@ Flow(.logical_datapath = sw._uuid,
      .stage_hint       = 0,
      .io_port          = None,
      .controller_meter = None) :-
-    sp in &SwitchPort(.sw = sw, .peer = Some{rp}),
-    rp.is_enabled(),
+    sp in &SwitchPort(.sw = sw, .peer = Some{rp@&RouterPort{.enabled = true}}),
     &SwitchPortARPForwards(.port = sp, .unreachable_ips_v4 = ips_v4),
     var ipv4 = FlatMap(ips_v4),
     var flood = json_escape(mC_FLOOD().0).
-
 Flow(.logical_datapath = sw._uuid,
      .stage            = s_SWITCH_IN_L2_LKUP(),
      .priority         = 90,
@@ -4678,8 +4673,7 @@ Flow(.logical_datapath = sw._uuid,
      .stage_hint       = stage_hint(sp.lsp._uuid),
      .io_port          = None,
      .controller_meter = None) :-
-    sp in &SwitchPort(.sw = sw, .peer = Some{rp}),
-    rp.is_enabled(),
+    sp in &SwitchPort(.sw = sw, .peer = Some{rp@&RouterPort{.enabled = true}}),
     &SwitchPortARPForwards(.port = sp, .unreachable_ips_v6 = ips_v6),
     var ipv6 = FlatMap(ips_v6),
     var flood = json_escape(mC_FLOOD().0).
-- 
2.31.1



More information about the dev mailing list