package org.ovirt.engine.core.bll.network.predicate;
import java.util.Objects;
import java.util.function.Predicate;
import org.ovirt.engine.core.bll.network.macpool.MacPool;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
/**
* A MAC is considered as bad when either one occurs:
* <ul>
* <li>It is in use by another VM and the pool doesn't allow duplicates.</li>
* <li>It is out of the range of the mac-pool.</li>
* </ul>
*/
public class VnicWithBadMacPredicate implements Predicate<VmNetworkInterface> {
private final MacPool macPool;
public VnicWithBadMacPredicate(MacPool macPool) {
this.macPool = Objects.requireNonNull(macPool);
}
@Override
public boolean test(VmNetworkInterface vnic) {
final String mac = vnic.getMacAddress();
if (mac == null) {
return false;
}
if (!macPool.isDuplicateMacAddressesAllowed() && macPool.isMacInUse(mac)) {
return true;
}
if (!macPool.isMacInRange(mac)) {
return true;
}
return false;
}
}