Skip to content

Max/smolmix companions#6724

Draft
mfahampshire wants to merge 56 commits intodevelopfrom
max/smolmix-companions
Draft

Max/smolmix companions#6724
mfahampshire wants to merge 56 commits intodevelopfrom
max/smolmix-companions

Conversation

@mfahampshire
Copy link
Copy Markdown
Contributor

@mfahampshire mfahampshire commented Apr 30, 2026

This change is Reviewable

Introduces mixtcp, a smoltcp-based device that tunnels TCP/IP through
the mixnet via IpMixStream and Exit Gateway IPRs.

Components:
- NymIprDevice: smoltcp::phy::Device impl using channel-based I/O
- NymIprBridge: async task bridging the device to IpMixStream
- create_device(): helper to set up the complete stack

Examples:
- cloudflare_ping: ICMP ping through the mixnet
- https_client: HTTPS requests through the mixnet
- tls: TLS connections through the mixnet
- Add graceful shutdown (gets rid of red herring errors in examples)
- Declutter logging - move a lot of bridge info! -> trace!
- Move rustls, nym-bin-common, bytes to dev-dependencies
- Extract TlsOverTcp to mod.rs
- Make timing more granular
- Update readme
- Drop sync NymIprDevice, create_device(), and raw/ examples
- Flatten src/tunnel/{mod,device}.rs into src/{tunnel,device}.rs
- Remove unused socket-icmp and proto-ipv6 smoltcp features
- Tighten bridge/device visibility to pub(crate)
- Fix silent error swallowing in handle_incoming() select branch
- Remove cargo-cult 1s sleep before disconnect (SDK handles via TaskTracker)
- Rename confusing bridge fields: tx_receiver/rx_sender -> outgoing_rx/incoming_tx
- Document cancel-safety risk, drop-path shutdown, post-shutdown behavior
- Add comment on error loop rate limiting (SDK's internal 10s timeout)
- Add src/ARCHITECTURE.md as single source of truth for architecture
- Include in docs.rs via doc = include_str!
- Strip duplicated diagrams from tunnel.rs, device.rs, README
- Extract tls_connector() helper in HTTPS example to match websocket example
- Use consistent 'smolmix' casing in README
- stream_wrapper::{IpMixStream, NetworkEnvironment} → ipr_wrapper::
- connect_tunnel() → check_connected()
- disconnect_stream() → disconnect()
- allocated_ips() returns &IpPair directly (no Option)
- Add Tunnel::new_with_ipr() for targeting a specific exit node
- Re-export IpPair and Recipient so users don't need direct deps
- Add DNS leak warning to WebSocket example
- Await hyper connection task in HTTPS example
- Move core tunnel code to smolmix/core/
- Add smolmix-dns: hickory RuntimeProvider over tunnel
- Add smolmix-tls: shared TLS connector extracted from hyper/tungstenite
- Add smolmix-hyper: tower Service<Uri> connector for hyper-util
- Add smolmix-tungstenite: WebSocket over TLS through tunnel
- Add smolmix-libp2p: libp2p 0.56 Transport trait (dial-only)
- Rewrite examples for each crate with clearnet/mixnet comparisons
- Explain TCP-layer vs message-layer design and why it matters
- Document trait impls and I/O bridges for each companion crate
- Add quick start, crate table, and example commands
- Replace stale stream_wrapper description with ipr_wrapper + mixnet::stream
- Remove TODO comment
@mfahampshire mfahampshire marked this pull request as draft April 30, 2026 20:56
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 30, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
nym-explorer-v2 Ready Ready Preview, Comment Apr 30, 2026 9:01pm

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant