These are tasks which involve architectural changes in the code base or other significant changes to how FreeBSD currently does things, which will require significant levels of cooperation amongst developers to succeed.
Fix the TCP duplicate ACK problem which has been exposed in 7.0-CURRENT. –
AndreOppermann
Merge the IP_SENDIF option to skip source interface selection.
This work is incomplete. IP_SENDIF needs to work with unnumbered interfaces to be useful.
Fix bad UDP checksums with TXCSUM enabled; code needs a little rethinking.
The code as it stands in bms_netdev works only with numbered interfaces unless a number of forwarding table kludges are used. in_pcbconnect_setup() needs to be told about IP_SENDIF being in use so as not to attempt to bind temporarily to a local address, nor to attempt to find a route to the destination which breaks source address selection.
Teach dhclient to use IP_SENDTOIF/IP_ONESBCAST.
Doing IP_SENDIF and IP_SENDSRCADDR for the Raw IP path requires gnarly code changes to rip_output() and rip_send().
Allow IP_SENDTOIF without privilege if it is used to send from a numbered interface.
Extend IP_SENDTOIF to be able to accept layer 2 addresses with sufficient privilege.
Break ip_output() into a varargs function and perform a detailed performance study for common and high performance use cases.
Fix IPv4 unicast and broadcast architectural problems.
Integrate support for
RFC 3678, Socket Interface Extensions for Multicast Source Filters.
Phase I, the rewrite of the socket-level multicast option handling code for SSM, is in FreeBSD 7.0. –
BruceSimpson
Phase II: IGMPv3 support; support for raw IPv4 sockets.
Phase III: IPv6 and MLDv2 support.
Funding for phases II and III of this work is available.
Finish supporting Zeroconf (
RFC 3927).
Add address scope as a concrete kernel concept to both netinet and netinet6.
Consider importing NetBSD source address selection policy (by dyoung).
Much of the code in dyoung's patch is covered by infrastructure already present in the KAME netinet6 stack as it exists in FreeBSD. See ip6addrctl(8).
Teach TCP-MD5 (
RFC 2385) support to use the IPSEC SADB for its key storage.
Implement optimized trie lookups for forwarding.
-
-
-
Review luigi's last ARP code snapshot with a view to incorporation if it can solve the 255.255.255.255 problem in the shorter term.
It divorces ARP from the routing table, but some things in the kernel rely on link-layer route cloning (notably ip fast-forwarding, which checks for RTF_BROADCAST to see if it should drop directed broadcasts).
Rejig ipfw to not require the aquisition of a lock for every packet.
Generally revisit if_flags, if_drvflags. Look especially hard at the IFF_LINK* flags, which have quite variable semantics and may need to be broken out themselves, as they are sometimes driver flags (and sometimes not).
General review of struct ifnet locking, ifnet
API for device drivers, ifnet locking.
TCPDEBUG appears not to have been updated for TCP timewait support, and therefore may return incorrect data. It needs to be updated.
so_upcall needs to be broken out from a single upcall with ambiguous locking into several upcalls each with carefully documented locaking and semantics
Review accept filter locking following so_upcall cleanup.
Continue exploring socket locking strategy changes and vertical protocol lock integration in rwatson_resock and rwatson_resock_virtual.
For each protosw switch entry, decide whether thread is needed, or if ucred would be sufficient. Where possible, pass only a cred.
Investigate moving to optimistic locking of accept mutex to avoid frequent accept mutex acquires when not needed.
protosw(9) man page for protocol switch APIs.
Revisit multi-mbuf allocation, multi-mbuf input.
Investigate solutions to inpcb tear-down races involving timers with tcp – right now, timers are stopped but not drained, so timers can race with tear-down, hence NULL checks in timer code.
Revisit locking and atomicity for uipc_send(), and in particular, with respect to what happens if two threads simultaneously call sendto() on different addresses with the same datagram socket. Currently this is likely prevented by sblock() at the system call layer, but races with connect() aren't, as was shown by the recent race case along the same lines. Somehow this needs to be serialized.
inpcb freeing support so that pcb's can be freed after a load spike, requires moving away from weak consistency sysctl monitoring.
Continue pushing of control of state changes from socket layer to protocol layer so as to improve inter-layer consistency and reduce races between layers on socket state transitions (connect/disconnect/connecting/disconnecting/…)
Analysis of listen state transitions, which appear poorly defined. Consider in particular interactions with kqueue, where the order of registering kqueue events vs. calling listen affects the semantics considerably.
-