summaryrefslogtreecommitdiff
path: root/zebra/interface.c
diff options
context:
space:
mode:
authorLou Berger <lberger@labn.net>2018-04-10 11:57:13 -0400
committerGitHub <noreply@github.com>2018-04-10 11:57:13 -0400
commitebf58e2e481e3be7d9649b9923a8dc2f015a4b11 (patch)
tree7ade500ad3876b2cf6993faba792be45fbed66ac /zebra/interface.c
parentaa2fc55b2096ee9704ddb74f200672ae999d9ab9 (diff)
parent20089ae2e41621e3e63aab67170d71bdf8605641 (diff)
Merge pull request #2009 from donaldsharp/self_originate
zebra: Notice when our route is deleted and re-install.
Diffstat (limited to 'zebra/interface.c')
-rw-r--r--zebra/interface.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/zebra/interface.c b/zebra/interface.c
index 4f761a5e99..6f59a2d399 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -825,6 +825,7 @@ void if_nbr_ipv6ll_to_ipv4ll_neigh_update(struct interface *ifp,
struct in6_addr *address, int add)
{
struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);
+ struct zebra_if *zif = ifp->info;
char buf[16] = "169.254.0.1";
struct in_addr ipv4_ll;
char mac[6];
@@ -845,6 +846,16 @@ void if_nbr_ipv6ll_to_ipv4ll_neigh_update(struct interface *ifp,
/* Add arp record */
kernel_neigh_update(add, ifp->ifindex, ipv4_ll.s_addr, mac, 6, ns_id);
+
+ /*
+ * We need to note whether or not we originated a v6
+ * neighbor entry for this interface. So that when
+ * someone unwisely accidently deletes this entry
+ * we can shove it back in.
+ */
+ zif->v6_2_v4_ll_neigh_entry = !!add;
+ memcpy(&zif->v6_2_v4_ll_addr6, address, sizeof(*address));
+
zvrf->neigh_updates++;
}