diff options
| -rw-r--r-- | zebra/interface.c | 16 |
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++; } |
