From 8e6fb83b4bfccdd95e652384b60603da6d1f49bf Mon Sep 17 00:00:00 2001 From: Christian Franke Date: Mon, 2 Apr 2018 17:55:26 +0200 Subject: 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 --- isisd/subdir.am | 2 ++ 1 file changed, 2 insertions(+) (limited to 'isisd/subdir.am') diff --git a/isisd/subdir.am b/isisd/subdir.am index 5593f2a4ed..cd8bfdbddc 100644 --- a/isisd/subdir.am +++ b/isisd/subdir.am @@ -43,6 +43,7 @@ noinst_HEADERS += \ isisd/isis_zebra.h \ isisd/isisd.h \ isisd/iso_checksum.h \ + isisd/fabricd.h \ # end LIBISIS_SOURCES = \ @@ -71,6 +72,7 @@ LIBISIS_SOURCES = \ isisd/isis_zebra.c \ isisd/isisd.c \ isisd/iso_checksum.c \ + isisd/fabricd.c \ # end ISIS_SOURCES = \ -- cgit v1.2.3