]> git.proxmox.com Git - mirror_frr.git/commit
fabricd: reimplement LSP transmission logic
authorChristian Franke <chris@opensourcerouting.org>
Thu, 10 May 2018 15:37:05 +0000 (17:37 +0200)
committerChristian Franke <chris@opensourcerouting.org>
Wed, 5 Sep 2018 09:38:13 +0000 (11:38 +0200)
commit9b39405f00e17ef84a7a4659e37967728cbae283
tree162408bad835012b838d62dd57eb74059692d263
parenta191178d0a500a4f016d22235bed13790fd6968e
fabricd: reimplement LSP transmission logic

Before this commit, isisd/fabricd maintained a bitfield for each LSP
to track the SRM bit for each circuit, which specifies whether an LSP
needs to be sent on that circuit. Every second, it would scan over all
LSPs in `lsp_tick` and queue them up for transmission accordingly.

This design has two drawbacks: a) it scales poorly b) it adds
unacceptable latency to the update process: each router takes a random
amount of time between 0 and 1 seconds to forward an update. In a
network with a diamter of 10, it might already take 10 seconds for an
update to traverse the network.

To mitigate this, a new design was chosen. Instead of tracking SRM in a
bitfield, have one tx_queue per circuit and declare that an LSP is in
that queue if and only if it would have SRM set for that circuit.

This way, we can track SRM similarly as we did before, however, on
insertion into the LSP queue, we can add a timer for (re)transmission,
alleviating the need for a periodic scan with LSP tick and reducing the
latency for forwarding of updates.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
13 files changed:
isisd/fabricd.c
isisd/isis_adjacency.c
isisd/isis_circuit.c
isisd/isis_circuit.h
isisd/isis_lsp.c
isisd/isis_lsp.h
isisd/isis_lsp_hash.c [deleted file]
isisd/isis_lsp_hash.h [deleted file]
isisd/isis_pdu.c
isisd/isis_pdu.h
isisd/isis_tx_queue.c [new file with mode: 0644]
isisd/isis_tx_queue.h [new file with mode: 0644]
isisd/subdir.am