Commit c184d9d0 authored by Pavel Machek's avatar Pavel Machek

Documentation update

parent 0b1cad81
......@@ -58,59 +58,16 @@ OSPF
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.
o Zkusit HTML projet nejakym validatorem.
Uvod:
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.
o Chybi installation requirements: tedy ze potrebujeme GCC a GNU make.
Filtry:
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 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 attributes: nemyslim, ze jsou vsechny -- co treba scope a preference?
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 RIP: Per-interface optiony uvadet tez jako definition list.
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).
......@@ -122,17 +79,6 @@ 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'.
> > Nechtel bys kapitolu o clientovy napsat ty? Ja o nem nic nevim, a
> > kvalita uzivatelske dokumentace je o hodne dulezitejsi nez
> > programatorske.
>
> O clientovi neni temer co psat, commandy si, myslim, snadno najdes v config.Y.
> Protokol je velice jednoduchy: uzivatel posila prikazy, BIRD odpovida radky
> typu CCCCs..., kde CCCC je kod hlasky (viz doc/reply-codes), `s' je whitespace,
> `...' hlaska. Viceradkove odpovedi maji na vsech radcich mimo posledniho misto `s'
> minus a nebo na druhem az predposlednim radku misto celeho prefixu jen whitespace
> (presne jako ve FTP).
Jeste by to chtelo trosku podrobneji:
(1) zminit se o atributech, rici, co vsechno o route rikaji a odkazat
......
......@@ -98,30 +98,55 @@ it is slightly modified linuxdoc dtd. Anything in <descrip> tags is consi
configuration primitives, <cf> is fragment of configuration within normal text, <m> is
"meta" information within fragment of configuration -- something in config which is not keyword.
<sect1>About routing tables
<p>Bird has one or more routing tables, which may or may not be
synchronized with kernel and which may or may not be synchronized with
each other (see protocol pipe). Each routing table contains list of
known routes. Each route has certain attributes, most important is
prefix of network this route is for. Routing table maintains more than
one entry for network, but at most one entry for one network and one
protocol. The entry with biggest preference is used for routing. If
there are more entries with same preference and they are from same
protocol, protocol decides (typically according to metrics). You can
get list of route attributes in "Route attributes" section in
filters. Filters can alter routes passed between routing tables and
protocols.
<sect1>Installing BIRD
<p>On UNIX system, installing BIRD should be as easy as:
<p>On recent UNIX system, installing BIRD should be as easy as (bird
relies on GNU C and GNU make extensions): <!-- It is not true that we
require gcc, there are other compilers supporting gcc extensions! -->
<code>
./configure
make
make install
vi /usr/local/etc/bird.conf
bird
</code>
<p>You can use <tt>./configure --help</tt> to get list of configure options.
<p>You can use <tt>./configure --help</tt> to get list of configure
options. Most important (and not easily guessed) option is
<tt/--enable-ipv6/, which enables IpV6 support.
<sect1>About routing tables
<p>You can pass several command-line options to bird:
<p>Bird has one or more routing tables. Each routing table contains
list of known routes. Each route has certain attributes, most
important is prefix of network this route is for. Routing table
maintains more than one entry for network, but at most one entry for
one network and one protocol. The entry with biggest preference is
used for routing. If there are more entries with same preference and
they are from same protocol, protocol decides (typically according to
metrics). You can get list of route attributes in "Route attributes"
section in filters.
<descrip>
<tag>-c <m/config name/</tag>
use given config file instead of <file>bird.conf</file>.
<tag>-d</tag>
enable debugging.
<tag>-D <m/filename for debug log/</tag>
log debugging information to given file
<tag>-s <m/name of communication socket/</tag>
use given filename for socket for communications with bird client, default is <file/bird.ctl/.
</descrip>
<sect>Configuration
......@@ -246,7 +271,10 @@ protocols, telling BIRD to show various information, telling it to
show routing table filtered by any filter, or telling bird to
reconfigure. Press <tt/?/ at any time to get online help. Option
<tt/-v/ can be passed to client, telling it to dump numeric return
codes.
codes. You do not neccessarily need to use BIRDC to talk to BIRD, your
own application could do that, too -- format of communication between
BIRD and BIRDC is stable (see programmer's documenation).
<sect>Filters
......@@ -291,7 +319,6 @@ 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
over. Functions can have zero or more parameters, and can have local variables. Function basically
looks like this:
......@@ -320,6 +347,27 @@ to any functions being called. Filter must terminate with either
accept or reject statement. If there's runtime error in filter, route
is rejected.
<p>Nice trick to debug filters is using <cf>show route filter
<m/name/</cf> from command line client. Example session might look
like:
<code>
pavel@bug:~/bird$ ./birdc -s bird.ctl
BIRD 0.0.0 ready.
bird> help
No such command.
bird>
bird> show route
10.0.0.0/8 dev eth0 [direct1 23:21] (240)
195.113.30.2/32 dev tunl1 [direct1 23:21] (240)
127.0.0.0/8 dev lo [direct1 23:21] (240)
bird> show route ?
show route [<prefix>] [table <t>] [filter <f>] [all] [primary] [(import|protocol) <p>] [stats] Show routing table
bird> show route filter { if 127.0.0.5 ~ net then accept; }
127.0.0.0/8 dev lo [direct1 23:21] (240)
bird>
</code>
<sect1>Data types
<p>Each variable and each value has certain type. Unlike C, filters distinguish between integers and
......@@ -358,10 +406,12 @@ booleans and between integers and enums (that is to prevent you from shooting in
filters know four types of sets. Sets are similar to strings: you can pass them around
but you can not modify them. Constant of type <cf>set int</cf> looks like <cf>
[ 1, 2, 5..7 ]</cf>. As you can see, both simple values and ranges are permitted in
sets. Sets of prefixes are special: you can specify which prefixes should match them by
sets. Sets of prefixes are special: you can specify which prefix lengths should match them by
using <cf>[ 1.0.0.0/8+, 2.0.0.0/8-, 3.0.0.0/8{5,6} ]</cf>. 3.0.0.0/8{5,6} matches
prefixes 3.X.X.X, whose prefix length is 5 to 6. 3.0.0.0/8+ is shorthand for 3.0.0.0/{0,8},
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}. For example,
<tt>1.2.0.0/16 ~ [ 1.0.0.0/8{ 15 , 17 } ]</tt> is true, but
<tt>1.0.0.0/8 ~ [ 1.0.0.0/8- ]</tt> is false.
<tag/enum/
enumeration types are halfway-internal in the BIRD. You can not define your own
......@@ -374,10 +424,14 @@ booleans and between integers and enums (that is to prevent you from shooting in
<tag/bgpmask/
bgp mask is mask used for matching bgp paths
(using <cf>path ~ / 2 3 5 ? / syntax </cf>). <cf/?/ is
really serving in "any number of autonomous systems", but we
(using <cf>path ~ / 2 3 5 ? / syntax </cf>). Matching is
done using shell-like pattern: <cf/?/ means
"any number of any autonomous systems". Pattern for single
unknown autonomous system is not supported. (We
did not want to use * because then it becomes too easy to
write <cf>/*</cf> which is start of comment.
write <cf>/*</cf> which is start of comment.) For example,
<tt>/ 4 3 2 1 / ~ / ? 4 3 ? 1 /</tt> is true, but
<tt>/ 4 3 2 1 / ~ / ? 4 5 ? /</tt> is false.
<tag/clist/
community list. This is similar to set of pairs,
......@@ -428,11 +482,13 @@ attributes, just like it accesses variables. Access to undefined
attribute results in runtime error; you can check if attribute is
defined using <cf>defined( <m>attribute</m> )</cf> syntax.
<descrip>
<tag/<m/prefix/ network/
<tag/<m/prefix/ net/
network this route is talking about.
<tag/<m/int/ preference/
preference of this route.
<tag/<m/ip/ from/
who told me about this route.
......@@ -441,6 +497,12 @@ defined using <cf>defined( <m>attribute</m> )</cf> syntax.
<tag/<m/enum/ source/
what protocol told me about this route. This can have values such as <cf/RTS_RIP/ or <cf/RTS_OSPF_EXT/.
<tag/<m/enum/ scope/
<tag/<m/enum/ cast/
<tag/<m/enum/ dest/
</descrip>
<p>Plus, there are protocol-specific attributes, which are described in protocol sections.
......@@ -1014,11 +1076,18 @@ protocol static {
}
</code>
<sect>Getting more help
<sect>Problems
<p>This is really last section of this file, should give pointers to
programmers documentation, web pages mailing lists and similar stuff.
<p>BIRD is relatively young system, and probably contains some
bugs. You can report bugs at <HTML URL="fixme">, but before you do,
please make sure you are running latest version (available at <HTML
URL="fixme">), and that bug was not already reported by someone else
(mailing list archives are at <HTML URL="fixme">). (Of course, patch
which fixes the bug along with bug report is always welcome). When
trying to understand, what is going on, Internet standards are
relevant reading; you can get them from <HTML URL="fixme">.
<p><it/Good luck!/
</article>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment