summaryrefslogtreecommitdiffstats
path: root/TODO
blob: a2a72aa9d1f7e161e665e0f7ff93a7b09ff5f046 (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
Core
~~~~
* protocols: implement dumping of protocol-dependent rte attributes

- IPv6 support

- io.c: refuse old-style multicasts for unnumbered interfaces?

- counters (according to SNMP MIB?)
- better memory allocators
- real attribute cache
- real neighbor cache

- default preferences of protocols: prefer BGP over OSPF/RIP external routes?

- 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?

- iface: SIOCGIFINDEX exists on glibc systems, but it doesn't work on 2.0.x kernels!

- socket: Use IP_RECVERR for BGP TCP sockets?

- OSPF: refuse running on non-multicast devices

- config: executable config files
- config: when parsing prefix, check zero bits
- config: reconfiguration
- config: useless rules when protocols disabled

- krt: rescan interfaces when route addition fails?
- krt: does PERSIST mode have any sense if kernel syncer is shut down as last?

- cmdline: implement
- cmdline: echo of debug/log messages

- tagging of external routes?

- port to FreeBSD

Commands
~~~~~~~~
shutdown
configure [<file>]
show	protocols [<name>]
	<name>
	route [<route>] [table <name>] [filter (<name> | { <inline> })] [where <condition>]
	status			# router id, version etc.
	rip ??? [<name>]
	ospf ??? [<name>]
	static ??? [<name>]
	interfaces [<name>]
(disable|enable|restart) <protocol>

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

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
~~~
	- export-only and import-only mode?
	- drop RIPv1 (Historic protocol)?
	- Route Tag
	- limit routing table xfer (frequency, only to neighbors)

OSPF
~~~~
	- 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)