code: func (c *IPHAConn) send(advert *advertisement, timeout time.Duration) error {
  	deadline := time.Now().Add(timeout)
  	if err := c.sendConn.SetWriteDeadline(deadline); err != nil {
  		return err
  	}
  
  	if advert.Checksum == 0 {
  		chksum, err := checksum(advert, c.laddr, c.raddr)
  		if err != nil {
  			return fmt.Errorf("IPHAConn.send: checksum failed: %v", err)
  		}
  		advert.Checksum = chksum
  	}
  
  	buf := new(bytes.Buffer)
  	if err := binary.Write(buf, binary.BigEndian, advert); err != nil {
  		return err
  	}
  
  	if _, err := c.sendConn.WriteToIP(buf.Bytes(), &net.IPAddr{IP: c.raddr}); err != nil {
  		return err
  	}
  
  	return nil
  }
docs: // send translates an advertisement into a []byte and passes it to the IP layer for delivery.