5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-26 10:41:40 +00:00

Enforce maximum CKR routing cache size

This commit is contained in:
Neil Alexander 2018-12-10 22:19:08 +00:00
parent f09adc2192
commit 65e34bbbab
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944

View File

@ -241,6 +241,16 @@ func (c *cryptokey) getPublicKeyForAddress(addr address, addrlen int) (boxPubKey
for _, route := range *routingtable { for _, route := range *routingtable {
// Does this subnet match the given IP? // Does this subnet match the given IP?
if route.subnet.Contains(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 // Cache the entry for future packets to get a faster lookup
(*routingcache)[addr] = route (*routingcache)[addr] = route