Skip to content

Releases: yggdrasil-network/yggdrasil-go

Version 0.5.9

19 Oct 16:16
v0.5.9
0b9c8bd
Compare
Choose a tag to compare

Added

  • New command line option -user for changing the process UID/GID

Changed

  • The routing algorithm has been updated with RTT-aware link costing, which should prefer lower latency links over higher latency links where possible
    • The calculated cost is an average of the link RTT, but newly established links are costed higher to begin with, such that unstable peerings can be avoided
    • Link costs are only used where multiple next-hops are available and will be ignored if there is only one loop-free path to the destination
    • This is protocol-compatible with existing v0.5.x nodes but will have the best results when peering with nodes that are also running the latest version
    • The getPeers endpoint will now report the calculated link cost for each given peer
  • Upgrade dependencies

Fixed

  • Multicast discovery should now work again when building Yggdrasil as an Android framework
  • Multicast discovery will now correctly ignore interfaces that are not marked as running
  • Ephemeral links, such as those added by multicast, will no longer try to reconnect in a fast loop, fixing a high CPU issue
  • The TUN interface will no longer stop working when hitting a segment read error from vectorised reads
  • The AllowedPublicKeys option will once again no longer apply to multicast peerings, as was originally intended
  • A potential panic when shutting down peering links has been fixed
  • A redundant system call for setting MTU on OpenBSD has been removed

Version 0.5.8

12 Aug 18:33
340cedb
Compare
Choose a tag to compare

Fixed

  • A bug which caused startup problems on Windows and FreeBSD should be fixed
  • Resolved some minor link state and listener management bugs during shutdown

Version 0.5.7

05 Aug 18:29
edf179e
Compare
Choose a tag to compare

Added

  • WebSocket support for peerings, by using the new ws:// scheme in Listen and Peers
    • Additionally, the wss:// scheme can be used to connect to a WebSocket peer behind a HTTPS reverse proxy

Changed

  • On Linux, the TUN adapter now uses vectorised reads/writes where possible, which should reduce the amount of CPU time spent on syscalls and potentially improve throughput
  • Link error handling has been improved and various link error messages have been rewritten to be clearer
  • Upgrade dependencies

Fixed

  • Multiple multicast connections to the same remote machine should now work correctly
    • You may get two connections in some cases, one inbound and one outbound, this is known and will not cause problems
  • Running as a Windows service should be more reliable with service startup and shutdown bugs fixed

Version 0.5.6

30 May 22:38
fec96a3
Compare
Choose a tag to compare
  • Go 1.21 is now required to build Yggdrasil

Added

  • The getPeers endpoint now reports the RTT/latency of directly connected peers

Changed

  • The tree parent selection algorithm now prefers the lowest latency peers instead of the most stable
  • Session key exchange logic has been changed to improve throughput and reduce occasional jitter

Fixed

  • Bloom filter hashing now works correctly on big-endian architectures
  • Incorrect buffer pool usage has been fixed, reducing memory allocations
  • The multicast beacon interval now backs off correctly, reducing the number of beacons sent
  • A denial-of-service vulnerability in the QUIC library has been fixed with a dependency update

Version 0.5.5

27 Jan 23:02
2c20a04
Compare
Choose a tag to compare

Added

  • A new peer option ?maxbackoff=X has been added to control the maximum backoff time for a given peer, supports duration values like 5m, 1h etc

Changed

  • The maximum backoff period for failing peer connections has been reduced to just over 1 hour, compared to 4.5 hours before
  • The getPeers endpoint now sorts peers in a more stable fashion
  • Upgrade dependencies

Fixed

  • A bug where QUIC listeners could stop listening for incoming connections unexpectedly has been fixed
  • The priority tiebreak between multiple peerings to the same node has been fixed
  • Peer connection ordering is no longer sensitive to poor system time resolution
  • The admin socket now verifies the length of input public keys
  • The PPROFLISTEN environment variable has been fixed and now starts the pprof listener correctly
  • A panic in getPeers has been fixed when using abstract UNIX sockets on Linux

Version 0.5.4

27 Nov 14:24
3d15da3
Compare
Choose a tag to compare

Fixed

  • Fixed a crash that could happen when calculating the size of bloom filters during encoding

Version 0.5.3

26 Nov 18:55
676ae52
Compare
Choose a tag to compare

Fixed

  • Fixed a data race from buffered pathfinder traffic
  • Fix a bug where the next-hop selection may not take shortcuts through treespace
  • Backoffs are now reset correctly when a successful handshake is completed
  • Backoffs will no longer exceed roughly 4.5 hours when peers are down for a long time
  • The -normaliseconf option will now work correctly with PrivateKeyPath
  • Improved the reliability of QUIC peering setup by disabling 0-RTT

Version 0.5.2

06 Nov 09:33
7ac38e3
Compare
Choose a tag to compare

Added

  • New -publickey command line option that prints the derived public key from a configuration file
  • Support for connecting to TLS peers via SOCKS with the new sockstls:// link schema

Changed

  • Stabilise tree parent selection algorithm
  • Improved logging when the TUN interface fails to set up

Fixed

  • Fixed a panic that could occur when a connection reaches an inconsistent error state
  • The admin socket will now report more peering handshake error conditions in getPeers
  • Yggdrasil will no longer panic at startup when duplicate peers are configured
  • The build script will no longer incorrectly import LDFLAGS from the environment

Version 0.5.1

28 Oct 15:36
a6b316e
Compare
Choose a tag to compare

Fixed

  • Fix the Debian package so that upgrades are handled more smoothly

Version 0.5.0

28 Oct 14:55
d781fef
Compare
Choose a tag to compare

NOTE: If you are using the Debian package and upgrading an existing installation, you may need to update your AdminListen line in your configuration file to unix:///var/run/yggdrasil/yggdrasil.sock or delete the AdminListen line altogether.

Added

  • Authenticated peering handshake with optional password, i.e.
    • For listeners: tls://[::]:12345?password=123456abcdef
    • For peers: tls://a.b.c.d:12345?password=123456abcdef
    • For multicast interfaces with the new Password option in each MulticastInterfaces section
    • Maximum password length is 64 characters
  • QUIC support for peerings, by using the new quic:// scheme in Listen and Peers
    • This has not been extensively tested and may perform worse than TCP or TLS peers
  • The private key can now be stored in PEM format separately to the main configuration file with the new PrivateKeyPath configuration file option
    • Use the -exportkey flag to export the key to a file from an existing config

Changed

  • New routing scheme, which is backwards incompatible with previous versions of Yggdrasil
    • The wire protocol version number, exchanged as part of the peer setup handshake, has been increased to 0.5
    • Nodes running this new version will not be able to peer with earlier versions of Yggdrasil
    • A DHT is no longer used to map public keys and routes through treespace
    • Bloom filters are used to track on-tree links and nodes reachable via that link
    • Nodes now gossip separate per-link information which is tracked in CRDT structures, forcing local consistency and preventing unnecessary flapping when a route to the root node has changed or is broken
    • Greedy routing is once again used instead of source routing
    • Per-link keepalives have been replaced with periodic acknowledgements, reducing idle bandwidth
  • The link handshake and multicast beacon formats have been revised for better future extensibility
  • The link code has been refactored for more robust tracking of peering states
    • As a result, the admin socket is now able to report information about configured peerings that are down
    • Reconnect intervals are now tracked separately for each configured peer with exponential backoffs

Removed

  • Yggdrasil will no longer request BBR congestion control for TCP and TLS peerings on Linux