Summary
tcconfig is a tc command wrapper. Make it easy to set up traffic control of network bandwidth/latency/packet-loss/packet-corruption/etc. to a network-interface/Docker-container(veth).
Traffic control
Setup traffic shaping rules
Easy to apply traffic shaping rules to specific networks:
Outgoing/Incoming packets
Source/Destination IP-address/network (IPv4/IPv6)
Source/Destination ports
Available Parameters
The following parameters can be set to network interfaces:
Network bandwidth rate [G/M/K bps]
Network latency [microseconds/milliseconds/seconds/minutes]
Packet loss rate [%]
Packet corruption rate [%]
Packet duplicate rate [%]
Packet reordering rate [%]
Packet limit count [COUNT]
Targets
Network interfaces: e.g. eth0
Docker container (veth corresponding with a container)
Usage
Set traffic control (tcset command)
tcset is a command to add a traffic control rule to a network interface (device).
e.g. Set a limit on bandwidth up to 100Kbps
# tcset eth0 --rate 100Kbps
e.g. Set network latency
You can use time units (such as us/sec/min/etc.) to designate delay time.
Set 100 milliseconds of network latency
# tcset eth0 --delay 100ms
Set 10 seconds of network latency
# tcset eth0 --delay 10sec
Set 0.5 minutes (30 seconds) network latency
# tcset eth0 --delay 0.5min
You can also use the following time units:
Unit |
Available specifiers (str) |
|---|---|
hours |
h/hour/hours |
minutes |
m/min/mins/minute/minutes |
seconds |
s/sec/secs/second/seconds |
milliseconds |
ms/msec/msecs/millisecond/milliseconds |
microseconds |
us/usec/usecs/microsecond/microseconds |
e.g. Set 0.1% packet loss
# tcset eth0 --loss 0.1%
e.g. All of the above settings at once
# tcset eth0 --rate 100Kbps --delay 100ms --loss 0.1%
e.g. Specify the IP address of the traffic control
# tcset eth0 --delay 100ms --network 192.168.0.10
e.g. Specify the IP network and port of traffic control
# tcset eth0 --delay 100ms --network 192.168.0.0/24 --port 80
Set traffic control to a docker container
Execute tcconfig with --docker option on a Docker host:
# tcset <container name or ID> --docker ...
You could use --src-container/--dst-container options to specify the source/destination container.
Set traffic control within a docker container
You need to run a container with --cap-add NET_ADMIN option if you would like to set a tc rule within a container:
docker run -d --cap-add NET_ADMIN -t <docker image>
A container image that builtin tcconfig can be available at https://hub.docker.com/r/thombashi/tcconfig/
Delete traffic control (tcdel command)
tcdel is a command to delete traffic shaping rules from a network interface (device).
e.g. Delete traffic control of eth0
You can delete all of the shaping rules for the eth0 with -a/--all option:
# tcdel eth0 --all
Display traffic control configurations (tcshow command)
tcshow is a command to display the current traffic control settings for network interface(s).
Example
# tcset eth0 --delay 10ms --delay-distro 2 --loss 0.01% --rate 0.25Mbps --network 192.168.0.10 --port 8080
# tcset eth0 --delay 1ms --loss 0.02% --rate 500Kbps --direction incoming
# tcshow eth0
{
"eth0": {
"outgoing": {
"dst-network=192.168.0.10/32, dst-port=8080, protocol=ip": {
"filter_id": "800::800",
"delay": "10.0ms",
"delay-distro": "2.0ms",
"loss": "0.01%",
"rate": "250Kbps"
}
},
"incoming": {
"protocol=ip": {
"filter_id": "800::800",
"delay": "1.0ms",
"loss": "0.02%",
"rate": "500Kbps"
}
}
}
}
For more information
More examples are available at https://tcconfig.rtfd.io/en/latest/pages/usage/index.html
Installation
Installation: pip
tcconfig can be installed from PyPI via pip (Python package manager) command.
sudo pip install tcconfig
Installation: dpkg (Debian/Ubuntu)
curl -sSL https://raw.githubusercontent.com/thombashi/tcconfig/master/scripts/installer.sh | sudo bash
Dependencies
Linux packages
- mandatory: required for tc command:
Ubuntu/Debian: iproute2
Fedora/RHEL: iproute-tc
- optional: required when you use the --iptables option:
iptables
Linux kernel module
sch_netem
Optional Python packages
Documentation
Troubleshooting
https://tcconfig.rtfd.io/en/latest/pages/troubleshooting.html
Docker image
Sponsors
Metadata
Release files for tcconfig 0.30.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tcconfig-0.30.1.tar.gz | 193.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tcconfig-0.30.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 247.8 kB
Release files / tcconfig-0.30.1.tar.gz
| Download URL | tcconfig-0.30.1.tar.gz |
|---|---|
| Size | 193.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
71026a22d2be180ff7e251b860e448029d1dd3f5a3be1a11b1a19b4ccb4bbf60
|
|
BLAKE2b-256 checksum How to use checksums |
73a8aefd85f036b59257e9f5028358c3dfdb744333e05c4368b701d42f363358
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 8, 2025.
Transparency logRelease files / tcconfig-0.30.1-py3-none-any.whl
| Download URL | tcconfig-0.30.1-py3-none-any.whl |
|---|---|
| Size | 54.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a2a2f127ce075c691760503561be4d06eb92f2d4e92ec8dd393cf3e30cc15d68
|
|
BLAKE2b-256 checksum How to use checksums |
7acb8e925d72239397520f8f94be19c152fd8b6bcf398ae2469fd5d1c2af53fc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 8, 2025.
Transparency log