code: func (c *linkAddrCache) checkLinkRequest(k tcpip.FullAddress, attempt int) bool {
  	c.mu.Lock()
  	defer c.mu.Unlock()
  
  	entry, ok := c.cache[k]
  	if !ok {
  		// Entry was evicted from the cache.
  		return true
  	}
  
  	switch s := entry.state(); s {
  	case ready, failed, expired:
  		// Entry was made ready by resolver or failed. Either way we're done.
  		return true
  	case incomplete:
  		if attempt+1 >= c.resolutionAttempts {
  			// Max number of retries reached, mark entry as failed.
  			entry.changeState(failed)
  			return true
  		}
  		// No response yet, need to send another ARP request.
  		return false
  	default:
  		panic(fmt.Sprintf("invalid cache entry state: %s", s))
  	}
  }
docs: // checkLinkRequest checks whether previous attempt to resolve address has succeeded
  // and mark the entry accordingly, e.g. ready, failed, etc. Return true if request
  // can stop, false if another request should be sent.