code: func ReadNetworkInterfaceTypes(l object.VirtualDeviceList) ([]string, error) {
  	log.Printf("[DEBUG] ReadNetworkInterfaceTypes: Fetching interface types")
  	devices := l.Select(func(device types.BaseVirtualDevice) bool {
  		if _, ok := device.(types.BaseVirtualEthernetCard); ok {
  			return true
  		}
  		return false
  	})
  	log.Printf("[DEBUG] ReadNetworkInterfaceTypes: Network devices located: %s", DeviceListString(devices))
  	// Sort the device list, in case it's not sorted already.
  	devSort := virtualDeviceListSorter{
  		Sort:       devices,
  		DeviceList: l,
  	}
  	sort.Sort(devSort)
  	devices = devSort.Sort
  	log.Printf("[DEBUG] ReadNetworkInterfaceTypes: Network devices order after sort: %s", DeviceListString(devices))
  	var out []string
  	for _, device := range devices {
  		out = append(out, virtualEthernetCardString(device.(types.BaseVirtualEthernetCard)))
  	}
  	log.Printf("[DEBUG] ReadNetworkInterfaceTypes: Network types returned: %+v", out)
  	return out, nil
  }
docs: // ReadNetworkInterfaceTypes returns a list of network interface types. This is used
  // in the VM data source to discover the types of the NIC drivers on the
  // virtual machine. The list is sorted by the order that they would be added in
  // if a clone were to be done.