freebsd-nq/sys/netinet
Lawrence Stewart dbc4240942 This commit marks the first formal contribution of the "Five New TCP Congestion
Control Algorithms for FreeBSD" FreeBSD Foundation funded project. More details
about the project are available at: http://caia.swin.edu.au/freebsd/5cc/

- Add a KPI and supporting infrastructure to allow modular congestion control
  algorithms to be used in the net stack. Algorithms can maintain per-connection
  state if required, and connections maintain their own algorithm pointer, which
  allows different connections to concurrently use different algorithms. The
  TCP_CONGESTION socket option can be used with getsockopt()/setsockopt() to
  programmatically query or change the congestion control algorithm respectively
  from within an application at runtime.

- Integrate the framework with the TCP stack in as least intrusive a manner as
  possible. Care was also taken to develop the framework in a way that should
  allow integration with other congestion aware transport protocols (e.g. SCTP)
  in the future. The hope is that we will one day be able to share a single set
  of congestion control algorithm modules between all congestion aware transport
  protocols.

- Introduce a new congestion recovery (TF_CONGRECOVERY) state into the TCP stack
  and use it to decouple the meaning of recovery from a congestion event and
  recovery from packet loss (TF_FASTRECOVERY) a la RFC2581. ECN and delay based
  congestion control protocols don't generally need to recover from packet loss
  and need a different way to note a congestion recovery episode within the
  stack.

- Remove the net.inet.tcp.newreno sysctl, which simplifies some portions of code
  and ensures the stack always uses the appropriate mechanisms for recovering
  from packet loss during a congestion recovery episode.

- Extract the NewReno congestion control algorithm from the TCP stack and
  massage it into module form. NewReno is always built into the kernel and will
  remain the default algorithm for the forseeable future. Implementations of
  additional different algorithms will become available in the near future.

- Bump __FreeBSD_version to 900025 and note in UPDATING that rebuilding code
  that relies on the size of "struct tcpcb" is required.

Many thanks go to the Cisco University Research Program Fund at Community
Foundation Silicon Valley and the FreeBSD Foundation. Their support of our work
at the Centre for Advanced Internet Architectures, Swinburne University of
Technology is greatly appreciated.

In collaboration with:	David Hayes <dahayes at swin edu au> and
			Grenville Armitage <garmitage at swin edu au>
