]> git.proxmox.com Git - mirror_frr.git/commit - isisd/subdir.am
fabricd: adjacency formation optimization as per section 2.4
authorChristian Franke <chris@opensourcerouting.org>
Mon, 2 Apr 2018 15:55:26 +0000 (17:55 +0200)
committerChristian Franke <chris@opensourcerouting.org>
Wed, 5 Sep 2018 09:38:13 +0000 (11:38 +0200)
commit8e6fb83b4bfccdd95e652384b60603da6d1f49bf
tree0a96e41f175ddbc9664038fb5cfdc55e9bed5422
parent65f18157115a1c95653551b6e0d8423bdbf8c906
fabricd: adjacency formation optimization as per section 2.4

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>
isisd/fabricd.c [new file with mode: 0644]
isisd/fabricd.h [new file with mode: 0644]
isisd/isis_adjacency.c
isisd/isis_lsp.c
isisd/isis_pdu.c
isisd/isisd.c
isisd/isisd.h
isisd/subdir.am