tcconfig
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 networks:
- 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
[%] - Packet limit count
[COUNT]
- Network interfaces: e.g.
eth0 - Docker container (
vethcorresponding with a container)
tcset is a command to add a traffic control rule to a network interface (device).
# tcset eth0 --rate 100KbpsYou 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.5minYou 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 80Execute 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.
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/
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 --alltcshow 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 tcconfigcurl -sSL https://raw.githubusercontent.com/thombashi/tcconfig/master/scripts/installer.sh | sudo bash- mandatory: required for
tccommand: - Ubuntu/Debian:
iproute2 - Fedora/RHEL:
iproute-tc
- Ubuntu/Debian:
- mandatory: required for
- optional: required when you use the
--iptablesoption: iptables
- optional: required when you use the
sch_netem
https://tcconfig.rtfd.io/en/latest/pages/troubleshooting.html
https://hub.docker.com/r/thombashi/tcconfig/
