doc: update TODO

the TODO was last touched in 2006.  This is a first pass at cleaning it
up, motivated primarily by the need for an up-to-date idea list for the
Google Summer of Code 2013.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
diff --git a/TODO b/TODO
index 24941de..0da3553 100644
--- a/TODO
+++ b/TODO
@@ -1,78 +1,188 @@
 
 			   Quagga TODO list
-                             2004/11/24
+                             2013-03-29
 
-zebra:
 
-o Pointopoint address configuration.
-o Multiple (alias) address configuration for the interface when kernel
-  support it [just starting].
-o improve rtnetlink to handle sequence number tracking and reconciliation
-  and resyncs.
-o Add support for valid and preferred lifetimes to IPv6 addresses 
-o proper support for (at least) 1-level recursive routes
-o Ability to set src on routes, where systems support it.
-o Ability to apply route-maps to daemon route updates.
+This is the Quagga primary TODO list.  It is on git because that way changes
+pass through the usual process just like code does, therefore they will have
+the same visibility.
 
-bgpd:
+If you are working on something beyond a simple fix, to avoid double work it
+is a good idea to submit a patch to this TODO list when you are starting,
+listing what you're doing.  Also, as others may have done just that, check
+the list before starting.
 
-o BGP TCP MD5 authentication by password command.
-o HUP signal support (reload configuration file).
-o BGP multi-path extension
-o move FSM state to be per-connection, not per-peer.
-o Add support for internal and minimum-metric MED setting
+Google Summer of Code 2013 note:  this list double-serves as idea list for the
+Summer of Code.  Ideas considered suitable for students are marked with a star
+after the number, like this: "[Q999*] achieve world peace".  They will also
+have extended descriptions.  Nevertheless, if you'd like to do something else,
+just write a mail to the mailing list: quagga-dev@lists.quagga.net
 
-ripd:
+"GSoC-Mentors:" listings are preliminary at this point.
 
-o Multipath support.
+
+Overall
+=======
+
+[Q000] improve unit test architecture
+
+[Q001] kick invalid runtime tests from configure.ac, use list of supported
+		OSes and their APIs instead.
+	Priority: low
+	State: patch half-done 2013-03-29 David Lamparter
+
+[Q002*] clean up zebra IPC, remove code duplication, align to common API
+	Priority: high
+	GSoC-Mentors: David Lamparter, Christian Franke
+
+	Quagga posesses an IPC mechanism to exchange route information among
+	the different daemons and Zebra, the kernel-interface.  This mechanism
+	is implemented in libzebra, but is currently used in all sorts of
+	different ways in the individual protocol daemons.  Also, in the future
+	the entire protocol needs to be redone in an extensible way, so we're
+	able to support MPLS, BFD, Multi-Topology/Instance, VRFs, ...
+
+	This TODO entry only refers to the first-step API cleanup.  All the
+	daemons need to use a single, well-defined libzebra API.  Only after
+	this has been addressed can we look upon changing the protocol itself,
+	since by then it will be encapsulated inside libzebra.
+
+[Q003] add multi-instance / multi-topology support to the individual protocols
+
+[Q004] MPLS support
+	State: work in progress 2013-03-29 Renato Westphal, Timo Teräs
+
+[Q005] BFD support
+	State: two old implementations exist, contact Hasso Tepper
+
+
+library
+=======
+
+[L000] improve route_table speed, eg strided lookups for common prefix depths.
+
+[L001] ipv6 addresses need concept of valid/preferred
+
+[L002] implement a generic daemon access/control protocol (eg D-Bus like?
+		simplified SNMP-a-like?  NETCONF?)
+
+[L003] extend vty command definitions to allow them to be self-documenting
+		i18n command help strings
+
+[L004] create a common libspf (for ospfd, ospf6d and possibly isisd and more).
+		cf. TODO item [O000] for the ospfd/ospf6d specific variant
+
+[L005] stabilise the API (possibly including symbol/library versioning voodoo)
+
+[L006] Document the exported API (DocBook/Doxygen?)
+
+[LE00] incorporate library changes from Euro-IX branch, except threading
+
+[LE01] incorporate threading library support from Euro-IX branch
+
+
+zebra
+=====
+
+[Z000] Pointopoint address configuration.
+	Priority: low
+	State: patch done & tested 2013-03-29 David Lamparter
+
+[Z001] Add support for valid and preferred lifetimes to IPv6 addresses
+
+[Z002] proper support for (at least) 1-level recursive routes
+	Priority: high
+
+[Z003] Ability to set src on routes, where systems support it.
+
+[Z004] Ability to apply route-maps to daemon route updates.
+
+
+bgpd
+====
+
+[B000] HUP signal support (reload configuration file).
+
+[B001] BGP multi-path extension, relaxed mode
+	Priority: medium
+
+[B002] move FSM state to be per-connection, not per-peer.
+
+[B003] Add support for internal and minimum-metric MED setting
+
+
+ripd
+====
+
+[R000] Multipath support.
+
+
+ospfd/ospf6d
+============
+
+[O000] move SPF to common code
+
+[O001] extend code sharing between ospfd and ospf6d beyond SPF
+
+[O002*] OSPF testing replay tool
+	Priority: medium
+	GSoC-Mentors: Martin Winter, Christian Franke, David Lamparter
+
+	In order to extensively test OSPF implementations, a tool to fake an
+	OSPF neighbor is immensely useful.  This tool needs to be capable of
+	forming an adjacency and pushing LSAs to the device to be tested.  To
+	maintain the adjacency, some minimal state tracking is useful.
+
+	In total, the tool needs to form an adjacency, read and push LSAs, and
+	output received LSAs.  Additional tools to generate LSAs from
+	specifications as well as verify received LSA correctness can then be
+	built on top of that.
+
+	The tool needs to support IPv4 and IPv6, possibly split into 2 tools
+	with some code sharing.
 
 ospfd:
 
