code: func (c *linkAddrCache) makeAndAddEntry(k tcpip.FullAddress, v tcpip.LinkAddress) *linkAddrEntry {
  	// Take over the next entry.
  	entry := &c.entries[c.next]
  	if c.cache[entry.addr] == entry {
  		delete(c.cache, entry.addr)
  	}
  
  	// Mark the soon-to-be-replaced entry as expired, just in case there is
  	// someone waiting for address resolution on it.
  	entry.changeState(expired)
  
  	*entry = linkAddrEntry{
  		addr:       k,
  		linkAddr:   v,
  		expiration: time.Now().Add(c.ageLimit),
  		wakers:     make(map[*sleep.Waker]struct{}),
  		done:       make(chan struct{}),
  	}
  
  	c.cache[k] = entry
  	c.next = (c.next + 1) % len(c.entries)
  	return entry
  }
docs: // makeAndAddEntry is a helper function to create and add a new
  // entry to the cache map and evict older entry as needed.