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 */