Skip to main content

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

Project description

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

PyPI package version Supported Python versions Linux CI status GitHub stars

Traffic control

Setup traffic shaping rules

Easy to apply traffic shaping rules to specific network:

  • 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 [%]

Targets

  • Network interfaces: e.g. eth0

  • Docker container (veth corresponding with a container)

docs/gif/tcset_example.gif

Usage

Set traffic control (tcset command)

tcset is a command to add 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 network latency
# tcset eth0 --delay 100ms
Set 10 seconds 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:

  • m/min/mins/minute/minutes

  • s/sec/secs/second/seconds

  • ms/msec/msecs/millisecond/milliseconds

  • 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 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 source/destination container.

Set traffic control within a docker 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/

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

Install in Debian/Ubuntu from a deb package

  1. wget https://github.com/thombashi/tcconfig/releases/download/<version>/tcconfig_<version>_amd64.deb

  2. dpkg -iv tcconfig_<version>_amd64.deb

Example:
$ wget https://github.com/thombashi/tcconfig/releases/download/v0.19.0/tcconfig_0.19.0_amd64.deb
$ sudo dpkg -i tcconfig_0.19.0_amd64.deb

Dependencies

Python 2.7+ or 3.4+

Linux packages

  • mandatory: required for tc command:
    • Ubuntu/Debian: iproute2

    • Fedora/RHEL: iproute-tc

  • optional: required to when you use --iptables option:
    • iptables

Linux kernel module

  • sch_netem

Python packages

Dependency python packages are automatically installed during tcconfig installation via pip.

Optional Python packages

Test dependencies

Documentation

https://tcconfig.rtfd.io/

Troubleshooting

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

Docker image

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

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tcconfig-0.21.8.tar.gz (55.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tcconfig-0.21.8-py2.py3-none-any.whl (53.7 kB view details)

Uploaded Python 2Python 3

File details

Details for the file tcconfig-0.21.8.tar.gz.

File metadata

  • Download URL: tcconfig-0.21.8.tar.gz
  • Upload date:
  • Size: 55.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.0 CPython/3.7.2

File hashes

Hashes for tcconfig-0.21.8.tar.gz
Algorithm Hash digest
SHA256 98964b8f97302fde2513d20d74cbb1f314771768b6aca80e11b26c8cf9dae3d3
MD5 71896eac05e9525f6803e7d6a9a939d1
BLAKE2b-256 349cc59ff6cb1361d9245911ab716b59bc5f71c46e03ae4616051961438f686e

See more details on using hashes here.

File details

Details for the file tcconfig-0.21.8-py2.py3-none-any.whl.

File metadata

  • Download URL: tcconfig-0.21.8-py2.py3-none-any.whl
  • Upload date:
  • Size: 53.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.0 CPython/3.7.2

File hashes

Hashes for tcconfig-0.21.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 05bfc8af31f2c2d3201a63a1d4ff1b68658d39e85f0ed7c4ab3ef1825ec7ef5a
MD5 00af93b41c71ee56d985849417e237a2
BLAKE2b-256 da3a620fd9273344dce938276af35d181aaec1b34660410a4b98aa54ea95d8bc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page