diff --git a/CHANGELOG.md b/CHANGELOG.md index d3950f7b..ab3e9666 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,31 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - in case of vulnerabilities. --> +## [0.3.13] - 2020-02-21 +### Added +- Support for the Wireguard TUN driver, which now replaces Water and provides far better support and performance on Windows +- Windows `.msi` installer files are now supported (bundling the Wireguard TUN driver) +- NodeInfo code is now actorised, should be more reliable +- The DHT now tries to store the two closest nodes in either direction instead of one, such that if a node goes offline, the replacement is already known +- The Yggdrasil API now supports dialing a remote node using the public key instead of the Node ID + +### Changed +- The `-loglevel` command line parameter is now cumulative and automatically includes all levels below the one specified +- DHT search code has been significantly simplified and processes rumoured nodes in parallel, speeding up search time +- DHT search results are now sorted +- The systemd service now handles configuration generation in a different unit +- The Yggdrasil API now returns public keys instead of node IDs when querying for local and remote addresses + +### Fixed +- The multicast code no longer panics when shutting down the node +- A potential OOB error when calculating IPv4 flow labels (when tunnel routing is enabled) has been fixed +- A bug resulting in incorrect idle notifications in the switch should now be fixed +- MTUs are now using a common datatype throughout the codebase + +### Removed +- TAP mode has been removed entirely, since it is no longer supported with the Wireguard TUN package. Please note that if you are using TAP mode, you may need to revise your config! +- NetBSD support has been removed until the Wireguard TUN package supports NetBSD + ## [0.3.12] - 2019-11-24 ### Added - New API functions `SetMaximumSessionMTU` and `GetMaximumSessionMTU` diff --git a/README.md b/README.md index c02151f4..dcc9bd91 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,6 @@ some of the below: - Windows - FreeBSD - OpenBSD -- NetBSD - OpenWrt Please see our [Platforms](https://yggdrasil-network.github.io/platforms.html) pages for more diff --git a/contrib/deb/generate.sh b/contrib/deb/generate.sh index 90707a7c..1f3186a4 100644 --- a/contrib/deb/generate.sh +++ b/contrib/deb/generate.sh @@ -110,11 +110,12 @@ EOF cp yggdrasil /tmp/$PKGNAME/usr/bin/ cp yggdrasilctl /tmp/$PKGNAME/usr/bin/ -cp contrib/systemd/yggdrasil.service /tmp/$PKGNAME/etc/systemd/system/ +cp contrib/systemd/*.service /tmp/$PKGNAME/etc/systemd/system/ tar -czvf /tmp/$PKGNAME/data.tar.gz -C /tmp/$PKGNAME/ \ usr/bin/yggdrasil usr/bin/yggdrasilctl \ - etc/systemd/system/yggdrasil.service + etc/systemd/system/yggdrasil.service \ + etc/systemd/system/yggdrasil-default-config.service tar -czvf /tmp/$PKGNAME/control.tar.gz -C /tmp/$PKGNAME/debian . echo 2.0 > /tmp/$PKGNAME/debian-binary diff --git a/src/yggdrasil/switch.go b/src/yggdrasil/switch.go index 899d143d..d4dd045a 100644 --- a/src/yggdrasil/switch.go +++ b/src/yggdrasil/switch.go @@ -804,7 +804,7 @@ func (t *switchTable) _handleIdle(port switchPort) bool { now := time.Now() pbufs := t.queues.bufs[port] for psize < 65535 { - var best string + var best *string var bestPriority float64 for streamID, buf := range pbufs { // Filter over the streams that this node is closer to @@ -812,25 +812,27 @@ func (t *switchTable) _handleIdle(port switchPort) bool { packet := buf.packets[0] priority := float64(now.Sub(packet.time)) / float64(buf.size) if priority >= bestPriority { - best = streamID + b := streamID // copy since streamID is mutated in the loop + best = &b bestPriority = priority } } - if best != "" { - buf := pbufs[best] + if best != nil { + buf := pbufs[*best] var packet switch_packetInfo // TODO decide if this should be LIFO or FIFO packet, buf.packets = buf.packets[0], buf.packets[1:] buf.size -= uint64(len(packet.bytes)) t.queues.size -= uint64(len(packet.bytes)) if len(buf.packets) == 0 { - delete(pbufs, best) + delete(pbufs, *best) if len(pbufs) == 0 { delete(t.queues.bufs, port) } } else { // Need to update the map, since buf was retrieved by value - pbufs[best] = buf + pbufs[*best] = buf + } packets = append(packets, packet.bytes) psize += len(packet.bytes)