diff --git a/src/yggdrasil/ckr.go b/src/yggdrasil/ckr.go index b73946c4..2324f612 100644 --- a/src/yggdrasil/ckr.go +++ b/src/yggdrasil/ckr.go @@ -241,6 +241,16 @@ func (c *cryptokey) getPublicKeyForAddress(addr address, addrlen int) (boxPubKey for _, route := range *routingtable { // Does this subnet match the given IP? if route.subnet.Contains(ip) { + // Check if the routing cache is above a certain size, if it is evict + // a random entry so we can make room for this one. We take advantage + // of the fact that the iteration order is random here + if len(*routingcache) > 1024 { + for k := range *routingcache { + delete(*routingcache, k) + break + } + } + // Cache the entry for future packets to get a faster lookup (*routingcache)[addr] = route