summaryrefslogtreecommitdiff
path: root/isisd/isis_nb_config.c
AgeCommit message (Collapse)Author
2025-02-05isisd: Remove unneeded modify functionsDonald Sharp
Our infrastructure was complaining about this: 2025/02/05 19:38:42 ISIS: [ZKB8W-3S2Q4][EC 100663330] unneeded 'modify' callback for '/frr-isisd:isis/instance/fast-reroute/level-1/lfa/tiebreaker/type' 2025/02/05 19:38:42 ISIS: [ZKB8W-3S2Q4][EC 100663330] unneeded 'modify' callback for '/frr-isisd:isis/instance/fast-reroute/level-2/lfa/tiebreaker/type' Seems we don't need it. Let's just remove it. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-10-25isisd: fix change flex-algorithm number from uint32 to uint8Philippe Guibert
The algorithm number is encoded on 8 bits and does not require an unsigned 32 bit value to store the value. Fixes: cc4926c1284e ("isisd,yang: add algorithm-prefix-sid configuration tree") Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2024-10-07isisd: fix wrong check for MT commandsanlan_cs
``` anlan# show run ! interface eth0 ip router isis A exit ! router isis A metric-style narrow <- NOT wide exit ! end anlan (config)# int eth0 anlan (config-if)# no isis topology ipv6-unicast % Configuration failed. Error type: validation Error description: Multi topology IS-IS can only be used with wide metrics ``` The MT commands are mainly controlled by the binded area, not by interface. Currently if there is any MT configuration in the area, `metric-style` must be with the `wide` mode, this requirement is sufficient. So, the unnecessary/wrong check for MT in the interface should be removed. Signed-off-by: anlan_cs <anlan_cs@126.com>
2024-09-09isisd: fix flex-algo northbound configurationLouis Scalbert
ISIS flex-algo cannot be configured in the same northbound transaction. > # cat config3 > router isis 1 > flex-algo 129 > priority 128 > > # vtysh -f config3 > % Configuration failed. > > Error type: validation > The following commands were dynamically grouped into the same transaction and rejected: > - router isis 1 > - flex-algo 129 > - priority 128 > [1523430|isisd] done Do not check data presence in running datastore in validation state. Fixes: 893882ee20 ("isisd: add isis flex-algo configuration backend") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-09-09isisd: avoid nb_running_get_entry during validationLouis Scalbert
Avoid calling nb_running_get_entry() during northbound validation. Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-09-09isisd: fix flex-algo affinity settingLouis Scalbert
The following causes a validation error. > # cat config > affinity-map green bit-position 0 > router isis 1 > flex-algo 129 > affinity exclude-any green > # vtysh -f config > Error type: validation > Error description: affinity map green isn't found > The following commands were dynamically grouped into the same transaction and rejected: > - affinity-map green bit-position 0 > - router isis 1 > - flex-algo 129 > - affinity exclude-any green Data does not exist in memory in validation state. Get data from the candidate northbound config instead. Fixes: 893882ee20 ("isisd: add isis flex-algo configuration backend") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-09-09isisd: fix crash at flex-algo affinity settingLouis Scalbert
The following causes a isisd crash. > # cat config > affinity-map green bit-position 0 > router isis 1 > flex-algo 129 > affinity exclude-any green > # vtysh -f config > #0 raise (sig=<optimized out>) at ../sysdeps/unix/sysv/linux/raise.c:50 > #1 0x00007f650cd32756 in core_handler (signo=6, siginfo=0x7ffc56f93070, context=0x7ffc56f92f40) at lib/sigevent.c:258 > #2 <signal handler called> > #3 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 > #4 0x00007f650c91c537 in __GI_abort () at abort.c:79 > #5 0x00007f650cd007c9 in nb_running_get_entry_worker (dnode=0x0, xpath=0x0, abort_if_not_found=true, rec_search=true) at lib/northbound.c:2531 > #6 0x00007f650cd007f9 in nb_running_get_entry (dnode=0x55d9ad406e00, xpath=0x0, abort_if_not_found=true) at lib/northbound.c:2537 > #7 0x000055d9ab302248 in isis_instance_flex_algo_affinity_set (args=0x7ffc56f947a0, type=2) at isisd/isis_nb_config.c:2998 > #8 0x000055d9ab3027c0 in isis_instance_flex_algo_affinity_exclude_any_create (args=0x7ffc56f947a0) at isisd/isis_nb_config.c:3155 > #9 0x00007f650ccfe284 in nb_callback_create (context=0x7ffc56f94d20, nb_node=0x55d9ad28b540, event=NB_EV_VALIDATE, dnode=0x55d9ad406e00, resource=0x0, errmsg=0x7ffc56f94de0 "", > errmsg_len=8192) at lib/northbound.c:1487 > #10 0x00007f650ccff067 in nb_callback_configuration (context=0x7ffc56f94d20, event=NB_EV_VALIDATE, change=0x55d9ad406d40, errmsg=0x7ffc56f94de0 "", errmsg_len=8192) at lib/northbound.c:1884 > #11 0x00007f650ccfda31 in nb_candidate_validate_code (context=0x7ffc56f94d20, candidate=0x55d9ad20d710, changes=0x7ffc56f94d38, errmsg=0x7ffc56f94de0 "", errmsg_len=8192) > at lib/northbound.c:1246 > #12 0x00007f650ccfdc67 in nb_candidate_commit_prepare (context=..., candidate=0x55d9ad20d710, comment=0x0, transaction=0x7ffc56f94da0, skip_validate=false, ignore_zero_change=false, > errmsg=0x7ffc56f94de0 "", errmsg_len=8192) at lib/northbound.c:1317 > #13 0x00007f650ccfdec4 in nb_candidate_commit (context=..., candidate=0x55d9ad20d710, save_transaction=true, comment=0x0, transaction_id=0x0, errmsg=0x7ffc56f94de0 "", errmsg_len=8192) > at lib/northbound.c:1381 > #14 0x00007f650cd045ba in nb_cli_classic_commit (vty=0x55d9ad3f7490) at lib/northbound_cli.c:57 > #15 0x00007f650cd04749 in nb_cli_pending_commit_check (vty=0x55d9ad3f7490) at lib/northbound_cli.c:96 > #16 0x00007f650cc94340 in cmd_execute_command_real (vline=0x55d9ad3eea10, vty=0x55d9ad3f7490, cmd=0x0, up_level=0) at lib/command.c:1000 > #17 0x00007f650cc94599 in cmd_execute_command (vline=0x55d9ad3eea10, vty=0x55d9ad3f7490, cmd=0x0, vtysh=0) at lib/command.c:1080 > #18 0x00007f650cc94a0c in cmd_execute (vty=0x55d9ad3f7490, cmd=0x55d9ad401d30 "XFRR_end_configuration", matched=0x0, vtysh=0) at lib/command.c:1228 > #19 0x00007f650cd523a4 in vty_command (vty=0x55d9ad3f7490, buf=0x55d9ad401d30 "XFRR_end_configuration") at lib/vty.c:625 > #20 0x00007f650cd5413d in vty_execute (vty=0x55d9ad3f7490) at lib/vty.c:1388 > #21 0x00007f650cd56353 in vtysh_read (thread=0x7ffc56f99370) at lib/vty.c:2400 > #22 0x00007f650cd4b6fd in event_call (thread=0x7ffc56f99370) at lib/event.c:1996 > #23 0x00007f650ccd1365 in frr_run (master=0x55d9ad103cf0) at lib/libfrr.c:1231 > #24 0x000055d9ab29036e in main (argc=2, argv=0x7ffc56f99598, envp=0x7ffc56f995b0) at isisd/isis_main.c:354 Configuring the same in vtysh configure interactive mode works properly. When using "vtysh -f", the northbound compatible configuration is committed together whereas, in interactive mode, it committed line by line. In the first situation, in validation state nb_running_get_entry() fails because the area not yet in running. Do not use nb_running_get_entry() northbound validation state. Fixes: 893882ee20 ("isisd: add isis flex-algo configuration backend") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-07-26isisd: free asla at last flex-algo unconfigurationLouis Scalbert
Free ASLA when the last flex-algo is unconfigured. Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-07-26isisd: fix building asla at first flex-algo configLouis Scalbert
When an color affinity is set on an interface before configuring the flex-algorithm, the ASLA (Application Specific Link-Attribute) sub-TLV is not build. Flex-algo fails to build the paths when a affinity constraint is required because of the lacking of information contained in ASLA. There are no problems when the configuration order is reversed. For example: > affinity-map red bit-position 1 > > interface eth2 > link-params > affinity red > > router isis 1 > mpls-te on > flex-algo 129 > dataplane sr-mpls > advertise-definition > affinity include-any green In isis_link_params_update_asla(), the ASLA sub-TLV is not build when the list of flex-algos is empty. Update ASLA when the first flex-algorithm is configured. Fixes: 893882ee20 ("isisd: add isis flex-algo configuration backend") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-07-26isisd: move flex_algo_delete into flex_algo_destroyLouis Scalbert
Move flex_algo_delete() content into isis_instance_flex_algo_destroy() because it is called only once. Rename _flex_algo_delete to flex_algo_free() Cosmetic change. Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-07-08Merge pull request #16090 from zhou-run/202405271057Russ White
isisd: When operating multiple areas, the system ID behaves abnormally.
2024-06-18isisd: Deal with SRv6 locator instead of chunkCarmine Scarpitta
Currently, when SRv6 is enabled in IS-IS, IS-IS requests a locator chunk from Zebra. Zebra assigns a locator chunk to IS-IS, and then IS-IS can allocate SIDs from the locator chunk. Recently, the implementation of SRv6 in Zebra has been improved, and a new API has been introduced for obtaining/releasing the SIDs. Now, the daemons no longer need to request a chunk. Instead, the daemons interact with Zebra to obtain information about the locator and subsequently to allocate/release the SIDs. This commit extends IS-IS to use the new SRv6 API. In particular, it removes the chunk throughout the IS-IS code and modifies IS-IS to request/save/advertise the locator instead of the chunk. Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2024-05-27isisd: When operating multiple areas, the system ID behaves abnormally.zhou-run
When clearing the net in one of the areas, the system ID is unconditionally cleared, even if the net does not include the current system ID. Signed-off-by: zhou-run <166502045+zhou-run@users.noreply.github.com> isisd: When operating multiple areas, the system ID behaves abnormally. When deleting one of the areas, even if the net under the area includes the current system ID, the system ID still remains. Signed-off-by: zhou-run <166502045+zhou-run@users.noreply.github.com> isisd: fix frrbot styling issues found fix frrbot styling issues found Signed-off-by: zhou-run <166502045+zhou-run@users.noreply.github.com> isisd: fix frrbot styling issues found fix frrbot styling issues found Signed-off-by: zhou-run <166502045+zhou-run@users.noreply.github.com> isisd: Resolve compilation issues. The higher version updates 'struct area_addr' to 'struct iso_address'. Signed-off-by: zhou-run <166502045+zhou-run@users.noreply.github.com> isisd: fix frrbot styling issues found fix frrbot styling issues found Signed-off-by: zhou-run <166502045+zhou-run@users.noreply.github.com>
2024-05-18isisd: fix crash when configuring the circuit type for the interface.zhou-run
1. When both Router A and Router B are configured with "is-type level-1," the area->is_type will be assigned the value IS_LEVEL_1, and circuit->is_type will also be assigned the value IS_LEVEL_1. 2. Configuring the circuit type "isis circuit-type level-1-2" for the interface of Router A will inadvertently call lib_interface_isis_circuit_type_modify to assign circuit->is_type the value IS_LEVEL_1_AND_2. This causes the hello packets reception and transmission, as well as the reception of LSP/SNP packets, to check circuit->is_type, allowing the level-2 hello packets to be sent and received normally, and level-2 LSP/SNP packets to be received normally. 3. When Router B modifies the configuration to "is-type level-2," and Router A and Router B establish a level-2 neighbor relationship, Router B sends level-2 LSP packets to Router A. Upon receiving these, Router A calls isis_spf_schedule to calculate the level-2 SPT, which results in accessing a null pointer. When defining the behavior of the ISIS router, the call to isis_area_is_type_set will check that area->is_type is not IS_LEVEL_1_AND_2, and it disallows circuit->is_type_config from overriding circuit->is_type. Therefore, when configuring the circuit type for the interface of Router A, it should also check that area->is_type is not IS_LEVEL_1_AND_2 and disallow circuit->is_type_config from overriding circuit->is_type. Signed-off-by: zhou-run <166502045+zhou-run@users.noreply.github.com>
2023-11-29lib: all: remove './' from xpath 22% speedupChristian Hopps
fixes #8299 Signed-off-by: Christian Hopps <chopps@labn.net>
2023-10-06isisd: remove redundant northbound destroy callbacksIgor Ryzhov
Fixes startup warnings: ``` ISIS: [ZKB8W-3S2Q4][EC 100663330] unneeded 'destroy' callback for '/frr-isisd:isis/instance/segment-routing-srv6/msd/node-msd/max-segs-left' ISIS: [ZKB8W-3S2Q4][EC 100663330] unneeded 'destroy' callback for '/frr-isisd:isis/instance/segment-routing-srv6/msd/node-msd/max-end-pop' ISIS: [ZKB8W-3S2Q4][EC 100663330] unneeded 'destroy' callback for '/frr-isisd:isis/instance/segment-routing-srv6/msd/node-msd/max-h-encaps' ISIS: [ZKB8W-3S2Q4][EC 100663330] unneeded 'destroy' callback for '/frr-isisd:isis/instance/segment-routing-srv6/msd/node-msd/max-end-d' ``` Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2023-09-11isisd: Make SRv6 interface configurableCarmine Scarpitta
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-11isisd: Make SRv6 Node MSDs customizableCarmine Scarpitta
Add CLI commands to customize SRv6 Node MSD values. Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11isisd: Add nb command to unset an SRv6 locatorCarmine Scarpitta
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>
2023-09-11isisd: Add nb command to configure an SRv6 locatorCarmine Scarpitta
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>
2023-08-04isisd: Add nb command to enable/disable SRv6Carmine Scarpitta
Add a northbound command to enable/disable SRv6 on a given IS-IS area. Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-07-12isisd: add the 'redistribute table' internal supportPhilippe Guibert
The 'redistribute table' command does not create the internal contexts with the appropriate table identifier. Redistributed prefixes in IS-IS do not care about the table identifier. Add a linked list of redistribution contexts, and map the nb configuration to the linked list. - A new 'table' attribute is added in the 'struct isis_redist' context. - The 'isis_redist_update_zebra_subscriptions()' function is removed and is replaced by direct call to zebra API for turning on/off redirection. - The redistributed routes coming from zebra import the 'tableid' information. - The fabricd redistribute running-config is reworked, and the 'get_redist_settings()' function is removed. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2023-07-12isisd: add redistribute table identifier in nb configurationPhilippe Guibert
The yang model does not handle the table identifier in IS-IS. For each redistributed each address family, a new list of table elements is added to store the table identifier to redistribute, and also the optional metric and route-map values for each table identifier. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2023-04-18isisd: add isis flex-algo configuration backendHiroki Shirokura
Add the backend functions for the flex-algo configuration. Signed-off-by: Hiroki Shirokura <hiroki.shirokura@linecorp.com> Signed-off-by: Eric Kinzie <ekinzie@labn.net> Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2023-04-18lib,vtysh,isisd,yang: algo cli/yang/callbacksHiroki Shirokura
Define the IS-IS flex-algo structure in yang, the CLI configuration commands and the skeletons of frontend and backend functions that are called by the CLI code. Signed-off-by: Hiroki Shirokura <hiroki.shirokura@linecorp.com> Signed-off-by: Eric Kinzie <ekinzie@labn.net> Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2023-04-18isisd,yang: add algorithm-prefix-sid configuration treeHiroki Shirokura
Add the ability to configure a Segment-Routing prefix SID for a given algorithm. For example: > segment-routing prefix 10.10.10.10/32 algorithm 128 index 100 Signed-off-by: Hiroki Shirokura <hiroki.shirokura@linecorp.com> Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2023-04-17isisd: update struct sr_prefix_cfg with algorithm idHiroki Shirokura
The information in prefix-sid has a new property called algorithm id. This is used to identify the algorithm that separates it in the same IGP network. This is used in Flex-Algo.In all other cases, the algorithm id is basically 0. Signed-off-by: Hiroki Shirokura <hiroki.shirokura@linecorp.com> Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2023-04-11Merge pull request #13163 from isabelladeleon12/isis_log_dropsRuss White
isisd: Add support for log-pdu-drops
2023-04-04isisd: Add log-pdu-drops CLI/YANG supportIsabella de Leon
New config functionality: r1# conf r1(config)# router isis 1 r1(config-router)# log- log-adjacency-changes Log changes in adjacency state log-pdu-drops Log any dropped PDUs r1(config-router)# log-pdu-drops r1(config-router)# end Signed-off-by: Isabella de Leon <ideleon@microsoft.com>
2023-03-21isisd: Update to the new printfrr ISO formatOlivier Dugeon
This path replaces isisd_format_id, sysid_print, snpa_print, rawlspid_print and isonet_print functions by the new printfrr ISO System ID & Network Address format facilities. It also updates the isisd code to the new iso_address structure defined in lib/iso.h Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2023-03-20Merge pull request #12688 from dorDiogo/isis_hello_padding_sometimesRuss White
isisd: Add support for IS-IS hello padding during-adjacency-formation
2023-02-28isisd: Add advertise-high-metrics CLI/YANG support, modify show outputIsabella de Leon
New config and show functionality: r1# conf r1(config)# router isis 1 r1(config-router)# advertise-high-metrics Advertise high metric value on all interfaces area-password Configure the authentication password for an area ... r1(config-router)# advertise-high-metrics r1(config-router)# end r1# show isis summary ... Area 1: Net: 49.0001.1720.1700.0002.00 TX counters per PDU type: L2 IIH: 1 P2P IIH: 36 LSP RXMT: 0 RX counters per PDU type: Advertise high metrics: Enabled Level-2: ... r1# conf r1(config)# router isis 1 r1(config-router)# no advertise-high-metrics r1(config-router)# end r1# show isis summary ... Area 1: Net: 49.0001.1720.1700.0002.00 TX counters per PDU type: L2 IIH: 1 P2P IIH: 45 LSP RXMT: 0 RX counters per PDU type: Advertise high metrics: Disabled Level-2: ... r1# Signed-off-by: Isabella de Leon <ideleon@microsoft.com>
2023-02-28isisd: Add support for isis hello padding sometimesDiogo Oliveira
New configuration to pad ISIS hello packets during adjacency formation only. Signed-off-by: Diogo Oliveira <14191454+dorDiogo@users.noreply.github.com>
2023-02-22isisd,doc: Add support for isis advertise-passive-onlyDiogo Oliveira
Signed-off-by: Diogo Oliveira <14191454+dorDiogo@users.noreply.github.com>
2023-02-09*: auto-convert to SPDX License IDsDavid Lamparter
Done with a combination of regex'ing and banging my head against a wall. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-10-13Merge pull request #11980 from isabelladeleon12/set_overload_startupRuss White
isisd: Add support for set-overload on-startup
2022-10-12isisd: Add expected behavior with set-overload-bitIsabella de Leon
Signed-off-by: Isabella de Leon <ideleon@microsoft.com>
2022-09-21isisd: Add set-overload on-startup CLI/YANG supportIsabella de Leon
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-20isisd: Fix memory leak on shutdown with prefix listsDonald Sharp
==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-02isisd: Correct Valgrind errorsOlivier Dugeon
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-06-02isisd: replace ipv4-unicast with standard in config and oper contextsPhilippe Guibert
Only the multi-topology command can use 'ipv4-unicast' keyword to configure standard topology. The remaining code: dump from show commands, and yang definition, uses 'standard' keyword instead. The test have not been modified. The change would consists in modifying test_fuzz_isis_tlv_tests.h.gz: - replacing ipv4-unicast occurences with standard \x69\x70\x76\x34\x2d\x75\x6e\x69\x63\x61\x73\x74 with \x73\x74\x61\x6e\x64\x61\x72\x64 - align the buffer length by removing 4 bytes per occurence Instead, a specific isis_mtid2str_fake() routing has been put in place in isis_tlvs.c file. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2022-04-18isisd: Fix crash in ISIS when mtu mismatch occurslynnemorrison
When lsp-mtu is configured larger than interface mtu and the interface is brought up, the ISIS code would crash. When other vendors have this misconfiguration they just continue ISIS running and allow the LSP packets to be created but not sent. When the misconfiguration is corrected the LSP packets start being sent. This change creates that same behavior in FRR. The startup issue I am hitting is when the isis lsp-mtu is larger that the interfaces mtu. We run into this case when we are in the process of changing the mtu on a tunnel. I issue a shutdown/no shutdown on the interface, because the tunnel MTU is smaller than the lsp-mtu, it is considered an error and calls circuit_if_del. This deletes part of the circuit information, which includes the circuit->ip_addr list. Later on we get an address update from zebra and try to add the interface address to this list and crash. 2022/04/07 20:19:52.032 ISIS: [GTRPJ-X68CG] CSM_EVENT for tun_gw2: IF_UP_FROM_Z calls isis_circuit_if_add this initialize the circuit->ip_addrs isis_circuit_up has the mtu check circuit->area->lsp_mtu > isis_circuit_pdu_size(circuit) and fails returns ISIS_ERROR on failure call isis_circuit_if_del this deletes the circiut->ip_addrs list <---- 2022/04/07 20:19:52.032 ZEBRA: [NXYHN-ZKW2V] zebra_if_addr_update_ctx: INTF_ADDR_ADD: ifindex 3, addr 192.168.0.1/24 message to isisd to add address isis_zebra_if_address_add isis_circuit_add_addr circuit->ip_addr we try to add the ip address to the list, but it was deleted above and isisd crashes Signed-off-by: Lynne Morrison <lynne.morrison@ibm.com>
2022-03-31isisd, lib, ospfd, pathd: Null out free'd pointerDonald Sharp
The commands: router isis 1 mpls-te on no mpls-te on mpls-te on no mpls-te on ! Will crash Valgrind gives us this: ==652336== Invalid read of size 8 ==652336== at 0x49AB25C: typed_rb_min (typerb.c:495) ==652336== by 0x4943B54: vertices_const_first (link_state.h:424) ==652336== by 0x493DCE4: vertices_first (link_state.h:424) ==652336== by 0x493DADC: ls_ted_del_all (link_state.c:1010) ==652336== by 0x47E77B: isis_instance_mpls_te_destroy (isis_nb_config.c:1871) ==652336== by 0x495BE20: nb_callback_destroy (northbound.c:1131) ==652336== by 0x495B5AC: nb_callback_configuration (northbound.c:1356) ==652336== by 0x4958127: nb_transaction_process (northbound.c:1473) ==652336== by 0x4958275: nb_candidate_commit_apply (northbound.c:906) ==652336== by 0x49585B8: nb_candidate_commit (northbound.c:938) ==652336== by 0x495CE4A: nb_cli_classic_commit (northbound_cli.c:64) ==652336== by 0x495D6C5: nb_cli_apply_changes_internal (northbound_cli.c:250) ==652336== Address 0x6f928e0 is 272 bytes inside a block of size 320 free'd ==652336== at 0x48399AB: free (vg_replace_malloc.c:538) ==652336== by 0x494BA30: qfree (memory.c:141) ==652336== by 0x493D99D: ls_ted_del (link_state.c:997) ==652336== by 0x493DC20: ls_ted_del_all (link_state.c:1018) ==652336== by 0x47E77B: isis_instance_mpls_te_destroy (isis_nb_config.c:1871) ==652336== by 0x495BE20: nb_callback_destroy (northbound.c:1131) ==652336== by 0x495B5AC: nb_callback_configuration (northbound.c:1356) ==652336== by 0x4958127: nb_transaction_process (northbound.c:1473) ==652336== by 0x4958275: nb_candidate_commit_apply (northbound.c:906) ==652336== by 0x49585B8: nb_candidate_commit (northbound.c:938) ==652336== by 0x495CE4A: nb_cli_classic_commit (northbound_cli.c:64) ==652336== by 0x495D6C5: nb_cli_apply_changes_internal (northbound_cli.c:250) ==652336== Block was alloc'd at ==652336== at 0x483AB65: calloc (vg_replace_malloc.c:760) ==652336== by 0x494B6F8: qcalloc (memory.c:116) ==652336== by 0x493D7D2: ls_ted_new (link_state.c:967) ==652336== by 0x47E4DD: isis_instance_mpls_te_create (isis_nb_config.c:1832) ==652336== by 0x495BB29: nb_callback_create (northbound.c:1034) ==652336== by 0x495B547: nb_callback_configuration (northbound.c:1348) ==652336== by 0x4958127: nb_transaction_process (northbound.c:1473) ==652336== by 0x4958275: nb_candidate_commit_apply (northbound.c:906) ==652336== by 0x49585B8: nb_candidate_commit (northbound.c:938) ==652336== by 0x495CE4A: nb_cli_classic_commit (northbound_cli.c:64) ==652336== by 0x495D6C5: nb_cli_apply_changes_internal (northbound_cli.c:250) ==652336== by 0x495D23E: nb_cli_apply_changes (northbound_cli.c:268) Let's null out the pointer. After this change. Valgrind no longer reports issues and isisd no longer crashes. Fixes: #10939 Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18isisd: Log messages should not have newlines in them.Donald Sharp
Fixes the compile failing because log messages were introduced with newlines where in them. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-11-30isisd: Add Link State Traffic Engineering supportOlivier Dugeon
Add Link State TED features to isis_te.c and new CLI to export LS TED and show LS TED to IS-IS. IS-IS LSPs are parse each time a new LSP event occurs in order to update accordingly the Link State Traffic Engineering Database. LS TED could be exported through the ZAPI Opaque message (see sharpd as example). Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2021-11-30isisd: Add support for RFC6119 (IPv6 TE in IS-IS)Olivier Dugeon
- Add advertisement of Global IPv6 address in IIH pdu - Add new CLI to set IPv6 Router ID - Add advertisement of IPv6 Router ID - Correctly advertise IPv6 local and neighbor addresses in Extended IS and MT Reachability TLVs - Correct output of Neighbor IPv6 address in 'show isis database detail' - Manage IPv6 addresses advertisement and corresponiding Adjacency SID when IS-IS is not using Multi-Topology by introducing a new ISIS_MT_DISABLE value for mtid (== 4096 i.e. first reserved flag set to 1) Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2021-11-22*: cleanup ifp->vrf_idIgor Ryzhov
Since f60a1188 we store a pointer to the VRF in the interface structure. There's no need anymore to store a separate vrf_id field. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-10-30isisd: fix circuit is-type configurationIgor Ryzhov
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-30isisd: simplify check to forbid area-tag modificationIgor Ryzhov
We can simply check whether the circuit exists already – if it exists, then we forbid the area-tag modification. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-10-30isisd: remove useless checks when configuring ldp-syncIgor Ryzhov
We have checks on NB validation stage to prevent configuring LDP sync on interfaces in non-default VRFs. These checks are completely useless, because the interface can be easily moved to another VRF after configuring LDP sync. Instead, the check must be done in the actual code to cover the case when the interface is moved between VRFs. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>