summaryrefslogtreecommitdiff
path: root/isisd
diff options
context:
space:
mode:
authorCarmine Scarpitta <carmine.scarpitta@uniroma2.it>2023-05-25 12:13:33 +0200
committerCarmine Scarpitta <carmine.scarpitta@uniroma2.it>2023-09-11 22:11:42 +0200
commit3740efacfbd41f089f148e5543d064ea3a4b6a51 (patch)
tree2478618af1e5496740881976f6cb856ed6308353 /isisd
parentf912df37de10f67d86e19e945e7cd6895e90174d (diff)
isisd: Add SRv6 End.X SID to IS ext reach Sub-TLVs
Add SRv6 End.X SID Sub-TLV and SRv6 LAN End.X SID Sub-TLV to the Extended IS Reachability Sub-TLVs data structure and perform proper initialization/free when the Sub-TLVs data structure is allocated/destroyed. Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
Diffstat (limited to 'isisd')
-rw-r--r--isisd/isis_tlvs.c15
-rw-r--r--isisd/isis_tlvs.h6
2 files changed, 21 insertions, 0 deletions
diff --git a/isisd/isis_tlvs.c b/isisd/isis_tlvs.c
index d573d4044e..9fc602c209 100644
--- a/isisd/isis_tlvs.c
+++ b/isisd/isis_tlvs.c
@@ -135,6 +135,9 @@ struct isis_ext_subtlvs *isis_alloc_ext_subtlvs(void)
init_item_list(&ext->lan_sid);
ext->aslas = list_new();
+ init_item_list(&ext->srv6_endx_sid);
+ init_item_list(&ext->srv6_lan_endx_sid);
+
admin_group_init(&ext->ext_admin_group);
return ext;
@@ -166,6 +169,18 @@ void isis_del_ext_subtlvs(struct isis_ext_subtlvs *ext)
admin_group_term(&ext->ext_admin_group);
+ /* First, free SRv6 End.X SID and SRv6 LAN End.X SID list if needed */
+ for (item = ext->srv6_endx_sid.head; item; item = next_item) {
+ next_item = item->next;
+ isis_free_subsubtlvs(((struct isis_srv6_endx_sid_subtlv *)item)->subsubtlvs);
+ XFREE(MTYPE_ISIS_SUBTLV, item);
+ }
+ for (item = ext->srv6_lan_endx_sid.head; item; item = next_item) {
+ next_item = item->next;
+ isis_free_subsubtlvs(((struct isis_srv6_lan_endx_sid_subtlv *)item)->subsubtlvs);
+ XFREE(MTYPE_ISIS_SUBTLV, item);
+ }
+
XFREE(MTYPE_ISIS_SUBTLV, ext);
}
diff --git a/isisd/isis_tlvs.h b/isisd/isis_tlvs.h
index 1b48fd579a..138e5bbeae 100644
--- a/isisd/isis_tlvs.h
+++ b/isisd/isis_tlvs.h
@@ -639,6 +639,8 @@ enum ext_subsubtlv_types {
#define EXT_AVA_BW 0x080000
#define EXT_USE_BW 0x100000
#define EXT_EXTEND_ADM_GRP 0x200000
+#define EXT_SRV6_ENDX_SID 0x400000
+#define EXT_SRV6_LAN_ENDX_SID 0x800000
/*
* This structure groups all Extended IS Reachability subTLVs.
@@ -688,6 +690,10 @@ struct isis_ext_subtlvs {
struct isis_item_list lan_sid;
struct list *aslas;
+
+ /* SRv6 End.X & LAN End.X SID */
+ struct isis_item_list srv6_endx_sid;
+ struct isis_item_list srv6_lan_endx_sid;
};
/* RFC 8919 */