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