Documentation update.

This commit is contained in:
Pavel Machek 2000-05-28 19:11:08 +00:00
parent cdc25e8db7
commit d150c6379c
2 changed files with 143 additions and 34 deletions

97
TODO
View file

@ -56,3 +56,100 @@ OSPF
- RFC1587 NSSA areas - RFC1587 NSSA areas
- RFC2370 opaque LSA's - RFC2370 opaque LSA's
- respect interface MTU and try not to create larger packets unless unavoidable - respect interface MTU and try not to create larger packets unless unavoidable
Documentation (sorry, its in czech)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
K SGML:
o Mohl bys, prosim, nekam napsat, co je vsechno potreba udelat, aby bylo
dokumentaci mozno postavit? Skoncil jsem u toho, ze jsem do doc/sbase/
zkopiroval spoustu souboru z /usr/lib/sgml-tools a pridal nekolik symlinku
-- ted uz sice dokumentaci vygeneruji, ale asi to neni ta spravna cesta.
K HTML:
o "2000" zcela vypadava mimo hlavicku.
Uvod:
o "What is bird": tam by melo byt receno, _co_ je BIRD, nikoliv cemu se podoba.
To obnasi jednak par vet o tom, o co se vlastne snazi, potom nejaky feature
list (s odkazy do jednotlivych casti dokumentace?) a tez neco na tema "v cem
jsme lepsi nez konkurence" (a neargumentovat pouze licenci :) ).
Rovnez tak neni vubec urcen jen pro unixove systemy -- je velice portabilni
a shodou okolnosti Unix (presneji Linux) je jediny zatim napsany port.
o Chybi sekce popisujici instalaci, spousteni a command-line options.
o "About routing tables" by melo byt podstatne podrobnejsi (vysvetlit, co vlastne
routovaci tabulky jsou, co obsahuji, ze vubec existuji nejake atributy, k cemu
slouzi, ze nektere tabulky jsou synchronizovane s kernelem, zatimco jine nikoliv,
ze lze prenaset routy mezi tabulkami (odkaz na protokol pipe), ze k tabulkam
jsou pres filtry pripojeny protokoly atd.) Asi z toho udelat samostatnou kapitolu.
o Zminit logy a kategorie hlasek.
Filtry:
o Na zacatku zejmena vysvetlit, jak jsou filtry do systemu zapojeny, k cemu slouzi,
ze dostanou routu a ocekava se od nich verdikt. Teprve pak vysvetlovat, ze to
jsou programy, ze mohou volat funkce atd. Tez zminit, ze protokol ma pravo
nektere routy akceptovat/odmitnout bez toho, aniz by se zeptal filtru.
o Napsat neco o tom, jak filtry debugovat -- ze existuje trasovani filtru
a CLI command pro vypsani routovaci tabulky tak, jak projde filtrem ci tak,
jak ji vidi dany protokol.
o `filters internally work ...' patri do progdoc.
o Vysvetlit nesting a zastinovani.
o Nadefinovat, co se stane, kdyz funkce nevrati hodnotu, i kdyz ma.
o Popsat runtime errory a ze se chovaji jako rejecty.
o Typy: tez rici, ze integery se lisi nejen od booleanu, ale take od enumu.
o Boolean: TRUE nebo true? U kazdeho typu zminit, jak vypadaji literaly
tohoto typu a psat je vzdycky tt fontem.
o int: Nadefinovat rozsah a rici, ze preteceni se nekontroluje. Zminit
hexadecimalni konstanty.
o ip: IPv4/IPv6 nezavisi na verzi BIRDa, nybrz na compile-time konfiguraci.
o ip: .mask zminit zvlast mezi specialnimi operatory.
o set: lepe vysvetlit matchovani prefixu, ukazat na prikladu.
o bgppath: list of autonomous system _numbers_
o bgpmask: vysvetlit matchovani.
o operations: prejmenovat na `operators', mela by to asi byt tabulka
operatoru, u kazdeho receno, na jakych typech je definovan a jakeho
typu je vysledek.
o operations: ~ pracuje i na clistech, neni-liz pravda?
o Examply by mohly byt krapet smysluplnejsi.
o defined(): To, ze undefined attribute cannot be accessed, by melo byt
rozhodne receno nekde jinde (v uvodu sekce) -- vzdyt u defined samotneho
to mozne je.
o attributes: nemyslim, ze jsou vsechny -- co treba scope a preference?
o Chybi operace na clistech a cestach.
o print: a coz takhle printn apod.?
o Mezi prikazy nikde neni zminen napriklad accept a reject.
o Co se stane, kdyz filtr skonci, aniz by vydal verdikt?
Protocols:
o U kazdeho protokolu rici, jestli podporujeme pouze IPv4 nebo i IPv6 verzi.
o RIP: Vysvetlit, na ktere site se RIP hodi a na ktere ne, rici, ze je
hodnoty spise historicke, ale ze ve svete IPv6 se bezne pouziva, protoze
zatim neexistuji slusne implementace OSPFv3.
o RIP: Per-interface optiony uvadet tez jako definition list.
o RIP: U RIP-specific atributu zminit, jakeho jsou typu a jak vznikaji.
o Example u RIPu je out of date: `honour' -> `honor' apod. Tez ukazat
per-interface optiony.
o passwords: syntaxe data uz, tusim, davno vypada jinak.
Struktura dokumentace:
o Chybi kapitola o CLI a o clientovi.
o Na konci (nebo ve zvlast sekci pro kazdy protokol?) by mel byt seznam referenci
na vsechny mozne dokumenty, zejmena vsak vsechna RFC, kterymi se ridime nebo
ktera maji neco spolecneho s tim, co delame (napriklad RPSL).
K jazyku:
o K "BIRD Internet Routing Daemon" by mel patrit urcity clen.
o Nerika se `comparation', nybrz `comparison'.
o RFC (a ostatni zkratky) psat vzdy velkymi pismeny.
o Pokud je v zavorce cela veta, patri pred ')' tecka, pokud neni, tak
nepatri.
o Davej si pozor na rody -- router je vzdycky `it', nikdy `he'.

