summaryrefslogtreecommitdiff
path: root/zebra/zebra_srv6.h
diff options
context:
space:
mode:
authorCarmine Scarpitta <cscarpit@cisco.com>2024-06-06 17:23:11 +0200
committerCarmine Scarpitta <cscarpit@cisco.com>2024-06-13 14:54:16 +0200
commit1298867671f7fe76c65730afbb9ae54dcd7264be (patch)
tree90fc8f8da99d1f355b01ed5068102a673af35b94 /zebra/zebra_srv6.h
parent021386a34eb49893ce6b7df16c2fe1096a8fedf6 (diff)
zebra: Add support for SRv6 SID formats
Add functionalities to manage SRv6 SID formats (register / unregister / lookup) and create two SID formats upon SRv6 Manager initialization: `uncompressed-f4024` and `usid-f3216`. In future commits, we will add the CLI to allow the user to choose between the two formats. Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Diffstat (limited to 'zebra/zebra_srv6.h')
-rw-r--r--zebra/zebra_srv6.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/zebra/zebra_srv6.h b/zebra/zebra_srv6.h
index 21936c3323..a645c5cc0d 100644
--- a/zebra/zebra_srv6.h
+++ b/zebra/zebra_srv6.h
@@ -16,12 +16,37 @@
#include <pthread.h>
#include <plist.h>
+/* Default config for SRv6 SID `usid-f3216` format */
+#define ZEBRA_SRV6_SID_FORMAT_USID_F3216_NAME "usid-f3216"
+#define ZEBRA_SRV6_SID_FORMAT_USID_F3216_BLOCK_LEN 32
+#define ZEBRA_SRV6_SID_FORMAT_USID_F3216_NODE_LEN 16
+#define ZEBRA_SRV6_SID_FORMAT_USID_F3216_FUNCTION_LEN 16
+#define ZEBRA_SRV6_SID_FORMAT_USID_F3216_ARGUMENT_LEN 0
+#define ZEBRA_SRV6_SID_FORMAT_USID_F3216_LIB_START 0xE000
+#define ZEBRA_SRV6_SID_FORMAT_USID_F3216_ELIB_START 0xFE00
+#define ZEBRA_SRV6_SID_FORMAT_USID_F3216_ELIB_END 0xFEFF
+#define ZEBRA_SRV6_SID_FORMAT_USID_F3216_WLIB_START 0xFFF0
+#define ZEBRA_SRV6_SID_FORMAT_USID_F3216_WLIB_END 0xFFF7
+#define ZEBRA_SRV6_SID_FORMAT_USID_F3216_EWLIB_START 0xFFF7
+
+/* Default config for SRv6 SID `uncompressed` format */
+#define ZEBRA_SRV6_SID_FORMAT_UNCOMPRESSED_F4024_NAME "uncompressed-f4024"
+#define ZEBRA_SRV6_SID_FORMAT_UNCOMPRESSED_F4024_BLOCK_LEN 40
+#define ZEBRA_SRV6_SID_FORMAT_UNCOMPRESSED_F4024_NODE_LEN 24
+#define ZEBRA_SRV6_SID_FORMAT_UNCOMPRESSED_F4024_FUNCTION_LEN 16
+#define ZEBRA_SRV6_SID_FORMAT_UNCOMPRESSED_F4024_ARGUMENT_LEN 0
+#define ZEBRA_SRV6_SID_FORMAT_UNCOMPRESSED_F4024_EXPLICIT_RANGE_START 0xFF00
+#define ZEBRA_SRV6_SID_FORMAT_UNCOMPRESSED_F4024_FUNC_UNRESERVED_MIN 0x40
+
/* SRv6 instance structure. */
struct zebra_srv6 {
struct list *locators;
/* Source address for SRv6 encapsulation */
struct in6_addr encap_src_addr;
+
+ /* SRv6 SID formats */
+ struct list *sid_formats;
};
/* declare hooks for the basic API, so that it can be specialized or served
@@ -74,4 +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);
+
#endif /* _ZEBRA_SRV6_H */