]> git.puffer.fish Git - mirror/frr.git/log
mirror/frr.git
19 months agoisisd: Install SRv6 End SID automatically
Carmine Scarpitta [Wed, 22 Feb 2023 10:20:50 +0000 (11:20 +0100)]
isisd: Install SRv6 End SID automatically

When zebra assigns a chunk to IS-IS, zebra sends a
ZEBRA_SRV6_MANAGER_GET_LOCATOR_CHUNK notification to IS-IS.
IS-IS invokes the `isis_zebra_process_srv6_locator_chunk()` callback to
process the received notification.

Actually, `isis_zebra_process_srv6_locator_chunk()` iterates over all
areas of the current IS-IS instance and looks for an area for which the
received chunk was requested.
If a match is found, the new chunk is added to the area's chunk list and
`lsp_regenerate_schedule()` is called to regenerate the LSPs to
advertise the new SRv6 locator.

This commit extends the `isis_zebra_process_srv6_locator_chunk()`
function to automatically allocate an SRv6 End SID from the received
chunk and install it in the data plane.

The SRv6 End SID is the instantiation of a Prefix-SID (RFC 8986 section

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add func to remove SRv6 SID from dplane
Carmine Scarpitta [Wed, 22 Feb 2023 10:19:28 +0000 (11:19 +0100)]
isisd: Add func to remove SRv6 SID from dplane

Add a function to remove an SRv6 SID from the data plane through
zebra.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add func to install SRv6 SID in dplane
Carmine Scarpitta [Wed, 22 Feb 2023 10:18:46 +0000 (11:18 +0100)]
isisd: Add func to install SRv6 SID in dplane

Add a function to install an SRv6 SID in the data plane through
zebra.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add function to send SRv6 SID to zebra
Carmine Scarpitta [Sat, 3 Jun 2023 06:39:33 +0000 (08:39 +0200)]
isisd: Add function to send SRv6 SID to zebra

Add a function to install/remove an SRv6 SID in the forwarding plane
through Zebra.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Uninstall routes only if installed
Carmine Scarpitta [Sat, 10 Jun 2023 07:30:17 +0000 (09:30 +0200)]
isisd: Uninstall routes only if installed

In some cases, IS-IS may attempt to remove routes that have not been
installed before. We can prevent IS-IS from doing this by aborting
`isis_zebra_route_del_route` when the ISIS_ROUTE_FLAG_ZEBRA_SYNCED flag
is unset, meaning that the route is not installed in the kernel.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agozebra: Encode SRv6 flavors in Netlink messages
Carmine Scarpitta [Mon, 20 Mar 2023 21:32:01 +0000 (22:32 +0100)]
zebra: Encode SRv6 flavors in Netlink messages

Encode SRv6 flavors information when building a seg6local nexthop.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agozebra: Resolve default values for SRv6 flavor attr
Carmine Scarpitta [Mon, 20 Mar 2023 20:53:49 +0000 (21:53 +0100)]
zebra: Resolve default values for SRv6 flavor attr

When zebra receives a Netlink message containing a seg6local nexthop,
let's use the default values for optional attributes `lcblock_len` and
`lcnode_fn_len`, if they are not specified.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agozebra: Resolve default values for SRv6 flavor attr
Carmine Scarpitta [Mon, 20 Mar 2023 20:49:07 +0000 (21:49 +0100)]
zebra: Resolve default values for SRv6 flavor attr

When zebra receives a Netlink message containing a seg6local nexthop,
let's use the default values for optional attributes `lcblock_len` and
`lcnode_fn_len`, if they are not specified.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agolib: Define default values for SRv6 flavors attrs
Carmine Scarpitta [Mon, 20 Mar 2023 20:48:27 +0000 (21:48 +0100)]
lib: Define default values for SRv6 flavors attrs

When installing a local SID in the Linux kernel, `lcblock_len` and
`lcnode_fn_len` Netlink attributes are optional. When omitted, the
kernel uses the default values: lcblock_len=32 and lcnode_fn_len=16.
Let's use the same default values in FRR.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agozebra: Extend `rt_netlink.c` to parse SRv6 flavors
Carmine Scarpitta [Mon, 20 Mar 2023 20:35:04 +0000 (21:35 +0100)]
zebra: Extend `rt_netlink.c` to parse SRv6 flavors

Extend the `parse_encap_seg6local` function to parse SRv6 flavors
information contained in the Netlink message.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agolib: Add SRv6 flavors manipulation macros
Carmine Scarpitta [Sat, 15 Apr 2023 16:11:10 +0000 (18:11 +0200)]
lib: Add SRv6 flavors manipulation macros

`struct seg6local_context` contains a `struct seg6local_flavors_info`
that carries SRv6 flavors information. The `seg6local_flavors_info`
data structure contains a field `flv_ops` that indicates which flavors
are enabled for the `seg6local` nexthop. `flv_ops` is a bit-map where
each bit indicates if a particular SRv6 flavor is enabled (bit set to
1) or not (bit set to 0).

This commit defines some macros that can be used to manipulate the SRv6
flavors bit-map:
* CHECK_SRV6_FLV_OP(OPS,OP) - check if a particular flavor is enabled;
* SET_SRV6_FLV_OP(OPS,OP) - enable a particular flavor (OP);
* UNSET_SRV6_FLV_OP(OPS,OP) - disable a particular flavor (OP);
* RESET_SRV6_FLV_OP(OPS) - disable all SRv6 flavors.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agolib: Add SRv6 flavors info to `seg6local` nexthop
Carmine Scarpitta [Mon, 20 Mar 2023 18:05:18 +0000 (19:05 +0100)]
lib: Add SRv6 flavors info to `seg6local` nexthop

The RFC 8986 defines the SRv6 Network Programming concept and specifies
the base set of SRv6 behaviors that enables the creation of
interoperable overlays with underlay optimization. In addition, the RFC
8986 introduces the concept of "flavors", additional operations that can
modify or extend the existing SRv6 behaviors.

In the Linux kernel and in FRR, an SRv6 SID is implemented as a route
associated with a `seg6local` nexthop. A `seg6local` nexthop represents
an SRv6 behavior bound to a SID.

The Linux kernel already supports the ability to add a set of flavors
to a `seg6local` nexthop to modify or extend the associated behavior.

This commit aligns the `seg6local` nexthop implementation of FRR to the
Linux kernel. It extends the `seg6local` nexthop implementation by
adding a struct `seg6local_flavors_info` that encodes the SRv6
flavors information.

Currently, the `seg6local_flavors_info` data structure has three
members:
- `tlv_ops` indicates which flavors are enabled for the `seg6local`
  nexthop;
- `lcblock_len`is the length of the Locator-Block part of the SID;
- `lcnode_func_len` is the length of the combined Node and Function
  parts of the SID.

`lcblock_len` and `lcnode_func_len` define the SID structure. They are
required for some behaviors (e.g. NEXT-C-SID and REPLACE-C-SID). For
other flavors (e.g. PSP, USP, USD) these parameters are not required and
can be omitted.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agolib: Add new enum for seg6local flavor operations
Carmine Scarpitta [Mon, 20 Mar 2023 17:58:49 +0000 (18:58 +0100)]
lib: Add new enum for seg6local flavor operations

The RFC 8986 defines the SRv6 Network Programming concept and specifies
the base set of SRv6 behaviors that enables the creation of
interoperable overlays with underlay optimization. In addition, the RFC
8986 introduces the concept of "flavors", additional operations that can
modify or extend the existing SRv6 behaviors.

This commit adds a new enum type `seg6local_flavor_op` to represent the
SRv6 flavors operations. Currently we define the following flavor
operations:
- PSP (defined in RFC 8986 section #4.16.1)
- USP (defined in RFC 8986 section #4.16.2)
- USD (defined in RFC 8986 section #4.16.3)
- NEXT-C-SID (defined in draft-ietf-spring-srv6-srh-compression-03 #4.1)

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoinclude: Update `seg6_local.h` to last kernel
Carmine Scarpitta [Mon, 20 Mar 2023 17:53:21 +0000 (18:53 +0100)]
include: Update `seg6_local.h` to last kernel

Update `seg6_local.h` to the last kernel version, required to support
SRv6 flavors.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agolib: Add SRv6 behavior codepoints needed for IS-IS
Carmine Scarpitta [Fri, 2 Jun 2023 00:19:17 +0000 (02:19 +0200)]
lib: Add SRv6 behavior codepoints needed for IS-IS

Add more SRv6 endpoint behaviors that are required for implementing
IS-IS SRv6 extensions (RFC 9352).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add function to allocate an SRv6 SID
Carmine Scarpitta [Wed, 22 Feb 2023 09:51:33 +0000 (10:51 +0100)]
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>
19 months agoisisd: Add SRv6 SIDs to SRv6 configuration
Carmine Scarpitta [Thu, 2 Feb 2023 11:32:10 +0000 (12:32 +0100)]
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>
19 months agoisisd: Add function to free an SRv6 SID
Carmine Scarpitta [Wed, 15 Mar 2023 07:49:39 +0000 (08:49 +0100)]
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>
19 months agoisisd: Add new memtype for IS-IS SRv6 SID
Carmine Scarpitta [Tue, 14 Mar 2023 01:42:23 +0000 (02:42 +0100)]
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>
19 months agoisisd: Add SRv6 SID structure to SRv6 SID
Carmine Scarpitta [Tue, 14 Mar 2023 01:47:40 +0000 (02:47 +0100)]
isisd: Add SRv6 SID structure to SRv6 SID

Add SRv6 SID structure as a member of the SRv6 SID to specify the format
of a specific SID (i.e., block/node/function/argument length).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add SRv6 SID structure data structure
Carmine Scarpitta [Wed, 15 Feb 2023 10:28:01 +0000 (11:28 +0100)]
isisd: Add SRv6 SID structure data structure

Add `struct isis_srv6_sid_structure` data structure to represent an SRv6
SID structure (as defined in RFC 8986 section #3.1).

The struct has the following members:
* loc_block_len: locator block length
* loc_node_len: locator node length
* func_len: function length
* arg_len: argument length

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add SRv6 SID data structure
Carmine Scarpitta [Tue, 14 Mar 2023 01:40:34 +0000 (02:40 +0100)]
isisd: Add SRv6 SID data structure

Add `struct isis_srv6_sid` data structure to represent an SRv6 SID.

The struct has the following members:
* next: pointer to the next SID, used to build linked lists of SRv6 SIDs
* flags: SID flags
* behavior: the behavior bound to the SRv6 SID (as defined in RFC 8986)
* value: the SID value (i.e., an IPv6 address)
* locator: a backpointer to the parent locator from which the SID has
been allocated.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add CLI command to unset SRv6 locator
Carmine Scarpitta [Fri, 27 Jan 2023 15:07:15 +0000 (16:07 +0100)]
isisd: Add CLI command to unset SRv6 locator

Add a CLI command to unset a previously configured SRv6 locator for a
specific IS-IS instance.

Example:

r1# configure
r1(config)# router isis FOO
r1(config-router)# segment-routing srv6
r1(config-router-srv6)# no locator loc1

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add CLI command to configure SRv6 locator
Carmine Scarpitta [Fri, 27 Jan 2023 15:06:51 +0000 (16:06 +0100)]
isisd: Add CLI command to configure SRv6 locator

Add a CLI command to configure an SRv6 locator for a specific IS-IS
instance.

Example:

r1# configure
r1(config)# router isis FOO
r1(config-router)# segment-routing srv6
r1(config-router-srv6)# locator loc1

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add nb command to show SRv6 locator info
Carmine Scarpitta [Mon, 5 Dec 2022 16:06:36 +0000 (17:06 +0100)]
isisd: Add nb command to show SRv6 locator info

Add a northbound command to show information about the SRv6 locator
configured in IS-IS.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add nb command to unset an SRv6 locator
Carmine Scarpitta [Fri, 27 Jan 2023 15:05:28 +0000 (16:05 +0100)]
isisd: Add nb command to unset an SRv6 locator

Add a northbound command to unset an SRv6 locator for a specific
IS-IS area. This is a wrapper around `isis_srv6_locator_unset()`.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add nb command to configure an SRv6 locator
Carmine Scarpitta [Fri, 27 Jan 2023 15:04:49 +0000 (16:04 +0100)]
isisd: Add nb command to configure an SRv6 locator

Add a northbound command to configure an SRv6 locator for a specific
IS-IS area.

After configuring a locator, `isis_zebra_srv6_manager_get_locator_chunk`
is called to ask zebra to allocate a chunk from the configured locator.
The allocated chunk will be owned by IS-IS. IS-IS can allocate SIDs from
its chunk.

Currently, we support only one locator per-area. Therefore, before
configuring a locator we unset the previously configured locator, if
there was any.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoyang: Add SRv6 locator to the IS-IS YANG model
Carmine Scarpitta [Fri, 27 Jan 2023 15:05:52 +0000 (16:05 +0100)]
yang: Add SRv6 locator to the IS-IS YANG model

Add the `locator` leaf  to the IS-IS  YANG model under the
`segment-routing-srv6` container.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add func to unset the SRv6 locator
Carmine Scarpitta [Fri, 10 Mar 2023 22:50:46 +0000 (23:50 +0100)]
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>
19 months agoisisd: Add func to process a deleted SRv6 locator
Carmine Scarpitta [Thu, 9 Feb 2023 18:11:05 +0000 (19:11 +0100)]
isisd: Add func to process a deleted SRv6 locator

Add a callback function `isis_zebra_process_srv6_locator_delete()` that
is called when an SRv6 locator is deleted in zebra.

When an existing SRv6 locator is deleted in zebra, zebra sends a
ZEBRA_SRV6_LOCATOR_DELETE notification to all daemons informing them of
the deleted locator.

In IS-IS, we register the new `isis_zebra_process_srv6_locator_delete()`
callback as the handler for ZEBRA_SRV6_LOCATOR_DELETE.

This callback iterates over all areas of the current IS-IS instance and
looks for an area for which the deleted locator was configured.
If a match is found, we remove
the locator's chunks from the area's chunks list and call
`lsp_regenerate_schedule` to remove the locator from the SRv6 Locator
TLV advertised in the LSPs and regenerate the LSPs.
If no match is found, we do nothing.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add func to process a received SRv6 locator
Carmine Scarpitta [Thu, 9 Feb 2023 18:09:04 +0000 (19:09 +0100)]
isisd: Add func to process a received SRv6 locator

Add a callback function `isis_zebra_process_srv6_locator_add()` that is
called upon receiving an SRv6 locator from zebra.

When a new SRv6 locator is created in zebra, zebra sends a
ZEBRA_SRV6_LOCATOR_ADD notification to all daemons informing them of the
new locator.

In IS-IS, we register the new `isis_zebra_process_srv6_locator_add()`
callback as the handler for ZEBRA_SRV6_LOCATOR_ADD.

This callback iterates over all areas of the current IS-IS instance and
looks for an area for which the new locator was configured.
If a match is found, we call
`isis_zebra_srv6_manager_get_locator_chunk()` to ask zebra a chunk from
the locator.
If no match is found, we do nothing.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add function to process received SRv6 chunk
Carmine Scarpitta [Wed, 22 Feb 2023 10:11:35 +0000 (11:11 +0100)]
isisd: Add function to process received SRv6 chunk

Add a callback function that is called upon receiving an SRv6 locator
chunk from zebra.

This function iterates over all areas of the current IS-IS instance and
looks for an area for which the received chunk was requested.
If a match is found, the new chunk is added to the area's chunk list and
`lsp_regenerate_schedule()` is called to regenerate the LSPs to
advertise the new SRv6 locator.
If no match is found, we free the allocated resources and do nothing.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add func to release an SRv6 locator chunk
Carmine Scarpitta [Thu, 2 Feb 2023 12:04:33 +0000 (13:04 +0100)]
isisd: Add func to release an SRv6 locator chunk

Add a function to ask zebra to release a chunk from the SRv6 locator
specified as a parameter.

The chunk to be released must have been allocated by a previous call to
`isis_zebra_srv6_manager_get_locator_chunk()`.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add func to request an SRv6 locator chunk
Carmine Scarpitta [Thu, 2 Feb 2023 11:54:48 +0000 (12:54 +0100)]
isisd: Add func to request an SRv6 locator chunk

Add a function to ask zebra to allocate a chunk from the SRv6 locator
specified as a parameter.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add SRv6 locator chunks to SRv6 config
Carmine Scarpitta [Thu, 2 Feb 2023 11:30:35 +0000 (12:30 +0100)]
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>
19 months agoisisd: Add SRv6 locator name to SRv6 configuration
Carmine Scarpitta [Tue, 14 Mar 2023 07:39:59 +0000 (08:39 +0100)]
isisd: Add SRv6 locator name to SRv6 configuration

Add the name of the SRv6 locator to use with IS-IS to the per-area SRv6
configuration. If an SRv6 locator is not configured for an IS-IS
instance, the locator name is an empty string. When an IS-IS instance is
configured to use an SRv6 locator,  the locator name stores the name of
the selected locator.

Subsequent commits will add the possibility to set and unset an SRv6
locator for a specific IS-IS instance.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add CLI command to show SRv6 node info
Carmine Scarpitta [Thu, 2 Feb 2023 10:29:09 +0000 (11:29 +0100)]
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>
19 months agoisisd: Add Node MSD Sub-TLV (SRv6) to the LSPs
Carmine Scarpitta [Mon, 13 Mar 2023 01:07:16 +0000 (02:07 +0100)]
isisd: Add Node MSD Sub-TLV (SRv6) to the LSPs

Add Node MSD Sub-TLV containing the SRv6 MSDs to the Router Capabilities
TLV in the LSPs generated with the `lsp_build()` function.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Update router cap TLV size computation
Carmine Scarpitta [Sat, 10 Jun 2023 13:51:30 +0000 (15:51 +0200)]
isisd: Update router cap TLV size computation

Update the `isis_router_cap_tlv_size` function to take into account the
SRv6 Capabilities Sub-TLV and SRv6-related MSDs when calculating the
size needed to pack the Router Capabilities TLV.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Unpack Node MSD Sub-TLV with SRv6 MSDs
Carmine Scarpitta [Thu, 2 Feb 2023 10:01:55 +0000 (11:01 +0100)]
isisd: Unpack Node MSD Sub-TLV with SRv6 MSDs

The Router Capabilities TLV unpack function already unpacks the Node MSD
Sub-TLV.

This commit extends Router Capabilities TLV unpack function to extract
SRv6 MSDs from the Node MSD Sub-TLV (RFC 9352 section #4).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Pack Node MSD Sub-TLV for SRv6
Carmine Scarpitta [Thu, 2 Feb 2023 09:42:45 +0000 (10:42 +0100)]
isisd: Pack Node MSD Sub-TLV for SRv6

Extend Router Capabilities TLV pack function to pack Node MSD Sub-TLV
with the infomation relevant for SRv6 (RFC 9352 section #4).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Add SRv6 MSDs to Router Capabilities TLV
Carmine Scarpitta [Wed, 1 Feb 2023 12:18:45 +0000 (13:18 +0100)]
isisd: Add SRv6 MSDs to Router Capabilities TLV

Add support for SRv6 Node MSDs as per RFC 9352 section #4.

There are four types of SRv6 MSDs:
* Maximum Segments Left MSD Type
* Maximum End Pop MSD Type
* Maximum H.Encaps MSD Type
* Maximum End D MSD Type

These SRv6 Node MSDs are advertised in the Node MSD Sub-TLV, a Sub-TLV
of the Router Capabilities TLV.

This commit adds `struct isis_srv6_msd` data structure, which represents
the SRv6 MSDs advertised in the Node Sub-TLV.

This commit also adds the `struct isis_srv6_msd` to
`struct isis_router_cap`, a data structure representing the Router
Capabilities TLV.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
19 months agoisisd: Pack SR-Algorithm Sub-TLV for SRv6
Carmine Scarpitta [Wed, 30 Nov 2022 18:35:22 +0000 (19:35 +0100)]
isisd: Pack SR-Algorithm Sub-TLV for SRv6

Extend Router Capabilities TLV pack function to pack SR-Algorithm
Sub-TLV with infomation relevant for SRv6 (RFC 9352 section #3).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Add SRv6 Capabilities Sub-TLV to the LSPs
Carmine Scarpitta [Thu, 2 Feb 2023 10:20:44 +0000 (11:20 +0100)]
isisd: Add SRv6 Capabilities Sub-TLV to the LSPs

Add SRv6 Capabilities Sub-TLV to the Router Capabilities TLV in the LSPs
generated with the `lsp_build()` function.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Unpack SRv6 Capabilities Sub-TLV
Carmine Scarpitta [Thu, 2 Feb 2023 09:55:25 +0000 (10:55 +0100)]
isisd: Unpack SRv6 Capabilities Sub-TLV

Extend Router Capabilities TLV unpack function to unpack SRv6
Capabilities Sub-TLV (RFC 9352 section #2).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Pack SRv6 Capabilities Sub-TLV
Carmine Scarpitta [Thu, 2 Feb 2023 09:13:42 +0000 (10:13 +0100)]
isisd: Pack SRv6 Capabilities Sub-TLV

Extend Router Capabilities TLV pack function to pack Router Capabilies
Sub-TLV (RFC 9352 section #2).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Add SRv6 Cap Sub-TLV to Router Cap TLV
Carmine Scarpitta [Wed, 1 Feb 2023 12:41:32 +0000 (13:41 +0100)]
isisd: Add SRv6 Cap Sub-TLV to Router Cap TLV

Add SRv6 Capabilities Sub-TLV to the IS-IS Router Capabilities TLV data
structure. SRv6 Capabilities Sub-TLV includes SRv6 Flags (RFC 9352
section #2) and Maximum SRv6 SID Depths (RFC 9352 section #4).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Add IS-IS TLV Codepoints for SRv6
Carmine Scarpitta [Wed, 30 Nov 2022 18:29:08 +0000 (19:29 +0100)]
isisd: Add IS-IS TLV Codepoints for SRv6

Add Codepoints for SRv6 Capabilities Sub-TLV, SRH Max SL MSD,
SRH Max End Pop MSD, SRH Max H.encaps MSD, SRH Max End D MSD
as per RFC 9352.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Add support for SRv6 MSDs
Carmine Scarpitta [Wed, 18 Jan 2023 11:21:16 +0000 (12:21 +0100)]
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>
20 months agoisisd: Add function to terminate the SRv6 module
Carmine Scarpitta [Wed, 30 Nov 2022 14:09:00 +0000 (15:09 +0100)]
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>
20 months agoisisd: Add function to initialize the SRv6 module
Carmine Scarpitta [Wed, 30 Nov 2022 14:06:42 +0000 (15:06 +0100)]
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>
20 months agoisisd: Add CLI command to disable SRv6
Carmine Scarpitta [Mon, 28 Nov 2022 10:37:08 +0000 (11:37 +0100)]
isisd: Add CLI command to disable SRv6

r1# conf
r1(config)# router isis <area-tag>
r1(config-router)# no segment-routing srv6

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Add CLI command to enable SRv6
Carmine Scarpitta [Mon, 28 Nov 2022 10:36:34 +0000 (11:36 +0100)]
isisd: Add CLI command to enable SRv6

r1# conf
r1(config)# router isis <area-tag>
r1(config-router)# segment-routing srv6

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Add nb command to show if SRv6 is enabled
Carmine Scarpitta [Mon, 5 Dec 2022 16:06:04 +0000 (17:06 +0100)]
isisd: Add nb command to show if SRv6 is enabled

Add a northbound command to show whether SRv6 is enabled or not.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Add nb command to enable/disable SRv6
Carmine Scarpitta [Mon, 28 Nov 2022 10:31:58 +0000 (11:31 +0100)]
isisd: Add nb command to enable/disable SRv6

Add a northbound command to enable/disable SRv6 on a given IS-IS area.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Init SRv6 enabled flag to its default value
Carmine Scarpitta [Mon, 16 Jan 2023 11:03:32 +0000 (12:03 +0100)]
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>
20 months agoisisd: Add YANG path for SRv6
Carmine Scarpitta [Mon, 16 Jan 2023 10:45:26 +0000 (11:45 +0100)]
isisd: Add YANG path for SRv6

Add YANG path `/frr-isisd:isis/instance/segment-routing-srv6`.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoyang: Add SRv6 node to IS-IS YANG model
Carmine Scarpitta [Mon, 28 Nov 2022 11:09:02 +0000 (12:09 +0100)]
yang: Add SRv6 node to IS-IS YANG model

Add `segment-routing-srv6` node to the IS-IS YANG model.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Add a bool to enable/disable SRv6
Carmine Scarpitta [Mon, 28 Nov 2022 10:11:22 +0000 (11:11 +0100)]
isisd: Add a bool to enable/disable SRv6

Add a boolean flag to indicate whether SRv6 is administratively enabled
on a given IS-IS area or not.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Terminate SRv6 when an area is created
Carmine Scarpitta [Mon, 28 Nov 2022 10:00:35 +0000 (11:00 +0100)]
isisd: Terminate SRv6 when an area is created

Call `isis_srv6_area_term()` to cleanup the per-area SRv6 information
when an IS-IS area is terminated.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Initialize SRv6 when an area is created
Carmine Scarpitta [Mon, 28 Nov 2022 10:00:07 +0000 (11:00 +0100)]
isisd: Initialize SRv6 when an area is created

Call `isis_srv6_area_init()` to initialize the per-area SRv6 DB when an
IS-IS area is created.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Add func to terminate SRv6 for a given area
Carmine Scarpitta [Mon, 28 Nov 2022 09:59:35 +0000 (10:59 +0100)]
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>
20 months agoisisd: Add function to initialize SRv6 DB
Carmine Scarpitta [Mon, 16 Jan 2023 10:24:29 +0000 (11:24 +0100)]
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>
20 months agoisisd: Add data structure for SRv6 information
Carmine Scarpitta [Mon, 16 Jan 2023 10:14:52 +0000 (11:14 +0100)]
isisd: Add data structure for SRv6 information

Add `struct isis_srv6_db` to store per-area SRv6 information.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
20 months agoisisd: Add isis_srv6.[c, h] files
Carmine Scarpitta [Mon, 28 Nov 2022 09:34:10 +0000 (10:34 +0100)]
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>
20 months agoMerge pull request #14129 from samanvithab/bgpd_frr_fix
Donald Sharp [Wed, 2 Aug 2023 17:48:14 +0000 (13:48 -0400)]
Merge pull request #14129 from samanvithab/bgpd_frr_fix

bgpd: Fix for session reset issue caused by malformed core attributes  in update message

20 months agoMerge pull request #13466 from donaldsharp/remove_unneeded_test_files
Donatas Abraitis [Wed, 2 Aug 2023 14:26:26 +0000 (17:26 +0300)]
Merge pull request #13466 from donaldsharp/remove_unneeded_test_files

tests: Remove unused file in isis_snmp test

20 months agotests: Remove unused file in isis_snmp test 13466/head
Donald Sharp [Mon, 8 May 2023 12:45:55 +0000 (08:45 -0400)]
tests: Remove unused file in isis_snmp test

The */show_ip_route.ref files are never used, let's remove them
to prevent any future issues.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
20 months agobgpd: Fix session reset issue caused by malformed core attributes 14129/head
Samanvitha B Bhargav [Wed, 2 Aug 2023 06:10:35 +0000 (23:10 -0700)]
bgpd: Fix session reset issue caused by malformed core attributes

RCA:
On encountering any attribute error for core attributes in update message,
the error handling is set to 'treat as withdraw' and
further parsing of the remaining attributes is skipped.
But the stream pointer is not being correctly adjusted to
point to the next NLRI field skipping the rest of the attributes.
This leads to incorrect parsing of the NLRI field,
which causes BGP session to reset.

Fix:
The stream pointer offset is rightly adjusted to point to the NLRI field correctly
when the malformed attribute is encountered and remaining attribute parsing is skipped.

Signed-off-by: Samanvitha B Bhargav <bsamanvitha@vmware.com>
20 months agoMerge pull request #14125 from opensourcerouting/fix/drop_unused_lua_stuff
Jafar Al-Gharaibeh [Wed, 2 Aug 2023 04:52:56 +0000 (23:52 -0500)]
Merge pull request #14125 from opensourcerouting/fix/drop_unused_lua_stuff

lib: Do not use time_t as a special Lua encoder/decoder

20 months agoMerge pull request #14116 from donaldsharp/test_naming
Donatas Abraitis [Tue, 1 Aug 2023 15:13:02 +0000 (18:13 +0300)]
Merge pull request #14116 from donaldsharp/test_naming

Test naming

20 months agoMerge pull request #14071 from achernavin22/ospf-fix-abr-type-chg
Donald Sharp [Tue, 1 Aug 2023 14:42:54 +0000 (10:42 -0400)]
Merge pull request #14071 from achernavin22/ospf-fix-abr-type-chg

ospfd: fix changing ABR type between standard and shortcut

20 months agotests: Convert d1 and d2 to output and expected in gen_json_diff_report 14116/head
Donald Sharp [Mon, 31 Jul 2023 12:45:50 +0000 (08:45 -0400)]
tests: Convert d1 and d2 to output and expected in gen_json_diff_report

The output of gen_json_diff_report is used all over the place and
it outputs d1 and d2.  Let's change this to output and expected
as that is how it is used.  Should help with debugging.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
20 months agotests: Run black over lib/topotest.py
Donald Sharp [Mon, 31 Jul 2023 12:21:04 +0000 (08:21 -0400)]
tests: Run black over lib/topotest.py

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
20 months agotests: Start using output and expected vs d1 and d2
Donald Sharp [Mon, 31 Jul 2023 12:18:40 +0000 (08:18 -0400)]
tests: Start using output and expected vs d1 and d2

Let us start using output and expected in lib/topotest.py
because when we see output it is confusing what d1 is
versus what d2 is.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
20 months agoMerge pull request #14117 from patrasar/pimv6_13893
Donald Sharp [Tue, 1 Aug 2023 11:30:57 +0000 (07:30 -0400)]
Merge pull request #14117 from patrasar/pimv6_13893

pimd, pim6d: Don't set SRC_STREAM flag on LHR

20 months agolib: Do not use time_t as a special Lua encoder/decoder 14125/head
Donatas Abraitis [Tue, 1 Aug 2023 11:08:25 +0000 (14:08 +0300)]
lib: Do not use time_t as a special Lua encoder/decoder

This is purely an integer (long long/long), and causes issues for 32-bit systems.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
20 months agoMerge pull request #14078 from raja-rajasekar/frr_dev1
Donatas Abraitis [Tue, 1 Aug 2023 09:19:18 +0000 (12:19 +0300)]
Merge pull request #14078 from raja-rajasekar/frr_dev1

zebra: fix nhe refcnt when frr service goes down

20 months agoMerge pull request #14115 from opensourcerouting/fix/build_alpine_images
Jafar Al-Gharaibeh [Tue, 1 Aug 2023 04:53:12 +0000 (23:53 -0500)]
Merge pull request #14115 from opensourcerouting/fix/build_alpine_images

docker: Adjustments for Alpine 3.18 and buildx

20 months agoMerge pull request #14121 from opensourcerouting/deb-protobuf-depend
Jafar Al-Gharaibeh [Tue, 1 Aug 2023 04:48:55 +0000 (23:48 -0500)]
Merge pull request #14121 from opensourcerouting/deb-protobuf-depend

debian: Add missing protobuf dependency

20 months agodebian: Add missing protobuf dependency 14121/head
Martin Winter [Mon, 31 Jul 2023 22:48:26 +0000 (00:48 +0200)]
debian: Add missing protobuf dependency

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
21 months agoMerge pull request #14042 from FRIDM636/extcomm-list-delete
Donatas Abraitis [Mon, 31 Jul 2023 12:50:16 +0000 (15:50 +0300)]
Merge pull request #14042 from FRIDM636/extcomm-list-delete

bgp: add set BGP extended community for deletion command

21 months agopimd, pim6d: Don't set SRC_STREAM flag on LHR 14117/head
Sarita Patra [Mon, 31 Jul 2023 11:30:26 +0000 (04:30 -0700)]
pimd, pim6d: Don't set SRC_STREAM flag on LHR

Setup:
------
R1( LHR) ---------R2( RP) ----------R3( FHR)

Problem:
-------
- Send IGMP/MLD join and traffic.
  LHR: (S,G) mroute is created with reference count = 2
  and set the flag SRC_STREAM.
  (Code flow: pim_mroute_msg_wholepkt -> pim_upstream_add,
              pim_upstream_sg_running_proc -> pim_upstream_ref)
- Send IGMP/MLD prune.
  LHR: removes (*,G) entry and it tries to remove childen (S,G) entries.
       But (S,G) is having reference count = 2. So after prune,
       (S,G) entry reference count becomes 1 and will be present
       until KAT expires.

Fix:
---
Don't set SRC_STREAM flag for LHR.
In LHR, (S,G) should be maintained, until (*,G) is present.
When prune receives delete (*,G) and children (S,G).
When traffic stops, delete (S,G) after KAT expires.

Issue: #13893

Signed-off-by: Sarita Patra <saritap@vmware.com>
21 months agotests: test set extended-comm-list <> delete command 14042/head
Farid Mihoub [Wed, 12 Jul 2023 10:05:38 +0000 (12:05 +0200)]
tests: test set extended-comm-list <> delete command

Signed-off-by: Farid Mihoub <farid.mihoub@6wind.com>
21 months agobgpd: add set extended-comm-list <> delete command
Farid Mihoub [Wed, 14 Jun 2023 14:16:55 +0000 (16:16 +0200)]
bgpd: add set extended-comm-list <> delete command

Signed-off-by: Farid Mihoub <farid.mihoub@6wind.com>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
21 months agodocker: Install the apk packages regardless of the platform 14115/head
Donatas Abraitis [Mon, 31 Jul 2023 08:05:15 +0000 (11:05 +0300)]
docker: Install the apk packages regardless of the platform

It was hardcoded to x86_64, but we build Alpine images for more platforms, let's
be dynamical here.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
21 months agodocker: Use openssl instead of libressl
Donatas Abraitis [Mon, 31 Jul 2023 08:04:30 +0000 (11:04 +0300)]
docker: Use openssl instead of libressl

libressl is dropped from Alpine 3.18 for s390x.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
21 months agoMerge pull request #14109 from taspelund/noreset_update_src
Donatas Abraitis [Mon, 31 Jul 2023 07:03:28 +0000 (10:03 +0300)]
Merge pull request #14109 from taspelund/noreset_update_src

bgpd: skip reset when removing dup update-source

21 months agoMerge pull request #14112 from donaldsharp/test_sponging
Donatas Abraitis [Mon, 31 Jul 2023 07:02:36 +0000 (10:02 +0300)]
Merge pull request #14112 from donaldsharp/test_sponging

Test sponging

21 months agoMerge pull request #14111 from opensourcerouting/isisd-tilfa-topotest-fixes
Donald Sharp [Sat, 29 Jul 2023 23:22:34 +0000 (19:22 -0400)]
Merge pull request #14111 from opensourcerouting/isisd-tilfa-topotest-fixes

tests: improve stability of the IS-IS TI-LFA topotest

21 months agoMerge pull request #14103 from opensourcerouting/reload-keychain
Donald Sharp [Sat, 29 Jul 2023 18:01:31 +0000 (14:01 -0400)]
Merge pull request #14103 from opensourcerouting/reload-keychain

tools: fix key chain reload removal

21 months agoMerge pull request #14104 from rampxxxx/bfd_audit
Donald Sharp [Sat, 29 Jul 2023 17:57:33 +0000 (13:57 -0400)]
Merge pull request #14104 from rampxxxx/bfd_audit

bfdd: add additional parameters to json command

21 months agotests: Convert isis to use 1 and 10 for hello/multiplier 14112/head
Donald Sharp [Thu, 27 Jul 2023 19:36:33 +0000 (15:36 -0400)]
tests: Convert isis to use 1 and 10 for hello/multiplier

Current isis tests use a variety of hello timers as well
as hello-multiplier, let's modify all of the isis test
cases to use 1 and 10.  This cleans up some spurious test
failures I was seeing locally.  As an example without
these changes running isis_tilfa_topo1 2r6 times I would
see 5-10 test failures now I am seeing ~2 test failures.

In any event part of the problem was that some tests were
not fully converged when looking at them under heavy
system load.  Changing this to 1/10 gives us 10 chances
to see the incoming packet.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
21 months agotests: bfd_bgp_cbit_topo3 allow bgp to converge before testing
Donald Sharp [Sat, 29 Jul 2023 17:26:26 +0000 (13:26 -0400)]
tests: bfd_bgp_cbit_topo3 allow bgp to converge before testing

This test was failing upstream a bunch of times.  Upon examining
the log files as well as the test script it was noticed that
the bfd peers were checked to see that they had come up.  But
both the timers used for bgp as well as not checking that bgp
has actually come up would cause the test to fail in subsuquent
steps if bgp has not come up.  Test that bgp peering is actually
established before testing link down events.  It's possible
this test might need to be revisited to ensure that the routes
are actually installed and ready to go before as well, but I am
not seeing that right now.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
21 months agotests: Fix zebra_seg6_route to give more time for routes to be installed
Donald Sharp [Sat, 29 Jul 2023 17:24:55 +0000 (13:24 -0400)]
tests: Fix zebra_seg6_route to give more time for routes to be installed

This test is failing upstream regularly, when inspecting the log
files we see that the route being looked for is in a queued state
when the test fails.  Give this test more time for when the
system is under severe load.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
21 months agotests: isis_te_topo1 can fail occassionally
Donald Sharp [Sat, 29 Jul 2023 17:22:39 +0000 (13:22 -0400)]
tests: isis_te_topo1 can fail occassionally

Upstream ( and locally ) this test fails.  The adj-sid value
being looked for in the testing is a dynamic value that is
assigned based upon how the network comes up.  The reality
is that there is no enforced order of what the adj-sid
can be.  As such this test looking for this value makes
no sense.  Let's remove that from the test.

Additionally bring the isis hello-interval to 1 down
from 3 to make things converge faster.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
21 months agotests: zebra_netlink ensure the address is installed
Donald Sharp [Fri, 28 Jul 2023 14:31:30 +0000 (10:31 -0400)]
tests: zebra_netlink ensure the address is installed

Ran test under high load and system rejected the sharp
install of routes.  Only reason that that would happen
would be if the address had not been set by the kernel
yet.  The test log files had timestamp precision and the
addition of the sharp routes was under 1/10 of a second
after the address was attempted to be installed.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
21 months agotests: increase wait timer in TI-LFA topotest 14111/head
Renato Westphal [Sat, 29 Jul 2023 14:46:54 +0000 (11:46 -0300)]
tests: increase wait timer in TI-LFA topotest

Starting from step 11, this topotest focuses on validating the TI-LFA
switchover functionality, where the backup nexthops are activated
after an adjacency expires, either with or without BFD.

Currently, the test checks the RIB shortly after the switchover using
a tight 5 seconds interval to ensure that the RIB update is due to the
switchover and not an SPF update (which is configured with an initial
delay of 15 seconds). However, it was observed that the kernel might
take longer than 5 seconds to install routes when the system is under
heavy load. To account for that, double the wait interval so that
this topotest will succeed even in those conditions.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
21 months agotests: ensure BFD session is up before proceeding to the next step
Renato Westphal [Sat, 29 Jul 2023 01:32:17 +0000 (22:32 -0300)]
tests: ensure BFD session is up before proceeding to the next step

In this topotest, BFD is configured at the end of step 13. However,
in certain cases where the testing machine is exceptionally fast (e.g.,
Donald's quantum computer), there is a possibility that the interface
shutdown event from step 14 may occur before BFD has had sufficient
time to establish the session, which leads to a test failure. To fix
this problem, ensure the BFD session is up before proceeding to the
next step.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
21 months agoisisd: update Node-SID flag dynamically
Renato Westphal [Thu, 27 Jul 2023 23:35:10 +0000 (20:35 -0300)]
isisd: update Node-SID flag dynamically

Node-SIDs refer to Prefix-SIDs associated with host prefixes of
loopback addresses. As such, whenever an interface address is added
or deleted, all configured Prefix-SIDs must be reevaluated to check
if the N-flag needs to be set or unset.

This change fixes some race conditions in the TI-LFA topotest where
specific sequence of events could cause Prefix-SIDs to not have the
N-flag set when they should, resulting in various failures.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>