From 243e75dd097653b24421d6dc1dd8d82b6fe09f31 Mon Sep 17 00:00:00 2001 From: jdl Date: Sat, 13 Jun 2026 15:42:40 +0200 Subject: [PATCH] Audit changes. --- peer/multicast/receiver.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/peer/multicast/receiver.go b/peer/multicast/receiver.go index 91c032c..0a46579 100644 --- a/peer/multicast/receiver.go +++ b/peer/multicast/receiver.go @@ -7,18 +7,29 @@ import ( "net" "net/netip" "time" + + "git.crumpington.com/lib/go/ratelimiter" ) func Receiver(selfVPNIP netip.Addr, ch chan<- Packet) { + limiters := make([]*ratelimiter.Limiter, 256) + for i := range limiters { + limiters[i] = ratelimiter.New(ratelimiter.Config{ + BurstLimit: 1, + FillPeriod: broadcastInterval / 2, + MaxWaitCount: 0, + }) + } + for { - if err := receiver(selfVPNIP, ch); err != nil { + if err := receiver(selfVPNIP, limiters, ch); err != nil { log.Printf("[MCReader] %v", err) } time.Sleep(errorTimeout) } } -func receiver(selfVPNIP netip.Addr, ch chan<- Packet) error { +func receiver(selfVPNIP netip.Addr, limiters []*ratelimiter.Limiter, ch chan<- Packet) error { selfIP := selfVPNIP.As4()[3] conn, err := net.ListenMulticastUDP("udp", nil, multicastAddr(selfVPNIP)) @@ -44,6 +55,9 @@ func receiver(selfVPNIP netip.Addr, ch chan<- Packet) error { } packet := unmarshal(buf[:n]) + if err := limiters[packet.PeerIP].Limit(); err != nil { + continue + } if packet.PeerIP == selfIP { continue