4.1. Set traffic control (tcset command)

tcset is a command to add traffic control rule to a network interface (device).

You can delete rule(s) from a network interface by Delete traffic control (tcdel command).

4.1.1. tcset command help

usage: tcset [-h] [–version] [–tc-command | –tc-script] [–debug | –quiet]
(–device DEVICE | -f CONFIG_FILE) [–overwrite | –add] [–direction {outgoing,incoming}] [–rate BANDWIDTH_RATE] [–delay NETWORK_LATENCY] [–delay-distro LATENCY_DISTRO_MS] [–loss PACKET_LOSS_RATE] [–corrupt CORRUPTION_RATE] [–network NETWORK] [–port PORT] [–ipv6] [–shaping-algo {tbf,htb}] [–iptables] [–src-network SRC_NETWORK]
optional arguments:
-h, --help show this help message and exit
--version show program’s version number and exit
--tc-command display tc commands to be executed and exit. commands are not actually executed.
--tc-script generate a script file that described tc commands to be executed by this command.
--debug for debug print.
--quiet suppress execution log messages.
--device DEVICE
 network device name (e.g. eth0)
-f CONFIG_FILE, --config-file CONFIG_FILE
 setting traffic controls from a configuration file. output file of the tcshow.
--overwrite overwrite existing settings
--add add a traffic shaping rule in addition to existing rules.
Traffic Control:
–direction {outgoing,incoming}
the direction of network communication that impose traffic control. incoming requires Linux kernel version 2.6.20 or later. (default = outgoing)
--rate BANDWIDTH_RATE
 network bandwidth rate [K|M|G bit per second]
--delay NETWORK_LATENCY
 round trip network delay [ms]. the valid range is 0 to 3600000. (default=0)
--delay-distro LATENCY_DISTRO_MS
 distribution of network latency becomes X +- Y [ms] (normal distribution). Here X is the value of –delay option and Y is the value of –delay-dist option). network latency distribution will be uniform without this option.
--loss PACKET_LOSS_RATE
 round trip packet loss rate [%]. the valid range is 0 to 100. (default=0)
--corrupt CORRUPTION_RATE
 packet corruption rate [%]. the valid range is 0 to 100. packet corruption means single bit error at a random offset in the packet. (default=0)
--network NETWORK
 target IP address/network to control traffic
--port PORT target port number to control traffic.
--ipv6 apply traffic control to IPv6 packets rather than IPv4.
–shaping-algo {tbf,htb}
shaping algorithm. defaults to htb (recommended).
Routing:
--iptables use iptables to traffic shaping.
--src-network SRC_NETWORK
 set traffic shaping rule to a specific packets that routed from –src-network to –network. This option required to execute with the –iptables option. the shaping rule only affect to outgoing packets (no effect to if you execute with “–direction incoming” option)

4.1.2. Basic usage

Examples of outgoing packet traffic control settings are as follows.

4.1.2.1. e.g. Set a limit on bandwidth up to 100Kbps

# tcset --device eth0 --rate 100k

4.1.2.2. e.g. Set 100ms network latency

# tcset --device eth0 --delay 100

4.1.2.3. e.g. Set 0.1% packet loss

# tcset --device eth0 --loss 0.1

4.1.2.4. e.g. All of the above at once

# tcset --device eth0 --rate 100k --delay 100 --loss 0.1

4.1.2.5. e.g. Specify the IP address of traffic control

# tcset --device eth0 --delay 100 --network 192.168.0.10

4.1.2.6. e.g. Specify the IP network and port of traffic control

# tcset --device eth0 --delay 100 --network 192.168.0.0/24 --port 80

4.1.3. Advanced usage

4.1.3.1. Traffic control of incoming packets

Execute tcset command with --direction incoming option to set incoming traffic control. Other options are the same as in the case of the basic usage.

4.1.3.1.1. e.g. Set traffic control both incoming and outgoing network

# tcset --device eth0 --direction outgoing --rate 200K --network 192.168.0.0/24
# tcset --device eth0 --direction incoming --rate 1M --network 192.168.0.0/24

4.1.3.1.2. Requirements

Incoming packet traffic control requires additional ifb module, Which need to the following conditions:

  • Equal or later than Linux kernel version 2.6.20
  • Equal or later than iproute2 package version 20070313

4.1.3.2. Set latency destribution

Latency setting by --delay will be uniform-distribution. If you using --delay-distro option, latency will be decided by normal distribution.

4.1.3.2.1. e.g. Set 100ms +- 20ms network latency with normal distribution

# tcset --device eth0 --delay 100 --delay-distro 20

4.1.3.3. Multiple traffic shaping rules per interface

You can set multiple shaping rules to a network interface with --add option.

tcset --device eth0 --rate 500M --network 192.168.2.0/24
tcset --device eth0 --rate 100M --network 192.168.0.0/24 --add

4.1.3.4. Using IPv6

IPv6 addresses can be used at tcset/tcshow commands with --ipv6 option.

# tcset --device eth0 --delay 100 --network 2001:db00::0/24 --ipv6
# tcshow --device eth0 --ipv6
{
    "eth0": {
        "outgoing": {
            "network=2001:db00::/24, protocol=ipv6": {
                "delay": "100.0",
                "rate": "1G"
            }
        },
        "incoming": {}
    }
}

4.1.3.5. Get tc commands

You can get tc commands to be executed by tcconfing commands by executing with --tc-command option (displayed commands are not actually executed).

# tcset --device eth0 --delay 10 --tc-command
tc qdisc add dev eth0 root handle 1f87: htb default 1
tc class add dev eth0 parent 1f87: classid 1f87:1 htb rate 1000000kbit
tc class add dev eth0 parent 1f87: classid 1f87:2 htb rate 1000000Kbit ceil 1000000Kbit
tc qdisc add dev eth0 parent 1f87:2 handle 2007: netem delay 10.0ms
tc filter add dev eth0 protocol ip parent 1f87: prio 1 u32 match ip dst 0.0.0.0/0 flowid 1f87:2

4.1.3.6. Generate a tc script file

You can generate a script file that described tc commands to be executed by tcconfig commands with --tc-script option. Created script can execute at other hosts where tcconfig is not installed but tc command is available.

# tcset --device eth0 --delay 10 --tc-script
[INFO] tcconfig: written a tc script to 'tcset_eth0.sh'
# ./tcset_eth0.sh