From a1be1942f54a88f3846b4870d6bef39793fc6819 Mon Sep 17 00:00:00 2001 From: Carmine Scarpitta Date: Tue, 30 May 2023 18:55:44 +0200 Subject: [PATCH] isisd: Remove SIDs when parent locator is deleted Clean up SRv6 SIDs when the parent locator is deleted. Signed-off-by: Carmine Scarpitta --- isisd/isis_zebra.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c index cce0bd061e..9df030345a 100644 --- a/isisd/isis_zebra.c +++ b/isisd/isis_zebra.c @@ -1262,6 +1262,8 @@ static int isis_zebra_process_srv6_locator_delete(ZAPI_CALLBACK_ARGS) struct isis_area *area; struct listnode *node, *nnode; struct srv6_locator_chunk *chunk; + struct isis_srv6_sid *sid; + struct srv6_adjacency *sra; /* Decode the received zebra message */ if (zapi_srv6_locator_decode(zclient->ibuf, &loc) < 0) @@ -1280,6 +1282,28 @@ static int isis_zebra_process_srv6_locator_delete(ZAPI_CALLBACK_ARGS) sizeof(area->srv6db.config.srv6_locator_name)) != 0) continue; + /* Delete SRv6 SIDs */ + for (ALL_LIST_ELEMENTS(area->srv6db.srv6_sids, node, nnode, + sid)) { + + sr_debug( + "Deleting SRv6 SID (locator %s, sid %pI6) from IS-IS area %s", + area->srv6db.config.srv6_locator_name, + &sid->sid, area->area_tag); + + /* Uninstall the SRv6 SID from the forwarding plane + * through Zebra */ + isis_zebra_srv6_sid_uninstall(area, sid); + + listnode_delete(area->srv6db.srv6_sids, sid); + isis_srv6_sid_free(sid); + } + + /* Uninstall all local Adjacency-SIDs. */ + for (ALL_LIST_ELEMENTS(area->srv6db.srv6_endx_sids, node, nnode, + sra)) + srv6_endx_sid_del(sra); + /* Free the SRv6 locator chunks */ for (ALL_LIST_ELEMENTS(area->srv6db.srv6_locator_chunks, node, nnode, chunk)) {