Core ~~~~ * protocols: implement dumping of protocol-dependent rte attributes - io.c: refuse old-style multicasts for unnumbered interfaces? - prefer loopback addresses as router IDs (dummy interface?) - config: executable config files - config: better format for datetime then seconds - do we really need preconfig? - counters (according to SNMP MIB?) - better memory allocators - default preferences of protocols: prefer BGP over OSPF/RIP external routes? - secondary addresses -> subinterfaces or ignore - static: check validity of route destination? - device: configuration of interface patterns - adding of route: check whether all bits not covered by masklen are zero - netlink: import Linux route attributes to our rta's, so that they can be filtered? - iface: when seen an invalid broadcast, fix it up or at least report - iface: we always need ifindex at least for PtP links (OSPF) - iface: interface filters should support filtering by IP address as well - 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 - lib: use better checksum function 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? 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 - 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?) RIP ~~~ - RIP: export-only and import-only mode? - drop RIPv1 (Historic protocol)? - Route Tag - limit routing table xfer (frequency, only to neighbors) - multicast on/off (per interface) OSPF ~~~~ - importing of device routes for networks where we don't run OSPF - check incoming packets using neighbor cache - stub area: either no external routes or only default route - RFC2328 appendix E: Use a better algorithm - automatic generation of external route tags (RFC1403) - RFC1587 NSSA areas - RFC2370 opaque LSA's - RFC1793 Demand Circuit Support ?? - respect interface MTU and try not to create larger packets unless unavoidable BGP ~~~ - in, local, out RIB - maxsize=4096 - detection of loops - aggregation, ATOMIC_AGGREGATE - communities - confederations - 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)