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 <b...@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 4402b17d2..c41a79b84 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

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to