On 10/8/24 10:59, Lorenzo Bianconi wrote:
> Considering the following configuration:
>
> $ovn-nbctl acl-list sw01
> from-lport 100 (inport == "sw01-port1" && udp.dst == 5201) allow-related
> [after-lb]
> from-lport 10 (inport == "sw01-port1" && udp) drop [after-lb]
>
> $ovn-nbctl list acl
> _uuid : e440336a-84d3-4a6d-95a9-edd1db1c3631
> action : drop
> direction : from-lport
> external_ids : {}
> label : 0
> log : false
> match : "inport == \"sw01-port1\" && udp"
> meter : []
> name : []
> options : {apply-after-lb="true"}
> priority : 10
> sample_est : ac6a6efc-a2e0-4d68-b5f8-8cd91113e554
> sample_new : 5cdad2ab-4390-4772-ac40-74aa2980c06e
> severity : []
> tier : 0
>
> _uuid : 85ef08d7-aacc-41d7-b808-6ab011edd753
> action : allow-related
> direction : from-lport
> external_ids : {}
> label : 0
> log : false
> match : "inport == \"sw01-port1\" && udp.dst == 5201"
> meter : []
> name : []
> options : {apply-after-lb="true"}
> priority : 100
> sample_est : 143ce7e2-fd13-4d5e-930c-133d5cf87d0d
> sample_new : 1d1a0a05-2a8a-4c72-ad35-77d7e2908183
> severity : []
> tier : 0
>
> If the priority-100 acl is removed, the udp traffic with destination port
> 5201 will be dropped however ovn-controller will continue sampling the
> existing connection with the observationPointID associated to the removed
> acl. Fix the issue updating the ct_label.obs_point_id for the connection
> marked with ct_mark.blocked.
>
> Fixes: d15b12da6fe6 ("northd: Add ACL Sampling.")
> Repoerted-at: https://issues.redhat.com/browse/FDP-819
> Signed-off-by: Lorenzo Bianconi <[email protected]>
>
> Signed-off-by: Lorenzo Bianconi <[email protected]>
> ---
Hi Lorenzo,
Could you please also add tests for these scenarios?
> northd/northd.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/northd/northd.c b/northd/northd.c
> index 2c4703301..d5b9a54b2 100644
> --- a/northd/northd.c
> +++ b/northd/northd.c
> @@ -7205,7 +7205,14 @@ consider_acl(struct lflow_table *lflows, const struct
> ovn_datapath *od,
> /* For drop ACLs just sample all packets as "new" packets. */
> build_acl_sample_label_action(actions, acl, acl->sample_new, NULL,
> obs_stage);
> - ds_put_cstr(actions, "ct_commit { ct_mark.blocked = 1; }; next;");
> + if (acl->sample_est) {
> + ds_put_format(actions,
> + "ct_commit { ct_mark.blocked = 1; "
> + "ct_label.obs_point_id = %"PRIu32"; }; next;",
> + (uint32_t) acl->sample_est->metadata);
> + } else {
> + ds_put_cstr(actions, "ct_commit { ct_mark.blocked = 1; };
> next;");
> + }
Will this ct_commit change the value of ct_label.obs_point_id to 0? I
guess not. Shouldn't we explicitly do that here? Otherwise, if the
drop ACL doesn't have sampling enabled, I'm afraid we'll still generate
samples with the stale point ID.
> ovn_lflow_add_with_hint(lflows, od, stage, priority,
> ds_cstr(match), ds_cstr(actions),
> &acl->header_, lflow_ref);
Regards,
Dumitru
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev