diff --git a/server/src/com/cloud/network/element/OvsElement.java b/server/src/com/cloud/network/element/OvsElement.java new file mode 100644 index 00000000000..140f029ce58 --- /dev/null +++ b/server/src/com/cloud/network/element/OvsElement.java @@ -0,0 +1,128 @@ +package com.cloud.network.element; + +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; + +import com.cloud.deploy.DeployDestination; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.Network; +import com.cloud.network.Networks; +import com.cloud.network.PublicIpAddress; +import com.cloud.network.Network.Capability; +import com.cloud.network.Network.Provider; +import com.cloud.network.Network.Service; +import com.cloud.network.Networks.BroadcastDomainType; +import com.cloud.network.element.NetworkElement; +import com.cloud.network.ovs.OvsNetworkManager; +import com.cloud.network.ovs.OvsTunnelManager; +import com.cloud.network.rules.FirewallRule; +import com.cloud.offering.NetworkOffering; +import com.cloud.utils.component.AdapterBase; +import com.cloud.utils.component.Inject; +import com.cloud.vm.NicProfile; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; + +@Local(value=NetworkElement.class) +public class OvsElement extends AdapterBase implements NetworkElement { + @Inject OvsNetworkManager _ovsVlanMgr; + @Inject OvsTunnelManager _ovsTunnelMgr; + + @Override + public boolean applyIps(Network network, + List ipAddress) + throws ResourceUnavailableException { + return true; + } + + @Override + public boolean applyRules(Network network, + List rules) + throws ResourceUnavailableException { + return true; + } + + @Override + public boolean destroy(Network network) + throws ConcurrentOperationException, ResourceUnavailableException { + return true; + } + + @Override + public Map> getCapabilities() { + return null; + } + + @Override + public Provider getProvider() { + return null; + } + + @Override + public boolean implement(Network network, NetworkOffering offering, + DeployDestination dest, ReservationContext context) + throws ConcurrentOperationException, ResourceUnavailableException, + InsufficientCapacityException { + return true; + } + + @Override + public boolean prepare(Network network, NicProfile nic, + VirtualMachineProfile vm, + DeployDestination dest, ReservationContext context) + throws ConcurrentOperationException, ResourceUnavailableException, + InsufficientCapacityException { + if (nic.getBroadcastType() != Networks.BroadcastDomainType.Vswitch) { + return true; + } + + if (nic.getTrafficType() != Networks.TrafficType.Guest) { + return true; + } + + _ovsVlanMgr.VmCheckAndCreateTunnel(vm, dest); + String command = _ovsVlanMgr.applyDefaultFlow(vm.getVirtualMachine(), dest); + if (command != null) { + nic.setBroadcastUri(BroadcastDomainType.Vswitch.toUri(command)); + } + _ovsTunnelMgr.VmCheckAndCreateTunnel(vm, dest); + + return true; + } + + @Override + public boolean release(Network network, NicProfile nic, + VirtualMachineProfile vm, + ReservationContext context) throws ConcurrentOperationException, + ResourceUnavailableException { + if (nic.getBroadcastType() != Networks.BroadcastDomainType.Vswitch) { + return true; + } + + if (nic.getTrafficType() != Networks.TrafficType.Guest) { + return true; + } + + _ovsTunnelMgr.CheckAndDestroyTunnel(vm.getVirtualMachine()); + return true; + } + + @Override + public boolean restart(Network network, ReservationContext context) + throws ConcurrentOperationException, ResourceUnavailableException, + InsufficientCapacityException { + return true; + } + + @Override + public boolean shutdown(Network network, ReservationContext context) + throws ConcurrentOperationException, ResourceUnavailableException { + return true; + } + +}