twamp-rs 0.2.0

Implementation of TWAMP (RFC 5357)
Documentation
# twamp-rs

<div align="center">

[![Crate Badge]][Crate] [![Docs Badge]][Docs] [![License Badge]][License]
</div>

This crate provides an implementation of TWAMP [RFC 5357](https://datatracker.ietf.org/doc/html/rfc5357) along with building blocks for making your own.

## Features
- [x] TWAMP-Control 
- [x] TWAMP-Test
- [x] Control-Client
- [x] Server
- [x] Session-Sender
- [x] Session-Reflector
- [ ] Security Modes
    - [x] Unauthenticated
    - [ ] Authenticated
    - [ ] Encrypted
- [ ] DSCP (QoS)
- [x] TWAMP-full
    - [x] Controller (control-client + session-sender)
    - [x] Responder (server + session-reflector)
- [ ] TWAMP-Light
    - [ ] Controller (server + control-client + session-sender)
    - [ ] Responder (session-reflector)

## Setup and run
```bash
# Run server first.
> cargo run --example responder -- --port 4000 # defaults to 862 which needs permissions

# Run client
> cargo run --example controller -- \
--responder-addr 127.0.0.1 \
--responder-port 4000 \
--controller-addr 127.0.0.1 \
--responder-reflect-port 4001 \
--number-of-test-packets 100 \
--timeout 10

# Test with release 
./run_responder
./run_client

# Tests
> cargo test
> cargo test --doc

# Open docs in browser
> cargo doc --no-deps --all-features --open
```

## Example run

Tested on localhost with increased udp buffer.

```bash
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.rmem_default=16777216
```

```bash
❯ ./run_controller
    Finished `release` profile [optimized] target(s) in 0.03s
2025-01-31T07:29:30.601345Z  INFO controller: Controller initialized
2025-01-31T07:29:30.601512Z  INFO control_client: Reading ServerGreeting
2025-01-31T07:29:30.601572Z  INFO control_client: Done reading ServerGreeting
2025-01-31T07:29:30.601582Z  INFO control_client: Preparing to send Set-Up-Response
2025-01-31T07:29:30.601637Z  INFO control_client: Set-Up-Response sent
2025-01-31T07:29:30.601643Z  INFO control_client: Reading Server-Start
2025-01-31T07:29:30.601679Z  INFO control_client: Done reading Server-Start
2025-01-31T07:29:30.601685Z  INFO control_client: Preparing to send Request-TW-Session
2025-01-31T07:29:30.601714Z  INFO control_client: Request-TW-Session sent
2025-01-31T07:29:30.601719Z  INFO control_client: Reading Accept-Session
2025-01-31T07:29:30.601765Z  INFO control_client: Read Accept-Session
2025-01-31T07:29:30.601770Z  INFO control_client: Preparing to send Start-Sessions
2025-01-31T07:29:30.601787Z  INFO control_client: Start-Sessions sent
2025-01-31T07:29:30.601791Z  INFO control_client: Reading Start-Ack
2025-01-31T07:29:30.601808Z  INFO control_client: Done reading Start-Ack
2025-01-31T07:29:30.601827Z  INFO session_sender: Sending Twamp-Test packets to 127.0.0.1:42572
2025-01-31T07:29:30.851552Z  INFO controller::controller: Sent all test packets
2025-01-31T07:29:30.864403Z  INFO controller::controller: Got back all test packets
2025-01-31T07:29:30.864434Z  INFO control_client: Preparing to send Stop-Sessions
2025-01-31T07:29:30.864460Z  INFO control_client: Stop-Sessions sent
2025-01-31T07:29:30.864477Z  INFO controller::controller: Producing metrics
2025-01-31T07:29:30.864485Z  INFO controller::controller: Packet loss: 0%
2025-01-31T07:29:30.866136Z  INFO controller::controller: RTT (MIN): 0.00ms
2025-01-31T07:29:30.866147Z  INFO controller::controller: RTT (MAX): 3.23ms
2025-01-31T07:29:30.866149Z  INFO controller::controller: RTT (AVG): 1.39ms
2025-01-31T07:29:30.866150Z  INFO controller::controller: OWD (Sender -> Reflector) (AVG): 0.99ms
2025-01-31T07:29:30.866153Z  INFO controller::controller: OWD (Reflector -> Sender) (AVG): 0.40ms
2025-01-31T07:29:30.866345Z  INFO controller::controller: Jitter: 0.00ms
```

[Repo]: https://github.com/thatdevsherry/twamp-rs
[Docs]: https://docs.rs/twamp-rs
[Changelog]: https://github.com/thatdevsherry/twamp-rs/blob/main/CHANGELOG.md
[Conventional Commits]: https://www.conventionalcommits.org
[Crate]: https://crates.io/crates/twamp-rs
[Crate Badge]: https://img.shields.io/crates/v/twamp-rs?logo=rust&style=flat-square&color=fdbb39
[Repo Badge]: https://img.shields.io/badge/repo-thatdevsherry/twamp-rs?style=flat-square&logo=github&color=blue
[Docs Badge]: https://img.shields.io/badge/docs-twamp-rs?style=flat-square&logo=rust&color=red
[License]: ./LICENSE.txt
[License Badge]: https://img.shields.io/crates/l/twamp-rs?style=flat-square&color=1370D3