code: func (e *Ethtool) Features(intf string) (map[string]bool, error) {
  	names, err := e.FeatureNames(intf)
  	if err != nil {
  		return nil, err
  	}
  
  	length := uint32(len(names))
  	if length == 0 {
  		return map[string]bool{}, nil
  	}
  
  	features := ethtoolGfeatures{
  		cmd:  ETHTOOL_GFEATURES,
  		size: (length + 32 - 1) / 32,
  	}
  
  	if err := e.ioctl(intf, uintptr(unsafe.Pointer(&features))); err != nil {
  		return nil, err
  	}
  
  	var result = make(map[string]bool, length)
  	for key, index := range names {
  		result[key] = isFeatureBitSet(features.blocks, index)
  	}
  
  	return result, nil
  }
docs: // Features retrieves features of the given interface name.