summaryrefslogtreecommitdiffstats
path: root/TODO
blob: cce62832e193f098978cc2898ff43e4de8ba2cac (plain)
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
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.
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.

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  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  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).

K jazyku:

o  K "BIRD Internet Routing Daemon" by mel patrit urcity clen.
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  
    na kapitolu o filtrech, kde jsou presne nadefinovany
(2) kdyz mluvis o preferenci, mel bys rici, co to je (ze to je atribut)
    a kdo jej vlastne nastavuje (ze existuje globalni default pro typ
    protokolu, ktery muzes overridovat v konfiguraci protokolu, coz
    muzes pro konkretni routu overridovat filtrem).
(3) popsat spojeni mezi routovacimi tabulkami, filtry a protokoly