summaryrefslogtreecommitdiffstats
path: root/isisd/subdir.am (follow)
Commit message (Collapse)AuthorAgeFilesLines
* build: fix not building docs w/o sphinxDavid Lamparter2018-09-091-1/+1
| | | | | | Can't build manpages without sphinx-build, oops... Signed-off-by: David Lamparter <equinox@diac24.net>
* build: move vtysh & manpage listings to subdir.amDavid Lamparter2018-09-081-0/+10
| | | | | | | Since we're now building through one large Makefile, we can easily put things with their daemons and crossreference nicely. Signed-off-by: David Lamparter <equinox@diac24.net>
* fabricd: reimplement LSP transmission logicChristian Franke2018-09-051-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | 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>
* isisd: move spf datastructures to a header, to share with fabricdChristian Franke2018-09-051-0/+1
| | | | | | | | | | | | | | By moving the spf datastructures to a header, fabricd can access the results of the spf run for flooding optimization or fabric locality calculation. While this was deemed a sensible choice in this case, when compared with the option of adding a lot of OpenFabric specific code to isis_spf.c, the datastructures should still not be accessed randomly all over the code base. To make this more clear, the new header was called isis_spf_private.h (Think of a friend class) Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* fabricd: adjacency formation optimization as per section 2.4Christian Franke2018-09-051-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | OpenFabric changes IS-IS's initial database synchronization. While regular IS-IS will simultaneuously exchange LSPs with all neighboring routers during startup, this is considered too much churn for a densely connected fabric. To mitigate this, OpenFabric prescribes that a router should only bring up an adjacency with a single neighbor and perform a full synchronization with that neighbor, before bringing up further adjacencies. This is implemented by having a field `initial_sync_state` in the fabricd datastructure which tracks whether an initial sync is still pending, currently in progress, or complete. When an initial sync is pending, the state will transition to the in-progress state when the first IIH is received. During this state, all IIHs from other routers are ignored. Any IIHs transmitted on any link other than the one to the router with which we are performing the initial sync will always report the far end as DOWN in their threeway handshake state, avoiding the formation of additional adjacencies. The state will be left if all the SRM and SSN flags on the initial-sync circuit are cleared (meaning that initial sync has completed). This is checked in `lsp_tick`. When this condition occurrs, we progress to the initial-sync-complete state, allowing other adjacencies to form. The state can also be left if the initial synchronization is taking too long to succeed, for whatever reason. In that case, we fall back to the initial-sync-pending state and will reattempt initial synchronization with a different neighbor. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isis: Cleanup CLI, split into parts which are shared, fabricd and isisdChristian Franke2018-09-051-34/+49
| | | | | | | | Remove isis_vty.c and create three new files isis_vty_common.c, isis_vty_fabricd.c and isis_vty_isisd.c which are built into both daemons, only fabricd and only isisd, respectively. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* fabricd: add new daemon as build of isisdChristian Franke2018-09-051-0/+15
| | | | | | | fabricd is built using the sources of isisd. To allow differentiation in the code, -DFABRICD=1 is added to its preprocessor flags. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: Add isis_errors and generate custom Error CodesDonald Sharp2018-08-141-0/+2
| | | | | | Generate appropriate error codes for ISIS. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* isisd: optimize per interface lsp send-queue creationChristian Franke2017-10-031-0/+2
| | | | Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* build: non-recursive isisdDavid Lamparter2017-08-041-0/+71
(Also fix a minor snafu in the autoconf logic) Signed-off-by: David Lamparter <equinox@opensourcerouting.org>