summaryrefslogtreecommitdiffstats
path: root/ospfd/ospfd.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* *: auto-convert to SPDX License IDsDavid Lamparter2023-02-091-16/+1
| | | | | | Done with a combination of regex'ing and banging my head against a wall. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* Revert "ospfd: few fixes in rSPF calc when LSA received from non root node"Donatas Abraitis2023-01-171-1/+0
| | | | This reverts commit 9f2984d97c2e23198db47d39a725f3c50d2ee0ed.
* ospfd: fix SPF table memory leakRafael Zalamena2022-12-201-0/+4
| | | | | | | After `free()`ing a table also set it to NULL so when the instance release function is called we know whether the pointer is valid or not. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
* ospfd: Fixing memleak.rgirada2022-11-221-0/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Description: As part of signal handler ospf_finish_final(), lsas are originated and added to refresh queues are not freed. One such leak is : ==2869285== 432 (40 direct, 392 indirect) bytes in 1 blocks are definitely lost in loss record 159 of 221 ==2869285== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==2869285== by 0x4910EC3: qcalloc (memory.c:116) ==2869285== by 0x199024: ospf_refresher_register_lsa (ospf_lsa.c:4017) ==2869285== by 0x199024: ospf_refresher_register_lsa (ospf_lsa.c:3979) ==2869285== by 0x19A37F: ospf_network_lsa_install (ospf_lsa.c:2680) ==2869285== by 0x19A37F: ospf_lsa_install (ospf_lsa.c:2941) ==2869285== by 0x19C18F: ospf_network_lsa_update (ospf_lsa.c:1099) ==2869285== by 0x1931ED: ism_change_state (ospf_ism.c:556) ==2869285== by 0x1931ED: ospf_ism_event (ospf_ism.c:596) ==2869285== by 0x494E0B0: thread_call (thread.c:2006) ==2869285== by 0x494E395: _thread_execute (thread.c:2098) ==2869285== by 0x19FBC6: nsm_change_state (ospf_nsm.c:695) ==2869285== by 0x19FBC6: ospf_nsm_event (ospf_nsm.c:861) ==2869285== by 0x494E0B0: thread_call (thread.c:2006) ==2869285== by 0x494E395: _thread_execute (thread.c:2098) ==2869285== by 0x19020B: ospf_if_cleanup (ospf_interface.c:322) ==2869285== by 0x192D0C: ism_interface_down (ospf_ism.c:393) ==2869285== by 0x193028: ospf_ism_event (ospf_ism.c:584) ==2869285== by 0x494E0B0: thread_call (thread.c:2006) ==2869285== by 0x494E395: _thread_execute (thread.c:2098) ==2869285== by 0x190F10: ospf_if_down (ospf_interface.c:851) ==2869285== by 0x1911D6: ospf_if_free (ospf_interface.c:341) ==2869285== by 0x1E6E98: ospf_finish_final (ospfd.c:748) ==2869285== by 0x1E6E98: ospf_deferred_shutdown_finish (ospfd.c:578) ==2869285== by 0x1E7727: ospf_finish (ospfd.c:682) ==2869285== by 0x1E7727: ospf_terminate (ospfd.c:652) ==2869285== by 0x18852B: sigint (ospf_main.c:105) ==2869285== by 0x493BE12: frr_sigevent_process (sigevent.c:130) ==2869285== by 0x494DCD4: thread_fetch (thread.c:1775) ==2869285== by 0x4905022: frr_run (libfrr.c:1197) ==2869285== by 0x187891: main (ospf_main.c:235) Added a fix to cleanup all these queue pointers and corresponing lsas in it. Signed-off-by: Rajesh Girada <rgirada@vmware.com>
* ospfd: few fixes in rSPF calc when LSA received from non root nodeMadhuri Kuruganti2022-10-121-0/+1
| | | | Signed-off-by: Madhuri Kuruganti <maduri111@gmail.com>
* ospfd: Added clis to change default timers for LSA refresh and maxage remove ↵Manoj Naragund2022-09-011-0/+1
| | | | | | | | | | | | | delay. Description: Added hidden clis that will allow you to reset the default timers for LSA refresh and LSA maxage remove delay, these will help in testing LSA refresh scenarios in upcoming OSPFv2 Flood reduction feature(rfc4136). IETF Link : https://datatracker.ietf.org/doc/html/rfc4136 Signed-off-by: Manoj Naragund <mnaragund@vmware.com>
* ospfd: Convert thread_cancel to THREAD_OFFDonald Sharp2022-07-211-2/+2
| | | | | | Just convert all uses of thread_cancel to THREAD_OFF. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
* ospfd: Remove various macros that overlap THREAD_OFFDonald Sharp2022-07-211-24/+24
| | | | | | | | Let's just use THREAD_OFF consistently in the code base instead of each daemon having a special macro that needs to be looked at and remembered what it does. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
* ospfd: add router id support to ospf apiChristian Hopps2022-06-231-0/+5
| | | | Signed-off-by: Christian Hopps <chopps@labn.net>
* *: Properly use memset() when zeroingDonatas Abraitis2022-05-111-1/+1
| | | | | | | Wrong: memset(&a, 0, sizeof(struct ...)); Good: memset(&a, 0, sizeof(a)); Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
* *: Change thread->func to return void instead of intDonald Sharp2022-02-241-3/+1
| | | | | | | The int return value is never used. Modify the code base to just return a void instead. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
* ospfd: Fix spelling mistakesDonald Sharp2022-02-141-1/+1
| | | | Signed-off-by: Donald Sharp <sharpd@nvidia.com>
* *: do not send opaque data to zebra by defaultIgor Ryzhov2022-01-241-2/+0
| | | | | | | | | | | Opaque data takes up a lot of memory when there are a lot of routes on the box. Given that this is just a cosmetic info, I propose to disable it by default to not shock people who start using FRR for the first time or upgrades from an old version. Fixes #10101. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* Merge pull request #9644 from opensourcerouting/ospf-opaque-attrsRuss White2022-01-181-0/+2
|\ | | | | OSPF opaque route attributes
| * lib, ospfd, ospf6d, zebra: add OSPF opaque route attributesRenato Westphal2022-01-151-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Update ospfd and ospf6d to send opaque route attributes to zebra. Those attributes are stored in the RIB and can be viewed using the "show ip[v6] route" commands (other than that, they are completely ignored by zebra). Example: ``` debian# show ip route 192.168.1.0/24 Routing entry for 192.168.1.0/24 Known via "ospf", distance 110, metric 20, best Last update 01:57:08 ago * 10.0.1.2, via eth-rt2, weight 1 OSPF path type : External-2 OSPF tag : 0 debian# debian# show ip route 192.168.1.0/24 json { "192.168.1.0\/24":[ { "prefix":"192.168.1.0\/24", "prefixLen":24, "protocol":"ospf", "vrfId":0, "vrfName":"default", "selected":true, [snip] "ospfPathType":"External-2", "ospfTag":"0" } ] } ``` Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* | *: rework renaming the default VRFIgor Ryzhov2021-12-211-26/+15
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* *: cleanup ifp->vrf_idIgor Ryzhov2021-11-221-2/+2
| | | | | | | 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>
* *: Cleanup some documentation from quagga->frrDonald Sharp2021-11-111-1/+1
| | | | Signed-off-by: Donald Sharp <sharpd@nvidia.com>
* ospfd: Close log files before exitingDonald Sharp2021-10-201-0/+1
| | | | | | | | When doing a normal exit from ospf we should close the log file as that we are leaving a bunch of unterminated logging processes by not doing so. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
* ospfd: Summary LSA is not originated when process is resetMobashshera Rasool2021-09-021-0/+3
| | | | | | | | | | | | | | | | | | | Problem Statement: ================== Summary LSA is not originated when router-id is modified or process is reset Root Cause Analysis: ==================== When router-id is modified or process is cleared, all the external LSAs are flushed then LSA is re-originated using ospf_external_lsa_rid_change When the LSAs are flushed, the aggregate flags are not reset. Fix: =============== Reset the aggregation flag when the LSAs are flushed. Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
* ospfd: fix initialization when vrf doesn't exist yetIgor Ryzhov2021-08-121-35/+27
| | | | | | | | | | | | | There are a couple of things that are not initialized if the OSPF router is created in a non-existent VRF: - ospf_lsa_maxage_walker - ospf_lsa_refresh_walker - ospf_opaque_type11_lsa_init Rearrange some code to always initialize them and make it easier to find similar problems in the future. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* ospfd: ospf redistribute originating LSA internal connected routesMobashshera Rasool2021-08-101-4/+4
| | | | | | | | | When OSPF is disabled on interface and enabled again, the IP which is not matching the prefix-list is getting originated as External LSA. Fixes: #9362 Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
* ospfd: introduce support for Graceful Restart (restarting mode)Renato Westphal2021-07-051-4/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | RFC 3623 specifies the Graceful Restart enhancement to the OSPF routing protocol. This PR implements support for the restarting mode, whereas the helper mode was implemented by #6811. This work is based on #6782, which implemented the pre-restart part and settled the foundations for the post-restart part (behavioral changes, GR exit conditions, and on-exit actions). Here's a quick summary of how the GR restarting mode works: * GR can be enabled on a per-instance basis using the `graceful-restart [grace-period (1-1800)]` command; * To perform a graceful shutdown, the `graceful-restart prepare ospf` EXEC-level command needs to be issued before restarting the ospfd daemon (there's no specific requirement on how the daemon should be restarted); * `graceful-restart prepare ospf` will initiate the graceful restart for all GR-enabled instances by taking the following actions: o Flooding Grace-LSAs over all interfaces o Freezing the OSPF routes in the RIB o Saving the end of the grace period in non-volatile memory (a JSON file stored in `$frr_statedir`) * Once ospfd is started again, it will follow the procedures described in RFC 3623 until it detects it's time to exit the graceful restart (either successfully or unsuccessfully). Testing done: * New topotest featuring a multi-area OSPF topology (including stub and NSSA areas); * Successful interop tests against IOS-XR routers acting as helpers. Co-authored-by: GalaxyGorilla <sascha@netdef.org> Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* ospfd: rename the graceful restart headerRenato Westphal2021-07-051-1/+1
| | | | | | | | | Both the GR helper code and the upcoming GR restarting code are going to share a lot of definitions. As such, rename ospf_gr_helper.h to ospf_gr.h, which will be the central point of all GR definitions and prototypes. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* Merge pull request #8798 from opensourcerouting/ospfd-fixesOlivier Dugeon2021-06-091-3/+6
|\ | | | | ospfd: assorted fixes
| * ospfd: fix cleanup of MaxAge LSAs on exitRenato Westphal2021-06-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | During shutdown, the ospf->maxage_lsa table is iterated over to clean up all existing entries. While doing that, route_unlock_node() should be called only for the nodes that have an associated entry, otherwise the table will get corrupted and ospfd will crash. As a side note, using a routing table to store MaxAge LSAs was a very poor choice of a data structure, considering that a simple rb-tree or hash table would get the job done with a much simpler (and less error-prone) API. Something to cleanup in the future... Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
| * ospfd: fix GR helper initialization and terminationRenato Westphal2021-06-081-2/+5
| | | | | | | | | | | | | | | | Since a single ospfd process can have multiple OSPF interfaces configured, we need to separate the global GR initialization and termination from per-instance initialization and termination. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* | ospfd: fix passive interface configurationIgor Ryzhov2021-06-051-10/+0
|/ | | | | | | | | | | | | | | | | | | | | | | | | | Currently, passive interface flag is configured from the router node using "passive-interface IFNAME". There are multiple problems with this command: - it is not in line with all other interface-related commands - other parameters are configured from the interface node using "ip ospf" prefix - it is not in line with OSPFv3 - passive flag is configured from the interface node using "ipv6 ospf6 passive" command - most importantly, it doesn't work correctly when the interface is in a different VRF - when using VRF-lite, it incorrectly changes the vrf_id of the interface and it becomes desynced with the actual state; when using netns, it creates a new fake interface and configures it instead of configuring the necessary interface To fix all the problems, this commit adds a new command to the interface configuration node - "ip ospf passive". The purpose of the command is completely the same, but it works correctly in a multi-VRF environment. The old command is preserved for the backward compatibility, but the warning is added that it is deprecated because it doesn't work correctly with VRFs. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* ospfd: if destroy the whole ospf, then remove ospf's interface config: ↵anlancs2021-06-031-11/+15
| | | | | | passive-interface Signed-off-by: anlancs <anlan_cs@tom.com>
* ospfd: fix "default-information originate" in non-existing vrfIgor Ryzhov2021-05-181-0/+10
| | | | | | | | If the default route redistribution is configured in OSPF router before the VRF is created, then this is not currently registered in zebra after the VRF creation. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* Merge pull request #8639 from idryzhov/isis-new-bfd-libRafael Zalamena2021-05-091-1/+0
|\ | | | | isisd: rework BFD integration
| * lib: remove old bfd libraryIgor Ryzhov2021-05-071-1/+0
| | | | | | | | | | | | | | This commit also adds missing `bfd_protocol_integration_set_shutdown` to ospf6d and pimd. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* | ospfd: free "default-information originate" config when removing routerIgor Ryzhov2021-05-071-2/+7
| | | | | | | | Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* | ospfd: deregister vrf from zebra when vrf is disabledIgor Ryzhov2021-05-051-12/+15
|/ | | | | | Currently the VRF is deregistered only when it is re-enabled again. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* Merge pull request #8455 from achernavin22/ospf_nssa_after_redist2Russ White2021-04-201-0/+1
|\ | | | | ospfd: install Type-7 when NSSA area is configured after redistribution
| * ospfd: install Type-7 when NSSA area is configured after redistributionAlexander Chernavin2021-04-121-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, if NSSA area is configured before redistribution is enabled, Type-7 LSA's are installed and flooded. But if NSSA area is configured after redistribution is enabled, Type-7 LSA's are not installed. With this change, when NSSA area is configured, schedule a task that scans for external LSA's. If they exist, install Type-7 and flood to all NSSA Areas. There already was an attempt to fix this problem in 0f321812f where ospf_asbr_nssa_redist_task() was triggered in ospf_abr_task_timer(). This turns out to be incorrect place for this operation because it's a one-off operation needed only after "area <ID> nssa" execution. And ospf_abr_task_timer() is a periodic operation. Triggering ospf_asbr_nssa_redist_task() in ospf_abr_task_timer() caused a problem that was fixed in 945eec2b6 making the problem with NSSA area configured after redistribution actual again. Signed-off-by: Alexander Chernavin <achernavin@netgate.com>
* | ospfd: Support use of ospf with DMVPNAmol Lad2021-04-051-0/+1
|/ | | | Signed-off-by: Reuben Dowle <reuben.dowle@4rf.com>
* Merge pull request #8058 from rgirada/ospf-ecmpMark Stapp2021-03-301-0/+4
|\ | | | | ospfd: Max multipath config support
| * ospfd: Max multipath config supportrgirada2021-03-301-0/+4
| | | | | | | | | | | | | | | | | | | | | | Description: OSPF does not have an option to control the maximum multiple equal cost paths to reach a destination/route(ECMP). Currently, it is using the system specific max multiple paths. But Somtimes, It requires to control the multiple paths from ospf. This cli helps to configure the max number multiple paths in ospf. Signed-off-by: Rajesh Girada <rgirada@vmware.com>
* | Merge pull request #8362 from idryzhov/fix-ospf-cli-countMark Stapp2021-03-301-30/+17
|\ \ | |/ |/| ospfd: fix counting of "ip ospf area" commands
| * ospfd: fix counting of "ip ospf area" commandsIgor Ryzhov2021-03-301-30/+17
| | | | | | | | | | | | | | | | | | | | Instead of trying to maintain if_ospf_cli_count, let's directly count the number of configured interfaces when it is needed. Current approach sometimes leads to an incorrect counter. Fixes #8321. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* | ospfd: add support for suppress_fackishimo2021-03-241-0/+28
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This command will trigger the OSPF forwarding address suppression in translated type-5 LSAs, causing a NSSA ABR to use 0.0.0.0 as a forwarding address instead of copying the address from the type-7 LSA Example: In a topology like: R1 --- R2(ABR) --- R3(ASBR) R3 is announcing a type-7 LSA that is translated to type-5 by the R2 ABR. The forwarding address in the type-5 is by default copied from the type-7 r1# sh ip os da external AS External Link States LS age: 6 Options: 0x2 : *|-|-|-|-|-|E|- LS Flags: 0x6 LS Type: AS-external-LSA Link State ID: 3.3.3.3 (External Network Number) Advertising Router: 10.0.25.2 LS Seq Number: 80000001 Checksum: 0xcf99 Length: 36 Network Mask: /32 Metric Type: 2 (Larger than any link state path) TOS: 0 Metric: 20 Forward Address: 10.0.23.3 <--- address copied from type-7 lsa External Route Tag: 0 r2# sh ip os database NSSA-external Link States (Area 0.0.0.1 [NSSA]) Link ID ADV Router Age Seq# CkSum Route 3.3.3.3 10.0.23.3 8 0x80000001 0x431d E2 3.3.3.3/32 [0x0] AS External Link States Link ID ADV Router Age Seq# CkSum Route 3.3.3.3 10.0.25.2 0 0x80000001 0xcf99 E2 3.3.3.3/32 [0x0] r2# conf t r2(config)# router ospf r2(config-router)# area 1 nssa suppress-fa r2(config-router)# exit r2(config)# exit r2# sh ip os database NSSA-external Link States (Area 0.0.0.1 [NSSA]) Link ID ADV Router Age Seq# CkSum Route 3.3.3.3 10.0.23.3 66 0x80000001 0x431d E2 3.3.3.3/32 [0x0] AS External Link States Link ID ADV Router Age Seq# CkSum Route 3.3.3.3 10.0.25.2 16 0x80000002 0x0983 E2 3.3.3.3/32 [0x0] r1# sh ip os da external OSPF Router with ID (11.11.11.11) AS External Link States LS age: 34 Options: 0x2 : *|-|-|-|-|-|E|- LS Flags: 0x6 LS Type: AS-external-LSA Link State ID: 3.3.3.3 (External Network Number) Advertising Router: 10.0.25.2 LS Seq Number: 80000002 Checksum: 0x0983 Length: 36 Network Mask: /32 Metric Type: 2 (Larger than any link state path) TOS: 0 Metric: 20 Forward Address: 0.0.0.0 <--- address set to 0 External Route Tag: 0 r2# conf t r2(config)# router ospf r2(config-router)# no area 1 nssa suppress-fa r2(config-router)# exit r1# sh ip os da external OSPF Router with ID (11.11.11.11) AS External Link States LS age: 1 Options: 0x2 : *|-|-|-|-|-|E|- LS Flags: 0x6 LS Type: AS-external-LSA Link State ID: 3.3.3.3 (External Network Number) Advertising Router: 10.0.25.2 LS Seq Number: 80000003 Checksum: 0xcb9b Length: 36 Network Mask: /32 Metric Type: 2 (Larger than any link state path) TOS: 0 Metric: 20 Forward Address: 0.0.0.0 <--- address set to 0 External Route Tag: 0 r2# conf t r2(config)# router ospf r2(config-router)# no area 1 nssa suppress-fa r2(config-router)# exit r1# sh ip os da external OSPF Router with ID (11.11.11.11) AS External Link States LS age: 1 Options: 0x2 : *|-|-|-|-|-|E|- LS Flags: 0x6 LS Type: AS-external-LSA Link State ID: 3.3.3.3 (External Network Number) Advertising Router: 10.0.25.2 LS Seq Number: 80000003 Checksum: 0xcb9b Length: 36 Network Mask: /32 Metric Type: 2 (Larger than any link state path) TOS: 0 Metric: 20 Forward Address: 10.0.23.3 <--- address copied from type-7 lsa External Route Tag: 0 Signed-off-by: ckishimo <carles.kishimoto@gmail.com>
* ospfd: rework BFD integrationRafael Zalamena2021-03-231-0/+4
| | | | | | Use new BFD API to integrate with OSPFv2. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
* *: require semicolon after DEFINE_<typesafe...>David Lamparter2021-03-171-1/+1
| | | | | | Again, see previous commits. Signed-off-by: David Lamparter <equinox@diac24.net>
* *: require semicolon after DEFINE_QOBJ & co.David Lamparter2021-03-171-1/+1
| | | | | | Again, see previous commits. Signed-off-by: David Lamparter <equinox@diac24.net>
* ospfd: don't rely on instance existence in vtyIgor Ryzhov2021-02-241-16/+10
| | | | | | | | | | Store instance index at startup and use it when processing vty commands. The instance itself may be created and deleted by the user in runtime using `[no] router ospf X` command. Fixes #7908 Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* ospfd: ospf_nbr_nbma_lookup_next always returns NULLDonald Sharp2021-01-281-9/+0
| | | | | | | | The calling function of ospf_nbr_nbma_lookup_next calls this function and then immediately returns when it gets the NULL. Just cleanup a bit more code. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
* ospfd: Remove #if 0 codeDonald Sharp2021-01-281-40/+0
| | | | | | | | The #if 0 code in ospfd, has not been compiled since at least 2012. If we are at least 9 years old at this point with no effort to use or save, we should just get rid of it. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
* ospfd: Add support for TI-LFA node protectionGalaxyGorilla2021-01-191-2/+12
| | | | Signed-off-by: GalaxyGorilla <sascha@netdef.org>
* ospfd: TI-LFA basic infrastructure and algorithmsGalaxyGorilla2021-01-191-9/+37
| | | | Signed-off-by: GalaxyGorilla <sascha@netdef.org>