In HA, when bfd was going down then up for the higher priority gw, new garp were not generated.
Signed-off-by: Xavier Simonart <[email protected]> --- controller/pinctrl.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/controller/pinctrl.c b/controller/pinctrl.c index e10ce06cf..b5b2bb7b5 100644 --- a/controller/pinctrl.c +++ b/controller/pinctrl.c @@ -242,7 +242,6 @@ static void send_garp_rarp_prepare( const struct ovsrec_bridge *, const struct sbrec_chassis *, const struct hmap *local_datapaths, - const struct sset *active_tunnels, const struct ovsrec_open_vswitch_table *ovs_table) OVS_REQUIRES(pinctrl_mutex); static void send_garp_rarp_run(struct rconn *swconn, @@ -4099,8 +4098,7 @@ pinctrl_run(struct ovsdb_idl_txn *ovnsb_idl_txn, send_garp_rarp_prepare(ovnsb_idl_txn, sbrec_port_binding_by_datapath, sbrec_port_binding_by_name, sbrec_mac_binding_by_lport_ip, ecmp_nh_table, - br_int, chassis, local_datapaths, active_tunnels, - ovs_table); + br_int, chassis, local_datapaths, ovs_table); prepare_ipv6_ras(local_active_ports_ras, sbrec_port_binding_by_name); prepare_ipv6_prefixd(ovnsb_idl_txn, sbrec_port_binding_by_name, local_active_ports_ipv6_pd, chassis, @@ -6598,16 +6596,18 @@ consider_nat_address(struct ovsdb_idl_index *sbrec_port_binding_by_name, const struct sbrec_port_binding *pb, struct sset *nat_address_keys, const struct sbrec_chassis *chassis, - const struct sset *active_tunnels, struct shash *nat_addresses) { struct lport_addresses *laddrs = xmalloc(sizeof *laddrs); char *lport = NULL; - if (!extract_addresses_with_port(nat_address, laddrs, &lport) + const struct sbrec_port_binding *cr_pb = NULL; + int rc = extract_addresses_with_port(nat_address, laddrs, &lport); + if (lport) { + cr_pb = lport_lookup_by_name(sbrec_port_binding_by_name, lport); + } + if (!rc || (!lport && !strcmp(pb->type, "patch")) - || (lport && !lport_is_chassis_resident( - sbrec_port_binding_by_name, chassis, - active_tunnels, lport))) { + || (lport && (!cr_pb || (cr_pb->chassis != chassis)))) { destroy_lport_addresses(laddrs); free(laddrs); free(lport); @@ -6635,7 +6635,6 @@ get_nat_addresses_and_keys(struct ovsdb_idl_index *sbrec_port_binding_by_name, struct sset *nat_address_keys, struct sset *local_l3gw_ports, const struct sbrec_chassis *chassis, - const struct sset *active_tunnels, struct shash *nat_addresses) { const char *gw_port; @@ -6652,7 +6651,6 @@ get_nat_addresses_and_keys(struct ovsdb_idl_index *sbrec_port_binding_by_name, consider_nat_address(sbrec_port_binding_by_name, pb->nat_addresses[i], pb, nat_address_keys, chassis, - active_tunnels, nat_addresses); } } else { @@ -6664,7 +6662,6 @@ get_nat_addresses_and_keys(struct ovsdb_idl_index *sbrec_port_binding_by_name, consider_nat_address(sbrec_port_binding_by_name, nat_addresses_options, pb, nat_address_keys, chassis, - active_tunnels, nat_addresses); } } @@ -6773,7 +6770,6 @@ send_garp_rarp_prepare(struct ovsdb_idl_txn *ovnsb_idl_txn, const struct ovsrec_bridge *br_int, const struct sbrec_chassis *chassis, const struct hmap *local_datapaths, - const struct sset *active_tunnels, const struct ovsrec_open_vswitch_table *ovs_table) OVS_REQUIRES(pinctrl_mutex) { @@ -6809,8 +6805,7 @@ send_garp_rarp_prepare(struct ovsdb_idl_txn *ovnsb_idl_txn, get_nat_addresses_and_keys(sbrec_port_binding_by_name, &nat_ip_keys, &local_l3gw_ports, - chassis, active_tunnels, - &nat_addresses); + chassis, &nat_addresses); /* For deleted ports and deleted nat ips, remove from * send_garp_rarp_data. */ -- 2.47.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
