summaryrefslogtreecommitdiff
path: root/isisd
diff options
context:
space:
mode:
authorCarmine Scarpitta <carmine.scarpitta@uniroma2.it>2023-05-30 18:55:44 +0200
committerCarmine Scarpitta <carmine.scarpitta@uniroma2.it>2023-09-11 22:11:49 +0200
commita1be1942f54a88f3846b4870d6bef39793fc6819 (patch)
treeab3cb07959432798165d7ceefe4423831c86ab53 /isisd
parent71b8056d6d549c6f5baadeee4519cbf50ccd61a1 (diff)
isisd: Remove SIDs when parent locator is deleted
Clean up SRv6 SIDs when the parent locator is deleted. Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
Diffstat (limited to 'isisd')
-rw-r--r--isisd/isis_zebra.c24
1 files changed, 24 insertions, 0 deletions
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)) {