mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 09:41:54 +00:00
Moved documentation to top of file, where it belongs.
This commit is contained in:
parent
c6c5626436
commit
2337ade754
@ -275,7 +275,7 @@ sub output_html {
|
|||||||
}
|
}
|
||||||
print "</dl>\n";
|
print "</dl>\n";
|
||||||
foreach $section (@{$args{'sectionlist'}}) {
|
foreach $section (@{$args{'sectionlist'}}) {
|
||||||
print "<h3>$section</h3>\n";
|
print "<h1>$section</h1>\n";
|
||||||
print "<ul>\n";
|
print "<ul>\n";
|
||||||
output_highlight($args{'sections'}{$section});
|
output_highlight($args{'sections'}{$section});
|
||||||
print "</ul>\n";
|
print "</ul>\n";
|
||||||
@ -291,7 +291,7 @@ sub output_intro_html {
|
|||||||
my $count;
|
my $count;
|
||||||
|
|
||||||
foreach $section (@{$args{'sectionlist'}}) {
|
foreach $section (@{$args{'sectionlist'}}) {
|
||||||
print "<h3>$section</h3>\n";
|
print "<h1>$section</h1>\n";
|
||||||
print "<ul>\n";
|
print "<ul>\n";
|
||||||
output_highlight($args{'sections'}{$section});
|
output_highlight($args{'sections'}{$section});
|
||||||
print "</ul>\n";
|
print "</ul>\n";
|
||||||
|
@ -7,6 +7,25 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC: Filters
|
||||||
|
*
|
||||||
|
* Filter consists of tree of &f_inst structures, one structure per
|
||||||
|
* "instruction". Each &f_inst contains code, aux value which is
|
||||||
|
* usually type of data this instruction operates on, and two generic
|
||||||
|
* arguments (a1, a2). Some instructinos contain pointer(s) to other
|
||||||
|
* instructions in their (a1, a2) fields.
|
||||||
|
*
|
||||||
|
* Filters use structure &f_val for its variables. Each &f_val
|
||||||
|
* contains type and value. Types are constants prefixed with %T_. Few
|
||||||
|
* of types are special; %T_RETURN can be or-ed with type to indicate
|
||||||
|
* that return from function/from whole filter should be
|
||||||
|
* forced. Important thing about &f_val s is that they may be copied
|
||||||
|
* with simple =. That's fine for all currently defined types: strings
|
||||||
|
* are read-only (and therefore okay), paths are copied for each
|
||||||
|
* operation (okay too).
|
||||||
|
*/
|
||||||
|
|
||||||
#define LOCAL_DEBUG
|
#define LOCAL_DEBUG
|
||||||
|
|
||||||
#include "nest/bird.h"
|
#include "nest/bird.h"
|
||||||
@ -624,21 +643,6 @@ i_same(struct f_inst *f1, struct f_inst *f2)
|
|||||||
* @filter: pointer to filter to run
|
* @filter: pointer to filter to run
|
||||||
* @rte: pointer to pointer to rte being filtered. When route is modified, this is changed with rte_cow.
|
* @rte: pointer to pointer to rte being filtered. When route is modified, this is changed with rte_cow.
|
||||||
* @tmp_pool: all filter allocations go from this pool
|
* @tmp_pool: all filter allocations go from this pool
|
||||||
*
|
|
||||||
* Filter consists of tree of &f_inst structures, one structure per
|
|
||||||
* "instruction". Each &f_inst contains code, aux value which is
|
|
||||||
* usually type of data this instruction operates on, and two generic
|
|
||||||
* arguments (a1, a2). Some instructinos contain pointer(s) to other
|
|
||||||
* instructions in their (a1, a2) fields.
|
|
||||||
*
|
|
||||||
* Filters use structure &f_val for its variables. Each &f_val
|
|
||||||
* contains type and value. Types are constants prefixed with %T_. Few
|
|
||||||
* of types are special; %T_RETURN can be or-ed with type to indicate
|
|
||||||
* that return from function/from whole filter should be
|
|
||||||
* forced. Important thing about &f_val s is that they may be copied
|
|
||||||
* with simple =. That's fine for all currently defined types: strings
|
|
||||||
* are read-only (and therefore okay), paths are copied for each
|
|
||||||
* operation (okay too).
|
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
f_run(struct filter *filter, struct rte **rte, struct ea_list **tmp_attrs, struct linpool *tmp_pool, int flags)
|
f_run(struct filter *filter, struct rte **rte, struct ea_list **tmp_attrs, struct linpool *tmp_pool, int flags)
|
||||||
|
@ -18,6 +18,30 @@
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC: Routing information protocol
|
||||||
|
*
|
||||||
|
* Rip is pretty simple protocol so half of this code is interface
|
||||||
|
* with core. We maintain our own linklist of &rip_entry - it serves
|
||||||
|
* as our small routing table. Within rip_tx(), this list is
|
||||||
|
* walked, and packet is generated using rip_tx_prepare(). This gets
|
||||||
|
* tricky because we may need to send more than one packet to one
|
||||||
|
* destination. Struct &rip_connection is used to hold info such as how
|
||||||
|
* many of &rip_entry ies we already send, and is also used to protect
|
||||||
|
* from two concurrent sends to one destination. Each &rip_interface has
|
||||||
|
* at most one &rip_connection.
|
||||||
|
*
|
||||||
|
* We are not going to honour requests for sending part of
|
||||||
|
* routing table. That would need to turn split horizon off,
|
||||||
|
* etc.
|
||||||
|
*
|
||||||
|
* Triggered updates. RFC says: when triggered update was sent, don't send
|
||||||
|
* new one for something between 1 and 5 seconds (and send one
|
||||||
|
* after that). We do something else: once in 5 second
|
||||||
|
* we look for any changed routes and broadcast them.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define LOCAL_DEBUG
|
#define LOCAL_DEBUG
|
||||||
|
|
||||||
#include "nest/bird.h"
|
#include "nest/bird.h"
|
||||||
@ -450,25 +474,6 @@ rip_timer(timer *t)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* rip_start - initialize instance of rip
|
* rip_start - initialize instance of rip
|
||||||
*
|
|
||||||
* Rip is pretty simple protocol so half of this code is interface
|
|
||||||
* with core. We maintain our own linklist of &rip_entry - it serves
|
|
||||||
* as our small routing table. Within rip_tx(), this list is
|
|
||||||
* walked, and packet is generated using rip_tx_prepare(). This gets
|
|
||||||
* tricky because we may need to send more than one packet to one
|
|
||||||
* destination. Struct &rip_connection is used to hold info such as how
|
|
||||||
* many of &rip_entry ies we already send, and is also used to protect
|
|
||||||
* from two concurrent sends to one destination. Each &rip_interface has
|
|
||||||
* at most one &rip_connection.
|
|
||||||
*
|
|
||||||
* We are not going to honour requests for sending part of
|
|
||||||
* routing table. That would need to turn split horizon off,
|
|
||||||
* etc.
|
|
||||||
*
|
|
||||||
* Triggered updates. RFC says: when triggered update was sent, don't send
|
|
||||||
* new one for something between 1 and 5 seconds (and send one
|
|
||||||
* after that). We do something else: once in 5 second
|
|
||||||
* we look for any changed routes and broadcast them.
|
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
rip_start(struct proto *p)
|
rip_start(struct proto *p)
|
||||||
|
Loading…
Reference in New Issue
Block a user