--- /dev/null
+.idea/\r
+target/
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>commons</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
--- /dev/null
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <prerequisites>
+ <maven>3.0</maven>
+ </prerequisites>
+ <groupId>org.opendaylight.ovsdb</groupId>
+ <artifactId>commons.ovsdb</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <repositories>
+ <!-- EBR release -->
+ <!-- http://repository.springsource.com/maven/bundles/release -->
+ <repository>
+ <id>ebr-bundles-release</id>
+ <name>ebr-bundles-release</name>
+ <url>${nexusproxy}/repositories/ebr-bundles-release/</url>
+ </repository>
+ <!-- EBR external -->
+ <!-- http://repository.springsource.com/maven/bundles/external -->
+ <repository>
+ <id>ebr-bundles-external</id>
+ <name>ebr-bundles-external</name>
+ <url>${nexusproxy}/repositories/ebr-bundles-external/</url>
+ </repository>
+ <repository>
+ <id>opendaylight.snapshot</id>
+ <name>opendaylight.snapshot</name>
+ <url>${nexusproxy}/repositories/opendaylight.snapshot/</url>
+ </repository>
+
+ <!-- Maven repo2 mirror -->
+ <!-- http://repo2.maven.org/maven2 -->
+ <repository>
+ <id>central2</id>
+ <name>central2</name>
+ <url>${nexusproxy}/repositories/central2/</url>
+ </repository>
+ <!-- Maven repo1 mirror -->
+ <!-- http://repo1.maven.org/maven2 -->
+ <repository>
+ <id>central</id>
+ <name>central</name>
+ <url>${nexusproxy}/repositories/central/</url>
+ </repository>
+ <!-- Pax mirror -->
+ <!-- https://oss.sonatype.org/content/repositories/ops4j-releases -->
+ <repository>
+ <id>ops4j-releases</id>
+ <name>ops4j-releases</name>
+ <url>${nexusproxy}/repositories/ops4j-releases/</url>
+ </repository>
+ <!-- Third Packages hosted in local maven because not available in
+ other places -->
+ <repository>
+ <id>thirdparty</id>
+ <name>thirdparty</name>
+ <url>${nexusproxy}/repositories/thirdparty/</url>
+ </repository>
+ <!-- Jboss mirror -->
+ <!-- https://repository.jboss.org/nexus/content/repositories/releases -->
+ <repository>
+ <id>jboss.releases</id>
+ <name>jboss.releases</name>
+ <url>${nexusproxy}/repositories/jboss.releases/</url>
+ </repository>
+ <!-- jsonrpc4j mirror -->
+ <repository>
+ <id>jsonrpc4j-webdav-maven-repo</id>
+ <name>jsonrpc4j maven repository</name>
+ <url>http://jsonrpc4j.googlecode.com/svn/maven/repo/</url>
+ <layout>default</layout>
+ </repository>
+ <!-- OpenDayLight Released artifact -->
+ <repository>
+ <id>opendaylight-release</id>
+ <name>opendaylight-release</name>
+ <url>${nexusproxy}/repositories/opendaylight.release/</url>
+ </repository>
+ <!-- OpenDayLight Snapshot artifact -->
+ <repository>
+ <id>opendaylight-snapshot</id>
+ <name>opendaylight-snapshot</name>
+ <url>${nexusproxy}/repositories/opendaylight.snapshot/</url>
+ </repository>
+ </repositories>
+
+ <properties>
+ <nexusproxy>http://nexus.opendaylight.org/content</nexusproxy>
+ <propertymavenplugin.version>1.0-alpha-2</propertymavenplugin.version>
+ <sonar.host.url>https://sonar.opendaylight.org/</sonar.host.url>
+ <sitedeploy>dav:http://nexus.opendaylight.org/content/sites/site</sitedeploy>
+ <siteplugin>3.2</siteplugin>
+ <projectinfo>2.6</projectinfo>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <compiler.version>2.3.2</compiler.version>
+ <surefire.version>2.15</surefire.version>
+ <failsafe.version>2.15</failsafe.version>
+ <exam.version>3.0.0</exam.version>
+ <url.version>1.5.0</url.version>
+ <enunciate.version>1.26.2</enunciate.version>
+ <sonar.branch>${user.name}-private-view</sonar.branch>
+ <sonar.skippedModules>org.openflow.openflowj,net.sf.jung2</sonar.skippedModules>
+ <logback.version>1.0.9</logback.version>
+ <slf4j.version>1.7.2</slf4j.version>
+ <jackson.version>1.9.8</jackson.version>
+ <spring.version>3.1.3.RELEASE</spring.version>
+ <spring-security.version>3.1.3.RELEASE</spring-security.version>
+ <jersey.version>1.17</jersey.version>
+ <virgo.version>3.6.0.RELEASE</virgo.version>
+ <geminiweb.version>2.2.0.RELEASE</geminiweb.version>
+ <checkstyle.version>2.10</checkstyle.version>
+ <testvm.argLine>-Xmx1024m -XX:MaxPermSize=256m</testvm.argLine>
+ <fasterxml.version>2.0.2</fasterxml.version>
+ </properties>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>central2</id>
+ <name>central2</name>
+ <url>${nexusproxy}/repositories/central2/</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <profiles>
+ <profile>
+ <id>viewbuild</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <properties>
+ <build.suffix>${project.version}</build.suffix>
+ </properties>
+ </profile>
+ <profile>
+ <id>jenkins</id>
+ <activation>
+ <property>
+ <name>BUILDSUFFIX</name>
+ </property>
+ </activation>
+ <properties>
+ <build.suffix>${BUILDSUFFIX}</build.suffix>
+ </properties>
+ </profile>
+ <profile>
+ <id>fastreassembly</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.4</version>
+ <executions>
+ <execution>
+ <id>copyfastreassembly</id>
+ <phase>install</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>${project.artifactId}</artifactId>
+ <version>${project.version}</version>
+ <destFileName>${project.groupId}.${project.artifactId}-${project.version}.jar</destFileName>
+ </artifactItem>
+ </artifactItems>
+ <outputDirectory>${fastreassembly.directory}</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+ <distributionManagement>
+ <!-- OpenDayLight Released artifact -->
+ <repository>
+ <id>opendaylight-release</id>
+ <url>${nexusproxy}/repositories/opendaylight.release/</url>
+ </repository>
+ <!-- OpenDayLight Snapshot artifact -->
+ <snapshotRepository>
+ <id>opendaylight-snapshot</id>
+ <url>${nexusproxy}/repositories/opendaylight.snapshot/</url>
+ </snapshotRepository>
+ <!-- Site deployment -->
+ <site>
+ <id>website</id>
+ <url>${sitedeploy}</url>
+ </site>
+ </distributionManagement>
+
+ <reporting>
+ <excludeDefaults>true</excludeDefaults>
+ <outputDirectory>${project.build.directory}/site</outputDirectory>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-project-info-reports-plugin</artifactId>
+ <version>${projectinfo}</version>
+ <configuration>
+ <dependencyDetailsEnabled>false</dependencyDetailsEnabled>
+ <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
+ </configuration>
+ <reportSets>
+ <reportSet>
+ <reports>
+ <report>index</report>
+ <report>project-team</report>
+ <report>license</report>
+ <report>mailing-list</report>
+ <report>plugin-management</report>
+ <report>cim</report>
+ <report>issue-tracking</report>
+ <report>scm</report>
+ <report>summary</report>
+ </reports>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jxr-plugin</artifactId>
+ <version>2.3</version>
+ <configuration>
+ <aggregate>true</aggregate>
+ <linkJavadoc>true</linkJavadoc>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>${checkstyle.version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.8.1</version>
+ <configuration>
+ <doclet>org.jboss.apiviz.APIviz</doclet>
+ <docletArtifact>
+ <groupId>org.jboss.apiviz</groupId>
+ <artifactId>apiviz</artifactId>
+ <version>1.3.2.GA</version>
+ </docletArtifact>
+ <finalName>${project.artifactId}-${build.suffix}</finalName>
+ <useStandardDocletOptions>true</useStandardDocletOptions>
+ <charset>UTF-8</charset>
+ <encoding>UTF-8</encoding>
+ <docencoding>UTF-8</docencoding>
+ <breakiterator>true</breakiterator>
+ <version>true</version>
+ <author>true</author>
+ <keywords>true</keywords>
+ <excludePackageNames>*.internal:edu.uci.*</excludePackageNames>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>properties-maven-plugin</artifactId>
+ <version>${propertymavenplugin.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>set-system-properties</goal>
+ </goals>
+ <configuration>
+ <properties>
+ <property>
+ <name>logback.configurationFile</name>
+ <value>${project.parent.basedir}/logback.xml</value>
+ </property>
+ </properties>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>com.googlecode.maven-java-formatter-plugin</groupId>
+ <artifactId>maven-java-formatter-plugin</artifactId>
+ <version>0.3.1</version>
+ <configuration>
+ <compilerSource>1.6</compilerSource>
+ <compilerCompliance>1.6</compilerCompliance>
+ <compilerTargetPlatform>1.6</compilerTargetPlatform>
+ <configFile>${project.parent.basedir}/sun_coding_style.xml</configFile>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>${checkstyle.version}</version>
+ <executions>
+ <execution>
+ <phase>process-sources</phase>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <failsOnError>true</failsOnError>
+ <configLocation>${project.parent.basedir}/space_and_tabs_checks.xml</configLocation>
+ <consoleOutput>true</consoleOutput>
+ <includeTestSourceDirectory>true</includeTestSourceDirectory>
+ <sourceDirectory>${project.basedir}</sourceDirectory>
+ <includes>**\/*.java,**\/*.xml,**\/*.ini,**\/*.sh,**\/*.bat</includes>
+ <excludes>target\/</excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <version>${failsafe.version}</version>
+ <configuration>
+ <argLine>${testvm.argLine}</argLine>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${surefire.version}</version>
+ <configuration>
+ <argLine>${testvm.argLine}</argLine>
+ </configuration>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <!-- Ignore/Execute plugin execution -->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>properties-maven-plugin</artifactId>
+ <versionRange>[0.0,)</versionRange>
+ <goals>
+ <goal>set-system-properties</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore/>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>org.codehaus.enunciate</groupId>
+ <artifactId>maven-enunciate-plugin</artifactId>
+ <versionRange>[0.0,)</versionRange>
+ <goals>
+ <goal>docs</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore/>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>org.jacoco</groupId>
+ <artifactId>jacoco-maven-plugin</artifactId>
+ <versionRange>[0.0,)</versionRange>
+ <goals>
+ <goal>prepare-agent</goal>
+ <goal>pre-test</goal>
+ <goal>post-test</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore/>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>maven-paxexam-plugin</artifactId>
+ <versionRange>[1.2.4,)</versionRange>
+ <goals>
+ <goal>generate-depends-file</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore/>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <versionRange>[2.0,)</versionRange>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore/>
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.enunciate</groupId>
+ <artifactId>maven-enunciate-plugin</artifactId>
+ <version>${enunciate.version}</version>
+ <configuration>
+ <configFile>enunciate.xml</configFile>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>docs</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${compiler.version}</version>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.8.1</version>
+ <configuration>
+ <doclet>org.jboss.apiviz.APIviz</doclet>
+ <docletArtifact>
+ <groupId>org.jboss.apiviz</groupId>
+ <artifactId>apiviz</artifactId>
+ <version>1.3.2.GA</version>
+ </docletArtifact>
+ <finalName>${project.artifactId}-${build.suffix}</finalName>
+ <useStandardDocletOptions>true</useStandardDocletOptions>
+ <charset>UTF-8</charset>
+ <encoding>UTF-8</encoding>
+ <docencoding>UTF-8</docencoding>
+ <breakiterator>true</breakiterator>
+ <version>true</version>
+ <author>true</author>
+ <keywords>true</keywords>
+ <excludePackageNames>net.sf.jnetlib.*:cern.*:corejava:*.internal:edu.uci.*</excludePackageNames>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jxr-plugin</artifactId>
+ <version>2.3</version>
+ <configuration>
+ <aggregate>true</aggregate>
+ <linkJavadoc>true</linkJavadoc>
+ <javadocDir>target/apidocs</javadocDir>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>log4j-over-slf4j</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-core</artifactId>
+ <version>${logback.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <version>${logback.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-mapper-asl</artifactId>
+ <version>${jackson.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-core-asl</artifactId>
+ <version>${jackson.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-jaxrs</artifactId>
+ <version>${jackson.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ <version>1.3.3</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.3</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-fileupload</groupId>
+ <artifactId>commons-fileupload</artifactId>
+ <version>1.2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>javax.servlet</artifactId>
+ <version>3.0.0.v201112011016</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>javax.servlet.jsp</artifactId>
+ <version>2.2.0.v201112011158</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>org.eclipse.equinox.ds</artifactId>
+ <version>1.4.0.v20120522-1841</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>org.eclipse.equinox.util</artifactId>
+ <version>1.0.400.v20120522-2049</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>org.eclipse.osgi.services</artifactId>
+ <version>3.3.100.v20120522-1822</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>org.eclipse.osgi</artifactId>
+ <version>3.8.1.v20120830-144521</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>org.apache.felix.gogo.command</artifactId>
+ <version>0.8.0.v201108120515</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>org.apache.felix.gogo.runtime</artifactId>
+ <version>0.8.0.v201108120515</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>org.apache.felix.gogo.shell</artifactId>
+ <version>0.8.0.v201110170705</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>org.eclipse.equinox.cm</artifactId>
+ <version>1.0.400.v20120522-1841</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>org.eclipse.equinox.console</artifactId>
+ <version>1.0.0.v20120522-1841</version>
+ </dependency>
+ <dependency>
+ <groupId>equinoxSDK381</groupId>
+ <artifactId>org.eclipse.equinox.launcher</artifactId>
+ <version>1.3.0.v20120522-1813</version>
+ </dependency>
+ <!-- Gemini Web -->
+ <dependency>
+ <groupId>geminiweb</groupId>
+ <artifactId>org.eclipse.gemini.web.core</artifactId>
+ <version>${geminiweb.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>geminiweb</groupId>
+ <artifactId>org.eclipse.gemini.web.extender</artifactId>
+ <version>${geminiweb.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>geminiweb</groupId>
+ <artifactId>org.eclipse.gemini.web.tomcat</artifactId>
+ <version>${geminiweb.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>geminiweb</groupId>
+ <artifactId>org.eclipse.virgo.kernel.equinox.extensions</artifactId>
+ <version>${virgo.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>geminiweb</groupId>
+ <artifactId>org.eclipse.virgo.util.common</artifactId>
+ <version>${virgo.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>geminiweb</groupId>
+ <artifactId>org.eclipse.virgo.util.io</artifactId>
+ <version>${virgo.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>geminiweb</groupId>
+ <artifactId>org.eclipse.virgo.util.math</artifactId>
+ <version>${virgo.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>geminiweb</groupId>
+ <artifactId>org.eclipse.virgo.util.osgi</artifactId>
+ <version>${virgo.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>geminiweb</groupId>
+ <artifactId>org.eclipse.virgo.util.osgi.manifest</artifactId>
+ <version>${virgo.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>geminiweb</groupId>
+ <artifactId>org.eclipse.virgo.util.parser.manifest</artifactId>
+ <version>${virgo.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.dependencymanager</artifactId>
+ <version>3.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.dependencymanager.shell</artifactId>
+ <version>3.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <version>2.1</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.spec.javax.transaction</groupId>
+ <artifactId>jboss-transaction-api_1.1_spec</artifactId>
+ <version>1.0.1.Final</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.fileinstall</artifactId>
+ <version>3.1.6</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>virgomirror</groupId>
+ <artifactId>org.eclipse.jdt.core.compiler.batch</artifactId>
+ <version>3.8.0.I20120518-2145</version>
+ </dependency>
+ <dependency>
+ <groupId>eclipselink</groupId>
+ <artifactId>javax.persistence</artifactId>
+ <version>2.0.4.v201112161009</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>javax.activation</artifactId>
+ <version>1.1.0.v201211130549</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>javax.annotation</artifactId>
+ <version>1.1.0.v201209060031</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>javax.ejb</artifactId>
+ <version>3.1.1.v201204261316</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>javax.el</artifactId>
+ <version>2.2.0.v201108011116</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>javax.mail.glassfish</artifactId>
+ <version>1.4.1.v201108011116</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>javax.xml.rpc</artifactId>
+ <version>1.1.0.v201005080400</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>org.apache.catalina</artifactId>
+ <version>7.0.32.v201211201336</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>org.apache.catalina.ha</artifactId>
+ <version>7.0.32.v201211201952</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>org.apache.catalina.tribes</artifactId>
+ <version>7.0.32.v201211201952</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>org.apache.coyote</artifactId>
+ <version>7.0.32.v201211201952</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>org.apache.el</artifactId>
+ <version>7.0.32.v201211081135</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>org.apache.jasper</artifactId>
+ <version>7.0.32.v201211201952</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>org.apache.juli.extras</artifactId>
+ <version>7.0.32.v201211081135</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>org.apache.tomcat.api</artifactId>
+ <version>7.0.32.v201211081135</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>org.apache.tomcat.util</artifactId>
+ <version>7.0.32.v201211201952</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>javax.servlet.jsp.jstl</artifactId>
+ <version>1.2.0.v201105211821</version>
+ </dependency>
+ <dependency>
+ <groupId>orbit</groupId>
+ <artifactId>javax.servlet.jsp.jstl.impl</artifactId>
+ <version>1.2.0.v201210211230</version>
+ </dependency>
+ <!-- Add Pax Exam -->
+ <dependency>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam-container-native</artifactId>
+ <version>${exam.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam-junit4</artifactId>
+ <version>${exam.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam-link-mvn</artifactId>
+ <version>${exam.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.ops4j.pax.url</groupId>
+ <artifactId>pax-url-aether</artifactId>
+ <version>${url.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.asm</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.aop</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.context</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.context.support</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.core</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.beans</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.expression</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.web</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.aopalliance</groupId>
+ <artifactId>com.springsource.org.aopalliance</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.web.servlet</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <!-- Spring security -->
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-config</artifactId>
+ <version>${spring-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-core</artifactId>
+ <version>${spring-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-web</artifactId>
+ <version>${spring-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-taglibs</artifactId>
+ <version>${spring-security.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.transaction</artifactId>
+ <version>${spring-security.version}</version>
+ </dependency>
+ <!-- Visual VM hook -->
+ <dependency>
+ <groupId>org.ow2.chameleon.management</groupId>
+ <artifactId>chameleon-mbeans</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ <!-- Jersey for JAXRS -->
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-core</artifactId>
+ <version>${jersey.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-server</artifactId>
+ <version>${jersey.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-client</artifactId>
+ <version>${jersey.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-json</artifactId>
+ <version>${jersey.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ <version>${fasterxml.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ <version>${fasterxml.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>${fasterxml.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.portlet</groupId>
+ <artifactId>portlet-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.googlecode</groupId>
+ <artifactId>jsonrpc4j</artifactId>
+ <version>0.28</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ <version>4.2.5</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.6</version>
+ </dependency>
+<!--
+ | spring dependencies
+ +-->
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ <version>${spring.version}</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ <version>${spring.version}</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ <version>${spring.version}</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>${spring.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <!--
+ | apache http client
+ +-->
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.4</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore-nio</artifactId>
+ <version>4.2.1</version>
+ <optional>true</optional>
+ </dependency>
+
+ <!--
+ | Servlet
+ +-->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>3.1-b06</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!--
+ | test dependencies
+ +-->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.10</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jmock</groupId>
+ <artifactId>jmock-junit4</artifactId>
+ <version>2.5.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jmock</groupId>
+ <artifactId>jmock</artifactId>
+ <version>2.5.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <version>9.0.0.RC0</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <artifactId>javax.servlet</artifactId>
+ <groupId>org.eclipse.jetty.orbit</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlet</artifactId>
+ <version>9.0.0.RC0</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <artifactId>javax.servlet</artifactId>
+ <groupId>org.eclipse.jetty.orbit</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+</project>
--- /dev/null
+<?xml version="1.0"?>\r
+<!DOCTYPE module PUBLIC\r
+ "-//Puppy Crawl//DTD Check Configuration 1.2//EN"\r
+ "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">\r
+\r
+<module name="Checker">\r
+ <module name="FileTabCharacter">\r
+ <property name="eachLine" value="true"/>\r
+ </module>\r
+\r
+ <module name="RegexpSingleline">\r
+ <!-- \s matches whitespace character, $ matches end of line. -->\r
+ <property name="format" value="\s+$"/>\r
+ <property name="message" value="Line has trailing spaces."/>\r
+ </module>\r
+\r
+</module>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="src" output="target/classes" path="src/main/java">\r
+ <attributes>\r
+ <attribute name="optional" value="true"/>\r
+ <attribute name="maven.pomderived" value="true"/>\r
+ </attributes>\r
+ </classpathentry>\r
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java">\r
+ <attributes>\r
+ <attribute name="optional" value="true"/>\r
+ <attribute name="maven.pomderived" value="true"/>\r
+ </attributes>\r
+ </classpathentry>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">\r
+ <attributes>\r
+ <attribute name="maven.pomderived" value="true"/>\r
+ </attributes>\r
+ </classpathentry>\r
+ <classpathentry exported="true" kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">\r
+ <attributes>\r
+ <attribute name="maven.pomderived" value="true"/>\r
+ </attributes>\r
+ </classpathentry>\r
+ <classpathentry kind="output" path="target/classes"/>\r
+</classpath>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+ <name>protocol_plugins.ovsdb</name>\r
+ <comment></comment>\r
+ <projects>\r
+ </projects>\r
+ <buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.jdt.core.javabuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.eclipse.m2e.core.maven2Builder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.pde.PluginNature</nature>\r
+ <nature>org.eclipse.jdt.core.javanature</nature>\r
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>\r
+ </natures>\r
+</projectDescription>\r
--- /dev/null
+eclipse.preferences.version=1\r
+encoding//src/main/java=UTF-8\r
+encoding//src/test/java=UTF-8\r
+encoding/<project>=UTF-8\r
--- /dev/null
+eclipse.preferences.version=1\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\r
+org.eclipse.jdt.core.compiler.compliance=1.6\r
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning\r
+org.eclipse.jdt.core.compiler.source=1.6\r
--- /dev/null
+activeProfiles=\r
+eclipse.preferences.version=1\r
+resolveWorkspaceProjects=true\r
+version=1\r
--- /dev/null
+Manifest-Version: 1.0\r
+Bnd-LastModified: 1374523969530\r
+Build-Jdk: 1.7.0_21\r
+Built-By: evan\r
+Bundle-Activator: org.opendaylight.controller.protocol_plugin.ovsdb.inte\r
+ rnal.Activator\r
+Bundle-ClassPath: .,jsonrpc4j-0.28.jar,httpclient-4.2.5.jar,commons-code\r
+ c-1.4.jar,httpcore-nio-4.2.1.jar,javax.servlet-api-3.1-b06.jar\r
+Bundle-ManifestVersion: 2\r
+Bundle-Name: protocol_plugins.ovsdb\r
+Bundle-SymbolicName: org.opendaylight.controller.protocol_plugins.ovsdb\r
+Bundle-Version: 0.4.0.SNAPSHOT\r
+Created-By: Apache Maven Bundle Plugin\r
+Embed-Dependency: jsonrpc4j,httpclient,commons-codec,httpcore-nio,javax.\r
+ servlet-api\r
+Embed-Transitive: true\r
+Embedded-Artifacts: jsonrpc4j-0.28.jar;g="com.googlecode";a="jsonrpc4j";\r
+ v="0.28",httpclient-4.2.5.jar;g="org.apache.httpcomponents";a="httpclie\r
+ nt";v="4.2.5",commons-codec-1.4.jar;g="commons-codec";a="commons-codec"\r
+ ;v="1.4",httpcore-nio-4.2.1.jar;g="org.apache.httpcomponents";a="httpco\r
+ re-nio";v="4.2.1",javax.servlet-api-3.1-b06.jar;g="javax.servlet";a="ja\r
+ vax.servlet-api";v="3.1-b06"\r
+Export-Package: org.opendaylight.ovsdb.database;uses:="com.fasterxml.jac\r
+ kson.annotation";version="0.4.0.SNAPSHOT",org.opendaylight.ovsdb;versio\r
+ n="0.4.0.SNAPSHOT"\r
+Import-Package: com.fasterxml.jackson.annotation;version="[2.0,3)",com.f\r
+ asterxml.jackson.core;version="[2.0,3)",com.fasterxml.jackson.databind;\r
+ version="[2.0,3)",com.fasterxml.jackson.databind.node;version="[2.0,3)"\r
+ ,com.fasterxml.jackson.databind.type;version="[2.0,3)",javax.crypto,jav\r
+ ax.crypto.spec,javax.net,javax.net.ssl,javax.portlet;version="[2.0,3)",\r
+ javax.security.auth.x500,org.aopalliance.intercept;version="[1.0,2)",or\r
+ g.apache.commons.lang3.builder;version="[3.1,4)",org.apache.commons.lan\r
+ g3.tuple;version="[3.1,4)",org.apache.commons.logging;version="[1.1,2)"\r
+ ,org.apache.felix.dm;version="[3.0,4)",org.apache.http;resolution:=opti\r
+ onal,org.apache.http.concurrent;resolution:=optional,org.apache.http.en\r
+ tity;resolution:=optional,org.apache.http.impl;resolution:=optional,org\r
+ .apache.http.impl.entity;resolution:=optional,org.apache.http.impl.io;r\r
+ esolution:=optional,org.apache.http.io;resolution:=optional,org.apache.\r
+ http.message;resolution:=optional,org.apache.http.params;resolution:=op\r
+ tional,org.apache.http.pool;resolution:=optional,org.apache.http.protoc\r
+ ol;resolution:=optional,org.apache.http.util;resolution:=optional,org.e\r
+ clipse.osgi.framework.console;version="[1.1,2)",org.ietf.jgss,org.opend\r
+ aylight.controller.protocol_plugin.ovsdb.internal,org.opendaylight.cont\r
+ roller.sal.action;version="[0.5,1)",org.opendaylight.controller.sal.con\r
+ figuration,org.opendaylight.controller.sal.connection,org.opendaylight.\r
+ controller.sal.core;version="[0.5,1)",org.opendaylight.controller.sal.d\r
+ iscovery;version="[0.5,1)",org.opendaylight.controller.sal.flowprogramm\r
+ er;version="[0.5,1)",org.opendaylight.controller.sal.inventory;version=\r
+ "[0.5,1)",org.opendaylight.controller.sal.match;version="[0.5,1)",org.o\r
+ pendaylight.controller.sal.packet;version="[0.5,1)",org.opendaylight.co\r
+ ntroller.sal.reader;version="[0.5,1)",org.opendaylight.controller.sal.t\r
+ opology;version="[0.5,1)",org.opendaylight.controller.sal.utils;version\r
+ ="[0.5,1)",org.opendaylight.ovsdb.database,org.osgi.framework;version="\r
+ [1.7,2)",org.slf4j;version="[1.7,2)",org.springframework.aop.framework;\r
+ version="[3.1,4)",org.springframework.beans;version="[3.1,4)",org.sprin\r
+ gframework.beans.factory;version="[3.1,4)",org.springframework.beans.fa\r
+ ctory.config;version="[3.1,4)",org.springframework.beans.factory.suppor\r
+ t;version="[3.1,4)",org.springframework.context;version="[3.1,4)",org.s\r
+ pringframework.core.io;version="[3.1,4)",org.springframework.core.type;\r
+ version="[3.1,4)",org.springframework.core.type.classreading;version="[\r
+ 3.1,4)",org.springframework.remoting.support;version="[3.1,4)",org.spri\r
+ ngframework.util;version="[3.1,4)",org.springframework.web;version="[3.\r
+ 1,4)"\r
+Tool: Bnd-1.50.0\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<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.controller</groupId>
+ <artifactId>commons.opendaylight</artifactId>
+ <version>1.4.0-SNAPSHOT</version>
+ <relativePath>../../commons/opendaylight</relativePath>
+ </parent>
+
+ <artifactId>protocol_plugins.ovsdb</artifactId>
+ <version>0.4.0-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>2.3.6</version>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Import-Package>
+ org.opendaylight.controller.sal.packet,
+ org.opendaylight.controller.sal.action,
+ org.opendaylight.controller.sal.discovery,
+ org.opendaylight.controller.sal.topology,
+ org.opendaylight.controller.sal.core,
+ org.opendaylight.controller.sal.flowprogrammer,
+ org.opendaylight.controller.sal.reader,
+ org.opendaylight.controller.sal.inventory,
+ org.opendaylight.controller.sal.match,
+ org.opendaylight.controller.sal.utils,
+ org.opendaylight.controller.sal.configuration,
+ org.opendaylight.controller.sal.connection,
+ org.apache.commons.lang3.builder,
+ org.apache.commons.lang3.tuple,
+ org.apache.felix.dm,
+ org.slf4j,
+ org.eclipse.osgi.framework.console,
+ org.osgi.framework,
+ com.fasterxml.jackson.core,
+ com.fasterxml.jackson.databind,
+ com.fasterxml.jackson.databind.node,
+ com.fasterxml.jackson.annotation,
+ javax.net.ssl,
+ *
+ </Import-Package>
+ <Embed-Dependency>jsonrpc4j,httpclient,commons-codec,httpcore-nio,javax.servlet-api</Embed-Dependency>
+ <Embed-Transitive>
+ true
+ </Embed-Transitive>
+ <Bundle-Activator>
+ org.opendaylight.controller.protocol_plugin.ovsdb.internal.Activator
+ </Bundle-Activator>
+ </instructions>
+ <manifestLocation>${project.basedir}/META-INF</manifestLocation>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <repositories>
+ <repository>
+ <id>jsonrpc4j-webdav-maven-repo</id>
+ <name>jsonrpc4j maven repository</name>
+ <url>http://jsonrpc4j.googlecode.com/svn/maven/repo/</url>
+ <layout>default</layout>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller.thirdparty</groupId>
+ <artifactId>org.openflow.openflowj</artifactId>
+ <version>1.0.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.googlecode</groupId>
+ <artifactId>jsonrpc4j</artifactId>
+ <version>0.28</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ <version>2.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ <version>2.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>2.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.portlet</groupId>
+ <artifactId>portlet-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+
+<!--
+ | spring dependencies
+ +-->
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ <version>${spring.version}</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ <version>${spring.version}</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ <version>${spring.version}</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>${spring.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!--
+ | apache http client
+ +-->
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.4</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore-nio</artifactId>
+ <version>4.2.1</version>
+ <optional>true</optional>
+ </dependency>
+
+ <!--
+ | Servlet
+ +-->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>3.1-b06</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!--
+ | test dependencies
+ +-->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.10</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jmock</groupId>
+ <artifactId>jmock-junit4</artifactId>
+ <version>2.5.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jmock</groupId>
+ <artifactId>jmock</artifactId>
+ <version>2.5.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <version>9.0.0.RC0</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <artifactId>javax.servlet</artifactId>
+ <groupId>org.eclipse.jetty.orbit</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlet</artifactId>
+ <version>9.0.0.RC0</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <artifactId>javax.servlet</artifactId>
+ <groupId>org.eclipse.jetty.orbit</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+</project>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">\r
+ <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">\r
+ <output url="file://$MODULE_DIR$/target/classes" />\r
+ <output-test url="file://$MODULE_DIR$/target/test-classes" />\r
+ <content url="file://$MODULE_DIR$">\r
+ <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />\r
+ <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />\r
+ <excludeFolder url="file://$MODULE_DIR$/target" />\r
+ </content>\r
+ <orderEntry type="inheritedJdk" />\r
+ <orderEntry type="sourceFolder" forTests="false" />\r
+ <orderEntry type="library" name="Maven: org.opendaylight.controller:sal:0.5.0-SNAPSHOT" level="project" />\r
+ <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.2" level="project" />\r
+ <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.2" level="project" />\r
+ <orderEntry type="library" name="Maven: org.slf4j:log4j-over-slf4j:1.7.2" level="project" />\r
+ <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.0.9" level="project" />\r
+ <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.0.9" level="project" />\r
+ <orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-mapper-asl:1.9.8" level="project" />\r
+ <orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-core-asl:1.9.8" level="project" />\r
+ <orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-jaxrs:1.9.8" level="project" />\r
+ <orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.3.3" level="project" />\r
+ <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />\r
+ <orderEntry type="library" name="Maven: commons-io:commons-io:2.3" level="project" />\r
+ <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.2.2" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:javax.servlet:3.0.0.v201112011016" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:javax.servlet.jsp:2.2.0.v201112011158" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:org.eclipse.equinox.ds:1.4.0.v20120522-1841" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:org.eclipse.equinox.util:1.0.400.v20120522-2049" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:org.eclipse.osgi.services:3.3.100.v20120522-1822" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:org.eclipse.osgi:3.8.1.v20120830-144521" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:org.apache.felix.gogo.command:0.8.0.v201108120515" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:org.apache.felix.gogo.runtime:0.8.0.v201108120515" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:org.apache.felix.gogo.shell:0.8.0.v201110170705" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:org.eclipse.equinox.cm:1.0.400.v20120522-1841" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:org.eclipse.equinox.console:1.0.0.v20120522-1841" level="project" />\r
+ <orderEntry type="library" name="Maven: equinoxSDK381:org.eclipse.equinox.launcher:1.3.0.v20120522-1813" level="project" />\r
+ <orderEntry type="library" name="Maven: geminiweb:org.eclipse.gemini.web.core:2.2.0.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: geminiweb:org.eclipse.gemini.web.extender:2.2.0.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: geminiweb:org.eclipse.gemini.web.tomcat:2.2.0.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: geminiweb:org.eclipse.virgo.kernel.equinox.extensions:3.6.0.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: geminiweb:org.eclipse.virgo.util.common:3.6.0.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: geminiweb:org.eclipse.virgo.util.io:3.6.0.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: geminiweb:org.eclipse.virgo.util.math:3.6.0.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: geminiweb:org.eclipse.virgo.util.osgi:3.6.0.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: geminiweb:org.eclipse.virgo.util.osgi.manifest:3.6.0.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: geminiweb:org.eclipse.virgo.util.parser.manifest:3.6.0.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.apache.felix:org.apache.felix.dependencymanager:3.1.0" level="project" />\r
+ <orderEntry type="library" name="Maven: org.osgi:org.osgi.core:4.2.0" level="project" />\r
+ <orderEntry type="library" name="Maven: org.osgi:org.osgi.compendium:4.2.0" level="project" />\r
+ <orderEntry type="library" name="Maven: org.apache.felix:org.apache.felix.dependencymanager.shell:3.0.1" level="project" />\r
+ <orderEntry type="library" name="Maven: org.apache.felix:org.apache.felix.shell:1.4.1" level="project" />\r
+ <orderEntry type="library" name="Maven: org.apache.felix:org.apache.felix.gogo.runtime:0.6.0" level="project" />\r
+ <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.1" level="project" />\r
+ <orderEntry type="library" name="Maven: org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:1.0.1.Final" level="project" />\r
+ <orderEntry type="library" name="Maven: org.apache.felix:org.apache.felix.fileinstall:3.1.6" level="project" />\r
+ <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.1" level="project" />\r
+ <orderEntry type="library" name="Maven: virgomirror:org.eclipse.jdt.core.compiler.batch:3.8.0.I20120518-2145" level="project" />\r
+ <orderEntry type="library" name="Maven: eclipselink:javax.persistence:2.0.4.v201112161009" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:javax.activation:1.1.0.v201211130549" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:javax.annotation:1.1.0.v201209060031" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:javax.ejb:3.1.1.v201204261316" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:javax.el:2.2.0.v201108011116" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:javax.mail.glassfish:1.4.1.v201108011116" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:javax.xml.rpc:1.1.0.v201005080400" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:org.apache.catalina:7.0.32.v201211201336" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:org.apache.catalina.ha:7.0.32.v201211201952" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:org.apache.catalina.tribes:7.0.32.v201211201952" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:org.apache.coyote:7.0.32.v201211201952" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:org.apache.el:7.0.32.v201211081135" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:org.apache.jasper:7.0.32.v201211201952" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:org.apache.juli.extras:7.0.32.v201211081135" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:org.apache.tomcat.api:7.0.32.v201211081135" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:org.apache.tomcat.util:7.0.32.v201211201952" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:javax.servlet.jsp.jstl:1.2.0.v201105211821" level="project" />\r
+ <orderEntry type="library" name="Maven: orbit:javax.servlet.jsp.jstl.impl:1.2.0.v201210211230" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:org.springframework.asm:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:org.springframework.aop:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.aopalliance:com.springsource.org.aopalliance:1.0.0" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:org.springframework.beans:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:org.springframework.core:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:org.springframework.context:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:org.springframework.expression:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:org.springframework.context.support:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:org.springframework.web:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:org.springframework.web.servlet:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:spring-core:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:spring-asm:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:spring-aop:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: aopalliance:aopalliance:1.0" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:spring-beans:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:spring-context:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:spring-expression:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:3.0.7.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:spring-tx:3.0.7.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:spring-web:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework.security:spring-security-taglibs:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework.security:spring-security-acl:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.springframework:org.springframework.transaction:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: org.ow2.chameleon.management:chameleon-mbeans:1.0.0" level="project" />\r
+ <orderEntry type="library" name="Maven: com.sun.jersey:jersey-core:1.17" level="project" />\r
+ <orderEntry type="library" name="Maven: com.sun.jersey:jersey-server:1.17" level="project" />\r
+ <orderEntry type="library" name="Maven: asm:asm:3.1" level="project" />\r
+ <orderEntry type="library" name="Maven: com.sun.jersey:jersey-client:1.17" level="project" />\r
+ <orderEntry type="library" name="Maven: com.sun.jersey:jersey-json:1.17" level="project" />\r
+ <orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.2.3-1" level="project" />\r
+ <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.2.2" level="project" />\r
+ <orderEntry type="library" name="Maven: javax.xml.stream:stax-api:1.0-2" level="project" />\r
+ <orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />\r
+ <orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-xc:1.9.2" level="project" />\r
+ <orderEntry type="library" name="Maven: org.opendaylight.controller.thirdparty:org.openflow.openflowj:1.0.2-SNAPSHOT" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.10" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />\r
+ <orderEntry type="library" name="Maven: com.googlecode:jsonrpc4j:0.28" level="project" />\r
+ <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.0.2" level="project" />\r
+ <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.0.2" level="project" />\r
+ <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.0.2" level="project" />\r
+ <orderEntry type="library" name="Maven: javax.portlet:portlet-api:2.0" level="project" />\r
+ <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:3.1.3.RELEASE" level="project" />\r
+ <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.4" level="project" />\r
+ <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore-nio:4.2.1" level="project" />\r
+ <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.2.1" level="project" />\r
+ <orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:javax.servlet-api:3.1-b06" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.jmock:jmock-junit4:2.5.1" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.jmock:jmock:2.5.1" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.1" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: junit:junit-dep:4.4" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.eclipse.jetty:jetty-server:9.0.0.RC0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.eclipse.jetty:jetty-http:9.0.0.RC0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.eclipse.jetty:jetty-util:9.0.0.RC0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.eclipse.jetty:jetty-io:9.0.0.RC0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.eclipse.jetty:jetty-servlet:9.0.0.RC0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.eclipse.jetty:jetty-security:9.0.0.RC0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.exam:pax-exam-container-native:3.0.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.exam:pax-exam:3.0.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.base:ops4j-base-lang:1.4.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.base:ops4j-base-store:1.4.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.base:ops4j-base-io:1.4.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.base:ops4j-base-monitors:1.4.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.base:ops4j-base-util-property:1.4.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.exam:pax-exam-spi:3.0.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.base:ops4j-base-spi:1.4.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: com.google.guava:guava:12.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.tinybundles:tinybundles:1.0.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: biz.aQute:bndlib:1.43.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.glassfish.main.common:scattered-archive-api:3.1.2.2" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.swissbox:pax-swissbox-core:1.6.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.swissbox:pax-swissbox-lifecycle:1.6.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.swissbox:pax-swissbox-tracker:1.6.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.base:ops4j-base-net:1.4.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.url:pax-url-link:1.5.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.url:pax-url-commons:1.5.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.swissbox:pax-swissbox-property:1.5.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.url:pax-url-classpath:1.5.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.swissbox:pax-swissbox-optional-jcl:1.5.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.exam:pax-exam-junit4:3.0.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.exam:pax-exam-link-mvn:3.0.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.url:pax-url-aether:1.5.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.pax.url:pax-url-maven-commons:1.5.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.base:ops4j-base-util-xml:1.3.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.ops4j.base:ops4j-base-util-collections:1.3.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.sonatype.aether:aether-api:1.13.1" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.sonatype.aether:aether-spi:1.13.1" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.sonatype.aether:aether-util:1.13.1" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.sonatype.aether:aether-impl:1.13.1" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.sonatype.aether:aether-connector-wagon:1.13.1" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven.wagon:wagon-provider-api:1.0-beta-7" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.codehaus.plexus:plexus-utils:3.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.codehaus.plexus:plexus-classworlds:2.4" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.sonatype.sisu:sisu-inject-plexus:2.2.3" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.codehaus.plexus:plexus-component-annotations:1.5.5" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.sonatype.sisu:sisu-inject-bean:2.2.3" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.sonatype.sisu:sisu-guice:no_aop:3.0.3" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven:maven-aether-provider:3.0.4" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven:maven-model:3.0.4" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven:maven-model-builder:3.0.4" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.codehaus.plexus:plexus-interpolation:1.14" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven:maven-repository-metadata:3.0.4" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven.wagon:wagon-file:1.0-beta-7" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven.wagon:wagon-http-lightweight:1.0-beta-7" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven.wagon:wagon-http-shared:1.0-beta-7" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.codehaus.plexus:plexus-container-default:1.5.5" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: org.apache.xbean:xbean-reflect:3.4" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: com.google.collections:google-collections:1.0" level="project" />\r
+ <orderEntry type="library" scope="TEST" name="Maven: commons-httpclient:commons-httpclient:3.1" level="project" />\r
+ </component>\r
+</module>\r
+\r
--- /dev/null
+package org.opendaylight.ovsdb;\r
+\r
+import java.io.IOException;\r
+import java.net.InetAddress;\r
+import java.util.Random;\r
+\r
+import org.opendaylight.ovsdb.internal.Connection;\r
+import org.opendaylight.ovsdb.internal.OvsdbIO;\r
+import org.opendaylight.ovsdb.internal.OvsdbMessage;\r
+\r
+public class OvsdbClient {\r
+\r
+ private static final OvsdbIO ioHandler = new OvsdbIO();\r
+\r
+ public void listDatabases() throws IOException, Throwable{\r
+ try{\r
+ String identifier = "TEST";\r
+ InetAddress address = InetAddress.getByName("172.28.30.51");\r
+ int port = 6634;\r
+ Connection connection = OvsdbIO.connect(identifier, address, port);\r
+ if (connection != null) {\r
+ OvsdbMessage message = new OvsdbMessage("list_dbs", null);\r
+ connection.sendMessage(message);\r
+ connection.readResponse(String[].class);\r
+ }\r
+ }catch(Exception e){\r
+ }\r
+ }\r
+}\r
--- /dev/null
+package org.opendaylight.ovsdb.database;\r
+\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+\r
+public class ColumnSchema {\r
+ @JsonProperty("type")\r
+ public OvsdbType type;\r
+ @JsonProperty("ephemeral")\r
+ public Boolean ephemeral;\r
+ @JsonProperty("mutable")\r
+ public Boolean mutable;\r
+\r
+}\r
--- /dev/null
+package org.opendaylight.ovsdb.database;\r
+\r
+import java.util.Map;\r
+\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+\r
+public class DatabaseSchema {\r
+ @JsonProperty("name")\r
+ public String name;\r
+ @JsonProperty("version")\r
+ public String version;\r
+ @JsonProperty("cksum")\r
+ public String cksum;\r
+ @JsonProperty("tables")\r
+ public Map<String, TableSchema> tables;\r
+}\r
--- /dev/null
+package org.opendaylight.ovsdb.database;\r
+\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+\r
+\r
+public class OvsdbType {\r
+ public OvsdbType(String type){\r
+ this.key = new BaseType(type);\r
+ }\r
+\r
+ public OvsdbType(@JsonProperty("key") BaseType key, @JsonProperty("value") BaseType value,\r
+ @JsonProperty("min") Integer min, @JsonProperty("max") Object max){\r
+ this.key = key;\r
+ this.value = value;\r
+ this.min = min;\r
+ this.max = max;\r
+ }\r
+\r
+ public BaseType key;\r
+ public BaseType value;\r
+ public Integer min;\r
+ public Object max;\r
+\r
+ public static class BaseType{\r
+\r
+ public BaseType(String type){\r
+ this.type = type;\r
+ }\r
+\r
+ public BaseType(@JsonProperty("type") String type, @JsonProperty("enum") Object[] ovsdbEnum,\r
+ @JsonProperty("minInteger") Integer minInteger, @JsonProperty("maxInteger") Integer maxInteger,\r
+ @JsonProperty("minReal") Double minReal, @JsonProperty("maxReal") Double maxReal,\r
+ @JsonProperty("minLength") Integer minLength, @JsonProperty("maxLength") Integer maxLength,\r
+ @JsonProperty("refTable") String refTable, @JsonProperty("refType") String refType){\r
+ this.type = type;\r
+ this.ovsdbEnum = ovsdbEnum;\r
+ this.minInteger = minInteger;\r
+ this.maxInteger = maxInteger;\r
+ this.minReal = minReal;\r
+ this.maxReal = maxReal;\r
+ this.minLength = minLength;\r
+ this.maxLength = maxLength;\r
+ this.refTable = refTable;\r
+ this.refType = refType;\r
+ }\r
+\r
+ public String type;\r
+ public Object[] ovsdbEnum;\r
+ public Integer minInteger;\r
+ public Integer maxInteger;\r
+ public Double minReal;\r
+ public Double maxReal;\r
+ public Integer minLength;\r
+ public Integer maxLength;\r
+ public String refTable;\r
+ public String refType;\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+package org.opendaylight.ovsdb.database;\r
+\r
+import java.util.Map;\r
+\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+\r
+public class TableSchema {\r
+ @JsonProperty("columns")\r
+ public Map<String, ColumnSchema> columns;\r
+ @JsonProperty("maxRows")\r
+ public Integer maxRows;\r
+ @JsonProperty("isRoot")\r
+ public Boolean isRoot;\r
+ @JsonProperty("indexes")\r
+ public Object indexes;\r
+\r
+ public Map<String, ColumnSchema> getColumns(){\r
+ return this.columns;\r
+ }\r
+}\r
--- /dev/null
+package org.opendaylight.ovsdb.database;\r
+\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+\r
+public class Uuid {\r
+ @JsonProperty("uuid")\r
+ public String[] uuid;\r
+}\r
--- /dev/null
+package org.opendaylight.ovsdb.internal;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.apache.felix.dm.Component;
+
+import org.opendaylight.ovsdb.sal.configuration.INetworkConfigurationService;
+import org.opendaylight.ovsdb.sal.configuration.IPluginInNetworkConfigurationService;
+import org.opendaylight.ovsdb.sal.connection.IConnectionService;
+import org.opendaylight.ovsdb.sal.connection.IPluginInConnectionService;
+import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
+import org.opendaylight.controller.sal.utils.INodeConnectorFactory;
+import org.opendaylight.controller.sal.utils.INodeFactory;
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.controller.sal.flowprogrammer.IPluginInFlowProgrammerService;
+import org.opendaylight.controller.sal.utils.GlobalConstants;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * OVSDB protocol plugin Activator
+ *
+ *
+ */
+public class Activator extends ComponentActivatorAbstractBase {
+ protected static final Logger logger = LoggerFactory
+ .getLogger(Activator.class);
+
+ /**
+ * Function called when the activator starts just after some initializations
+ * are done by the ComponentActivatorAbstractBase.
+ *
+ */
+ public void init() {
+ Node.NodeIDType.registerIDType("OVS", String.class);
+ NodeConnector.NodeConnectorIDType.registerIDType("OVS", String.class, "OVS");
+ }
+
+ /**
+ * Function called when the activator stops just before the cleanup done by
+ * ComponentActivatorAbstractBase
+ *
+ */
+ public void destroy() {
+ Node.NodeIDType.unRegisterIDType("OVS");
+ NodeConnector.NodeConnectorIDType.unRegisterIDType("OVS");
+ }
+ public Object[] getGlobalImplementations() {
+ Object[] res = { ConnectionService.class, ConfigurationService.class, FlowProgrammerService.class, NodeFactory.class, NodeConnectorFactory.class };
+ return res;
+ }
+
+ public void configureGlobalInstance(Component c, Object imp){
+ if (imp.equals(ConfigurationService.class)) {
+ // export the service to be used by SAL
+ Dictionary<String, Object> props = new Hashtable<String, Object>();
+ // Set the protocolPluginType property which will be used
+ // by SAL
+ props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString(), "OVS");
+ c.setInterface(IPluginInNetworkConfigurationService.class.getName(), props);
+
+ c.add(createServiceDependency()
+ .setService(IConnectionServiceInternal.class)
+ .setCallbacks("setConnectionServiceInternal", "unsetConnectionServiceInternal")
+ .setRequired(true));
+ }
+
+ if (imp.equals(ConnectionService.class)) {
+ // export the service to be used by SAL
+ Dictionary<String, Object> props = new Hashtable<String, Object>();
+ // Set the protocolPluginType property which will be used
+ // by SAL
+ props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString(), "OVS");
+ c.setInterface(
+ new String[] {IPluginInConnectionService.class.getName(),
+ IConnectionServiceInternal.class.getName()}, props);
+ }
+
+ if (imp.equals(FlowProgrammerService.class)) {
+ // export the service to be used by SAL
+ Dictionary<String, Object> props = new Hashtable<String, Object>();
+ // Set the protocolPluginType property which will be used
+ // by SAL
+ props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString(), "OVS");
+ c.setInterface(IPluginInFlowProgrammerService.class.getName(), props);
+ }
+ if (imp.equals(NodeFactory.class)) {
+ // export the service to be used by SAL
+ Dictionary<String, Object> props = new Hashtable<String, Object>();
+ // Set the protocolPluginType property which will be used
+ // by SAL
+ props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString(), "OVS");
+ props.put("protocolName", "OVS");
+ c.setInterface(INodeFactory.class.getName(), props);
+ }
+ if (imp.equals(NodeConnectorFactory.class)) {
+ // export the service to be used by SAL
+ Dictionary<String, Object> props = new Hashtable<String, Object>();
+ // Set the protocolPluginType property which will be used
+ // by SAL
+ props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString(), "OVS");
+ props.put("protocolName", "OVS");
+ c.setInterface(INodeConnectorFactory.class.getName(), props);
+ }
+
+ }
+}
--- /dev/null
+package org.opendaylight.ovsdb.internal;
+
+import java.net.InetAddress;
+import java.util.*;
+
+import org.opendaylight.ovsdb.sal.configuration.IPluginInNetworkConfigurationService;
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.ovsdb.database.Uuid;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ConfigurationService implements IPluginInNetworkConfigurationService
+{
+ private static final Logger logger = LoggerFactory
+ .getLogger(ConfigurationService.class);
+
+ IConnectionServiceInternal connectionService;
+
+ void init() {
+ }
+
+ /**
+ * Function called by the dependency manager when at least one dependency
+ * become unsatisfied or when the component is shutting down because for
+ * example bundle is being stopped.
+ *
+ */
+ void destroy() {
+ }
+
+ /**
+ * Function called by dependency manager after "init ()" is called and after
+ * the services provided by the class are registered in the service registry
+ *
+ */
+ void start() {
+ }
+
+ /**
+ * Function called by the dependency manager before the services exported by
+ * the component are unregistered, this will be followed by a "destroy ()"
+ * calls
+ *
+ */
+ void stop() {
+ }
+
+ public void setConnectionServiceInternal(IConnectionServiceInternal connectionService) {
+ this.connectionService = connectionService;
+ }
+
+ public void unsetConnectionServiceInternal(IConnectionServiceInternal connectionService) {
+ if (this.connectionService == connectionService) {
+ this.connectionService = null;
+ }
+ }
+
+ @Override
+ public boolean createBridgeDomain(Node node, String bridgeIdentifier){
+ if (connectionService == null) {
+ logger.error("Couldnt refer to the ConnectionService");
+ return false;
+ }
+ Connection connection = connectionService.getConnection(node);
+ String identifier = "TEST";
+
+ if (connection != null) {
+ String newBridge = "new_bridge";
+ String newInterface = "new_interface";
+ String newPort = "new_port";
+ String newSwitch = "new_switch";
+
+ Map<String, Object> bridgeRow = new HashMap<String, Object>();
+ bridgeRow.put("name", "br1");
+ ArrayList<String> ports = new ArrayList<String>();
+ ports.add("named-uuid");
+ ports.add(newPort);
+ bridgeRow.put("ports", ports);
+ InsertRequest addBridgeRequest = new InsertRequest("insert", "Bridge", newBridge, bridgeRow);
+
+ Map<String, Object> portRow = new HashMap<String, Object>();
+ portRow.put("name", "br1");
+ ArrayList<String> interfaces = new ArrayList<String>();
+ interfaces.add("named-uuid");
+ interfaces.add(newInterface);
+ portRow.put("interfaces", interfaces);
+ InsertRequest addPortRequest = new InsertRequest("insert", "Port", newPort, portRow);
+
+ Map<String, Object> interfaceRow = new HashMap<String, Object>();
+ interfaceRow.put("name", "br1");
+ interfaceRow.put("type", "internal");
+ InsertRequest addIntfRequest = new InsertRequest("insert", "Interface", newInterface, interfaceRow);
+
+ Map<String, Object> vswitchRow = new HashMap<String, Object>();
+ ArrayList<String> bridges = new ArrayList<String>();
+ bridges.add("named-uuid");
+ bridges.add(newBridge);
+ vswitchRow.put("bridges", bridges);
+ InsertRequest addSwitchRequest = new InsertRequest("insert", "Open_vSwitch", newSwitch, vswitchRow);
+
+ Object[] params = {"Open_vSwitch", addSwitchRequest, addIntfRequest, addPortRequest, addBridgeRequest};
+ OvsdbMessage msg = new OvsdbMessage("transact", params);
+ try {
+ connection.sendMessage(msg);
+ connection.readResponse(String[].class);
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return false;
+ } catch (Throwable e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean deleteBridgeDomain(Node node, String bridgeIdentifier) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public List<String> getBridgeDomains(Node node) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean addBridgeDomainConfig(Node node, String bridgeIdentifier, Map<String, String> config) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean removeBridgeDomainConfig(Node node, String bridgeIdentifier, Map<String, String> config) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public Map<String, String> getBridgeDomainConfigs(Node node, String bridgeIdentifier) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean createBridgeConnector(Node node, String bridgeConnectorIdentifier) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean deleteBridgeConnector(Node node, String bridgeConnectorIdentifier) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean associateBridgeConnector(Node node, String bridgeIdentifier, String bridgeConnectorIdentifier) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean disassociateBridgeConnector(Node node, String bridgeIdentifier, String bridgeConnectorIdentifier) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean addBridgeConnectorConfig(Node node, String bridgeConnectorIdentifier, Map<String, String> config) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean removeBridgeConnectorConfig(Node node, String bridgeConnectorIdentifier, Map<String, String> config) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public Map<String, String> getBridgeConnectorConfigs(Node node, String bridgeConnectorIdentifier) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Object genericConfigurationEvent(Node node, Map<String, String> config) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ }
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb.internal;
+import java.io.IOException;
+import java.net.Socket;
+
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.utils.Status;
+import org.opendaylight.controller.sal.utils.StatusCode;
+import org.opendaylight.ovsdb.database.Uuid;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.googlecode.jsonrpc4j.JsonRpcClient;
+import com.googlecode.jsonrpc4j.JsonRpcClient.RequestListener;
+
+public class Connection implements RequestListener {
+ private Node node;
+ private String identifier;
+ private Socket socket;
+ private JsonRpcClient rpcClient;
+ private static final Logger logger = LoggerFactory.getLogger(Connection.class);
+
+ public Connection(String identifier, Socket socket, JsonRpcClient rpcClient) {
+ super();
+ this.identifier = identifier;
+ this.socket = socket;
+ this.rpcClient = rpcClient;
+ rpcClient.setRequestListener(this);
+ try {
+ node = new Node("OVS", identifier);
+ } catch (Exception e) {
+ e.printStackTrace();
+ logger.error("Error creating Node {}", e.getMessage());
+ }
+ }
+
+ public String getIdentifier() {
+ return identifier;
+ }
+
+ public void setIdentifier(String identifier) {
+ this.identifier = identifier;
+ }
+
+ public Socket getSocket() {
+ return socket;
+ }
+
+ public void setSocket(Socket socket) {
+ this.socket = socket;
+ }
+
+ public JsonRpcClient getRpcClient() {
+ return rpcClient;
+ }
+ public void setRpcClient(JsonRpcClient rpcClient) {
+ this.rpcClient = rpcClient;
+ }
+
+ public Node getNode() {
+ return node;
+ }
+
+ public void setNode(Node node) {
+ this.node = node;
+ }
+
+ @Override
+ public void onBeforeRequestSent(JsonRpcClient client, ObjectNode request) {
+ request.remove("jsonrpc"); //ovsdb-server expects JSON-RPC v1.0
+ }
+
+ @Override
+ public void onBeforeResponseProcessed(JsonRpcClient client,
+ ObjectNode response) {
+
+ }
+
+ public void sendMessage(OvsdbMessage message) throws IOException{
+ try{
+ rpcClient.invoke(message.methodName, message.argument, socket.getOutputStream(), message.id);
+ }catch(Exception e){
+ logger.warn("Could not send RPC for {} ({})", message.methodName, e.getMessage());
+ }
+ }
+
+ public Object readResponse(Class<?> clazz) throws Throwable{
+ try{
+ if(clazz.equals(String[].class)){
+ String[] result = this.rpcClient.readResponse(String[].class, socket.getInputStream());
+ for (String res : result) logger.info(res);
+ return result;
+ }
+ else if(clazz.equals(Uuid[].class)){
+ Uuid[] result = this.rpcClient.readResponse(Uuid[].class, socket.getInputStream());
+ return result;
+ }
+ else{
+ ObjectNode jsonObject = this.rpcClient.readResponse(ObjectNode.class, socket.getInputStream());
+ ObjectMapper mapper = new ObjectMapper();
+ JsonParser parser = mapper.treeAsTokens(jsonObject);
+ Object result = mapper.readValue(parser, clazz);
+ return result;
+ }
+
+ }catch(Exception e){
+ logger.warn("Could not receive RPC response: {}", e.getMessage());
+ }
+ return null;
+ }
+
+ public Status disconnect() {
+ try {
+ socket.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return new Status(StatusCode.INTERNALERROR, e.getMessage());
+ }
+
+ return new Status(StatusCode.SUCCESS);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((identifier == null) ? 0 : identifier.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Connection other = (Connection) obj;
+ if (identifier == null) {
+ if (other.identifier != null)
+ return false;
+ } else if (!identifier.equals(other.identifier))
+ return false;
+ return true;
+ }
+}
--- /dev/null
+package org.opendaylight.ovsdb.internal;
+
+import java.net.InetAddress;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.opendaylight.ovsdb.sal.connection.ConnectionConstants;
+import org.opendaylight.ovsdb.sal.connection.IPluginInConnectionService;
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.utils.Status;
+import org.opendaylight.controller.sal.utils.StatusCode;
+
+/**
+ * Represents the openflow plugin component in charge of programming the flows
+ * the flow programming and relay them to functional modules above SAL.
+ */
+public class ConnectionService implements IPluginInConnectionService, IConnectionServiceInternal
+{
+ ConcurrentMap <String, Connection> ovsdbConnections;
+ public void init() {
+ ovsdbConnections = new ConcurrentHashMap<String, Connection>();
+ }
+
+ /**
+ * Function called by the dependency manager when at least one dependency
+ * become unsatisfied or when the component is shutting down because for
+ * example bundle is being stopped.
+ *
+ */
+ void destroy() {
+ }
+
+ /**
+ * Function called by dependency manager after "init ()" is called and after
+ * the services provided by the class are registered in the service registry
+ *
+ */
+ void start() {
+ }
+
+ /**
+ * Function called by the dependency manager before the services exported by
+ * the component are unregistered, this will be followed by a "destroy ()"
+ * calls
+ *
+ */
+ void stop() {
+ }
+
+ @Override
+ public Status disconnect(Node node) {
+ String identifier = (String)node.getID();
+ Connection connection = ovsdbConnections.get(identifier);
+ if (connection != null) {
+ ovsdbConnections.remove(identifier);
+ return connection.disconnect();
+ } else {
+ return new Status(StatusCode.NOTFOUND);
+ }
+ }
+
+ @Override
+ public Node connect(String identifier, Map<ConnectionConstants, String> params) {
+ InetAddress address;
+
+ try {
+ address = InetAddress.getByName(params.get(ConnectionConstants.ADDRESS));
+ } catch (Exception e) {
+ address = null;
+ }
+
+ if (address == null) {
+ return null;
+ }
+
+ int port = OvsdbIO.defaultOvsdbPort;
+
+ try {
+ port = Integer.parseInt(params.get(ConnectionConstants.PORT));
+ } catch (Exception e) {
+ port = OvsdbIO.defaultOvsdbPort;
+ }
+ try {
+ Connection connection = OvsdbIO.connect(identifier, address, port);
+ if (connection != null) {
+ ovsdbConnections.put(identifier, connection);
+ return connection.getNode();
+ }
+ } catch (Exception e) {
+ }
+ return null;
+ }
+
+ @Override
+ public Connection getConnection(Node node) {
+ String identifier = (String)node.getID();
+ return ovsdbConnections.get(identifier);
+ }
+ }
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb.internal;
+
+import org.opendaylight.controller.sal.flowprogrammer.Flow;
+import org.opendaylight.controller.sal.flowprogrammer.IPluginInFlowProgrammerService;
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.utils.Status;
+import org.opendaylight.controller.sal.utils.StatusCode;
+
+
+
+/**
+ * Represents the openflow plugin component in charge of programming the flows
+ * the flow programming and relay them to functional modules above SAL.
+ */
+public class FlowProgrammerService implements IPluginInFlowProgrammerService
+ {
+ void init() {
+ }
+
+ /**
+ * Function called by the dependency manager when at least one dependency
+ * become unsatisfied or when the component is shutting down because for
+ * example bundle is being stopped.
+ *
+ */
+ void destroy() {
+ }
+
+ /**
+ * Function called by dependency manager after "init ()" is called and after
+ * the services provided by the class are registered in the service registry
+ *
+ */
+ void start() {
+ }
+
+ /**
+ * Function called by the dependency manager before the services exported by
+ * the component are unregistered, this will be followed by a "destroy ()"
+ * calls
+ *
+ */
+ void stop() {
+ }
+
+
+ /**
+ * Synchronously add a flow to the network node
+ *
+ * @param node
+ * @param flow
+ */
+ public Status addFlow(Node node, Flow flow){
+ return new Status(StatusCode.SUCCESS);
+ }
+
+ /**
+ * Synchronously modify existing flow on the switch
+ *
+ * @param node
+ * @param flow
+ */
+ public Status modifyFlow(Node node, Flow oldFlow, Flow newFlow){
+ return new Status(StatusCode.SUCCESS);
+ }
+ /**
+ * Synchronously remove the flow from the network node
+ *
+ * @param node
+ * @param flow
+ */
+ public Status removeFlow(Node node, Flow flow){
+ return new Status(StatusCode.SUCCESS);
+ }
+
+ /**
+ * Asynchronously add a flow to the network node
+ *
+ * @param node
+ * @param flow
+ * @param rid
+ */
+ public Status addFlowAsync(Node node, Flow flow, long rid){
+ return new Status(StatusCode.SUCCESS);
+ }
+
+ /**
+ * Asynchronously modify existing flow on the switch
+ *
+ * @param node
+ * @param flow
+ * @param rid
+ */
+ public Status modifyFlowAsync(Node node, Flow oldFlow, Flow newFlow, long rid){
+ return new Status(StatusCode.SUCCESS);
+ }
+
+ /**
+ * Asynchronously remove the flow from the network node
+ *
+ * @param node
+ * @param flow
+ * @param rid
+ */
+ public Status removeFlowAsync(Node node, Flow flow, long rid){
+ return new Status(StatusCode.SUCCESS);
+ }
+
+ /**
+ * Remove all flows present on the network node
+ *
+ * @param node
+ */
+ public Status removeAllFlows(Node node){
+ return new Status(StatusCode.SUCCESS);
+ }
+
+ /**
+ * Send Barrier message synchronously. The caller will be blocked until the
+ * Barrier reply arrives.
+ *
+ * @param node
+ */
+ public Status syncSendBarrierMessage(Node node){
+ return new Status(StatusCode.SUCCESS);
+ }
+
+ /**
+ * Send Barrier message asynchronously. The caller is not blocked.
+ *
+ * @param node
+ */
+ public Status asyncSendBarrierMessage(Node node){
+ return new Status(StatusCode.SUCCESS);
+ }
+ }
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb.internal;
+
+import org.opendaylight.controller.sal.core.Node;
+
+public interface IConnectionServiceInternal {
+ public Connection getConnection(Node node);
+}
--- /dev/null
+package org.opendaylight.ovsdb.internal;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Map;\r
+\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+\r
+import org.opendaylight.ovsdb.database.OvsdbType;\r
+\r
+public class InsertRequest {\r
+ public String op;\r
+ public String table;\r
+ @JsonProperty("uuid-name")\r
+ public Object uuidName;\r
+ public Map<String, Object> row;\r
+\r
+ public InsertRequest(String op, String table, String uuidName, Map<String, Object> row){\r
+ this.op = op;\r
+ this.table = table;\r
+ this.uuidName = uuidName;\r
+ this.row = row;\r
+ }\r
+}\r
--- /dev/null
+package org.opendaylight.ovsdb.internal;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.felix.dm.Component;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.opendaylight.controller.sal.core.Actions;
+import org.opendaylight.controller.sal.core.Bandwidth;
+import org.opendaylight.controller.sal.core.Buffers;
+import org.opendaylight.controller.sal.core.Capabilities;
+import org.opendaylight.controller.sal.core.Capabilities.CapabilitiesType;
+import org.opendaylight.controller.sal.core.ConstructionException;
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.controller.sal.core.Property;
+import org.opendaylight.controller.sal.core.State;
+import org.opendaylight.controller.sal.core.Tables;
+import org.opendaylight.controller.sal.core.TimeStamp;
+import org.opendaylight.controller.sal.inventory.IPluginInInventoryService;
+import org.opendaylight.controller.sal.utils.NodeCreator;
+import org.opendaylight.controller.sal.utils.NodeConnectorCreator;
+
+/**
+ * Stub Implementation for IPluginInReadService used by SAL
+ *
+ *
+ */
+public class InventoryService implements IPluginInInventoryService {
+ private static final Logger logger = LoggerFactory
+ .getLogger(InventoryService.class);
+
+ private ConcurrentMap<Node, Map<String, Property>> nodeProps; // properties
+ // are
+ // maintained
+ // in global
+ // container
+ // only
+ private ConcurrentMap<NodeConnector, Map<String, Property>> nodeConnectorProps; // properties
+ // are
+ // maintained
+ // in
+ // global
+ // container
+ // only
+
+ /**
+ * Function called by the dependency manager when all the required
+ * dependencies are satisfied
+ *
+ */
+ void init() {
+ nodeProps = new ConcurrentHashMap<Node, Map<String, Property>>();
+ nodeConnectorProps = new ConcurrentHashMap<NodeConnector, Map<String, Property>>();
+ Node.NodeIDType.registerIDType("STUB", Integer.class);
+ NodeConnector.NodeConnectorIDType.registerIDType("STUB", Integer.class,
+ "STUB");
+
+ setupNodeProps();
+ setupNodeConnectorProps();
+ }
+
+ private void setupNodeConnectorProps() {
+ Map<String, Property> ncPropMap = new HashMap<String, Property>();
+ Capabilities cap = new Capabilities(
+ CapabilitiesType.FLOW_STATS_CAPABILITY.getValue());
+ ncPropMap.put(Capabilities.CapabilitiesPropName, cap);
+ Bandwidth bw = new Bandwidth(Bandwidth.BW1Gbps);
+ ncPropMap.put(Bandwidth.BandwidthPropName, bw);
+ State st = new State(State.EDGE_UP);
+ ncPropMap.put(State.StatePropName, st);
+
+ // setup property map for all node connectors
+ NodeConnector nc;
+ Node node;
+ try {
+ node = new Node("STUB", new Integer(0xCAFE));
+ nc = new NodeConnector("STUB", 0xCAFE, node);
+ } catch (ConstructionException e) {
+ nc = null;
+ node = null;
+ }
+ nodeConnectorProps.put(nc, ncPropMap);
+
+ try {
+ node = new Node("STUB", 3366);
+ nc = new NodeConnector("STUB", 12, node);
+ } catch (ConstructionException e) {
+ nc = null;
+ node = null;
+ }
+ nodeConnectorProps.put(nc, ncPropMap);
+
+ try {
+ node = new Node("STUB", 4477);
+ nc = new NodeConnector("STUB", 34, node);
+ } catch (ConstructionException e) {
+ nc = null;
+ node = null;
+ }
+ nodeConnectorProps.put(nc, ncPropMap);
+
+ }
+
+ private void setupNodeProps() {
+ Map<String, Property> propMap = new HashMap<String, Property>();
+
+ Tables t = new Tables((byte) 1);
+ propMap.put(Tables.TablesPropName, t);
+ Capabilities c = new Capabilities((int) 3);
+ propMap.put(Capabilities.CapabilitiesPropName, c);
+ Actions a = new Actions((int) 2);
+ propMap.put(Actions.ActionsPropName, a);
+ Buffers b = new Buffers((int) 1);
+ propMap.put(Buffers.BuffersPropName, b);
+ Long connectedSinceTime = 100000L;
+ TimeStamp timeStamp = new TimeStamp(connectedSinceTime,
+ "connectedSince");
+ propMap.put(TimeStamp.TimeStampPropName, timeStamp);
+
+ // setup property map for all nodes
+ Node node;
+ try {
+ node = new Node("STUB", new Integer(0xCAFE));
+ } catch (ConstructionException e) {
+ node = null;
+ }
+
+ nodeProps.put(node, propMap);
+
+ try {
+ node = new Node("STUB", 3366);
+ } catch (ConstructionException e) {
+ node = null;
+ }
+ nodeProps.put(node, propMap);
+
+ try {
+ node = new Node("STUB", 4477);
+ } catch (ConstructionException e) {
+ node = null;
+ }
+ nodeProps.put(node, propMap);
+
+ }
+
+ /**
+ * Function called by the dependency manager when at least one dependency
+ * become unsatisfied or when the component is shutting down because for
+ * example bundle is being stopped.
+ *
+ */
+ void destroy() {
+ }
+
+ /**
+ * Function called by dependency manager after "init ()" is called and after
+ * the services provided by the class are registered in the service registry
+ *
+ */
+ void start() {
+ }
+
+ /**
+ * Function called by the dependency manager before the services exported by
+ * the component are unregistered, this will be followed by a "destroy ()"
+ * calls
+ *
+ */
+ void stop() {
+ }
+
+ /**
+ * Retrieve nodes from openflow
+ */
+ @Override
+ public ConcurrentMap<Node, Map<String, Property>> getNodeProps() {
+ return nodeProps;
+ }
+
+ /**
+ * Retrieve nodeConnectors from openflow
+ */
+ @Override
+ public ConcurrentMap<NodeConnector, Map<String, Property>> getNodeConnectorProps(
+ Boolean refresh) {
+ return nodeConnectorProps;
+ }
+
+}
--- /dev/null
+package org.opendaylight.ovsdb.internal;\r
+\r
+import java.lang.String;\r
+\r
+public class JSONMsg{\r
+ public String jsonStr;\r
+\r
+ public JSONMsg(String jsonStr){\r
+ this.jsonStr = jsonStr;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb.internal;\r
+\r
+import java.util.ArrayList;\r
+\r
+public class MutateRequest {\r
+ public String op = "mutate";\r
+ public String table;\r
+ public ArrayList<Object> where;\r
+ public ArrayList<Object> mutations;\r
+\r
+ public MutateRequest(String table, ArrayList<Object> where, ArrayList<Object> mutations){\r
+ this.table = table;\r
+ this.where = where;\r
+ this.mutations = mutations;\r
+ }\r
+}\r
--- /dev/null
+package org.opendaylight.ovsdb.internal;
+
+import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.controller.sal.utils.INodeConnectorFactory;
+import org.opendaylight.controller.sal.core.Node;
+
+public class NodeConnectorFactory implements INodeConnectorFactory
+ {
+ void init() {
+ }
+
+ /**
+ * Function called by the dependency manager when at least one dependency
+ * become unsatisfied or when the component is shutting down because for
+ * example bundle is being stopped.
+ *
+ */
+ void destroy() {
+ }
+
+ /**
+ * Function called by dependency manager after "init ()" is called and after
+ * the services provided by the class are registered in the service registry
+ *
+ */
+ void start() {
+ }
+
+ /**
+ * Function called by the dependency manager before the services exported by
+ * the component are unregistered, this will be followed by a "destroy ()"
+ * calls
+ *
+ */
+ void stop() {
+ }
+
+ public NodeConnector fromStringNoNode(String typeStr, String IDStr,
+ Node n){
+ if(typeStr.equals("OVS")){
+ try {
+ return new NodeConnector(typeStr, IDStr, n);
+ } catch (Exception ex) {
+ return null;
+ }
+ }
+ return null;
+ }
+}
--- /dev/null
+package org.opendaylight.ovsdb.internal;
+
+import org.opendaylight.controller.sal.core.ConstructionException;
+import org.opendaylight.controller.sal.utils.INodeFactory;
+import org.opendaylight.controller.sal.core.Node;
+
+public class NodeFactory implements INodeFactory
+ {
+ void init() {
+ }
+
+ /**
+ * Function called by the dependency manager when at least one dependency
+ * become unsatisfied or when the component is shutting down because for
+ * example bundle is being stopped.
+ *
+ */
+ void destroy() {
+ }
+
+ /**
+ * Function called by dependency manager after "init ()" is called and after
+ * the services provided by the class are registered in the service registry
+ *
+ */
+ void start() {
+ }
+
+ /**
+ * Function called by the dependency manager before the services exported by
+ * the component are unregistered, this will be followed by a "destroy ()"
+ * calls
+ *
+ */
+ void stop() {
+ }
+
+ public Node fromString(String nodeType, String nodeId){
+ if(nodeType.equals("OVS"))
+ try{
+ return new Node("OVS", nodeId);
+ } catch(ConstructionException e)
+ {
+ return null;
+ }
+ return null;
+ }
+}
--- /dev/null
+package org.opendaylight.ovsdb.internal;\r
+\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.io.OutputStream;\r
+import java.net.*;\r
+\r
+import org.opendaylight.ovsdb.internal.OvsdbIO;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+import com.fasterxml.jackson.core.JsonParser;\r
+import com.fasterxml.jackson.databind.ObjectMapper;\r
+import com.fasterxml.jackson.databind.node.ObjectNode;\r
+import com.googlecode.jsonrpc4j.JsonRpcClient;\r
+import com.googlecode.jsonrpc4j.JsonRpcClient.RequestListener;\r
+\r
+\r
+public class OvsdbIO {\r
+ private static final Logger logger = LoggerFactory\r
+ .getLogger(OvsdbIO.class);\r
+ public static final short defaultOvsdbPort = 6634;\r
+\r
+ public static Connection connect (String identifier, InetAddress address, int port) {\r
+ try{\r
+ Socket clientSocket = new Socket(address, port);\r
+ clientSocket.setReuseAddress(true);\r
+ Connection connection = new Connection(identifier, clientSocket, new JsonRpcClient());\r
+ return connection;\r
+ } catch(Exception e){\r
+ logger.warn("Failed to connect to server on {} : {} ({})", address.toString(), defaultOvsdbPort, e.getMessage());\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ public static Connection connect (String identifier, InetAddress address) throws IOException, Throwable {\r
+ return connect(identifier, address, defaultOvsdbPort);\r
+ }\r
+}\r
--- /dev/null
+package org.opendaylight.ovsdb.internal;\r
+\r
+import java.util.Random;\r
+\r
+public class OvsdbMessage {\r
+ String methodName;\r
+ Object[] argument;\r
+ String id;\r
+\r
+ public OvsdbMessage(String method, Object[] arg){\r
+ this.methodName = method;\r
+ this.argument = arg;\r
+ Random x = new Random();\r
+ this.id = Integer.toString(x.nextInt(10000));\r
+ }\r
+}\r
--- /dev/null
+package org.opendaylight.ovsdb.internal;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.opendaylight.controller.sal.action.Action;
+import org.opendaylight.controller.sal.action.Controller;
+import org.opendaylight.controller.sal.action.Drop;
+import org.opendaylight.controller.sal.action.Flood;
+import org.opendaylight.controller.sal.action.FloodAll;
+import org.opendaylight.controller.sal.action.HwPath;
+import org.opendaylight.controller.sal.action.Loopback;
+import org.opendaylight.controller.sal.action.Output;
+import org.opendaylight.controller.sal.action.PopVlan;
+import org.opendaylight.controller.sal.action.PushVlan;
+import org.opendaylight.controller.sal.action.SetDlDst;
+import org.opendaylight.controller.sal.action.SetDlSrc;
+import org.opendaylight.controller.sal.action.SetDlType;
+import org.opendaylight.controller.sal.action.SetNwDst;
+import org.opendaylight.controller.sal.action.SetNwSrc;
+import org.opendaylight.controller.sal.action.SetNwTos;
+import org.opendaylight.controller.sal.action.SetTpDst;
+import org.opendaylight.controller.sal.action.SetTpSrc;
+import org.opendaylight.controller.sal.action.SetVlanCfi;
+import org.opendaylight.controller.sal.action.SetVlanId;
+import org.opendaylight.controller.sal.action.SetVlanPcp;
+import org.opendaylight.controller.sal.action.SwPath;
+import org.opendaylight.controller.sal.core.ConstructionException;
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.controller.sal.core.NodeTable;
+import org.opendaylight.controller.sal.flowprogrammer.Flow;
+import org.opendaylight.controller.sal.match.Match;
+import org.opendaylight.controller.sal.match.MatchType;
+import org.opendaylight.controller.sal.reader.FlowOnNode;
+import org.opendaylight.controller.sal.reader.IPluginInReadService;
+import org.opendaylight.controller.sal.reader.NodeConnectorStatistics;
+import org.opendaylight.controller.sal.reader.NodeDescription;
+import org.opendaylight.controller.sal.reader.NodeTableStatistics;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+/**
+ * Stub Implementation for IPluginInReadService used by SAL
+ *
+ *
+ */
+public class ReadService implements IPluginInReadService {
+ private static final Logger logger = LoggerFactory
+ .getLogger(ReadService.class);
+
+ /**
+ * Function called by the dependency manager when all the required
+ * dependencies are satisfied
+ *
+ */
+ void init() {
+ }
+
+ /**
+ * Function called by the dependency manager when at least one dependency
+ * become unsatisfied or when the component is shutting down because for
+ * example bundle is being stopped.
+ *
+ */
+ void destroy() {
+ }
+
+ /**
+ * Function called by dependency manager after "init ()" is called and after
+ * the services provided by the class are registered in the service registry
+ *
+ */
+ void start() {
+ }
+
+ /**
+ * Function called by the dependency manager before the services exported by
+ * the component are unregistered, this will be followed by a "destroy ()"
+ * calls
+ *
+ */
+ void stop() {
+ }
+
+ @Override
+ public FlowOnNode readFlow(Node node, Flow flow, boolean cached) {
+ FlowOnNode fn1 = new FlowOnNode(flow);
+ fn1.setByteCount(100);
+ fn1.setDurationNanoseconds(400);
+ fn1.setDurationSeconds(40);
+ fn1.setTableId((byte) 0x1);
+ fn1.setPacketCount(200);
+ return fn1;
+ }
+
+ @Override
+ public List<FlowOnNode> readAllFlow(Node node, boolean cached) {
+
+ ArrayList<FlowOnNode> list = new ArrayList<FlowOnNode>();
+ ArrayList<Action> actionList = new ArrayList<Action>();
+ actionList.add(new Drop()); //IT assumes this is first element
+ actionList.add(new Loopback());
+ actionList.add(new Flood());
+ actionList.add(new FloodAll());
+ actionList.add(new Controller());
+ actionList.add(new SwPath());
+ actionList.add(new HwPath());
+ try {
+ actionList.add(new Output(new NodeConnector("STUB", 0xCAFE, node)));
+ } catch (ConstructionException e) {
+
+ }
+ byte dst[] = { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5 };
+ byte src[] = { (byte) 5, (byte) 4, (byte) 3, (byte) 2, (byte) 1 };
+ actionList.add(new SetDlSrc(src));
+ actionList.add(new SetDlDst(dst));
+ actionList.add(new SetDlType(10));
+
+ actionList.add(new SetVlanId(2));
+ actionList.add(new SetVlanPcp(3));
+ actionList.add(new SetVlanCfi(1));
+
+ actionList.add(new PopVlan());
+ actionList.add(new PushVlan(0x8100, 1, 1, 1234));
+
+ try {
+ actionList.add(new SetNwSrc(InetAddress.getByName("2.2.2.2")));
+ actionList.add(new SetNwDst(InetAddress.getByName("1.1.1.1")));
+ } catch (UnknownHostException e) {
+
+ }
+ actionList.add(new SetNwTos(0x10));
+ actionList.add(new SetTpSrc(4201));
+ actionList.add(new SetTpDst(8080));
+
+ short priority = 3500; //IT assumes this value
+ for (Action a : actionList) {
+ Flow flow = new Flow();
+ Match match = new Match();
+ try {
+ match.setField(MatchType.NW_DST,
+ InetAddress.getByName("1.1.1.1"));
+ } catch (UnknownHostException e) {
+
+ }
+ flow.setMatch(match);
+ List<Action> actions = new ArrayList<Action>();
+ actions.add(a);
+ flow.setActions(actions);
+ flow.setPriority(priority++);
+ flow.setIdleTimeout((short) 1000);
+ flow.setHardTimeout((short) 2000);
+ flow.setId(12345);
+
+ FlowOnNode fn1 = new FlowOnNode(flow);
+ fn1.setByteCount(100);
+ fn1.setDurationNanoseconds(400);
+ fn1.setDurationSeconds(40);
+ fn1.setTableId((byte) 0x1);
+ fn1.setPacketCount(200);
+
+ list.add(fn1);
+ }
+ return list;
+ }
+
+ @Override
+ public NodeDescription readDescription(Node node, boolean cached) {
+ NodeDescription desc = new NodeDescription();
+ desc.setDescription("This is a sample node description");
+ desc.setHardware("stub hardware");
+ desc.setSoftware("stub software");
+ desc.setSerialNumber("123");
+ desc.setManufacturer("opendaylight");
+ return desc;
+ }
+
+ @Override
+ public NodeConnectorStatistics readNodeConnector(NodeConnector connector,
+ boolean cached) {
+ NodeConnectorStatistics stats = new NodeConnectorStatistics();
+ stats.setNodeConnector(connector);
+ stats.setCollisionCount(4);
+ stats.setReceiveByteCount(1000);
+ stats.setReceiveCRCErrorCount(1);
+ stats.setReceiveDropCount(2);
+ stats.setReceiveErrorCount(3);
+ stats.setReceiveFrameErrorCount(5);
+ stats.setReceiveOverRunErrorCount(6);
+ stats.setReceivePacketCount(250);
+ stats.setTransmitByteCount(5000);
+ stats.setTransmitDropCount(50);
+ stats.setTransmitErrorCount(10);
+ stats.setTransmitPacketCount(500);
+
+ return stats;
+ }
+
+ @Override
+ public List<NodeConnectorStatistics> readAllNodeConnector(Node node,
+ boolean cached) {
+ NodeConnectorStatistics stats = new NodeConnectorStatistics();
+ try {
+ NodeConnector nc = new NodeConnector("STUB", 0xCAFE, node);
+ stats.setNodeConnector(nc);
+ } catch (ConstructionException e) {
+ // couldn't create nodeconnector.
+ }
+ stats.setCollisionCount(4);
+ stats.setReceiveByteCount(1000);
+ stats.setReceiveCRCErrorCount(1);
+ stats.setReceiveDropCount(2);
+ stats.setReceiveErrorCount(3);
+ stats.setReceiveFrameErrorCount(5);
+ stats.setReceiveOverRunErrorCount(6);
+ stats.setReceivePacketCount(250);
+ stats.setTransmitByteCount(5000);
+ stats.setTransmitDropCount(50);
+ stats.setTransmitErrorCount(10);
+ stats.setTransmitPacketCount(500);
+
+ List<NodeConnectorStatistics> result = new ArrayList<NodeConnectorStatistics>();
+ result.add(stats);
+ return result;
+ }
+
+ @Override
+ public long getTransmitRate(NodeConnector connector) {
+ return 100;
+ }
+
+ @Override
+ public NodeTableStatistics readNodeTable(NodeTable table, boolean b) {
+ NodeTableStatistics stats = new NodeTableStatistics();
+ stats.setNodeTable(table);
+ stats.setActiveCount(4);
+ stats.setLookupCount(4);
+ stats.setMatchedCount(4);
+
+ return stats;
+ }
+
+ @Override
+ public List<NodeTableStatistics> readAllNodeTable(Node node, boolean cached) {
+ NodeTableStatistics stats = new NodeTableStatistics();
+ try {
+ NodeTable nt = new NodeTable(NodeTable.NodeTableIDType.OPENFLOW, Byte.valueOf("10"), node);
+ stats.setNodeTable(nt);
+ } catch (ConstructionException e) {
+ // couldn't create nodetable.
+ }
+
+ stats.setActiveCount(4);
+ stats.setLookupCount(4);
+ stats.setMatchedCount(4);
+
+ List<NodeTableStatistics> result = new ArrayList<NodeTableStatistics>();
+ result.add(stats);
+ return result;
+ }
+}
--- /dev/null
+package org.opendaylight.ovsdb.sal.configuration;
+
+public interface INetworkConfigurationService extends IPluginInNetworkConfigurationService {
+}
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb.sal.configuration;
+
+import java.util.List;
+import java.util.Map;
+
+import org.opendaylight.controller.sal.core.Node;
+
+/**
+ * @file IPluginInConfigurationService.java
+ *
+ */
+public interface IPluginInNetworkConfigurationService {
+
+ /**
+ * Create a Bridge Domain
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeDomainIdentifier String representation of a Bridge Domain
+ */
+ public boolean createBridgeDomain(Node node, String bridgeIdentifier);
+
+ /**
+ * Delete a Bridge Domain
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeDomainIdentifier String representation of a Bridge Domain
+ */
+ public boolean deleteBridgeDomain(Node node, String bridgeIdentifier);
+
+ /**
+ * Returns the configured Bridge Domains
+ *
+ * @param node Node serving this configuration service
+ * @return Bridge Domains
+ */
+ public List<String> getBridgeDomains(Node node);
+
+ /**
+ * add Bridge Domain Configuration
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeDomainIdentifier String representation of a Bridge Domain
+ * @param configs Map representation of ConfigName and Configuration Value in Strings.
+ */
+ public boolean addBridgeDomainConfig(Node node, String bridgeIdentifier, Map <String, String> config);
+
+ /**
+ * Delete Bridge Domain Configuration
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeDomainIdentifier String representation of a Bridge Domain
+ * @param configs Map representation of ConfigName and Configuration Value in Strings.
+ */
+ public boolean removeBridgeDomainConfig(Node node, String bridgeIdentifier, Map <String, String> config);
+
+ /**
+ * Returns Bridge Domain Configurations
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeDomainIdentifier String representation of a Bridge Domain
+ * @return Bridge Domain configurations
+ */
+
+ public Map <String, String> getBridgeDomainConfigs(Node node, String bridgeIdentifier);
+
+ /**
+ * Create a Bridge Connector
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeConnectorIdentifier String representation of the node connector.
+ */
+ public boolean createBridgeConnector(Node node, String bridgeConnectorIdentifier);
+
+ /**
+ * Delete a Bridge Connector
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeConnectorIdentifier String representation of the node connector.
+ */
+ public boolean deleteBridgeConnector(Node node, String bridgeConnectorIdentifier);
+
+ /**
+ * Add/Associate BridgeConnectors on a given Bridge Domain
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeDomainIdentifier String representation of a Bridge Domain
+ * @param bridgeConnectorIdentifier String representation of the node connector.
+ */
+ public boolean associateBridgeConnector(Node node, String bridgeIdentifier, String bridgeConnectorIdentifier);
+
+ /**
+ * Add/Associate BridgeConnectors on a given Bridge Domain
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeDomainIdentifier String representation of a Bridge Domain
+ * @param bridgeConnectorIdentifier String representation of the node connector.
+ */
+ public boolean disassociateBridgeConnector(Node node, String bridgeIdentifier, String bridgeConnectorIdentifier);
+
+ /**
+ * add Bridge Connector Configuration
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeConnectorIdentifier String representation of the node connector.
+ * @param config Map representation of ConfigName and Configuration Value in Strings.
+ */
+ public boolean addBridgeConnectorConfig(Node node, String bridgeConnectorIdentifier, Map <String, String> config);
+
+ /**
+ * Delete Bridge Connector Configuration
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeConnectorIdentifier String representation of the node connector.
+ * @param config Map representation of ConfigName and Configuration Value in Strings.
+ */
+ public boolean removeBridgeConnectorConfig(Node node, String bridgeConnectorIdentifier, Map <String, String> config);
+
+ /**
+ * Returns Bridge Connector Configurations
+ *
+ * @param node Node serving this configuration service
+ * @param bridgeConnectorIdentifier String representation of a Bridge Connector
+ * @return Bridge Connector configurations
+ */
+ public Map <String, String> getBridgeConnectorConfigs(Node node, String bridgeConnectorIdentifier);
+
+ /**
+ * Generic Configuration Event/Command. It is not practically possible to define all the possible combinations
+ * of configurations across various plugins. Hence having a generic event/command will help bridge the gap until
+ * a more abstracted explicit call is defined in Configuration Service.
+ */
+ public Object genericConfigurationEvent(Node node, Map <String, String> config);
+}
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb.sal.connection;
+
+/**
+ * Global Constants
+ *
+ */
+public enum ConnectionConstants {
+ ADDRESS("address"),
+ PORT("port"),
+ PROTOCOL("protocol"),
+ USERNAME("username"),
+ PASSWORD("password"),
+ SECURITYKEY("securitykey");
+
+ private ConnectionConstants(String name) {
+ this.name = name;
+ }
+
+ private String name;
+
+ public String toString() {
+ return name;
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb.sal.connection;
+/**
+ * This interface defines the methods the SAL service which relay the Connection
+ * Notification events to the functional modules
+ */
+public interface IConnectionListener extends IPluginOutConnectionService {
+}
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb.sal.connection;
+
+import java.util.Map;
+
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.utils.Status;
+
+/**
+ * Interface that defines the methods available to the functional modules that operate
+ * above SAL for disconnecting or connecting to a particular node.
+ */
+public interface IConnectionService {
+ /**
+ * Disconnect a Node that is connected to this Controller.
+ *
+ * @param node
+ * @param flow
+ */
+ public Status disconnect(Node node);
+
+ /**
+ * Connect to a node with a specified node type.
+ *
+ * @param type Type of the node representing NodeIDType.
+ * @param connectionIdentifier Convenient identifier for the applications to make use of
+ * @param params Connection Params in Map format. This is entirely handled by the south-bound
+ * plugins and is an opaque value for SAL. Typical values keyed inside this params are
+ * Management IP-Address, Username, Password, Security Keys, etc...
+ *
+ * @return Node
+ */
+ public Node connect (String type, String connectionIdentifier, Map<ConnectionConstants, String> params);
+
+
+ /**
+ * Discover the node type and Connect to the first plugin that is able to connect with the specified parameters.
+ *
+ * @param type Type of the node representing NodeIDType.
+ * @param connectionIdentifier Convenient identifier for the applications to make use of
+ * @param params Connection Params in Map format. This is entirely handled by the south-bound
+ * plugins and is an opaque value for SAL. Typical values keyed inside this params are
+ * Management IP-Address, Username, Password, Security Keys, etc...
+ *
+ * @return Node
+ */
+ public Node connect (String connectionIdentifier, Map<ConnectionConstants, String> params);
+
+}
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb.sal.connection;
+
+import java.util.Map;
+
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.utils.Status;
+
+/**
+ * @file IPluginInConnectionService.java
+ *
+ * @brief Connection interface to be implemented by protocol plugins
+ */
+public interface IPluginInConnectionService {
+ /**
+ * Disconnect a Node that is connected to this Controller.
+ *
+ * @param node
+ * @param flow
+ */
+ public Status disconnect(Node node);
+
+ /**
+ * Connect to a node
+ *
+ * @param connectionIdentifier Convenient identifier for the applications to make use of
+ * @param params Connection Params in Map format. This is entirely handled by the south-bound
+ * plugins and is an opaque value for SAL. Typical values keyed inside this params are
+ * Management IP-Address, Username, Password, Security Keys, etc...
+ *
+ * @return Node
+ */
+ public Node connect (String connectionIdentifier, Map<ConnectionConstants, String> params);
+}
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb.sal.connection;
+
+import org.opendaylight.controller.sal.core.Node;
+
+public interface IPluginOutConnectionService {
+ /**
+ * Query SAL if a specified Node is allowed to be connected to this Controller.
+ *
+ * @param node the network node
+ */
+ public boolean isConnectionAllowed(Node node);
+}
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb;\r
+\r
+import java.net.InetAddress;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.junit.Test;\r
+import org.opendaylight.controller.sal.core.Node;\r
+import org.opendaylight.controller.sal.core.NodeConnector;\r
+import org.opendaylight.ovsdb.database.Uuid;\r
+import org.opendaylight.ovsdb.internal.*;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+public class OvsdbTestAddBridge {\r
+ private static final Logger logger = LoggerFactory\r
+ .getLogger(OvsdbTestAddBridge.class);\r
+ @Test\r
+ public void addBridge() throws Throwable{\r
+ Node.NodeIDType.registerIDType("OVS", String.class);\r
+ NodeConnector.NodeConnectorIDType.registerIDType("OVS", String.class, "OVS");\r
+ String identifier = "TEST";\r
+ InetAddress address = InetAddress.getByName("172.16.3.196");\r
+ Connection connection = OvsdbIO.connect(identifier, address);\r
+ if (connection != null) {\r
+ String newBridge = "new_bridge";\r
+ String newInterface = "new_interface";\r
+ String newPort = "new_port";\r
+ String newSwitch = "new_switch";\r
+\r
+ Map<String, Object> bridgeRow = new HashMap<String, Object>();\r
+ bridgeRow.put("name", "br1");\r
+ ArrayList<String> ports = new ArrayList<String>();\r
+ ports.add("named-uuid");\r
+ ports.add(newPort);\r
+ bridgeRow.put("ports", ports);\r
+ InsertRequest addBridgeRequest = new InsertRequest("insert", "Bridge", newBridge, bridgeRow);\r
+\r
+ Map<String, Object> portRow = new HashMap<String, Object>();\r
+ portRow.put("name", "br1");\r
+ ArrayList<String> interfaces = new ArrayList<String>();\r
+ interfaces.add("named-uuid");\r
+ interfaces.add(newInterface);\r
+ portRow.put("interfaces", interfaces);\r
+ InsertRequest addPortRequest = new InsertRequest("insert", "Port", newPort, portRow);\r
+\r
+ Map<String, Object> interfaceRow = new HashMap<String, Object>();\r
+ interfaceRow.put("name", "br1");\r
+ interfaceRow.put("type", "internal");\r
+ InsertRequest addIntfRequest = new InsertRequest("insert", "Interface", newInterface, interfaceRow);\r
+\r
+ Map<String, Object> vswitchRow = new HashMap<String, Object>();\r
+ ArrayList<String> bridges = new ArrayList<String>();\r
+ bridges.add("named-uuid");\r
+ bridges.add(newBridge);\r
+ vswitchRow.put("bridges", bridges);\r
+ InsertRequest addSwitchRequest = new InsertRequest("insert", "Open_vSwitch", newSwitch, vswitchRow);\r
+\r
+ Object[] params = {"Open_vSwitch", addSwitchRequest, addIntfRequest, addPortRequest, addBridgeRequest};\r
+ OvsdbMessage msg = new OvsdbMessage("transact", params);\r
+ connection.sendMessage(msg);\r
+ connection.readResponse(Uuid[].class);\r
+\r
+ }\r
+ }\r
+\r
+ public void addPort() throws Throwable{\r
+ InetAddress address = InetAddress.getByName("172.16.3.169");\r
+ Connection connection = OvsdbIO.connect("add_port", address);\r
+ if(connection != null){\r
+ String newPort = "new_port";\r
+ String newIntf = "new_interface";\r
+\r
+ Map<String, Object> portRow = new HashMap<String, Object>();\r
+ portRow.put("name", "vnic0");\r
+ ArrayList<String> interfaces = new ArrayList<String>();\r
+ interfaces.add("named-uuid");\r
+ interfaces.add(newIntf);\r
+ portRow.put("interfaces", interfaces);\r
+ InsertRequest addPortRequest = new InsertRequest("insert", "Port", newPort, portRow);\r
+\r
+ Map<String,Object> intfRow = new HashMap<String, Object>();\r
+ intfRow.put("name", "vnic0");\r
+ InsertRequest addIntfRequest = new InsertRequest("insert", "Interface", newIntf, intfRow);\r
+\r
+\r
+ }\r
+ }\r
+}\r