#traffic #congestion #networking

chokepoint

Generic stream transformer to simulate traffic / network congestion

4 releases (2 breaking)

new 0.3.0 Nov 24, 2024
0.2.0 Nov 22, 2024
0.1.1 Nov 19, 2024
0.1.0 Nov 19, 2024

#354 in Simulation

Download history 407/week @ 2024-11-17

407 downloads per month

MPL-2.0 license

180KB
728 lines

chokepoint

Crates.io License

A library for simulating "traffic shaping" in Rust based on a generic futures::Stream and futures::Sink transformer that can be used to modify the delivery of items. The main purpose is to simulate various network conditions such as:

  • Delay (using a user provided function)
  • Packet loss
  • Packet reordering
  • Packet corruption
  • Packet duplication
  • Bandwidth limiting

See TrafficShaper for more information and an example.

chokepoint command line tool

At ./cli you can find a simple cli tool for interactive exploration. Using a tool like graph-cli you can visualize the output. Here is an example to showcase delay, jitter and bandwidth:

Example

$ chokepoint --help
Usage: chokepoint [OPTIONS] <MODE>

Arguments:
  <MODE>  Simulate a sink or a stream [possible values: stream, sink]

Options:
  -v, --verbose

  -n <N>
          Number of packets to send [default: 250]
  -o, --output <OUTPUT>
          Output file (csv) with packet timing information
  -r, --packet-rate <PACKET_RATE>
          Send rate in packets per second
  -s, --packet-size <PACKET_SIZE>
          Packet size in bytes [default: 1B]
      --ordering <ORDERING>
          [default: ordered]
  -l, --bandwidth-limit <BANDWIDTH_LIMIT>
          Bandwidth limit
      --mean <MEAN>
          Mean latency in ms [default: 0.0]
      --stddev <STDDEV>
          Standard deviation of latency in ms (aka jitter) [default: 0.0]
  -h, --help
          Print help

Dependencies

~5–11MB
~116K SLoC