Initial commit
authorEvan Zeller <evanrzeller@gmail.com>
Mon, 22 Jul 2013 23:56:11 +0000 (19:56 -0400)
committerEvan Zeller <evanrzeller@gmail.com>
Mon, 22 Jul 2013 23:56:11 +0000 (19:56 -0400)
Signed-off-by: Evan Zeller <evanrzeller@gmail.com>
43 files changed:
.gitignore [new file with mode: 0755]
commons/.project [new file with mode: 0755]
commons/.settings/org.eclipse.core.resources.prefs [new file with mode: 0755]
commons/.settings/org.eclipse.m2e.core.prefs [new file with mode: 0755]
commons/pom.xml [new file with mode: 0755]
commons/space_and_tabs_checks.xml [new file with mode: 0755]
ovsdb/.classpath [new file with mode: 0755]
ovsdb/.project [new file with mode: 0755]
ovsdb/.settings/org.eclipse.core.resources.prefs [new file with mode: 0755]
ovsdb/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0755]
ovsdb/.settings/org.eclipse.m2e.core.prefs [new file with mode: 0755]
ovsdb/META-INF/MANIFEST.MF [new file with mode: 0755]
ovsdb/pom.xml [new file with mode: 0755]
ovsdb/protocol_plugins.ovsdb.iml [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/OvsdbClient.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/database/ColumnSchema.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/database/DatabaseSchema.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/database/OvsdbType.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/database/TableSchema.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/database/Uuid.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/Activator.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConfigurationService.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/Connection.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConnectionService.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/FlowProgrammerService.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/IConnectionServiceInternal.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/InsertRequest.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/InventoryService.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/JSONMsg.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/MutateRequest.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/NodeConnectorFactory.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/NodeFactory.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/OvsdbIO.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/OvsdbMessage.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ReadService.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/sal/configuration/INetworkConfigurationService.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/sal/configuration/IPluginInNetworkConfigurationService.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/ConnectionConstants.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IConnectionListener.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IConnectionService.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IPluginInConnectionService.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IPluginOutConnectionService.java [new file with mode: 0755]
ovsdb/src/test/java/org/opendaylight/ovsdb/OvsdbTestAddBridge.java [new file with mode: 0755]

diff --git a/.gitignore b/.gitignore
new file mode 100755 (executable)
index 0000000..62eaec4
--- /dev/null
@@ -0,0 +1,2 @@
+.idea/\r
+target/
\ No newline at end of file
diff --git a/commons/.project b/commons/.project
new file mode 100755 (executable)
index 0000000..6196465
--- /dev/null
@@ -0,0 +1,17 @@
+<?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>
diff --git a/commons/.settings/org.eclipse.core.resources.prefs b/commons/.settings/org.eclipse.core.resources.prefs
new file mode 100755 (executable)
index 0000000..99f26c0
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/commons/.settings/org.eclipse.m2e.core.prefs b/commons/.settings/org.eclipse.m2e.core.prefs
new file mode 100755 (executable)
index 0000000..f897a7f
--- /dev/null
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/commons/pom.xml b/commons/pom.xml
new file mode 100755 (executable)
index 0000000..061db3e
--- /dev/null
@@ -0,0 +1,1044 @@
+<?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>
diff --git a/commons/space_and_tabs_checks.xml b/commons/space_and_tabs_checks.xml
new file mode 100755 (executable)
index 0000000..49a5802
--- /dev/null
@@ -0,0 +1,17 @@
+<?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
diff --git a/ovsdb/.classpath b/ovsdb/.classpath
new file mode 100755 (executable)
index 0000000..99d30ae
--- /dev/null
@@ -0,0 +1,26 @@
+<?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
diff --git a/ovsdb/.project b/ovsdb/.project
new file mode 100755 (executable)
index 0000000..f64c2c0
--- /dev/null
@@ -0,0 +1,24 @@
+<?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
diff --git a/ovsdb/.settings/org.eclipse.core.resources.prefs b/ovsdb/.settings/org.eclipse.core.resources.prefs
new file mode 100755 (executable)
index 0000000..4c28b1a
--- /dev/null
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1\r
+encoding//src/main/java=UTF-8\r
+encoding//src/test/java=UTF-8\r
+encoding/<project>=UTF-8\r
diff --git a/ovsdb/.settings/org.eclipse.jdt.core.prefs b/ovsdb/.settings/org.eclipse.jdt.core.prefs
new file mode 100755 (executable)
index 0000000..14f521d
--- /dev/null
@@ -0,0 +1,5 @@
+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
diff --git a/ovsdb/.settings/org.eclipse.m2e.core.prefs b/ovsdb/.settings/org.eclipse.m2e.core.prefs
new file mode 100755 (executable)
index 0000000..14b697b
--- /dev/null
@@ -0,0 +1,4 @@
+activeProfiles=\r
+eclipse.preferences.version=1\r
+resolveWorkspaceProjects=true\r
+version=1\r
diff --git a/ovsdb/META-INF/MANIFEST.MF b/ovsdb/META-INF/MANIFEST.MF
new file mode 100755 (executable)
index 0000000..13af7b0
--- /dev/null
@@ -0,0 +1,64 @@
+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
diff --git a/ovsdb/pom.xml b/ovsdb/pom.xml
new file mode 100755 (executable)
index 0000000..88ef741
--- /dev/null
@@ -0,0 +1,214 @@
+<?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>
diff --git a/ovsdb/protocol_plugins.ovsdb.iml b/ovsdb/protocol_plugins.ovsdb.iml
new file mode 100755 (executable)
index 0000000..bb83435
--- /dev/null
@@ -0,0 +1,193 @@
+<?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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/OvsdbClient.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/OvsdbClient.java
new file mode 100755 (executable)
index 0000000..d8c4a2e
--- /dev/null
@@ -0,0 +1,29 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/database/ColumnSchema.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/database/ColumnSchema.java
new file mode 100755 (executable)
index 0000000..8ec68f9
--- /dev/null
@@ -0,0 +1,13 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/database/DatabaseSchema.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/database/DatabaseSchema.java
new file mode 100755 (executable)
index 0000000..7df70f2
--- /dev/null
@@ -0,0 +1,16 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/database/OvsdbType.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/database/OvsdbType.java
new file mode 100755 (executable)
index 0000000..f7092b0
--- /dev/null
@@ -0,0 +1,60 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/database/TableSchema.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/database/TableSchema.java
new file mode 100755 (executable)
index 0000000..0172bb8
--- /dev/null
@@ -0,0 +1,20 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/database/Uuid.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/database/Uuid.java
new file mode 100755 (executable)
index 0000000..9c8af54
--- /dev/null
@@ -0,0 +1,8 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/Activator.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/Activator.java
new file mode 100755 (executable)
index 0000000..05188cf
--- /dev/null
@@ -0,0 +1,110 @@
+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);
+        }
+
+    }
+}
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConfigurationService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConfigurationService.java
new file mode 100755 (executable)
index 0000000..f85a8fa
--- /dev/null
@@ -0,0 +1,198 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/Connection.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/Connection.java
new file mode 100755 (executable)
index 0000000..e89146f
--- /dev/null
@@ -0,0 +1,149 @@
+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;
+    }
+}
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConnectionService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConnectionService.java
new file mode 100755 (executable)
index 0000000..bfb5b67
--- /dev/null
@@ -0,0 +1,100 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/FlowProgrammerService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/FlowProgrammerService.java
new file mode 100755 (executable)
index 0000000..ee6174f
--- /dev/null
@@ -0,0 +1,136 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/IConnectionServiceInternal.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/IConnectionServiceInternal.java
new file mode 100755 (executable)
index 0000000..20e3972
--- /dev/null
@@ -0,0 +1,7 @@
+package org.opendaylight.ovsdb.internal;
+
+import org.opendaylight.controller.sal.core.Node;
+
+public interface IConnectionServiceInternal {
+    public Connection getConnection(Node node);
+}
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/InsertRequest.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/InsertRequest.java
new file mode 100755 (executable)
index 0000000..97a4edd
--- /dev/null
@@ -0,0 +1,23 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/InventoryService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/InventoryService.java
new file mode 100755 (executable)
index 0000000..f89d69d
--- /dev/null
@@ -0,0 +1,202 @@
+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;
+    }
+
+}
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/JSONMsg.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/JSONMsg.java
new file mode 100755 (executable)
index 0000000..e7e01da
--- /dev/null
@@ -0,0 +1,11 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/MutateRequest.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/MutateRequest.java
new file mode 100755 (executable)
index 0000000..2141c13
--- /dev/null
@@ -0,0 +1,16 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/NodeConnectorFactory.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/NodeConnectorFactory.java
new file mode 100755 (executable)
index 0000000..3d1dc84
--- /dev/null
@@ -0,0 +1,49 @@
+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;
+      }
+}
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/NodeFactory.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/NodeFactory.java
new file mode 100755 (executable)
index 0000000..f6312e6
--- /dev/null
@@ -0,0 +1,48 @@
+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;
+      }
+}
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/OvsdbIO.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/OvsdbIO.java
new file mode 100755 (executable)
index 0000000..c5c9a61
--- /dev/null
@@ -0,0 +1,40 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/OvsdbMessage.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/OvsdbMessage.java
new file mode 100755 (executable)
index 0000000..88b2b0c
--- /dev/null
@@ -0,0 +1,16 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ReadService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ReadService.java
new file mode 100755 (executable)
index 0000000..f91738b
--- /dev/null
@@ -0,0 +1,263 @@
+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;
+    }
+}
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/configuration/INetworkConfigurationService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/configuration/INetworkConfigurationService.java
new file mode 100755 (executable)
index 0000000..9cd7f95
--- /dev/null
@@ -0,0 +1,4 @@
+package org.opendaylight.ovsdb.sal.configuration;
+
+public interface INetworkConfigurationService extends IPluginInNetworkConfigurationService {
+}
\ No newline at end of file
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/configuration/IPluginInNetworkConfigurationService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/configuration/IPluginInNetworkConfigurationService.java
new file mode 100755 (executable)
index 0000000..59713a0
--- /dev/null
@@ -0,0 +1,133 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/ConnectionConstants.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/ConnectionConstants.java
new file mode 100755 (executable)
index 0000000..17561b1
--- /dev/null
@@ -0,0 +1,24 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IConnectionListener.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IConnectionListener.java
new file mode 100755 (executable)
index 0000000..b330bbf
--- /dev/null
@@ -0,0 +1,7 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IConnectionService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IConnectionService.java
new file mode 100755 (executable)
index 0000000..1bb8ac7
--- /dev/null
@@ -0,0 +1,48 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IPluginInConnectionService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IPluginInConnectionService.java
new file mode 100755 (executable)
index 0000000..03e2ebe
--- /dev/null
@@ -0,0 +1,33 @@
+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
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IPluginOutConnectionService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/sal/connection/IPluginOutConnectionService.java
new file mode 100755 (executable)
index 0000000..23b607e
--- /dev/null
@@ -0,0 +1,12 @@
+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
diff --git a/ovsdb/src/test/java/org/opendaylight/ovsdb/OvsdbTestAddBridge.java b/ovsdb/src/test/java/org/opendaylight/ovsdb/OvsdbTestAddBridge.java
new file mode 100755 (executable)
index 0000000..a243d5b
--- /dev/null
@@ -0,0 +1,90 @@
+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