From acd7e74db4130dfb86d158e836d859b41eee476a Mon Sep 17 00:00:00 2001 From: Sam Hague Date: Wed, 25 Nov 2015 15:51:46 -0500 Subject: [PATCH] Add option to use netdev datapath_type Change-Id: Ica37449612dc2465ddd71bfc19caa9a599354c34 Signed-off-by: Sam Hague --- .../ovsdb/openstack/netvirt/it/NetvirtIT.java | 14 ++++++++------ .../netvirt/it/NetvirtITConstants.java | 1 + .../netvirt/api/ConfigurationService.java | 2 ++ .../ovsdb/openstack/netvirt/api/Southbound.java | 4 +++- .../impl/BridgeConfigurationManagerImpl.java | 9 ++++++++- .../netvirt/impl/ConfigurationServiceImpl.java | 6 ++++++ .../openstack/netvirt/impl/SouthboundImpl.java | 17 ++++++----------- .../BridgeConfigurationManagerImplTest.java | 3 ++- 8 files changed, 36 insertions(+), 20 deletions(-) diff --git a/openstack/net-virt-it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/it/NetvirtIT.java b/openstack/net-virt-it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/it/NetvirtIT.java index d335bfa676..f5a65294c4 100644 --- a/openstack/net-virt-it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/it/NetvirtIT.java +++ b/openstack/net-virt-it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/it/NetvirtIT.java @@ -169,7 +169,8 @@ public class NetvirtIT extends AbstractMdsalTestBase { return new Option[] { propagateSystemProperties(NetvirtITConstants.SERVER_IPADDRESS, NetvirtITConstants.SERVER_PORT, NetvirtITConstants.CONNECTION_TYPE, - NetvirtITConstants.CONTROLLER_IPADDRESS), + NetvirtITConstants.CONTROLLER_IPADDRESS, + NetvirtITConstants.USERSPACE_ENABLED) }; } @@ -199,9 +200,11 @@ public class NetvirtIT extends AbstractMdsalTestBase { addressStr = props.getProperty(NetvirtITConstants.SERVER_IPADDRESS); portStr = props.getProperty(NetvirtITConstants.SERVER_PORT, NetvirtITConstants.DEFAULT_SERVER_PORT); connectionType = props.getProperty(NetvirtITConstants.CONNECTION_TYPE, "active"); - controllerStr = props.getProperty(NetvirtITConstants.CONTROLLER_IPADDRESS); - LOG.info("setUp: Using the following properties: mode= {}, ip:port= {}:{}, controller ip: {}", - connectionType, addressStr, portStr, controllerStr); + controllerStr = props.getProperty(NetvirtITConstants.CONTROLLER_IPADDRESS, "0.0.0.0"); + String userSpaceEnabled = props.getProperty(NetvirtITConstants.USERSPACE_ENABLED, "no"); + LOG.info("setUp: Using the following properties: mode= {}, ip:port= {}:{}, controller ip: {}, " + + "userspace.enabled: {}", + connectionType, addressStr, portStr, controllerStr, userSpaceEnabled); if (connectionType.equalsIgnoreCase(NetvirtITConstants.CONNECTION_TYPE_ACTIVE)) { if (addressStr == null) { fail(usage()); @@ -773,13 +776,12 @@ public class NetvirtIT extends AbstractMdsalTestBase { * * @throws InterruptedException */ - @Ignore @Test public void testNetVirt() throws InterruptedException { ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr); Node ovsdbNode = connectOvsdbNode(connectionInfo); - Thread.sleep(30000); + Thread.sleep(15000); // Verify the pipeline flows were installed PipelineOrchestrator pipelineOrchestrator = (PipelineOrchestrator) ServiceHelper.getGlobalInstance(PipelineOrchestrator.class, this); diff --git a/openstack/net-virt-it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/it/NetvirtITConstants.java b/openstack/net-virt-it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/it/NetvirtITConstants.java index 4fea5264b6..347be94955 100644 --- a/openstack/net-virt-it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/it/NetvirtITConstants.java +++ b/openstack/net-virt-it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/it/NetvirtITConstants.java @@ -20,6 +20,7 @@ public final class NetvirtITConstants { public static final String SERVER_IPADDRESS = "ovsdbserver.ipaddress"; public static final String SERVER_PORT = "ovsdbserver.port"; public static final String CONTROLLER_IPADDRESS = "ovsdb.controller.address"; + public static final String USERSPACE_ENABLED = "ovsdb.userspace.enabled"; public static final String SERVER_EXTRAS = "ovsdbserver.extras"; public static final String CONNECTION_TYPE = "ovsdbserver.connection"; public static final String CONNECTION_TYPE_ACTIVE = "active"; diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/ConfigurationService.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/ConfigurationService.java index a41eb1020e..209530b0ed 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/ConfigurationService.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/ConfigurationService.java @@ -141,4 +141,6 @@ public interface ConfigurationService { * @return the MacAddress to use for the default gateway; or null if none is configured. */ String getDefaultGatewayMacAddress(Node node); + + boolean isUserSpaceEnabled(); } diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Southbound.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Southbound.java index f0baac9d1c..6805837e7d 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Southbound.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Southbound.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Map; import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation; @@ -36,7 +37,8 @@ public interface Southbound { boolean isBridgeOnOvsdbNode(Node node, String bridgeName); String getOvsdbNodeUUID(Node node); String getOsdbNodeExternalIdsValue(OvsdbNodeAugmentation ovsdbNodeAugmentation, String key); - boolean addBridge(Node ovsdbNode, String bridgeName, List controllersStr); + boolean addBridge(Node ovsdbNode, String bridgeName, List controllersStr, + final Class dpType); boolean deleteBridge(Node ovsdbNode); OvsdbBridgeAugmentation readBridge(Node node, String name); Node readBridgeNode(Node node, String name); diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImpl.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImpl.java index 3ea4608014..3a3ea5dc38 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImpl.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImpl.java @@ -19,6 +19,9 @@ import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbTables; import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound; import org.opendaylight.ovsdb.utils.config.ConfigProperties; import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeNetdev; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeSystem; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagerEntry; @@ -483,7 +486,11 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage boolean rv = true; if ((!southbound.isBridgeOnOvsdbNode(ovsdbNode, bridgeName)) || (southbound.getBridgeFromConfig(ovsdbNode, bridgeName) == null)) { - rv = southbound.addBridge(ovsdbNode, bridgeName, getControllersFromOvsdbNode(ovsdbNode)); + Class dpType = null; + if (configurationService.isUserSpaceEnabled()) { + dpType = DatapathTypeNetdev.class; + } + rv = southbound.addBridge(ovsdbNode, bridgeName, getControllersFromOvsdbNode(ovsdbNode), dpType); } return rv; } diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/ConfigurationServiceImpl.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/ConfigurationServiceImpl.java index 79fa1921de..c9691fce72 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/ConfigurationServiceImpl.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/ConfigurationServiceImpl.java @@ -178,6 +178,12 @@ public class ConfigurationServiceImpl implements ConfigurationService, ConfigInt return l3gatewayForNode; } + @Override + public boolean isUserSpaceEnabled() { + final String enabledPropertyStr = ConfigProperties.getProperty(this.getClass(), "ovsdb.userspace.enabled"); + return enabledPropertyStr != null && enabledPropertyStr.equalsIgnoreCase("yes"); + } + @Override public void setDependencies(ServiceReference serviceReference) { southbound = diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SouthboundImpl.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SouthboundImpl.java index 38eeaecbda..090e140a98 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SouthboundImpl.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SouthboundImpl.java @@ -21,16 +21,7 @@ import org.opendaylight.ovsdb.openstack.netvirt.NetworkHandler; import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbTables; import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeNetdev; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeDpdk; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.*; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeExternalIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeOtherConfigs; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeOtherConfigsBuilder; @@ -182,7 +173,8 @@ public class SouthboundImpl implements Southbound { return value; } - public boolean addBridge(Node ovsdbNode, String bridgeName, List controllersStr) { + public boolean addBridge(Node ovsdbNode, String bridgeName, List controllersStr, + final Class dpType) { boolean result = false; LOG.info("addBridge: node: {}, bridgeName: {}, controller(s): {}", ovsdbNode, bridgeName, controllersStr); @@ -207,6 +199,9 @@ public class SouthboundImpl implements Southbound { bridgeOtherConfigsList.add(bridgeOtherConfigsBuilder.build()); ovsdbBridgeAugmentationBuilder.setBridgeOtherConfigs(bridgeOtherConfigsList); setManagedByForBridge(ovsdbBridgeAugmentationBuilder, ovsdbNode.getKey()); + if (dpType != null) { + ovsdbBridgeAugmentationBuilder.setDatapathType(dpType); + } if (isOvsdbNodeDpdk(ovsdbNode)) { ovsdbBridgeAugmentationBuilder.setDatapathType(DatapathTypeNetdev.class); } diff --git a/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImplTest.java b/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImplTest.java index 5246a42b02..c5073c3363 100644 --- a/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImplTest.java +++ b/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImplTest.java @@ -41,6 +41,7 @@ import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbTables; import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound; import org.opendaylight.ovsdb.utils.config.ConfigProperties; import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeSystem; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; @@ -223,7 +224,7 @@ public class BridgeConfigurationManagerImplTest { PowerMockito.mockStatic(ConfigProperties.class); when(ConfigProperties.getProperty(any(Class.class), anyString())).thenReturn(ADDRESS); - when(southbound.addBridge(any(Node.class), anyString(), anyList())).thenReturn(true); + when(southbound.addBridge(any(Node.class), anyString(), anyList(), eq(DatapathTypeSystem.class))).thenReturn(true); when(configurationService.isL3ForwardingEnabled()).thenReturn(true); bridgeConfigurationManagerImpl.prepareNode(node); -- 2.36.6