View file

@ -1,7 +1,7 @@
<!doctype linuxdoc system> <!doctype linuxdoc system>
<!-- <!--
Bird documentation BIRD documentation
Look for "about this documentation" section to learn more. Look for "about this documentation" section to learn more.
@ -13,7 +13,7 @@
<article> <article>
<title>Bird <title>BIRD
<author> <author>
Pavel Machek <tt/pavel@ucw.cz/ Pavel Machek <tt/pavel@ucw.cz/
@ -29,15 +29,15 @@ This document contains documentation for BIRD Internet Routing Daemon
<sect>Introduction <sect>Introduction
<sect1>What is bird <sect1>What is BIRD
<p><label id="intro"> You may wonder what 'bird' means. It is acronym of 'BIRD Internet Routing <p><label id="intro"> You may wonder what 'BIRD' means. It is acronym of 'BIRD Internet Routing
Daemon', and we think that's cool name. Its task is similar to what firmware of Cisco routers does, Daemon', and we think that's cool name. Its task is similar to what firmware of Cisco routers does,
or what gated <HTMLURL URL="http://www.gated.org/"> or GNU zebra <HTMLURL or what gated <HTMLURL URL="http://www.gated.org/"> or GNU zebra <HTMLURL
URL="http://www.zebra.org/"> does. However, you can not run Cisco's firmware on "normal" computer URL="http://www.zebra.org/"> does. However, you can not run Cisco's firmware on "normal" computer
and gated is really hard to configure and comes under wrong license. Bird is being developed on and gated is really hard to configure and comes under wrong license. BIRD is being developed on
Charles University, Prague, and can be freely distributed under terms of GNU General Public Charles University, Prague, and can be freely distributed under terms of GNU General Public
License. Bird is designed to run on Unix and unix-like systems, it is primarily developed on Linux. License. BIRD is designed to run on Unix and unix-like systems, it is primarily developed on Linux.
<sect1>About this documentation <sect1>About this documentation
@ -61,6 +61,12 @@ section in filters.
<sect1>Introduction <sect1>Introduction
<p>BIRD is configured using text configuration file. At startup, BIRD reads <file/bird.conf/ (unless
-c command line parameter is given). Configuration may be changed on user request: if you modify
config file and then signal BIRD with SIGHUP, it will adjust to new config. There's BIRD client,
which allows you to talk with BIRD in more extensive way than just telling it to reconfig. BIRD
writes messages about its work to log files or syslog (according to config).
<p>Bird is configured using text configuration file. At startup, bird <p>Bird is configured using text configuration file. At startup, bird
reads <file/bird.conf/ (unless -c command line parameter is reads <file/bird.conf/ (unless -c command line parameter is
given). Everything on a line after <cf/#/ is a comment, whitespace is given). Everything on a line after <cf/#/ is a comment, whitespace is
@ -68,13 +74,11 @@ ignored, C-style comments <cf>/* comment */</cf> are also
recognized. If there's variable number of options, it is grouped using recognized. If there's variable number of options, it is grouped using
<cf/{ }/ brackets. Each option is terminated by <cf/;/. <cf/{ }/ brackets. Each option is terminated by <cf/;/.
<p>Really simple configuration file might look like this, you can find <p>Really simple configuration file might look like this:
example of more complicated configuration file in
<file>doc/bird.conf.example</file>.
<code> <code>
protocol kernel { protocol kernel {
persist; # Don't remove routes on bird shutdown persist; # Don't remove routes on BIRD shutdown
scan time 20; # Scan kernel routing table every 20 seconds scan time 20; # Scan kernel routing table every 20 seconds
export all; # Default is export none export all; # Default is export none
} }
@ -98,42 +102,44 @@ protocol rip {
<cf/debug/ for debugging message, <cf/trace/, <cf/info/, <cf/debug/ for debugging message, <cf/trace/, <cf/info/,
<cf/remote/ for messages about misbehavior of remote side, <cf/warning/, <cf/remote/ for messages about misbehavior of remote side, <cf/warning/,
<cf/error/, <cf/auth/, <cf/fatal/, <cf/bug/ for internal bugs <cf/error/, <cf/auth/, <cf/fatal/, <cf/bug/ for internal bugs
of bird. You may specify more than one <cf/log/ line to log to multiple of BIRD. You may specify more than one <cf/log/ line to log to multiple
destinations. destinations.
<tag>debug protocols all|off|{ states, routes, filters, interfaces, events, packets }</tag> <tag>debug protocols all|off|{ states, routes, filters, interfaces, events, packets }</tag>
sets global default of debugging options. sets global default of protocol debugging options.
<tag>filter <m/name/{ <m/commands/ }</tag> define filter. You can learn more about filters <tag>filter <m/name/{ <m/commands/ }</tag> define filter. You can learn more about filters
in next chapter. in next chapter.
<tag>protocol rip|ospf|bgp <m/[name]/ { <m>protocol options</m> }</tag> define protocol <tag>protocol rip|ospf|bgp|... <m/[name]/ { <m>protocol options</m> }</tag> define protocol
instance, called name (or called something like rip5 if you omit name). You can learn more instance, called name (or called something like rip5 if you omit name). You can learn more
about configuring protocols in their own chapters. about configuring protocols in their own chapters. You can run more than one instance of
most protocols (like rip or bgp).
<tag>define constant = expression</tag> define constant. You can use it later in every place <tag>define constant = expression</tag> define constant. You can use it later in every place
you could use simple integer. you could use simple integer.
<tag>router id <m/num.num.num.num/</tag> set router id. Router <tag>router id <m/IPv4 address/</tag> set router id. Router id needs to be world-wide
id needs to be world-wide unique 32bit number, identifying unique. It is usually one of router's IPv4 addresses.
router. It is usually one of router's IP addresses.
<tag>table <m/name/</tag> create new routing table. <tag>table <m/name/</tag> create new routing table.
<tag>eval <m/expr/</tag> evaluates given filter expression. It is used for testing. <tag>eval <m/expr/</tag> evaluates given filter expression. It is used for testing.
</descrip> </descrip>
<sect1>Per-protocol options <sect1>Protocol options
<p>Several options are per-protocol, but all protocols support them. They are described here. <p>Several options are per-protocol, but all protocols support them. They are described here.
<descrip> <descrip>
<tag>preference <m/expr/</tag> sets preference of this protocol. <tag>preference <m/expr/</tag> sets preference of routes generated by this protocol.
<tag>disabled</tag> disables given protocol. <tag>disabled</tag> disables given protocol. You can disable/enable protcol from command
line interface without needing to touch config.
<tag>debug <m/setting/</tag> this is similar to global debug setting, except that it only <tag>debug <m/setting/</tag> this is similar to global debug setting, except that it only
affects one protocol. affects one protocol. Only messages in selected debugging categories will be written to
logs.
<tag>import <m/filter/</tag> filter can be either either <cf> { <m>filter commands</m> <tag>import <m/filter/</tag> filter can be either either <cf> { <m>filter commands</m>
}</cf> or <cf>filter <m/name/</cf>. Import filter works in direction from protocol to main }</cf> or <cf>filter <m/name/</cf>. Import filter works in direction from protocol to main
@ -153,18 +159,20 @@ protocol rip {
time from which password is not announced but is allowed. id is password id, as needed by time from which password is not announced but is allowed. id is password id, as needed by
certain protocols. certain protocols.
<tag>interface "<m/mask/" [ { <m/option/ ; [ ... ] } ]</tag> specifies, which interfaces <tag>interface "<m/mask/"|<m/prefix/ [ { <m/option/ ; [ ... ] } ]</tag> specifies, which
this protocol is active at, and allows you to set options on interface-by-interface interfaces this protocol is active at, and allows you to set options on
basis. Mask is specified in shell-like patters, thus <cf>interface "*" { mode broadcast; interface-by-interface basis. Mask is specified in shell-like patters, thus <cf>interface
};</cf> will start given protocol on all interfaces, with <cf>mode broadcast;</cf> option. "*" { mode broadcast; };</cf> will start given protocol on all interfaces, with <cf>mode
broadcast;</cf> option.
</descrip> </descrip>
<sect>Filters <sect>Filters
<sect1>Introduction <sect1>Introduction
<p>Bird contains rather simple programming language. (No, it can not yet read mail :-). There are <p>BIRD contains rather simple programming language. (No, it can not yet read mail :-). There are
two objects in this language: filters and functions. Filters are called by bird core when route is two objects in this language: filters and functions. Filters are called by BIRD core when route is
being passed between protocol and main routing table, and filters may call functions. Functions may being passed between protocol and main routing table, and filters may call functions. Functions may
call other functions, but recursion is not allowed. Filter language contains control structures such call other functions, but recursion is not allowed. Filter language contains control structures such
as if's and switches, but it allows no loops. Filters are as if's and switches, but it allows no loops. Filters are
@ -205,6 +213,10 @@ pairs <cf><M>type name</M>;</cf>, where each pair defines one local variable. Bo
several statements into one by <cf>{ <M>statements</M> }</cf> construction, that is useful if several statements into one by <cf>{ <M>statements</M> }</cf> construction, that is useful if
you want to make bigger block of code conditional. you want to make bigger block of code conditional.
<p>There are two special filters, <cf/all/ (which accepts all routes) and <cf/none/ (which rejects
all routes).
<p>Bird supports functions, so that you don't have to repeat same blocks of code over and <p>Bird supports functions, so that you don't have to repeat same blocks of code over and
over. Functions can have zero or more parameters, and can have local variables. Function basically over. Functions can have zero or more parameters, and can have local variables. Function basically
looks like this: looks like this:
@ -252,7 +264,7 @@ booleans (that is to prevent you from shooting in the foot).
such variables, but you can not concatenate two strings (for example). String constants such variables, but you can not concatenate two strings (for example). String constants
are written as <cf/"This is a string constant"/. are written as <cf/"This is a string constant"/.
<tag/ip/ this type can hold single ip address. Depending on version of bird you are using, it <tag/ip/ this type can hold single ip address. Depending on version of BIRD you are using, it
can be IPv4 or IPv6 address. IPv4 addresses are written (as you would expect) as can be IPv4 or IPv6 address. IPv4 addresses are written (as you would expect) as
<cf/1.2.3.4/. You can apply special operator <cf>.mask(<M>num</M>)</cf> <cf/1.2.3.4/. You can apply special operator <cf>.mask(<M>num</M>)</cf>
on values of type ip. It masks out all but first <cf><M>num</M></cf> bits from ip on values of type ip. It masks out all but first <cf><M>num</M></cf> bits from ip
@ -275,7 +287,7 @@ booleans (that is to prevent you from shooting in the foot).
3.0.0.0/8- is shorthand for 3.0.0.0/{0,7}. 3.0.0.0/8- is shorthand for 3.0.0.0/{0,7}.
<tag/enum/ <tag/enum/
enumeration types are halfway-internal in the bird. You can not define your own enumeration types are halfway-internal in the BIRD. You can not define your own
variable of enumeration type, but some predefined variables are of enumeration variable of enumeration type, but some predefined variables are of enumeration
type. Enumeration types are incompatible with each other, again, for your type. Enumeration types are incompatible with each other, again, for your
protection. protection.
@ -406,12 +418,12 @@ periodic messages onto this interface and <cf>nolisten</cf> means that rip will
interface but not listen on it. interface but not listen on it.
<p>Following options generally override specified behavior from rfc. If you use any of these <p>Following options generally override specified behavior from rfc. If you use any of these
options, bird will no longer be rfc-compatible, which means it will not be able to talk to anything options, BIRD will no longer be rfc-compatible, which means it will not be able to talk to anything
other than equally misconfigured bird. I warned you. other than equally misconfigured BIRD. I warned you.
<descrip> <descrip>
<tag>port <M>number</M></tag> <tag>port <M>number</M></tag>
selects IP port to operate on, default 520. (This is useful when testing bird, if you selects IP port to operate on, default 520. (This is useful when testing BIRD, if you
set this to address &gt;1024, you will not need to run bird with UID==0). set this to address &gt;1024, you will not need to run bird with UID==0).
<tag>infinity <M>number</M></tag> <tag>infinity <M>number</M></tag>
@ -438,8 +450,8 @@ protocol rip MyRIP_test {
port 1520; port 1520;
period 7; period 7;
garbagetime 60; garbagetime 60;
interface "*"; interface "eth0" { metric 3; mode multicast; } "eth1" { metric 2; mode broadcast; };
honour neighbour; honor neighbour;
passwords { password "ahoj" from 0 to 10; passwords { password "ahoj" from 0 to 10;
password "nazdar" from 10; password "nazdar" from 10;
} }