mirror_frr/ospfd
Acee Lindem c494702929 ospfd: Improve OSPF neighbor retransmission list granularity and precision
The current OSPF neighbor retransmission operates on a single per-neighbor
periodic timer that sends all LSAs on the list when it expires.
Additionally, since it skips the first retransmission of received LSAs so
that at least the retransmission interval (resulting in a delay of between
the retransmission interval and twice the interval. In environments where
the links are lossy on P2MP networks with "delay-reflood" configured (which
relies on neighbor retransmission in partial meshs), the implementation
is sub-optimal (to say the least).

This commit reimplements OSPF neighbor retransmission as follows:

   1. A new data structure making use the application managed
      typesafe.h doubly linked list implements an OSPF LSA
      list where each node includes a timestamp.
   2. The existing neighbor LS retransmission LSDB data structure
      is augmented with a pointer to the list node on the LSA
      list to faciliate O(1) removal when the LSA is acknowledged.
   3. The neighbor LS retransmission timer is set to the expiration
      timer of the LSA at the top of the list.
   4. When the timer expires, LSAs are retransmitted that within
      the window of the current time and a small delta (50 milli-secs
      default). The LSAs that are retransmited are given an updated
      retransmission time and moved to the end of the LSA list.
   5. Configuration is added to set the "retransmission-window" to a
      value other than 50 milliseconds.
   6. Neighbor and interface LSA retransmission counters are added
      to provide insight into the lossiness of the links. However,
      these will increment quickly on non-fully meshed P2MP networks
      with "delay-reflood" configured.
   7. Added a topotest to exercise the implementation on a non-fully
      meshed P2MP network with "delay-reflood" configured. The
      alternative was to use existing mechanisms to instroduce loss
      but these seem less determistic in a topotest.

Signed-off-by: Acee Lindem <acee@lindem.com>
2024-06-20 15:31:07 +00:00
..
.gitignore *: cleanup .gitignore files 2018-09-08 21:30:42 +02:00
ChangeLog.opaque.txt Initial revision 2003-02-03 16:31:16 +00:00
Makefile build: non-recursive ospf* 2017-08-04 11:09:50 +02:00
ospf_abr.c ospfd: opsf_abr.c memory leak fix, free range 2023-05-10 10:59:20 +04:00
ospf_abr.h ospfd: add support for NSSA Type-7 address ranges 2023-03-31 19:28:15 -03:00
ospf_api.c *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
ospf_api.h *: create a single registry of daemons' default port values 2024-02-01 11:40:02 -05:00
ospf_apiserver.c ospfd: OSPFAPI Server options to limit to local connections and per-instance TCP 2024-04-25 16:20:50 +00:00
ospf_apiserver.h ospfd: OSPFAPI Server options to limit to local connections and per-instance TCP 2024-04-25 16:20:50 +00:00
ospf_asbr.c ospfd: Send update for route with new metric 2024-03-01 13:10:43 +01:00
ospf_asbr.h ospfd: fix default-metric change if external LSAs already sent 2023-07-19 13:12:40 +00:00
ospf_ase.c ospfd: Assure OSPF AS External routes are installed after link flap 2024-03-21 16:18:59 -04:00
ospf_ase.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_auth.c *: remove sys/stat.h from zebra.h 2024-01-09 12:39:23 -05:00
ospf_auth.h [ospfd]: add support for RFC 5709 HMAC-SHA Auth 2023-09-16 07:38:23 +03:30
ospf_bfd.c *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
ospf_bfd.h *: Convert struct event_master to struct event_loop 2023-03-24 08:32:17 -04:00
ospf_dump_api.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_dump_api.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_dump.c *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
ospf_dump.h *: Fixup formatting issues due to reordering 2023-03-24 08:37:21 -04:00
ospf_errors.c [ospfd]: add support for RFC 5709 HMAC-SHA Auth 2023-09-16 07:38:23 +03:30
ospf_errors.h [ospfd]: add support for RFC 5709 HMAC-SHA Auth 2023-09-16 07:38:23 +03:30
ospf_ext.c ospfd: Decode Extended Link & Prefix TLVs for json 2024-02-12 17:52:00 +01:00
ospf_ext.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_flood.c ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_flood.h ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_gr_helper.c *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
ospf_gr.c ospfd: fix GR state location 2024-01-27 19:02:52 +01:00
ospf_gr.h ospfd, ospf6d: fix time_t truncation 2023-05-30 19:47:28 -03:00
ospf_ia.c *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
ospf_ia.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_interface.c ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_interface.h ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_ism.c ospfd: Implement non-broadcast support for point-to-multipoint networks 2024-04-02 21:34:29 +00:00
ospf_ism.h * : include event ptr in event_execute api 2023-07-25 10:17:48 -04:00
ospf_ldp_sync.c ospfd: fix cli shown in running config when turning off ldp-sync 2024-02-13 10:20:11 -05:00
ospf_ldp_sync.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_lsa.c build: add -Wimplicit-fallthrough 2023-10-12 21:23:18 +03:00
ospf_lsa.h ospfd: implement Type-7 default routes for NSSA areas 2023-03-31 19:28:15 -03:00
ospf_lsdb.c ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_lsdb.h ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_main.c *: Modify agentx to be allowed to be called 2024-05-10 10:16:29 -04:00
ospf_memory.c ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_memory.h ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_neighbor.c ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_neighbor.h ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_network.c ospfd: fix per-interface sockets 2023-07-03 09:37:25 -04:00
ospf_network.h ospfd: support write socket per interface 2023-04-11 10:16:07 -04:00
ospf_nsm.c ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_nsm.h * : include event ptr in event_execute api 2023-07-25 10:17:48 -04:00
ospf_opaque.c ospfd: Prepare Opaque LSA for json output 2024-02-12 17:52:00 +01:00
ospf_opaque.h ospfd: Fix OSPF link-local opaque LSA crash and opaque memory corruption 2023-11-28 16:18:55 -05:00
ospf_packet.c ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_packet.h ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_ri.c Merge pull request #15339 from opensourcerouting/fix/add_deprecation 2024-02-26 14:59:17 -05:00
ospf_ri.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_route.c Merge pull request #14034 from LabNConsulting/aceelindem/ospf_prefix_suppression 2023-07-21 10:14:22 +03:00
ospf_route.h ospfd: Support show intra-area network type in 'show ip ospf route' command 2023-07-18 14:20:05 +08:00
ospf_routemap_nb_config.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_routemap_nb.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_routemap_nb.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_routemap.c lib, ospfd, yang: add route map set for min/max metric 2023-04-18 00:48:16 -05:00
ospf_snmp.c Revert "ospfd: fix some dicey pointer arith in snmp module" 2024-04-23 11:36:14 +02:00
ospf_spf.c *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
ospf_spf.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_sr.c ospfd: Fix compile warning with -Wformat-truncation 2024-04-13 22:41:43 +03:00
ospf_sr.h *: Rename struct thread to struct event 2023-03-24 08:32:17 -04:00
ospf_te.c ospfd: protect call to get_edge() in ospf_te.c 2024-05-23 10:47:34 +02:00
ospf_te.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_ti_lfa.c ospfd: Delete q_space->vertex_list on No Backup Path 2023-08-19 18:38:14 +04:00
ospf_ti_lfa.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_vty.c ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf_vty.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ospf_zebra.c ospfd: Add prefix-list filtering of OSPF neighbors on OSPF interface 2024-04-18 15:32:58 +00:00
ospf_zebra.h ospfd: implement Type-7 default routes for NSSA areas 2023-03-31 19:28:15 -03:00
OSPF-ALIGNMENT.txt *: Remove cvs control points 2017-12-05 17:28:12 -05:00
ospfd.c ospfd: Implement non-broadcast support for point-to-multipoint networks 2024-04-02 21:34:29 +00:00
ospfd.h *: create a single registry of daemons' default port values 2024-02-01 11:40:02 -05:00
subdir.am [ospfd]: add support for RFC 5709 HMAC-SHA Auth 2023-09-16 07:38:23 +03:30