diff options
| author | Donatas Abraitis <donatas@opensourcerouting.org> | 2023-10-31 17:09:48 +0200 |
|---|---|---|
| committer | Donatas Abraitis <donatas@opensourcerouting.org> | 2023-11-06 15:00:59 +0200 |
| commit | a35bb7e2a89097dc90105a75cbd68618fb74451c (patch) | |
| tree | a7d89531524eb091432c75fae012f529e9f5fd5b | |
| parent | c772c52e625e37af929d65e5e105c6508c9ea6a7 (diff) | |
zebra: Remove static ARP entries on interface down events
Without this patch, static ARP entries remain active even if the interface is
down, but the kernel already removed them.
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
| -rw-r--r-- | zebra/redistribute.c | 3 | ||||
| -rw-r--r-- | zebra/zebra_neigh.c | 13 | ||||
| -rw-r--r-- | zebra/zebra_neigh.h | 1 |
3 files changed, 17 insertions, 0 deletions
diff --git a/zebra/redistribute.c b/zebra/redistribute.c index 71e7956324..7d3a9617a4 100644 --- a/zebra/redistribute.c +++ b/zebra/redistribute.c @@ -28,6 +28,7 @@ #include "zebra/zapi_msg.h" #include "zebra/zebra_vxlan.h" #include "zebra/zebra_errors.h" +#include "zebra/zebra_neigh.h" #define ZEBRA_PTM_SUPPORT @@ -522,6 +523,8 @@ void zebra_interface_down_update(struct interface *ifp) zsend_interface_update(ZEBRA_INTERFACE_DOWN, client, ifp); } + + zebra_neigh_del_all(ifp); } /* Interface information update. */ diff --git a/zebra/zebra_neigh.c b/zebra/zebra_neigh.c index 0c3fb97afd..941088afd6 100644 --- a/zebra/zebra_neigh.c +++ b/zebra/zebra_neigh.c @@ -152,6 +152,19 @@ void zebra_neigh_del(struct interface *ifp, struct ipaddr *ip) zebra_neigh_free(n); } +/* kernel neigh delete all for a given interface */ +void zebra_neigh_del_all(struct interface *ifp) +{ + struct zebra_neigh_ent *n, *nn; + + if (IS_ZEBRA_DEBUG_NEIGH) + zlog_debug("zebra neigh delete all for interface %s/%d", + ifp->name, ifp->ifindex); + + RB_FOREACH_SAFE (n, zebra_neigh_rb_head, &zneigh_info->neigh_rb_tree, nn) + zebra_neigh_del(ifp, &n->ip); +} + /* kernel neigh add */ void zebra_neigh_add(struct interface *ifp, struct ipaddr *ip, struct ethaddr *mac) diff --git a/zebra/zebra_neigh.h b/zebra/zebra_neigh.h index b957b5efe5..adc5f94f76 100644 --- a/zebra/zebra_neigh.h +++ b/zebra/zebra_neigh.h @@ -43,6 +43,7 @@ struct zebra_neigh_info { extern void zebra_neigh_add(struct interface *ifp, struct ipaddr *ip, struct ethaddr *mac); extern void zebra_neigh_del(struct interface *ifp, struct ipaddr *ip); +extern void zebra_neigh_del_all(struct interface *ifp); extern void zebra_neigh_show(struct vty *vty); extern void zebra_neigh_init(void); extern void zebra_neigh_terminate(void); |
