1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
Core
~~~~
- client: Ctrl-R eats one more enter
- client: paging?
- client: data losses on large dumps?
Documentation
~~~~~~~~~~~~~
- write doctool
- write documentation :|
Globals
~~~~~~~
- right usage of DBG vs. debug
- logging and tracing; use appropriate log levels
- check incoming packets and log errors!!
- check log calls for trailing newlines and log levels followed by comma
- check if all protocols set proper packet priorities and TTL's.
- try compiling with -Wunused
- does everybody test return value of sk_open?
- doc: references to RFC's we did follow
- protocols: implement CLI hooks and per-procotol CLI commands
- protocols: implement reconfigure hook
- protocols: use locking
- check use of system includes and sprintf()
Various ideas
~~~~~~~~~~~~~
- static: allow specifying a per-route filter program for setting route attributes?
- bgp: timing of updates?
- netlink: realms
- netlink: import Linux route attributes to our rta's, so that they can be filtered?
- config: executable config files
- filters: user defined attributes?
- client: access control
- io: use poll if available
- IPv6 router advertisements
- real multipath (doesn't seem to be simple at all :()
- fake multipath (even less simple)
- route recalculation timing and flap dampening [see RFC2439 for algorithms]
- aggregate engine: standard route aggregation and summarization [RFC2519]
- aggregate engine: injection of manually configured pseudo-static routes
- generate default route if any working BGP connection exists (aggregate engine again?)
- generate default route to IGP's (aggregate engine yet another time?)
- look at RFC 2386 (QoS-based routing)
- cli: show tables?
OSPF
~~~~
- refuse running on non-multicast devices
- importing of device routes for networks where we don't run OSPF
- check incoming packets using neighbor cache
- RFC2328 appendix E: Use a better algorithm
- automatic generation of external route tags (RFC1403)
- RFC1587 NSSA areas
- RFC2370 opaque LSA's
- 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'.
> > 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).
|