lib: Add CLI nodes to support SRv6 SID format

Add CLI commands to support overriding default configuration of the SID
format.

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
This commit is contained in:
Carmine Scarpitta 2024-03-22 15:56:15 +01:00
parent 1298867671
commit 35f4bedfa3
3 changed files with 21 additions and 19 deletions

View File

@ -161,6 +161,9 @@ enum node_type {
SRV6_LOCS_NODE, /* SRv6 locators node */
SRV6_LOC_NODE, /* SRv6 locator node */
SRV6_ENCAP_NODE, /* SRv6 encapsulation node */
SRV6_SID_FORMATS_NODE, /* SRv6 SID formats config node */
SRV6_SID_FORMAT_USID_F3216_NODE, /* SRv6 uSID f3216 format config node */
SRV6_SID_FORMAT_UNCOMPRESSED_F4024_NODE, /* SRv6 uncompressed f4024 format config node */
VTY_NODE, /* Vty node. */
FPM_NODE, /* Dataplane FPM node. */
LINK_PARAMS_NODE, /* Link-parameters node */

View File

@ -92,7 +92,7 @@ static int zebra_srv6_cleanup(struct zserv *client)
/* --- Zebra SRv6 SID format management functions --------------------------- */
void zebra_srv6_sid_format_register(struct zebra_srv6_sid_format *format)
void zebra_srv6_sid_format_register(struct srv6_sid_format *format)
{
struct zebra_srv6 *srv6 = zebra_srv6_get_default();
@ -102,17 +102,17 @@ void zebra_srv6_sid_format_register(struct zebra_srv6_sid_format *format)
listnode_add(srv6->sid_formats, format);
}
void zebra_srv6_sid_format_unregister(struct zebra_srv6_sid_format *format)
void zebra_srv6_sid_format_unregister(struct srv6_sid_format *format)
{
struct zebra_srv6 *srv6 = zebra_srv6_get_default();
listnode_delete(srv6->sid_formats, format);
}
struct zebra_srv6_sid_format *zebra_srv6_sid_format_lookup(const char *name)
struct srv6_sid_format *zebra_srv6_sid_format_lookup(const char *name)
{
struct zebra_srv6 *srv6 = zebra_srv6_get_default();
struct zebra_srv6_sid_format *format;
struct srv6_sid_format *format;
struct listnode *node;
for (ALL_LIST_ELEMENTS_RO(srv6->sid_formats, node, format))
@ -125,12 +125,11 @@ struct zebra_srv6_sid_format *zebra_srv6_sid_format_lookup(const char *name)
/*
* Helper function to create the SRv6 compressed format `usid-f3216`.
*/
static struct zebra_srv6_sid_format *create_srv6_sid_format_usid_f3216(void)
static struct srv6_sid_format *create_srv6_sid_format_usid_f3216(void)
{
struct zebra_srv6_sid_format *format = NULL;
struct srv6_sid_format *format = NULL;
format = zebra_srv6_sid_format_alloc(
ZEBRA_SRV6_SID_FORMAT_USID_F3216_NAME);
format = srv6_sid_format_alloc(ZEBRA_SRV6_SID_FORMAT_USID_F3216_NAME);
format->type = SRV6_SID_FORMAT_TYPE_USID;
@ -158,11 +157,11 @@ static struct zebra_srv6_sid_format *create_srv6_sid_format_usid_f3216(void)
/*
* Helper function to create the SRv6 uncompressed format.
*/
static struct zebra_srv6_sid_format *create_srv6_sid_format_uncompressed(void)
static struct srv6_sid_format *create_srv6_sid_format_uncompressed(void)
{
struct zebra_srv6_sid_format *format = NULL;
struct srv6_sid_format *format = NULL;
format = zebra_srv6_sid_format_alloc(
format = srv6_sid_format_alloc(
ZEBRA_SRV6_SID_FORMAT_UNCOMPRESSED_F4024_NAME);
format->type = ZEBRA_SRV6_SID_FORMAT_TYPE_UNCOMPRESSED;
@ -314,8 +313,8 @@ struct zebra_srv6 srv6;
struct zebra_srv6 *zebra_srv6_get_default(void)
{
static bool first_execution = true;
struct zebra_srv6_sid_format *format_usidf3216;
struct zebra_srv6_sid_format *format_uncompressed;
struct srv6_sid_format *format_usidf3216;
struct srv6_sid_format *format_uncompressed;
if (first_execution) {
first_execution = false;
@ -323,7 +322,7 @@ struct zebra_srv6 *zebra_srv6_get_default(void)
/* Initialize list of SID formats */
srv6.sid_formats = list_new();
srv6.sid_formats->del = delete_zebra_srv6_sid_format;
srv6.sid_formats->del = delete_srv6_sid_format;
/* Create SID format `usid-f3216` */
format_usidf3216 = create_srv6_sid_format_usid_f3216();
@ -536,7 +535,7 @@ void zebra_srv6_encap_src_addr_unset(void)
void zebra_srv6_terminate(void)
{
struct srv6_locator *locator;
struct zebra_srv6_sid_format *format;
struct srv6_sid_format *format;
if (srv6.locators) {
while (listcount(srv6.locators)) {
@ -555,7 +554,7 @@ void zebra_srv6_terminate(void)
format = listnode_head(srv6.sid_formats);
zebra_srv6_sid_format_unregister(format);
zebra_srv6_sid_format_free(format);
srv6_sid_format_free(format);
}
list_delete(&srv6.sid_formats);

View File

@ -99,8 +99,8 @@ extern int release_daemon_srv6_locator_chunks(struct zserv *client);
extern void zebra_srv6_encap_src_addr_set(struct in6_addr *src_addr);
extern void zebra_srv6_encap_src_addr_unset(void);
void zebra_srv6_sid_format_register(struct zebra_srv6_sid_format *format);
void zebra_srv6_sid_format_unregister(struct zebra_srv6_sid_format *format);
struct zebra_srv6_sid_format *zebra_srv6_sid_format_lookup(const char *name);
void zebra_srv6_sid_format_register(struct srv6_sid_format *format);
void zebra_srv6_sid_format_unregister(struct srv6_sid_format *format);
struct srv6_sid_format *zebra_srv6_sid_format_lookup(const char *name);
#endif /* _ZEBRA_SRV6_H */