January 8, 2025
This is a point version so there are no changes to the inter-node protocol but introduces a number of new features.
- DNS Seeding allows auto-peering, so manually adding peers is now optional, new RPCs:
PeeringSeeder_publicStatus
: Shows statusPeeringSeeder_publicPeer
: Enables becoming a public nodePeeringSeeder_listDnsSeeds
: List the active DNS seed nodesPeeringSeeder_rmDnsSeed
: Remove a DNS seed nodePeeringSeeder_addDnsSeed
: Add a DNS seed node
- cjdnstool is compiled with cjdroute making it easier to do node administration.
Security_seccomp
removed, SECCOMP BPF filter because is too strict for the 3rd party Rust libraries.- Libuv is gone from the project, all interfaces with the OS are through Rust code.
- UDP and TUN interfaces now use tokio worker pools, new RPCs:
UDPInterface_workerStates
: Check the status of UDP Interface workers.Core_tunWorkers
: Check the status of TUN Interface workers.
February 3, 2023
It's been since September 18, 2020 when cjdns v21 was tagged out, and brought only small experimental inclusion of Rust code to cjdns. v22 makes Rust a main language in which cjdns is written, and it is foreseen that in v23, almost all interactions with the OS will be done in Rust.
- New protocol version v22, compatibility is maintained with v21 and v20 (no change in compatibility)
- This new protocol version brings a new CryptoAuth protocol based on the NOISE protocol used by WireGuard® VPN. The NOISE protocol is used in all direct peering connections where both sides are v22.
- The legacy CryptoAuth protocol remains but has been entirely re-written in Rust, the C version remains only for testing purposes.
- RPC
InterfaceController_peerStats()
Now contains Integer noiseProto: 1 if using the NOISE protocol for communication - RPC
InterfaceController_disconnectPeer()
Now disconnects ALL sessions to given peer address instead of only the first - RPC
InterfaceController_timestampPackets()
has been removed, as it only affected debug logging and was rarely used - Libuv code is now compiled using the cjdns build system, it is nolonger compiled using gyp so python is nolonger needed to build cjdns
- Removed
cjdroute --bench
which was not an accurate measure of expected performance
- Made fields of Message structure so they will be accessed through accessors - first step to move Message into Rust
- Make cjdns Error return value use a Rust anyhow error
- In preparation for removal of Libuv, we have replaced the following Libuv functions with Rust implementations:
- IP Address manipulation functions:
uv_inet_pton
/uv_inet_pton
- Current time:
uv_now
/uv_hrtime
- Child process:
uv_spawn
/uv_exepath
/uv_process_kill
- We nolonger put
makekeys
,mkpasswd
,privatetopublic
,publictoip6
,randombytes
, andsybilsim
in the main folder
- In the future:
makekeys
,privatetopublic
,publictoip6
, andrandombytes
will be built as a separate optional component mkpasswd
will be dropped because it is too trivial to be worth maintainingsybilsim
will be dropped because it is nolonger maintained
- Removed from SwitchCore.c the possibility of an interface to be "down" which never exists in reality
- New logger for Rust code which uses the cjdns logger as a backend
- CryptoAuth is now an (asynchronous) Iface rather than a function you call to encrypt and decrypt
For earlier versions, see ./util/version/Version.h