NodeJS cli for tc-wrapper (a library for traffic control on linux)
npm install tccliSimple command line interpreter (cli) for tc-wrapper library.
This module is installed via npm:
```
npm install -g tccli
* 1.0.8: Removed network parameter and included srcNetwork & dstNetwork paramenters
sh
Usage: tccli [options] Options:
-h, --help output usage information
-V, --version output the version number
-d --direction [direction] Rule traffic direction. Allowed outgoing or incoming.
--srcNetwork [network] Network source mask
--dstNetwork [network] Network destination mask
--srcPort [port] Destination port.
--dstPort [port] Source port.
-p --protocol [protocol] Protocol of rules. Only supported IPv4 right now.
--delay [time] Delay including unit. Ex: 10ms
--jitter [time] Delay variation including unit. Ex: 10ms
--loss [percentage] Packet loss including unit. Ex: 5%
--corrupt [percentage] Packet corruption including unit. Ex: 1%
--rate [bandwidth] Bandwith limit including unit. Ex: 10Mbit
`The cli has three major operations:
`del`, `get` and `set`, for deleting, fetching and setting tc rules.There is also an
`add` command to make easier add more rules to existing ones, this command will running get and set under the hood as tc-wrapper lib dont support add.Allowed targeting
Currently tc-wrapper only supports ip traffic, and can match by network, src and dst ports.
Allowed modificators
* rate: Bandwith limitation, htb algorith will be used, tbf is not supported (yet).
* delay: Round trip time of packets, will be added as additional time.
* jitter: Delay variation normal-distributed.
* loss: Packet loss, in percentage.
* corrupt: Packet corruption, in percentage.
$3
` sh
tccli del eth0
`$3
` sh
tccli get eth0
`Output will be a JSON output similar to this:
`json
{
"outgoing": {
"dstNetwork=0.0.0.0/0,protocol=ip": {
"delay": "1.0ms",
"jitter": "0.5%",
"loss": "3%",
"corrupt": "2%",
"rate": "10Mbit"
}
},
"incoming": {
"srcNetwork=192.168.1.1/32,protocol=ip": {
"loss": "9%",
},
"srcNetwork=192.168.1.1/32,dstNetwork=10.10.10.0/28,srcPort=80,protocol=ip": {
"rate": "100Mbit",
}
}
}`$3
` sh
tccli set eth0 --delay 20ms
`By default all rules will be aplied to outgoing packets, so last command is the same as:
` sh
tccli set eth0 --delay 20ms --direction outgoing
`$3
` sh
tccli set eth0 --rate 20Mbit --direction incoming
`$3
` sh
tccli set eth0 --rate 100Mbit --loss 20%
``set` operation will overwrite any rule of eth0, if you want to keep other rules you have to use `add` command.
$3
` sh
tccli set eth0 --rate 100Mbit --loss 20%
`` sh
tccli add eth0 --dstNetwork 192.168.1.1/32 --corrupt 2%
`` sh
tccli add eth0 --dstNetwork 10.10.10.0/28 --srcPort 80 --corrupt 2% --direction incoming
``sh
tccli get eth0
``json
{
"outgoing": {
"dstNetwork=0.0.0.0/0,protocol=ip": {
"loss": "20%",
"rate": "100Mbit"
},
"dstNetwork=192.168.1.1/32,protocol=ip": {
"corrupt": "2%",
"rate": "32Gbit"
}
},
"incoming": {
"dstNetwork=10.10.10.0/28,srcPort=80,dstPort=80,protocol=ip": {
"corrupt": "2%",
"rate": "32Gbit"
}
}
}`Enable debug of module
This module uses debug for debugging, you can enable debug messages of all modules with:
`
DEBUG=tc-wrapper-cli*
`Keep in mind that tc-wrapper library also uses debug module, so you can enable both cli and lib debug messages using:
`
DEBUG=tc-wrapper*
`Run tests
`
npm test
``In case you never heard about the MIT license.
See the LICENSE file for details.