On Tue, Oct 14, 2025 at 2:14 PM Dumitru Ceara via dev <
[email protected]> wrote:

> It's not always the case that remote VTEP FDB entries are installed with
> an all-zero MAC, e.g., when running with BGP L3EVPN.  Relax the
> condition and also consider all externally learned FDB entries on vxlan
> interfaces that have a destination IP set to be valid remote VTEPs.
>
> Fixes: 795fd50f588e ("controller: Add support for remote VTEP learning.")
> Signed-off-by: Dumitru Ceara <[email protected]>
> ---
>

Hi Dumitru,

thank you for the patch. I have one small nit below.


>  controller/neighbor-exchange-netlink.c | 21 +++++++++++---
>  controller/neighbor-exchange.c         |  4 ++-
>  tests/system-ovn.at                    | 39 +++++++++++++++++++++++++-
>  3 files changed, 58 insertions(+), 6 deletions(-)
>
> diff --git a/controller/neighbor-exchange-netlink.c
> b/controller/neighbor-exchange-netlink.c
> index fa2444e2f3..4729de32e0 100644
> --- a/controller/neighbor-exchange-netlink.c
> +++ b/controller/neighbor-exchange-netlink.c
> @@ -171,13 +171,26 @@ ne_is_ovn_owned(const struct ne_nl_received_neigh
> *nd)
>             && !(nd->flags & NTF_EXT_LEARNED);
>  }
>
> -/* OVN expects that the VTEP entry doesn't have any MAC address (zeroed
> out)
> - * and the entry is marked as "permanent". */
> +/* OVN expects that the VTEP entry either:
> + * - doesn't have any MAC address (zeroed out) and the entry is marked
> +     as "permanent"
>

nit: Missing *


> + * OR
> + * - has an IP address (that of the remote VTEP) and is marked as
> + *   "extern learned".
> + */
>  bool
>  ne_is_valid_remote_vtep(struct ne_nl_received_neigh *ne)
>  {
> -    return eth_addr_is_zero(ne->lladdr) && (ne->state & NUD_NOARP) &&
> -           (ne->state & NUD_PERMANENT);
> +    if (eth_addr_is_zero(ne->lladdr) && (ne->state & NUD_NOARP) &&
> +            (ne->state & NUD_PERMANENT)) {
> +        return true;
> +    }
> +
> +    if (ipv6_addr_is_set(&ne->addr) && ne->flags & NTF_EXT_LEARNED) {
> +        return true;
> +    }
> +
> +    return false;
>  }
>
>  /* OVN expects that the FDB entry has an IP address (that of the remote
> VTEP),
> diff --git a/controller/neighbor-exchange.c
> b/controller/neighbor-exchange.c
> index ea6c287b1f..e40f39e248 100644
> --- a/controller/neighbor-exchange.c
> +++ b/controller/neighbor-exchange.c
> @@ -118,7 +118,9 @@ neighbor_exchange_run(const struct
> neighbor_exchange_ctx_in *n_ctx_in,
>                          evpn_remote_vtep_add(n_ctx_out->remote_vteps,
> ne->addr,
>                                               port, nim->vni);
>                      }
> -                } else if (ne_is_valid_static_fdb(ne)) {
> +                }
> +
> +                if (ne_is_valid_static_fdb(ne)) {
>                      if (!evpn_static_entry_find(n_ctx_out->static_fdbs,
>                                                  ne->lladdr, ne->addr,
>                                                  nim->vni)) {
> diff --git a/tests/system-ovn.at b/tests/system-ovn.at
> index df5bd716d2..6988984abe 100644
> --- a/tests/system-ovn.at
> +++ b/tests/system-ovn.at
> @@ -18455,22 +18455,26 @@ AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_LEARN_REMOTE_FDB |
>  priority=100,reg14=0x80000001,metadata=0x$dp_key
> actions=learn(table=OFTABLE_GET_REMOTE_FDB,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
>  ])
>
> -# Simulate second remote VTEP.
> +# Simulate more remote VTEPs.
>  check bridge fdb append 00:00:00:00:00:00 dev vxlan-$vni dst 169.0.0.20
> static permanent
> +check bridge fdb append 00:00:00:00:00:01 dev vxlan-$vni dst 169.0.0.30
> extern_learn
>
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/remote-vtep-list | sort],
> [0], [dnl
>  IP: 169.0.0.10, port: 4789, vni: $vni
>  IP: 169.0.0.20, port: 4789, vni: $vni
> +IP: 169.0.0.30, port: 4789, vni: $vni
>  ])
>
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-binding-list | cut
> -d',' -f2- | sort], [0], [dnl
>   Remote IP: 169.0.0.10, vni: $vni, binding_key: 0x80000001,
> tunnel_ofport: $ofport, dp_key: $dp_key
>   Remote IP: 169.0.0.20, vni: $vni, binding_key: 0x80000002,
> tunnel_ofport: $ofport, dp_key: $dp_key
> + Remote IP: 169.0.0.30, vni: $vni, binding_key: 0x80000003,
> tunnel_ofport: $ofport, dp_key: $dp_key
>  ])
>
>  # We cannot check the output directly because the order might change.
>  OVS_WAIT_UNTIL([ovn-appctl evpn/vtep-multicast-group-list | grep -q
> "169.0.0.10"])
>  OVS_WAIT_UNTIL([ovn-appctl evpn/vtep-multicast-group-list | grep -q
> "169.0.0.20"])
> +OVS_WAIT_UNTIL([ovn-appctl evpn/vtep-multicast-group-list | grep -q
> "169.0.0.30"])
>  AT_CHECK([ovn-appctl evpn/vtep-multicast-group-list | wc -l], [0], [1
>  ])
>
> @@ -18478,6 +18482,7 @@ AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_PHY_TO_LOG | grep p
>                     awk '{print $7, $8}' | sort], [0], [dnl
>  priority=1050,tun_id=0xa,tun_src=169.0.0.10,tun_dst=169.0.0.1,in_port=$ofport
> actions=load:0x$dp_key->OXM_OF_METADATA[[0..31]],load:0x80000001->NXM_NX_REG14[[]],resubmit(,OFTABLE_LEARN_REMOTE_FDB),resubmit(,OFTABLE_LOG_INGRESS_PIPELINE)
>  priority=1050,tun_id=0xa,tun_src=169.0.0.20,tun_dst=169.0.0.1,in_port=$ofport
> actions=load:0x$dp_key->OXM_OF_METADATA[[0..31]],load:0x80000002->NXM_NX_REG14[[]],resubmit(,OFTABLE_LEARN_REMOTE_FDB),resubmit(,OFTABLE_LOG_INGRESS_PIPELINE)
> +priority=1050,tun_id=0xa,tun_src=169.0.0.30,tun_dst=169.0.0.1,in_port=$ofport
> actions=load:0x$dp_key->OXM_OF_METADATA[[0..31]],load:0x80000003->NXM_NX_REG14[[]],resubmit(,OFTABLE_LEARN_REMOTE_FDB),resubmit(,OFTABLE_LOG_INGRESS_PIPELINE)
>  ])
>
>  ovs-ofctl dump-flows br-int table=OFTABLE_REMOTE_VTEP_OUTPUT >
> oftable_remote_vtep_output
> @@ -18485,43 +18490,57 @@ AT_CHECK_UNQUOTED([grep "output"
> oftable_remote_vtep_output | grep -v resubmit |
>                     awk '{print $7, $8}' | sort], [0], [dnl
>  priority=50,reg15=0x80000001,metadata=0x$dp_key
> actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa900000a->NXM_NX_TUN_IPV4_DST[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],output:$ofport
>  priority=50,reg15=0x80000002,metadata=0x$dp_key
> actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa9000014->NXM_NX_TUN_IPV4_DST[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],output:$ofport
> +priority=50,reg15=0x80000003,metadata=0x$dp_key
> actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa900001e->NXM_NX_TUN_IPV4_DST[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],output:$ofport
>  priority=55,reg10=0x1/0x1,reg15=0x80000001,metadata=0x$dp_key
> actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa900000a->NXM_NX_TUN_IPV4_DST[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],load:0xffff->NXM_OF_IN_PORT[[]],output:$ofport
>  priority=55,reg10=0x1/0x1,reg15=0x80000002,metadata=0x$dp_key
> actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa9000014->NXM_NX_TUN_IPV4_DST[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],load:0xffff->NXM_OF_IN_PORT[[]],output:$ofport
> +priority=55,reg10=0x1/0x1,reg15=0x80000003,metadata=0x$dp_key
> actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa900001e->NXM_NX_TUN_IPV4_DST[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],load:0xffff->NXM_OF_IN_PORT[[]],output:$ofport
>  ])
>
>  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,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,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,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=0x80000003,metadata=0x1,dl_src=00:00:00:00:00:01
> actions=drop
>  ])
>
>  AT_CHECK([grep "resubmit" oftable_remote_vtep_output | grep -c
> "load:0xa900000a"], [0], [3
>  ])
>  AT_CHECK([grep "resubmit" oftable_remote_vtep_output | grep -c
> "load:0xa9000014"], [0], [3
>  ])
> +AT_CHECK([grep "resubmit" oftable_remote_vtep_output | grep -c
> "load:0xa900001e"], [0], [3
> +])
>
>  # Simulate remote workload.
>  check bridge fdb add f0:00:0f:16:10:50 dev vxlan-$vni dst 169.0.0.10
> static extern_learn
>  check bridge fdb add f0:00:0f:16:10:60 dev vxlan-$vni dst 169.0.0.20
> static extern_learn
> +check bridge fdb add f0:00:0f:16:10:70 dev vxlan-$vni dst 169.0.0.30
> static extern_learn
>
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-fdb-list | cut -d','
> -f2- | sort], [0], [dnl
> + MAC: 00:00:00:00:00:01, vni: $vni, binding_key: 0x80000003, dp_key:
> $dp_key
>   MAC: f0:00:0f:16:10:50, vni: $vni, binding_key: 0x80000001, dp_key:
> $dp_key
>   MAC: f0:00:0f:16:10:60, vni: $vni, binding_key: 0x80000002, dp_key:
> $dp_key
> + MAC: f0:00:0f:16:10:70, vni: $vni, binding_key: 0x80000003, dp_key:
> $dp_key
>  ])
>
>  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_GET_REMOTE_FDB | grep priority | \
>                     awk '{print $7, $8}' | sort], [0], [dnl
>  priority=0 actions=load:0->NXM_NX_REG1[[]]
> +priority=150,metadata=0x$dp_key,dl_dst=00:00:00:00:00:01
> actions=load:0x80000003->NXM_NX_REG1[[]]
>  priority=150,metadata=0x$dp_key,dl_dst=f0:00:0f:16:10:50
> actions=load:0x80000001->NXM_NX_REG1[[]]
>  priority=150,metadata=0x$dp_key,dl_dst=f0:00:0f:16:10:60
> actions=load:0x80000002->NXM_NX_REG1[[]]
> +priority=150,metadata=0x$dp_key,dl_dst=f0:00:0f:16:10:70
> actions=load:0x80000003->NXM_NX_REG1[[]]
>  ])
>
>  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,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,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,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
> +priority=150,reg14=0x80000003,metadata=0x$dp_key,dl_src=f0:00:0f:16:10:70
> actions=drop
>  ])
>
>  # Check that the recompute won't change the UUIDs and tunnel keys.
> @@ -18566,8 +18585,11 @@ AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_LEARN_REMOTE_FDB |
>                     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=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
> +priority=150,reg14=0x80000003,metadata=0x$dp_key,dl_src=f0:00:0f:16:10:70
> actions=drop
>  ])
>
>  check ovn-nbctl --wait=hv remove logical_switch ls-evpn other_config
> fdb_age_threshold
> @@ -18575,8 +18597,11 @@ AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_LEARN_REMOTE_FDB |
>                     awk '{print $7, $8}' | strip_cookie | sort], [0], [dnl
>  priority=100,reg14=0x80000001,metadata=0x$dp_key
> actions=learn(table=OFTABLE_GET_REMOTE_FDB,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,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,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
> +priority=150,reg14=0x80000003,metadata=0x$dp_key,dl_src=f0:00:0f:16:10:70
> actions=drop
>  ])
>
>  AS_BOX([L2 EVPN ARP learning])
> @@ -18598,10 +18623,12 @@ rtr_port_key=$(fetch_column Port_Binding
> tunnel_key logical_port=lr-ls-evpn)
>  # is controlled by the BGP-EVPN control plane.
>  check ip neigh add dev br-10 172.16.1.50 lladdr f0:00:0f:16:10:50 nud
> noarp extern_learn
>  check ip neigh add dev br-10 172.16.1.60 lladdr f0:00:0f:16:10:60 nud
> noarp extern_learn
> +check ip neigh add dev br-10 172.16.1.70 lladdr f0:00:0f:16:10:70 nud
> noarp extern_learn
>
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-arp-list | cut -d','
> -f2- | sort], [0], [dnl
>   VNI: 10, MAC: f0:00:0f:16:10:50, IP: 172.16.1.50, dp_key: $dp_key
>   VNI: 10, MAC: f0:00:0f:16:10:60, IP: 172.16.1.60, dp_key: $dp_key
> + VNI: 10, MAC: f0:00:0f:16:10:70, IP: 172.16.1.70, dp_key: $dp_key
>  ])
>
>  AS_BOX([Check dynamic-routing-arp-prefer-local=true])
> @@ -18612,6 +18639,7 @@ AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_BINDING | grep
>  priority=100,reg0=0xac10010a,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:01:10,load:0x1->NXM_NX_REG10[[6]]
>  priority=20,reg0=0xac100132,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:10:50,load:0x1->NXM_NX_REG10[[6]]
>  priority=20,reg0=0xac10013c,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:10:60,load:0x1->NXM_NX_REG10[[6]]
> +priority=20,reg0=0xac100146,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:10:70,load:0x1->NXM_NX_REG10[[6]]
>  ])
>
>  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_LOOKUP |
> grep priority | \
> @@ -18619,6 +18647,7 @@ AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_LOOKUP | grep p
>  
> priority=100,arp,reg0=0xac10010a,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10
> actions=load:0x1->NXM_NX_REG10[[6]]
>  
> priority=20,arp,reg0=0xac100132,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50
> actions=load:0x1->NXM_NX_REG10[[6]]
>  
> priority=20,arp,reg0=0xac10013c,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60
> actions=load:0x1->NXM_NX_REG10[[6]]
> +priority=20,arp,reg0=0xac100146,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:70
> actions=load:0x1->NXM_NX_REG10[[6]]
>  ])
>
>  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_CACHE_USE | grep priority | \
> @@ -18635,6 +18664,7 @@ AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_BINDING | grep
>  priority=100,reg0=0xac10010a,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:01:10,load:0x1->NXM_NX_REG10[[6]]
>  priority=200,reg0=0xac100132,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:10:50,load:0x1->NXM_NX_REG10[[6]]
>  priority=200,reg0=0xac10013c,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:10:60,load:0x1->NXM_NX_REG10[[6]]
> +priority=200,reg0=0xac100146,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:10:70,load:0x1->NXM_NX_REG10[[6]]
>  ])
>
>  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_LOOKUP |
> grep priority | \
> @@ -18642,6 +18672,7 @@ AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_LOOKUP | grep p
>  
> priority=100,arp,reg0=0xac10010a,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10
> actions=load:0x1->NXM_NX_REG10[[6]]
>  
> priority=200,arp,reg0=0xac100132,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50
> actions=load:0x1->NXM_NX_REG10[[6]]
>  
> priority=200,arp,reg0=0xac10013c,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60
> actions=load:0x1->NXM_NX_REG10[[6]]
> +priority=200,arp,reg0=0xac100146,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:70
> actions=load:0x1->NXM_NX_REG10[[6]]
>  ])
>
>  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_CACHE_USE | grep priority | \
> @@ -18663,6 +18694,7 @@ check diff -q arp_before arp_after
>  # Remove remote workload ARP entries and check ovn-controller's state.
>  check ip neigh del dev br-10 172.16.1.50
>  check ip neigh del dev br-10 172.16.1.60
> +check ip neigh del dev br-10 172.16.1.70
>
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-arp-list | cut -d','
> -f2- | sort], [0], [dnl
>  ])
> @@ -18688,10 +18720,12 @@
> priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:
>  # the logical switch that still exists).
>  check ip neigh add dev br-10 172.16.1.50 lladdr f0:00:0f:16:10:50 nud
> noarp extern_learn
>  check ip neigh add dev br-10 172.16.1.60 lladdr f0:00:0f:16:10:60 nud
> noarp extern_learn
> +check ip neigh add dev br-10 172.16.1.70 lladdr f0:00:0f:16:10:70 nud
> noarp extern_learn
>
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-arp-list | cut -d','
> -f2- | sort], [0], [dnl
>   VNI: 10, MAC: f0:00:0f:16:10:50, IP: 172.16.1.50, dp_key: $dp_key
>   VNI: 10, MAC: f0:00:0f:16:10:60, IP: 172.16.1.60, dp_key: $dp_key
> + VNI: 10, MAC: f0:00:0f:16:10:70, IP: 172.16.1.70, dp_key: $dp_key
>  ])
>
>  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_BINDING
> | grep priority | \
> @@ -18699,6 +18733,7 @@ AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_BINDING | grep
>  priority=100,reg0=0xac10010a,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:01:10,load:0x1->NXM_NX_REG10[[6]]
>  priority=200,reg0=0xac100132,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:10:50,load:0x1->NXM_NX_REG10[[6]]
>  priority=200,reg0=0xac10013c,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:10:60,load:0x1->NXM_NX_REG10[[6]]
> +priority=200,reg0=0xac100146,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key
> actions=mod_dl_dst:f0:00:0f:16:10:70,load:0x1->NXM_NX_REG10[[6]]
>  ])
>
>  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_LOOKUP |
> grep priority | \
> @@ -18706,12 +18741,14 @@ AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_LOOKUP | grep p
>  
> priority=100,arp,reg0=0xac10010a,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10
> actions=load:0x1->NXM_NX_REG10[[6]]
>  
> priority=200,arp,reg0=0xac100132,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50
> actions=load:0x1->NXM_NX_REG10[[6]]
>  
> priority=200,arp,reg0=0xac10013c,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60
> actions=load:0x1->NXM_NX_REG10[[6]]
> +priority=200,arp,reg0=0xac100146,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:70
> actions=load:0x1->NXM_NX_REG10[[6]]
>  ])
>
>  check ovn-nbctl --wait=hv lr-del lr
>  AT_CHECK_UNQUOTED([ovn-appctl evpn/vtep-arp-list | cut -d',' -f2- |
> sort], [0], [dnl
>   VNI: 10, MAC: f0:00:0f:16:10:50, IP: 172.16.1.50, dp_key: $dp_key
>   VNI: 10, MAC: f0:00:0f:16:10:60, IP: 172.16.1.60, dp_key: $dp_key
> + VNI: 10, MAC: f0:00:0f:16:10:70, IP: 172.16.1.70, dp_key: $dp_key
>  ])
>
>  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_BINDING
> | grep priority | \
> --
> 2.51.0
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
With that addressed:
Acked-by: Ales Musil <[email protected]>

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

Reply via email to