code: func (r *NetworkInterfaceSubresource) assignEthernetCard(l object.VirtualDeviceList, device types.BaseVirtualDevice, c types.BaseVirtualController) error {
  	// The PCI device offset. This seems to be where vSphere starts assigning
  	// virtual NICs on the PCI controller.
  	pciDeviceOffset := int32(networkInterfacePciDeviceOffset)
  
  	// The first part of this is basically the private newUnitNumber function
  	// from VirtualDeviceList, with a maximum unit count of 10. This basically
  	// means that no more than 10 virtual NICs can be assigned right now, which
  	// hopefully should be plenty.
  	units := make([]bool, 10)
  
  	ckey := c.GetVirtualController().Key
  
  	for _, device := range l {
  		d := device.GetVirtualDevice()
  		if d.ControllerKey != ckey || d.UnitNumber == nil || *d.UnitNumber < pciDeviceOffset || *d.UnitNumber >= pciDeviceOffset+10 {
  			continue
  		}
  		units[*d.UnitNumber-pciDeviceOffset] = true
  	}
  
  	// Now that we know which units are used, we can pick one
  	newUnit := int32(r.Index) + pciDeviceOffset
  	if units[newUnit-pciDeviceOffset] {
  		return fmt.Errorf("device unit at %d is currently in use on the PCI bus", newUnit)
  	}
  
  	d := device.GetVirtualDevice()
  	d.ControllerKey = c.GetVirtualController().Key
  	d.UnitNumber = &newUnit
  	if d.Key == 0 {
  		d.Key = -1
  	}
  	return nil
  }
docs: // assignEthernetCard is a subset of the logic that goes into AssignController
  // right now but with an unit offset of 7. This is based on what we have
  // observed on vSphere in terms of reserved PCI unit numbers (the first NIC
  // automatically gets re-assigned to unit number 7 if it's not that already.)