frr/doc/developer
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
..
_static doc/developer: improve printfrr extension docs 2021-03-30 22:34:56 +02:00
images pceplib: Integrate pcelib into frr 2021-03-05 12:12:47 +01:00
northbound docs: sysrepo install-prefix since cmake 3.21 2024-04-25 09:52:05 +02:00
.gitignore doc: fix distclean 2018-05-18 19:35:24 +00:00
.readthedocs.yaml doc: add graphiz dependency for dev docs 2023-12-22 16:08:43 +02:00
bgp-typecodes.rst bgpd: Deprecate DPA, ADVERTISER and RCID_PATH path attributes 2022-01-06 17:10:31 +02:00
bgpd.rst doc: cleanup some misc files 2018-03-20 15:20:34 -04:00
bmp.rst bgpd: loc-rib uptime moved to bgp_path_info_extra and set in header 2023-11-04 12:17:48 +01:00
building-docker.rst docker: fix typos in docs for ubuntu20-ci and ubuntu22-ci 2023-11-26 19:21:49 +03:00
building-frr-for-alpine.rst *: remove *.conf.sample files 2021-04-09 13:14:30 -04:00
building-frr-for-archlinux.rst build: protobuf is required so update building docs 2023-12-31 13:51:21 +00:00
building-frr-for-centos6.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-centos7.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-centos8.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-debian8.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-debian9.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-debian12.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-fedora.rst doc: Add documentation for MGMT daemon 2023-03-21 22:09:10 -04:00
building-frr-for-freebsd9.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-freebsd10.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-freebsd11.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-freebsd13.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-freebsd14.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-netbsd6.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-netbsd7.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-openbsd6.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
building-frr-for-opensuse.rst build: require libyang 2.1.128 2024-01-06 06:55:04 -05:00
building-frr-for-openwrt.rst doc: use anonymous link refs 2020-11-09 15:25:26 -05:00
building-frr-for-ubuntu1404.rst build: protobuf is required so update building docs 2023-12-31 13:51:21 +00:00
building-frr-for-ubuntu1604.rst build: protobuf is required so update building docs 2023-12-31 13:51:21 +00:00
building-frr-for-ubuntu1804.rst build: protobuf is required so update building docs 2023-12-31 13:51:21 +00:00
building-frr-for-ubuntu2004.rst doc: typo, fix end of line 2024-01-15 22:51:09 +01:00
building-frr-for-ubuntu2204.rst doc: typo, fix end of line 2024-01-15 22:51:09 +01:00
building-libunwind-note.rst doc: stick libunwind into build docs 2021-11-10 15:30:56 +01:00
building-libyang.rst docs: libyang install-prefix since cmake 3.21 2024-04-25 09:52:05 +02:00
building.rst doc: Add build instructions for FreeBSD 14 2023-11-23 15:38:45 +01:00
checkpatch.rst doc, tools: Remove ARRAY_SIZE check 2024-03-04 11:03:46 -05:00
cli.rst doc: fix whitespace, formatting errors 2023-09-27 19:55:35 -04:00
conf.py doc: Remove language = none as that sphinx no longer needs this line 2022-10-27 15:59:57 -04:00
cross-compiling.rst docs: libs install-prefix since cmake 3.21 2024-04-25 09:52:05 +02:00
cspf.rst doc: fix whitespace, formatting errors 2023-09-27 19:55:35 -04:00
draft-zebra-00.ms *: Fix spelling of Inteface 2022-04-02 07:46:19 -04:00
fpm.rst zebra: Read from the dplane_fpm_nl a route update 2022-12-13 15:34:05 -05:00
frr-release-procedure.rst doc: Add a quick example on how to use release_notes.py 2023-11-04 16:32:01 +02:00
fuzzing.rst doc: add docs on fuzzing stuff 2020-11-09 15:25:26 -05:00
grpc.rst doc: fix code block in grpc docs 2021-09-23 12:08:12 +03:00
hooks.rst *: require semicolon after DEFINE_HOOK & co. 2021-03-17 06:18:17 +01:00
include-compile.rst build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
index.rst doc: include checkpatch & cspf docs in toctree 2023-09-27 19:55:35 -04:00
ldpd-basic-test-setup.md doc: reorganize 2018-01-30 16:14:24 -05:00
library.rst doc/developer: xrefs 2021-02-01 17:28:11 +01:00
link-state.rst doc: fix typo RFC7572 to RFC7752 2023-05-23 22:52:51 +08:00
lists.rst doc: Fix spelling of choosen 2022-04-19 08:28:47 -04:00
locking.rst *: frr_with_mutex change to follow our standard 2022-07-20 15:50:32 -04:00
logging.rst bgpd: When using dev build add pointer information to %pBD 2024-03-14 09:45:09 +00:00
Makefile build: non-recursive doc + parallel sphinx 2018-08-30 08:06:44 +02:00
memtypes.rst doc/developer: fix C struct references 2021-10-14 19:02:31 +02:00
mgmtd-dev.rst doc: add some text on native message API and notif xpath array 2024-06-07 05:50:10 -04:00
MLD-and-PIMv6-Design.png doc: Adding the Design document for PIM IPv6 2022-01-10 00:16:40 -08:00
modules.rst *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
next-hop-tracking.rst bgpd: Remove not used bgp_find_nexthop() function 2019-11-08 15:04:29 +02:00
ospf-api.rst doc: typo / grammar pass on OSPF API docs 2019-04-24 17:41:06 +00:00
ospf-ls-retrans.rst ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
ospf-sr.rst ospfd: Remove local-block deprecated command 2022-06-07 16:11:46 +03:00
ospf.rst ospfd: Improve OSPF neighbor retransmission list granularity and precision 2024-06-20 15:31:07 +00:00
packaging-debian.rst doc: Update doc to reflect default pim6d in packaging 2022-11-21 20:09:41 +01:00
packaging-redhat.rst doc: Update doc to reflect default pim6d in packaging 2022-11-21 20:09:41 +01:00
packaging.rst doc: update release procedure docs 2019-10-18 18:50:10 +00:00
path-internals-daemon.rst pathd: New SR-TE policy management daemon 2020-12-18 16:34:02 +01:00
path-internals-pcep.rst *: Convert thread_execute to event_execute 2023-03-24 08:32:17 -04:00
path-internals.rst pathd: Add optional support for PCEP to pathd 2020-12-18 16:47:52 +01:00
path.rst pathd: New SR-TE policy management daemon 2020-12-18 16:34:02 +01:00
pceplib.rst pceplib: Integrate pcelib into frr 2021-03-05 12:12:47 +01:00
PIMv6-Design.pptx doc: Adding the Design document for PIM IPv6 2022-01-10 00:16:40 -08:00
process-architecture.rst doc: Rename Thread to Event in events example 2024-01-07 14:43:38 +02:00
rcu.rst doc: Add some documentation around a new pthread call 2024-02-05 14:51:55 -05:00
release-announcement-template.md doc: update release procedure docs 2019-10-18 18:50:10 +00:00
requirements.txt doc: restore frr docs theme 2023-11-16 18:44:28 -05:00
scripting.rst doc: Remove mention of const noop decoder 2023-11-20 20:45:02 -05:00
static-linking.rst docs: libyang install-prefix since cmake 3.21 2024-04-25 09:52:05 +02:00
subdir.am bgpd: bmp unset v6 flag + address PR#14188 comments 2023-11-04 12:17:48 +01:00
testing.rst doc: clean up && index topotest json docs 2019-11-04 18:51:31 +00:00
topotests-jsontopo.rst tests: new improved simple JSON template w/ doc update 2021-09-05 02:45:13 -04:00
topotests-markers.rst doc: Add mgmtd pytest marker into documentation 2024-02-17 11:24:29 +02:00
topotests-snippets.rst doc: fix a couple of typos 2019-03-20 20:08:33 +01:00
topotests.rst doc: add missing required newline in .rst formatting 2024-05-26 22:13:21 +00:00
tracing.rst *: Convert thread_cancelXXX to event_cancelXXX 2023-03-24 08:32:17 -04:00
vtysh.rst build, vtysh: extract vtysh commands from .xref 2022-10-26 17:12:34 +01:00
workflow.rst doc: Update dates in release reference table 2024-02-27 14:54:16 +02:00
xrefs.rst doc: quick HOWTO on python/xrelfo.py 2021-02-23 16:56:58 +01:00
zebra.rst doc: add doc about the zebra dataplane api version 2024-04-09 08:59:13 -04:00