Skip to content

Version 0.3.16

Compare
Choose a tag to compare
@neilalexander neilalexander released this 18 Mar 22:23
· 504 commits to master since this release
983dfdb

Added

  • New simulation code under cmd/yggdrasilsim (work-in-progress)

Changed

  • Multi-threading in the switch
    • Swich lookups happen independently for each (incoming) peer connection, instead of being funneled to a single dedicated switch worker
    • Packets are queued for each (outgoing) peer connection, instead of being handled by a single dedicated switch worker
  • Queue logic rewritten
    • Heap structure per peer that traffic is routed to, with one FIFO queue per traffic flow
    • The total size of each heap is configured automatically (we basically queue packets until we think we're blocked on a socket write)
    • When adding to a full heap, the oldest packet from the largest queue is dropped
    • Packets are popped from the queue in FIFO order (oldest packet from among all queues in the heap) to prevent packet reordering at the session level
  • Removed global sync.Pool of []byte
    • Local sync.Pools are used in the hot loops, but not exported, to avoid memory corruption if libraries are reused by other projects
    • This may increase allocations (and slightly reduce speed in CPU-bound benchmarks) when interacting with the tun/tap device, but traffic forwarded at the switch layer should be unaffected
  • Upgrade dependencies
  • Upgrade build to Go 1.16

Fixed

  • Fixed a bug where the connection listener could exit prematurely due to resoruce exhaustion (if e.g. too many connections were opened)
  • Fixed DefaultIfName for OpenBSD (/dev/tun0 -> tun0)
  • Fixed an issue where a peer could sometimes never be added to the switch
  • Fixed a goroutine leak that could occur if a peer with an open connection continued to spam additional connection attempts