summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zebra/interface.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/zebra/interface.c b/zebra/interface.c
index 26b2433826..11d02f6b9d 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -769,8 +769,20 @@ void if_nbr_ipv6ll_to_ipv4ll_neigh_update(struct interface *ifp,
inet_pton(AF_INET, buf, &ipv4_ll);
- ipv6_ll_address_to_mac(address, (u_char *)mac);
- kernel_neigh_update(add, ifp->ifindex, ipv4_ll.s_addr, mac, 6);
+ ipv6_ll_address_to_mac(address, (u_char *)mac);
+
+ /*
+ * Remove existed arp record for the interface,
+ * because netlink protocol does not support message for update.
+ * supported commands RTM_NEWNEIGH or RTM_DELNEIGH
+ */
+
+ kernel_neigh_update (0, ifp->ifindex, ipv4_ll.s_addr, mac, 6);
+
+ /*
+ * Add arp record
+ */
+ kernel_neigh_update (add, ifp->ifindex, ipv4_ll.s_addr, mac, 6);
zvrf->neigh_updates++;
}