|
menu
Luigi Rizzo's home
FreeBSD work
The QFQ scheduler
The NetOS project
The OneLab2 project
|
Dummynet
This is the main Dummynet page, where you can find recent
news on the tool, tutorial material,
source code,
and precompiled modules and bootable disk images.
Description
dummynet is a tool originally designed for testing
networking protocols, and since then used for a variety
of applications including bandwidth management.
It simulates/enforces queue and bandwidth limitations, delays,
packet losses, and multipath effects. It also implements
a variant of Weighted Fair Queueing called WF2Q+. It can be used on user's
workstations, or on machines acting as routers or bridges.
As of Feb.2010 we have released the third major version of
dummynet, which now runs on all main platforms: FreeBSD,
Mac OS X as part of the native distributions,
and you can find Linux, OpenWRT and Windows versions here.
To get the idea of what you can do with dummynet, either
using it on your workstation, or putting a PC with two ethernet
cards between your network and the outside world,
here are a few examples :
- limit the total incoming TCP traffic to 2Mbit/s,
and UDP to 300Kbit/s
ipfw add pipe 2 in proto tcp
ipfw add pipe 3 in proto udp
ipfw pipe 2 config bw 2Mbit/s
ipfw pipe 3 config bw 300Kbit/s
- limit incoming traffic to 300Kbit/s
for each host on network 10.1.2.0/24.
ipfw add pipe 4 src-ip 10.1.2.0/24 in
ipfw pipe 4 config bw 300Kbit/s queue 20 mask dst-ip 0x000000ff
-
simulate an ADSL link to the moon:
ipfw add pipe 3 out
ipfw add pipe 4 in
ipfw pipe 3 config bw 128Kbit/s queue 10 delay 1000ms
ipfw pipe 4 config bw 640Kbit/s queue 30 delay 1000ms
dummynet works by intercepting packets (selected by ipfw
rules - ipfw is one of the FreeBSD firewalls) in their way through
the protocol stack, and passing them through one or more objects
called queues and pipes, which simulate the effects of bandwidth
limitations, propagation delays, bounded-size queues, packet losses,
multipath. Pipes are fixed-bandwidth channels. Queues represent
instead queues of packets, associated with a weight, which share
the bandwidth of the pipe they are connected to proportionally
to their weight.
Source code, modules and binary images
- Dummynet is standard on FreeBSD and Mac OS X, so if you have one
of these systems you just need to read the manual page with
man ipfw and load the appropriate kernel modules,
ipfw.ko and dummynet.ko
- picobsd: you can try Picobsd images (standalone
freebsd systems that run from a flash card or CDROM image). Here
we have a compressed disk image
or an ISO image. The password is "setup"
as in default Picobsd systems
Current versions (20100322)
Below you can find beta version of the new release of dummynet, which
includes support for multiple packet schedulers and has a much
more improved internal architecture. Much of this work has been supported
by the European project Onelab2
Source code is updated more frequently than binary versions.
Documentation and papers
- An emulation tool for PlanetLab, by M.Carbone and L.Rizzo, Mar 2010
This paper describes how we added emulation to PlanetLab;
- Dummynet revisited, by M.Carbone and L.Rizzo,
SIGCOMM CCR, Vol. 40, No. 2, April 2010
This paper gives an overview of the current version of dummynet,
with detailed performance analysys;
- Adding emulation to Planetlab nodes,
by M.Carbone and L.Rizzo, Co-Next Student Workshop '09, Rome, Italy, December 01 - 01, 2009
This short paper describes how dummynet is used to
add emulation to PlanetLab nodes.
- The original dummynet page
Revision history:
- 20100319: Minor cleanup of the source code, including hooks
to expire empty queues and schedulers.
- 20100218: Beta release of version 3 of dummynet, with
support for Windows/Linux/OpenWRT, loadable schedulers,
and revised internal architecture;
- 20091214: many many updates including support for tables, revised documentation,
uid/gid matching, xid matching for vserver-enabled kernels;
- 20090724: fix for a memory leak when using pipes in the linux version; remove a compiler warning
when compiling for 64-bit machines;
- 20090622: initial release for linux
|