Documented all the sysdeps (only briefly, I admit).
Except for Filters, RIP and OSPF, the progdocs are complete.
This commit is contained in:
parent
525fa2c1f0
commit
73275d855d
5 changed files with 100 additions and 26 deletions
|
@ -1 +1,2 @@
|
||||||
|
D sysdep.sgml
|
||||||
C unix
|
C unix
|
||||||
|
|
27
sysdep/sysdep.sgml
Normal file
27
sysdep/sysdep.sgml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<!--
|
||||||
|
BIRD Programmer's Guide: Sysdeps
|
||||||
|
|
||||||
|
(c) 2000 Martin Mares <mj@ucw.cz>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<chapt>System dependent parts
|
||||||
|
|
||||||
|
<sect>Introduction
|
||||||
|
|
||||||
|
<p>We've tried to make BIRD as portable as possible, but unfortunately
|
||||||
|
communication with the network stack differs from one OS to another,
|
||||||
|
so we need at least some OS specific code. The good news is that this
|
||||||
|
code is isolated in a small set of modules:
|
||||||
|
|
||||||
|
<descrip>
|
||||||
|
<tagp><tt/config.h/</tagp> is a header file with configuration information,
|
||||||
|
definition of the standard set of types and so on.
|
||||||
|
<tagp/Startup module/ controls BIRD startup. Common for a family of OS'es (e.g.,
|
||||||
|
for all Unices).
|
||||||
|
<tagp/Logging module/ manages the system logs. [per OS family]
|
||||||
|
<tagp/IO module/ gives an implementation of sockets, timers and the
|
||||||
|
global event queue. [per OS family]
|
||||||
|
<tagp/KRT module/ implements the Kernel and Device protocols. This
|
||||||
|
is the most arcane part of the system dependent stuff and some
|
||||||
|
functions differ even between various releases of a single OS.
|
||||||
|
</descrip>
|
|
@ -1,4 +1,3 @@
|
||||||
H UNIX system dependent parts
|
|
||||||
S log.c
|
S log.c
|
||||||
S krt.c
|
S krt.c
|
||||||
# io.c is documented under Resources
|
# io.c is documented under Resources
|
||||||
|
|
|
@ -6,6 +6,39 @@
|
||||||
* Can be freely distributed and used under the terms of the GNU GPL.
|
* 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
|
#undef LOCAL_DEBUG
|
||||||
|
|
||||||
#include "nest/bird.h"
|
#include "nest/bird.h"
|
||||||
|
@ -18,30 +51,6 @@
|
||||||
#include "unix.h"
|
#include "unix.h"
|
||||||
#include "krt.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);
|
static int krt_uptodate(rte *k, rte *e);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,11 +1,18 @@
|
||||||
/*
|
/*
|
||||||
* BIRD Library -- Logging Functions
|
* BIRD Library -- Logging Functions
|
||||||
*
|
*
|
||||||
* (c) 1998--1999 Martin Mares <mj@ucw.cz>
|
* (c) 1998--2000 Martin Mares <mj@ucw.cz>
|
||||||
*
|
*
|
||||||
* Can be freely distributed and used under the terms of the GNU GPL.
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC: Logging
|
||||||
|
*
|
||||||
|
* The Logging module offers a simple set of functions for writing
|
||||||
|
* messages to system logs and to the debug output.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
@ -94,6 +101,16 @@ vlog(int class, char *msg, va_list args)
|
||||||
cli_echo(class, buf);
|
cli_echo(class, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* log - log a message
|
||||||
|
* @msg: printf-like formatting string with message class information
|
||||||
|
* prepended (%L_DEBUG to %L_BUG, see |lib/birdlib.h|)
|
||||||
|
*
|
||||||
|
* This function formats a message according to the format string @msg
|
||||||
|
* and writes it to the corresponding logfile (as specified in the
|
||||||
|
* configuration). Please note that the message is automatically
|
||||||
|
* formatted as a full line, no need to include |\n| inside.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
log(char *msg, ...)
|
log(char *msg, ...)
|
||||||
{
|
{
|
||||||
|
@ -107,6 +124,13 @@ log(char *msg, ...)
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bug - report an internal error
|
||||||
|
* @msg: a printf-like error message
|
||||||
|
*
|
||||||
|
* This function logs an internal error and aborts execution
|
||||||
|
* of the program.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
bug(char *msg, ...)
|
bug(char *msg, ...)
|
||||||
{
|
{
|
||||||
|
@ -117,6 +141,13 @@ bug(char *msg, ...)
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bug - report a fatal error
|
||||||
|
* @msg: a printf-like error message
|
||||||
|
*
|
||||||
|
* This function logs a fatal error and aborts execution
|
||||||
|
* of the program.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
die(char *msg, ...)
|
die(char *msg, ...)
|
||||||
{
|
{
|
||||||
|
@ -127,6 +158,13 @@ die(char *msg, ...)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* debug - write to debug output
|
||||||
|
* @msg: a printf-like message
|
||||||
|
*
|
||||||
|
* This function formats the message @msg and prints it out
|
||||||
|
* to the debugging output. No newline character is appended.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
debug(char *msg, ...)
|
debug(char *msg, ...)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue