summaryrefslogtreecommitdiff
path: root/sysdep/unix/krt.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdep/unix/krt.c')
-rw-r--r--sysdep/unix/krt.c57
1 files changed, 33 insertions, 24 deletions
diff --git a/sysdep/unix/krt.c b/sysdep/unix/krt.c
index 9bc29808..7aee1f6b 100644
--- a/sysdep/unix/krt.c
+++ b/sysdep/unix/krt.c
@@ -6,6 +6,39 @@
* Can be freely distributed and used under the terms of the GNU GPL.
*/
+/**
+ * DOC: Kernel synchronization
+ *
+ * This system dependent module implements the Kernel and Device protocol,
+ * that is synchronization of interface lists and routing tables with the
+ * OS kernel.
+ *
+ * The whole kernel synchronization is a bit messy and touches some internals
+ * of the routing table engine, because routing table maintenance is a typical
+ * example of the proverbial compatibility between different Unices and we want
+ * to keep the overhead of our krt business as low as possible and avoid maintaining
+ * a local routing table copy.
+ *
+ * The kernel syncer can work in three different modes (according to system config header):
+ * Either with a single routing table and single KRT protocol [traditional Unix]
+ * or with many routing tables and separate krt protocols for all of them
+ * or with many routing tables, but every scan including all tables, so we start
+ * separate krt protocols which cooperate with each other [Linux 2.2].
+ * In this case, we keep only a single scan timer.
+ *
+ * We use FIB node flags to keep track of route synchronization status. We also
+ * attach temporary &rte's to the routing tables, but it cannot harm the rest of
+ * BIRD since table synchronization is an atomic process.
+ *
+ * When starting up, we cheat by looking if there is another
+ * KRT instance to be initialized later and performing table scan
+ * only once for all the instances.
+ */
+
+/*
+ * If you are brave enough, continue now. You cannot say you haven't been warned.
+ */
+
#undef LOCAL_DEBUG
#include "nest/bird.h"
@@ -18,30 +51,6 @@
#include "unix.h"
#include "krt.h"
-/*
- * The whole kernel synchronization is a bit messy and touches some internals
- * of the routing table engine, because routing table maintenance is a typical
- * example of the proverbial compatibility between different Unices and we want
- * to keep the overhead of our krt business as low as possible and avoid maintaining
- * a local routing table copy.
- *
- * The kernel syncer can work in three different modes (according to system config header):
- * o Single routing table, single krt protocol. [traditional Unix]
- * o Many routing tables, separate krt protocols for all of them.
- * o Many routing tables, but every scan includes all tables, so we start
- * separate krt protocols which cooperate with each other. [Linux 2.2]
- * In this case, we keep only a single scan timer.
- *
- * The hacky bits:
- * o We use FIB node flags to keep track of route synchronization status.
- * o When starting up, we cheat by looking if there is another kernel
- * krt instance to be initialized later and performing table scan
- * only once for all the instances.
- * o We attach temporary rte's to routing tables.
- *
- * If you are brave enough, continue now. You cannot say you haven't been warned.
- */
-
static int krt_uptodate(rte *k, rte *e);
/*