From 9a3adc97ca11c8044296f65ac00ff7f581e4fde6 Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 5 Feb 2014 17:12:58 +0530 Subject: [PATCH] CLOUDSTACK-5967: GRE tunnel creation is failing after network orchestrator refactor, only network elements providingg services as defined by network offering, are invloved network design and imlement phase. So OVS network element need to be enables as 'Connectivity' service provider to make GRE tunnels work. This fix introduced 'Ovs' provider as Connectivity service provider. Conflicts: server/src/com/cloud/network/NetworkServiceImpl.java --- api/src/com/cloud/network/Network.java | 1 + .../hypervisor/xen/resource/CitrixResourceBase.java | 7 ++++++- .../ovs/src/com/cloud/network/element/OvsElement.java | 7 +++++-- server/src/com/cloud/network/NetworkServiceImpl.java | 11 +++++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index 9be61713e9a..59a865685cb 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -127,6 +127,7 @@ public interface Network extends ControlledEntity, StateObject, I public static final Provider NiciraNvp = new Provider("NiciraNvp", false); public static final Provider InternalLbVm = new Provider("InternalLbVm", false); public static final Provider CiscoVnmc = new Provider("CiscoVnmc", true); + public static final Provider Ovs = new Provider("Ovs", false); private String name; private boolean isExternal; diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 0a8e409e8fb..267bd384a16 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -895,7 +895,12 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe dom0vif = VIF.create(conn, vifr); } // At this stage we surely have a VIF - dom0vif.plug(conn); + try { + dom0vif.plug(conn); + } catch (Exception e) { + // though wierd exception is thrown, VIF actually gets plugged-in to dom0, so just ignore exception + s_logger.info("Ignoring the benign error thrown while plugging VIF to dom0"); + } dom0vif.unplug(conn); synchronized(_tmpDom0Vif) { _tmpDom0Vif.add(dom0vif); diff --git a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java index 40be5ff7b45..29f63ec263c 100644 --- a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java +++ b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network.element; +import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -53,12 +54,14 @@ public class OvsElement extends AdapterBase implements NetworkElement { @Override public Map> getCapabilities() { - return null; + Map> capabilities = new HashMap>(); + capabilities.put(Service.Connectivity, null); + return capabilities; } @Override public Provider getProvider() { - return null; + return Network.Provider.Ovs; } @Override diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index 4169d429c6c..a85f78d5698 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -2472,8 +2472,14 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { //Add Internal Load Balancer element as a default network service provider addDefaultInternalLbProviderToPhysicalNetwork(pNetwork.getId()); + // Add OVS provider as default network service provider + if (pNetwork.getIsolationMethods().contains("GRE")) { + addDefaultOvsToPhysicalNetwork(pNetwork.getId()); + } + txn.commit(); return pNetwork; + } catch (Exception ex) { s_logger.warn("Exception: ", ex); throw new CloudRuntimeException("Fail to create a physical network"); @@ -3740,6 +3746,11 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { return null; } + private PhysicalNetworkServiceProvider addDefaultOvsToPhysicalNetwork(long physicalNetworkId) { + PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, Network.Provider.Ovs.getName(), null, null); + return nsp; + } + protected boolean isNetworkSystem(Network network) { NetworkOffering no = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); if (no.isSystemOnly()) {