mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 03:53:38 +00:00
zebra: check other SAFIs when removing gone client
When a client disconnects, we need to check & remove NHT entries for other SAFIs too. Otherwise we crash later trying to access stale data. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
47fd8abae1
commit
bc9b1cbfae
@ -1337,7 +1337,7 @@ static void print_rnh(struct route_node *rn, struct vty *vty)
|
|||||||
vty_out(vty, "\n");
|
vty_out(vty, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int zebra_cleanup_rnh_client(vrf_id_t vrf_id, afi_t afi,
|
static int zebra_cleanup_rnh_client(vrf_id_t vrf_id, afi_t afi, safi_t safi,
|
||||||
struct zserv *client)
|
struct zserv *client)
|
||||||
{
|
{
|
||||||
struct route_table *ntable;
|
struct route_table *ntable;
|
||||||
@ -1352,7 +1352,7 @@ static int zebra_cleanup_rnh_client(vrf_id_t vrf_id, afi_t afi,
|
|||||||
zebra_route_string(client->proto), afi2str(afi));
|
zebra_route_string(client->proto), afi2str(afi));
|
||||||
}
|
}
|
||||||
|
|
||||||
ntable = get_rnh_table(vrf_id, afi, SAFI_UNICAST);
|
ntable = get_rnh_table(vrf_id, afi, safi);
|
||||||
if (!ntable) {
|
if (!ntable) {
|
||||||
zlog_debug("cleanup_rnh_client: rnh table not found");
|
zlog_debug("cleanup_rnh_client: rnh table not found");
|
||||||
return -1;
|
return -1;
|
||||||
@ -1377,9 +1377,14 @@ static int zebra_client_cleanup_rnh(struct zserv *client)
|
|||||||
RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) {
|
RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) {
|
||||||
zvrf = vrf->info;
|
zvrf = vrf->info;
|
||||||
if (zvrf) {
|
if (zvrf) {
|
||||||
zebra_cleanup_rnh_client(zvrf_id(zvrf), AFI_IP, client);
|
zebra_cleanup_rnh_client(zvrf_id(zvrf), AFI_IP,
|
||||||
|
SAFI_UNICAST, client);
|
||||||
|
zebra_cleanup_rnh_client(zvrf_id(zvrf), AFI_IP,
|
||||||
|
SAFI_MULTICAST, client);
|
||||||
zebra_cleanup_rnh_client(zvrf_id(zvrf), AFI_IP6,
|
zebra_cleanup_rnh_client(zvrf_id(zvrf), AFI_IP6,
|
||||||
client);
|
SAFI_UNICAST, client);
|
||||||
|
zebra_cleanup_rnh_client(zvrf_id(zvrf), AFI_IP6,
|
||||||
|
SAFI_MULTICAST, client);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user