#ifndef FABRICD
size_t fad_sz;
#endif /* ifndef FABRICD */
- int nb_algo;
+ int nb_algo, nb_msd;
if ((router_cap->srgb.range_size != 0) &&
(router_cap->srgb.lower_bound != 0)) {
}
#endif /* ifndef FABRICD */
+ if (router_cap->srv6_cap.is_srv6_capable) {
+ sz += ISIS_SUBTLV_TYPE_FIELD_SIZE +
+ ISIS_SUBTLV_LENGTH_FIELD_SIZE +
+ ISIS_SUBTLV_SRV6_CAPABILITIES_SIZE;
+
+ nb_algo = isis_tlvs_sr_algo_count(router_cap);
+ if (nb_algo != 0)
+ sz += ISIS_SUBTLV_TYPE_FIELD_SIZE +
+ ISIS_SUBTLV_LENGTH_FIELD_SIZE + nb_algo;
+
+ nb_msd = router_cap->srv6_msd.max_seg_left_msd +
+ router_cap->srv6_msd.max_end_pop_msd +
+ router_cap->srv6_msd.max_h_encaps_msd +
+ router_cap->srv6_msd.max_end_d_msd;
+ if (nb_msd != 0)
+ sz += ISIS_SUBTLV_TYPE_FIELD_SIZE +
+ ISIS_SUBTLV_LENGTH_FIELD_SIZE +
+ (ISIS_SUBTLV_NODE_MSD_TYPE_SIZE +
+ ISIS_SUBTLV_NODE_MSD_VALUE_SIZE) *
+ nb_msd;
+ }
+
return sz;
}
/* subTLVs size for TE and SR */
enum ext_subtlv_size {
+ /* Sub-TLV Type and Length fields */
+ ISIS_SUBTLV_TYPE_FIELD_SIZE = 1,
+ ISIS_SUBTLV_LENGTH_FIELD_SIZE = 1,
+
/* RFC 5307 */
ISIS_SUBTLV_LLRI_SIZE = 8,
/* RFC 8491 */
ISIS_SUBTLV_NODE_MSD_SIZE = 2,
+ ISIS_SUBTLV_NODE_MSD_TYPE_SIZE = 1,
+ ISIS_SUBTLV_NODE_MSD_VALUE_SIZE = 1,
/* RFC 8667 sections #2 & #3 */
ISIS_SUBTLV_SID_LABEL_SIZE = 3,