On 4/13/26 10:54 AM, Alexandra Rukomoinikova wrote:
> Currently, ingress logical port mirroring does not take ACL rules into
> account, allowing the receiver interface (the sink in OVN) to observe
> the same traffic that exits the port.
>
> Ingress mirroring should also bypass port security checks. This is
> important because packets sent from a mirrored port that do not originate
> from the port’s MAC address would otherwise be dropped, potentially
> masking issues such as unexpected virtual machine behavior.
>
> Fixes: 2a2fe266d09c ("northd: Added support for port mirroring in OVN
> overlay.")
> Signed-off-by: Alexandra Rukomoinikova <[email protected]>
> ---
Hi Alexandra,
Thanks for the patch, it looks good to me overall.
Just double checking, we're fine with the egress pipeline order right?
Mirroring happens now after to-lport ACLs are evaluated but _before_
port security. So if a packet is dropped by a to-lport ACL we don't
mirror it. But if a packet is dropped by egress port security we do
mirror it.
Please see some more small comments inline.
> lib/ovn-util.c | 4 ++--
> northd/northd.h | 6 +++---
> tests/ovn.at | 18 +++++++++++++++++-
> 3 files changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/lib/ovn-util.c b/lib/ovn-util.c
> index 65fdb3a59..cb2692e0b 100644
> --- a/lib/ovn-util.c
> +++ b/lib/ovn-util.c
> @@ -1026,8 +1026,8 @@ ip_address_and_port_from_lb_key(const char *key, char
> **ip_address,
> *
> * NOTE: If OVN_NORTHD_PIPELINE_CSUM is updated make sure to double check
> * whether an update of OVN_INTERNAL_MINOR_VER is required. */
> -#define OVN_NORTHD_PIPELINE_CSUM "3760014456 11249"
> -#define OVN_INTERNAL_MINOR_VER 13
> +#define OVN_NORTHD_PIPELINE_CSUM "2129825571 11245"
> +#define OVN_INTERNAL_MINOR_VER 14
>
> /* Returns the OVN version. The caller must free the returned value. */
> char *
> diff --git a/northd/northd.h b/northd/northd.h
> index 139519006..8f57b930d 100644
> --- a/northd/northd.h
> +++ b/northd/northd.h
> @@ -509,9 +509,9 @@ ovn_datapath_is_stale(const struct ovn_datapath *od)
> /* Pipeline stages. */
> #define PIPELINE_STAGES \
> /* Logical switch ingress stages. */ \
> - PIPELINE_STAGE(SWITCH, IN, CHECK_PORT_SEC, 0, "ls_in_check_port_sec")
> \
> - PIPELINE_STAGE(SWITCH, IN, APPLY_PORT_SEC, 1, "ls_in_apply_port_sec")
> \
> - PIPELINE_STAGE(SWITCH, IN, MIRROR, 2, "ls_in_mirror") \
> + PIPELINE_STAGE(SWITCH, IN, MIRROR, 0, "ls_in_mirror") \
> + PIPELINE_STAGE(SWITCH, IN, CHECK_PORT_SEC, 1, "ls_in_check_port_sec") \
> + PIPELINE_STAGE(SWITCH, IN, APPLY_PORT_SEC, 2, "ls_in_apply_port_sec") \
> PIPELINE_STAGE(SWITCH, IN, LOOKUP_FDB, 3, "ls_in_lookup_fdb") \
> PIPELINE_STAGE(SWITCH, IN, PUT_FDB, 4, "ls_in_put_fdb") \
> PIPELINE_STAGE(SWITCH, IN, PRE_ACL, 5, "ls_in_pre_acl") \
> diff --git a/tests/ovn.at b/tests/ovn.at
> index cec3bb9a7..6d6481135 100644
> --- a/tests/ovn.at
> +++ b/tests/ovn.at
> @@ -19122,9 +19122,25 @@ OVN_CHECK_PACKETS([hv3/vif1-tx.pcap], [expected])
> as hv2 reset_pcap_file hv2-vif1 hv2/vif1
> as hv3 reset_pcap_file hv3-vif1 hv3/vif1
>
> -# Test mirror filtering.
> check ovn-nbctl lsp-attach-mirror ls1-lp1 mirror0
>
> +# Ensure that port security on the source port does not impact mirroring:
> +# send a packet with an unknown MAC and checking it appears on the sink port.
Typo: and check.
> +check ovn-nbctl lsp-set-port-security ls1-lp1 $ls1_lp1_mac
Missing --wait=hv? We risk ovn-controller not having the port security
in place at the moment we're injecting the test packet below.
> +
> +fake_mac="f1:f1:f1:f1:f1:04"
> +packet="inport==\"ls1-lp1\" && eth.src==$fake_mac && eth.dst==$rp_ls1_mac &&
> + ip4 && ip.ttl==64 && ip4.src==$ls1_lp1_ip && ip4.dst==$ls2_lp1_ip &&
> + udp && udp.src==53 && udp.dst==4369"
> +OVS_WAIT_UNTIL([as hv1 ovs-appctl -t ovn-controller inject-pkt "$packet"])
> +
> +echo $packet | ovstest test-ovn expr-to-packets > packet
> +
> +OVN_CHECK_PACKETS([hv3/vif1-tx.pcap], [packet])
> +
> +as hv3 reset_pcap_file hv3-vif1 hv3/vif1
> +
> +# Test mirror filtering.
> check ovn-nbctl mirror-rule-add mirror0 200 '1' skip
> check ovn-nbctl --wait=hv sync
>
Regards,
Dumitru
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev