Commit Graph

230 Commits

Author SHA1 Message Date
Donald Sharp
a348c9456f isisd: Add missing enum's to switch statement
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-01-31 15:15:42 -05:00
Pushpasis Sarkar
5b86dc9f0f
Merge pull request #11594 from louis-6wind/lfa-netlink
isisd: apply fast-reroute as soon an interface or an adjacency falls down
2022-11-08 23:19:39 +05:30
Donald Sharp
103372fd75 isisd: Make clang-16 compiler happy with isisd
Signed-off-by: Donald Sharp <donaldsharp72@gmail.com>
2022-10-25 20:06:49 -04:00
Louis Scalbert
694fa86728 isisd: apply fast-reroute on an adjacency failure
When a adjacency falls down, the primary routes are not deleted on the
dataplane until the SPF is recomputed. Even the backup routes are
pre-installed on the dataplane, there is no fast-route optimization.

Reasons for an adjacency to come down are:
- BFD down
- Hello timer timeout
- User adjacency clear

Apply the backup route switchover for fast-reroute as soon an IS-IS
adjacency falls down before the first SPF re-computation. Pre-computed
backup routes are applied sooner.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2022-10-24 11:50:13 +02:00
Russ White
07735ca345
Merge pull request #11980 from isabelladeleon12/set_overload_startup
isisd: Add support for set-overload on-startup
2022-10-13 10:59:24 -04:00
Isabella de Leon
450841fe05 isisd: Add JSON object functions to save overload status between restarts.
Signed-off-by: Isabella de Leon <ideleon@microsoft.com>
2022-10-12 16:57:32 -07:00
Isabella de Leon
4afc783610 isisd: Add expected behavior with set-overload-bit
Signed-off-by: Isabella de Leon <ideleon@microsoft.com>
2022-10-12 10:52:27 -07:00
Donald Sharp
cf00164b69 *: Create and use infrastructure to show debugs in lib
There are lib debugs being set but never show up in
`show debug` commands because there was no way to show
that they were being used.  Add a bit of infrastructure
to allow this and then use it for `debug route-map`

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-10-07 12:39:05 -04:00
Isabella de Leon
49b27ea24d isisd: Add overload timer and overload on startup functionality
Signed-off-by: Isabella de Leon <ideleon@microsoft.com>
2022-09-30 10:39:18 -07:00
Isabella de Leon
01ea9b035e isisd: Add set-overload on-startup CLI/YANG support
Before:
r1# conf
r1(config)# router isis <area-tag>
r1(config-router)# set-overload-bit
  <cr>
r1(config-router)# end

After:
r1# conf
r1(config)# router isis <area-tag>
r1(config-router)# set-overload-bit
  <cr>
  on-startup  Set overload bit on startup
r1(config-router)# set-overload-bit on-startup
  (0-86400)  Set overload time in seconds
r1(config-router)# set-overload-bit on-startup 300
r1(config-router)# end

Signed-off-by: Isabella de Leon <ideleon@microsoft.com>
2022-09-21 15:41:38 -07:00
Donald Sharp
dcfe3c1611 isisd: Fix memory leak on shutdown with prefix lists
==2623619==
==2623619== 6 bytes in 1 blocks are definitely lost in loss record 3 of 75
==2623619==    at 0x483877F: malloc (vg_replace_malloc.c:307)
==2623619==    by 0x4B55E4A: strdup (strdup.c:42)
==2623619==    by 0x493C992: qstrdup (memory.c:128)
==2623619==    by 0x1A9212: isis_instance_fast_reroute_level_1_remote_lfa_prefix_list_modify (isis_nb_config.c:1599)
==2623619==    by 0x494837C: nb_callback_modify (northbound.c:1083)
==2623619==    by 0x4948C6E: nb_callback_configuration (northbound.c:1352)
==2623619==    by 0x494919D: nb_transaction_process (northbound.c:1473)
==2623619==    by 0x4947DA9: nb_candidate_commit_apply (northbound.c:906)
==2623619==    by 0x4947EBA: nb_candidate_commit (northbound.c:938)
==2623619==    by 0x494EB9E: nb_cli_classic_commit (northbound_cli.c:64)
==2623619==    by 0x494F3DC: nb_cli_apply_changes_internal (northbound_cli.c:250)
==2623619==    by 0x494F4E2: nb_cli_apply_changes (northbound_cli.c:268)
==2623619==    by 0x1BEF0F: isis_frr_remote_lfa_plist_magic (isis_cli.c:1899)
==2623619==    by 0x1B7636: isis_frr_remote_lfa_plist (isis_cli_clippy.c:3406)
==2623619==    by 0x48EBA75: cmd_execute_command_real (command.c:997)
==2623619==    by 0x48EBD4E: cmd_execute_command_strict (command.c:1108)
==2623619==    by 0x48EC1E6: command_config_read_one_line (command.c:1268)
==2623619==    by 0x48EC35B: config_from_file (command.c:1313)
==2623619==    by 0x4999CC1: vty_read_file (vty.c:2347)
==2623619==    by 0x499A4AF: vty_read_config (vty.c:2567)
==2623619==    by 0x4924B12: frr_config_read_in (libfrr.c:984)
==2623619==    by 0x498F5E3: thread_call (thread.c:2008)
==2623619==    by 0x49253DA: frr_run (libfrr.c:1198)
==2623619==    by 0x14FC53: main (isis_main.c:273)

Fix this memory leak

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-09-20 10:44:42 -04:00
Olivier Dugeon
1fa6385040 isisd: Correct Valgrind errors
Runing most of isisd tests with --valgrind-memleaks give many memory errors.
This is due to the way isisd is stopped: performing a "no router isis XXX"
through CLI solves most of them. Indeed, isis_finish() doesn't call
isis_area_destroy() leaving many allocated memory unfreed.

This patch adds call to appropriate delete function or XFREE() when necessary to
properly free all alocated memory before terminating isisd.

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2022-09-02 15:04:35 +02:00
Donald Sharp
fa935aa7e8 isisd: Convert thread_cancel to THREAD_OFF
Just convert all uses of thread_cancel to THREAD_OFF

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-21 08:30:50 -04:00
Donatas Abraitis
d8bebc08aa Revert "isisd: apply fast-reroute on an adjacency failure"
This reverts commit 7125297323.
2022-07-10 21:41:25 +03:00
Louis Scalbert
7125297323 isisd: apply fast-reroute on an adjacency failure
When a adjacency falls down, the primary routes are not deleted on the
dataplane until the SPF is recomputed. Even the backup routes are
pre-installed on the dataplane, there is no fast-route optimization.

Reasons for an adjacency to come down are:
- BFD down
- Hello timer timeout
- User adjacency clear

Apply the backup route switchover for fast-reroute as soon an IS-IS
adjacency falls down before the first SPF re-computation. Pre-computed
backup routes are applied sooner.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2022-05-23 10:44:20 +02:00
Donatas Abraitis
6006b807b1 *: Properly use memset() when zeroing
Wrong: memset(&a, 0, sizeof(struct ...));
    Good:  memset(&a, 0, sizeof(a));

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-11 14:08:47 +03:00
Philippe Guibert
c7fd8c62d9 isisd: enable BFD messaging debug when isis bfd is used
In addition to turning on isis bfd debugging traces, the internal
bfd messaging debug is also enabled. Reversely, when isis bfd traces
are off, the internal messaging debug traces are off too.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2022-04-20 16:45:17 +02:00
Philippe Guibert
cdfb430e2f isisd: fix typo in show debugging
fix typo in show debugging.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2022-03-31 11:19:26 +02:00
Javier Garcia
a2cac12a63 isisd: Add json to show isis database command.
Signed-off-by: Javier Garcia <javier.martin.garcia@ibm.com>
2022-03-02 16:20:44 +01:00
Javier Garcia
a21177f280 isisd: Add json to show isis neighbor command.
Signed-off-by: Javier Garcia <javier.martin.garcia@ibm.com>
2022-03-01 17:57:21 +01:00
Javier Garcia
9fee4d4c60 isisd: Add json to show isis interface command.
Signed-off-by: Javier Garcia <javier.martin.garcia@ibm.com>
2022-02-25 12:36:17 +01:00
Javier Garcia
471bb5da52 isisd. Add json to show summary command.
Signed-off-by: Javier Garcia <javier.martin.garcia@ibm.com>
2022-02-25 12:36:11 +01:00
Russ White
18ed776ca2
Merge pull request #9938 from Orange-OpenSource/isis_ls
isisd: Add Link State Traffic Engineering support
2022-01-18 10:12:08 -05:00
Igor Ryzhov
ac2cb9bf94 *: rework renaming the default VRF
Currently, it is possible to rename the default VRF either by passing
`-o` option to zebra or by creating a file in `/var/run/netns` and
binding it to `/proc/self/ns/net`.

In both cases, only zebra knows about the rename and other daemons learn
about it only after they connect to zebra. This is a problem, because
daemons may read their config before they connect to zebra. To handle
this rename after the config is read, we have some special code in every
single daemon, which is not very bad but not desirable in my opinion.
But things are getting worse when we need to handle this in northbound
layer as we have to manually rewrite the config nodes. This approach is
already hacky, but still works as every daemon handles its own NB
structures. But it is completely incompatible with the central
management daemon architecture we are aiming for, as mgmtd doesn't even
have a connection with zebra to learn from it. And it shouldn't have it,
because operational state changes should never affect configuration.

To solve the problem and simplify the code, I propose to expand the `-o`
option to all daemons. By using the startup option, we let daemons know
about the rename before they read their configs so we don't need any
special code to deal with it. There's an easy way to pass the option to
all daemons by using `frr_global_options` variable.

Unfortunately, the second way of renaming by creating a file in
`/var/run/netns` is incompatible with the new mgmtd architecture.
Theoretically, we could force daemons to read their configs only after
they connect to zebra, but it means adding even more code to handle a
very specific use-case. And anyway this won't work for mgmtd as it
doesn't have a connection with zebra. So I had to remove this option.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-12-21 22:09:29 +03:00
Olivier Dugeon
d9884a758c isisd: Prepare IS-IS for Link State support
In order to provide Link State Traffic Engineering features to IS-IS, this
patch adds some modifications to base IS-IS:

- Solve bug in lsp iterate function to avoid infinite loop in isis_lsp.c by
  adding condition to recurse call
- Add new trigger event to parse LSP in isis_lsp.c
- Add new TE debug flag to track Traffic Engineering events in isisd.[c,h]
- Correct small bug in isis_tlvs.c where delay and min/max delay are not
  correctly handle
- Handle Opaque LSA Traffic Engineering Zebra API in isis_zebra.[c,h]

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2021-11-30 15:22:28 +01:00
Igor Ryzhov
2f9a06f060 isisd: fix circuit is-type configuration
Currently, we have a lot of checks in CLI and NB layer to prevent
incompatible IS-types of circuits and areas. All these checks become
completely meaningless when the interface is moved between VRFs. If the
area IS-type is different in the new VRF, previously done checks mean
nothing and we still end up with incorrect circuit IS type. To actually
prevent incorrect IS type, all checks must be done in the processing
code.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-10-30 03:17:49 +03:00
Philippe Guibert
29263027ac isisd: make isis work with default vrf name different than 'default'
The problem is related to startup configuration, which is not operational
on default vrf name.

To reproduce the issue, run the two daemons:
zebra -o vrf0 &
isisd -f /tmp/isisd.conf

router isis 1
 lsp-gen-interval 2
 net 10.0000.0000.0000.0000.0000.0000.0000.0000.0000.00
 metric-style wide
 redistribute ipv4 connected level-2
 redistribute ipv6 connected level-2

The obtained show running-config looks like below:

router isis 1 vrf default
 lsp-gen-interval 2
 net 10.0000.0000.0000.0000.0000.0000.0000.0000.0000.00
 metric-style wide
 redistribute ipv4 connected level-2
 redistribute ipv6 connected level-2

The default vrf name is obtained by zebra daemon. While isis is not
connected to zebra, i.e. at startup, when loading a startup configuration,
the macro VRF_DEFAULT_NAME is used and returns 'default'.

But because zebra connected and forces to a new default vrf name, the
configuration is not seen as the default one, and further attempts to
configure the isis instance via 'router isis 1' will trigger creation
of an other instance.

To handle this situation, at vrf_enable() event, which is called for
each default vrf name change, the associated isis instance is updated
with th new vrf name. The same is done for NB yang path.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2021-10-27 16:54:19 +02:00
David Lamparter
8268be3d16
Merge pull request #9496 from idryzhov/vrf-cmd-init-unused-arg
lib: remove unused argument from vrf_cmd_init
2021-08-27 10:39:45 +02:00
Igor Ryzhov
cfc369c43a lib: remove unused argument from vrf_cmd_init
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-08-26 12:01:22 +03:00
Igor Ryzhov
07679ad98a *: explicitly print "exit" at the end of every node config
There is a possibility that the same line can be matched as a command in
some node and its parent node. In this case, when reading the config,
this line is always executed as a command of the child node.

For example, with the following config:
```
router ospf
 network 193.168.0.0/16 area 0
!
mpls ldp
 discovery hello interval 111
!
```
Line `mpls ldp` is processed as command `mpls ldp-sync` inside the
`router ospf` node. This leads to a complete loss of `mpls ldp` node
configuration.

To eliminate this issue and all possible similar issues, let's print an
explicit "exit" at the end of every node config.

This commit also changes indentation for a couple of existing exit
commands so that all existing commands are on the same level as their
corresponding node-entering commands.

Fixes #9206.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-08-23 22:08:20 +03:00
Igor Ryzhov
a4777e465a isisd: fix processing of the attached bit
There are two problems with the current code for processing the attached
bit:
- we should process it when acting both a level-1-only and level-1-2
- we should add the default route when we don't have L2 adjacensies, not
  when we don't have other routers configured on the device

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-07-13 14:49:49 +03:00
Russ White
4cc0f752dd
Merge pull request #8905 from donaldsharp/isis_argv
Isis argv
2021-06-22 14:22:55 -04:00
Quentin Young
f4e7b6ba47
Merge pull request #8902 from idryzhov/isis-lsp-for-arg
isisd: fix uninitialized variable when searching for LSP
2021-06-22 18:22:44 +00:00
Donald Sharp
1d88e63a4e isisd: using argv as a string name is categorically wrong
We are passing around the system id using the variable name
of `argv`.  Let's name the variable correctly and pass it around
correctly named.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-06-22 13:03:00 -04:00
Donald Sharp
730649da0e isisd: already checked for NULL
in lsp_for_arg we have already checked for NULL and returned
if argv is null.  We do not need to check for it again.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-06-22 12:36:16 -04:00
Igor Ryzhov
9ff7c74bdd isisd: fix uninitialized variable when searching for LSP
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-06-22 17:53:26 +03:00
Igor Ryzhov
f5eef2d5a8 lib: remove vrf-interface config when removing the VRF
If we have the following configuration:
```
vrf red
 smth
 exit-vrf
!
interface red vrf red
 smth
```
And we delete the VRF using "no vrf red" command, we end up with:
```
interface red
 smth
```
Interface config is preserved but moved to the default VRF.

This is not an expected behavior. We should remove the interface config
when the VRF is deleted.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-06-21 18:04:46 +03:00
Donald Sharp
21b0c655e1
Merge pull request #8843 from idryzhov/isis-dyn-hostname-cache
isisd: per-instance dynamic hostname cache
2021-06-18 08:20:25 -04:00
Igor Ryzhov
6eadfc2d41 isisd: fix adding a circuit to the wrong area
When creating a new area, we're adding all circuits in the same VRF to
this area. We should only add circuits configured with the same tag.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-06-18 03:27:29 +03:00
Igor Ryzhov
240f48b36b isisd: per-instance dynamic hostname cache
Currently, the dynamic hostname cache is global. It is incorrect because
neighbors in different VRFs may have the same system ID and different
hostnames.

This also fixes a memory leak - when the instance is deleted, the cache
must be cleaned up and the cleanup thread must be cancelled.

Fixes #8832.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-06-11 18:30:47 +03:00
Igor Ryzhov
2582d02c55 isisd: fix missing VRF parameter
It was incorrectly removed in 1cbf96a.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-05-21 20:29:13 +03:00
Igor Ryzhov
5cfffcdd8d isisd: fix dangling instances
We only need an instance when we have at least one area configured in a
VRF. Currently we have the following issues:
- instance for the default VRF is always created
- instance is not removed after the last area config is removed

This commit fixes both issues.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-05-14 17:12:38 +03:00
Igor Ryzhov
8c6482db8c isisd: fix redistribution in vrf
When the redistribution is configured in non-default VRF, isisd should
redistribute routes from this VRF instead of default.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-05-14 17:12:35 +03:00
Igor Ryzhov
164ab8965e isisd: deregister vrf from zebra when vrf is disabled
Currently the VRF is deregistered only when it is re-enabled again.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-05-14 17:12:33 +03:00
Igor Ryzhov
13bf38300e isisd: rework BFD integration
Rewrite the BFD integration code to use the new library.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-05-07 12:03:57 +03:00
Fredi Raspall
098fc8a9cd isisd: fix show LFA debug in show debugging cmd
When enabling 'debug isis lfa', the option was correctly enabled
but not displayed by 'show debugging' command.

Signed-off-by: Fredi Raspall <fredi@voltanet.io>
2021-05-01 16:05:22 +02:00
Igor Ryzhov
bcf2208156 isisd: allow arbitrary order of area/interface configuration
Currently we don't allow to configure the interface before the area is
configured. This approach has the following issues:

1. The area config can be deleted even when we have an interface config
   relying on it. The code is not ready for that - we'll have a whole
   bunch of stale pointers if user does that.
2. The code doesn't correctly process the event of changing the VRF for
   an interface. There is no mechanism to ensure that the area exists
   in the new VRF so currently the circuit still stays in the old VRF.

This commit allows an arbitrary order of area/interface configuration.
There is no more need to configure the area before configuring the
interface.

This change fixes both the issues.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-04-29 17:05:21 +03:00
David Lamparter
66b9a3816a isisd: kill isis_memory.h, use MTYPE_STATIC
Convert most DEFINE_MTYPE into the _STATIC variant, and move the
remaining non-static ones to appropriate places.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-22 18:27:58 +01:00
David Lamparter
96244aca23 *: require semicolon after DEFINE_QOBJ & co.
Again, see previous commits.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-17 06:18:37 +01:00
lynne
1ee746d990 isisd: support for snmp
Add support for read only mib objects from RFC4444.

Signed-off-by: Lynne Morrison <lynne@voltanet.io>
Signed-off-by: Karen Schoener <karen@voltanet.io>
2021-03-02 10:06:31 -05:00