func NewIcmp(testMode bool, results publisher.Client) (*Icmp, error) { icmp := &Icmp{} icmp.initDefaults() if !testMode { err := icmp.setFromConfig(config.ConfigSingleton.Protocols.Icmp) if err != nil { return nil, err } } var err error icmp.localIps, err = common.LocalIpAddrs() if err != nil { logp.Err("icmp", "Error getting local IP addresses: %s", err) icmp.localIps = []net.IP{} } logp.Debug("icmp", "Local IP addresses: %s", icmp.localIps) var removalListener = func(k common.Key, v common.Value) { icmp.expireTransaction(k.(hashableIcmpTuple), v.(*icmpTransaction)) } icmp.transactions = common.NewCacheWithRemovalListener( icmp.transactionTimeout, protos.DefaultTransactionHashSize, removalListener) icmp.transactions.StartJanitor(icmp.transactionTimeout) icmp.results = results return icmp, nil }
// newHandleCache creates and returns a new handleCache that has been // initialized (including starting a periodic janitor goroutine to purge // expired Handles). func newHandleCache(eventLogName string, loader handleLoaderFunc, freer freeLibraryFunc) *handleCache { hc := &handleCache{ loader: loader, freer: freer, eventLogName: eventLogName, } hc.cache = common.NewCacheWithRemovalListener(expirationTimeout, initialSize, hc.evictionHandler) hc.cache.StartJanitor(janitorInterval) return hc }
func (dns *Dns) Init(test_mode bool, results publisher.Client) error { dns.initDefaults() if !test_mode { dns.setFromConfig(config.ConfigSingleton.Protocols.Dns) } dns.transactions = common.NewCacheWithRemovalListener( dns.transactionTimeout, protos.DefaultTransactionHashSize, func(k common.Key, v common.Value) { trans, ok := v.(*DnsTransaction) if !ok { logp.Err("Expired value is not a *DnsTransaction.") return } dns.expireTransaction(trans) }) dns.transactions.StartJanitor(dns.transactionTimeout) dns.results = results return nil }