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).
Easy to apply traffic shaping rules to specific network:
- Outgoing/Incoming packets
- Source/Destination IP-address/network (IPv4/IPv6)
- Source/Destination ports
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
[%]
- Network interfaces: e.g.
eth0
- Docker container (
veth
corresponding with a container)
tcset
is a command to add traffic control rule to a network interface (device).
# tcset eth0 --rate 100Kbps
You can use time units (such as us/sec/min/etc.) to designate delay time.
# tcset eth0 --delay 100ms
# tcset eth0 --delay 10sec
# 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 |
# tcset eth0 --loss 0.1%
# tcset eth0 --rate 100Kbps --delay 100ms --loss 0.1%
# tcset eth0 --delay 100ms --network 192.168.0.10
# tcset eth0 --delay 100ms --network 192.168.0.0/24 --port 80
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 source/destination container.
You need to run a container with --cap-add NET_ADMIN
option
if you 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/
tcdel
is a command to delete traffic shaping rules from a network interface (device).
You can delete all of the shaping rules for the eth0
with -a
/--all
option:
# tcdel eth0 --all
tcshow
is a command to display the current traffic control settings for network interface(s).
# 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"
}
}
}
}
More examples are available at https://tcconfig.rtfd.io/en/latest/pages/usage/index.html
tcconfig
can be installed from PyPI via
pip (Python package manager) command.
sudo pip install tcconfig
ARCHIVE_URL=$(curl -sL https://api.github.com/repos/thombashi/tcconfig/releases/latest | jq -r '.assets[].browser_download_url') &&
TEMP_DEB="$(mktemp)" &&
wget -O "${TEMP_DEB}" "${ARCHIVE_URL}" &&
sudo dpkg -i "${TEMP_DEB}"
rm -f "${TEMP_DEB}"
Python 2.7+ or 3.5+
- mandatory: required for
tc
command: - Ubuntu/Debian:
iproute2
- Fedora/RHEL:
iproute-tc
- Ubuntu/Debian:
- mandatory: required for
- optional: required to when you use
--iptables
option: iptables
- optional: required to when you use
sch_netem
Dependency python packages are automatically installed during
tcconfig
installation via pip.
https://tcconfig.rtfd.io/en/latest/pages/troubleshooting.html