summaryrefslogtreecommitdiffstats
path: root/TODO
blob: b998bc24075d44d09deadfa32a15bde18dc97e47 (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
Core
~~~~
- IPv6: router advertisements
- IPv6: test it!
- IPv6: hashing functions etc.

- krt-iface: check whether the interface alias hack works
- krt-iface and netlink: unnumberedness of tunnels

- better memory allocators
- real attribute cache
- real neighbor cache

- preferences of protocols

- static: check validity of route destination?
- static: allow specifying a per-route filter program for setting route attributes?

- rte_update: check whether all bits not covered by masklen are zero
- rte_update: debug mode

- netlink: import Linux route attributes to our rta's, so that they can be filtered?

- socket: Use IP_RECVERR for BGP TCP sockets?

- config: executable config files
- config: when parsing prefix, check zero bits
- config: useless rules when protocols disabled
- config: remove protocol startup priority hacks?
- config: better datetime format

- krt: rescan interfaces when route addition fails?
- krt: does PERSIST mode have any sense if kernel syncer is shut down as last?
- krt: check behaviour wrt. reconfiguration of routing tables

- tagging of external routes?

- io: use poll if available

Commands
~~~~~~~~
shutdown			# order system shutdown
configure [<file>]
show	<name>			# show everything you know about symbol <name>
	rip ??? [<name>]
	ospf ??? [<name>]
	static ??? [<name>]
	symbols
(disable|enable|restart) <protocol>	# or ALL?
- showing of routing table as seen by given protocol
- showing of deleted routing tables and filters

Roadmap
~~~~~~~
- Allocators and data structures
- Client
- Remaining bits of IPv6 support (radvd)
- RIPv6
- BGP?
- Logging and debugging messages

Client
~~~~~~
- write it!

Documentation
~~~~~~~~~~~~~
- write doctool
- write documentation :|

Cleanup
~~~~~~~
- right usage of DBG vs. debug
- cleanup debugging calls
- logging and tracing; use appropriate log levels
- check incoming packets and log errors!!
- check log calls for trailing newlines
- check if all protocols set proper packet priorities and TTL's.
- replace all NUM, IPA and expr tokens by constant filter expressions
- try compiling with -Wunused
- does everybody test return value of sk_open?
- add references to RFC's we did follow
- protocols: implement CLI hooks
- protocols: use locking

Various ideas
~~~~~~~~~~~~~
- 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)


RIP
~~~

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

BGP
~~~
	- aggregation, ATOMIC_AGGREGATE
	- communities
	- attributes must be sorted!
	- re-export of NEXT_HOP attribute
	- BGP session over currently down interface
	- LOCAL_PREF attribute
	- error notification received -> log error
	- set TTL to 1 (configurable?)
	- consulting IGP for next-hop information? (what if it changes?)
	- inter-advertisement delay???!
	- normalize (sort) incoming AS-SET's
	- maximum length of AS paths
	- expected neighbor AS
	- hold time
	- idle timer after error: initial value, exponential growth, maximum value
	- import of IGP routes (use external route tags from OSPF)