package org.ovirt.engine.core.bll.network.host;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.ovirt.engine.core.common.businessentities.HostDevice;
import org.ovirt.engine.core.common.businessentities.network.HostNicVfsConfig;
import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
import org.ovirt.engine.core.compat.Guid;
public interface NetworkDeviceHelper {
/**
* Retrieves the <code>VdsNetworkInterface</code> that the specified <code>pciDevice</code> represents.
*
* @return the <code>VdsNetworkInterface</code> that the specified <code>pciDevice</code> represents. If the device
* is not parent of network interface device or doesn't exist in the VdsInterface table a <code>null</code>
* is returned.
*/
VdsNetworkInterface getNicByPciDevice(final HostDevice pciDevice);
/**
* Retrieves the <code>VdsNetworkInterface</code> that the specified <code>pciDevice</code> represents.
* This method uses the specified <code>devices</code> and doesn't fetch data from the DB.
*
* @param devices collection of all the devices.
* @return the <code>VdsNetworkInterface</code> that the specified <code>pciDevice</code> represents. If the device
* is not parent of network interface device or doesn't exist in the VdsInterface table a <code>null</code>
* is returned.
*/
VdsNetworkInterface getNicByPciDevice(final HostDevice pciDevice, Collection<HostDevice> devices);
/**
* Retrieves whether the specified <code>device</code> is SR-IOV enabled.
*
* @return whether the specified <code>device</code> is SR-IOV enabled
*/
boolean isSriovDevice(HostDevice device);
/**
* Retrieves whether the specified <code>device</code> represents a physical nic.
*
* @return whether the specified <code>device</code> represents a physical nic
*/
boolean isNetworkDevice(HostDevice device);
/**
* Adds <code>maxNumOfVfs</code> and <code>numOfVfs</code> info to the <code>hostNicVfsConfig</code>
*/
void updateHostNicVfsConfigWithNumVfsData(HostNicVfsConfig hostNicVfsConfig);
/**
* Retrieves all the HostDevices of the specified host, adds <code>maxNumOfVfs</code> and <code>numOfVfs</code> info
* to each <code>HostDevice</code>
*
* @return updated HostDevices of the specified host.
*/
List<HostNicVfsConfig> getHostNicVfsConfigsWithNumVfsDataByHostId(Guid hostId);
/**
* Retrieves whether all the VFs on the nic are free to use by a VM
*
* @param nic
* physical SR-IOV enabled nic
* @return whether all the VFs on the nic are free to use by a VM.
* @throws UnsupportedOperationException in case the nic is not SR-IOV enabled
*/
boolean areAllVfsFree(VdsNetworkInterface nic);
/**
* Retrieves whether the device is occupied by virtual network or VLAN
*
* @param hostDevice arbitrary physical host device (not only network)
* @return whether this device is not occupied for networking purposes
*/
boolean isDeviceNetworkFree(HostDevice hostDevice);
/**
* Retrieves the first free VF on the nic
*
* @param nic
* physical SR-IOV enabled nic
* @param excludeVfs
* vfs that should be considered as non-free
* @return the first free VF on the nic
* @throws UnsupportedOperationException in case the nic is not SR-IOV enabled
*/
HostDevice getFreeVf(VdsNetworkInterface nic, List<String> excludeVfs);
/**
* Retrieves the pciDevice name of the specified <code>nic</code>
*
* @return the pciDevice name of the specified <code>nic</code>
*/
String getPciDeviceNameByNic(VdsNetworkInterface nic);
/**
* This method updates the DB to reflect that the specified VFs are attached to the specified VM. Such VFs will be
* considered as used. Passing <code>null</code> as <code>vmId</code> means the VF should not be attached to any VM,
* and will be considered by system as free to use.
*/
void setVmIdOnVfs(Guid hostId, Guid vmId, final Set<String> vfsNames);
/**
* Removes the <code>vmId</code> from all the VFs that were attached to the VM
*
* @return the id of the affected Host or null if there were no VFs attached to the VM
*/
Guid removeVmIdFromVfs(final Guid vmId);
/**
* Retrieves the relation between VFs and the PFs they rely on for SR-IOV enabled NICs on the given host.
*
* @param hostId the host Id
* @return the relation between the host VF NICs and PF NICs they rely on.
* The map key is VF NIC id and the map value is PF NIC id.
*/
Map<Guid, Guid> getVfMap(Guid hostId);
}