Remove more plugin-related code.
Correct a couple of netconf dependencies.
Remove obsolete dependencies on controller features which are no
longer provided upstream.
Change-Id: Ia8f68200e997c11375414cd3071fe605b9025cd4
Signed-off-by: Stephen Kitt <skitt@redhat.com>
<properties>
<!-- Overrides -->
<!-- Controller Dependencies for Pax Exam -->
- <arphandler.version>0.7.0-SNAPSHOT</arphandler.version>
- <bundlescanner.implementation.version>0.6.0-SNAPSHOT</bundlescanner.implementation.version>
- <bundlescanner.version>0.6.0-SNAPSHOT</bundlescanner.version>
- <clustering.services_implementation.version>0.6.0-SNAPSHOT</clustering.services_implementation.version>
<configuration.implementation.version>0.6.0-SNAPSHOT</configuration.implementation.version>
<configuration.version>0.6.0-SNAPSHOT</configuration.version>
<connectionmanager.version>0.3.0-SNAPSHOT</connectionmanager.version>
<groupId>org.jboss.spec.javax.transaction</groupId>
<artifactId>jboss-transaction-api_1.1_spec</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>arphandler</artifactId>
- <version>${arphandler.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>bundlescanner</artifactId>
- <version>${bundlescanner.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>bundlescanner.implementation</artifactId>
- <version>${bundlescanner.implementation.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>clustering.services</artifactId>
- <version>${clustering.services.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>clustering.services-implementation</artifactId>
- <version>${clustering.services_implementation.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>commons.northbound</artifactId>
- <version>${northbound.commons.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>configuration</artifactId>
- <version>${configuration.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>configuration.implementation</artifactId>
- <version>${configuration.implementation.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>connectionmanager</artifactId>
- <version>${connectionmanager.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>connectionmanager.implementation</artifactId>
- <version>${connectionmanager.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>containermanager</artifactId>
- <version>${containermanager.it.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>flowprogrammer.northbound</artifactId>
- <version>${flowprogrammer.northbound.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>forwarding.staticrouting</artifactId>
- <version>${forwarding.staticrouting}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>forwarding.staticrouting.northbound</artifactId>
- <version>${forwarding.staticrouting.northbound.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>forwardingrulesmanager</artifactId>
- <version>${forwardingrulesmanager.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>forwardingrulesmanager.implementation</artifactId>
- <version>${forwardingrulesmanager.implementation.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>hosttracker</artifactId>
- <version>${hosttracker.api.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>hosttracker.implementation</artifactId>
- <version>${hosttracker.implementation.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>hosttracker.northbound</artifactId>
- <version>${hosttracker.northbound.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>logging.bridge</artifactId>
- <version>${logging.bridge.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>routing.dijkstra_implementation</artifactId>
- <version>${routing.dijkstra_implementation.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>sal</artifactId>
- <version>${sal.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>sal.implementation</artifactId>
- <version>${sal.implementation.version}</version>
- </dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>sal-binding-it</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>security</artifactId>
- <version>${security.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>statistics.northbound</artifactId>
- <version>${statistics.northbound.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>statisticsmanager</artifactId>
- <version>${statisticsmanager.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>statisticsmanager.implementation</artifactId>
- <version>${statisticsmanager.implementation.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>subnets.northbound</artifactId>
- <version>${subnets.northbound.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>switchmanager</artifactId>
- <version>${switchmanager.api.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>switchmanager.implementation</artifactId>
- <version>${switchmanager.implementation.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>switchmanager.northbound</artifactId>
- <version>${switchmanager.northbound.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>topology.northbound</artifactId>
- <version>${topology.northbound.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>topologymanager</artifactId>
- <version>${topologymanager.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>usermanager</artifactId>
- <version>${usermanager.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>usermanager.implementation</artifactId>
- <version>${usermanager.implementation.version}</version>
- </dependency>
<dependency>
<groupId>org.opendaylight.controller.thirdparty</groupId>
<artifactId>com.sun.jersey.jersey-servlet</artifactId>
<groupId>org.opendaylight.ovsdb</groupId>
<artifactId>openstack.net-virt</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.ovsdb</groupId>
- <artifactId>ovsdb-plugin-compatibility-layer</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.ovsdb</groupId>
- <artifactId>plugin</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.ovsdb</groupId>
<artifactId>schema.hardwarevtep</artifactId>
<sonar.jacoco.itReportPath>${root.directory}/target/code-coverage/jacoco-it.exec</sonar.jacoco.itReportPath>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<!-- ODL Dependency Versions -->
- <clustering.services.version>0.7.0-SNAPSHOT</clustering.services.version>
<containermanager.version>0.7.0-SNAPSHOT</containermanager.version>
<controller.config.version>0.4.0-SNAPSHOT</controller.config.version>
<forwardingrulesmanager.version>0.8.0-SNAPSHOT</forwardingrulesmanager.version>
<artifactId>config-api</artifactId>
<version>${controller.config.version}</version>
</dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>clustering.services</artifactId>
- <version>${clustering.services.version}</version>
- </dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>containermanager</artifactId>
</scm>
<properties>
- <dummy-console.version>1.3.0-SNAPSHOT</dummy-console.version>
<odl.karaf.base.version>1.6.0-SNAPSHOT</odl.karaf.base.version>
<mdsal.version>1.3.0-SNAPSHOT</mdsal.version>
<io.netty.version>3.8.0.Final</io.netty.version>
<artifactId>org.eclipse.osgi.services</artifactId>
<version>3.3.100.v20120522-1822</version>
</dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>dummy-console</artifactId>
- <version>${dummy-console.version}</version>
- </dependency>
<dependency>
<groupId>org.opendaylight.neutron</groupId>
<artifactId>features-neutron</artifactId>
<type>xml</type>
<classifier>config</classifier>
</dependency>
- <dependency>
- <groupId>org.opendaylight.ovsdb</groupId>
- <artifactId>plugin</artifactId>
- <version>${ovsdb.plugin.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.ovsdb</groupId>
- <artifactId>ovsdb-plugin-compatibility-layer</artifactId>
- <version>${ovsdb.plugin.compatibility.layer.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.ovsdb</groupId>
- <artifactId>plugin-shell</artifactId>
- <version>${plugin.shell.version}</version>
- </dependency>
<dependency>
<groupId>org.opendaylight.ovsdb</groupId>
<artifactId>schema.openvswitch</artifactId>
+++ /dev/null
-/*
- * Copyright (C) 2014 Red Hat, Inc.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Authors : Dave Tucker
- */
-
-package org.opendaylight.ovsdb.integrationtest;
-
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
-import static org.ops4j.pax.exam.CoreOptions.systemPackages;
-import static org.ops4j.pax.exam.CoreOptions.systemProperty;
-
-import org.opendaylight.controller.test.sal.binding.it.TestHelper;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.options.DefaultCompositeOption;
-
-
-public class ConfigurationBundles {
-
- public static Option controllerBundles() {
- return new DefaultCompositeOption(
- systemPackages("sun.reflect", "sun.reflect.misc", "sun.misc"),
- mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(),
- mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(),
- mavenBundle("com.google.code.gson", "gson").versionAsInProject(),
- mavenBundle("com.google.guava", "guava").versionAsInProject(),
- mavenBundle("eclipselink", "javax.resource").versionAsInProject(),
- mavenBundle("equinoxSDK381", "javax.servlet").versionAsInProject(),
- mavenBundle("org.apache.felix", "org.apache.felix.gogo.command").versionAsInProject(),
- mavenBundle("org.apache.felix", "org.apache.felix.gogo.runtime").versionAsInProject(),
- mavenBundle("org.apache.felix", "org.apache.felix.gogo.shell").versionAsInProject(),
- mavenBundle("equinoxSDK381", "org.eclipse.equinox.console").versionAsInProject(),
- mavenBundle("equinoxSDK381", "org.eclipse.equinox.ds").versionAsInProject(),
- mavenBundle("equinoxSDK381", "org.eclipse.equinox.util").versionAsInProject(),
- mavenBundle("equinoxSDK381","org.eclipse.osgi.services").versionAsInProject(),
- mavenBundle("org.apache.commons", "commons-lang3").versionAsInProject(),
- mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager").versionAsInProject(),
- mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager.shell").versionAsInProject(),
- mavenBundle("org.slf4j", "slf4j-api").versionAsInProject()
- );
- }
-
- public static Option ovsdbLibraryBundles() {
- return new DefaultCompositeOption(
- mavenBundle("io.netty", "netty-buffer").versionAsInProject(),
- mavenBundle("io.netty", "netty-codec").versionAsInProject(),
- mavenBundle("io.netty", "netty-common").versionAsInProject(),
- mavenBundle("io.netty", "netty-handler").versionAsInProject(),
- mavenBundle("io.netty", "netty-transport").versionAsInProject(),
- mavenBundle("com.fasterxml.jackson.core", "jackson-annotations").versionAsInProject(),
- mavenBundle("com.fasterxml.jackson.core", "jackson-core").versionAsInProject(),
- mavenBundle("com.fasterxml.jackson.core", "jackson-databind").versionAsInProject(),
- mavenBundle("javax.portlet", "portlet-api").versionAsInProject(),
- mavenBundle("com.google.guava", "guava").versionAsInProject(),
- mavenBundle("org.opendaylight.ovsdb", "utils.servicehelper").versionAsInProject(),
- mavenBundle("org.opendaylight.ovsdb", "library").versionAsInProject()
- );
- }
-
- public static Option ovsdbPluginBundles() {
- return new DefaultCompositeOption(
- mavenBundle("org.opendaylight.ovsdb", "plugin").versionAsInProject(),
- mavenBundle("org.mockito", "mockito-all").versionAsInProject()
- );
- }
-
- public static Option ovsdbDefaultSchemaBundles() {
- return new DefaultCompositeOption(
- mavenBundle("org.opendaylight.ovsdb", "schema.openvswitch").versionAsInProject(),
- mavenBundle("org.opendaylight.ovsdb", "schema.hardwarevtep").versionAsInProject()
- );
- }
-
- public static Option mdsalBundles() {
- return new DefaultCompositeOption(
- TestHelper.configMinumumBundles(),
- TestHelper.baseModelBundles(),
- TestHelper.flowCapableModelBundles(),
- TestHelper.junitAndMockitoBundles(),
- TestHelper.bindingAwareSalBundles()
- );
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Red Hat, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Authors : Madhu Venugopal, Sam Hague
- */
-package org.opendaylight.ovsdb.integrationtest;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeoutException;
-
-import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
-import org.opendaylight.ovsdb.plugin.api.ConnectionConstants;
-import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
-
-import org.junit.Rule;
-import org.junit.rules.TestRule;
-import org.junit.rules.TestWatcher;
-import org.junit.runner.Description;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class OvsdbIntegrationTestBase {
- private static final Logger LOG = LoggerFactory.getLogger(OvsdbIntegrationTestBase.class);
- protected final static String IDENTIFIER = "TEST";
- protected final static String SERVER_IPADDRESS = "ovsdbserver.ipaddress";
- protected final static String SERVER_PORT = "ovsdbserver.port";
- protected final static String CONNECTION_TYPE = "ovsdbserver.connection";
- protected final static String CONNECTION_TYPE_ACTIVE = "active";
- protected final static String CONNECTION_TYPE_PASSIVE = "passive";
- protected final static int CONNECTION_INIT_TIMEOUT = 10000;
- protected final static String DEFAULT_SERVER_PORT = "6640";
-
- private static boolean bundlesReady = false;
-
- public Properties loadProperties() {
- return System.getProperties();
- }
-
- public Node getPluginTestConnection() throws IOException, InterruptedException, ExecutionException, TimeoutException {
- Properties props = loadProperties();
- String addressStr = props.getProperty(SERVER_IPADDRESS);
- String portStr = props.getProperty(SERVER_PORT, DEFAULT_SERVER_PORT);
- String connectionType = props.getProperty(CONNECTION_TYPE, "active");
- Node node = null;
-
- OvsdbConnectionService
- connection = (OvsdbConnectionService)ServiceHelper.getGlobalInstance(OvsdbConnectionService.class, this);
- // If the connection type is active, controller connects to the ovsdb-server
- if (connectionType.equalsIgnoreCase(CONNECTION_TYPE_ACTIVE)) {
- if (addressStr == null) {
- fail(usage());
- }
-
- Map<ConnectionConstants, String> params = new HashMap<>();
- params.put(ConnectionConstants.ADDRESS, addressStr);
- params.put(ConnectionConstants.PORT, portStr);
- node = connection.connect(IDENTIFIER, params);
- } else if (connectionType.equalsIgnoreCase(CONNECTION_TYPE_PASSIVE)) {
- // Wait for CONNECTION_INIT_TIMEOUT for the Passive connection to be initiated by the ovsdb-server.
- Thread.sleep(CONNECTION_INIT_TIMEOUT);
- List<Node> nodes = connection.getNodes();
- assertNotNull(nodes);
- assertTrue(nodes.size() > 0);
- node = nodes.get(0);
- }
-
- if (node != null) {
- LOG.info("getPluginTestConnection: Successfully connected to {}", node);
- } else {
- fail("Connection parameter (" + CONNECTION_TYPE + ") must be active or passive");
- }
- return node;
- }
-
- protected String usage() {
- return "Integration Test needs a valid connection configuration as follows :\n" +
- "active connection : mvn -Pintegrationtest -Dovsdbserver.ipaddress=x.x.x.x -Dovsdbserver.port=yyyy verify\n"+
- "passive connection : mvn -Pintegrationtest -Dovsdbserver.connection=passive verify\n";
- }
-
- public String stateToString(int state) {
- switch (state) {
- case Bundle.ACTIVE:
- return "ACTIVE";
- case Bundle.INSTALLED:
- return "INSTALLED";
- case Bundle.RESOLVED:
- return "RESOLVED";
- case Bundle.UNINSTALLED:
- return "UNINSTALLED";
- default:
- return "Not CONVERTED";
- }
- }
-
- public void areWeReady(BundleContext bc) throws InterruptedException {
- if (bundlesReady) {
- LOG.info("Bundles already loaded");
- return;
- }
- assertNotNull(bc);
- boolean debugit = false;
- Bundle b[] = bc.getBundles();
- for (Bundle element : b) {
- int state = element.getState();
- if (state != Bundle.ACTIVE && state != Bundle.RESOLVED) {
- LOG.info("Bundle:" + element.getSymbolicName() + " state:"
- + stateToString(state));
- debugit = true;
- }
- }
- if (debugit) {
- LOG.debug("Do some debugging because some bundle is unresolved");
- Thread.sleep(600000);
- }
-
- // Assert if true, if false we are good to go!
- assertFalse("There is a problem with loading the bundles.", debugit);
- bundlesReady = true;
- LOG.info("Bundles loaded");
- }
-
- /*
- * Method adds a log as each test method starts and finishes. This is useful when
- * the test suite is used because the suites only print a final summary.
- */
- @Rule
- public TestRule watcher = new TestWatcher() {
- @Override
- protected void starting(Description description) {
- LOG.info("TestWatcher: Starting test: {}",
- description.getDisplayName());
- }
-
- @Override
- protected void finished(Description description) {
- LOG.info("TestWatcher: Finished test: {}", description.getDisplayName());
- }
- };
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Red Hat, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Authors : Madhu Venugopal
- */
-package org.opendaylight.ovsdb.integrationtest.plugin;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.ops4j.pax.exam.CoreOptions.options;
-import static org.ops4j.pax.exam.CoreOptions.propagateSystemProperty;
-import static org.ops4j.pax.exam.CoreOptions.systemProperty;
-
-import org.junit.After;
-import org.junit.Ignore;
-import org.opendaylight.ovsdb.integrationtest.ConfigurationBundles;
-import org.opendaylight.ovsdb.integrationtest.OvsdbIntegrationTestBase;
-import org.opendaylight.ovsdb.lib.OvsdbClient;
-import org.opendaylight.ovsdb.lib.OvsdbConnectionInfo;
-import org.opendaylight.ovsdb.lib.notation.Row;
-import org.opendaylight.ovsdb.plugin.api.Connection;
-import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
-import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
-import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
-import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryService;
-import org.opendaylight.ovsdb.plugin.api.Status;
-import org.opendaylight.ovsdb.plugin.api.StatusWithUuid;
-import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
-import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
-import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Sets;
-
-import org.apache.felix.dm.Component;
-import org.apache.felix.dm.DependencyManager;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.ops4j.pax.exam.Configuration;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.PaxExam;
-import org.ops4j.pax.exam.util.PathUtils;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentMap;
-
-import javax.inject.Inject;
-
-@Ignore
-@RunWith(PaxExam.class)
-public class OvsdbPluginIT extends OvsdbIntegrationTestBase {
- private static final Logger LOG = LoggerFactory.getLogger(OvsdbPluginIT.class);
- @Inject
- private BundleContext bc;
- private OvsdbConfigurationService ovsdbConfigurationService = null;
-
- @Inject
- private OvsdbInventoryService ovsdbInventoryService;
-
- private Node node = null;
- private OvsdbClient client = null;
-
- // Configure the OSGi container
- @Configuration
- public Option[] config() {
- return options(
- //
- systemProperty("logback.configurationFile").value(
- "file:" + PathUtils.getBaseDir()
- + "/src/test/resources/logback.xml"
- ),
- // To start OSGi console for inspection remotely
- systemProperty("osgi.console").value("2401"),
-
- propagateSystemProperty("ovsdbserver.ipaddress"),
- propagateSystemProperty("ovsdbserver.port"),
-
- ConfigurationBundles.mdsalBundles(),
- ConfigurationBundles.controllerBundles(),
- ConfigurationBundles.ovsdbLibraryBundles(),
- ConfigurationBundles.ovsdbDefaultSchemaBundles(),
- ConfigurationBundles.ovsdbPluginBundles()
- );
- }
-
- @Before
- public void areWeReady() throws InterruptedException {
- assertNotNull(bc);
- boolean debugit = false;
- Bundle b[] = bc.getBundles();
- for (Bundle element : b) {
- int state = element.getState();
- if (state != Bundle.ACTIVE && state != Bundle.RESOLVED) {
- LOG.info("Bundle: {} state: {}", element.getSymbolicName(), stateToString(state));
- debugit = true;
- }
- }
- if (debugit) {
- LOG.debug("Do some debugging because some bundle is unresolved");
- }
-
- assertFalse(debugit);
- try {
- node = getPluginTestConnection();
- } catch (Exception e) {
- fail("Exception : "+e.getMessage());
- }
- this.ovsdbConfigurationService = (OvsdbConfigurationService)ServiceHelper.getGlobalInstance(OvsdbConfigurationService.class, this);
- }
-
- @Test
- public void apiTests() throws Exception {
- Thread.sleep(5000);
- OvsdbConnectionService
- connectionService = (OvsdbConnectionService)ServiceHelper.getGlobalInstance(OvsdbConnectionService.class, this);
-
- // Check for the ovsdb Connection as seen by the Plugin layer
- assertNotNull(connectionService.getNodes());
- assertTrue(connectionService.getNodes().size() > 0);
- Node node = connectionService.getNodes().get(0);
- Connection connection = connectionService.getConnection(node);
- OvsdbConnectionInfo connectionInfo = connection.getClient().getConnectionInfo();
- String identifier = IDENTIFIER;
- if (connectionInfo.getType().equals(OvsdbConnectionInfo.ConnectionType.PASSIVE)) {
- identifier = connectionInfo.getRemoteAddress().getHostAddress()+":"+connectionInfo.getRemotePort();
- }
- assertEquals(node, connectionService.getNode("OVS|" + identifier));
- System.out.println("Nodes = "+ connectionService.getNodes());
- /*
- * Test sequence :
- * 1. Print Cache and Assert to make sure the bridge is not created yet.
- * 2. Create a bridge with a valid parent_uuid & Assert to make sure the return status is success.
- * 3. Assert to make sure the bridge is created with a valid Uuid.
- * 4. Delete the bridge & Assert to make sure the return status is success.
- * 5. Assert to make sure the bridge is deleted
- */
-
- this.endToEndApiTest(connection, getOpenVSwitchTableUUID(connection));
-
- /*
- * Repeat all of the above tests without the parent_uuid
- */
-
- this.endToEndApiTest(connection, null);
- }
-
- @Test
- public void testInventoryListeners() throws UnknownHostException {
- DependencyManager dm = new DependencyManager(bc);
-
- OvsdbInventoryListener listenerA = Mockito.mock(FakeListener.class);
- OvsdbInventoryListener listenerB = Mockito.mock(FakeListener.class);
-
- Component componentA = dm.createComponent();
- componentA.setInterface(OvsdbInventoryListener.class.getName(), null);
- componentA.setImplementation(listenerA);
- dm.add(componentA);
-
- Component componentB = dm.createComponent();
- componentB.setInterface(OvsdbInventoryListener.class.getName(), null);
- componentB.setImplementation(listenerB);
- dm.add(componentB);
-
- NodeId nodeId = new NodeId("OVS|10.10.10.10:65342");
- NodeKey nodeKey = new NodeKey(nodeId);
- node = new NodeBuilder()
- .setId(nodeId)
- .setKey(nodeKey)
- .build();
- InetAddress address = InetAddress.getByName("10.10.10.10");
- int port = 65342;
-
- // Trigger event
- ovsdbInventoryService.notifyNodeAdded(node, address, port);
-
- Mockito.verify(listenerA, Mockito.times(1)).nodeAdded(node, address, port);
- Mockito.verify(listenerB, Mockito.times(1)).nodeAdded(node, address, port);
-
- dm.remove(componentA);
- dm.remove(componentB);
-
- }
-
- @Test
- public void testSetOFControllers() throws Exception {
- Thread.sleep(5000);
- OvsdbConnectionService
- connectionService = (OvsdbConnectionService)ServiceHelper.getGlobalInstance(OvsdbConnectionService.class, this);
-
- // 1. Check for the ovsdb Connection as seen by the Plugin layer
- assertNotNull(connectionService.getNodes());
- assertTrue(connectionService.getNodes().size() > 0);
- Node node = connectionService.getNodes().get(0);
- Connection connection = connectionService.getConnection(node);
- assertNotNull(connection);
-
- // 2. Create a bridge with a valid parent_uuid & Assert to make sure the return status is success.
- final StatusWithUuid status = insertBridge(connection, getOpenVSwitchTableUUID(connection));
- assertTrue(status.isSuccess());
-
- // Thread.sleep(3000); // wait for _real_ controller to be added to bridge... or not (see below **)
-
- // 3. Test against bug 960: Add same controller multiple times and make sure we do not end up with duplicates.
- ovsdbConfigurationService.setOFController(node, status.getUuid().toString());
- ovsdbConfigurationService.setOFController(node, status.getUuid().toString());
- ovsdbConfigurationService.setOFController(node, status.getUuid().toString());
- ovsdbConfigurationService.setOFController(node, status.getUuid().toString());
-
- Row bridgeRow = ovsdbConfigurationService.getRow(node,
- ovsdbConfigurationService.getTableName(node, Bridge.class),
- status.getUuid().toString());
- assertNotNull(bridgeRow);
- Bridge bridge = ovsdbConfigurationService.getTypedRow(node, Bridge.class, bridgeRow);
- assertTrue(bridge.getUuid().equals(status.getUuid()));
-
- final int currControllersSize = bridge.getControllerColumn().getData().size();
-
- LOG.debug("Bridge has {} controllers", currControllersSize);
-
- // ** Note: we assert against 2 or less -- instead of 1 -- to account for the _real_ controller's connection
- assertTrue( "Too few controllers added to bridge object. Is this bug 960?", currControllersSize >= 1 );
- assertTrue( "Too many controllers added to bridge object. Is this bug 960?", currControllersSize <= 2 );
-
- // Removal of bridge created in this test is done via tearDown(). It is done that way, so cleanup is ran
- // even if test fails.
- }
-
- @After
- public void tearDown() throws InterruptedException {
- Thread.sleep(5000);
- OvsdbConnectionService
- connectionService = (OvsdbConnectionService)ServiceHelper.getGlobalInstance(OvsdbConnectionService.class, this);
-
- if (connectionService.getNodes() == null) {
- return; // no nodes: noop
- }
-
- int bridgesRemoved = 0;
- List<Node> nodes = connectionService.getNodes();
- for (Node node : nodes) {
- Map<String, Row> bridgeRows =
- ovsdbConfigurationService.getRows(node, ovsdbConfigurationService.getTableName(node, Bridge.class));
- if (bridgeRows == null) {
- continue;
- }
- for (Row bridgeRow : bridgeRows.values()) {
- Bridge bridge = ovsdbConfigurationService.getTypedRow(node, Bridge.class, bridgeRow);
- LOG.trace("Test clean up removing Bridge {}", bridge.getUuid());
- Status delStatus = ovsdbConfigurationService.deleteRow(node,
- bridge.getSchema().getName(),
- bridge.getUuid().toString());
- assertTrue(delStatus.isSuccess());
- bridgesRemoved++;
- }
- }
-
- if (bridgesRemoved > 0) {
- LOG.debug("Test clean up removed {} bridges", bridgesRemoved);
- Thread.sleep(2000); // TODO : Remove this Sleep once the Select operation is resolved.
- }
- }
-
- public void endToEndApiTest(Connection connection, String parentUuid) throws Exception {
- // 1. Print Cache and Assert to make sure the bridge is not created yet.
- printCache();
-
- // 2. Create a bridge with a valid parent_uuid & Assert to make sure the return status is success.
- StatusWithUuid status = insertBridge(connection, parentUuid);
- assertTrue(status.isSuccess());
-
- Thread.sleep(2000); // TODO : Remove this Sleep once the Select operation is resolved.
-
- // 3. Assert to make sure the bridge is created with a valid Uuid.
- printCache();
- Bridge bridge = connection.getClient().getTypedRowWrapper(Bridge.class, null);
- Row bridgeRow = ovsdbConfigurationService.getRow(node, bridge.getSchema().getName(), status.getUuid().toString());
- assertNotNull(bridgeRow);
- bridge = connection.getClient().getTypedRowWrapper(Bridge.class, bridgeRow);
- assertEquals(bridge.getUuid(), status.getUuid());
-
- // 4. Delete the bridge & Assert to make sure the return status is success.
- Status delStatus = ovsdbConfigurationService.deleteRow(node, bridge.getSchema().getName(), status.getUuid().toString());
- assertTrue(delStatus.isSuccess());
- Thread.sleep(2000); // TODO : Remove this Sleep once the Select operation is resolved.
-
- // 5. Assert to make sure the bridge is deleted
- bridgeRow = ovsdbConfigurationService.getRow(node, bridge.getSchema().getName(), status.getUuid().toString());
- assertNull(bridgeRow);
- }
-
- public StatusWithUuid insertBridge(Connection connection, String parentUuid) throws Exception {
- Bridge bridge = connection.getClient().createTypedRowWrapper(Bridge.class);
- bridge.setName("br_test1");
- bridge.setStatus(ImmutableMap.of("key", "value"));
- bridge.setFloodVlans(Sets.newHashSet(34L));
- return ovsdbConfigurationService.insertRow(node, bridge.getSchema().getName(), parentUuid, bridge.getRow());
- }
-
- public String getOpenVSwitchTableUUID(Connection connection) throws Exception {
- OpenVSwitch openVSwitch = connection.getClient().getTypedRowWrapper(OpenVSwitch.class, null);
- ConcurrentMap<String, Row> row = ovsdbConfigurationService.getRows(node, openVSwitch.getSchema().getName());
- if (row == null || row.size() == 0) {
- return null;
- }
- return (String)row.keySet().toArray()[0];
- }
-
- public void printCache() throws Exception {
- List<String> tables = ovsdbConfigurationService.getTables(node);
- System.out.println("Tables = "+tables);
- assertNotNull(tables);
- for (String table : tables) {
- System.out.println("Table "+table);
- ConcurrentMap<String,Row> row = ovsdbConfigurationService.getRows(node, table);
- System.out.println(row);
- }
- }
-
- public class FakeListener implements OvsdbInventoryListener {
-
- @Override
- public void nodeAdded(Node node, InetAddress address, int port) {
-
- }
-
- @Override
- public void nodeRemoved(Node node) {
-
- }
-
- @Override
- public void rowAdded(Node node, String tableName, String uuid, Row row) {
-
- }
-
- @Override
- public void rowUpdated(Node node, String tableName, String uuid, Row old, Row row) {
-
- }
-
- @Override
- public void rowRemoved(Node node, String tableName, String uuid, Row row, Object context) {
-
- }
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Red Hat, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Authors : Madhu Venugopal
- */
-package org.opendaylight.ovsdb.integrationtest.plugin;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.ops4j.pax.exam.CoreOptions.options;
-import static org.ops4j.pax.exam.CoreOptions.propagateSystemProperty;
-import static org.ops4j.pax.exam.CoreOptions.systemProperty;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.List;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-
-import javax.inject.Inject;
-
-import org.apache.felix.dm.Component;
-import org.apache.felix.dm.DependencyManager;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.opendaylight.ovsdb.integrationtest.ConfigurationBundles;
-import org.opendaylight.ovsdb.integrationtest.OvsdbIntegrationTestBase;
-import org.opendaylight.ovsdb.lib.OvsdbClient;
-import org.opendaylight.ovsdb.lib.OvsdbConnectionInfo;
-import org.opendaylight.ovsdb.lib.notation.Row;
-import org.opendaylight.ovsdb.lib.notation.UUID;
-import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
-import org.opendaylight.ovsdb.plugin.api.Connection;
-import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
-import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
-import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
-import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryService;
-import org.opendaylight.ovsdb.plugin.api.StatusCode;
-import org.opendaylight.ovsdb.plugin.api.StatusWithUuid;
-import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
-import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
-import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
-import org.ops4j.pax.exam.Configuration;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.PaxExam;
-import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
-import org.ops4j.pax.exam.spi.reactors.PerSuite;
-import org.ops4j.pax.exam.util.PathUtils;
-import org.osgi.framework.BundleContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Sets;
-
-@Ignore
-@RunWith(PaxExam.class)
-@ExamReactorStrategy(PerSuite.class)
-public class OvsdbPluginV3IT extends OvsdbIntegrationTestBase {
- private static final Logger LOG = LoggerFactory.getLogger(OvsdbPluginV3IT.class);
- @Inject
- private BundleContext bc;
- private OvsdbConfigurationService ovsdbConfigurationService = null;
- private String databaseName = "Open_vSwitch";
-
- @Inject
- private OvsdbInventoryService ovsdbInventoryService;
-
- private Node node = null;
- private OvsdbClient client = null;
-
- // Configure the OSGi container
- @Configuration
- public Option[] config() {
- return options(
- //
- systemProperty("logback.configurationFile").value(
- "file:" + PathUtils.getBaseDir()
- + "/src/test/resources/logback.xml"
- ),
- // To start OSGi console for inspection remotely
- systemProperty("osgi.console").value("2401"),
-
- propagateSystemProperty("ovsdbserver.ipaddress"),
- propagateSystemProperty("ovsdbserver.port"),
-
- ConfigurationBundles.mdsalBundles(),
- ConfigurationBundles.controllerBundles(),
- ConfigurationBundles.ovsdbLibraryBundles(),
- ConfigurationBundles.ovsdbDefaultSchemaBundles(),
- ConfigurationBundles.ovsdbPluginBundles()
- );
- }
-
- @Before
- public void setUp () throws ExecutionException, InterruptedException, IOException {
- areWeReady(bc);
- }
-
- public void getConnection () throws InterruptedException {
- try {
- node = getPluginTestConnection();
- } catch (Exception e) {
- fail("Exception : "+e.getMessage());
- }
- this.ovsdbConfigurationService = (OvsdbConfigurationService)ServiceHelper.getGlobalInstance(OvsdbConfigurationService.class, this);
- }
-
- @Test
- public void apiTests() throws Exception {
- getConnection();
- assertNotNull("Node should not be null", node);
- assertNotNull("OvsdbConfigurationService should not be null", ovsdbConfigurationService);
-
- Thread.sleep(1000);
- OvsdbConnectionService
- connectionService = (OvsdbConnectionService)ServiceHelper.getGlobalInstance(OvsdbConnectionService.class, this);
-
- // Check for the ovsdb Connection as seen by the Plugin layer
- assertNotNull(connectionService.getNodes());
- assertTrue(connectionService.getNodes().size() > 0);
- Node node = connectionService.getNodes().get(0);
- Connection connection = connectionService.getConnection(node);
- OvsdbConnectionInfo connectionInfo = connection.getClient().getConnectionInfo();
- String identifier = IDENTIFIER;
- if (connectionInfo.getType().equals(OvsdbConnectionInfo.ConnectionType.PASSIVE)) {
- identifier = connectionInfo.getRemoteAddress().getHostAddress()+":"+connectionInfo.getRemotePort();
- }
- assertEquals(node, connectionService.getNode("OVS|" + identifier));
- LOG.info("Nodes = {}", connectionService.getNodes());
- /*
- * Test sequence :
- * 1. Print Cache and Assert to make sure the bridge is not created yet.
- * 2. Create a bridge with a valid parent_uuid & Assert to make sure the return status is success.
- * 3. Assert to make sure the bridge is created with a valid Uuid.
- * 4. Delete the bridge & Assert to make sure the return status is success.
- * 5. Assert to make sure the bridge is deleted
- */
-
- this.endToEndApiTest(connection, getOpenVSwitchTableUUID(connection));
- }
-
- @Test
- public void testInventoryListeners() throws UnknownHostException {
- DependencyManager dm = new DependencyManager(bc);
-
- OvsdbInventoryListener listenerA = Mockito.mock(FakeListener.class);
- OvsdbInventoryListener listenerB = Mockito.mock(FakeListener.class);
-
- Component componentA = dm.createComponent();
- componentA.setInterface(OvsdbInventoryListener.class.getName(), null);
- componentA.setImplementation(listenerA);
- dm.add(componentA);
-
- Component componentB = dm.createComponent();
- componentB.setInterface(OvsdbInventoryListener.class.getName(), null);
- componentB.setImplementation(listenerB);
- dm.add(componentB);
-
- NodeId nodeId = new NodeId("OVS|10.10.10.10:65342");
- NodeKey nodeKey = new NodeKey(nodeId);
- node = new NodeBuilder()
- .setId(nodeId)
- .setKey(nodeKey)
- .build();
-
- InetAddress address = InetAddress.getByName("10.10.10.10");
- int port = 65342;
-
- // Trigger event
- ovsdbInventoryService.notifyNodeAdded(node, address, port);
-
- Mockito.verify(listenerA, Mockito.times(1)).nodeAdded(node, address, port);
- Mockito.verify(listenerB, Mockito.times(1)).nodeAdded(node, address, port);
-
- dm.remove(componentA);
- dm.remove(componentB);
- }
-
- public void endToEndApiTest(Connection connection, String parentUuid) throws Exception {
- // 1. Print Cache and Assert to make sure the bridge is not created yet.
- printCache();
-
- // 2. Create a bridge with a valid parent_uuid & Assert to make sure the return status is success.
- StatusWithUuid status = insertBridge(connection, parentUuid);
- assertTrue(status.isSuccess());
-
- // 3. Assert to make sure the bridge is created with a valid Uuid.
- printCache();
- Bridge bridge = connection.getClient().getTypedRowWrapper(Bridge.class, null);
- Row bridgeRow = ovsdbConfigurationService.getRow(node, databaseName, bridge.getSchema().getName(), status.getUuid());
- assertNotNull(bridgeRow);
- bridge = connection.getClient().getTypedRowWrapper(Bridge.class, bridgeRow);
- LOG.info("Bridge UUID {} Status Uuid {}", bridge.getUuid(), status.getUuid());
- assertEquals(bridge.getUuid(), status.getUuid());
-
- bridge = connection.getClient().createTypedRowWrapper(Bridge.class);
- bridge.setDatapathType("netdev");
- try {
- ovsdbConfigurationService.updateRow(node, databaseName, bridge.getSchema().getName(), status.getUuid(), bridge.getRow(), false);
- } catch (Exception e) {
- fail("Failed to updated Bridge "+e.getMessage());
- }
-
- // 4. Delete the bridge & Assert to make sure the return status is success.
- try {
- ovsdbConfigurationService.deleteRow(node, databaseName, bridge.getSchema().getName(), null, new UUID(parentUuid) ,null, status.getUuid());
- } catch (Exception e) {
- fail(e.getMessage());
- }
-
- // 5. Assert to make sure the bridge is deleted
- bridgeRow = ovsdbConfigurationService.getRow(node, databaseName, bridge.getSchema().getName(), status.getUuid());
- assertNull(bridgeRow);
- }
-
- public StatusWithUuid insertBridge(Connection connection, String parentUuid) throws Exception {
- Bridge bridge = connection.getClient().createTypedRowWrapper(Bridge.class);
- bridge.setName("br_test1");
- bridge.setStatus(ImmutableMap.of("key", "value"));
- bridge.setFloodVlans(Sets.newHashSet(34L));
- try {
- Row<GenericTableSchema> row = ovsdbConfigurationService.insertTree(node, databaseName, bridge.getSchema().getName(), new UUID(parentUuid), bridge.getRow());
- bridge = connection.getClient().getTypedRowWrapper(Bridge.class, row);
- return new StatusWithUuid(StatusCode.SUCCESS, bridge.getUuid());
- } catch (Exception e) {
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
- }
-
- public String getOpenVSwitchTableUUID(Connection connection) throws Exception {
- OpenVSwitch openVSwitch = connection.getClient().getTypedRowWrapper(OpenVSwitch.class, null);
- ConcurrentMap<UUID, Row<GenericTableSchema>> rows = ovsdbConfigurationService.getRows(node, databaseName, openVSwitch.getSchema().getName());
- if (rows == null || rows.size() == 0) {
- return null;
- }
- return rows.keySet().toArray()[0].toString();
- }
-
- public void printCache() throws Exception {
- List<String> tables = ovsdbConfigurationService.getTables(node, databaseName);
- LOG.info("Tables = {}", tables);
- assertNotNull(tables);
- for (String table : tables) {
- LOG.info("Table {}", table);
- ConcurrentMap<UUID, Row<GenericTableSchema>> rows = ovsdbConfigurationService.getRows(node, databaseName, table);
- LOG.info(rows.toString());
- }
- }
-
- public class FakeListener implements OvsdbInventoryListener {
-
- @Override
- public void nodeAdded(Node node, InetAddress address, int port) {
-
- }
-
- @Override
- public void nodeRemoved(Node node) {
-
- }
-
- @Override
- public void rowAdded(Node node, String tableName, String uuid, Row row) {
-
- }
-
- @Override
- public void rowUpdated(Node node, String tableName, String uuid, Row old, Row row) {
-
- }
-
- @Override
- public void rowRemoved(Node node, String tableName, String uuid, Row row, Object context) {
-
- }
- }
-
-}
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Copyright (C) 2014 Red Hat, Inc. and others. All rights reserved.
-
-This program and the accompanying materials are made available under the
-terms of the Eclipse Public License v1.0 which accompanies this distribution,
-and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.opendaylight.ovsdb</groupId>
- <artifactId>commons</artifactId>
- <version>1.4.0-SNAPSHOT</version>
- <relativePath>../commons/parent</relativePath>
- </parent>
-
- <artifactId>plugin-shell</artifactId>
- <version>1.2.1-SNAPSHOT</version>
- <packaging>bundle</packaging>
- <description>The OVSDB Plugin integration project is a project for OpenDaylight that will implement the Open vSwitch Database RFC 7047 management protocol allowing the Southbound configuration of vSwitches and a network virtualization implementation.</description>
- <url>https://wiki.opendaylight.org/view/OVSDB_Integration:Main</url>
- <licenses>
- <license>
- <name>Eclipse Public License v1.0</name>
- <url>http://www.eclipse.org/legal/epl-v10.html</url>
- </license>
- </licenses>
- <developers>
- <developer>
- <name>Sam Hague</name>
- <email>shague@gmail.com</email>
- <url>https://github.com/shague</url>
- </developer>
- </developers>
- <scm>
- <connection>scm:git:ssh://git.opendaylight.org:29418/ovsdb.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/ovsdb.git</developerConnection>
- <tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OVSDB_Integration:Main</url>
- </scm>
-
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.karaf.shell</groupId>
- <artifactId>org.apache.karaf.shell.console</artifactId>
- <version>${karaf.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.ovsdb</groupId>
- <artifactId>library</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.ovsdb</groupId>
- <artifactId>plugin</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller.model</groupId>
- <artifactId>model-inventory</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <version>2.4.0</version>
- <extensions>true</extensions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.jacoco</groupId>
- <artifactId>jacoco-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
-</project>
+++ /dev/null
-/*
- * Copyright (c) 2013, 2015 Red Hat, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.ovsdb.plugin.shell;
-
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
-
-@Command(scope = "ovs", name = "printCache", description="Prints OVSDB Cache")
-public class PrintCache extends OsgiCommandSupport{
- private OvsdbInventoryService ovsdbInventory;
-
- @Argument(index=0, name="nodeName", description="Node Name", required=true, multiValued=false)
- String nodeName = null;
-
- @Override
- protected Object doExecute() throws Exception {
- NodeId nodeId = new NodeId(nodeName);
- NodeKey nodeKey = new NodeKey(nodeId);
- Node node = new NodeBuilder()
- .setId(nodeId)
- .setKey(nodeKey)
- .build();
- ovsdbInventory.printCache(node);
- return null;
- }
-
- public void setOvsdbInventory(OvsdbInventoryService inventoryService){
- this.ovsdbInventory = inventoryService;
- }
-}
+++ /dev/null
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
- <reference id="ovsdbInventoryRef" interface="org.opendaylight.ovsdb.plugin.api.OvsdbInventoryService"/>
- <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
- <command>
- <action class="org.opendaylight.ovsdb.plugin.shell.PrintCache">
- <property name="ovsdbInventory" ref="ovsdbInventoryRef"/>
- </action>
- </command>
- </command-bundle>
-</blueprint>
+++ /dev/null
-/*
- * Copyright (C) 2014 Red Hat, Inc.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Authors : Sam Hague
- */
-package org.opendaylight.ovsdb.plugin.shell;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.lang.reflect.Field;
-import java.util.Set;
-import org.junit.Test;
-import org.opendaylight.ovsdb.lib.notation.Column;
-import org.opendaylight.ovsdb.lib.notation.Row;
-import org.opendaylight.ovsdb.lib.notation.UUID;
-import org.opendaylight.ovsdb.lib.notation.Version;
-import org.opendaylight.ovsdb.lib.schema.ColumnSchema;
-import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
-import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
-import org.opendaylight.ovsdb.plugin.api.OvsVswitchdSchemaConstants;
-import org.opendaylight.ovsdb.plugin.impl.InventoryServiceImpl;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
-
-public class PrintCacheTest {
- private static final String NODESTRING = "OVS|10.10.10.10:65342";
- private static final String BRIDGES = "bridges";
- private static final String OVS = "OVS";
- private static final String BRIDGE = "bridge1";
- private static final String OPENVSWITCH = "Open_vSwitch";
- private static final String CACHE =
- "Database Open_vSwitch" + System.getProperty("line.separator") +
- "\tTable Open_vSwitch" + System.getProperty("line.separator") +
- "\t\t1==bridges : bridge1 " + System.getProperty("line.separator") +
- "-----------------------------------------------------------" + System.getProperty("line.separator");
-
- @Test
- public void testDoExecute () throws Exception {
- // Read in schema and create the DatabaseSchema
- InputStream resourceAsStream = PrintCacheTest.class.getResourceAsStream("test_schema.json");
- ObjectMapper mapper = new ObjectMapper();
- JsonNode jsonNode = mapper.readTree(resourceAsStream);
- DatabaseSchema schema = DatabaseSchema.fromJson("some", jsonNode.get("result"));
- assertNotNull(schema);
- assertEquals(Version.fromString("6.12.0"), schema.getVersion());
-
- // Add params to PrintCache
- PrintCache printCacheTest = new PrintCache();
- Field cNField = printCacheTest.getClass().getDeclaredField("nodeName");
- cNField.setAccessible(true);
- cNField.set(printCacheTest, NODESTRING);
- InventoryServiceImpl inventoryService = new InventoryServiceImpl();
- inventoryService.init();
- printCacheTest.setOvsdbInventory(inventoryService);
-
- // Test that an empty cache prints nothing
- // Capture the output from PrintCache and compare it to what is expected
- PrintStream originalBaos = System.out;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- System.setOut(new PrintStream(baos));
- printCacheTest.doExecute();
- assertEquals("PrintCache output does not match expected output:", "", baos.toString());
-
- // Add some data to the bridges row in the Open_vSwitch table
- GenericTableSchema ovsTable = schema.table(OPENVSWITCH, GenericTableSchema.class);
- ColumnSchema<GenericTableSchema, Set<UUID>> bridges = ovsTable.multiValuedColumn(BRIDGES, UUID.class);
- Column column = new Column(bridges, new UUID(BRIDGE).toString());
- Row row = new Row(ovsTable);
- row.addColumn(BRIDGES, column);
-
- NodeId nodeId = new NodeId(NODESTRING);
- NodeKey nodeKey = new NodeKey(nodeId);
- Node node = new NodeBuilder()
- .setId(nodeId)
- .setKey(nodeKey)
- .build();
- inventoryService.updateRow(node, OvsVswitchdSchemaConstants.DATABASE_NAME, OPENVSWITCH, new UUID("1").toString(), row);
-
- // Test that a populated cache is printed correctly
- // Capture the output from PrintCache and compare it to what is expected
- printCacheTest.doExecute();
- System.setOut(originalBaos);
- assertEquals("PrintCache output does not match expected output:", CACHE, baos.toString());
- }
-}
+++ /dev/null
-{
- "id": 0,
- "result": {
- "tables": {
- "Port": {
- "columns": {
- "name": {
- "mutable": false,
- "type": "string"
- },
- "statistics": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0,
- "value": "integer",
- "max": "unlimited"
- }
- },
- "vlan_mode": {
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "access",
- "native-tagged",
- "native-untagged",
- "trunk"
- ]
- ]
- },
- "min": 0
- }
- },
- "qos": {
- "type": {
- "key": {
- "type": "uuid",
- "refTable": "QoS"
- },
- "min": 0
- }
- },
- "status": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "trunks": {
- "type": {
- "key": {
- "maxInteger": 4095,
- "minInteger": 0,
- "type": "integer"
- },
- "min": 0,
- "max": 4096
- }
- },
- "mac": {
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "interfaces": {
- "type": {
- "key": {
- "type": "uuid",
- "refTable": "Interface"
- },
- "max": "unlimited"
- }
- },
- "bond_downdelay": {
- "type": "integer"
- },
- "bond_mode": {
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "active-backup",
- "balance-slb",
- "balance-tcp",
- "stable"
- ]
- ]
- },
- "min": 0
- }
- },
- "bond_updelay": {
- "type": "integer"
- },
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "other_config": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "tag": {
- "type": {
- "key": {
- "maxInteger": 4095,
- "minInteger": 0,
- "type": "integer"
- },
- "min": 0
- }
- },
- "bond_fake_iface": {
- "type": "boolean"
- },
- "fake_bridge": {
- "type": "boolean"
- },
- "lacp": {
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "active",
- "off",
- "passive"
- ]
- ]
- },
- "min": 0
- }
- }
- },
- "indexes": [
- [
- "name"
- ]
- ]
- },
- "Manager": {
- "columns": {
- "is_connected": {
- "ephemeral": true,
- "type": "boolean"
- },
- "target": {
- "type": "string"
- },
- "other_config": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "max_backoff": {
- "type": {
- "key": {
- "minInteger": 1000,
- "type": "integer"
- },
- "min": 0
- }
- },
- "connection_mode": {
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "in-band",
- "out-of-band"
- ]
- ]
- },
- "min": 0
- }
- },
- "status": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "inactivity_probe": {
- "type": {
- "key": "integer",
- "min": 0
- }
- }
- },
- "indexes": [
- [
- "target"
- ]
- ]
- },
- "Bridge": {
- "columns": {
- "name": {
- "mutable": false,
- "type": "string"
- },
- "flood_vlans": {
- "type": {
- "key": {
- "maxInteger": 4095,
- "minInteger": 0,
- "type": "integer"
- },
- "min": 0,
- "max": 4096
- }
- },
- "netflow": {
- "type": {
- "key": {
- "type": "uuid",
- "refTable": "NetFlow"
- },
- "min": 0
- }
- },
- "mirrors": {
- "type": {
- "key": {
- "type": "uuid",
- "refTable": "Mirror"
- },
- "min": 0,
- "max": "unlimited"
- }
- },
- "status": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "datapath_id": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "controller": {
- "type": {
- "key": {
- "type": "uuid",
- "refTable": "Controller"
- },
- "min": 0,
- "max": "unlimited"
- }
- },
- "protocols": {
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "OpenFlow10",
- "OpenFlow12",
- "OpenFlow13"
- ]
- ]
- },
- "min": 0,
- "max": "unlimited"
- }
- },
- "fail_mode": {
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "secure",
- "standalone"
- ]
- ]
- },
- "min": 0
- }
- },
- "ports": {
- "type": {
- "key": {
- "type": "uuid",
- "refTable": "Port"
- },
- "min": 0,
- "max": "unlimited"
- }
- },
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "flow_tables": {
- "type": {
- "key": {
- "maxInteger": 254,
- "minInteger": 0,
- "type": "integer"
- },
- "min": 0,
- "value": {
- "type": "uuid",
- "refTable": "Flow_Table"
- },
- "max": "unlimited"
- }
- },
- "sflow": {
- "type": {
- "key": {
- "type": "uuid",
- "refTable": "sFlow"
- },
- "min": 0
- }
- },
- "datapath_type": {
- "type": "string"
- },
- "other_config": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "stp_enable": {
- "type": "boolean"
- }
- },
- "indexes": [
- [
- "name"
- ]
- ]
- },
- "Interface": {
- "columns": {
- "options": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "name": {
- "mutable": false,
- "type": "string"
- },
- "statistics": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0,
- "value": "integer",
- "max": "unlimited"
- }
- },
- "link_speed": {
- "ephemeral": true,
- "type": {
- "key": "integer",
- "min": 0
- }
- },
- "mtu": {
- "ephemeral": true,
- "type": {
- "key": "integer",
- "min": 0
- }
- },
- "mac_in_use": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "type": {
- "type": "string"
- },
- "ingress_policing_rate": {
- "type": {
- "key": {
- "minInteger": 0,
- "type": "integer"
- }
- }
- },
- "cfm_remote_opstate": {
- "ephemeral": true,
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "down",
- "up"
- ]
- ]
- },
- "min": 0
- }
- },
- "status": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "mac": {
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "ofport": {
- "type": {
- "key": "integer",
- "min": 0
- }
- },
- "cfm_fault_status": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0,
- "max": "unlimited"
- }
- },
- "duplex": {
- "ephemeral": true,
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "full",
- "half"
- ]
- ]
- },
- "min": 0
- }
- },
- "lacp_current": {
- "ephemeral": true,
- "type": {
- "key": "boolean",
- "min": 0
- }
- },
- "cfm_fault": {
- "ephemeral": true,
- "type": {
- "key": "boolean",
- "min": 0
- }
- },
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "other_config": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "admin_state": {
- "ephemeral": true,
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "down",
- "up"
- ]
- ]
- },
- "min": 0
- }
- },
- "link_state": {
- "ephemeral": true,
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "down",
- "up"
- ]
- ]
- },
- "min": 0
- }
- },
- "cfm_remote_mpids": {
- "ephemeral": true,
- "type": {
- "key": "integer",
- "min": 0,
- "max": "unlimited"
- }
- },
- "cfm_mpid": {
- "type": {
- "key": "integer",
- "min": 0
- }
- },
- "ofport_request": {
- "type": {
- "key": {
- "maxInteger": 65279,
- "minInteger": 1,
- "type": "integer"
- },
- "min": 0
- }
- },
- "ingress_policing_burst": {
- "type": {
- "key": {
- "minInteger": 0,
- "type": "integer"
- }
- }
- },
- "cfm_health": {
- "ephemeral": true,
- "type": {
- "key": {
- "maxInteger": 100,
- "minInteger": 0,
- "type": "integer"
- },
- "min": 0
- }
- },
- "link_resets": {
- "ephemeral": true,
- "type": {
- "key": "integer",
- "min": 0
- }
- }
- },
- "indexes": [
- [
- "name"
- ]
- ]
- },
- "SSL": {
- "columns": {
- "ca_cert": {
- "type": "string"
- },
- "private_key": {
- "type": "string"
- },
- "bootstrap_ca_cert": {
- "type": "boolean"
- },
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "certificate": {
- "type": "string"
- }
- },
- "maxRows": 1
- },
- "Open_vSwitch": {
- "columns": {
- "ovs_version": {
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "system_version": {
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "bridges": {
- "type": {
- "key": {
- "type": "uuid",
- "refTable": "Bridge"
- },
- "min": 0,
- "max": "unlimited"
- }
- },
- "statistics": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "other_config": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "next_cfg": {
- "type": "integer"
- },
- "manager_options": {
- "type": {
- "key": {
- "type": "uuid",
- "refTable": "Manager"
- },
- "min": 0,
- "max": "unlimited"
- }
- },
- "system_type": {
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "ssl": {
- "type": {
- "key": {
- "type": "uuid",
- "refTable": "SSL"
- },
- "min": 0
- }
- },
- "db_version": {
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "cur_cfg": {
- "type": "integer"
- }
- },
- "maxRows": 1,
- "isRoot": true
- },
- "Queue": {
- "columns": {
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "other_config": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "dscp": {
- "type": {
- "key": {
- "maxInteger": 63,
- "minInteger": 0,
- "type": "integer"
- },
- "min": 0
- }
- }
- },
- "isRoot": true
- },
- "NetFlow": {
- "columns": {
- "engine_type": {
- "type": {
- "key": {
- "maxInteger": 255,
- "minInteger": 0,
- "type": "integer"
- },
- "min": 0
- }
- },
- "targets": {
- "type": {
- "key": "string",
- "max": "unlimited"
- }
- },
- "add_id_to_interface": {
- "type": "boolean"
- },
- "active_timeout": {
- "type": {
- "key": {
- "minInteger": -1,
- "type": "integer"
- }
- }
- },
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "engine_id": {
- "type": {
- "key": {
- "maxInteger": 255,
- "minInteger": 0,
- "type": "integer"
- },
- "min": 0
- }
- }
- }
- },
- "Mirror": {
- "columns": {
- "name": {
- "type": "string"
- },
- "output_port": {
- "type": {
- "key": {
- "refType": "weak",
- "type": "uuid",
- "refTable": "Port"
- },
- "min": 0
- }
- },
- "output_vlan": {
- "type": {
- "key": {
- "maxInteger": 4095,
- "minInteger": 1,
- "type": "integer"
- },
- "min": 0
- }
- },
- "statistics": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0,
- "value": "integer",
- "max": "unlimited"
- }
- },
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "select_dst_port": {
- "type": {
- "key": {
- "refType": "weak",
- "type": "uuid",
- "refTable": "Port"
- },
- "min": 0,
- "max": "unlimited"
- }
- },
- "select_all": {
- "type": "boolean"
- },
- "select_vlan": {
- "type": {
- "key": {
- "maxInteger": 4095,
- "minInteger": 0,
- "type": "integer"
- },
- "min": 0,
- "max": 4096
- }
- },
- "select_src_port": {
- "type": {
- "key": {
- "refType": "weak",
- "type": "uuid",
- "refTable": "Port"
- },
- "min": 0,
- "max": "unlimited"
- }
- }
- }
- },
- "QoS": {
- "columns": {
- "queues": {
- "type": {
- "key": {
- "maxInteger": 4294967295,
- "minInteger": 0,
- "type": "integer"
- },
- "min": 0,
- "value": {
- "type": "uuid",
- "refTable": "Queue"
- },
- "max": "unlimited"
- }
- },
- "other_config": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "type": {
- "type": "string"
- }
- },
- "isRoot": true
- },
- "Controller": {
- "columns": {
- "is_connected": {
- "ephemeral": true,
- "type": "boolean"
- },
- "enable_async_messages": {
- "type": {
- "key": "boolean",
- "min": 0
- }
- },
- "controller_rate_limit": {
- "type": {
- "key": {
- "minInteger": 100,
- "type": "integer"
- },
- "min": 0
- }
- },
- "target": {
- "type": "string"
- },
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "other_config": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "local_netmask": {
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "local_gateway": {
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "max_backoff": {
- "type": {
- "key": {
- "minInteger": 1000,
- "type": "integer"
- },
- "min": 0
- }
- },
- "local_ip": {
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "connection_mode": {
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "in-band",
- "out-of-band"
- ]
- ]
- },
- "min": 0
- }
- },
- "status": {
- "ephemeral": true,
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "role": {
- "ephemeral": true,
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "master",
- "other",
- "slave"
- ]
- ]
- },
- "min": 0
- }
- },
- "inactivity_probe": {
- "type": {
- "key": "integer",
- "min": 0
- }
- },
- "controller_burst_limit": {
- "type": {
- "key": {
- "minInteger": 25,
- "type": "integer"
- },
- "min": 0
- }
- }
- }
- },
- "Flow_Table": {
- "columns": {
- "groups": {
- "type": {
- "key": "string",
- "min": 0,
- "max": "unlimited"
- }
- },
- "name": {
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "overflow_policy": {
- "type": {
- "key": {
- "type": "string",
- "enum": [
- "set",
- [
- "evict",
- "refuse"
- ]
- ]
- },
- "min": 0
- }
- },
- "flow_limit": {
- "type": {
- "key": {
- "minInteger": 0,
- "type": "integer"
- },
- "min": 0
- }
- }
- }
- },
- "sFlow": {
- "columns": {
- "polling": {
- "type": {
- "key": "integer",
- "min": 0
- }
- },
- "targets": {
- "type": {
- "key": "string",
- "max": "unlimited"
- }
- },
- "header": {
- "type": {
- "key": "integer",
- "min": 0
- }
- },
- "agent": {
- "type": {
- "key": "string",
- "min": 0
- }
- },
- "external_ids": {
- "type": {
- "key": "string",
- "min": 0,
- "value": "string",
- "max": "unlimited"
- }
- },
- "sampling": {
- "type": {
- "key": "integer",
- "min": 0
- }
- }
- }
- }
- },
- "cksum": "2180939265 17455",
- "name": "Open_vSwitch",
- "version": "6.12.0"
- },
- "error": null
-}
<module>northbound</module>
<module>openstack</module>
<module>ovsdb-artifacts</module>
- <module>plugin-shell</module>
<module>schemas</module>
<module>utils</module>
<module>ovsdb-ui</module>