This is correct, thank you for fixing it.

One comment and one question:

1) While the referred patch that suppressed LOCAL_ONLY traffic exposed the issue, it was always a bug, though affecting a tiny minority of scenarios.

For example for PD, one can probably imagine a scenario where PD server is not located in a provider network but is hosted on a VIF that is attached to a "public" logical switch (no localnet ports!). This VIF may be located on a different chassis, in which case, even without the suppressing patch, PD requests wouldn't reach PD server. On the other hand, they would reach the server if its VIF would happen to land on the same chassis. A similar scenario may be envisioned for BFD, where router ports are distributed across multiple chassis.

2) I see you covered all pinctrl handlers that were setting the LOCAL_ONLY bit via MLF_LOCAL_ONLY_BIT macro. I've noticed that there are several other handlers that use MLF_LOCAL_ONLY macro instead, with (as far as I can see) exactly the same effect (any idea why we have both?). An example of that would be e.g. ip_mcast_querier_send_igmp. Do we believe that other packet injections are meant to stay inside the same chassis, or is it just something you missed / left out of scope for this patch?

Thanks again,

Ihar

On 10/8/21 10:54 AM, Lorenzo Bianconi wrote:
Do not mark BFD and IPv6 Prefix Delegation messages as local only since
they will be sent through a localnet port.

Fixes: 14c6dac51dc8 ("Suppress LOCAL_ONLY traffic for localnet ports")
Signed-off-by: Lorenzo Bianconi <[email protected]>
---
  controller/pinctrl.c | 2 --
  1 file changed, 2 deletions(-)

diff --git a/controller/pinctrl.c b/controller/pinctrl.c
index cc3edaaf4..7d01b18a3 100644
--- a/controller/pinctrl.c
+++ b/controller/pinctrl.c
@@ -1108,7 +1108,6 @@ ipv6_prefixd_send(struct rconn *swconn, struct 
ipv6_prefixd_state *pfd)
      uint32_t port_key = pfd->port_key;
      put_load(dp_key, MFF_LOG_DATAPATH, 0, 64, &ofpacts);
      put_load(port_key, MFF_LOG_INPORT, 0, 32, &ofpacts);
-    put_load(1, MFF_LOG_FLAGS, MLF_LOCAL_ONLY_BIT, 1, &ofpacts);
      struct ofpact_resubmit *resubmit = ofpact_put_RESUBMIT(&ofpacts);
      resubmit->in_port = OFPP_CONTROLLER;
      resubmit->table_id = OFTABLE_LOG_INGRESS_PIPELINE;
@@ -6815,7 +6814,6 @@ pinctrl_send_bfd_tx_msg(struct rconn *swconn, struct 
bfd_entry *entry,
      uint32_t port_key = entry->port_key;
      put_load(dp_key, MFF_LOG_DATAPATH, 0, 64, &ofpacts);
      put_load(port_key, MFF_LOG_INPORT, 0, 32, &ofpacts);
-    put_load(1, MFF_LOG_FLAGS, MLF_LOCAL_ONLY_BIT, 1, &ofpacts);
      struct ofpact_resubmit *resubmit = ofpact_put_RESUBMIT(&ofpacts);
      resubmit->in_port = OFPP_CONTROLLER;
      resubmit->table_id = OFTABLE_LOG_INGRESS_PIPELINE;

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

Reply via email to