diff --git a/isisd/isis_srv6.c b/isisd/isis_srv6.c index 588a8fdd40..f8e3ca90d4 100644 --- a/isisd/isis_srv6.c +++ b/isisd/isis_srv6.c @@ -20,6 +20,28 @@ /* Local variables and functions */ DEFINE_MTYPE_STATIC(ISISD, ISIS_SRV6_SID, "ISIS SRv6 Segment ID"); +/** + * Fill in SRv6 Locator TLV with information from an SRv6 locator. + * + * @param loc SRv6 Locator configuration + * @param loc_tlv SRv6 Locator TLV to be updated + */ +void isis_srv6_locator2tlv(const struct isis_srv6_locator *loc, + struct isis_srv6_locator_tlv *loc_tlv) +{ + /* Set SRv6 Locator metric */ + loc_tlv->metric = loc->metric; + + /* Set SRv6 Locator flags */ + loc_tlv->flags = loc->flags; + + /* Set SRv6 Locator algorithm */ + loc_tlv->algorithm = loc->algorithm; + + /* Set SRv6 Locator prefix */ + loc_tlv->prefix = loc->prefix; +} + /** * Unset the SRv6 locator for a given IS-IS area. * diff --git a/isisd/isis_srv6.h b/isisd/isis_srv6.h index 943a6c8b88..80184ffa5e 100644 --- a/isisd/isis_srv6.h +++ b/isisd/isis_srv6.h @@ -12,6 +12,8 @@ #include "lib/srv6.h" +#include "isisd/isis_tlvs.h" + /* Maximum SRv6 SID Depths supported by the router */ #define SRV6_MAX_SEG_LEFT 3 #define SRV6_MAX_END_POP 3 @@ -112,4 +114,7 @@ extern void isis_srv6_area_term(struct isis_area *area); void isis_srv6_init(void); void isis_srv6_term(void); +void isis_srv6_locator2tlv(const struct isis_srv6_locator *loc, + struct isis_srv6_locator_tlv *loc_tlv); + #endif /* _FRR_ISIS_SRV6_H */