On 11/14/25 5:59 PM, Ales Musil wrote:
> The dynamically learned FBDs were using idle_timeout configured to
> the same value as fdb_age_threshold for given LS. This could cause
> an issue when the traffic was originated only from OVN, without the
> reply the flow would be used, but OVN could be just blackholing
> traffic.
> 
> Switch to hard_timeout instead, that means the flow will be removed
> after the specified timeout regardless of the usage, however
> this is still better than the blackhole that isn't recoverable.
> Without the FDB we would flood instead, which might happen during the
> period when hard_timeout expires before the workload replies back to
> populate the FDB again.
> 
> Fixes: 53e0d5ac2a74 ("controller: Learn EVPN workload FDB from the ingress 
> traffic.")
> Signed-off-by: Ales Musil <[email protected]>
> ---

Looks good to me, thanks!

Acked-by: Dumitru Ceara <[email protected]>

>  controller/physical.c | 2 +-
>  tests/system-ovn.at   | 6 +++---
>  2 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/controller/physical.c b/controller/physical.c
> index 6ac5dcd3f..2c314b7da 100644
> --- a/controller/physical.c
> +++ b/controller/physical.c
> @@ -2965,7 +2965,7 @@ physical_consider_evpn_binding(const struct 
> evpn_binding *binding,
>      ol->flags = NX_LEARN_F_DELETE_LEARNED;
>      ol->priority = 150;
>      ol->table_id = OFTABLE_GET_REMOTE_FDB;
> -    ol->idle_timeout = binding->fdb_age_threshold;
> +    ol->hard_timeout = binding->fdb_age_threshold;
>  
>      /* Match the learned flow on the same metadata. */
>      ol_spec = ofpbuf_put_zeros(ofpacts, sizeof *ol_spec);
> diff --git a/tests/system-ovn.at b/tests/system-ovn.at
> index 76f73d96e..167281785 100644
> --- a/tests/system-ovn.at
> +++ b/tests/system-ovn.at
> @@ -18653,9 +18653,9 @@ check ovn-nbctl --wait=hv set logical_switch ls-evpn 
> other_config:fdb_age_thresh
>  ovs-ofctl dump-flows br-int table=OFTABLE_LEARN_REMOTE_FDB
>  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int 
> table=OFTABLE_LEARN_REMOTE_FDB | grep priority | \
>                     awk '{print $7, $8}' | strip_cookie | sort], [0], [dnl
> -priority=100,reg14=0x80000001,metadata=0x$dp_key 
> actions=learn(table=OFTABLE_GET_REMOTE_FDB,idle_timeout=300,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> -priority=100,reg14=0x80000002,metadata=0x$dp_key 
> actions=learn(table=OFTABLE_GET_REMOTE_FDB,idle_timeout=300,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> -priority=100,reg14=0x80000003,metadata=0x$dp_key 
> actions=learn(table=OFTABLE_GET_REMOTE_FDB,idle_timeout=300,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> +priority=100,reg14=0x80000001,metadata=0x$dp_key 
> actions=learn(table=OFTABLE_GET_REMOTE_FDB,hard_timeout=300,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> +priority=100,reg14=0x80000002,metadata=0x$dp_key 
> actions=learn(table=OFTABLE_GET_REMOTE_FDB,hard_timeout=300,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> +priority=100,reg14=0x80000003,metadata=0x$dp_key 
> actions=learn(table=OFTABLE_GET_REMOTE_FDB,hard_timeout=300,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
>  priority=150,reg14=0x80000001,metadata=0x$dp_key,dl_src=f0:00:0f:16:10:50 
> actions=drop
>  priority=150,reg14=0x80000002,metadata=0x$dp_key,dl_src=f0:00:0f:16:10:60 
> actions=drop
>  priority=150,reg14=0x80000003,metadata=0x$dp_key,dl_src=00:00:00:00:00:01 
> actions=drop

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

Reply via email to