Ethng: layer 2 interface improvements
Ethng contains a number of incremental improvements to ifnet and routing as well as hooks for TOE support that I would like to see brought back in to CVS.
- Multiple Tx queue support
- Move queue management out of ifnet into the driver
- add queue label into pkthdr
- Inpcb cached routes
TOE:
- toe_usrreqs send, rcvd, disconnect, and abort
- listen notification
- route update notification
- VM support for fast temporary holding of user pages that doesn't conflict with other parts of the system
- syncache hooks for offloaded sockets
Changes by directory for ethng
- sys/net:
- Important changes:
- Change radix tree lock to be a rwlock, this allows, lookups, the most common case to be shared
- add IFF_MULTIQ flag
- add if_mq_start routine and entry point to ifnet which is akin to if_start but leaves queue management up to the driver
- add multi-queue IFQ_HANDOFF macros
- mark route as timed out when it is deleted
- Secondary changes:
- move error handling in ether_input out of the fast patch for better i-cache packing
- add ARP type for IB
- add rtalloc2 which returns the route unlocked and eliminates the need in common case to lock the radix tree exclusively
- Important changes:
- sys/netinet:
- Key change:
- add rss_hash field to mbuf pkthdr as flow id for driver
- Important changes:
- add rss_hash field to inpcb for random queue distribution
- add route to inpcb to avoid doing a route lookup (with three highly contended lock acquisitions) on every call to ip_output
- Key change:
- sys/kern:
- sys/sys:
- sys/amd64:
- sys/vm:
- Important changes:
- add cpu interrupt binding
- add support for physically contiguous jumbo frames
- re-add lazy ref counting
- inline critical path of critical_{enter, exit}
- remove packet zone in favor of embedded mbuf (not pushing for approval for this)
- Disposable change:
- special case rwlock callout
- Important changes:
Changes by directory for TOE support
- sys/net:
- define interface capability for TOE
- add route update eventhandler to notify TOE module of ARP resolution, PMTU change, or redirect
- sys/netinet:
- sys/netinet/tcp_ofld.c:
- sys/netinet/tcp_ofld.h:
- allow arpresolve to accept a null mbuf
- re-add PMTU code updates to route
- make arp_ifinit and arp_ifinit2 use the same routine internally
- add callback and data pointers to in_conninfo to allow the syncache to notify TOE that a syncache entry is being disposed of
- add TCP_CONGESTION option for setsockopt
- replace calls to tcp_output with calls to either tcp_gen_send, tcp_gen_rcvd, tcp_gen_abort, or tcp_gen_disconnect
- these all still simply call tcp_output in the non-offloaded case
- add checks to syncache so that offloaded connections aren't incorrectly invalidated
- add upcalls for listen to notify TOE when a socket is made into a listener
- add TF_TOE
- add three fields to tcpcb: toe_usrreqs pointer, t_toe pointer for TOE's toepcb, and t_cong_control to point to the name of the congestion control routine (we track the name and not an index because congestion control modules can be added and removed in any order)