Sponsored by:	Cisco URP, FreeBSD Foundation
Reviewed by:	rpaulo
Tested by:	David Hayes (and many others over the years)
MFC after:	3 months
2010-11-12 06:41:55 +00:00
..
cc This commit marks the first formal contribution of the "Five New TCP Congestion 2010-11-12 06:41:55 +00:00
ipfw put back the assigment to sched_time. It was correct, and 2010-10-01 15:38:35 +00:00
libalias Standardise all Swinburne related copyright/licence statements throughout the 2010-11-12 00:44:18 +00:00
accf_data.c Rework socket upcalls to close some races with setup/teardown of upcalls. 2009-06-01 21:17:03 +00:00
accf_dns.c Rework socket upcalls to close some races with setup/teardown of upcalls. 2009-06-01 21:17:03 +00:00
accf_http.c Rework socket upcalls to close some races with setup/teardown of upcalls. 2009-06-01 21:17:03 +00:00
cc.h This commit marks the first formal contribution of the "Five New TCP Congestion 2010-11-12 06:41:55 +00:00
icmp6.h MFP4: @176978-176982, 176984, 176990-176994, 177441 2010-04-29 11:52:42 +00:00
icmp_var.h Many network stack subsystems use a single global data structure to hold 2009-08-02 19:43:32 +00:00
if_atm.c
if_atm.h
if_ether.c Don't leak the LLE lock if the arptimer callout is pending or inactive. 2010-11-02 13:00:56 +00:00
if_ether.h Add arp_update_event. This replaces route_arp_update_event, which 2009-09-08 21:17:17 +00:00
igmp_var.h Update stats in struct igmpstat using two new macros: 2009-04-12 13:41:13 +00:00
igmp.c Proper bracketing. 2010-10-01 11:48:14 +00:00
igmp.h These are no longer referenced in the tree, so can be safely removed. 2009-06-10 18:12:15 +00:00
in_cksum.c
in_debug.c Add initial inet DDB support for show in_ifaddr and show sin commands which 2010-10-24 22:02:36 +00:00
in_gif.c MFP4: @176978-176982, 176984, 176990-176994, 177441 2010-04-29 11:52:42 +00:00
in_gif.h
in_mcast.c Fix a few issues related to the legacy 4.4 BSD multicast APIs. 2010-04-10 12:05:31 +00:00
in_pcb.c Fix so that a multicast packet can be sent 2010-11-11 05:40:39 +00:00
in_pcb.h Abstract out initialization of most aspects of struct inpcbinfo from 2010-03-14 18:59:11 +00:00
in_proto.c Allow carp(4) to be loaded as a kernel module. Follow precedent set by 2010-08-11 00:51:50 +00:00
in_rmx.c Add a bandaid for a long-standing race condition during route entry 2010-09-27 19:26:56 +00:00
in_systm.h Use uint32_t instead of n_long and n_time, and uint16_t instead of n_short. 2009-02-13 15:14:43 +00:00
in_var.h Remove unused VNET_SET() and related macros; only VNET_GET() is 2009-07-16 21:13:04 +00:00
in.c MfP4 CH182763 (original version): 2010-10-16 19:53:22 +00:00
in.h Make the RPC specific __rpc_inet_ntop() and __rpc_inet_pton() general 2010-09-24 15:01:45 +00:00
ip6.h Start removing IPv6 Type 0 Routing header code. 2009-03-03 13:12:12 +00:00
ip_carp.c Do not convert some meaningful error value to EINVAL. 2010-09-20 12:23:10 +00:00
ip_carp.h Unbreak LINT by moving all carp hooks to net/if.c / netinet/ip_carp.h, with 2010-08-11 20:18:19 +00:00
ip_divert.c Ensure a minimum "slop" of 10 extra pcb structures when providing a 2010-08-17 16:41:16 +00:00
ip_divert.h Various cleanup done in ipfw3-head branch including: 2010-01-04 19:01:22 +00:00
ip_dummynet.h whitespace fixes (trailing whitespace, bad indentation 2010-04-19 16:17:30 +00:00
ip_ecn.c
ip_ecn.h
ip_encap.c (S)LIST_HEAD_INITIALIZER takes a (S)LIST_HEAD as an argument. 2009-12-28 22:56:30 +00:00
ip_encap.h
ip_fastfwd.c Virtualize the pfil hooks so that different jails may chose different 2009-10-11 05:59:43 +00:00
ip_fw.h + implement (two lines) the kernel side of 'lookup dscp N' to use the 2010-03-15 17:14:27 +00:00
ip_gre.c The NetBSD Foundation has granted permission to remove clause 3 and 4 from 2010-03-01 17:05:46 +00:00
ip_gre.h The NetBSD Foundation has granted permission to remove clause 3 and 4 from 2010-03-01 17:05:46 +00:00
ip_icmp.c Change the messages of the ICMP bad port bandwidth limiter from 2010-08-14 21:04:27 +00:00
ip_icmp.h MFP4: @176978-176982, 176984, 176990-176994, 177441 2010-04-29 11:52:42 +00:00
ip_id.c
ip_input.c MFp4 CH=183052 183053 183258: 2010-09-02 17:43:44 +00:00
ip_ipsec.c Make the IPsec SADB embedded route cache a union to be able to hold both the 2010-10-23 20:35:40 +00:00
ip_ipsec.h Remove ifdefed out part of code, which seems to have originated a decade ago 2009-11-09 19:53:34 +00:00
ip_mroute.c Virtualize the IPv4 multicast routing code. 2010-06-02 15:44:43 +00:00
ip_mroute.h Virtualize the IPv4 multicast routing code. 2010-06-02 15:44:43 +00:00
ip_options.c Use ifa_ifwithaddr_check() rather than ifa_ifwithaddr() as we are not 2010-10-14 12:32:49 +00:00
ip_options.h Add function ip_checkrouteralert(), which will be used 2009-03-04 02:51:22 +00:00
ip_output.c IP_BINDANY is not correctly handled in getsockopt() case. 2010-09-24 14:38:54 +00:00
ip_var.h MFp4 CH=183052 183053 183258: 2010-09-02 17:43:44 +00:00
ip.h use u_char instead of u_int for short bitfields. 2010-02-01 14:13:44 +00:00
pim_var.h Virtualize the IPv4 multicast routing code. 2010-06-02 15:44:43 +00:00
pim.h
raw_ip.c Adding an address on an interface also requires the loopback route to 2010-09-12 18:04:47 +00:00
sctp_asconf.c Delay the assignment of a path for DATA chunk until they hit 2010-09-15 23:10:45 +00:00
sctp_asconf.h Delay the assignment of a path for DATA chunk until they hit 2010-09-15 23:10:45 +00:00
sctp_auth.c Fix a locking issue which shows up when the code is used 2010-09-19 11:42:16 +00:00
sctp_auth.h Use [] instead of [0] for flexible arrays. 2010-01-22 07:53:41 +00:00
sctp_bsd_addr.c Remove unused variable/assignment. 2010-09-15 21:19:54 +00:00
sctp_bsd_addr.h This adds back the Iterator to the sctp 2010-05-16 17:03:56 +00:00
sctp_cc_functions.c Make the initial congestion window configurable via sysctl. 2010-09-17 18:53:07 +00:00
sctp_cc_functions.h
sctp_constants.h * Implement initial version of send buffer splitting. 2010-09-17 16:20:29 +00:00
sctp_crc32.c Fix the the SCTP_WITH_NO_CSUM option when used in combination with 2010-08-29 18:50:30 +00:00
sctp_crc32.h Fix the the SCTP_WITH_NO_CSUM option when used in combination with 2010-08-29 18:50:30 +00:00
sctp_header.h Add missing SCTP_PACKED. Spotted by Irene Ruengeler. 2010-02-13 21:38:15 +00:00
sctp_indata.c Not only stop all timers when entering the SHUTDOWN_SENT state, 2010-11-07 14:39:40 +00:00
sctp_indata.h * Fix some race condition in SACK/NR-SACK processing. 2010-04-03 15:40:14 +00:00
sctp_input.c Not only stop all timers when entering the SHUTDOWN_SENT state, 2010-11-07 14:39:40 +00:00
sctp_input.h
sctp_lock_bsd.h 1) Optimize the cleanup and don't always depend on 2010-06-06 20:34:17 +00:00
sctp_os_bsd.h Fix typos. 2010-11-09 10:59:09 +00:00
sctp_os.h
sctp_output.c Fix the SACK/NR-SACK generation code. 2010-11-11 18:41:03 +00:00
sctp_output.h Delay the assignment of a path for DATA chunk until they hit 2010-09-15 23:10:45 +00:00
sctp_pcb.c Improve the scalability by using the local and remote port when 2010-11-09 16:18:32 +00:00
sctp_pcb.h Fix the switching on/off of CMT using sysctl and socket option. 2010-08-28 17:59:51 +00:00
sctp_peeloff.c Fix the switching on/off of CMT using sysctl and socket option. 2010-08-28 17:59:51 +00:00
sctp_peeloff.h
sctp_structs.h PR SCTP Bugs. Basically a full sized frame of 2010-07-29 11:37:04 +00:00
sctp_sysctl.c Make the initial congestion window configurable via sysctl. 2010-09-17 18:53:07 +00:00
sctp_sysctl.h Allow the initial congestion window to be configure 2010-09-19 11:57:21 +00:00
sctp_timer.c Do not have the MTU table twice in the code. Therefore move the 2010-11-07 18:50:35 +00:00
sctp_timer.h Remove two functions which are not used. 2010-11-07 17:50:56 +00:00
sctp_uio.h Fix typos. 2010-11-09 10:59:09 +00:00
sctp_usrreq.c Do not have the MTU table twice in the code. Therefore move the 2010-11-07 18:50:35 +00:00
sctp_var.h * Fix some race condition in SACK/NR-SACK processing. 2010-04-03 15:40:14 +00:00
sctp.h Fix typos. 2010-11-09 10:59:09 +00:00
sctputil.c Fix a bug which resulted in kevent() reporting an event twice on 2010-11-09 12:00:39 +00:00
sctputil.h Do not have the MTU table twice in the code. Therefore move the 2010-11-07 18:50:35 +00:00
siftr.c Standardise all Swinburne related copyright/licence statements throughout the 2010-11-12 00:44:18 +00:00
tcp_debug.c Remove the "The option TCPDEBUG requires option INET." requirement. 2009-06-10 10:39:41 +00:00
tcp_debug.h Use uint32_t instead of n_long and n_time, and uint16_t instead of n_short. 2009-02-13 15:14:43 +00:00
tcp_fsm.h
tcp_hostcache.c MFP4: @176978-176982, 176984, 176990-176994, 177441 2010-04-29 11:52:42 +00:00
tcp_hostcache.h
tcp_input.c This commit marks the first formal contribution of the "Five New TCP Congestion 2010-11-12 06:41:55 +00:00
tcp_lro.c
tcp_lro.h
tcp_offload.c Merge the remainder of kern_vimage.c and vimage.h into vnet.c and 2009-08-01 19:26:27 +00:00
tcp_offload.h Replace struct tcpopt with a proxy toeopt struct in the TOE driver interface to 2009-07-13 11:51:02 +00:00
tcp_output.c This commit marks the first formal contribution of the "Five New TCP Congestion 2010-11-12 06:41:55 +00:00
tcp_reass.c Retire the system-wide, per-reassembly queue segment limit. The mechanism is far 2010-10-16 07:12:39 +00:00
tcp_sack.c This commit marks the first formal contribution of the "Five New TCP Congestion 2010-11-12 06:41:55 +00:00
tcp_seq.h
tcp_subr.c This commit marks the first formal contribution of the "Five New TCP Congestion 2010-11-12 06:41:55 +00:00
tcp_syncache.c Initializing the new error variable to zero in syncache_socket() 2010-08-15 13:07:08 +00:00
tcp_syncache.h Replace struct tcpopt with a proxy toeopt struct in the TOE driver interface to 2009-07-13 11:51:02 +00:00
tcp_timer.c This commit marks the first formal contribution of the "Five New TCP Congestion 2010-11-12 06:41:55 +00:00
tcp_timer.h Remove the TCP inflight bandwidth limiter as announced in r211315 2010-09-16 21:06:45 +00:00
tcp_timewait.c MFP4: @176978-176982, 176984, 176990-176994, 177441 2010-04-29 11:52:42 +00:00
tcp_usrreq.c This commit marks the first formal contribution of the "Five New TCP Congestion 2010-11-12 06:41:55 +00:00
tcp_var.h This commit marks the first formal contribution of the "Five New TCP Congestion 2010-11-12 06:41:55 +00:00
tcp.h Remove the TCP inflight bandwidth limiter as announced in r211315 2010-09-16 21:06:45 +00:00
tcpip.h
toedev.h
udp_usrreq.c Ensure a minimum "slop" of 10 extra pcb structures when providing a 2010-08-17 16:41:16 +00:00
udp_var.h MFP4: @176978-176982, 176984, 176990-176994, 177441 2010-04-29 11:52:42 +00:00
udp.h Added support for NAT-Traversal (RFC 3948) in IPsec stack. 2009-06-12 15:44:35 +00:00