From aff41d0b0866e036dca705c60ee56df192f032ea Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Fri, 27 Jun 2014 22:39:03 +0200 Subject: [PATCH] discosrv: Tunable limiter settings --- cmd/discosrv/main.go | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/cmd/discosrv/main.go b/cmd/discosrv/main.go index 12d49a54a..344b5959c 100644 --- a/cmd/discosrv/main.go +++ b/cmd/discosrv/main.go @@ -32,15 +32,18 @@ type address struct { } var ( - nodes = make(map[string]node) - lock sync.Mutex - queries = 0 - announces = 0 - answered = 0 - limited = 0 - unknowns = 0 - debug = false - limiter = lru.New(1024) + nodes = make(map[string]node) + lock sync.Mutex + queries = 0 + announces = 0 + answered = 0 + limited = 0 + unknowns = 0 + debug = false + lruSize = 1024 + limitAvg = 1 + limitBurst = 10 + limiter *lru.Cache ) func main() { @@ -54,8 +57,13 @@ func main() { flag.BoolVar(×tamp, "timestamp", true, "Timestamp the log output") flag.IntVar(&statsIntv, "stats-intv", 0, "Statistics output interval (s)") flag.StringVar(&statsFile, "stats-file", "/var/log/discosrv.stats", "Statistics file name") + flag.IntVar(&lruSize, "limit-cache", lruSize, "Limiter cache entries") + flag.IntVar(&limitAvg, "limit-avg", limitAvg, "Allowed average package rate, per 10 s") + flag.IntVar(&limitBurst, "limit-burst", limitBurst, "Allowed burst size, packets") flag.Parse() + limiter = lru.New(lruSize) + log.SetOutput(os.Stdout) if !timestamp { log.SetFlags(0) @@ -130,7 +138,7 @@ func limit(addr *net.UDPAddr) bool { log.Println("New limiter for", key) } // One packet per ten seconds average rate, burst ten packets - limiter.Add(key, ratelimit.NewBucket(10*time.Second, 10)) + limiter.Add(key, ratelimit.NewBucket(10*time.Second/time.Duration(limitAvg), int64(limitBurst))) } return false