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 Test CI status Build CI status

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)

docs/gif/tcset_example.gif

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

https://tcconfig.rtfd.io/

Troubleshooting

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

Docker image

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

Sponsors

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

Become a sponsor

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.30.1.tar.gz (193.2 kB view details)

Uploaded Source

Built Distribution

tcconfig-0.30.1-py3-none-any.whl (54.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tcconfig-0.30.1.tar.gz
  • Upload date:
  • Size: 193.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for tcconfig-0.30.1.tar.gz
Algorithm Hash digest
SHA256 71026a22d2be180ff7e251b860e448029d1dd3f5a3be1a11b1a19b4ccb4bbf60
MD5 ec38f1cc739a5755da353937ffb60bbb
BLAKE2b-256 73a8aefd85f036b59257e9f5028358c3dfdb744333e05c4368b701d42f363358

See more details on using hashes here.

Provenance

The following attestation bundles were made for tcconfig-0.30.1.tar.gz:

Publisher: build_and_release.yml on thombashi/tcconfig

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tcconfig-0.30.1-py3-none-any.whl.

File metadata

  • Download URL: tcconfig-0.30.1-py3-none-any.whl
  • Upload date:
  • Size: 54.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for tcconfig-0.30.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a2a2f127ce075c691760503561be4d06eb92f2d4e92ec8dd393cf3e30cc15d68
MD5 b5c2265e0e02b54d73c3a63dca862b48
BLAKE2b-256 7acb8e925d72239397520f8f94be19c152fd8b6bcf398ae2469fd5d1c2af53fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for tcconfig-0.30.1-py3-none-any.whl:

Publisher: build_and_release.yml on thombashi/tcconfig

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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