-o Rewrite the incremental RT update code.
-o Demand circuits.
-o Multiple instances.
-o OSPF MIB [SNMP get is amost finished].
-o HUP signal treatment.
-o Fragment Oversized LSAs 
-o move SPF to common code
-o NSSA priority rules (RFC3101 2.4)
-o Type-7 address ranges (RFC3101 2.2)
-o Originating Type-7 default into area (RFC3101 2.7)
+[O400] Demand circuits.
+	Priority: very low
+
+[O401] Multiple instances.
+	Priority: medium
+
+[O402] HUP signal treatment.
+	Priority: medium
+	State: patch on ML needs review 2012-06-04 Mattias Walström
 
 ospf6d:
 
-o move SPF to common code
-o add router-id lookups
+[O600] fix ospf6d in general
+	Priority: high
+	State: patches tickling in from Cumulus Networks 2013-03-29 Dinesh Dutt
 
-isisd:
+isisd
+=====
 
-o finish SPF
-o select nearest L2 when running SPF for L1
-o remove the routes when holding time for nexthop expires
-o redistribution
-o autosummary
+[I000] reassess isisd TODO
 
-o Mesh groups (RFC2973)
-o Crypto authentication (RFC3567)
+[I001*] IS-IS testing replay tool
+	Priority: medium
+	GSoC-Mentors: Martin Winter, Christian Franke, David Lamparter
 
-lib:
-o improve route_table speed, eg strided lookups for common prefix depths.
-o improve hash tables, eg auto-growing hash tables
-o move performance sensitive users of hashes over to jhash
-o clean up linked lists
-o ipv6 addresses need concept of valid/preferred
-o implement a generic daemon access/control protocol (eg D-Bus like? 
-  simplified SNMP-a-like?)
-o merge SPF code from ospfd and ospf6d into a common libspf
-o depends-on(generic A/C protocol) move snmp to seperate daemon
-o extend command definitions to allow them to be self-documenting
-o i18n command help strings
-o Document the exported API (DocBook/Doxygen?)
+	see [O002*].
 
-vtysh:
-o untangle readline specific bits
-o add a vtyd with a vty (ie telnet) frontend (as opposed to readline)
-o depends-on(generic A/C protocol) use such
-o better AAA support than just PAM, eg krb5, SASL, LDAP..
-                        -----------------------------
+[I002] Mesh groups (RFC2973)
+
+[I003] Crypto authentication (RFC3567)
+
+
+vtysh
+=====
+
+[V000] untangle readline specific bits
+
+[V001] add a vtyd with a vty (ie telnet) frontend (as opposed to readline)
+
+[V002] (=> [L002]) use daemon control protocol
+
+[V003] better AAA support than just PAM, eg krb5, SASL, LDAP...