This release stabilizes the SSU2 transport and brings IPv6 support to both NTCP2 (#322) and SSU2 (#323). Simplified bandwidth metering has been implemented (#324) and the router configuration now supports specifying a bandwidth limit and a share percentage. The defaults are 1 MB/s and 90% (router class P).
PQ hybrid support has been implemented for destinations (#329), NTCP2 (#331) and SSU2 (#334). The crypto used by destinations can be controlled with i2cp.leaseSetEncType (default is 6,4). [ntcp2] and [ssu2] have ml_kem and disable_pq options which allow controlling the PQ-related behavior of the transports. See router configuration documentation for NTCP2 and SSU2 for more details.
Added
- ssu2: Implement peer test protocol (#266)
- sam: Add support for
QUIT/EXIT/STOP(#268) - cli: Implement
RouterCommand::RouterUiDev(#301) - ssu2: Introduce
RelayManager(#306) - ssu2: Implement support for fragmented
RouterInfos (#318) - ssu2: Add support for
RouterInfocompression (#319) - ntcp2: Implement idle timeouts (#321)
- ntcp2: Add IPv6 support (#322)
- ssu2: Add IPv6 support (#323)
- core: Implement simple bandwidth metering (#324)
- ssu2: Implement connection migration (#327)
- session: Add support for PQ Hybrid ECIES-x25519-AEAD-Ratchet (#329)
- ntcp2: Add support for PQ hybrid connections (#331)
- ssu2: Add support for PQ hybrid connections (#334)
- cli/socks: Add outproxy support (#335)
Changed
- core: Introduce
SubsystemManager(#247) - core: Add more metrics (#251)
- ssu2: Check clock skew (#252)
- docs: Improve router configuration documentation (#256)
- ssu2: Share
R::UdpSocketbetween sessions (#257) - streaming: Make opening a stream more aggressive (#262)
- core: Address warning about private macro usage (#270)
- core: Expose I2CP port in
ProtocolAddressInfo(#271) - ssu2: Refactor
TransmissionManager(#274) - transit: Close tunnels which have no activity after 2 minutes (#275)
- docs: Improve docs (#280)
- ci: Use nextest (#281)
- core: Decrease the time it takes to run tests by using
tokio::test's start_paused(#282) - Be precise when marking tests with
start_paused, make investigation for #288 easier (#289) - ssu2: Refactor
Detector(#290) - cli: Specify which client tunnel exited (#296)
- cli/http: Allow specifying HTTP Proxy tunnel lengths (#297)
- ssu2: Add support for parallel peer tests (#300)
- core: Use userspace CRNG seeded by a system RNG (#302)
- core: Add fuzzers for SAM, I2CP, SSU2 and NTCP2 (#307)
- primitives: Refactor
RouterAddress(#309) - ssu2: Request introducers if the router is firewalled (#313)
- transport: Add introducer support to
TransportManager(#314) - ssu2: Implement outbound relay support (#315)
- transport: Refactor firewall/external address handling (#316)
- transit: Remove
total_bandwidth(#317) - cli/ui: Upgrade iced (#320)
- transport: Add more metrics (#326)
- cli/http: Allow specifying port for HTTP outproxy (#332)
- cli: Enable SSU2 by default (#336)
- docs: Update documentation (#337)
Fixed
- ssu2: Terminate inbound connection if outbound connection is pending (#249)
- transport: Reject dial requests if the router is already connected (#250)
- ssu2: Inform transport manager when a connection has been terminated (#255)
- streaming: Resend reply SYN if it doesn't get acknowledged (#259)
- i2cp: Treat options field of
GetDateas optional (#261) - core: Fix fuzz tests (#269)
- tunnel: Fix flaky
exploratory_tunnel_test(#276) - transit: Improve transit tunnel cleanup logic (#279)
- cli: Fix configuration tests (#298)
- docs: Add
Runtimetrait parameter to examples (#303) - cli: Decrease mock update interval to 250 milliseconds (#305)
- cli/ui: Improve subscription address validation (#311)
- util: Use correct protocol for SSU2 NAT-PMP port mapping (#312)
- core: Fix bugs (#328)
- tunnel: Return random inbound/outbound tunnel (#330)
- cli: Do not add duplicate entries to addres book (#333)
Thanks to @bheesham, @hizani and @Shrike05 for their contributions!