code: func (r *ReserveReleaseArg) MarshalBinary() ([]byte, error) {
  	// Must indicate correct number of hardware addresses
  	if int(r.NMACs) != len(r.MACs) {
  		return nil, ErrorBadArgumentParameter
  	}
  
  	// Allocate byte slice for argument and hardware addresses
  	b := make([]byte, reserveReleaseArgLen+(r.NMACs*6))
  
  	b[0] = uint8(r.Command)
  	b[1] = uint8(r.NMACs)
  
  	// Copy each hardware address into byte slice, after verifying exactly
  	// 6 bytes in length
  	n := 2
  	for _, m := range r.MACs {
  		if len(m) != 6 {
  			return nil, ErrorBadArgumentParameter
  		}
  
  		copy(b[n:n+6], m)
  		n += 6
  	}
  
  	return b, nil
  }
docs: // MarshalBinary allocates a byte slice containing the data from a
  // ReserveReleaseArg.
  //
  // If r.NMACs does not indicate the actual length of r.MACs, or one or more
  // hardware addresses are not exactly 6 bytes in length,
  // ErrorBadArgumentParameter is returned.