Commit Graph

25 Commits

Author SHA1 Message Date
Carmine Scarpitta
ccd82b3471 isisd: Fix style warnings reported by CI
Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2023-11-03 13:20:29 +01:00
Carmine Scarpitta
7e5f1a0bb4 isisd: Fix openfabric crash
`isis_srv6_area_init` should not use `yang_get_default_*` functions for
fabricd.

Fixes: https://github.com/FRRouting/frr/issues/14722

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2023-11-03 13:19:24 +01:00
Carmine Scarpitta
bfec26bc7a isisd: Make SRv6 interface configurable
Add CLI command and functions to configure the interface used for
installing SRv6 SIDs into Linux data plane

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 22:11:51 +02:00
Carmine Scarpitta
bdbbb26d55 isisd: Make SRv6 Node MSDs customizable
Add CLI commands to customize SRv6 Node MSD values.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 22:11:50 +02:00
Carmine Scarpitta
71b8056d6d isisd: Initialize/free SRv6 adjacency SIDs list
Initialize/free SRv6 adjacency SIDs list when an IS-IS area is
created/destroyed.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 22:11:48 +02:00
Carmine Scarpitta
455aded931 isisd: Extend sid_exist to consider adj SIDs
The function `sid_exist` verifies if a given SRv6 SID has already been
allocated for a given IS-IS area. This commit extends `sid_exist` to
also consider adjacency SIDs when checking for the existence of the SID.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 22:11:48 +02:00
Carmine Scarpitta
ecb2675f1e isisd: Add support for SRv6 Adjacency SIDs
An SRv6 adjacency SID is a SID that is associated with a particular
adjacency. Adjacency SIDs are advertised using the SRv6 End.X SID
Sub-TLV (RFC 9352 section #8.1) or SRv6 LAN End.X SID Sub-TLV (RFC 9352
section #8.2).

This commit defines the following Adj SIDs management functions:
* srv6_endx_sid_add_single: add a new SRv6 Adjacency SID
* srv6_endx_sid_del: delete an SRv6 Adjacency SID
* isis_srv6_endx_sid_find: lookup SRv6 End.X SID by type

It also attaches some callbacks to the hooks isis_adj_state_change_hook,
isis_adj_ip_enabled_hook, isis_adj_ip_disabled_hook, which are
responsible for installing/removing an SRv6 Adjacency SID automatically
when the state of an IS-IS adjacency changes.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 22:11:47 +02:00
Carmine Scarpitta
7e340af13b isisd: Add func to fill in SID Struct Sub-Sub-TLV
Add a function to fill in an SRv6 SID Structure Sub-Sub-TLV with
information from an SRv6 SID (RFC 9352 section #9).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 22:11:37 +02:00
Carmine Scarpitta
43786ccfdc isisd: Add func to fill in an SRv6 End SID Sub-TLV
Add a function to fill in an SRv6 End SID Sub-TLV with information from
an SRv6 End SID (RFC 9352 section #7.2).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 22:11:37 +02:00
Carmine Scarpitta
6cd23c6d95 isisd: Add function to fill in an SRv6 Locator TLV
Add a function to fill in an SRv6 Locator TLV with information from an
SRv6 locator (RFC 9352 section #7.1).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 22:11:37 +02:00
Carmine Scarpitta
95af6c11c8 isisd: Remove SRv6 End SIDs after locator unset
When an SRv6 locator is unset, remove all the SRv6 End SIDs allocated
from that locator.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:07 +02:00
Carmine Scarpitta
8d1af2a4b0 isisd: Add function to allocate an SRv6 SID
Add a function to allocate an SRv6 SID from an SRv6 locator chunk owned
by IS-IS. The chunk must be allocated by a previous call to
`isis_zebra_srv6_manager_get_locator_chunk()`.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:00 +02:00
Carmine Scarpitta
26d7806d20 isisd: Add SRv6 SIDs to SRv6 configuration
Add the list of SRv6 SIDs allocated by the IS-IS instance to the per-area
SRv6 configuration. The list is area-specific. Each IS-IS area has its
own SRv6 SIDs list. The list is initialized when an IS-IS area is
created and freed when an IS-IS area is destroyed.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:00 +02:00
Carmine Scarpitta
f6238e10b0 isisd: Add function to free an SRv6 SID
Add a function to free an SRv6 SID.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:34:59 +02:00
Carmine Scarpitta
acb78513a5 isisd: Add new memtype for IS-IS SRv6 SID
Define a new memtype `MTYPE_ISIS_SRV6_SID` used to allocate objects of
type `IS-IS SRv6 SID`.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:34:59 +02:00
Carmine Scarpitta
f49937e340 isisd: Add func to unset the SRv6 locator
Add a function to unset the SRv6 locator for a specific IS-IS area.

This function calls `isis_zebra_srv6_manager_release_locator_chunk()` to
ask zebra to release the locator chunk owned by IS-IS and removes the
chunk from the area's chunks list.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:34:55 +02:00
Carmine Scarpitta
2e8d254ac7 isisd: Add SRv6 locator chunks to SRv6 config
Add a list of SRv6 locator chunks allocated to a specific IS-IS area.
The list is initialized when the IS-IS area is created and freed when
the IS-IS area is destroyed. Subsequent commits will introduce the
possibility to allocate and release locator chunks.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:34:52 +02:00
Carmine Scarpitta
fb9eb231f4 isisd: Add CLI command to show SRv6 node info
Add a CLI command to print SRv6 capabilities, algorithms and MSDs
supported by the IS-IS nodes.

Example:

r1# show isis segment-routing srv6 node
Area FOO:
 IS-IS L1 SRv6-Nodes:

 IS-IS L2 SRv6-Nodes:

 System ID       Algorithm  SRH Max SL  SRH Max End Pop  SRH Max H.encaps  SRH Max End D
 -----------------------------------------------------------------------------------------
 1111.1111.1111  SPF        16          0                1                 2
 2222.2222.2222  SPF        16          0                1                 2

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:34:51 +02:00
Carmine Scarpitta
340fdf6a80 isisd: Add support for SRv6 MSDs
Add Maximum SRv6 SID Depths (MSDs) parameters as per RFC 9352 section #4
to the per-area IS-IS SRv6 Data Base. Currently the MSD values are
hardcoded.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-08-04 09:29:16 +02:00
Carmine Scarpitta
5e21aaf1e7 isisd: Add function to terminate the SRv6 module
`isis_srv6_area_term()` cleans up SRv6 information for a specific
IS-IS area. This commit adds a new function `isis_srv6_term()` that will
be used to perform global SRv6 cleanup.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-08-04 09:29:16 +02:00
Carmine Scarpitta
5fb8d335ca isisd: Add function to initialize the SRv6 module
`isis_srv6_area_init()` initializes SRv6 information for a specific
IS-IS area. This commit adds a new function `isis_srv6_init()` that will
be used to perform global SRv6 initialization.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-08-04 09:29:16 +02:00
Carmine Scarpitta
3ffdeb64b7 isisd: Init SRv6 enabled flag to its default value
When SRv6 is initialized on a given IS-IS area, set the administrative
enabled status to the default value defined by the YANG model.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-08-04 09:29:15 +02:00
Carmine Scarpitta
9c51247ea3 isisd: Add func to terminate SRv6 for a given area
Add function to terminate SRv6 for a given IS-IS area.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-08-04 09:29:15 +02:00
Carmine Scarpitta
0359045d97 isisd: Add function to initialize SRv6 DB
Add function to initialize per-area SRv6 DB (`area->srv6db`).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-08-04 09:29:15 +02:00
Carmine Scarpitta
d52c6c88b2 isisd: Add isis_srv6.[c, h] files
Add `isis_srv6.c` and `isis_srv6.h` files needed to support SRv6 in IS-IS
(as per RFC 9352).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-08-04 09:29:15 +02:00