code: func (e *endpoint) HandlePacket(r *stack.Route, id stack.TransportEndpointID, vv buffer.VectorisedView) {
  	e.rcvMu.Lock()
  
  	// Drop the packet if our buffer is currently full.
  	if !e.rcvReady || e.rcvClosed || e.rcvBufSize >= e.rcvBufSizeMax {
  		e.stack.Stats().DroppedPackets.Increment()
  		e.rcvMu.Unlock()
  		return
  	}
  
  	wasEmpty := e.rcvBufSize == 0
  
  	// Push new packet into receive list and increment the buffer size.
  	pkt := &icmpPacket{
  		senderAddress: tcpip.FullAddress{
  			NIC:  r.NICID(),
  			Addr: id.RemoteAddress,
  		},
  	}
  
  	pkt.data = vv.Clone(pkt.views[:])
  
  	e.rcvList.PushBack(pkt)
  	e.rcvBufSize += pkt.data.Size()
  
  	pkt.timestamp = e.stack.NowNanoseconds()
  
  	e.rcvMu.Unlock()
  
  	// Notify any waiters that there's data to be read now.
  	if wasEmpty {
  		e.waiterQueue.Notify(waiter.EventIn)
  	}
  }
docs: // HandlePacket is called by the stack when new packets arrive to this transport
  // endpoint.