freebsd-dev/sys/netinet
Don Lewis 91336b403a Import Dummynet AQM version 0.2.1 (CoDel, FQ-CoDel, PIE and FQ-PIE).
Centre for Advanced Internet Architectures

Implementing AQM in FreeBSD

* Overview <http://caia.swin.edu.au/freebsd/aqm/index.html>

* Articles, Papers and Presentations
  <http://caia.swin.edu.au/freebsd/aqm/papers.html>

* Patches and Tools <http://caia.swin.edu.au/freebsd/aqm/downloads.html>

Overview

Recent years have seen a resurgence of interest in better managing
the depth of bottleneck queues in routers, switches and other places
that get congested. Solutions include transport protocol enhancements
at the end-hosts (such as delay-based or hybrid congestion control
schemes) and active queue management (AQM) schemes applied within
bottleneck queues.

The notion of AQM has been around since at least the late 1990s
(e.g. RFC 2309). In recent years the proliferation of oversized
buffers in all sorts of network devices (aka bufferbloat) has
stimulated keen community interest in four new AQM schemes -- CoDel,
FQ-CoDel, PIE and FQ-PIE.

The IETF AQM working group is looking to document these schemes,
and independent implementations are a corner-stone of the IETF's
process for confirming the clarity of publicly available protocol
descriptions. While significant development work on all three schemes
has occured in the Linux kernel, there is very little in FreeBSD.

Project Goals

This project began in late 2015, and aims to design and implement
functionally-correct versions of CoDel, FQ-CoDel, PIE and FQ_PIE
in FreeBSD (with code BSD-licensed as much as practical). We have
chosen to do this as extensions to FreeBSD's ipfw/dummynet firewall
and traffic shaper. Implementation of these AQM schemes in FreeBSD
will:
* Demonstrate whether the publicly available documentation is
  sufficient to enable independent, functionally equivalent implementations

* Provide a broader suite of AQM options for sections the networking
  community that rely on FreeBSD platforms

Program Members:

* Rasool Al Saadi (developer)

* Grenville Armitage (project lead)

Acknowledgements:

This project has been made possible in part by a gift from the
Comcast Innovation Fund.

