From 3740efacfbd41f089f148e5543d064ea3a4b6a51 Mon Sep 17 00:00:00 2001 From: Carmine Scarpitta Date: Thu, 25 May 2023 12:13:33 +0200 Subject: [PATCH] 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 --- isisd/isis_tlvs.c | 15 +++++++++++++++ isisd/isis_tlvs.h | 6 ++++++ 2 files changed, 21 insertions(+) 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 */