# tccli

> NodeJS cli for tc-wrapper (a library for traffic control on linux)

Latest version **1.0.8** (published 2017-08-08) · MIT license · 0 weekly downloads

## Install

```sh
npm install tccli
pnpm add tccli
yarn add tccli
bun add tccli
```

Provides the command `tccli`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.8 |
| Published | 2017-08-08 |
| First published | 2017-06-02 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | J. Victor Soto |
| Maintainers | jvictorsoto |
| Keywords | tc, traffic control, traffic shapping, netem |

## Links

- npm: https://www.npmjs.com/package/tccli
- Repository: https://github.com/jvictorsoto/tc-wrapper-cli
- Homepage: https://github.com/jvictorsoto/tc-wrapper-cli#readme
- Issues: https://github.com/jvictorsoto/tc-wrapper-cli/issues
- npm.io page: https://npm.io/package/tccli

## Dependencies (4)

- [debug](https://npm.io/package/debug.md) ^2.6.8
- [bluebird](https://npm.io/package/bluebird.md) ^3.5.0
- [commander](https://npm.io/package/commander.md) ^2.9.0
- [tc-wrapper](https://npm.io/package/tc-wrapper.md) ^1.0.7

## Alternatives

- [gamedig](https://npm.io/package/gamedig.md) — 29.3K weekly downloads
- [join-monster](https://npm.io/package/join-monster.md) — 12.8K weekly downloads
- [masked](https://npm.io/package/masked.md) — 5.5K weekly downloads
- [@comunica/actor-query-process-explain-logical](https://npm.io/package/@comunica/actor-query-process-explain-logical.md) — 4.7K weekly downloads
- [@veracity/vui](https://npm.io/package/@veracity/vui.md) — 4.6K weekly downloads

## Recent versions

- 1.0.8 (latest) — 2017-08-08
- 1.0.6 — 2017-06-06
- 1.0.5 — 2017-06-05
- 1.0.4 — 2017-06-05
- 1.0.3 — 2017-06-05
- 1.0.2 — 2017-06-05
- 1.0.1 — 2017-06-05
- 1.0.0 — 2017-06-05
- 0.0.1 — 2017-06-02

## README

# tc-wrapper-cli

Simple command line interpreter (cli) for [tc-wrapper](https://github.com/jvictorsoto/tc-wrapper) library.

## Installation

This module is installed via npm:

```
npm install -g tccli
```

## Changelog

  * 1.0.8: Removed network parameter and included srcNetwork & dstNetwork paramenters

## Usage

### Help
```sh
  Usage: tccli <operation> <iface> [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.


### Clean all rules for *eth0*

``` sh
tccli del eth0
```

### Get all rules for *eth0*

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

```

### Increase packet time by 20 ms

``` 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
```

### Limit incoming bandwith of *eth0* to 20 Mbit

``` sh
tccli set eth0 --rate 20Mbit --direction incoming
```

### Limit output bandwith of *eth0* to 100 Mbit and loss 20% of packets

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


### Apply several rules with *add*

``` 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](https://www.npmjs.com/package/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
```

## License (MIT)

In case you never heard about the [MIT license](http://en.wikipedia.org/wiki/MIT_license).

See the [LICENSE file](LICENSE) for details.

---
_Source: https://npm.io/package/tccli · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