Submitted by:	Rasool Al-Saadi <ralsaadi@swin.edu.au>
X-No objection:	core
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D6388
2016-05-26 21:40:13 +00:00
..
cc Add an option to use rfc6675 based pipe/inflight bytes calculation in htcp. 2016-05-09 19:19:03 +00:00
khelp
libalias sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
tcp_stacks This small change adopts the excellent suggestion for using named 2016-05-17 09:53:22 +00:00
accf_data.c
accf_dns.c In preparation of merging projects/sendfile, transform bare access to 2014-11-12 09:57:15 +00:00
accf_http.c In preparation of merging projects/sendfile, transform bare access to 2014-11-12 09:57:15 +00:00
icmp6.h Implement Enhanced DAD algorithm for IPv6 described in 2015-03-02 17:30:26 +00:00
icmp_var.h
if_atm.c
if_atm.h
if_ether.c netinet: for pointers replace 0 with NULL. 2016-04-15 15:46:41 +00:00
if_ether.h Implement interface link header precomputation API. 2015-12-31 05:03:27 +00:00
igmp_var.h - Rename 'struct igmp_ifinfo' into 'struct igmp_ifsoftc', since it really 2015-02-19 22:35:23 +00:00
igmp.c sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
igmp.h
in_cksum.c
in_debug.c
in_fib.c MFP r287070,r287073: split radix implementation and route table structure. 2016-01-25 06:33:15 +00:00
in_fib.h Merge helper fib* functions used for basic lookups. 2015-12-08 10:50:03 +00:00
in_gif.c Merge helper fib* functions used for basic lookups. 2015-12-08 10:50:03 +00:00
in_kdtrace.c Fix style issues around existing SDT probes. 2015-12-16 23:39:27 +00:00
in_kdtrace.h Fix style issues around existing SDT probes. 2015-12-16 23:39:27 +00:00
in_mcast.c sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
in_pcb.c FreeBSD previously provided route caching for TCP (and UDP). Re-add 2016-03-24 07:54:56 +00:00
in_pcb.h sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
in_pcbgroup.c Unbreak the RSS/PCBGROUp build. 2016-03-31 00:53:23 +00:00
in_proto.c kernel: use our nitems() macro when it is available through param.h. 2016-04-19 23:48:27 +00:00
in_rmx.c Code duplication but rib_head is special. Not found an easy way to go 2016-02-03 21:56:51 +00:00
in_rss.c Rename rss_soft_m2cpuid() -> rss_soft_m2cpuid_v4() in preparation for 2015-08-29 06:58:30 +00:00
in_rss.h Rename rss_soft_m2cpuid() -> rss_soft_m2cpuid_v4() in preparation for 2015-08-29 06:58:30 +00:00
in_systm.h Where appropriate, use the modern terms for the one true time base 2014-12-21 05:07:11 +00:00
in_var.h MFP r287070,r287073: split radix implementation and route table structure. 2016-01-25 06:33:15 +00:00
in.c in_lltable_alloc and in6 copy: Don't leak LLE in error path 2016-04-26 23:13:48 +00:00
in.h Provide functions to determine presence of a given address 2015-04-17 11:57:06 +00:00
ip6.h
ip_carp.c Revert r292275 & r292379 2015-12-17 14:41:30 +00:00
ip_carp.h
ip_divert.c ipdivert: Remove unnecessary and incorrectly typed variable. 2016-04-28 02:46:08 +00:00
ip_divert.h
ip_dummynet.h Import Dummynet AQM version 0.2.1 (CoDel, FQ-CoDel, PIE and FQ-PIE). 2016-05-26 21:40:13 +00:00
ip_ecn.c
ip_ecn.h Remove unneded #include "opt_inet.h". 2015-07-31 09:02:28 +00:00
ip_encap.c Remove sys/eventhandler.h from net/route.h 2016-01-09 09:34:39 +00:00
ip_encap.h
ip_fastfwd.c sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
ip_fw.h Make named objects set-aware. Now it is possible to create named 2016-05-17 07:47:23 +00:00
ip_gre.c o Use new function ip_fillid() in all places throughout the kernel, 2015-04-01 22:26:39 +00:00
ip_icmp.c When sending in ICMP response to an SCTP packet, 2016-05-25 22:16:11 +00:00
ip_icmp.h Add support for handling ICMP and ICMP6 messages sent in response 2016-04-29 20:22:01 +00:00
ip_id.c Provide a comment explaining issues with the counter(9) trick, so that 2015-04-02 14:22:59 +00:00
ip_input.c Do not overwrite the dchg variable. 2016-04-14 18:57:30 +00:00
ip_ipsec.c Set the proper direction to check for policies in this one case. 2015-10-29 21:26:32 +00:00
ip_ipsec.h Remove flag/flags argument from the following functions: 2014-12-11 18:35:34 +00:00
ip_mroute.c netinet: for pointers replace 0 with NULL. 2016-04-15 15:46:41 +00:00
ip_mroute.h
ip_options.c sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
ip_options.h
ip_output.c netinet: for pointers replace 0 with NULL. 2016-04-15 15:46:41 +00:00
ip_reass.c Fix RSS build - netisr input / NETISR_IP_DIRECT is used here. 2015-04-15 00:57:21 +00:00
ip_var.h MFp4 @180887: 2016-01-22 18:22:03 +00:00
ip.h sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
pim_var.h
pim.h
raw_ip.c Send an ICMP packet indicating destination unreachable/protocol 2016-05-25 15:54:21 +00:00
sctp_asconf.c Add the UDP encaps port as a parameter to sctp_add_remote_addr(). 2016-04-30 14:25:00 +00:00
sctp_asconf.h
sctp_auth.c Use __func__ instead of __FUNCTION__. 2015-10-19 11:17:54 +00:00
sctp_auth.h
sctp_bsd_addr.c netinet/sctp*: minor spelling fixes in comments. 2016-05-02 20:56:11 +00:00
sctp_bsd_addr.h
sctp_cc_functions.c netinet/sctp*: minor spelling fixes in comments. 2016-05-02 20:56:11 +00:00
sctp_constants.h netinet/sctp*: minor spelling fixes in comments. 2016-05-02 20:56:11 +00:00
sctp_crc32.c
sctp_crc32.h
sctp_dtrace_declare.h
sctp_dtrace_define.h This is work done by Michael Tuexen and myself at the IETF. This 2016-04-07 09:10:34 +00:00
sctp_header.h Don't use anonymous unions. 2016-04-18 06:38:53 +00:00
sctp_indata.c Fix a locking bug which only shows up on Mac OS X. 2016-05-14 13:44:49 +00:00
sctp_indata.h A couple of minor changes that I missed that Michael had done, most noted 2016-04-07 09:34:41 +00:00
sctp_input.c netinet/sctp*: minor spelling fixes in comments. 2016-05-02 20:56:11 +00:00
sctp_input.h Add FIB support for SCTP. 2015-06-17 15:20:14 +00:00
sctp_lock_bsd.h netinet/sctp*: minor spelling fixes in comments. 2016-05-02 20:56:11 +00:00
sctp_os_bsd.h A couple of minor changes that I missed that Michael had done, most noted 2016-04-07 09:34:41 +00:00
sctp_os.h
sctp_output.c netinet/sctp*: minor spelling fixes in comments. 2016-05-02 20:56:11 +00:00
sctp_output.h Don't allow a remote encapsulation port change during the 2016-01-30 12:58:38 +00:00
sctp_pcb.c netinet/sctp*: minor spelling fixes in comments. 2016-05-02 20:56:11 +00:00
sctp_pcb.h netinet/sctp*: minor spelling fixes in comments. 2016-05-02 20:56:11 +00:00
sctp_peeloff.c Add a SCTP socket option to limit the cwnd for each path. 2015-03-10 19:49:25 +00:00
sctp_peeloff.h
sctp_ss_functions.c Add const to several constants. Thanks to Nicholas Nethercote for 2016-03-23 13:28:04 +00:00
sctp_structs.h Fix a bug introduced by the implementation of I-DATA support. 2016-05-13 09:11:41 +00:00
sctp_syscalls.c netinet: for pointers replace 0 with NULL. 2016-04-15 15:46:41 +00:00
sctp_sysctl.c Retire net.inet.sctp.strict_sacks and net.inet.sctp.strict_data_order 2016-05-12 16:34:59 +00:00
sctp_sysctl.h Retire net.inet.sctp.strict_sacks and net.inet.sctp.strict_data_order 2016-05-12 16:34:59 +00:00
sctp_timer.c Cleanup a comment. 2016-05-09 16:35:05 +00:00
sctp_timer.h Code cleanup which will silence a warning in PVS / D5245. 2016-02-17 18:04:22 +00:00
sctp_uio.h Make struct sctp_paddrthlds compliant to RFC 7829. 2016-05-26 11:38:26 +00:00
sctp_usrreq.c Make struct sctp_paddrthlds compliant to RFC 7829. 2016-05-26 11:38:26 +00:00
sctp_var.h Fix the ICMP6 handling for SCTP. 2016-04-16 21:34:49 +00:00
sctp.h This is work done by Michael Tuexen and myself at the IETF. This 2016-04-07 09:10:34 +00:00
sctputil.c Fix a bug introduced by the implementation of I-DATA support. 2016-05-13 09:11:41 +00:00
sctputil.h Remove a function, which is not used anymore. 2016-04-23 09:15:58 +00:00
siftr.c Use SI_SUB_LAST instead of SI_SUB_SMP as the "catch-all" subsystem. 2016-03-11 23:18:06 +00:00
tcp_debug.c
tcp_debug.h
tcp_fastopen.c Mfp: r296259 2016-04-09 10:58:08 +00:00
tcp_fastopen.h Implementation of server-side TCP Fast Open (TFO) [RFC7413]. 2015-12-24 19:09:48 +00:00
tcp_fsm.h
tcp_hostcache.c Clean up unused bandwidth entry in the TCP hostcache. 2015-12-11 06:22:58 +00:00
tcp_hostcache.h Clean up unused bandwidth entry in the TCP hostcache. 2015-12-11 06:22:58 +00:00
tcp_input.c Change net.inet.tcp.ecn.enable sysctl mib from a binary off/on 2016-05-19 22:20:35 +00:00
tcp_lro.c Use optimised complexity safe sorting routine instead of the kernel's 2016-05-26 11:10:31 +00:00
tcp_lro.h Use optimised complexity safe sorting routine instead of the kernel's 2016-05-26 11:10:31 +00:00
tcp_offload.c Augment struct tcpstat with tcps_states[], which is used for book-keeping 2016-01-27 00:45:46 +00:00
tcp_offload.h
tcp_output.c Change net.inet.tcp.ecn.enable sysctl mib from a binary off/on 2016-05-19 22:20:35 +00:00
tcp_pcap.c Garbage collect unused arguments of m_init(). 2016-02-10 18:54:18 +00:00
tcp_pcap.h There are times when it would be really nice to have a record of the last few 2015-10-14 00:35:37 +00:00
tcp_reass.c Remove sys/eventhandler.h from net/route.h 2016-01-09 09:34:39 +00:00
tcp_sack.c sys/net*: minor spelling fixes. 2016-05-03 18:05:43 +00:00
tcp_seq.h
tcp_subr.c Don't reuse the source mbuf in tcp_respond() if it is not writable. 2016-05-26 18:35:37 +00:00
tcp_syncache.c tcp/syncache: Add comment for syncache_respond 2016-05-10 04:59:04 +00:00
tcp_syncache.h Grab a snap amount of TCP connections in syncache from tcpstat. 2016-01-27 00:48:05 +00:00
tcp_timer.c This small change adopts the excellent suggestion for using named 2016-05-17 09:53:22 +00:00
tcp_timer.h This cleans up the timers code in TCP to start using the new 2016-04-28 13:27:12 +00:00
tcp_timewait.c Redo r294869. The array of counters for TCP states doesn't belong to 2016-03-15 00:15:10 +00:00
tcp_usrreq.c tcp_usrreq: Free allocated buffer in relock case 2016-04-26 23:02:18 +00:00
tcp_var.h Tiny refactor of r294869/r296881: use defines to mask the VNET() macro. 2016-05-17 23:14:17 +00:00
tcp.h Provide new socket option TCP_CCALGOOPT, which stands for TCP congestion 2016-01-22 02:07:48 +00:00
tcpip.h
toecore.c These files were getting sys/malloc.h and vm/uma.h with header pollution 2016-02-01 17:41:21 +00:00
toecore.h * Convert TOE framework to use new routing api. 2014-10-25 18:25:00 +00:00
udp_usrreq.c Complete the UDP tunneling of ICMP msgs to those protocols 2016-04-28 15:53:10 +00:00
udp_var.h Complete the UDP tunneling of ICMP msgs to those protocols 2016-04-28 15:53:10 +00:00
udp.h
udplite.h