zebra: special sync routes lower seq handling

Add some special handling to accept lower seq routes for local
known routes when not ready. This aligns the code back a bit more
to where it was before to fix seen issues with sync routes.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
This commit is contained in:
Stephen Worley 2021-10-26 17:48:49 -04:00
parent 34c7f35f02
commit 1e1398e3da
2 changed files with 28 additions and 2 deletions

View File

@ -1600,20 +1600,33 @@ static inline bool zebra_evpn_mac_is_bgp_seq_ok(struct zebra_evpn *zevpn,
char mac_buf[MAC_BUF_SIZE];
uint32_t tmp_seq;
const char *n_type;
bool is_local = false;
if (CHECK_FLAG(mac->flags, ZEBRA_MAC_LOCAL)) {
tmp_seq = mac->loc_seq;
n_type = "local";
is_local = true;
} else {
tmp_seq = mac->rem_seq;
n_type = "remote";
}
if (seq < tmp_seq) {
if (is_local && !zebra_evpn_mac_is_ready_for_bgp(mac->flags)) {
if (IS_ZEBRA_DEBUG_EVPN_MH_MAC || IS_ZEBRA_DEBUG_VXLAN)
zlog_debug(
"%s-macip not ready vni %u %s-mac %pEA lower seq %u f 0x%x",
sync ? "sync" : "rem", zevpn->vni,
n_type, &mac->macaddr, tmp_seq,
mac->flags);
return true;
}
/* if the mac was never advertised to bgp we must accept
* whatever sequence number bgp sends
*/
if (zebra_vxlan_accept_bgp_seq()) {
if (!is_local && zebra_vxlan_accept_bgp_seq()) {
if (IS_ZEBRA_DEBUG_EVPN_MH_MAC ||
IS_ZEBRA_DEBUG_VXLAN) {
zlog_debug(

View File

@ -501,20 +501,33 @@ bool zebra_evpn_neigh_is_bgp_seq_ok(struct zebra_evpn *zevpn,
{
uint32_t tmp_seq;
const char *n_type;
bool is_local = false;
if (CHECK_FLAG(n->flags, ZEBRA_NEIGH_LOCAL)) {
tmp_seq = n->loc_seq;
n_type = "local";
is_local = true;
} else {
tmp_seq = n->rem_seq;
n_type = "remote";
}
if (seq < tmp_seq) {
if (is_local && !zebra_evpn_neigh_is_ready_for_bgp(n)) {
if (IS_ZEBRA_DEBUG_EVPN_MH_NEIGH ||
IS_ZEBRA_DEBUG_VXLAN)
zlog_debug(
"%s-macip not ready vni %u %s mac %pEA IP %pIA lower seq %u f 0x%x",
sync ? "sync" : "remote", zevpn->vni,
n_type, macaddr, &n->ip, tmp_seq,
n->flags);
return true;
}
/* if the neigh was never advertised to bgp we must accept
* whatever sequence number bgp sends
*/
if (zebra_vxlan_accept_bgp_seq()) {
if (!is_local && zebra_vxlan_accept_bgp_seq()) {
if (IS_ZEBRA_DEBUG_EVPN_MH_NEIGH
|| IS_ZEBRA_DEBUG_VXLAN)
zlog_debug(