code: func (m *MACMaskArg) MarshalBinary() ([]byte, error) {
  	// Must indicate correct number of directives
  	if int(m.DirCount) != len(m.Directives) {
  		return nil, ErrorBadArgumentParameter
  	}
  
  	// Allocate byte slice for argument and all directives
  	b := make([]byte, macMaskArgLen+(directiveLen*m.DirCount))
  
  	// 1 byte reserved
  
  	b[1] = uint8(m.Command)
  	b[2] = uint8(m.Error)
  	b[3] = m.DirCount
  
  	// Marshal each directive into binary and copy into byte slice
  	// after argument
  	n := 4
  	for _, d := range m.Directives {
  		db, err := d.MarshalBinary()
  		if err != nil {
  			return nil, err
  		}
  
  		copy(b[n:n+directiveLen], db)
  		n += directiveLen
  	}
  
  	return b, nil
  }
docs: // MarshalBinary allocates a byte slice containing the data from a MACMaskArg.
  //
  // If m.DirCount does not indicate the actual length of m.Directives, or
  // a Directive is malformed, ErrorBadArgumentParameter is returned.