Skip to content

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).

License

Notifications You must be signed in to change notification settings

thombashi/tcconfig

Repository files navigation

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).

PyPI package version Supported Python versions Test CI status Build CI status

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)

docs/gif/tcset_example.gif

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/

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

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"
            }
        }
    }
}

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
curl -sSL https://raw.githubusercontent.com/thombashi/tcconfig/master/scripts/installer.sh | sudo bash
  • mandatory: required for tc command:
    • Ubuntu/Debian: iproute2
    • Fedora/RHEL: iproute-tc
  • optional: required when you use the --iptables option:
    • iptables
  • sch_netem

https://tcconfig.rtfd.io/

https://tcconfig.rtfd.io/en/latest/pages/troubleshooting.html

https://hub.docker.com/r/thombashi/tcconfig/

ex-sponsor: Charles Becker (chasbecker) ex-sponsor: 時雨堂 (shiguredo) onetime: Dmitry Belyaev (b4tman) onetime: Arturi0 onetime: GitHub (github)

Become a sponsor

About

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).

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published