Bering-uClibc 4.x - User Guide - Advanced Topics - Setting Up a Network Emulator
|Advanced Topics - Setting Up a Network Emulator|
|Prev||Bering-uClibc 4.x - User Guide||Next|
Following the upgrade to version 2.6 of the Linux kernel, Bering-uClibc 4.x now includes the "netem" kernel Module which can be used in a test environment to simulate the effect of wide-area network characteristics such as high latency and packet loss.
In summary, netem is an advanced network traffic Queueing Discipline (qdisc) for the Linux kernel, just like pfifo_fast or tbf. Like the other qdiscs it acts on packets sent by a particular network interface, in this case providing options to:
- Delay packets, to simulate network latency
- In addition to a simple fixed delay there are advanced options to apply a variable delay to better emulate real-world network conditions
- Drop packets, to simulate packet loss
- Duplicate and re-order packets
- Corrupt packets
While netem itself does not apply rate control (e.g. to simulate a low-bandwidth link) it can be used in conjunction with other qdiscs which do that.
Since netem is implemented as a qdisc, a LEAF machine with netem installed can be deployed in a variety of different network topologies. For example:
- As a transparent Bridge, connected between a client PC and its upstream network connection, where it has the effect of emulating a Wide Area Network link between the client PC and the rest of the network
- As part of a Router / Firewall installation
This guide uses the Bridge deployment model as an example, using netem along with tbf to emulate a high-latency and low-bandwidth WAN link.
There is currently (as of Bering-uClibc 4.0-beta2, 2011-01-31) no specific Package for netem, although consideration is being given to creating one which includes the "distribution"
.dist data files from the
iproute2 source Package.
Use of netem does however require installation of the
tc.lrp Package, for the tc command, and deployment of a Bridge requires
Use of netem requires that kernel module file
sch_netem.ko is available in directory
This file should be extracted from
modules.tgz (its full path within that tar archive is
To be continued...