summaryrefslogtreecommitdiff
path: root/zebra/zebra_evpn_neigh.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/zebra_evpn_neigh.c')
-rw-r--r--zebra/zebra_evpn_neigh.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/zebra/zebra_evpn_neigh.c b/zebra/zebra_evpn_neigh.c
index 74141e4f34..81705d4e85 100644
--- a/zebra/zebra_evpn_neigh.c
+++ b/zebra/zebra_evpn_neigh.c
@@ -6,6 +6,10 @@
#include <zebra.h>
+#ifdef GNU_LINUX
+#include <linux/neighbour.h>
+#endif
+
#include "hash.h"
#include "interface.h"
#include "jhash.h"
@@ -1038,11 +1042,10 @@ static inline void zebra_evpn_local_neigh_update_log(
* from MAC.
*/
static int zebra_evpn_ip_inherit_dad_from_mac(struct zebra_vrf *zvrf,
- struct zebra_mac *old_zmac,
+ bool is_old_mac_dup,
struct zebra_mac *new_zmac,
struct zebra_neigh *nbr)
{
- bool is_old_mac_dup = false;
bool is_new_mac_dup = false;
if (!zebra_evpn_do_dup_addr_detect(zvrf))
@@ -1050,9 +1053,6 @@ static int zebra_evpn_ip_inherit_dad_from_mac(struct zebra_vrf *zvrf,
/* Check old or new MAC is detected as duplicate
* mark this neigh as duplicate
*/
- if (old_zmac)
- is_old_mac_dup =
- CHECK_FLAG(old_zmac->flags, ZEBRA_MAC_DUPLICATE);
if (new_zmac)
is_new_mac_dup =
CHECK_FLAG(new_zmac->flags, ZEBRA_MAC_DUPLICATE);
@@ -1262,6 +1262,7 @@ int zebra_evpn_local_neigh_update(struct zebra_evpn *zevpn,
bool new_static = false;
bool old_bgp_ready = false;
bool new_bgp_ready;
+ bool is_old_mac_dup = false;
/* Check if the MAC exists. */
zmac = zebra_evpn_mac_lookup(zevpn, macaddr);
@@ -1408,6 +1409,7 @@ int zebra_evpn_local_neigh_update(struct zebra_evpn *zevpn,
old_bgp_ready = false;
}
if (old_zmac) {
+ is_old_mac_dup = CHECK_FLAG(old_zmac->flags, ZEBRA_MAC_DUPLICATE);
old_mac_seq = CHECK_FLAG(old_zmac->flags,
ZEBRA_MAC_REMOTE)
? old_zmac->rem_seq
@@ -1437,6 +1439,7 @@ int zebra_evpn_local_neigh_update(struct zebra_evpn *zevpn,
!= 0) {
old_zmac = n->mac;
if (old_zmac) {
+ is_old_mac_dup = CHECK_FLAG(old_zmac->flags, ZEBRA_MAC_DUPLICATE);
old_mac_seq =
CHECK_FLAG(old_zmac->flags,
ZEBRA_MAC_REMOTE)
@@ -1499,7 +1502,7 @@ int zebra_evpn_local_neigh_update(struct zebra_evpn *zevpn,
/* Check old and/or new MAC detected as duplicate mark
* the neigh as duplicate
*/
- if (zebra_evpn_ip_inherit_dad_from_mac(zvrf, old_zmac, zmac, n)) {
+ if (zebra_evpn_ip_inherit_dad_from_mac(zvrf, is_old_mac_dup, zmac, n)) {
flog_warn(
EC_ZEBRA_DUP_IP_INHERIT_DETECTED,
"VNI %u: MAC %pEA IP %pIA detected as duplicate during local update, inherit duplicate from MAC",
@@ -2034,6 +2037,7 @@ void zebra_evpn_neigh_remote_macip_add(struct zebra_evpn *zevpn,
bool do_dad = false;
bool is_dup_detect = false;
bool is_router;
+ bool is_old_mac_dup = false;
assert(mac);
is_router = !!CHECK_FLAG(flags, ZEBRA_MACIP_TYPE_ROUTER_FLAG);
@@ -2086,6 +2090,7 @@ void zebra_evpn_neigh_remote_macip_add(struct zebra_evpn *zevpn,
old_mac =
zebra_evpn_mac_lookup(zevpn, &n->emac);
if (old_mac) {
+ is_old_mac_dup = CHECK_FLAG(old_mac->flags, ZEBRA_MAC_DUPLICATE);
listnode_delete(old_mac->neigh_list, n);
n->mac = NULL;
zebra_evpn_deref_ip2mac(zevpn, old_mac);
@@ -2128,7 +2133,7 @@ void zebra_evpn_neigh_remote_macip_add(struct zebra_evpn *zevpn,
/* Check old or new MAC detected as duplicate,
* inherit duplicate flag to this neigh.
*/
- if (zebra_evpn_ip_inherit_dad_from_mac(zvrf, old_mac, mac, n)) {
+ if (zebra_evpn_ip_inherit_dad_from_mac(zvrf, is_old_mac_dup, mac, n)) {
flog_warn(
EC_ZEBRA_DUP_IP_INHERIT_DETECTED,
"VNI %u: MAC %pEA IP %pIA detected as duplicate during remote update, inherit duplicate from MAC",