Core
~~~~
-- IPv6 support
+- 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
-- 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?
+- preferences of protocols
- static: check validity of route destination?
- static: allow specifying a per-route filter program for setting route attributes?
- config: when parsing prefix, check zero bits
- config: reconfiguration
- 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?
- tagging of external routes?
+- io: use poll if available
+
- port to FreeBSD
Commands
static ??? [<name>]
symbols
(disable|enable|restart) <protocol> # or ALL?
+- showing of routing table as seen by given protocol
+
+Client
+~~~~~~
+- write it!
+
+Documentation
+~~~~~~~~~~~~~
+- write doctool
+- write documentation :|
Cleanup
~~~~~~~
debug(" BC");
if (i->flags & IF_MULTICAST)
debug(" MC");
- if (i->flags & IF_TUNNEL)
- debug(" TUNL");
if (i->flags & IF_LOOPBACK)
debug(" LOOP");
if (i->flags & IF_IGNORE)
#define IF_UNNUMBERED 4
#define IF_BROADCAST 8
#define IF_MULTICAST 0x10
-#define IF_TUNNEL 0x20 /* FIXME: Remove? */
#define IF_ADMIN_DOWN 0x40
#define IF_LOOPBACK 0x80
#define IF_IGNORE 0x100 /* Not to be used by routing protocols (loopbacks etc.) */
} u;
} eattr;
-/* FIXME: Introduce real protocol numbers? */
#define EAP_GENERIC 0 /* Generic attributes */
#define EAP_BGP 1 /* BGP attributes */
#define EAP_RIP 2 /* RIP */
if (ng)
a.iface = ng->iface;
else
- /* FIXME: Remove this warning? */
+ /* FIXME: Remove this warning? Handle it somehow... */
log(L_WARN "Kernel told us to use non-neighbor %I for %I/%d", gw, net->n.prefix, net->n.pxlen);
a.dest = RTD_ROUTER;
a.gw = gw;
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
-#ifndef MSG_TRUNC /* FIXME: Hack to circumvent omissions in glibc includes */
+#ifndef MSG_TRUNC /* Hack: Several versions of glibc miss this one :( */
#define MSG_TRUNC 0x20
#endif
e = (struct nlmsgerr *) NLMSG_DATA(h);
ec = -e->error;
if (ec)
- log(L_WARN "Netlink: %s", strerror(ec)); /* FIXME: Shut up? */
+ log(L_WARN "Netlink: %s", strerror(ec));
return ec;
}
r.h.nlmsg_type = new ? RTM_NEWROUTE : RTM_DELROUTE;
r.h.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
r.h.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | (new ? NLM_F_CREATE|NLM_F_REPLACE : 0);
- /* FIXME: Do we really need to process ACKs? */
r.r.rtm_family = BIRD_AF;
r.r.rtm_dst_len = net->n.pxlen;
if (ng)
ra.iface = ng->iface;
else
- /* FIXME: Remove this warning? */
+ /* FIXME: Remove this warning? Handle it somehow... */
log(L_WARN "Kernel told us to use non-neighbor %I for %I/%d", ra.gw, net->n.prefix, net->n.pxlen);
}
else
break;
}
}
-#ifdef CLEAN_WAY_WORKING_ONLY_ON_LINUX_2_1 /* FIXME */
+#if 0
+ /*
+ * Linux 2.1 and higher supports this, but it's not needed since
+ * we prefer to use Netlink there anyway.
+ */
ic.ifc_req = NULL;
ic.ifc_len = 999999999;
if (ioctl(if_scan_sock, SIOCGIFCONF, &ic) < 0)