code: func (rm *RelayMessage) MarshalBinary() ([]byte, error) {
  	// 1 byte: message type
  	// 1 byte: hop-count
  	// 16 bytes: link-address
  	// 16 bytes: peer-address
  	// N bytes: options slice byte count
  	b := buffer.New(nil)
  
  	b.Write8(uint8(rm.MessageType))
  	b.Write8(rm.HopCount)
  	copy(b.WriteN(net.IPv6len), rm.LinkAddress)
  	copy(b.WriteN(net.IPv6len), rm.PeerAddress)
  	opts, err := rm.Options.MarshalBinary()
  	if err != nil {
  		return nil, err
  	}
  	b.WriteBytes(opts)
  
  	return b.Data(), nil
  }
docs: // MarshalBinary allocates a byte slice containing the data
  // from a RelayMessage.