From 2e004878b1da0f7fb5ec12e77babbb626e96c1ef 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. --- 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 | 10 ++++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index a7701dacf5b..b5e8173c99b 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -130,6 +130,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 final String name; private final 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 43c7d8b683f..aa1ef838104 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 @@ -870,7 +870,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 0366143a7e7..6ebc0709e9a 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 d4310d452cc..270ff7b02cc 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -2502,6 +2502,11 @@ 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()); + } + return pNetwork; } }); @@ -3796,6 +3801,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()) {