DCCP

DCCP (Datagram Congestion Control Protocol) is designed to give congestion control over unreliable delivery. In a sense it is UDP with sessions and congestion control or TCP without reliability. There is much more to it than this of course.

The official site of DCCP could be considered to be this page - http://www.read.cs.ucla.edu/dccp/

The official page for the DCCP implementation in Linux is - http://linux-net.osdl.org/index.php/DCCP

Waikato Linux Users Group (WLUG) has a useful page on DCCP - http://www.wlug.org.nz/DCCP

To see my commits to the kernel see here, here or here.

Tips for use

Download 2.6.20 and if using CCID3 in particular use my set of working patches below on top (use stgit to help you manage them). These patches are aiming to get merged in the near future. These patches are roughly equivalent to Gerrit Renker's set and you can use them if you prefer. I think his might be needed if you use Linus' git tree as there has been quite a lot of white space tidyup which will probably break my patch set.

Here is a script I use when testing with CCID3:
sudo modprobe dccp
sudo modprobe dccp_ccid3
sudo sysctl -w net.dccp.default.seq_window=10000
sudo sysctl -w net.dccp.default.send_ackvec=0
sudo sysctl -w net.dccp.default.rx_ccid=3
sudo sysctl -w net.dccp.default.tx_ccid=3

Here is a script I use when testing with CCID2:
sudo modprobe dccp
sudo modprobe dccp_ccid2
sudo sysctl -w net.dccp.default.seq_window=10000
sudo sysctl -w net.dccp.default.send_ackvec=1
sudo sysctl -w net.dccp.default.rx_ccid=2
sudo sysctl -w net.dccp.default.tx_ccid=2

And here is how to alter queue length for CCID3:
sudo sysctl -w net.dccp.default.tx_qlen=$1

Typically I use a queue length of 5 if emulating UDP performance and 16K/packet size if emulating TCP (this is default buffer size on my machine using 2.6.20).

Here is how I turn loss with delay on:
/sbin/tc qdisc add dev lan1 root netem delay $1ms loss $3%
/sbin/tc qdisc add dev lan0 root netem delay $1ms loss $2%

and off:
/sbin/tc qdisc del dev lan1 root netem
/sbin/tc qdisc del dev lan0 root netem

And rate control with delay on:
/sbin/tc qdisc add dev lan0 root handle 1:0 netem delay $1ms
/sbin/tc qdisc add dev lan1 root handle 1:0 netem delay $1ms
/sbin/tc qdisc add dev lan0 parent 1:1 handle 10: tbf rate $2kbit buffer 10000 limit 30000

and off:
/sbin/tc qdisc del dev lan0 parent 1:1
/sbin/tc qdisc del dev lan0 root
/sbin/tc qdisc del dev lan1 root

Linux DCCP Patches

Here are my patches for DCCP for 2.6.20 that I use for my research. Remember not to apply patch 30 in particular as this will make things behave very differently.
Here are my working patches for DCCP for DaveM's/Acme's 2.6.22 tree.
Here are my working patches for DCCP for Gerrit's tree as of 2.6.24 or later.

NB. These patches are more for my reference now as the mainline kernel has moved on quite a bit and so has Gerrit's.

Current DCCP development/testing

Currently Gerrit Renker is leading DCCP development, particularly for CCID3 but also other areas also. He has a web page here and a git tree at git://eden-feed.erg.abdn.ac.uk/dccp_exp.git

There is a DCCP testing page on the official Linux networking Wiki which explains how to use Gerrit's and general testing.

Misc software/links

ttcp for DCCP (from Arnaldo)
ttcp for DCCP (that I've altered slightly)
Software page (with iperf for DCCP and TCP congestion on)
A spreadsheet to calculate TFRC/CCID3 throughput - recommend below though instead.
Perry's throughput calculator - set MSS to match the parameter s in DCCP for CCID3.
The file used to create the TFRC lookup tables in the Linux code base.
Here is some sample code for DCCP. (ugly but working)
Here is a list of patches I have been involved in for the Linux kernel.

See also my slides page and my papers page.

Last updated: 2nd December 2007

Back to home page