You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
The key has expired.
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