Contributing

Contributions are welcome! If you want to add features or fix bugs, here is how to get started.

Development Environment

You need Rust (stable). The project uses standard Cargo workflows.

Running Tests

cargo test

Code Style

The project uses rustfmt for formatting and clippy for linting.

# Format code
cargo fmt

# Run linter
cargo clippy -- -D warnings

Project Structure

  • src/main.rs: Entry point for the CLI binary.
  • src/lib.rs: Library entry point (start_tunnels).
  • src/config.rs: Argument parsing and configuration structs.
  • src/wg.rs: WireGuard encapsulation/decapsulation logic.
  • src/virtual_device.rs: The bridge between the Event Bus and smoltcp.
  • src/virtual_iface/: Contains the smoltcp interface polling loops for TCP and UDP.
  • src/tunnel/: Logic for the local TCP/UDP listeners (the "real" sockets).
  • src/events.rs: The asynchronous Event Bus implementation.