summaryrefslogtreecommitdiffstats
path: root/isisd/isis_zebra.h
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2019-08-04 03:02:37 +0200
committerOlivier Dugeon <olivier.dugeon@orange.com>2020-04-30 12:15:47 +0200
commit26f6acafc369f1c126870b4282d5e252cc830f26 (patch)
treea61a225ed9eddcd972abf6216e533606e559789c /isisd/isis_zebra.h
parentisisd: add segment-routing CLI commands (diff)
downloadfrr-26f6acafc369f1c126870b4282d5e252cc830f26.tar.xz
frr-26f6acafc369f1c126870b4282d5e252cc830f26.zip
isisd: add support for segment routing
This is an implementation of the IS-IS SR draft [1] for FRR. The following features are supported: * IPv4 and IPv6 Prefix-SIDs; * IPv4 and IPv6 Adj-SIDs and LAN-Adj-SIDs; * Index and absolute labels; * The no-php and explicit-null Prefix-SID flags; * Full integration with the Label Manager. Known limitations: * No support for Anycast-SIDs; * No support for the SID/Label Binding TLV (required for LDP interop). * No support for persistent Adj-SIDs; * No support for multiple SRGBs. [1] draft-ietf-isis-segment-routing-extensions-25 Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com> Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'isisd/isis_zebra.h')
-rw-r--r--isisd/isis_zebra.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/isisd/isis_zebra.h b/isisd/isis_zebra.h
index d00f348c8..cca2b0881 100644
--- a/isisd/isis_zebra.h
+++ b/isisd/isis_zebra.h
@@ -24,10 +24,18 @@
extern struct zclient *zclient;
-void isis_zebra_init(struct thread_master *);
+struct label_chunk {
+ uint32_t start;
+ uint32_t end;
+ uint64_t used_mask;
+};
+#define CHUNK_SIZE 64
+
+void isis_zebra_init(struct thread_master *master, int instance);
void isis_zebra_stop(void);
struct isis_route_info;
+struct sr_prefix;
void isis_zebra_route_add_route(struct prefix *prefix,
struct prefix_ipv6 *src_p,
@@ -35,8 +43,14 @@ void isis_zebra_route_add_route(struct prefix *prefix,
void isis_zebra_route_del_route(struct prefix *prefix,
struct prefix_ipv6 *src_p,
struct isis_route_info *route_info);
+void isis_zebra_install_prefix_sid(const struct sr_prefix *srp);
+void isis_zebra_uninstall_prefix_sid(const struct sr_prefix *srp);
int isis_distribute_list_update(int routetype);
void isis_zebra_redistribute_set(afi_t afi, int type);
void isis_zebra_redistribute_unset(afi_t afi, int type);
+int isis_zebra_request_label_range(uint32_t base, uint32_t chunk_size);
+void isis_zebra_release_label_range(uint32_t start, uint32_t end);
+mpls_label_t isis_zebra_request_dynamic_label(void);
+void isis_zebra_release_dynamic_label(mpls_label_t label);
#endif /* _ZEBRA_ISIS_ZEBRA_H */