Merge branch 'master' of github.com:OPENNETWORKINGLAB/ONOS into thread_name
diff --git a/.gitignore b/.gitignore
index 7e971f7..c9e6bc1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,8 +4,9 @@
 .project
 .pydevproject
 .settings
+.javacp
 target
 onos-logs
 onos.log
-repo
+logback.*.xml
 
diff --git a/pom.xml b/pom.xml
index 5b8df0c..39e9f30 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,6 +11,12 @@
   <name>ONOS</name>
   <url>http://onlab.us/</url>
   <repositories>
+    <!-- In Project repository -->
+    <repository>
+      <id>in-project</id>
+      <name>In Project Repo</name>
+      <url>file://${project.basedir}/repo</url>
+    </repository>
     <repository>
       <id>central</id>
       <name>Maven Central repository</name>
@@ -21,12 +27,6 @@
       <name>Public online Restlet repository</name>
       <url>http://maven.restlet.org</url>
     </repository>
-    <!-- In Project repository -->
-    <repository>
-      <id>in-project</id>
-      <name>In Project Repo</name>
-      <url>file://${project.basedir}/repo</url>
-    </repository>
   </repositories>
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -64,8 +64,8 @@
         <artifactId>maven-compiler-plugin</artifactId>
         <version>2.3.2</version>
         <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
+          <source>1.7</source>
+          <target>1.7</target>
           <encoding>UTF-8</encoding>
         </configuration>
         <executions>
@@ -183,6 +183,23 @@
 	  </descriptorRefs>
 	</configuration>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <version>2.8</version>
+        <executions>
+          <execution>
+            <id>build-classpath</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>build-classpath</goal>
+            </goals>
+            <configuration>
+              <outputFile>${project.basedir}/.javacp</outputFile>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
   <!-- for getting visualization reporting   -->
@@ -248,6 +265,10 @@
     </plugins>
   </reporting>
   <dependencies>
+    <!-- Commenting out original kryo 2.X
+         and using shaded version (net.onrc.onos.kryo2)
+         to workaround conflict with kryo 1.X in titan's dependency.(#443)
+    -->
     <!--
     <dependency>
       <groupId>com.esotericsoftware.kryo</groupId>
diff --git a/prep-for-offline.sh b/prep-for-offline.sh
new file mode 100755
index 0000000..5b42988
--- /dev/null
+++ b/prep-for-offline.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+if [ -z "${MVN}" ]; then
+    MVN="mvn"
+fi
+
+# download package dependencies
+${MVN} -T 1C dependency:go-offline
+
+# run goals to download required plugins
+${MVN} -T 1C checkstyle:checkstyle
+${MVN} -q -T 1C clean test -Dtest=DoNotTest -DfailIfNoTests=false > /dev/null
+${MVN} -T 1C compile
diff --git a/setup-local-maven.sh b/rebuild-local-repo.sh
similarity index 66%
rename from setup-local-maven.sh
rename to rebuild-local-repo.sh
index f8e00f8..536cb99 100755
--- a/setup-local-maven.sh
+++ b/rebuild-local-repo.sh
@@ -4,17 +4,14 @@
     MVN="mvn"
 fi
 
-# Kryo2 workaround
+# Install Kryo2 workaround to local repo
+# - Shaded(rename package name to allow mixing 2 different Kryo version)
+# - Install created sharded jar to local repo
 ${MVN} -f kryo2/pom.xml package exec:exec
 
-${MVN} install:install-file -Dfile=./curator/curator-framework-1.3.5-SNAPSHOT.jar -DgroupId=com.netflix.curator -DartifactId=curator-framework -Dversion=1.3.5-SNAPSHOT -Dpackaging=jar -DgeneratePom=true
-${MVN} install:install-file -Dfile=./curator/curator-client-1.3.5-SNAPSHOT.jar -DgroupId=com.netflix.curator -DartifactId=curator-client -Dversion=1.3.5-SNAPSHOT -Dpackaging=jar -DgeneratePom=true
-${MVN} install:install-file -Dfile=./curator/curator-recipes-1.3.5-SNAPSHOT.jar -DgroupId=com.netflix.curator -DartifactId=curator-recipes -Dversion=1.3.5-SNAPSHOT -Dpackaging=jar -DgeneratePom=true
-${MVN} install:install-file -Dfile=./curator/curator-x-discovery-1.3.5-SNAPSHOT.jar -DgroupId=com.netflix.curator -DartifactId=curator-x-discovery -Dversion=1.3.5-SNAPSHOT -Dpackaging=jar -DgeneratePom=true
+# Install modified curators to local repo
+${MVN} install:install-file -Dfile=./curator/curator-framework-1.3.5-SNAPSHOT.jar -DgroupId=com.netflix.curator -DartifactId=curator-framework -Dversion=1.3.5-SNAPSHOT -Dpackaging=jar -DgeneratePom=true -DlocalRepositoryPath=./repo -DcreateChecksum=true
+${MVN} install:install-file -Dfile=./curator/curator-client-1.3.5-SNAPSHOT.jar -DgroupId=com.netflix.curator -DartifactId=curator-client -Dversion=1.3.5-SNAPSHOT -Dpackaging=jar -DgeneratePom=true -DlocalRepositoryPath=./repo -DcreateChecksum=true
+${MVN} install:install-file -Dfile=./curator/curator-recipes-1.3.5-SNAPSHOT.jar -DgroupId=com.netflix.curator -DartifactId=curator-recipes -Dversion=1.3.5-SNAPSHOT -Dpackaging=jar -DgeneratePom=true -DlocalRepositoryPath=./repo -DcreateChecksum=true
+${MVN} install:install-file -Dfile=./curator/curator-x-discovery-1.3.5-SNAPSHOT.jar -DgroupId=com.netflix.curator -DartifactId=curator-x-discovery -Dversion=1.3.5-SNAPSHOT -Dpackaging=jar -DgeneratePom=true -DlocalRepositoryPath=./repo -DcreateChecksum=true
 
-# download package dependencies
-${MVN} dependency:go-offline
-
-# run goals to download required plugins
-${MVN} -q test -Dtest=DoNotTest -DfailIfNoTests=false > /dev/null
-${MVN} clean compile
diff --git a/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.jar b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.jar
new file mode 100644
index 0000000..c22d602
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.jar
Binary files differ
diff --git a/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.jar.md5 b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.jar.md5
new file mode 100644
index 0000000..2ace2a5
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.jar.md5
@@ -0,0 +1 @@
+3746ec5212bdbb9140850c14f4451a0a
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.jar.sha1 b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.jar.sha1
new file mode 100644
index 0000000..d05e228
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.jar.sha1
@@ -0,0 +1 @@
+c59b35b37dc560ee16199d5dde2eac727d84df4f
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.pom b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.pom
new file mode 100644
index 0000000..b5dcb31
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.pom
@@ -0,0 +1,9 @@
+<?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>
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-client</artifactId>
+  <version>1.3.5-SNAPSHOT</version>
+  <description>POM was created from install:install-file</description>
+</project>
diff --git a/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.pom.md5 b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.pom.md5
new file mode 100644
index 0000000..eff6265
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.pom.md5
@@ -0,0 +1 @@
+5fb6875fb1d6c621bece5d60ad23320c
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.pom.sha1 b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.pom.sha1
new file mode 100644
index 0000000..1a61d7c
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/curator-client-1.3.5-SNAPSHOT.pom.sha1
@@ -0,0 +1 @@
+a242a50033f0ccb0eaf3fe33d804d583d35242c3
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/maven-metadata-local.xml b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/maven-metadata-local.xml
new file mode 100644
index 0000000..5c72507
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/maven-metadata-local.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata modelVersion="1.1.0">
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-client</artifactId>
+  <version>1.3.5-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <localCopy>true</localCopy>
+    </snapshot>
+    <lastUpdated>20140102175421</lastUpdated>
+    <snapshotVersions>
+      <snapshotVersion>
+        <extension>jar</extension>
+        <value>1.3.5-SNAPSHOT</value>
+        <updated>20140102175421</updated>
+      </snapshotVersion>
+      <snapshotVersion>
+        <extension>pom</extension>
+        <value>1.3.5-SNAPSHOT</value>
+        <updated>20140102175421</updated>
+      </snapshotVersion>
+    </snapshotVersions>
+  </versioning>
+</metadata>
diff --git a/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5 b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5
new file mode 100644
index 0000000..88e6b32
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5
@@ -0,0 +1 @@
+c18e768aaa00a69df8707c52999ece23
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1 b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1
new file mode 100644
index 0000000..f7bbb41
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1
@@ -0,0 +1 @@
+4c1a4c050f9dfa58e2c06357292a68cc4db6c153
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-client/maven-metadata-local.xml b/repo/com/netflix/curator/curator-client/maven-metadata-local.xml
new file mode 100644
index 0000000..601cdb2
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/maven-metadata-local.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-client</artifactId>
+  <versioning>
+    <versions>
+      <version>1.3.5-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20140102175421</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/repo/com/netflix/curator/curator-client/maven-metadata-local.xml.md5 b/repo/com/netflix/curator/curator-client/maven-metadata-local.xml.md5
new file mode 100644
index 0000000..e9772e0
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/maven-metadata-local.xml.md5
@@ -0,0 +1 @@
+81f0d8335cac788422454e1f404024b5
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-client/maven-metadata-local.xml.sha1 b/repo/com/netflix/curator/curator-client/maven-metadata-local.xml.sha1
new file mode 100644
index 0000000..015f48f
--- /dev/null
+++ b/repo/com/netflix/curator/curator-client/maven-metadata-local.xml.sha1
@@ -0,0 +1 @@
+d4b4e3e335da0916395576e68f60183a8c614bde
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.jar b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.jar
new file mode 100644
index 0000000..1b89270
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.jar
Binary files differ
diff --git a/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.jar.md5 b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.jar.md5
new file mode 100644
index 0000000..526cb88
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.jar.md5
@@ -0,0 +1 @@
+837ffcfa86d11a2049d05d710c07bb4e
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.jar.sha1 b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.jar.sha1
new file mode 100644
index 0000000..aecf353
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.jar.sha1
@@ -0,0 +1 @@
+6ed887c7b72b142b72a8043218ba900673a3c83e
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.pom b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.pom
new file mode 100644
index 0000000..84f098f
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.pom
@@ -0,0 +1,9 @@
+<?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>
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-framework</artifactId>
+  <version>1.3.5-SNAPSHOT</version>
+  <description>POM was created from install:install-file</description>
+</project>
diff --git a/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.pom.md5 b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.pom.md5
new file mode 100644
index 0000000..cf9798c
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.pom.md5
@@ -0,0 +1 @@
+f05dc58d60323b5b06c09d14dc435886
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.pom.sha1 b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.pom.sha1
new file mode 100644
index 0000000..0895d5c
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/curator-framework-1.3.5-SNAPSHOT.pom.sha1
@@ -0,0 +1 @@
+6750549cf7f567ed3d0a13d0e98d3c32f2c6860d
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/maven-metadata-local.xml b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/maven-metadata-local.xml
new file mode 100644
index 0000000..575d4c6
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/maven-metadata-local.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata modelVersion="1.1.0">
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-framework</artifactId>
+  <version>1.3.5-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <localCopy>true</localCopy>
+    </snapshot>
+    <lastUpdated>20140102175420</lastUpdated>
+    <snapshotVersions>
+      <snapshotVersion>
+        <extension>jar</extension>
+        <value>1.3.5-SNAPSHOT</value>
+        <updated>20140102175420</updated>
+      </snapshotVersion>
+      <snapshotVersion>
+        <extension>pom</extension>
+        <value>1.3.5-SNAPSHOT</value>
+        <updated>20140102175420</updated>
+      </snapshotVersion>
+    </snapshotVersions>
+  </versioning>
+</metadata>
diff --git a/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5 b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5
new file mode 100644
index 0000000..91a0276
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5
@@ -0,0 +1 @@
+ad227a30712055f5ce428b2698626e8c
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1 b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1
new file mode 100644
index 0000000..e195786
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1
@@ -0,0 +1 @@
+1094337510f3b3c0f4e7daebc584e00fea388570
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-framework/maven-metadata-local.xml b/repo/com/netflix/curator/curator-framework/maven-metadata-local.xml
new file mode 100644
index 0000000..c0850b6
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/maven-metadata-local.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-framework</artifactId>
+  <versioning>
+    <versions>
+      <version>1.3.5-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20140102175420</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/repo/com/netflix/curator/curator-framework/maven-metadata-local.xml.md5 b/repo/com/netflix/curator/curator-framework/maven-metadata-local.xml.md5
new file mode 100644
index 0000000..e6e4b37
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/maven-metadata-local.xml.md5
@@ -0,0 +1 @@
+1ffcf4d9101ad330411364ae043e014d
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-framework/maven-metadata-local.xml.sha1 b/repo/com/netflix/curator/curator-framework/maven-metadata-local.xml.sha1
new file mode 100644
index 0000000..11491ff
--- /dev/null
+++ b/repo/com/netflix/curator/curator-framework/maven-metadata-local.xml.sha1
@@ -0,0 +1 @@
+9d49a343907e558388584483f987d279714ffcc1
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.jar b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.jar
new file mode 100644
index 0000000..30efe51
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.jar
Binary files differ
diff --git a/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.jar.md5 b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.jar.md5
new file mode 100644
index 0000000..2932cbd
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.jar.md5
@@ -0,0 +1 @@
+a14fe0e16945c674b55c4e42635d1ae9
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.jar.sha1 b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.jar.sha1
new file mode 100644
index 0000000..41613f9
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.jar.sha1
@@ -0,0 +1 @@
+bd80a054cf18f037bd297b77566028e46c1056a9
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.pom b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.pom
new file mode 100644
index 0000000..198deba
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.pom
@@ -0,0 +1,9 @@
+<?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>
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-recipes</artifactId>
+  <version>1.3.5-SNAPSHOT</version>
+  <description>POM was created from install:install-file</description>
+</project>
diff --git a/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.pom.md5 b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.pom.md5
new file mode 100644
index 0000000..262bab7
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.pom.md5
@@ -0,0 +1 @@
+b1ba9c9fb1147e4b8edafecd6c60954f
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.pom.sha1 b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.pom.sha1
new file mode 100644
index 0000000..a75ea0c
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/curator-recipes-1.3.5-SNAPSHOT.pom.sha1
@@ -0,0 +1 @@
+1729fd8fcb7a6252004eadc49aae0ddc436374c3
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/maven-metadata-local.xml b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/maven-metadata-local.xml
new file mode 100644
index 0000000..982743d
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/maven-metadata-local.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata modelVersion="1.1.0">
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-recipes</artifactId>
+  <version>1.3.5-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <localCopy>true</localCopy>
+    </snapshot>
+    <lastUpdated>20140102175423</lastUpdated>
+    <snapshotVersions>
+      <snapshotVersion>
+        <extension>jar</extension>
+        <value>1.3.5-SNAPSHOT</value>
+        <updated>20140102175423</updated>
+      </snapshotVersion>
+      <snapshotVersion>
+        <extension>pom</extension>
+        <value>1.3.5-SNAPSHOT</value>
+        <updated>20140102175423</updated>
+      </snapshotVersion>
+    </snapshotVersions>
+  </versioning>
+</metadata>
diff --git a/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5 b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5
new file mode 100644
index 0000000..8eedc9b
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5
@@ -0,0 +1 @@
+50c512f43275d8025c64db161237902f
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1 b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1
new file mode 100644
index 0000000..4eb06cf
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1
@@ -0,0 +1 @@
+c43e204325a14bd04b1421c294e21ba3d4c844c7
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-recipes/maven-metadata-local.xml b/repo/com/netflix/curator/curator-recipes/maven-metadata-local.xml
new file mode 100644
index 0000000..c7018a0
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/maven-metadata-local.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-recipes</artifactId>
+  <versioning>
+    <versions>
+      <version>1.3.5-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20140102175423</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/repo/com/netflix/curator/curator-recipes/maven-metadata-local.xml.md5 b/repo/com/netflix/curator/curator-recipes/maven-metadata-local.xml.md5
new file mode 100644
index 0000000..88b4161
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/maven-metadata-local.xml.md5
@@ -0,0 +1 @@
+e21acd4765fda10d42252072e7b478f9
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-recipes/maven-metadata-local.xml.sha1 b/repo/com/netflix/curator/curator-recipes/maven-metadata-local.xml.sha1
new file mode 100644
index 0000000..393d68d
--- /dev/null
+++ b/repo/com/netflix/curator/curator-recipes/maven-metadata-local.xml.sha1
@@ -0,0 +1 @@
+77b6ed5d47f571d3ba252620fe14a76504eb85a5
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.jar b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.jar
new file mode 100644
index 0000000..147417e
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.jar
Binary files differ
diff --git a/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.jar.md5 b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.jar.md5
new file mode 100644
index 0000000..3025108
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.jar.md5
@@ -0,0 +1 @@
+f0aadef06641b7da6dab0f17a03c10b5
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.jar.sha1 b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.jar.sha1
new file mode 100644
index 0000000..d08e236
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.jar.sha1
@@ -0,0 +1 @@
+1d1e79e81ac6f042a647e50fef6730a91e9281af
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.pom b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.pom
new file mode 100644
index 0000000..af57ce1
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.pom
@@ -0,0 +1,9 @@
+<?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>
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-x-discovery</artifactId>
+  <version>1.3.5-SNAPSHOT</version>
+  <description>POM was created from install:install-file</description>
+</project>
diff --git a/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.pom.md5 b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.pom.md5
new file mode 100644
index 0000000..72e09b8
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.pom.md5
@@ -0,0 +1 @@
+672c8a21ef3629f6910ed0077b112f1c
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.pom.sha1 b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.pom.sha1
new file mode 100644
index 0000000..b8c733f
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/curator-x-discovery-1.3.5-SNAPSHOT.pom.sha1
@@ -0,0 +1 @@
+2c939a080e7dd43af4022310d3fac75191a393f5
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/maven-metadata-local.xml b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/maven-metadata-local.xml
new file mode 100644
index 0000000..c3766b7
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/maven-metadata-local.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata modelVersion="1.1.0">
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-x-discovery</artifactId>
+  <version>1.3.5-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <localCopy>true</localCopy>
+    </snapshot>
+    <lastUpdated>20140102175425</lastUpdated>
+    <snapshotVersions>
+      <snapshotVersion>
+        <extension>jar</extension>
+        <value>1.3.5-SNAPSHOT</value>
+        <updated>20140102175425</updated>
+      </snapshotVersion>
+      <snapshotVersion>
+        <extension>pom</extension>
+        <value>1.3.5-SNAPSHOT</value>
+        <updated>20140102175425</updated>
+      </snapshotVersion>
+    </snapshotVersions>
+  </versioning>
+</metadata>
diff --git a/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5 b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5
new file mode 100644
index 0000000..5efd07d
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/maven-metadata-local.xml.md5
@@ -0,0 +1 @@
+bf828c8b78fcbf02d658c214a8146bd6
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1 b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1
new file mode 100644
index 0000000..7a4e3bf
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/1.3.5-SNAPSHOT/maven-metadata-local.xml.sha1
@@ -0,0 +1 @@
+4a9f4761ac5f12f448f48bc8f08a2c098dd5435c
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-x-discovery/maven-metadata-local.xml b/repo/com/netflix/curator/curator-x-discovery/maven-metadata-local.xml
new file mode 100644
index 0000000..37c9551
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/maven-metadata-local.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>com.netflix.curator</groupId>
+  <artifactId>curator-x-discovery</artifactId>
+  <versioning>
+    <versions>
+      <version>1.3.5-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20140102175425</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/repo/com/netflix/curator/curator-x-discovery/maven-metadata-local.xml.md5 b/repo/com/netflix/curator/curator-x-discovery/maven-metadata-local.xml.md5
new file mode 100644
index 0000000..247854b
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/maven-metadata-local.xml.md5
@@ -0,0 +1 @@
+a719466f9f7df932f5a0727156fec652
\ No newline at end of file
diff --git a/repo/com/netflix/curator/curator-x-discovery/maven-metadata-local.xml.sha1 b/repo/com/netflix/curator/curator-x-discovery/maven-metadata-local.xml.sha1
new file mode 100644
index 0000000..3bc27f7
--- /dev/null
+++ b/repo/com/netflix/curator/curator-x-discovery/maven-metadata-local.xml.sha1
@@ -0,0 +1 @@
+e4d0f45d5a5d60836ee6eea43e937995464c1b8a
\ No newline at end of file
diff --git a/scripts/demo-reset-sw.sh b/scripts/demo-reset-sw.sh
index e6cabae..34950c5 100755
--- a/scripts/demo-reset-sw.sh
+++ b/scripts/demo-reset-sw.sh
@@ -1,17 +1,21 @@
 #! /bin/bash
+source ~/env_cluster
 basename=$ONOS_CLUSTER_BASENAME
 DIR=${HOME}/ONOS
 tstart=`date +"%s"`
 echo "All Link Up"
 $DIR/scripts/all-linkup.sh
 echo "Delete Flows"
-$DIR/web/delete_flow.py 201 300
+$DIR/web/delete_flow.py 1 300
+$DIR/web/clear_flow.py 1 300
 echo "Adding Flows"
 $DIR/web/add_flow.py -m onos -f $DIR/web/flowdef_demo_start.txt
-ssh -i ~/.ssh/onlabkey.pem  ${basename}5 'ONOS/start-onos.sh stop'
-ssh -i ~/.ssh/onlabkey.pem  ${basename}7 'ONOS/start-onos.sh stop'
-for i in 1 2 3 4 6 8; do
-    ssh -i ~/.ssh/onlabkey.pem  ${basename}$i 'ONOS/start-onos.sh startifdown'
+ssh -i ~/.ssh/onlabkey.pem  ${basename}5 'cd ONOS;./start-onos.sh stop'
+ssh -i ~/.ssh/onlabkey.pem  ${basename}6 'cd ONOS;./start-onos.sh stop'
+ssh -i ~/.ssh/onlabkey.pem  ${basename}7 'cd ONOS;./start-onos.sh stop'
+ssh -i ~/.ssh/onlabkey.pem  ${basename}8 'cd ONOS;./start-onos.sh stop'
+for i in 1 2 3 4 ; do
+    ssh -i ~/.ssh/onlabkey.pem  ${basename}$i 'cd ONOS;./start-onos.sh startifdown'
 done
 sleep 2
 for i in 1 2 3 4 5 6 7 8; do
diff --git a/scripts/demo-scale-out-sw.sh b/scripts/demo-scale-out-sw.sh
index 887a025..762a00e 100755
--- a/scripts/demo-scale-out-sw.sh
+++ b/scripts/demo-scale-out-sw.sh
@@ -1,14 +1,31 @@
 #! /bin/bash
+source ~/env_cluster
 basename=$ONOS_CLUSTER_BASENAME
 DIR=${HOME}/ONOS
+
+function scale_onos(){
+  for i in 5 6 7 8 ; do
+    ssh -i ~/.ssh/onlabkey.pem  ${basename}${i} 'cd ONOS;./start-onos.sh start' &
+  done
+
+  while [ 1 ]; do
+    up=`for i in 5 6 7 8 ; do
+      ssh -i ~/.ssh/onlabkey.pem  ${basename}${i} 'cd ONOS;./start-onos.sh status' &
+    done | grep "instance" | awk '{s+=$1}END{print s}'`
+
+    if [ x$up == "x4" ]; then
+      break;
+    fi 
+    sleep 1
+  done
+}
+
 start=`date +"%s"`
-echo "bring up two nodes"
-ssh -i ~/.ssh/onlabkey.pem  ${basename}5 'ONOS/start-onos.sh start'
-ssh -i ~/.ssh/onlabkey.pem  ${basename}7 'ONOS/start-onos.sh start'
+echo "bring up four nodes"
+scale_onos
 sleep 2
 echo "Adding more flows"
 $DIR/web/add_flow.py -m onos -f $DIR/web/flowdef_demo_add.txt
 endt=`date +"%s"`
 (( delta = endt -start ))
 echo "Scale Up Done: took $delta sec"
-
diff --git a/src/main/java/net/onrc/onos/datagrid/web/GetMapResource.java b/src/main/java/net/onrc/onos/datagrid/web/GetMapResource.java
index 124ac28..8c8e1cd 100644
--- a/src/main/java/net/onrc/onos/datagrid/web/GetMapResource.java
+++ b/src/main/java/net/onrc/onos/datagrid/web/GetMapResource.java
@@ -21,7 +21,7 @@
  *  - "flow-entry" : Get the Flow Entries
  *  - "topology"   : Get the Topology
  *
- *   GET /wm/datagrid/get/map/{map-name}/json
+ *   GET /wm/onos/datagrid/get/map/{map-name}/json
  */
 public class GetMapResource extends ServerResource {
     protected final static Logger log = LoggerFactory.getLogger(GetMapResource.class);
diff --git a/src/main/java/net/onrc/onos/graph/GraphDBConnection.java b/src/main/java/net/onrc/onos/graph/GraphDBConnection.java
index bf30297..7938bb6 100644
--- a/src/main/java/net/onrc/onos/graph/GraphDBConnection.java
+++ b/src/main/java/net/onrc/onos/graph/GraphDBConnection.java
@@ -33,6 +33,7 @@
 			.getLogger(GraphDBConnection.class);
 	private static GraphDBConnection singleton = new GraphDBConnection();
 	private static TitanGraph graph;
+	private static FramedGraph<TitanGraph> fg;
 	private static EventTransactionalGraph<TitanGraph> eg;
 	private static String configFile;
 
@@ -85,6 +86,7 @@
 				graph.createKeyIndex("ipv4_address", Vertex.class);
 			}
 			graph.commit();
+			fg = new FramedGraph<TitanGraph>(graph);
 			eg = new EventTransactionalGraph<TitanGraph>(graph);
 		}
 		return singleton;
@@ -95,13 +97,7 @@
 	 */
 	@Override
 	public FramedGraph<TitanGraph> getFramedGraph() {
-		if (isValid()) {
-			FramedGraph<TitanGraph> fg = new FramedGraph<TitanGraph>(graph);
-			return fg;
-		} else {
-			log.error("new FramedGraph failed");
-			return null;
-		}
+		return fg;
 	}
 
 	/**
@@ -136,11 +132,11 @@
 
 	/**
 	 * Commit changes for the graph operations.
-	 * @throws Exception 
+	 * @throws Exception
 	 */
 	@Override
 	public void commit() {
-//		// Should not catch exception here! 
+//		// Should not catch exception here!
 //		try {
 			graph.commit();
 //		}
@@ -154,7 +150,7 @@
 	 */
 	@Override
 	public void rollback() {
-		// Should not catch exception here! 
+		// Should not catch exception here!
 //		try {
 			graph.rollback();
 //		}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/internal/DeviceStorageImpl.java b/src/main/java/net/onrc/onos/ofcontroller/core/internal/DeviceStorageImpl.java
index ba4a3b5..b084be6 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/internal/DeviceStorageImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/internal/DeviceStorageImpl.java
@@ -328,8 +328,18 @@
 	public void addOnosDevice(OnosDevice onosDevice) {
 		String macAddress = HexString.toHexString(onosDevice.getMacAddress().toBytes());
 		
-		log.debug("addOnosDevice: {}", onosDevice);
+		//if the switch port we try to attach a new device already has a link, then stop adding device
+		IPortObject portObject1 = ope.searchPort(HexString.toHexString(
+				onosDevice.getSwitchDPID()), onosDevice.getSwitchPort());
+
+		if ((portObject1 != null) && portObject1.getLinkedPorts().iterator().hasNext()) {
+			log.debug("stop adding OnosDevice: {} due to there is a link to: {}",
+					onosDevice, portObject1.getLinkedPorts().iterator().next().getPortId());
+			return;
+		}
 		
+		log.debug("addOnosDevice: {}", onosDevice);
+
 		try {
 			IDeviceObject device = ope.searchDevice(macAddress);
 			
diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java b/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java
index 635e24e..a9088de 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java
@@ -6,6 +6,7 @@
 import net.floodlightcontroller.routing.Link;
 import net.onrc.onos.graph.GraphDBOperation;
 import net.onrc.onos.ofcontroller.core.ILinkStorage;
+import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
 import net.onrc.onos.ofcontroller.linkdiscovery.LinkInfo;
@@ -107,11 +108,33 @@
 		return addLink(link, null);
 	}
 
+	private void deleteDeviceOnPort(Long dpid, Short number)
+	{
+		IPortObject srcPortObject = op.searchPort(HexString.toHexString(dpid), number);
+		if (srcPortObject == null)
+		    return;
+		Iterable<IDeviceObject> devices = srcPortObject.getDevices();
+		if (devices == null)
+		    return;
+		if (devices.iterator().hasNext()) {
+			for (IDeviceObject deviceObject: srcPortObject.getDevices()) {
+				srcPortObject.removeDevice(deviceObject);
+				log.debug("delete Device "+ deviceObject.getMACAddress() +
+						" from sw: {} port: {} due to a new link added",
+						dpid, number);
+			}
+		}
+	}
+
 	@Override
 	public boolean addLink(Link link, LinkInfo linfo) {
 		boolean success = false;
 		
 		try {
+			//delete the Device attachment points for the related switch and port
+			deleteDeviceOnPort(link.getSrc(),link.getSrcPort());
+			deleteDeviceOnPort(link.getDst(),link.getDstPort());
+
 			if (addLinkImpl(link)) {
 				// Set LinkInfo only if linfo is non-null.
 				if (linfo != null && (! setLinkInfoImpl(link, linfo))) {
diff --git a/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java b/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java
index 187465f..d1e7387 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java
@@ -176,62 +176,63 @@
     	op.close();
     }
 
-	@Override
-	public void linkDiscoveryUpdate(LDUpdate update) {
-		Link lt = new Link(update.getSrc(),update.getSrcPort(),update.getDst(),update.getDstPort());
-		//log.debug("{}:LinkDicoveryUpdate(): Updating Link {}",this.getClass(), lt);
-		
-		switch (update.getOperation()) {
-			case LINK_REMOVED:
-				log.debug("LinkDiscoveryUpdate(): Removing link {}", lt);
-				
-				if (linkStore.deleteLink(lt)) {
-				    // TODO publish DELETE_LINK event here
-				    TopologyElement topologyElement =
-					new TopologyElement(update.getSrc(),
-							    update.getSrcPort(),
-							    update.getDst(),
-							    update.getDstPort());
-				    datagridService.notificationSendTopologyElementRemoved(topologyElement);
-				}
-				break;
-			case LINK_UPDATED:
-				log.debug("LinkDiscoveryUpdate(): Updating link {}", lt);
-				
-				LinkInfo linfo = linkStore.getLinkInfo(lt);
-				// TODO update "linfo" using portState derived using "update"
-				if (linkStore.update(lt, linfo, DM_OPERATION.UPDATE)) {
-				    // TODO publish UPDATE_LINK event here
-				    //
-				    // TODO NOTE: Here we assume that updated
-				    // link is UP.
-				    //
-				    TopologyElement topologyElement =
-					new TopologyElement(update.getSrc(),
-							    update.getSrcPort(),
-							    update.getDst(),
-							    update.getDstPort());
-				    datagridService.notificationSendTopologyElementUpdated(topologyElement);
-				}
-				break;
-			case LINK_ADDED:
-				log.debug("LinkDiscoveryUpdate(): Adding link {}", lt);
-				
-				if (linkStore.addLink(lt)) {
-				    // TODO publish ADD_LINK event here
-				    TopologyElement topologyElement =
-					new TopologyElement(update.getSrc(),
-							    update.getSrcPort(),
-							    update.getDst(),
-							    update.getDstPort());
-				    datagridService.notificationSendTopologyElementAdded(topologyElement);
-				}
-				break;
-			default:
-				break;
-		}
+    @Override
+    public void linkDiscoveryUpdate(LDUpdate update) {
+    	Link lt = new Link(update.getSrc(),update.getSrcPort(),update.getDst(),update.getDstPort());
+    	//log.debug("{}:LinkDicoveryUpdate(): Updating Link {}",this.getClass(), lt);
 
-	}
+    	switch (update.getOperation()) {
+    	case LINK_REMOVED:
+    		log.debug("LinkDiscoveryUpdate(): Removing link {}", lt);
+
+    		if (linkStore.deleteLink(lt)) {
+    			// TODO publish DELETE_LINK event here
+    			TopologyElement topologyElement =
+    					new TopologyElement(update.getSrc(),
+    							update.getSrcPort(),
+    							update.getDst(),
+    							update.getDstPort());
+    			datagridService.notificationSendTopologyElementRemoved(topologyElement);
+    		}
+    		break;
+    	case LINK_UPDATED:
+    		log.debug("LinkDiscoveryUpdate(): Updating link {}", lt);
+
+    		LinkInfo linfo = linkStore.getLinkInfo(lt);
+    		// TODO update "linfo" using portState derived using "update"
+    		if (linkStore.update(lt, linfo, DM_OPERATION.UPDATE)) {
+    			// TODO publish UPDATE_LINK event here
+    			//
+    			// TODO NOTE: Here we assume that updated
+    			// link is UP.
+    			//
+    			TopologyElement topologyElement =
+    					new TopologyElement(update.getSrc(),
+    							update.getSrcPort(),
+    							update.getDst(),
+    							update.getDstPort());
+    			datagridService.notificationSendTopologyElementUpdated(topologyElement);
+    		}
+    		break;
+    	case LINK_ADDED:
+    		log.debug("LinkDiscoveryUpdate(): Adding link {}", lt);
+
+    		if (linkStore.addLink(lt)) {
+    			// TODO publish ADD_LINK event here
+    			TopologyElement topologyElement =
+    					new TopologyElement(update.getSrc(),
+    							update.getSrcPort(),
+    							update.getDst(),
+    							update.getDstPort());
+    			datagridService.notificationSendTopologyElementAdded(topologyElement);
+    		}
+
+    		break;
+    	default:
+    		break;
+    	}
+
+    }
 
 	@Override
 	public void addedSwitch(IOFSwitch sw) {
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java
index 87cc4ce..afadaa4 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java
@@ -217,6 +217,7 @@
 
 	processFlowPathEvents();
 	processTopologyEvents();
+	processUnmatchedFlowEntryAdd();
 	processFlowEntryEvents();
 
 	// Recompute all affected Flow Paths and keep only the modified
@@ -457,11 +458,11 @@
     }
 
     /**
-     * Process the Flow Entry events.
+     * Process previously received Flow Entries with unmatched Flow Paths.
      */
-    private void processFlowEntryEvents() {
+    private void processUnmatchedFlowEntryAdd() {
 	FlowPath flowPath;
-	FlowEntry updatedFlowEntry;
+	FlowEntry localFlowEntry;
 
 	//
 	// Update Flow Entries with previously unmatched Flow Entry updates
@@ -469,19 +470,35 @@
 	if (! unmatchedFlowEntryAdd.isEmpty()) {
 	    Map<Long, FlowEntry> remainingUpdates = new HashMap<Long, FlowEntry>();
 	    for (FlowEntry flowEntry : unmatchedFlowEntryAdd.values()) {
+		// log.debug("Processing Unmatched Flow Entry: {}",
+		//	  flowEntry.toString());
+
 		flowPath = allFlowPaths.get(flowEntry.flowId().value());
-		if (flowPath == null)
-		    continue;
-		updatedFlowEntry = updateFlowEntryAdd(flowPath, flowEntry);
-		if (updatedFlowEntry == null) {
+		if (flowPath == null) {
 		    remainingUpdates.put(flowEntry.flowEntryId().value(),
 					 flowEntry);
 		    continue;
 		}
-		modifiedFlowPaths.put(flowPath.flowId().value(), flowPath);
+		localFlowEntry = findFlowEntryAdd(flowPath, flowEntry);
+		if (localFlowEntry == null) {
+		    remainingUpdates.put(flowEntry.flowEntryId().value(),
+					 flowEntry);
+		    continue;
+		}
+		if (updateFlowEntryAdd(flowPath, localFlowEntry, flowEntry)) {
+		    modifiedFlowPaths.put(flowPath.flowId().value(), flowPath);
+		}
 	    }
 	    unmatchedFlowEntryAdd = remainingUpdates;
 	}
+    }
+
+    /**
+     * Process the Flow Entry events.
+     */
+    private void processFlowEntryEvents() {
+	FlowPath flowPath;
+	FlowEntry localFlowEntry;
 
 	//
 	// Process all Flow Entry events and update the appropriate state
@@ -506,15 +523,17 @@
 					      flowEntry);
 		    break;
 		}
-		updatedFlowEntry = updateFlowEntryAdd(flowPath, flowEntry);
-		if (updatedFlowEntry == null) {
+		localFlowEntry = findFlowEntryAdd(flowPath, flowEntry);
+		if (localFlowEntry == null) {
 		    // Flow Entry not found: keep the entry for later matching
 		    unmatchedFlowEntryAdd.put(flowEntry.flowEntryId().value(),
 					      flowEntry);
 		    break;
 		}
-		// Add the updated entry to the list of updated Flow Entries
-		modifiedFlowPaths.put(flowPath.flowId().value(), flowPath);
+		if (updateFlowEntryAdd(flowPath, localFlowEntry, flowEntry)) {
+		    // Add the updated Flow Path to the list of updated paths
+		    modifiedFlowPaths.put(flowPath.flowId().value(), flowPath);
+		}
 		break;
 
 	    case ENTRY_REMOVE:
@@ -528,32 +547,37 @@
 		    // Flow Path not found: ignore the update
 		    break;
 		}
-		updatedFlowEntry = updateFlowEntryRemove(flowPath, flowEntry);
-		if (updatedFlowEntry == null) {
+		localFlowEntry = findFlowEntryRemove(flowPath, flowEntry);
+		if (localFlowEntry == null) {
 		    // Flow Entry not found: ignore it
 		    break;
 		}
-		modifiedFlowPaths.put(flowPath.flowId().value(), flowPath);
+		if (updateFlowEntryRemove(flowPath, localFlowEntry,
+					  flowEntry)) {
+		    // Add the updated Flow Path to the list of updated paths
+		    modifiedFlowPaths.put(flowPath.flowId().value(), flowPath);
+		}
 		break;
 	    }
 	}
     }
 
     /**
-     * Update a Flow Entry because of an external ENTRY_ADD event.
+     * Find a Flow Entry that should be updated because of an external
+     * ENTRY_ADD event.
      *
      * @param flowPath the FlowPath for the Flow Entry to update.
-     * @param flowEntry the FlowEntry with the new state.
-     * @return the updated Flow Entry if found, otherwise null.
+     * @param newFlowEntry the FlowEntry with the new state.
+     * @return the Flow Entry that should be updated if found, otherwise null.
      */
-    private FlowEntry updateFlowEntryAdd(FlowPath flowPath,
-					 FlowEntry flowEntry) {
+    private FlowEntry findFlowEntryAdd(FlowPath flowPath,
+				       FlowEntry newFlowEntry) {
 	//
 	// Iterate over all Flow Entries and find a match.
 	//
 	for (FlowEntry localFlowEntry : flowPath.flowEntries()) {
 	    if (! TopologyManager.isSameFlowEntryDataPath(localFlowEntry,
-							  flowEntry)) {
+							  newFlowEntry)) {
 		continue;
 	    }
 
@@ -562,27 +586,89 @@
 	    //
 	    if (localFlowEntry.isValidFlowEntryId()) {
 		if (localFlowEntry.flowEntryId().value() !=
-		    flowEntry.flowEntryId().value()) {
+		    newFlowEntry.flowEntryId().value()) {
 		    //
 		    // Find a local Flow Entry, but the Flow Entry ID doesn't
 		    // match. Keep looking.
 		    //
 		    continue;
 		}
-	    } else {
-		// Update the Flow Entry ID
-		FlowEntryId flowEntryId =
-		    new FlowEntryId(flowEntry.flowEntryId().value());
-		localFlowEntry.setFlowEntryId(flowEntryId);
 	    }
+	    return localFlowEntry;
+	}
 
-	    //
-	    // Update the local Flow Entry, and keep state to check
-	    // if the Flow Path has been installed.
-	    //
-	    localFlowEntry.setFlowEntryUserState(flowEntry.flowEntryUserState());
-	    localFlowEntry.setFlowEntrySwitchState(flowEntry.flowEntrySwitchState());
+	return null;		// Entry not found
+    }
+
+    /**
+     * Update a Flow Entry because of an external ENTRY_ADD event.
+     *
+     * @param flowPath the FlowPath for the Flow Entry to update.
+     * @param localFlowEntry the local Flow Entry to update.
+     * @param newFlowEntry the FlowEntry with the new state.
+     * @return true if the local Flow Entry was updated, otherwise false.
+     */
+    private boolean updateFlowEntryAdd(FlowPath flowPath,
+				       FlowEntry localFlowEntry,
+				       FlowEntry newFlowEntry) {
+	boolean updated = false;
+
+	if (localFlowEntry.flowEntryUserState() ==
+	    FlowEntryUserState.FE_USER_DELETE) {
+	    // Don't add-back a Flow Entry that is already deleted
+	    return false;
+	}
+
+	if (! localFlowEntry.isValidFlowEntryId()) {
+	    // Update the Flow Entry ID
+	    FlowEntryId flowEntryId =
+		new FlowEntryId(newFlowEntry.flowEntryId().value());
+	    localFlowEntry.setFlowEntryId(flowEntryId);
+	    updated = true;
+	}
+
+	//
+	// Update the local Flow Entry, and keep state to check
+	// if the Flow Path has been installed.
+	//
+	if (localFlowEntry.flowEntryUserState() !=
+	    newFlowEntry.flowEntryUserState()) {
+	    localFlowEntry.setFlowEntryUserState(
+			 newFlowEntry.flowEntryUserState());
+	    updated = true;
+	}
+	if (localFlowEntry.flowEntrySwitchState() !=
+	    newFlowEntry.flowEntrySwitchState()) {
+	    localFlowEntry.setFlowEntrySwitchState(
+			newFlowEntry.flowEntrySwitchState());
 	    checkIfInstalledFlowPaths.put(flowPath.flowId().value(), flowPath);
+	    updated = true;
+	}
+
+	return updated;
+    }
+
+    /**
+     * Find a Flow Entry that should be updated because of an external
+     * ENTRY_REMOVE event.
+     *
+     * @param flowPath the FlowPath for the Flow Entry to update.
+     * @param newFlowEntry the FlowEntry with the new state.
+     * @return the Flow Entry that should be updated if found, otherwise null.
+     */
+    private FlowEntry findFlowEntryRemove(FlowPath flowPath,
+					  FlowEntry newFlowEntry) {
+	//
+	// Iterate over all Flow Entries and find a match based on
+	// the Flow Entry ID.
+	//
+	for (FlowEntry localFlowEntry : flowPath.flowEntries()) {
+	    if (! localFlowEntry.isValidFlowEntryId())
+		continue;
+	    if (localFlowEntry.flowEntryId().value() !=
+		newFlowEntry.flowEntryId().value()) {
+		continue;
+	    }
 	    return localFlowEntry;
 	}
 
@@ -593,31 +679,32 @@
      * Update a Flow Entry because of an external ENTRY_REMOVE event.
      *
      * @param flowPath the FlowPath for the Flow Entry to update.
-     * @param flowEntry the FlowEntry with the new state.
-     * @return the updated Flow Entry if found, otherwise null.
+     * @param localFlowEntry the local Flow Entry to update.
+     * @param newFlowEntry the FlowEntry with the new state.
+     * @return true if the local Flow Entry was updated, otherwise false.
      */
-    private FlowEntry updateFlowEntryRemove(FlowPath flowPath,
-					    FlowEntry flowEntry) {
+    private boolean updateFlowEntryRemove(FlowPath flowPath,
+					  FlowEntry localFlowEntry,
+					  FlowEntry newFlowEntry) {
+	boolean updated = false;
+
 	//
-	// Iterate over all Flow Entries and find a match based on
-	// the Flow Entry ID.
+	// Update the local Flow Entry.
 	//
-	for (FlowEntry localFlowEntry : flowPath.flowEntries()) {
-	    if (! localFlowEntry.isValidFlowEntryId())
-		continue;
-	    if (localFlowEntry.flowEntryId().value() !=
-		flowEntry.flowEntryId().value()) {
-		    continue;
-	    }
-	    //
-	    // Update the local Flow Entry.
-	    //
-	    localFlowEntry.setFlowEntryUserState(flowEntry.flowEntryUserState());
-	    localFlowEntry.setFlowEntrySwitchState(flowEntry.flowEntrySwitchState());
-	    return localFlowEntry;
+	if (localFlowEntry.flowEntryUserState() !=
+	    newFlowEntry.flowEntryUserState()) {
+	    localFlowEntry.setFlowEntryUserState(
+			newFlowEntry.flowEntryUserState());
+	    updated = true;
+	}
+	if (localFlowEntry.flowEntrySwitchState() !=
+	    newFlowEntry.flowEntrySwitchState()) {
+	    localFlowEntry.setFlowEntrySwitchState(
+			newFlowEntry.flowEntrySwitchState());
+	    updated = true;
 	}
 
-	return null;		// Entry not found
+	return updated;
     }
 
     /**
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
index 26bff9b..e821a97 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
@@ -37,6 +37,8 @@
 import net.onrc.onos.ofcontroller.util.Pair;
 import net.onrc.onos.ofcontroller.util.serializers.KryoFactory;
 
+import com.thinkaurelius.titan.core.TitanException;
+
 import com.esotericsoftware.kryo2.Kryo;
 
 import org.slf4j.Logger;
@@ -145,7 +147,12 @@
 	l.add(IDatagridService.class);
 	l.add(IRestApiService.class);
 	l.add(IFlowPusherService.class);
-	l.add(IForwardingService.class);
+	//
+	// TODO: Comment-out the dependency on the IForwardingService,
+	// because it is an optional module. Apparently, adding the dependency
+	// here automatically enables the module.
+	//
+	// l.add(IForwardingService.class);
         return l;
     }
 
@@ -405,32 +412,40 @@
 	//
 	// Process all entries
 	//
+	// TODO: For now we have to create an explicit FlowEntry copy so
+	// we don't modify the original FlowEntry.
+	// This should go away after we start using the OpenFlow Barrier
+	// mechnanism in the FlowPusher.
+	//
+	Kryo kryo = kryoFactory.newKryo();
 	for (Pair<IOFSwitch, FlowEntry> entry : entries) {
 	    FlowEntry flowEntry = entry.second;
 
 	    //
 	    // Mark the Flow Entry that it has been pushed to the switch
 	    //
-	    flowEntry.setFlowEntrySwitchState(FlowEntrySwitchState.FE_SWITCH_UPDATED);
+	    FlowEntry copyFlowEntry = kryo.copy(flowEntry);
+	    copyFlowEntry.setFlowEntrySwitchState(FlowEntrySwitchState.FE_SWITCH_UPDATED);
 
 	    //
 	    // Write the Flow Entry to the Datagrid
 	    //
-	    switch (flowEntry.flowEntryUserState()) {
+	    switch (copyFlowEntry.flowEntryUserState()) {
 	    case FE_USER_ADD:
-		datagridService.notificationSendFlowEntryAdded(flowEntry);
+		datagridService.notificationSendFlowEntryAdded(copyFlowEntry);
 		break;
 	    case FE_USER_MODIFY:
-		datagridService.notificationSendFlowEntryUpdated(flowEntry);
+		datagridService.notificationSendFlowEntryUpdated(copyFlowEntry);
 		break;
 	    case FE_USER_DELETE:
-		datagridService.notificationSendFlowEntryRemoved(flowEntry.flowEntryId());
+		datagridService.notificationSendFlowEntryRemoved(copyFlowEntry.flowEntryId());
 		break;
 	    case FE_USER_UNKNOWN:
 		assert(false);
 		break;
 	    }
 	}
+	kryoFactory.deleteKryo(kryo);
     }
 
     /**
@@ -440,7 +455,13 @@
      * @param flowPaths the collection of installed Flow Paths.
      */
     void notificationFlowPathsInstalled(Collection<FlowPath> flowPaths) {
-	forwardingService.flowsInstalled(flowPaths);
+	//
+	// TODO: Add an explicit check for null pointer, because
+	// the IForwardingService is optional. Remove the "if" statement
+	// after hte Forwarding Module becomes mandatory.
+	//
+	if (forwardingService != null)
+	    forwardingService.flowsInstalled(flowPaths);
     }
 
     /**
@@ -487,6 +508,15 @@
 	    if (mySwitch == null)
 		continue;
 
+	    if (flowEntry.flowEntrySwitchState() ==
+		FlowEntrySwitchState.FE_SWITCH_UPDATED) {
+		//
+		// Don't push again Flow Entries that were already already
+		// installed into the switches.
+		//
+		continue;
+	    }
+
 	    //
 	    // Assign Flow Entry IDs if missing.
 	    //
@@ -662,16 +692,25 @@
 		log.debug("Deleting Flow Path From Database: {}",
 			  flowPath.toString());
 
-		try {
-		    if (! FlowDatabaseOperation.deleteFlow(
-					dbHandlerInner,
-					flowPath.flowId())) {
-			log.error("Cannot delete Flow Path {} from Network Map",
-				  flowPath.flowId());
-		    }
-		} catch (Exception e) {
-		    log.error("Exception deleting Flow Path from Network MAP: {}", e);
-		}
+		boolean retry = false;
+		do {
+		    retry = false;
+		    try {
+			if (! FlowDatabaseOperation.deleteFlow(
+						dbHandlerInner,
+						flowPath.flowId())) {
+			    log.error("Cannot delete Flow Path {} from Network Map",
+				      flowPath.flowId());
+			    retry = true;
+			}
+		    } catch (TitanException te) {
+			log.error("Titan Exception deleting Flow Path from Network MAP: {}", te);
+			retry = true;
+		    } catch (Exception e) {
+			log.error("Exception deleting Flow Path from Network MAP: {}", e);
+		    } 
+		} while (retry);
+
 		continue;
 	    }
 
@@ -688,6 +727,11 @@
 		    allValid = false;
 		    break;
 		}
+		if (flowEntry.flowEntrySwitchState() !=
+		    FlowEntrySwitchState.FE_SWITCH_UPDATED) {
+		    allValid = false;
+		    break;
+		}
 	    }
 	    if (! allValid)
 		continue;
@@ -697,15 +741,23 @@
 	    //
 	    // Write the Flow Path to the Network Map
 	    //
-	    try {
-		if (! FlowDatabaseOperation.addFlow(dbHandlerInner, flowPath)) {
-		    String logMsg = "Cannot write to Network Map Flow Path " +
-			flowPath.flowId();
-		    log.error(logMsg);
+	    boolean retry = false;
+	    do {
+		retry = false;
+		try {
+		    if (! FlowDatabaseOperation.addFlow(dbHandlerInner, flowPath)) {
+			String logMsg = "Cannot write to Network Map Flow Path " +
+			    flowPath.flowId();
+			log.error(logMsg);
+			retry = true;
+		    }
+		} catch (TitanException te) {
+		    log.error("Titan Exception writing Flow Path to Network MAP: ", te);
+		    retry = true;
+		} catch (Exception e) {
+		    log.error("Exception writing Flow Path to Network MAP: ", e);
 		}
-	    } catch (Exception e) {
-		log.error("Exception writing Flow Path to Network MAP: ", e);
-	    }
+	    } while (retry);
 	}
     }
 }
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/AddFlowResource.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/AddFlowResource.java
index 9afaaec..2a7574b 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/AddFlowResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/AddFlowResource.java
@@ -18,7 +18,7 @@
  * Flow Manager REST API implementation: Add a Flow with the Flow
  * Entries:
  *
- *   POST /wm/flow/add/json
+ *   POST /wm/onos/flows/add/json
  */
 public class AddFlowResource extends ServerResource {
 
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/DeleteFlowResource.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/DeleteFlowResource.java
index f4e23b8..d0991e8 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/DeleteFlowResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/DeleteFlowResource.java
@@ -14,7 +14,7 @@
  * The "{flow-id}" request attribute value can be either a specific Flow ID,
  * or the keyword "all" to delete all Flows:
  *
- *   GET /wm/flow/delete/{flow-id}/json
+ *   GET /wm/onos/flows/delete/{flow-id}/json
  */
 public class DeleteFlowResource extends ServerResource {
     protected final static Logger log = LoggerFactory.getLogger(DeleteFlowResource.class);
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetAllFlowsResource.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetAllFlowsResource.java
index a4ea960..91bd210 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetAllFlowsResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetAllFlowsResource.java
@@ -13,7 +13,7 @@
 /**
  * Flow Manager REST API implementation: Get all Flow state.
  *
- *   GET /wm/flow/getall/json"
+ *   GET /wm/onos/flows/getall/json"
  */
 public class GetAllFlowsResource extends ServerResource {
     protected final static Logger log = LoggerFactory.getLogger(GetAllFlowsResource.class);
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetFlowByIdResource.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetFlowByIdResource.java
index 9ceef6e..1bfb6a3 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetFlowByIdResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetFlowByIdResource.java
@@ -14,7 +14,7 @@
  *
  * The "{flow-id}" request attribute value is the Flow ID of the flow to get:
  *
- *   GET /wm/flow/get/{flow-id}/json
+ *   GET /wm/onos/flows/get/{flow-id}/json
  */
 public class GetFlowByIdResource extends ServerResource {
     protected final static Logger log = LoggerFactory.getLogger(GetFlowByIdResource.class);
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetSummaryFlowsResource.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetSummaryFlowsResource.java
index 58f82a9..9cffb56 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetSummaryFlowsResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetSummaryFlowsResource.java
@@ -20,7 +20,7 @@
  * The "{max-flows}" request attribute value is the maximum number of flows
  * to be returned.
  *
- *   GET /wm/flow/getsummary/{flow-id}/{max-flows}/json"
+ *   GET /wm/onos/flows/getsummary/{flow-id}/{max-flows}/json"
  */
 public class GetSummaryFlowsResource extends ServerResource {
     protected final static Logger log = LoggerFactory.getLogger(GetSummaryFlowsResource.class);
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowProgrammer.java b/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowProgrammer.java
index a4f0a8c..641faaf 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowProgrammer.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowProgrammer.java
@@ -139,8 +139,8 @@
 	switch (msg.getType()) {
 	case FLOW_REMOVED:
 	    OFFlowRemoved flowMsg = (OFFlowRemoved) msg;
-	    log.debug("Got flow removed from "+ sw.getId() +": "+ flowMsg.getCookie());
 	    FlowEntryId id = new FlowEntryId(flowMsg.getCookie());
+	    log.debug("Got flow entry removed from " + sw.getId() + ": " + id);
 	    flowManager.flowEntryOnSwitchExpired(sw, id);
 	    break;
 	default:
diff --git a/src/main/java/net/onrc/onos/ofcontroller/forwarding/Forwarding.java b/src/main/java/net/onrc/onos/ofcontroller/forwarding/Forwarding.java
index 02972e2..4415120 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/forwarding/Forwarding.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/forwarding/Forwarding.java
@@ -7,7 +7,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import net.floodlightcontroller.core.FloodlightContext;
 import net.floodlightcontroller.core.IFloodlightProviderService;
@@ -62,6 +61,8 @@
 
 	private final int IDLE_TIMEOUT = 5; // seconds
 	private final int HARD_TIMEOUT = 0; // seconds
+
+	private final int PATH_PUSHED_TIMEOUT = 3000; // milliseconds
 	
 	private IFloodlightProviderService floodlightProvider;
 	private IFlowService flowService;
@@ -71,12 +72,15 @@
 	private IDeviceStorage deviceStorage;
 	private TopologyManager topologyService;
 	
-	private Map<Path, Long> pendingFlows;
+	//private Map<Path, Long> pendingFlows;
+	// TODO it seems there is a Guava collection that will time out entries.
+	// We should see if this will work here.
+	private Map<Path, PushedFlow> pendingFlows;
 	private ListMultimap<Long, PacketToPush> waitingPackets;
 	
 	private final Object lock = new Object();
 	
-	public class PacketToPush {
+	private class PacketToPush {
 		public final OFPacketOut packet;
 		public final long dpid;
 		
@@ -86,15 +90,35 @@
 		}
 	}
 	
-	public final class Path {
+	private class PushedFlow {
+		public final long flowId;
+		private final long pushedTime;
+		public short firstHopOutPort = OFPort.OFPP_NONE.getValue();
+		
+		public PushedFlow(long flowId) {
+			this.flowId = flowId;
+			pushedTime = System.currentTimeMillis();
+		}
+		
+		public boolean isExpired() {
+			return (System.currentTimeMillis() - pushedTime) > PATH_PUSHED_TIMEOUT;
+		}
+	}
+	
+	private final class Path {
 		public final SwitchPort srcPort;
 		public final SwitchPort dstPort;
+		public final MACAddress srcMac;
+		public final MACAddress dstMac;
 		
-		public Path(SwitchPort src, SwitchPort dst) {
+		public Path(SwitchPort src, SwitchPort dst, 
+				MACAddress srcMac, MACAddress dstMac) {
 			srcPort = new SwitchPort(new Dpid(src.dpid().value()), 
 					new Port(src.port().value()));
 			dstPort = new SwitchPort(new Dpid(dst.dpid().value()), 
 					new Port(dst.port().value()));
+			this.srcMac = srcMac;
+			this.dstMac = dstMac;
 		}
 		
 		@Override
@@ -105,7 +129,9 @@
 			
 			Path otherPath = (Path) other;
 			return srcPort.equals(otherPath.srcPort) && 
-					dstPort.equals(otherPath.dstPort);
+					dstPort.equals(otherPath.dstPort) &&
+					srcMac.equals(otherPath.srcMac) &&
+					dstMac.equals(otherPath.dstMac);
 		}
 		
 		@Override
@@ -113,8 +139,16 @@
 			int hash = 17;
 			hash = 31 * hash + srcPort.hashCode();
 			hash = 31 * hash + dstPort.hashCode();
+			hash = 31 * hash + srcMac.hashCode();
+			hash = 31 * hash + dstMac.hashCode();
 			return hash;
 		}
+		
+		@Override
+		public String toString() {
+			return "(" + srcMac + " at " + srcPort + ") => (" 
+					+ dstPort + " at " + dstMac + ")";
+		}
 	}
 	
 	@Override
@@ -154,7 +188,8 @@
 		
 		floodlightProvider.addOFMessageListener(OFType.PACKET_IN, this);
 		
-		pendingFlows = new ConcurrentHashMap<Path, Long>();
+		//pendingFlows = new ConcurrentHashMap<Path, Long>();
+		pendingFlows = new HashMap<Path, PushedFlow>();
 		//waitingPackets = Multimaps.synchronizedSetMultimap(
 				//HashMultimap.<Long, PacketToPush>create());
 		//waitingPackets = HashMultimap.create();
@@ -280,20 +315,35 @@
 		
 		FlowPath flowPath, reverseFlowPath;
 		
-		Path pathspec = new Path(srcSwitchPort, dstSwitchPort);
+		Path pathspec = new Path(srcSwitchPort, dstSwitchPort, 
+				srcMacAddress, dstMacAddress);
 		// TODO check concurrency
 		synchronized (lock) {
-			Long existingFlowId = pendingFlows.get(pathspec);
+			PushedFlow existingFlow = pendingFlows.get(pathspec);
+			//Long existingFlowId = pendingFlows.get(pathspec);
 			
-			if (existingFlowId != null) {
+			if (existingFlow != null && !existingFlow.isExpired()) {
 				log.debug("Found existing flow {}", 
-						HexString.toHexString(existingFlowId));
+						HexString.toHexString(existingFlow.flowId));
 				
 				OFPacketOut po = constructPacketOut(pi, sw);
-				waitingPackets.put(existingFlowId, new PacketToPush(po, sw.getId()));
+				
+				if (existingFlow.firstHopOutPort != OFPort.OFPP_NONE.getValue()) {
+					// Flow has been sent to the switches so it is safe to
+					// send a packet out now
+					sendPacketOut(sw, po, existingFlow.firstHopOutPort);
+				}
+				else {
+					// Flow has not yet been sent to switches so save the
+					// packet out for later
+					waitingPackets.put(existingFlow.flowId, 
+							new PacketToPush(po, sw.getId()));
+				}
 				return;
 			}
 			
+			//log.debug("Couldn't match {} in {}", pathspec, pendingFlows);
+			
 			log.debug("Adding new flow between {} at {} and {} at {}",
 					new Object[]{srcMacAddress, srcSwitchPort, dstMacAddress, dstSwitchPort});
 			
@@ -347,11 +397,14 @@
 			reverseFlowPath.setFlowId(reverseFlowId);
 			
 			OFPacketOut po = constructPacketOut(pi, sw);
-			Path reversePathSpec = new Path(dstSwitchPort, srcSwitchPort);
+			Path reversePathSpec = new Path(dstSwitchPort, srcSwitchPort, 
+					dstMacAddress, srcMacAddress);
 			
 			// Add to waiting lists
-			pendingFlows.put(pathspec, flowId.value());
-			pendingFlows.put(reversePathSpec, reverseFlowId.value());
+			//pendingFlows.put(pathspec, flowId.value());
+			//pendingFlows.put(reversePathSpec, reverseFlowId.value());
+			pendingFlows.put(pathspec, new PushedFlow(flowId.value()));
+			pendingFlows.put(reversePathSpec, new PushedFlow(reverseFlowId.value()));
 			waitingPackets.put(flowId.value(), new PacketToPush(po, sw.getId()));
 		
 		}
@@ -416,33 +469,44 @@
 	}
 
 	private void flowInstalled(FlowPath installedFlowPath) {
-		// TODO check concurrency
-		// will need to sync and access both collections at once.
 		long flowId = installedFlowPath.flowId().value();
 		
+		short outPort = 
+				installedFlowPath.flowEntries().get(0).outPort().value();
+		
+		MACAddress srcMacAddress = installedFlowPath.flowEntryMatch().srcMac();
+		MACAddress dstMacAddress = installedFlowPath.flowEntryMatch().dstMac();
+		
 		Collection<PacketToPush> packets;
 		synchronized (lock) {
+			log.debug("Flow {} has been installed, sending queued packets",
+					installedFlowPath.flowId());
+			
 			packets = waitingPackets.removeAll(flowId);
 			
-			//remove pending flows entry
-			Path pathToRemove = new Path(installedFlowPath.dataPath().srcPort(),
-					installedFlowPath.dataPath().dstPort());
-			pendingFlows.remove(pathToRemove);
-			
+			// remove pending flows entry
+			Path installedPath = new Path(installedFlowPath.dataPath().srcPort(),
+					installedFlowPath.dataPath().dstPort(),
+					srcMacAddress, dstMacAddress);
+			//pendingFlows.remove(pathToRemove);
+			PushedFlow existingFlow = pendingFlows.get(installedPath);
+			if (existingFlow != null)
+			    existingFlow.firstHopOutPort = outPort;
 		}
 		
 		for (PacketToPush packet : packets) {
 			IOFSwitch sw = floodlightProvider.getSwitches().get(packet.dpid);
 			
-			OFPacketOut po = packet.packet;
-			short outPort = 
-					installedFlowPath.flowEntries().get(0).outPort().value();
-			po.getActions().add(new OFActionOutput(outPort));
-			po.setActionsLength((short)
-					(po.getActionsLength() + OFActionOutput.MINIMUM_LENGTH));
-			po.setLengthU(po.getLengthU() + OFActionOutput.MINIMUM_LENGTH);
-			
-			flowPusher.add(sw, po);
+			sendPacketOut(sw, packet.packet, outPort);
 		}
 	}
+	
+	private void sendPacketOut(IOFSwitch sw, OFPacketOut po, short outPort) {
+		po.getActions().add(new OFActionOutput(outPort));
+		po.setActionsLength((short)
+				(po.getActionsLength() + OFActionOutput.MINIMUM_LENGTH));
+		po.setLengthU(po.getLengthU() + OFActionOutput.MINIMUM_LENGTH);
+		
+		flowPusher.add(sw, po);
+	}
 }
diff --git a/src/test/java/net/floodlightcontroller/util/MACAddressTest.java b/src/test/java/net/floodlightcontroller/util/MACAddressTest.java
index 5669614..f19eedb 100644
--- a/src/test/java/net/floodlightcontroller/util/MACAddressTest.java
+++ b/src/test/java/net/floodlightcontroller/util/MACAddressTest.java
@@ -18,7 +18,7 @@
         address = MACAddress.valueOf("FF:FE:FD:10:20:30");
         assertEquals(address,
                 MACAddress.valueOf(new byte[]{(byte) 0xFF, (byte) 0xFE, (byte) 0xFD, 0x10, 0x20, 0x30}));
-        assertEquals("FF:FE:FD:10:20:30", address.toString());
+        assertEquals("ff:fe:fd:10:20:30", address.toString());
         
         address = MACAddress.valueOf("00:11:22:aa:bb:cc");
         assertEquals(address,
diff --git a/start-onos-embedded.sh b/start-onos-embedded.sh
index 6fc9362..0e9af68 100755
--- a/start-onos-embedded.sh
+++ b/start-onos-embedded.sh
@@ -36,6 +36,13 @@
 if [ -z "${MVN}" ]; then
     MVN="mvn"
 fi
+
+if [ ! -f ${ONOS_HOME}/.javacp ]; then
+  ${MVN} -f ${ONOS_HOME}/pom.xml compile
+fi
+JAVA_CP=`cat ${ONOS_HOME}/.javacp`
+JAVA_CP="${JAVA_CP}:${ONOS_HOME}/target/classes"
+
 #<logger name="net.floodlightcontroller.linkdiscovery.internal" level="TRACE"/>
 #<appender-ref ref="STDOUT" />
 
@@ -96,8 +103,7 @@
 
   # XXX MVN has to run at the project top dir..
   cd ${ONOS_HOME}
-  echo "${MVN} exec:exec -Dexec.executable=\"java\" -Dexec.args=\"${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp %classpath ${MAIN_CLASS} -cf ${ONOS_HOME}/conf/onos-embedded.properties\""
-  ${MVN} exec:exec -Dexec.executable="java" -Dexec.args="${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp %classpath ${MAIN_CLASS} -cf ${ONOS_HOME}/conf/onos-embedded.properties" > ${LOGDIR}/onos.stdout 2>${LOGDIR}/onos.stderr &
+  java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp ${JAVA_CP} ${MAIN_CLASS} -cf ${ONOS_HOME}/conf/onos-embedded.properties > ${LOGDIR}/onos.`hostname`.stdout 2>${LOGDIR}/onos.`hostname`stderr &
 
   echo "Waiting for ONOS to start..."
   COUNT=0
@@ -160,6 +166,6 @@
     echo "$n instance of onos running"
     ;;
   *)
-    echo "Usage: $0 {start|stop|restart|status|startifdown}"
+    echo "Usage: $0 {start|stop|status|startifdown}"
     exit 1
 esac
diff --git a/start-onos-jacoco.sh b/start-onos-jacoco.sh
index 2e04216..2d1adf4 100755
--- a/start-onos-jacoco.sh
+++ b/start-onos-jacoco.sh
@@ -43,6 +43,12 @@
     MVN="mvn -o"
 fi
 
+if [ ! -f ${ONOS_HOME}/.javacp ]; then
+  ${MVN} -f ${ONOS_HOME}/pom.xml compile
+fi
+JAVA_CP=`cat ${ONOS_HOME}/.javacp`
+JAVA_CP="${JAVA_CP}:${ONOS_HOME}/target/classes"
+
 #<logger name="net.floodlightcontroller.linkdiscovery.internal" level="TRACE"/>
 #<appender-ref ref="STDOUT" />
 
@@ -106,10 +112,7 @@
   # XXX : MVN has to run at the project top dir 
   echo $ONOS_HOME
   cd ${ONOS_HOME}
-  pwd 
-  echo "${MVN} exec:exec -Dexec.executable=\"java\" -Dexec.args=\"${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp %classpath ${MAIN_CLASS} -cf ./conf/onos.properties\""
-
-  ${MVN} exec:exec -Dexec.executable="java" -Dexec.args="${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp %classpath ${MAIN_CLASS} -cf ./conf/onos.properties" > ${LOGDIR}/onos.`hostname`.stdout 2>${LOGDIR}/onos.`hostname`.stderr &
+  java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp ${JAVA_CP} ${MAIN_CLASS} -cf ./conf/onos.properties > ${LOGDIR}/onos.`hostname`.stdout 2>${LOGDIR}/onos.`hostname`.stderr &
 
   echo "Waiting for ONOS to start..."
   COUNT=0
@@ -179,6 +182,6 @@
     echo "$n instance of onos running"
     ;;
   *)
-    echo "Usage: $0 {start|stop|restart|status|startifdown}"
+    echo "Usage: $0 {start|stop|status|startifdown}"
     exit 1
 esac
diff --git a/start-onos.sh b/start-onos.sh
index 29a108c..1eb6831 100755
--- a/start-onos.sh
+++ b/start-onos.sh
@@ -1,21 +1,21 @@
 #!/bin/bash
 
 # Set paths
-if [ -z "${ONOS_HOME}" ]; then
-        ONOS_HOME=`dirname $0`
-fi
+ONOS_HOME="${ONOS_HOME:-`dirname $0`}"
 
 ## Because the script change dir to $ONOS_HOME, we can set ONOS_LOGBACK and LOGDIR relative to $ONOS_HOME
-#ONOS_LOGBACK="${ONOS_HOME}/logback.`hostname`.xml"
-#LOGDIR=${ONOS_HOME}/onos-logs
-ONOS_LOGBACK="./logback.`hostname`.xml"
-LOGDIR=./onos-logs
+ONOS_LOGBACK=${ONOS_LOGBACK:-${ONOS_HOME}/logback.`hostname`.xml}
+LOGDIR=${ONOS_LOGDIR:-${ONOS_HOME}/onos-logs}
+
 ONOS_LOG="${LOGDIR}/onos.`hostname`.log"
 PCAP_LOG="${LOGDIR}/onos.`hostname`.pcap"
 LOGS="$ONOS_LOG $PCAP_LOG"
 
+ONOS_PROPS=${ONOS_PROPS:-${ONOS_HOME}/conf/onos.properties}
+JMX_PORT=${JMX_PORT:-7189}
+
 # Set JVM options
-JVM_OPTS=""
+JVM_OPTS="${JVM_OPTS:-}"
 ## If you want JaCoCo Code Coverage reports... uncomment line below
 #JVM_OPTS="$JVM_OPTS -javaagent:${ONOS_HOME}/lib/jacocoagent.jar=dumponexit=true,output=file,destfile=${LOGDIR}/jacoco.exec"
 JVM_OPTS="$JVM_OPTS -server -d64"
@@ -31,7 +31,7 @@
 		-XX:+UseThreadPriorities \
 		-XX:ThreadPriorityPolicy=42 \
 		-XX:+UseCompressedOops \
-		-Dcom.sun.management.jmxremote.port=7189 \
+		-Dcom.sun.management.jmxremote.port=$JMX_PORT \
 		-Dcom.sun.management.jmxremote.ssl=false \
 		-Dcom.sun.management.jmxremote.authenticate=false"
 JVM_OPTS="$JVM_OPTS -Dhazelcast.logging.type=slf4j"
@@ -39,9 +39,13 @@
 # Set ONOS core main class
 MAIN_CLASS="net.onrc.onos.ofcontroller.core.Main"
 
-if [ -z "${MVN}" ]; then
-    MVN="mvn -o"
+MVN=${MVN:-mvn -o}
+
+if [ ! -f ${ONOS_HOME}/.javacp ]; then
+  ${MVN} -f ${ONOS_HOME}/pom.xml compile
 fi
+JAVA_CP=`cat ${ONOS_HOME}/.javacp`
+JAVA_CP="${JAVA_CP}:${ONOS_HOME}/target/classes"
 
 #<logger name="net.floodlightcontroller.linkdiscovery.internal" level="TRACE"/>
 #<appender-ref ref="STDOUT" />
@@ -101,15 +105,13 @@
 
   # Run ONOS
   echo "Starting ONOS controller ..."
-  echo 
+  echo
 
-  # XXX : MVN has to run at the project top dir 
+  # XXX : MVN has to run at the project top dir
   echo $ONOS_HOME
   cd ${ONOS_HOME}
-  pwd 
-  echo "${MVN} exec:exec -Dexec.executable=\"java\" -Dexec.args=\"${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp %classpath ${MAIN_CLASS} -cf ./conf/onos.properties\""
-
-  ${MVN} exec:exec -Dexec.executable="java" -Dexec.args="${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp %classpath ${MAIN_CLASS} -cf ./conf/onos.properties" > ${LOGDIR}/onos.`hostname`.stdout 2>${LOGDIR}/onos.`hostname`.stderr &
+  pwd
+  java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp ${JAVA_CP} ${MAIN_CLASS} -cf ${ONOS_PROPS} > ${LOGDIR}/onos.`hostname`.stdout 2>${LOGDIR}/onos.`hostname`.stderr &
 
   echo "Waiting for ONOS to start..."
   COUNT=0
@@ -161,13 +163,17 @@
   start)
     stop
     check_db
-    start 
+    start
+    ;;
+  startnokill)
+    check_db
+    start
     ;;
   startifdown)
     n=`jps -l |grep "${MAIN_CLASS}" | wc -l`
     if [ $n == 0 ]; then
       start
-    else 
+    else
       echo "$n instance of onos running"
     fi
     ;;
@@ -179,6 +185,6 @@
     echo "$n instance of onos running"
     ;;
   *)
-    echo "Usage: $0 {start|stop|restart|status|startifdown}"
+    echo "Usage: $0 {start|stop|status|startifdown}"
     exit 1
 esac
diff --git a/start-rest.sh b/start-rest.sh
index 01e7638..910eb41 100755
--- a/start-rest.sh
+++ b/start-rest.sh
@@ -73,6 +73,6 @@
     status
     ;;
   *)
-    echo "Usage: $0 {start|stop|restart|status}"
+    echo "Usage: $0 {start|stop|status}"
     exit 1
 esac
diff --git a/titan/gremlin.sh b/titan/gremlin.sh
index 55354e3..a340dd7 100755
--- a/titan/gremlin.sh
+++ b/titan/gremlin.sh
@@ -6,11 +6,14 @@
 
 BASE_DIR=`dirname $0`
 ONOS_DIR="`dirname $0`/.."
-#CP=$( echo `dirname $0`/../lib/*.jar `dirname $0`/../lib/titan/*.jar . | sed 's/ /:/g')
-#CP=`${MVN} -f ${ONOS_DIR}/pom.xml dependency:build-classpath -Dmdep.outputFile=/dev/stdout -l /dev/stderr`
 
 # Use a python script to parse the classpath out of the .classpath file
-CP=`${BASE_DIR}/../scripts/parse-classpath.py`
+if [ ! -f ${ONOS_DIR}/.javacp ]; then
+  echo "execute mvn compile at ONOS HOME directory."
+  exit 1
+fi
+CP=`cat ${ONOS_DIR}/.javacp`
+CP="${CP}:${ONOS_DIR}/target/classes"
 
 if [[ "$CP" == *"Error reading classpath file"* ]]; then
     echo $CP
diff --git a/vm-utils/onos.py b/vm-utils/onos.py
new file mode 100755
index 0000000..7756b59
--- /dev/null
+++ b/vm-utils/onos.py
@@ -0,0 +1,341 @@
+#!/usr/bin/env python
+
+"""
+onos.py: A basic (?) ONOS Controller() subclass for Mininet
+
+We implement the following classes:
+
+ONOSController: a custom Controller() subclass to start ONOS
+OVSSwitchONOS: a custom OVSSwitch() switch that connects to multiple controllers.
+
+We use single Zookeeper and Cassandra instances for now.
+
+As a custom file, exports:
+
+--controller onos
+--switch ovso
+
+Usage:
+
+$ sudo -E ./onos.py
+
+This will start up a simple 2-host, 2 ONOS network
+
+$ sudo -E mn --custom onos.py --controller onos,2 --switch ovso
+"""
+
+from mininet.node import Controller, OVSSwitch
+from mininet.net import Mininet
+from mininet.cli import CLI
+from mininet.topo import LinearTopo
+from mininet.log import setLogLevel, info, warn
+from mininet.util import quietRun
+
+# This should be cleaned up to avoid interfering with mn
+from shutil import copyfile
+from os import environ, path
+from functools import partial
+import time
+from sys import argv
+
+class ONOS( Controller ):
+    "Custom controller class for ONOS"
+
+    # Directories and configuration templates
+    home = environ[ 'HOME' ]
+    onosDir = home + "/ONOS"
+    zookeeperDir = home + "/zookeeper-3.4.5"
+    dirBase = '/tmp'
+    logDir = dirBase + '/onos-%s.logs'
+    # cassDir = dirBase + '/onos-%s.cassandra'
+    configFile = dirBase + '/onos-%s.properties'
+    logbackFile = dirBase + '/onos-%s.logback.xml'
+
+    # Base ONOS modules
+    baseModules = (
+        'net.floodlightcontroller.core.FloodlightProvider',
+        'net.floodlightcontroller.threadpool.ThreadPool',
+        'net.onrc.onos.ofcontroller.floodlightlistener.NetworkGraphPublisher',
+        'net.floodlightcontroller.ui.web.StaticWebRoutable',
+        'net.onrc.onos.datagrid.HazelcastDatagrid',
+        'net.onrc.onos.ofcontroller.flowmanager.FlowManager',
+        'net.onrc.onos.ofcontroller.flowprogrammer.FlowProgrammer',
+        'net.onrc.onos.ofcontroller.topology.TopologyManager',
+        'net.onrc.onos.registry.controller.ZookeeperRegistry'
+    )
+
+    # Additions for reactive forwarding
+    reactiveModules = (
+            'net.onrc.onos.ofcontroller.proxyarp.ProxyArpManager',
+            'net.onrc.onos.ofcontroller.core.config.DefaultConfiguration',
+            'net.onrc.onos.ofcontroller.forwarding.Forwarding'
+    )
+
+    # Module parameters
+    ofbase = 6633
+    restbase = 8080
+    jmxbase = 7189
+
+    fc = 'net.floodlightcontroller.'
+
+    # Things that vary per ONOS id
+    perNodeConfigBase = {
+        fc + 'core.FloodlightProvider.openflowport': ofbase,
+        fc + 'restserver.RestApiServer.port': restbase,
+        fc + 'core.FloodlightProvider.controllerid': 0
+    }
+
+    # Things that are static
+    staticConfig = {
+        'net.onrc.onos.ofcontroller.floodlightlistener.NetworkGraphPublisher.dbconf':
+            '/tmp/cassandra.titan',
+        'net.floodlightcontroller.core.FloodlightProvider.workerthreads': 16,
+        'net.floodlightcontroller.forwarding.Forwarding.idletimeout': 5,
+        'net.floodlightcontroller.forwarding.Forwarding.hardtimeout': 0
+    }
+
+    # Things that are based on onosDir
+    dirConfig = {
+        'net.onrc.onos.datagrid.HazelcastDatagrid.datagridConfig':
+        '%s/conf/hazelcast.xml',
+    }
+
+    proctag = 'mn-onos-id'
+
+    # For maven debugging
+    # mvn = 'mvn -o -e -X'
+
+    def __init__( self, name, n=1, reactive=True, runAsRoot=False, **params):
+        """n: number of ONOS instances to run (1)
+           reactive: run in reactive mode (True)
+           runAsRoot: run ONOS as root (False)"""
+        self.check()
+        self.count = n
+        self.reactive = reactive
+        self.runAsRoot = runAsRoot
+        self.ids = range( 0, self.count )
+        Controller.__init__( self, name, **params )
+        # We don't need to run as root, and it can interfere
+        # with starting Zookeeper manually
+        self.user = None
+        if not self.runAsRoot:
+            try:
+                self.user = quietRun( 'who am i' ).split()[ 0 ]
+                self.sendCmd( 'su', self.user )
+                self.waiting = False
+            except:
+                warn( '__init__: failed to drop privileges\n' )
+        # Need to run commands from ONOS dir
+        self.cmd( 'cd', self.onosDir )
+        self.cmd( 'export PATH=$PATH:%s' % self.onosDir )
+        if hasattr( self, 'mvn' ):
+            self.cmd( 'export MVN="%s"' % self.mvn )
+
+    def check( self ):
+        "Set onosDir and check for ONOS prerequisites"
+        if not quietRun( 'which java' ):
+                raise Exception( 'java not found -'
+                                 ' make sure it is installed and in $PATH' )
+        if not quietRun( 'which mvn' ):
+                raise Exception( 'Maven (mvn) not found -'
+                                ' make sure it is installed and in $PATH' )
+        if 'ONOS_HOME' in environ:
+            self.onosDir = environ[ 'ONOS_HOME' ]
+        else:
+            warn( '* $ONOS_HOME is not set - assuming %s\n' % self.onosDir )
+        for script in 'start-zk.sh', 'start-cassandra.sh', 'start-onos.sh':
+            script = path.join( self.onosDir, script )
+            if not path.exists( script ):
+                msg = '%s not found' % script
+                if 'ONOS_HOME' not in environ:
+                    msg += ' (try setting $ONOS_HOME and/or sudo -E)'
+                raise Exception( msg )
+
+    def waitNetstat( self, pid ):
+        """Wait for pid to show up in netstat
+           We assume that once a process is listening on some
+           port, it is ready to go!"""
+        while True:
+            output = self.cmd( 'sudo netstat -natp | grep %s/' % pid )
+            if output:
+                return output
+            info( '.' )
+            time.sleep( 1 )
+
+    def waitStart( self, procname, pattern ):
+        "Wait for at least one of procname to show up in netstat"
+        # Check script exit code
+        exitCode = int( self.cmd( 'echo $?' ) )
+        if exitCode != 0:
+            raise Exception( '%s startup failed with code %d' %
+                             ( procname, exitCode ) )
+        info( '* Waiting for %s startup' % procname )
+        result = self.cmd( 'pgrep -f %s' % pattern ).split()[ 0 ]
+        pid = int( result )
+        output = self.waitNetstat( pid )
+        info( '\n* %s process %d is listening\n' % ( procname, pid ) )
+        info( output )
+
+    def startCassandra( self ):
+        "Start Cassandra"
+        self.cmd( 'start-cassandra.sh start' )
+        self.waitStart( 'Cassandra', 'apache-cassandra' )
+        status = self.cmd( 'start-cassandra.sh status' )
+        if 'running' not in status:
+            raise Exception( 'Cassandra startup failed: ' + status )
+
+    def stopCassandra( self ):
+        "Stop Cassandra"
+        self.cmd( 'start-cassandra.sh stop' )
+
+    def startZookeeper( self, initcfg=True ):
+        "Start Zookeeper"
+        # Reinitialize configuration file
+        if initcfg:
+            cfg = self.zookeeperDir + '/conf/zoo.cfg'
+            template = self.zookeeperDir + '/conf/zoo_sample.cfg'
+            copyfile( template, cfg )
+        self.cmd( 'start-zk.sh restart' )
+        self.waitStart( 'Zookeeper', 'zookeeper' )
+        status = self.cmd( 'start-zk.sh status' )
+        if 'Error' in status:
+            raise Exception( 'Zookeeper startup failed: ' + status )
+
+    def stopZookeeper( self ):
+        "Stop Zookeeper"
+        self.cmd( 'start-zk.sh stop' )
+
+    def genProperties( self, id, path='/tmp' ):
+        "Generate ONOS properties file"
+        filename = path + '/onos-%s.properties' % id
+        with open( filename, 'w' ) as f:
+            # Write modules list
+            modules = list( self.baseModules )
+            if self.reactive:
+                modules += list( self.reactiveModules )
+            f.write( 'floodlight.modules = %s\n' %
+                     ',\\\n'.join( modules ) )
+            # Write other parameters
+            for var, val in self.perNodeConfigBase.iteritems():
+                if type( val ) is int:
+                    val += id
+                f.write( '%s = %s\n' % ( var, val ) )
+            for var, val in self.staticConfig.iteritems():
+                f.write( '%s = %s\n' % ( var, val ) )
+            for var, val in self.dirConfig.iteritems():
+                f.write( '%s = %s\n' % ( var, val % self.onosDir) )
+        return filename
+
+    def setVars( self, id, propsFile ):
+        """Set and return environment vars
+           id: ONOS instance number
+           propsFile: properties file name"""
+        # ONOS directories and files
+        logdir = self.logDir % id
+        # cassdir = self.cassDir % id
+        logback = self.logbackFile % id
+        jmxport = self.jmxbase + id
+        self.cmd( 'mkdir -p', logdir ) # , cassdir
+        self.cmd( 'export ONOS_LOGDIR="%s"' % logdir )
+        self.cmd( 'export ZOO_LOG_DIR="%s"' % logdir )
+        # self.cmd( 'export CASS_DIR="%s"' % cassdir )
+        self.cmd( 'export ONOS_LOGBACK="%s"' % logback )
+        self.cmd( 'export JMX_PORT=%s' % jmxport )
+        self.cmd( 'export JVM_OPTS="-D%s=%s"' % (
+            self.proctag, id ) )
+        self.cmd( 'export ONOS_PROPS="%s"' % propsFile )
+
+    def startONOS( self, id ):
+        """Start ONOS
+           id: new instance number"""
+        start = time.time()
+        self.stopONOS( id )
+        propsFile = self.genProperties( id )
+        self.setVars( id, propsFile )
+        self.cmdPrint( 'start-onos.sh startnokill' )
+        # start-onos.sh waits for ONOS startup
+        elapsed = time.time() - start
+        info( '* ONOS %s started in %.2f seconds\n' % ( id, elapsed ) )
+
+    def stopONOS( self, id ):
+        """Shut down ONOS
+           id: identifier for instance"""
+        pid = self.cmd( "jps -v | grep %s=%s | awk '{print $1}'" %
+            ( self.proctag, id ) ).strip()
+        if pid:
+            self.cmdPrint( 'kill', pid )
+
+    def start( self, *args ):
+        "Start ONOS instances"
+        info( '* Starting Cassandra\n' )
+        self.startCassandra()
+        info( '* Starting Zookeeper\n' )
+        self.startZookeeper()
+        for id in self.ids:
+            info( '* Starting ONOS %s\n' % id )
+            self.startONOS( id )
+
+    def stop( self, *args ):
+        "Stop ONOS instances"
+        for id in self.ids:
+            info( '* Stopping ONOS %s\n' % id )
+            self.stopONOS( id )
+        info( '* Stopping Zookeeper\n' )
+        self.stopZookeeper()
+        info( '* Stopping Cassandra\n' )
+        self.stopCassandra()
+
+    def clist( self ):
+        "Return list of controller specifiers (proto:ip:port)"
+        return [ 'tcp:127.0.0.1:%s' % ( self.ofbase + id )
+            for id in range( 0, self.count ) ]
+
+
+class OVSSwitchONOS( OVSSwitch ):
+    "OVS switch which connects to multiple controllers"
+    def start( self, controllers ):
+        OVSSwitch.start( self, controllers )
+        assert len( controllers ) == 1
+        c0 = controllers[ 0 ]
+        assert type( c0 ) == ONOS
+        clist = ','.join( c0.clist() )
+        self.cmd( 'ovs-vsctl set-controller', self, clist)
+        # Reconnect quickly to controllers (1s vs. 15s max_backoff)
+        for uuid in self.controllerUUIDs():
+            if uuid.count( '-' ) != 4:
+                # Doesn't look like a UUID
+                continue
+            uuid = uuid.strip()
+            self.cmd( 'ovs-vsctl set Controller', uuid,
+                      'max_backoff=1000' )
+
+
+def waitConnected( switches ):
+    "Wait until all switches connect to controllers"
+    start = time.time()
+    info( '* Waiting for switches to connect...\n' )
+    for s in switches:
+        info( s )
+        while not s.connected():
+            info( '.' )
+            time.sleep( 1 )
+        info( ' ' )
+    elapsed = time.time() - start
+    info( '\n* Connected in %.2f seconds\n' % elapsed )
+
+
+controllers = { 'onos': ONOS }
+switches = { 'ovso': OVSSwitchONOS }
+
+
+if __name__ == '__main__':
+    # Simple test for ONOS() controller class
+    setLogLevel( 'info' )
+    size = 2 if len( argv ) != 2 else int( argv[ 1 ] )
+    net = Mininet( topo=LinearTopo( size ),
+                   controller=partial( ONOS, n=2 ),
+                   switch=OVSSwitchONOS )
+    net.start()
+    waitConnected( net.switches )
+    CLI( net )
+    net.stop()
diff --git a/web/flowdef_demo_add.txt b/web/flowdef_demo_add.txt
index 7ef2fbb..600cd4e 100644
--- a/web/flowdef_demo_add.txt
+++ b/web/flowdef_demo_add.txt
@@ -1,61 +1,108 @@
-# Demo flow scale down
-201 ps_101_1 00:00:00:00:00:00:05:01 1 00:00:00:00:00:00:02:01 1 matchSrcMac 00:00:c0:a8:05:01 matchDstMac 00:00:c0:a8:02:01
-202 ps_101_2 00:00:00:00:00:00:02:01 1 00:00:00:00:00:00:05:01 1 matchSrcMac 00:00:c0:a8:02:01 matchDstMac 00:00:c0:a8:05:01
-203 ps_102_1 00:00:00:00:00:00:05:02 1 00:00:00:00:00:00:02:02 1 matchSrcMac 00:00:c0:a8:05:02 matchDstMac 00:00:c0:a8:02:02
-204 ps_102_2 00:00:00:00:00:00:02:02 1 00:00:00:00:00:00:05:02 1 matchSrcMac 00:00:c0:a8:02:02 matchDstMac 00:00:c0:a8:05:02
-205 ps_103_1 00:00:00:00:00:00:05:03 1 00:00:00:00:00:00:02:03 1 matchSrcMac 00:00:c0:a8:05:03 matchDstMac 00:00:c0:a8:02:03
-206 ps_103_2 00:00:00:00:00:00:02:03 1 00:00:00:00:00:00:05:03 1 matchSrcMac 00:00:c0:a8:02:03 matchDstMac 00:00:c0:a8:05:03
-207 ps_104_1 00:00:00:00:00:00:05:01 1 00:00:00:00:00:00:03:01 1 matchSrcMac 00:00:c0:a8:05:01 matchDstMac 00:00:c0:a8:03:01
-208 ps_104_2 00:00:00:00:00:00:03:01 1 00:00:00:00:00:00:05:01 1 matchSrcMac 00:00:c0:a8:03:01 matchDstMac 00:00:c0:a8:05:01
-209 ps_105_1 00:00:00:00:00:00:05:02 1 00:00:00:00:00:00:03:02 1 matchSrcMac 00:00:c0:a8:05:02 matchDstMac 00:00:c0:a8:03:02
-210 ps_105_2 00:00:00:00:00:00:03:02 1 00:00:00:00:00:00:05:02 1 matchSrcMac 00:00:c0:a8:03:02 matchDstMac 00:00:c0:a8:05:02
-211 ps_106_1 00:00:00:00:00:00:05:03 1 00:00:00:00:00:00:03:03 1 matchSrcMac 00:00:c0:a8:05:03 matchDstMac 00:00:c0:a8:03:03
-212 ps_106_2 00:00:00:00:00:00:03:03 1 00:00:00:00:00:00:05:03 1 matchSrcMac 00:00:c0:a8:03:03 matchDstMac 00:00:c0:a8:05:03
-213 ps_107_1 00:00:00:00:00:00:05:01 1 00:00:00:00:00:00:04:01 1 matchSrcMac 00:00:c0:a8:05:01 matchDstMac 00:00:c0:a8:04:01
-214 ps_107_2 00:00:00:00:00:00:04:01 1 00:00:00:00:00:00:05:01 1 matchSrcMac 00:00:c0:a8:04:01 matchDstMac 00:00:c0:a8:05:01
-215 ps_108_1 00:00:00:00:00:00:05:02 1 00:00:00:00:00:00:04:02 1 matchSrcMac 00:00:c0:a8:05:02 matchDstMac 00:00:c0:a8:04:02
-216 ps_108_2 00:00:00:00:00:00:04:02 1 00:00:00:00:00:00:05:02 1 matchSrcMac 00:00:c0:a8:04:02 matchDstMac 00:00:c0:a8:05:02
-217 ps_109_1 00:00:00:00:00:00:05:03 1 00:00:00:00:00:00:04:03 1 matchSrcMac 00:00:c0:a8:05:03 matchDstMac 00:00:c0:a8:04:03
-218 ps_109_2 00:00:00:00:00:00:04:03 1 00:00:00:00:00:00:05:03 1 matchSrcMac 00:00:c0:a8:04:03 matchDstMac 00:00:c0:a8:05:03
-219 ps_110_1 00:00:00:00:00:00:05:01 1 00:00:00:00:00:00:06:01 1 matchSrcMac 00:00:c0:a8:05:01 matchDstMac 00:00:c0:a8:06:01
-220 ps_110_2 00:00:00:00:00:00:06:01 1 00:00:00:00:00:00:05:01 1 matchSrcMac 00:00:c0:a8:06:01 matchDstMac 00:00:c0:a8:05:01
-221 ps_111_1 00:00:00:00:00:00:05:02 1 00:00:00:00:00:00:06:02 1 matchSrcMac 00:00:c0:a8:05:02 matchDstMac 00:00:c0:a8:06:02
-222 ps_111_2 00:00:00:00:00:00:06:02 1 00:00:00:00:00:00:05:02 1 matchSrcMac 00:00:c0:a8:06:02 matchDstMac 00:00:c0:a8:05:02
-223 ps_112_1 00:00:00:00:00:00:05:03 1 00:00:00:00:00:00:06:03 1 matchSrcMac 00:00:c0:a8:05:03 matchDstMac 00:00:c0:a8:06:03
-224 ps_112_2 00:00:00:00:00:00:06:03 1 00:00:00:00:00:00:05:03 1 matchSrcMac 00:00:c0:a8:06:03 matchDstMac 00:00:c0:a8:05:03
-225 ps_113_1 00:00:00:00:00:00:05:01 1 00:00:00:00:00:00:08:01 1 matchSrcMac 00:00:c0:a8:05:01 matchDstMac 00:00:c0:a8:08:01
-226 ps_113_2 00:00:00:00:00:00:08:01 1 00:00:00:00:00:00:05:01 1 matchSrcMac 00:00:c0:a8:08:01 matchDstMac 00:00:c0:a8:05:01
-227 ps_114_1 00:00:00:00:00:00:05:02 1 00:00:00:00:00:00:08:02 1 matchSrcMac 00:00:c0:a8:05:02 matchDstMac 00:00:c0:a8:08:02
-228 ps_114_2 00:00:00:00:00:00:08:02 1 00:00:00:00:00:00:05:02 1 matchSrcMac 00:00:c0:a8:08:02 matchDstMac 00:00:c0:a8:05:02
-229 ps_115_1 00:00:00:00:00:00:05:03 1 00:00:00:00:00:00:08:03 1 matchSrcMac 00:00:c0:a8:05:03 matchDstMac 00:00:c0:a8:08:03
-230 ps_115_2 00:00:00:00:00:00:08:03 1 00:00:00:00:00:00:05:03 1 matchSrcMac 00:00:c0:a8:08:03 matchDstMac 00:00:c0:a8:05:03
-231 ps_116_1 00:00:00:00:00:00:07:01 1 00:00:00:00:00:00:02:01 1 matchSrcMac 00:00:c0:a8:07:01 matchDstMac 00:00:c0:a8:02:01
-232 ps_116_2 00:00:00:00:00:00:02:01 1 00:00:00:00:00:00:07:01 1 matchSrcMac 00:00:c0:a8:02:01 matchDstMac 00:00:c0:a8:07:01
-233 ps_117_1 00:00:00:00:00:00:07:02 1 00:00:00:00:00:00:02:02 1 matchSrcMac 00:00:c0:a8:07:02 matchDstMac 00:00:c0:a8:02:02
-234 ps_117_2 00:00:00:00:00:00:02:02 1 00:00:00:00:00:00:07:02 1 matchSrcMac 00:00:c0:a8:02:02 matchDstMac 00:00:c0:a8:07:02
-235 ps_118_1 00:00:00:00:00:00:07:03 1 00:00:00:00:00:00:02:03 1 matchSrcMac 00:00:c0:a8:07:03 matchDstMac 00:00:c0:a8:02:03
-236 ps_118_2 00:00:00:00:00:00:02:03 1 00:00:00:00:00:00:07:03 1 matchSrcMac 00:00:c0:a8:02:03 matchDstMac 00:00:c0:a8:07:03
-237 ps_119_1 00:00:00:00:00:00:07:01 1 00:00:00:00:00:00:03:01 1 matchSrcMac 00:00:c0:a8:07:01 matchDstMac 00:00:c0:a8:03:01
-238 ps_119_2 00:00:00:00:00:00:03:01 1 00:00:00:00:00:00:07:01 1 matchSrcMac 00:00:c0:a8:03:01 matchDstMac 00:00:c0:a8:07:01
-239 ps_120_1 00:00:00:00:00:00:07:02 1 00:00:00:00:00:00:03:02 1 matchSrcMac 00:00:c0:a8:07:02 matchDstMac 00:00:c0:a8:03:02
-240 ps_120_2 00:00:00:00:00:00:03:02 1 00:00:00:00:00:00:07:02 1 matchSrcMac 00:00:c0:a8:03:02 matchDstMac 00:00:c0:a8:07:02
-241 ps_121_1 00:00:00:00:00:00:07:03 1 00:00:00:00:00:00:03:03 1 matchSrcMac 00:00:c0:a8:07:03 matchDstMac 00:00:c0:a8:03:03
-242 ps_121_2 00:00:00:00:00:00:03:03 1 00:00:00:00:00:00:07:03 1 matchSrcMac 00:00:c0:a8:03:03 matchDstMac 00:00:c0:a8:07:03
-243 ps_122_1 00:00:00:00:00:00:07:01 1 00:00:00:00:00:00:04:01 1 matchSrcMac 00:00:c0:a8:07:01 matchDstMac 00:00:c0:a8:04:01
-244 ps_122_2 00:00:00:00:00:00:04:01 1 00:00:00:00:00:00:07:01 1 matchSrcMac 00:00:c0:a8:04:01 matchDstMac 00:00:c0:a8:07:01
-245 ps_123_1 00:00:00:00:00:00:07:02 1 00:00:00:00:00:00:04:02 1 matchSrcMac 00:00:c0:a8:07:02 matchDstMac 00:00:c0:a8:04:02
-246 ps_123_2 00:00:00:00:00:00:04:02 1 00:00:00:00:00:00:07:02 1 matchSrcMac 00:00:c0:a8:04:02 matchDstMac 00:00:c0:a8:07:02
-247 ps_124_1 00:00:00:00:00:00:07:03 1 00:00:00:00:00:00:04:03 1 matchSrcMac 00:00:c0:a8:07:03 matchDstMac 00:00:c0:a8:04:03
-248 ps_124_2 00:00:00:00:00:00:04:03 1 00:00:00:00:00:00:07:03 1 matchSrcMac 00:00:c0:a8:04:03 matchDstMac 00:00:c0:a8:07:03
-249 ps_125_1 00:00:00:00:00:00:07:01 1 00:00:00:00:00:00:06:01 1 matchSrcMac 00:00:c0:a8:07:01 matchDstMac 00:00:c0:a8:06:01
-250 ps_125_2 00:00:00:00:00:00:06:01 1 00:00:00:00:00:00:07:01 1 matchSrcMac 00:00:c0:a8:06:01 matchDstMac 00:00:c0:a8:07:01
-251 ps_126_1 00:00:00:00:00:00:07:02 1 00:00:00:00:00:00:06:02 1 matchSrcMac 00:00:c0:a8:07:02 matchDstMac 00:00:c0:a8:06:02
-252 ps_126_2 00:00:00:00:00:00:06:02 1 00:00:00:00:00:00:07:02 1 matchSrcMac 00:00:c0:a8:06:02 matchDstMac 00:00:c0:a8:07:02
-253 ps_127_1 00:00:00:00:00:00:07:03 1 00:00:00:00:00:00:06:03 1 matchSrcMac 00:00:c0:a8:07:03 matchDstMac 00:00:c0:a8:06:03
-254 ps_127_2 00:00:00:00:00:00:06:03 1 00:00:00:00:00:00:07:03 1 matchSrcMac 00:00:c0:a8:06:03 matchDstMac 00:00:c0:a8:07:03
-255 ps_128_1 00:00:00:00:00:00:07:01 1 00:00:00:00:00:00:08:01 1 matchSrcMac 00:00:c0:a8:07:01 matchDstMac 00:00:c0:a8:08:01
-256 ps_128_2 00:00:00:00:00:00:08:01 1 00:00:00:00:00:00:07:01 1 matchSrcMac 00:00:c0:a8:08:01 matchDstMac 00:00:c0:a8:07:01
-257 ps_129_1 00:00:00:00:00:00:07:02 1 00:00:00:00:00:00:08:02 1 matchSrcMac 00:00:c0:a8:07:02 matchDstMac 00:00:c0:a8:08:02
-258 ps_129_2 00:00:00:00:00:00:08:02 1 00:00:00:00:00:00:07:02 1 matchSrcMac 00:00:c0:a8:08:02 matchDstMac 00:00:c0:a8:07:02
-259 ps_130_1 00:00:00:00:00:00:07:03 1 00:00:00:00:00:00:08:03 1 matchSrcMac 00:00:c0:a8:07:03 matchDstMac 00:00:c0:a8:08:03
-260 ps_130_2 00:00:00:00:00:00:08:03 1 00:00:00:00:00:00:07:03 1 matchSrcMac 00:00:c0:a8:08:03 matchDstMac 00:00:c0:a8:07:03
+145 ps_73_1 00:00:00:00:00:00:05:02 1 00:00:00:00:00:00:06:02 1 matchSrcMac 00:00:c0:a8:05:02 matchDstMac 00:00:c0:a8:06:02
+146 ps_73_2 00:00:00:00:00:00:06:02 1 00:00:00:00:00:00:05:02 1 matchSrcMac 00:00:c0:a8:06:02 matchDstMac 00:00:c0:a8:05:02
+147 ps_74_1 00:00:00:00:00:00:05:03 1 00:00:00:00:00:00:06:03 1 matchSrcMac 00:00:c0:a8:05:03 matchDstMac 00:00:c0:a8:06:03
+148 ps_74_2 00:00:00:00:00:00:06:03 1 00:00:00:00:00:00:05:03 1 matchSrcMac 00:00:c0:a8:06:03 matchDstMac 00:00:c0:a8:05:03
+149 ps_75_1 00:00:00:00:00:00:05:04 1 00:00:00:00:00:00:06:04 1 matchSrcMac 00:00:c0:a8:05:04 matchDstMac 00:00:c0:a8:06:04
+150 ps_75_2 00:00:00:00:00:00:06:04 1 00:00:00:00:00:00:05:04 1 matchSrcMac 00:00:c0:a8:06:04 matchDstMac 00:00:c0:a8:05:04
+151 ps_76_1 00:00:00:00:00:00:05:05 1 00:00:00:00:00:00:06:05 1 matchSrcMac 00:00:c0:a8:05:05 matchDstMac 00:00:c0:a8:06:05
+152 ps_76_2 00:00:00:00:00:00:06:05 1 00:00:00:00:00:00:05:05 1 matchSrcMac 00:00:c0:a8:06:05 matchDstMac 00:00:c0:a8:05:05
+153 ps_77_1 00:00:00:00:00:00:05:06 1 00:00:00:00:00:00:06:06 1 matchSrcMac 00:00:c0:a8:05:06 matchDstMac 00:00:c0:a8:06:06
+154 ps_77_2 00:00:00:00:00:00:06:06 1 00:00:00:00:00:00:05:06 1 matchSrcMac 00:00:c0:a8:06:06 matchDstMac 00:00:c0:a8:05:06
+155 ps_78_1 00:00:00:00:00:00:05:07 1 00:00:00:00:00:00:06:07 1 matchSrcMac 00:00:c0:a8:05:07 matchDstMac 00:00:c0:a8:06:07
+156 ps_78_2 00:00:00:00:00:00:06:07 1 00:00:00:00:00:00:05:07 1 matchSrcMac 00:00:c0:a8:06:07 matchDstMac 00:00:c0:a8:05:07
+157 ps_79_1 00:00:00:00:00:00:05:08 1 00:00:00:00:00:00:06:08 1 matchSrcMac 00:00:c0:a8:05:08 matchDstMac 00:00:c0:a8:06:08
+158 ps_79_2 00:00:00:00:00:00:06:08 1 00:00:00:00:00:00:05:08 1 matchSrcMac 00:00:c0:a8:06:08 matchDstMac 00:00:c0:a8:05:08
+159 ps_80_1 00:00:00:00:00:00:05:09 1 00:00:00:00:00:00:06:09 1 matchSrcMac 00:00:c0:a8:05:09 matchDstMac 00:00:c0:a8:06:09
+160 ps_80_2 00:00:00:00:00:00:06:09 1 00:00:00:00:00:00:05:09 1 matchSrcMac 00:00:c0:a8:06:09 matchDstMac 00:00:c0:a8:05:09
+161 ps_81_1 00:00:00:00:00:00:05:0a 1 00:00:00:00:00:00:06:0a 1 matchSrcMac 00:00:c0:a8:05:0a matchDstMac 00:00:c0:a8:06:0a
+162 ps_81_2 00:00:00:00:00:00:06:0a 1 00:00:00:00:00:00:05:0a 1 matchSrcMac 00:00:c0:a8:06:0a matchDstMac 00:00:c0:a8:05:0a
+163 ps_82_1 00:00:00:00:00:00:05:02 1 00:00:00:00:00:00:07:02 1 matchSrcMac 00:00:c0:a8:05:02 matchDstMac 00:00:c0:a8:07:02
+164 ps_82_2 00:00:00:00:00:00:07:02 1 00:00:00:00:00:00:05:02 1 matchSrcMac 00:00:c0:a8:07:02 matchDstMac 00:00:c0:a8:05:02
+165 ps_83_1 00:00:00:00:00:00:05:03 1 00:00:00:00:00:00:07:03 1 matchSrcMac 00:00:c0:a8:05:03 matchDstMac 00:00:c0:a8:07:03
+166 ps_83_2 00:00:00:00:00:00:07:03 1 00:00:00:00:00:00:05:03 1 matchSrcMac 00:00:c0:a8:07:03 matchDstMac 00:00:c0:a8:05:03
+167 ps_84_1 00:00:00:00:00:00:05:04 1 00:00:00:00:00:00:07:04 1 matchSrcMac 00:00:c0:a8:05:04 matchDstMac 00:00:c0:a8:07:04
+168 ps_84_2 00:00:00:00:00:00:07:04 1 00:00:00:00:00:00:05:04 1 matchSrcMac 00:00:c0:a8:07:04 matchDstMac 00:00:c0:a8:05:04
+169 ps_85_1 00:00:00:00:00:00:05:05 1 00:00:00:00:00:00:07:05 1 matchSrcMac 00:00:c0:a8:05:05 matchDstMac 00:00:c0:a8:07:05
+170 ps_85_2 00:00:00:00:00:00:07:05 1 00:00:00:00:00:00:05:05 1 matchSrcMac 00:00:c0:a8:07:05 matchDstMac 00:00:c0:a8:05:05
+171 ps_86_1 00:00:00:00:00:00:05:06 1 00:00:00:00:00:00:07:06 1 matchSrcMac 00:00:c0:a8:05:06 matchDstMac 00:00:c0:a8:07:06
+172 ps_86_2 00:00:00:00:00:00:07:06 1 00:00:00:00:00:00:05:06 1 matchSrcMac 00:00:c0:a8:07:06 matchDstMac 00:00:c0:a8:05:06
+173 ps_87_1 00:00:00:00:00:00:05:07 1 00:00:00:00:00:00:07:07 1 matchSrcMac 00:00:c0:a8:05:07 matchDstMac 00:00:c0:a8:07:07
+174 ps_87_2 00:00:00:00:00:00:07:07 1 00:00:00:00:00:00:05:07 1 matchSrcMac 00:00:c0:a8:07:07 matchDstMac 00:00:c0:a8:05:07
+175 ps_88_1 00:00:00:00:00:00:05:08 1 00:00:00:00:00:00:07:08 1 matchSrcMac 00:00:c0:a8:05:08 matchDstMac 00:00:c0:a8:07:08
+176 ps_88_2 00:00:00:00:00:00:07:08 1 00:00:00:00:00:00:05:08 1 matchSrcMac 00:00:c0:a8:07:08 matchDstMac 00:00:c0:a8:05:08
+177 ps_89_1 00:00:00:00:00:00:05:09 1 00:00:00:00:00:00:07:09 1 matchSrcMac 00:00:c0:a8:05:09 matchDstMac 00:00:c0:a8:07:09
+178 ps_89_2 00:00:00:00:00:00:07:09 1 00:00:00:00:00:00:05:09 1 matchSrcMac 00:00:c0:a8:07:09 matchDstMac 00:00:c0:a8:05:09
+179 ps_90_1 00:00:00:00:00:00:05:0a 1 00:00:00:00:00:00:07:0a 1 matchSrcMac 00:00:c0:a8:05:0a matchDstMac 00:00:c0:a8:07:0a
+180 ps_90_2 00:00:00:00:00:00:07:0a 1 00:00:00:00:00:00:05:0a 1 matchSrcMac 00:00:c0:a8:07:0a matchDstMac 00:00:c0:a8:05:0a
+181 ps_91_1 00:00:00:00:00:00:05:02 1 00:00:00:00:00:00:08:02 1 matchSrcMac 00:00:c0:a8:05:02 matchDstMac 00:00:c0:a8:08:02
+182 ps_91_2 00:00:00:00:00:00:08:02 1 00:00:00:00:00:00:05:02 1 matchSrcMac 00:00:c0:a8:08:02 matchDstMac 00:00:c0:a8:05:02
+183 ps_92_1 00:00:00:00:00:00:05:03 1 00:00:00:00:00:00:08:03 1 matchSrcMac 00:00:c0:a8:05:03 matchDstMac 00:00:c0:a8:08:03
+184 ps_92_2 00:00:00:00:00:00:08:03 1 00:00:00:00:00:00:05:03 1 matchSrcMac 00:00:c0:a8:08:03 matchDstMac 00:00:c0:a8:05:03
+185 ps_93_1 00:00:00:00:00:00:05:04 1 00:00:00:00:00:00:08:04 1 matchSrcMac 00:00:c0:a8:05:04 matchDstMac 00:00:c0:a8:08:04
+186 ps_93_2 00:00:00:00:00:00:08:04 1 00:00:00:00:00:00:05:04 1 matchSrcMac 00:00:c0:a8:08:04 matchDstMac 00:00:c0:a8:05:04
+187 ps_94_1 00:00:00:00:00:00:05:05 1 00:00:00:00:00:00:08:05 1 matchSrcMac 00:00:c0:a8:05:05 matchDstMac 00:00:c0:a8:08:05
+188 ps_94_2 00:00:00:00:00:00:08:05 1 00:00:00:00:00:00:05:05 1 matchSrcMac 00:00:c0:a8:08:05 matchDstMac 00:00:c0:a8:05:05
+189 ps_95_1 00:00:00:00:00:00:05:06 1 00:00:00:00:00:00:08:06 1 matchSrcMac 00:00:c0:a8:05:06 matchDstMac 00:00:c0:a8:08:06
+190 ps_95_2 00:00:00:00:00:00:08:06 1 00:00:00:00:00:00:05:06 1 matchSrcMac 00:00:c0:a8:08:06 matchDstMac 00:00:c0:a8:05:06
+191 ps_96_1 00:00:00:00:00:00:05:07 1 00:00:00:00:00:00:08:07 1 matchSrcMac 00:00:c0:a8:05:07 matchDstMac 00:00:c0:a8:08:07
+192 ps_96_2 00:00:00:00:00:00:08:07 1 00:00:00:00:00:00:05:07 1 matchSrcMac 00:00:c0:a8:08:07 matchDstMac 00:00:c0:a8:05:07
+193 ps_97_1 00:00:00:00:00:00:05:08 1 00:00:00:00:00:00:08:08 1 matchSrcMac 00:00:c0:a8:05:08 matchDstMac 00:00:c0:a8:08:08
+194 ps_97_2 00:00:00:00:00:00:08:08 1 00:00:00:00:00:00:05:08 1 matchSrcMac 00:00:c0:a8:08:08 matchDstMac 00:00:c0:a8:05:08
+195 ps_98_1 00:00:00:00:00:00:05:09 1 00:00:00:00:00:00:08:09 1 matchSrcMac 00:00:c0:a8:05:09 matchDstMac 00:00:c0:a8:08:09
+196 ps_98_2 00:00:00:00:00:00:08:09 1 00:00:00:00:00:00:05:09 1 matchSrcMac 00:00:c0:a8:08:09 matchDstMac 00:00:c0:a8:05:09
+197 ps_99_1 00:00:00:00:00:00:05:0a 1 00:00:00:00:00:00:08:0a 1 matchSrcMac 00:00:c0:a8:05:0a matchDstMac 00:00:c0:a8:08:0a
+198 ps_99_2 00:00:00:00:00:00:08:0a 1 00:00:00:00:00:00:05:0a 1 matchSrcMac 00:00:c0:a8:08:0a matchDstMac 00:00:c0:a8:05:0a
+199 ps_100_1 00:00:00:00:00:00:06:02 1 00:00:00:00:00:00:07:02 1 matchSrcMac 00:00:c0:a8:06:02 matchDstMac 00:00:c0:a8:07:02
+200 ps_100_2 00:00:00:00:00:00:07:02 1 00:00:00:00:00:00:06:02 1 matchSrcMac 00:00:c0:a8:07:02 matchDstMac 00:00:c0:a8:06:02
+201 ps_101_1 00:00:00:00:00:00:06:03 1 00:00:00:00:00:00:07:03 1 matchSrcMac 00:00:c0:a8:06:03 matchDstMac 00:00:c0:a8:07:03
+202 ps_101_2 00:00:00:00:00:00:07:03 1 00:00:00:00:00:00:06:03 1 matchSrcMac 00:00:c0:a8:07:03 matchDstMac 00:00:c0:a8:06:03
+203 ps_102_1 00:00:00:00:00:00:06:04 1 00:00:00:00:00:00:07:04 1 matchSrcMac 00:00:c0:a8:06:04 matchDstMac 00:00:c0:a8:07:04
+204 ps_102_2 00:00:00:00:00:00:07:04 1 00:00:00:00:00:00:06:04 1 matchSrcMac 00:00:c0:a8:07:04 matchDstMac 00:00:c0:a8:06:04
+205 ps_103_1 00:00:00:00:00:00:06:05 1 00:00:00:00:00:00:07:05 1 matchSrcMac 00:00:c0:a8:06:05 matchDstMac 00:00:c0:a8:07:05
+206 ps_103_2 00:00:00:00:00:00:07:05 1 00:00:00:00:00:00:06:05 1 matchSrcMac 00:00:c0:a8:07:05 matchDstMac 00:00:c0:a8:06:05
+207 ps_104_1 00:00:00:00:00:00:06:06 1 00:00:00:00:00:00:07:06 1 matchSrcMac 00:00:c0:a8:06:06 matchDstMac 00:00:c0:a8:07:06
+208 ps_104_2 00:00:00:00:00:00:07:06 1 00:00:00:00:00:00:06:06 1 matchSrcMac 00:00:c0:a8:07:06 matchDstMac 00:00:c0:a8:06:06
+209 ps_105_1 00:00:00:00:00:00:06:07 1 00:00:00:00:00:00:07:07 1 matchSrcMac 00:00:c0:a8:06:07 matchDstMac 00:00:c0:a8:07:07
+210 ps_105_2 00:00:00:00:00:00:07:07 1 00:00:00:00:00:00:06:07 1 matchSrcMac 00:00:c0:a8:07:07 matchDstMac 00:00:c0:a8:06:07
+211 ps_106_1 00:00:00:00:00:00:06:08 1 00:00:00:00:00:00:07:08 1 matchSrcMac 00:00:c0:a8:06:08 matchDstMac 00:00:c0:a8:07:08
+212 ps_106_2 00:00:00:00:00:00:07:08 1 00:00:00:00:00:00:06:08 1 matchSrcMac 00:00:c0:a8:07:08 matchDstMac 00:00:c0:a8:06:08
+213 ps_107_1 00:00:00:00:00:00:06:09 1 00:00:00:00:00:00:07:09 1 matchSrcMac 00:00:c0:a8:06:09 matchDstMac 00:00:c0:a8:07:09
+214 ps_107_2 00:00:00:00:00:00:07:09 1 00:00:00:00:00:00:06:09 1 matchSrcMac 00:00:c0:a8:07:09 matchDstMac 00:00:c0:a8:06:09
+215 ps_108_1 00:00:00:00:00:00:06:0a 1 00:00:00:00:00:00:07:0a 1 matchSrcMac 00:00:c0:a8:06:0a matchDstMac 00:00:c0:a8:07:0a
+216 ps_108_2 00:00:00:00:00:00:07:0a 1 00:00:00:00:00:00:06:0a 1 matchSrcMac 00:00:c0:a8:07:0a matchDstMac 00:00:c0:a8:06:0a
+217 ps_109_1 00:00:00:00:00:00:06:02 1 00:00:00:00:00:00:08:02 1 matchSrcMac 00:00:c0:a8:06:02 matchDstMac 00:00:c0:a8:08:02
+218 ps_109_2 00:00:00:00:00:00:08:02 1 00:00:00:00:00:00:06:02 1 matchSrcMac 00:00:c0:a8:08:02 matchDstMac 00:00:c0:a8:06:02
+219 ps_110_1 00:00:00:00:00:00:06:03 1 00:00:00:00:00:00:08:03 1 matchSrcMac 00:00:c0:a8:06:03 matchDstMac 00:00:c0:a8:08:03
+220 ps_110_2 00:00:00:00:00:00:08:03 1 00:00:00:00:00:00:06:03 1 matchSrcMac 00:00:c0:a8:08:03 matchDstMac 00:00:c0:a8:06:03
+221 ps_111_1 00:00:00:00:00:00:06:04 1 00:00:00:00:00:00:08:04 1 matchSrcMac 00:00:c0:a8:06:04 matchDstMac 00:00:c0:a8:08:04
+222 ps_111_2 00:00:00:00:00:00:08:04 1 00:00:00:00:00:00:06:04 1 matchSrcMac 00:00:c0:a8:08:04 matchDstMac 00:00:c0:a8:06:04
+223 ps_112_1 00:00:00:00:00:00:06:05 1 00:00:00:00:00:00:08:05 1 matchSrcMac 00:00:c0:a8:06:05 matchDstMac 00:00:c0:a8:08:05
+224 ps_112_2 00:00:00:00:00:00:08:05 1 00:00:00:00:00:00:06:05 1 matchSrcMac 00:00:c0:a8:08:05 matchDstMac 00:00:c0:a8:06:05
+225 ps_113_1 00:00:00:00:00:00:06:06 1 00:00:00:00:00:00:08:06 1 matchSrcMac 00:00:c0:a8:06:06 matchDstMac 00:00:c0:a8:08:06
+226 ps_113_2 00:00:00:00:00:00:08:06 1 00:00:00:00:00:00:06:06 1 matchSrcMac 00:00:c0:a8:08:06 matchDstMac 00:00:c0:a8:06:06
+227 ps_114_1 00:00:00:00:00:00:06:07 1 00:00:00:00:00:00:08:07 1 matchSrcMac 00:00:c0:a8:06:07 matchDstMac 00:00:c0:a8:08:07
+228 ps_114_2 00:00:00:00:00:00:08:07 1 00:00:00:00:00:00:06:07 1 matchSrcMac 00:00:c0:a8:08:07 matchDstMac 00:00:c0:a8:06:07
+229 ps_115_1 00:00:00:00:00:00:06:08 1 00:00:00:00:00:00:08:08 1 matchSrcMac 00:00:c0:a8:06:08 matchDstMac 00:00:c0:a8:08:08
+230 ps_115_2 00:00:00:00:00:00:08:08 1 00:00:00:00:00:00:06:08 1 matchSrcMac 00:00:c0:a8:08:08 matchDstMac 00:00:c0:a8:06:08
+231 ps_116_1 00:00:00:00:00:00:06:09 1 00:00:00:00:00:00:08:09 1 matchSrcMac 00:00:c0:a8:06:09 matchDstMac 00:00:c0:a8:08:09
+232 ps_116_2 00:00:00:00:00:00:08:09 1 00:00:00:00:00:00:06:09 1 matchSrcMac 00:00:c0:a8:08:09 matchDstMac 00:00:c0:a8:06:09
+233 ps_117_1 00:00:00:00:00:00:06:0a 1 00:00:00:00:00:00:08:0a 1 matchSrcMac 00:00:c0:a8:06:0a matchDstMac 00:00:c0:a8:08:0a
+234 ps_117_2 00:00:00:00:00:00:08:0a 1 00:00:00:00:00:00:06:0a 1 matchSrcMac 00:00:c0:a8:08:0a matchDstMac 00:00:c0:a8:06:0a
+235 ps_118_1 00:00:00:00:00:00:07:02 1 00:00:00:00:00:00:08:02 1 matchSrcMac 00:00:c0:a8:07:02 matchDstMac 00:00:c0:a8:08:02
+236 ps_118_2 00:00:00:00:00:00:08:02 1 00:00:00:00:00:00:07:02 1 matchSrcMac 00:00:c0:a8:08:02 matchDstMac 00:00:c0:a8:07:02
+237 ps_119_1 00:00:00:00:00:00:07:03 1 00:00:00:00:00:00:08:03 1 matchSrcMac 00:00:c0:a8:07:03 matchDstMac 00:00:c0:a8:08:03
+238 ps_119_2 00:00:00:00:00:00:08:03 1 00:00:00:00:00:00:07:03 1 matchSrcMac 00:00:c0:a8:08:03 matchDstMac 00:00:c0:a8:07:03
+239 ps_120_1 00:00:00:00:00:00:07:04 1 00:00:00:00:00:00:08:04 1 matchSrcMac 00:00:c0:a8:07:04 matchDstMac 00:00:c0:a8:08:04
+240 ps_120_2 00:00:00:00:00:00:08:04 1 00:00:00:00:00:00:07:04 1 matchSrcMac 00:00:c0:a8:08:04 matchDstMac 00:00:c0:a8:07:04
+241 ps_121_1 00:00:00:00:00:00:07:05 1 00:00:00:00:00:00:08:05 1 matchSrcMac 00:00:c0:a8:07:05 matchDstMac 00:00:c0:a8:08:05
+242 ps_121_2 00:00:00:00:00:00:08:05 1 00:00:00:00:00:00:07:05 1 matchSrcMac 00:00:c0:a8:08:05 matchDstMac 00:00:c0:a8:07:05
+243 ps_122_1 00:00:00:00:00:00:07:06 1 00:00:00:00:00:00:08:06 1 matchSrcMac 00:00:c0:a8:07:06 matchDstMac 00:00:c0:a8:08:06
+244 ps_122_2 00:00:00:00:00:00:08:06 1 00:00:00:00:00:00:07:06 1 matchSrcMac 00:00:c0:a8:08:06 matchDstMac 00:00:c0:a8:07:06
+245 ps_123_1 00:00:00:00:00:00:07:07 1 00:00:00:00:00:00:08:07 1 matchSrcMac 00:00:c0:a8:07:07 matchDstMac 00:00:c0:a8:08:07
+246 ps_123_2 00:00:00:00:00:00:08:07 1 00:00:00:00:00:00:07:07 1 matchSrcMac 00:00:c0:a8:08:07 matchDstMac 00:00:c0:a8:07:07
+247 ps_124_1 00:00:00:00:00:00:07:08 1 00:00:00:00:00:00:08:08 1 matchSrcMac 00:00:c0:a8:07:08 matchDstMac 00:00:c0:a8:08:08
+248 ps_124_2 00:00:00:00:00:00:08:08 1 00:00:00:00:00:00:07:08 1 matchSrcMac 00:00:c0:a8:08:08 matchDstMac 00:00:c0:a8:07:08
+249 ps_125_1 00:00:00:00:00:00:07:09 1 00:00:00:00:00:00:08:09 1 matchSrcMac 00:00:c0:a8:07:09 matchDstMac 00:00:c0:a8:08:09
+250 ps_125_2 00:00:00:00:00:00:08:09 1 00:00:00:00:00:00:07:09 1 matchSrcMac 00:00:c0:a8:08:09 matchDstMac 00:00:c0:a8:07:09
+251 ps_126_1 00:00:00:00:00:00:07:0a 1 00:00:00:00:00:00:08:0a 1 matchSrcMac 00:00:c0:a8:07:0a matchDstMac 00:00:c0:a8:08:0a
+252 ps_126_2 00:00:00:00:00:00:08:0a 1 00:00:00:00:00:00:07:0a 1 matchSrcMac 00:00:c0:a8:08:0a matchDstMac 00:00:c0:a8:07:0a
diff --git a/web/flowdef_demo_start.txt b/web/flowdef_demo_start.txt
index fe0e3b5..507cc93 100644
--- a/web/flowdef_demo_start.txt
+++ b/web/flowdef_demo_start.txt
@@ -1,4 +1,3 @@
-# Demo flow scale down
 1 ps_1_1 00:00:00:00:00:00:02:02 1 00:00:00:00:00:00:03:02 1 matchSrcMac 00:00:c0:a8:02:02 matchDstMac 00:00:c0:a8:03:02
 2 ps_1_2 00:00:00:00:00:00:03:02 1 00:00:00:00:00:00:02:02 1 matchSrcMac 00:00:c0:a8:03:02 matchDstMac 00:00:c0:a8:02:02
 3 ps_2_1 00:00:00:00:00:00:02:03 1 00:00:00:00:00:00:03:03 1 matchSrcMac 00:00:c0:a8:02:03 matchDstMac 00:00:c0:a8:03:03
@@ -19,183 +18,127 @@
 18 ps_9_2 00:00:00:00:00:00:03:0a 1 00:00:00:00:00:00:02:0a 1 matchSrcMac 00:00:c0:a8:03:0a matchDstMac 00:00:c0:a8:02:0a
 19 ps_10_1 00:00:00:00:00:00:02:0b 1 00:00:00:00:00:00:03:0b 1 matchSrcMac 00:00:c0:a8:02:0b matchDstMac 00:00:c0:a8:03:0b
 20 ps_10_2 00:00:00:00:00:00:03:0b 1 00:00:00:00:00:00:02:0b 1 matchSrcMac 00:00:c0:a8:03:0b matchDstMac 00:00:c0:a8:02:0b
-21 ps_11_1 00:00:00:00:00:00:02:02 1 00:00:00:00:00:00:04:02 1 matchSrcMac 00:00:c0:a8:02:02 matchDstMac 00:00:c0:a8:04:02
-22 ps_11_2 00:00:00:00:00:00:04:02 1 00:00:00:00:00:00:02:02 1 matchSrcMac 00:00:c0:a8:04:02 matchDstMac 00:00:c0:a8:02:02
-23 ps_12_1 00:00:00:00:00:00:02:03 1 00:00:00:00:00:00:04:03 1 matchSrcMac 00:00:c0:a8:02:03 matchDstMac 00:00:c0:a8:04:03
-24 ps_12_2 00:00:00:00:00:00:04:03 1 00:00:00:00:00:00:02:03 1 matchSrcMac 00:00:c0:a8:04:03 matchDstMac 00:00:c0:a8:02:03
-25 ps_13_1 00:00:00:00:00:00:02:04 1 00:00:00:00:00:00:04:04 1 matchSrcMac 00:00:c0:a8:02:04 matchDstMac 00:00:c0:a8:04:04
-26 ps_13_2 00:00:00:00:00:00:04:04 1 00:00:00:00:00:00:02:04 1 matchSrcMac 00:00:c0:a8:04:04 matchDstMac 00:00:c0:a8:02:04
-27 ps_14_1 00:00:00:00:00:00:02:05 1 00:00:00:00:00:00:04:05 1 matchSrcMac 00:00:c0:a8:02:05 matchDstMac 00:00:c0:a8:04:05
-28 ps_14_2 00:00:00:00:00:00:04:05 1 00:00:00:00:00:00:02:05 1 matchSrcMac 00:00:c0:a8:04:05 matchDstMac 00:00:c0:a8:02:05
-29 ps_15_1 00:00:00:00:00:00:02:06 1 00:00:00:00:00:00:04:06 1 matchSrcMac 00:00:c0:a8:02:06 matchDstMac 00:00:c0:a8:04:06
-30 ps_15_2 00:00:00:00:00:00:04:06 1 00:00:00:00:00:00:02:06 1 matchSrcMac 00:00:c0:a8:04:06 matchDstMac 00:00:c0:a8:02:06
-31 ps_16_1 00:00:00:00:00:00:02:07 1 00:00:00:00:00:00:04:07 1 matchSrcMac 00:00:c0:a8:02:07 matchDstMac 00:00:c0:a8:04:07
-32 ps_16_2 00:00:00:00:00:00:04:07 1 00:00:00:00:00:00:02:07 1 matchSrcMac 00:00:c0:a8:04:07 matchDstMac 00:00:c0:a8:02:07
-33 ps_17_1 00:00:00:00:00:00:02:08 1 00:00:00:00:00:00:04:08 1 matchSrcMac 00:00:c0:a8:02:08 matchDstMac 00:00:c0:a8:04:08
-34 ps_17_2 00:00:00:00:00:00:04:08 1 00:00:00:00:00:00:02:08 1 matchSrcMac 00:00:c0:a8:04:08 matchDstMac 00:00:c0:a8:02:08
-35 ps_18_1 00:00:00:00:00:00:02:09 1 00:00:00:00:00:00:04:09 1 matchSrcMac 00:00:c0:a8:02:09 matchDstMac 00:00:c0:a8:04:09
-36 ps_18_2 00:00:00:00:00:00:04:09 1 00:00:00:00:00:00:02:09 1 matchSrcMac 00:00:c0:a8:04:09 matchDstMac 00:00:c0:a8:02:09
-37 ps_19_1 00:00:00:00:00:00:02:0a 1 00:00:00:00:00:00:04:0a 1 matchSrcMac 00:00:c0:a8:02:0a matchDstMac 00:00:c0:a8:04:0a
-38 ps_19_2 00:00:00:00:00:00:04:0a 1 00:00:00:00:00:00:02:0a 1 matchSrcMac 00:00:c0:a8:04:0a matchDstMac 00:00:c0:a8:02:0a
-39 ps_20_1 00:00:00:00:00:00:02:0b 1 00:00:00:00:00:00:04:0b 1 matchSrcMac 00:00:c0:a8:02:0b matchDstMac 00:00:c0:a8:04:0b
-40 ps_20_2 00:00:00:00:00:00:04:0b 1 00:00:00:00:00:00:02:0b 1 matchSrcMac 00:00:c0:a8:04:0b matchDstMac 00:00:c0:a8:02:0b
-41 ps_21_1 00:00:00:00:00:00:02:02 1 00:00:00:00:00:00:06:02 1 matchSrcMac 00:00:c0:a8:02:02 matchDstMac 00:00:c0:a8:06:02
-42 ps_21_2 00:00:00:00:00:00:06:02 1 00:00:00:00:00:00:02:02 1 matchSrcMac 00:00:c0:a8:06:02 matchDstMac 00:00:c0:a8:02:02
-43 ps_22_1 00:00:00:00:00:00:02:03 1 00:00:00:00:00:00:06:03 1 matchSrcMac 00:00:c0:a8:02:03 matchDstMac 00:00:c0:a8:06:03
-44 ps_22_2 00:00:00:00:00:00:06:03 1 00:00:00:00:00:00:02:03 1 matchSrcMac 00:00:c0:a8:06:03 matchDstMac 00:00:c0:a8:02:03
-45 ps_23_1 00:00:00:00:00:00:02:04 1 00:00:00:00:00:00:06:04 1 matchSrcMac 00:00:c0:a8:02:04 matchDstMac 00:00:c0:a8:06:04
-46 ps_23_2 00:00:00:00:00:00:06:04 1 00:00:00:00:00:00:02:04 1 matchSrcMac 00:00:c0:a8:06:04 matchDstMac 00:00:c0:a8:02:04
-47 ps_24_1 00:00:00:00:00:00:02:05 1 00:00:00:00:00:00:06:05 1 matchSrcMac 00:00:c0:a8:02:05 matchDstMac 00:00:c0:a8:06:05
-48 ps_24_2 00:00:00:00:00:00:06:05 1 00:00:00:00:00:00:02:05 1 matchSrcMac 00:00:c0:a8:06:05 matchDstMac 00:00:c0:a8:02:05
-49 ps_25_1 00:00:00:00:00:00:02:06 1 00:00:00:00:00:00:06:06 1 matchSrcMac 00:00:c0:a8:02:06 matchDstMac 00:00:c0:a8:06:06
-50 ps_25_2 00:00:00:00:00:00:06:06 1 00:00:00:00:00:00:02:06 1 matchSrcMac 00:00:c0:a8:06:06 matchDstMac 00:00:c0:a8:02:06
-51 ps_26_1 00:00:00:00:00:00:02:07 1 00:00:00:00:00:00:06:07 1 matchSrcMac 00:00:c0:a8:02:07 matchDstMac 00:00:c0:a8:06:07
-52 ps_26_2 00:00:00:00:00:00:06:07 1 00:00:00:00:00:00:02:07 1 matchSrcMac 00:00:c0:a8:06:07 matchDstMac 00:00:c0:a8:02:07
-53 ps_27_1 00:00:00:00:00:00:02:08 1 00:00:00:00:00:00:06:08 1 matchSrcMac 00:00:c0:a8:02:08 matchDstMac 00:00:c0:a8:06:08
-54 ps_27_2 00:00:00:00:00:00:06:08 1 00:00:00:00:00:00:02:08 1 matchSrcMac 00:00:c0:a8:06:08 matchDstMac 00:00:c0:a8:02:08
-55 ps_28_1 00:00:00:00:00:00:02:09 1 00:00:00:00:00:00:06:09 1 matchSrcMac 00:00:c0:a8:02:09 matchDstMac 00:00:c0:a8:06:09
-56 ps_28_2 00:00:00:00:00:00:06:09 1 00:00:00:00:00:00:02:09 1 matchSrcMac 00:00:c0:a8:06:09 matchDstMac 00:00:c0:a8:02:09
-57 ps_29_1 00:00:00:00:00:00:02:0a 1 00:00:00:00:00:00:06:0a 1 matchSrcMac 00:00:c0:a8:02:0a matchDstMac 00:00:c0:a8:06:0a
-58 ps_29_2 00:00:00:00:00:00:06:0a 1 00:00:00:00:00:00:02:0a 1 matchSrcMac 00:00:c0:a8:06:0a matchDstMac 00:00:c0:a8:02:0a
-59 ps_30_1 00:00:00:00:00:00:02:0b 1 00:00:00:00:00:00:06:0b 1 matchSrcMac 00:00:c0:a8:02:0b matchDstMac 00:00:c0:a8:06:0b
-60 ps_30_2 00:00:00:00:00:00:06:0b 1 00:00:00:00:00:00:02:0b 1 matchSrcMac 00:00:c0:a8:06:0b matchDstMac 00:00:c0:a8:02:0b
-61 ps_31_1 00:00:00:00:00:00:02:02 1 00:00:00:00:00:00:08:02 1 matchSrcMac 00:00:c0:a8:02:02 matchDstMac 00:00:c0:a8:08:02
-62 ps_31_2 00:00:00:00:00:00:08:02 1 00:00:00:00:00:00:02:02 1 matchSrcMac 00:00:c0:a8:08:02 matchDstMac 00:00:c0:a8:02:02
-63 ps_32_1 00:00:00:00:00:00:02:03 1 00:00:00:00:00:00:08:03 1 matchSrcMac 00:00:c0:a8:02:03 matchDstMac 00:00:c0:a8:08:03
-64 ps_32_2 00:00:00:00:00:00:08:03 1 00:00:00:00:00:00:02:03 1 matchSrcMac 00:00:c0:a8:08:03 matchDstMac 00:00:c0:a8:02:03
-65 ps_33_1 00:00:00:00:00:00:02:04 1 00:00:00:00:00:00:08:04 1 matchSrcMac 00:00:c0:a8:02:04 matchDstMac 00:00:c0:a8:08:04
-66 ps_33_2 00:00:00:00:00:00:08:04 1 00:00:00:00:00:00:02:04 1 matchSrcMac 00:00:c0:a8:08:04 matchDstMac 00:00:c0:a8:02:04
-67 ps_34_1 00:00:00:00:00:00:02:05 1 00:00:00:00:00:00:08:05 1 matchSrcMac 00:00:c0:a8:02:05 matchDstMac 00:00:c0:a8:08:05
-68 ps_34_2 00:00:00:00:00:00:08:05 1 00:00:00:00:00:00:02:05 1 matchSrcMac 00:00:c0:a8:08:05 matchDstMac 00:00:c0:a8:02:05
-69 ps_35_1 00:00:00:00:00:00:02:06 1 00:00:00:00:00:00:08:06 1 matchSrcMac 00:00:c0:a8:02:06 matchDstMac 00:00:c0:a8:08:06
-70 ps_35_2 00:00:00:00:00:00:08:06 1 00:00:00:00:00:00:02:06 1 matchSrcMac 00:00:c0:a8:08:06 matchDstMac 00:00:c0:a8:02:06
-71 ps_36_1 00:00:00:00:00:00:02:07 1 00:00:00:00:00:00:08:07 1 matchSrcMac 00:00:c0:a8:02:07 matchDstMac 00:00:c0:a8:08:07
-72 ps_36_2 00:00:00:00:00:00:08:07 1 00:00:00:00:00:00:02:07 1 matchSrcMac 00:00:c0:a8:08:07 matchDstMac 00:00:c0:a8:02:07
-73 ps_37_1 00:00:00:00:00:00:02:08 1 00:00:00:00:00:00:08:08 1 matchSrcMac 00:00:c0:a8:02:08 matchDstMac 00:00:c0:a8:08:08
-74 ps_37_2 00:00:00:00:00:00:08:08 1 00:00:00:00:00:00:02:08 1 matchSrcMac 00:00:c0:a8:08:08 matchDstMac 00:00:c0:a8:02:08
-75 ps_38_1 00:00:00:00:00:00:02:09 1 00:00:00:00:00:00:08:09 1 matchSrcMac 00:00:c0:a8:02:09 matchDstMac 00:00:c0:a8:08:09
-76 ps_38_2 00:00:00:00:00:00:08:09 1 00:00:00:00:00:00:02:09 1 matchSrcMac 00:00:c0:a8:08:09 matchDstMac 00:00:c0:a8:02:09
-77 ps_39_1 00:00:00:00:00:00:02:0a 1 00:00:00:00:00:00:08:0a 1 matchSrcMac 00:00:c0:a8:02:0a matchDstMac 00:00:c0:a8:08:0a
-78 ps_39_2 00:00:00:00:00:00:08:0a 1 00:00:00:00:00:00:02:0a 1 matchSrcMac 00:00:c0:a8:08:0a matchDstMac 00:00:c0:a8:02:0a
-79 ps_40_1 00:00:00:00:00:00:02:0b 1 00:00:00:00:00:00:08:0b 1 matchSrcMac 00:00:c0:a8:02:0b matchDstMac 00:00:c0:a8:08:0b
-80 ps_40_2 00:00:00:00:00:00:08:0b 1 00:00:00:00:00:00:02:0b 1 matchSrcMac 00:00:c0:a8:08:0b matchDstMac 00:00:c0:a8:02:0b
-81 ps_41_1 00:00:00:00:00:00:03:02 1 00:00:00:00:00:00:04:02 1 matchSrcMac 00:00:c0:a8:03:02 matchDstMac 00:00:c0:a8:04:02
-82 ps_41_2 00:00:00:00:00:00:04:02 1 00:00:00:00:00:00:03:02 1 matchSrcMac 00:00:c0:a8:04:02 matchDstMac 00:00:c0:a8:03:02
-83 ps_42_1 00:00:00:00:00:00:03:03 1 00:00:00:00:00:00:04:03 1 matchSrcMac 00:00:c0:a8:03:03 matchDstMac 00:00:c0:a8:04:03
-84 ps_42_2 00:00:00:00:00:00:04:03 1 00:00:00:00:00:00:03:03 1 matchSrcMac 00:00:c0:a8:04:03 matchDstMac 00:00:c0:a8:03:03
-85 ps_43_1 00:00:00:00:00:00:03:04 1 00:00:00:00:00:00:04:04 1 matchSrcMac 00:00:c0:a8:03:04 matchDstMac 00:00:c0:a8:04:04
-86 ps_43_2 00:00:00:00:00:00:04:04 1 00:00:00:00:00:00:03:04 1 matchSrcMac 00:00:c0:a8:04:04 matchDstMac 00:00:c0:a8:03:04
-87 ps_44_1 00:00:00:00:00:00:03:05 1 00:00:00:00:00:00:04:05 1 matchSrcMac 00:00:c0:a8:03:05 matchDstMac 00:00:c0:a8:04:05
-88 ps_44_2 00:00:00:00:00:00:04:05 1 00:00:00:00:00:00:03:05 1 matchSrcMac 00:00:c0:a8:04:05 matchDstMac 00:00:c0:a8:03:05
-89 ps_45_1 00:00:00:00:00:00:03:06 1 00:00:00:00:00:00:04:06 1 matchSrcMac 00:00:c0:a8:03:06 matchDstMac 00:00:c0:a8:04:06
-90 ps_45_2 00:00:00:00:00:00:04:06 1 00:00:00:00:00:00:03:06 1 matchSrcMac 00:00:c0:a8:04:06 matchDstMac 00:00:c0:a8:03:06
-91 ps_46_1 00:00:00:00:00:00:03:07 1 00:00:00:00:00:00:04:07 1 matchSrcMac 00:00:c0:a8:03:07 matchDstMac 00:00:c0:a8:04:07
-92 ps_46_2 00:00:00:00:00:00:04:07 1 00:00:00:00:00:00:03:07 1 matchSrcMac 00:00:c0:a8:04:07 matchDstMac 00:00:c0:a8:03:07
-93 ps_47_1 00:00:00:00:00:00:03:08 1 00:00:00:00:00:00:04:08 1 matchSrcMac 00:00:c0:a8:03:08 matchDstMac 00:00:c0:a8:04:08
-94 ps_47_2 00:00:00:00:00:00:04:08 1 00:00:00:00:00:00:03:08 1 matchSrcMac 00:00:c0:a8:04:08 matchDstMac 00:00:c0:a8:03:08
-95 ps_48_1 00:00:00:00:00:00:03:09 1 00:00:00:00:00:00:04:09 1 matchSrcMac 00:00:c0:a8:03:09 matchDstMac 00:00:c0:a8:04:09
-96 ps_48_2 00:00:00:00:00:00:04:09 1 00:00:00:00:00:00:03:09 1 matchSrcMac 00:00:c0:a8:04:09 matchDstMac 00:00:c0:a8:03:09
-97 ps_49_1 00:00:00:00:00:00:03:0a 1 00:00:00:00:00:00:04:0a 1 matchSrcMac 00:00:c0:a8:03:0a matchDstMac 00:00:c0:a8:04:0a
-98 ps_49_2 00:00:00:00:00:00:04:0a 1 00:00:00:00:00:00:03:0a 1 matchSrcMac 00:00:c0:a8:04:0a matchDstMac 00:00:c0:a8:03:0a
-99 ps_50_1 00:00:00:00:00:00:03:0b 1 00:00:00:00:00:00:04:0b 1 matchSrcMac 00:00:c0:a8:03:0b matchDstMac 00:00:c0:a8:04:0b
-100 ps_50_2 00:00:00:00:00:00:04:0b 1 00:00:00:00:00:00:03:0b 1 matchSrcMac 00:00:c0:a8:04:0b matchDstMac 00:00:c0:a8:03:0b
-101 ps_51_1 00:00:00:00:00:00:03:02 1 00:00:00:00:00:00:06:02 1 matchSrcMac 00:00:c0:a8:03:02 matchDstMac 00:00:c0:a8:06:02
-102 ps_51_2 00:00:00:00:00:00:06:02 1 00:00:00:00:00:00:03:02 1 matchSrcMac 00:00:c0:a8:06:02 matchDstMac 00:00:c0:a8:03:02
-103 ps_52_1 00:00:00:00:00:00:03:03 1 00:00:00:00:00:00:06:03 1 matchSrcMac 00:00:c0:a8:03:03 matchDstMac 00:00:c0:a8:06:03
-104 ps_52_2 00:00:00:00:00:00:06:03 1 00:00:00:00:00:00:03:03 1 matchSrcMac 00:00:c0:a8:06:03 matchDstMac 00:00:c0:a8:03:03
-105 ps_53_1 00:00:00:00:00:00:03:04 1 00:00:00:00:00:00:06:04 1 matchSrcMac 00:00:c0:a8:03:04 matchDstMac 00:00:c0:a8:06:04
-106 ps_53_2 00:00:00:00:00:00:06:04 1 00:00:00:00:00:00:03:04 1 matchSrcMac 00:00:c0:a8:06:04 matchDstMac 00:00:c0:a8:03:04
-107 ps_54_1 00:00:00:00:00:00:03:05 1 00:00:00:00:00:00:06:05 1 matchSrcMac 00:00:c0:a8:03:05 matchDstMac 00:00:c0:a8:06:05
-108 ps_54_2 00:00:00:00:00:00:06:05 1 00:00:00:00:00:00:03:05 1 matchSrcMac 00:00:c0:a8:06:05 matchDstMac 00:00:c0:a8:03:05
-109 ps_55_1 00:00:00:00:00:00:03:06 1 00:00:00:00:00:00:06:06 1 matchSrcMac 00:00:c0:a8:03:06 matchDstMac 00:00:c0:a8:06:06
-110 ps_55_2 00:00:00:00:00:00:06:06 1 00:00:00:00:00:00:03:06 1 matchSrcMac 00:00:c0:a8:06:06 matchDstMac 00:00:c0:a8:03:06
-111 ps_56_1 00:00:00:00:00:00:03:07 1 00:00:00:00:00:00:06:07 1 matchSrcMac 00:00:c0:a8:03:07 matchDstMac 00:00:c0:a8:06:07
-112 ps_56_2 00:00:00:00:00:00:06:07 1 00:00:00:00:00:00:03:07 1 matchSrcMac 00:00:c0:a8:06:07 matchDstMac 00:00:c0:a8:03:07
-113 ps_57_1 00:00:00:00:00:00:03:08 1 00:00:00:00:00:00:06:08 1 matchSrcMac 00:00:c0:a8:03:08 matchDstMac 00:00:c0:a8:06:08
-114 ps_57_2 00:00:00:00:00:00:06:08 1 00:00:00:00:00:00:03:08 1 matchSrcMac 00:00:c0:a8:06:08 matchDstMac 00:00:c0:a8:03:08
-115 ps_58_1 00:00:00:00:00:00:03:09 1 00:00:00:00:00:00:06:09 1 matchSrcMac 00:00:c0:a8:03:09 matchDstMac 00:00:c0:a8:06:09
-116 ps_58_2 00:00:00:00:00:00:06:09 1 00:00:00:00:00:00:03:09 1 matchSrcMac 00:00:c0:a8:06:09 matchDstMac 00:00:c0:a8:03:09
-117 ps_59_1 00:00:00:00:00:00:03:0a 1 00:00:00:00:00:00:06:0a 1 matchSrcMac 00:00:c0:a8:03:0a matchDstMac 00:00:c0:a8:06:0a
-118 ps_59_2 00:00:00:00:00:00:06:0a 1 00:00:00:00:00:00:03:0a 1 matchSrcMac 00:00:c0:a8:06:0a matchDstMac 00:00:c0:a8:03:0a
-119 ps_60_1 00:00:00:00:00:00:03:0b 1 00:00:00:00:00:00:06:0b 1 matchSrcMac 00:00:c0:a8:03:0b matchDstMac 00:00:c0:a8:06:0b
-120 ps_60_2 00:00:00:00:00:00:06:0b 1 00:00:00:00:00:00:03:0b 1 matchSrcMac 00:00:c0:a8:06:0b matchDstMac 00:00:c0:a8:03:0b
-121 ps_61_1 00:00:00:00:00:00:03:02 1 00:00:00:00:00:00:08:02 1 matchSrcMac 00:00:c0:a8:03:02 matchDstMac 00:00:c0:a8:08:02
-122 ps_61_2 00:00:00:00:00:00:08:02 1 00:00:00:00:00:00:03:02 1 matchSrcMac 00:00:c0:a8:08:02 matchDstMac 00:00:c0:a8:03:02
-123 ps_62_1 00:00:00:00:00:00:03:03 1 00:00:00:00:00:00:08:03 1 matchSrcMac 00:00:c0:a8:03:03 matchDstMac 00:00:c0:a8:08:03
-124 ps_62_2 00:00:00:00:00:00:08:03 1 00:00:00:00:00:00:03:03 1 matchSrcMac 00:00:c0:a8:08:03 matchDstMac 00:00:c0:a8:03:03
-125 ps_63_1 00:00:00:00:00:00:03:04 1 00:00:00:00:00:00:08:04 1 matchSrcMac 00:00:c0:a8:03:04 matchDstMac 00:00:c0:a8:08:04
-126 ps_63_2 00:00:00:00:00:00:08:04 1 00:00:00:00:00:00:03:04 1 matchSrcMac 00:00:c0:a8:08:04 matchDstMac 00:00:c0:a8:03:04
-127 ps_64_1 00:00:00:00:00:00:03:05 1 00:00:00:00:00:00:08:05 1 matchSrcMac 00:00:c0:a8:03:05 matchDstMac 00:00:c0:a8:08:05
-128 ps_64_2 00:00:00:00:00:00:08:05 1 00:00:00:00:00:00:03:05 1 matchSrcMac 00:00:c0:a8:08:05 matchDstMac 00:00:c0:a8:03:05
-129 ps_65_1 00:00:00:00:00:00:03:06 1 00:00:00:00:00:00:08:06 1 matchSrcMac 00:00:c0:a8:03:06 matchDstMac 00:00:c0:a8:08:06
-130 ps_65_2 00:00:00:00:00:00:08:06 1 00:00:00:00:00:00:03:06 1 matchSrcMac 00:00:c0:a8:08:06 matchDstMac 00:00:c0:a8:03:06
-131 ps_66_1 00:00:00:00:00:00:03:07 1 00:00:00:00:00:00:08:07 1 matchSrcMac 00:00:c0:a8:03:07 matchDstMac 00:00:c0:a8:08:07
-132 ps_66_2 00:00:00:00:00:00:08:07 1 00:00:00:00:00:00:03:07 1 matchSrcMac 00:00:c0:a8:08:07 matchDstMac 00:00:c0:a8:03:07
-133 ps_67_1 00:00:00:00:00:00:03:08 1 00:00:00:00:00:00:08:08 1 matchSrcMac 00:00:c0:a8:03:08 matchDstMac 00:00:c0:a8:08:08
-134 ps_67_2 00:00:00:00:00:00:08:08 1 00:00:00:00:00:00:03:08 1 matchSrcMac 00:00:c0:a8:08:08 matchDstMac 00:00:c0:a8:03:08
-135 ps_68_1 00:00:00:00:00:00:03:09 1 00:00:00:00:00:00:08:09 1 matchSrcMac 00:00:c0:a8:03:09 matchDstMac 00:00:c0:a8:08:09
-136 ps_68_2 00:00:00:00:00:00:08:09 1 00:00:00:00:00:00:03:09 1 matchSrcMac 00:00:c0:a8:08:09 matchDstMac 00:00:c0:a8:03:09
-137 ps_69_1 00:00:00:00:00:00:03:0a 1 00:00:00:00:00:00:08:0a 1 matchSrcMac 00:00:c0:a8:03:0a matchDstMac 00:00:c0:a8:08:0a
-138 ps_69_2 00:00:00:00:00:00:08:0a 1 00:00:00:00:00:00:03:0a 1 matchSrcMac 00:00:c0:a8:08:0a matchDstMac 00:00:c0:a8:03:0a
-139 ps_70_1 00:00:00:00:00:00:03:0b 1 00:00:00:00:00:00:08:0b 1 matchSrcMac 00:00:c0:a8:03:0b matchDstMac 00:00:c0:a8:08:0b
-140 ps_70_2 00:00:00:00:00:00:08:0b 1 00:00:00:00:00:00:03:0b 1 matchSrcMac 00:00:c0:a8:08:0b matchDstMac 00:00:c0:a8:03:0b
-141 ps_71_1 00:00:00:00:00:00:04:02 1 00:00:00:00:00:00:06:02 1 matchSrcMac 00:00:c0:a8:04:02 matchDstMac 00:00:c0:a8:06:02
-142 ps_71_2 00:00:00:00:00:00:06:02 1 00:00:00:00:00:00:04:02 1 matchSrcMac 00:00:c0:a8:06:02 matchDstMac 00:00:c0:a8:04:02
-143 ps_72_1 00:00:00:00:00:00:04:03 1 00:00:00:00:00:00:06:03 1 matchSrcMac 00:00:c0:a8:04:03 matchDstMac 00:00:c0:a8:06:03
-144 ps_72_2 00:00:00:00:00:00:06:03 1 00:00:00:00:00:00:04:03 1 matchSrcMac 00:00:c0:a8:06:03 matchDstMac 00:00:c0:a8:04:03
-145 ps_73_1 00:00:00:00:00:00:04:04 1 00:00:00:00:00:00:06:04 1 matchSrcMac 00:00:c0:a8:04:04 matchDstMac 00:00:c0:a8:06:04
-146 ps_73_2 00:00:00:00:00:00:06:04 1 00:00:00:00:00:00:04:04 1 matchSrcMac 00:00:c0:a8:06:04 matchDstMac 00:00:c0:a8:04:04
-147 ps_74_1 00:00:00:00:00:00:04:05 1 00:00:00:00:00:00:06:05 1 matchSrcMac 00:00:c0:a8:04:05 matchDstMac 00:00:c0:a8:06:05
-148 ps_74_2 00:00:00:00:00:00:06:05 1 00:00:00:00:00:00:04:05 1 matchSrcMac 00:00:c0:a8:06:05 matchDstMac 00:00:c0:a8:04:05
-149 ps_75_1 00:00:00:00:00:00:04:06 1 00:00:00:00:00:00:06:06 1 matchSrcMac 00:00:c0:a8:04:06 matchDstMac 00:00:c0:a8:06:06
-150 ps_75_2 00:00:00:00:00:00:06:06 1 00:00:00:00:00:00:04:06 1 matchSrcMac 00:00:c0:a8:06:06 matchDstMac 00:00:c0:a8:04:06
-151 ps_76_1 00:00:00:00:00:00:04:07 1 00:00:00:00:00:00:06:07 1 matchSrcMac 00:00:c0:a8:04:07 matchDstMac 00:00:c0:a8:06:07
-152 ps_76_2 00:00:00:00:00:00:06:07 1 00:00:00:00:00:00:04:07 1 matchSrcMac 00:00:c0:a8:06:07 matchDstMac 00:00:c0:a8:04:07
-153 ps_77_1 00:00:00:00:00:00:04:08 1 00:00:00:00:00:00:06:08 1 matchSrcMac 00:00:c0:a8:04:08 matchDstMac 00:00:c0:a8:06:08
-154 ps_77_2 00:00:00:00:00:00:06:08 1 00:00:00:00:00:00:04:08 1 matchSrcMac 00:00:c0:a8:06:08 matchDstMac 00:00:c0:a8:04:08
-155 ps_78_1 00:00:00:00:00:00:04:09 1 00:00:00:00:00:00:06:09 1 matchSrcMac 00:00:c0:a8:04:09 matchDstMac 00:00:c0:a8:06:09
-156 ps_78_2 00:00:00:00:00:00:06:09 1 00:00:00:00:00:00:04:09 1 matchSrcMac 00:00:c0:a8:06:09 matchDstMac 00:00:c0:a8:04:09
-157 ps_79_1 00:00:00:00:00:00:04:0a 1 00:00:00:00:00:00:06:0a 1 matchSrcMac 00:00:c0:a8:04:0a matchDstMac 00:00:c0:a8:06:0a
-158 ps_79_2 00:00:00:00:00:00:06:0a 1 00:00:00:00:00:00:04:0a 1 matchSrcMac 00:00:c0:a8:06:0a matchDstMac 00:00:c0:a8:04:0a
-159 ps_80_1 00:00:00:00:00:00:04:0b 1 00:00:00:00:00:00:06:0b 1 matchSrcMac 00:00:c0:a8:04:0b matchDstMac 00:00:c0:a8:06:0b
-160 ps_80_2 00:00:00:00:00:00:06:0b 1 00:00:00:00:00:00:04:0b 1 matchSrcMac 00:00:c0:a8:06:0b matchDstMac 00:00:c0:a8:04:0b
-161 ps_81_1 00:00:00:00:00:00:04:02 1 00:00:00:00:00:00:08:02 1 matchSrcMac 00:00:c0:a8:04:02 matchDstMac 00:00:c0:a8:08:02
-162 ps_81_2 00:00:00:00:00:00:08:02 1 00:00:00:00:00:00:04:02 1 matchSrcMac 00:00:c0:a8:08:02 matchDstMac 00:00:c0:a8:04:02
-163 ps_82_1 00:00:00:00:00:00:04:03 1 00:00:00:00:00:00:08:03 1 matchSrcMac 00:00:c0:a8:04:03 matchDstMac 00:00:c0:a8:08:03
-164 ps_82_2 00:00:00:00:00:00:08:03 1 00:00:00:00:00:00:04:03 1 matchSrcMac 00:00:c0:a8:08:03 matchDstMac 00:00:c0:a8:04:03
-165 ps_83_1 00:00:00:00:00:00:04:04 1 00:00:00:00:00:00:08:04 1 matchSrcMac 00:00:c0:a8:04:04 matchDstMac 00:00:c0:a8:08:04
-166 ps_83_2 00:00:00:00:00:00:08:04 1 00:00:00:00:00:00:04:04 1 matchSrcMac 00:00:c0:a8:08:04 matchDstMac 00:00:c0:a8:04:04
-167 ps_84_1 00:00:00:00:00:00:04:05 1 00:00:00:00:00:00:08:05 1 matchSrcMac 00:00:c0:a8:04:05 matchDstMac 00:00:c0:a8:08:05
-168 ps_84_2 00:00:00:00:00:00:08:05 1 00:00:00:00:00:00:04:05 1 matchSrcMac 00:00:c0:a8:08:05 matchDstMac 00:00:c0:a8:04:05
-169 ps_85_1 00:00:00:00:00:00:04:06 1 00:00:00:00:00:00:08:06 1 matchSrcMac 00:00:c0:a8:04:06 matchDstMac 00:00:c0:a8:08:06
-170 ps_85_2 00:00:00:00:00:00:08:06 1 00:00:00:00:00:00:04:06 1 matchSrcMac 00:00:c0:a8:08:06 matchDstMac 00:00:c0:a8:04:06
-171 ps_86_1 00:00:00:00:00:00:04:07 1 00:00:00:00:00:00:08:07 1 matchSrcMac 00:00:c0:a8:04:07 matchDstMac 00:00:c0:a8:08:07
-172 ps_86_2 00:00:00:00:00:00:08:07 1 00:00:00:00:00:00:04:07 1 matchSrcMac 00:00:c0:a8:08:07 matchDstMac 00:00:c0:a8:04:07
-173 ps_87_1 00:00:00:00:00:00:04:08 1 00:00:00:00:00:00:08:08 1 matchSrcMac 00:00:c0:a8:04:08 matchDstMac 00:00:c0:a8:08:08
-174 ps_87_2 00:00:00:00:00:00:08:08 1 00:00:00:00:00:00:04:08 1 matchSrcMac 00:00:c0:a8:08:08 matchDstMac 00:00:c0:a8:04:08
-175 ps_88_1 00:00:00:00:00:00:04:09 1 00:00:00:00:00:00:08:09 1 matchSrcMac 00:00:c0:a8:04:09 matchDstMac 00:00:c0:a8:08:09
-176 ps_88_2 00:00:00:00:00:00:08:09 1 00:00:00:00:00:00:04:09 1 matchSrcMac 00:00:c0:a8:08:09 matchDstMac 00:00:c0:a8:04:09
-177 ps_89_1 00:00:00:00:00:00:04:0a 1 00:00:00:00:00:00:08:0a 1 matchSrcMac 00:00:c0:a8:04:0a matchDstMac 00:00:c0:a8:08:0a
-178 ps_89_2 00:00:00:00:00:00:08:0a 1 00:00:00:00:00:00:04:0a 1 matchSrcMac 00:00:c0:a8:08:0a matchDstMac 00:00:c0:a8:04:0a
-179 ps_90_1 00:00:00:00:00:00:04:0b 1 00:00:00:00:00:00:08:0b 1 matchSrcMac 00:00:c0:a8:04:0b matchDstMac 00:00:c0:a8:08:0b
-180 ps_90_2 00:00:00:00:00:00:08:0b 1 00:00:00:00:00:00:04:0b 1 matchSrcMac 00:00:c0:a8:08:0b matchDstMac 00:00:c0:a8:04:0b
-181 ps_91_1 00:00:00:00:00:00:06:02 1 00:00:00:00:00:00:08:02 1 matchSrcMac 00:00:c0:a8:06:02 matchDstMac 00:00:c0:a8:08:02
-182 ps_91_2 00:00:00:00:00:00:08:02 1 00:00:00:00:00:00:06:02 1 matchSrcMac 00:00:c0:a8:08:02 matchDstMac 00:00:c0:a8:06:02
-183 ps_92_1 00:00:00:00:00:00:06:03 1 00:00:00:00:00:00:08:03 1 matchSrcMac 00:00:c0:a8:06:03 matchDstMac 00:00:c0:a8:08:03
-184 ps_92_2 00:00:00:00:00:00:08:03 1 00:00:00:00:00:00:06:03 1 matchSrcMac 00:00:c0:a8:08:03 matchDstMac 00:00:c0:a8:06:03
-185 ps_93_1 00:00:00:00:00:00:06:04 1 00:00:00:00:00:00:08:04 1 matchSrcMac 00:00:c0:a8:06:04 matchDstMac 00:00:c0:a8:08:04
-186 ps_93_2 00:00:00:00:00:00:08:04 1 00:00:00:00:00:00:06:04 1 matchSrcMac 00:00:c0:a8:08:04 matchDstMac 00:00:c0:a8:06:04
-187 ps_94_1 00:00:00:00:00:00:06:05 1 00:00:00:00:00:00:08:05 1 matchSrcMac 00:00:c0:a8:06:05 matchDstMac 00:00:c0:a8:08:05
-188 ps_94_2 00:00:00:00:00:00:08:05 1 00:00:00:00:00:00:06:05 1 matchSrcMac 00:00:c0:a8:08:05 matchDstMac 00:00:c0:a8:06:05
-189 ps_95_1 00:00:00:00:00:00:06:06 1 00:00:00:00:00:00:08:06 1 matchSrcMac 00:00:c0:a8:06:06 matchDstMac 00:00:c0:a8:08:06
-190 ps_95_2 00:00:00:00:00:00:08:06 1 00:00:00:00:00:00:06:06 1 matchSrcMac 00:00:c0:a8:08:06 matchDstMac 00:00:c0:a8:06:06
-191 ps_96_1 00:00:00:00:00:00:06:07 1 00:00:00:00:00:00:08:07 1 matchSrcMac 00:00:c0:a8:06:07 matchDstMac 00:00:c0:a8:08:07
-192 ps_96_2 00:00:00:00:00:00:08:07 1 00:00:00:00:00:00:06:07 1 matchSrcMac 00:00:c0:a8:08:07 matchDstMac 00:00:c0:a8:06:07
-193 ps_97_1 00:00:00:00:00:00:06:08 1 00:00:00:00:00:00:08:08 1 matchSrcMac 00:00:c0:a8:06:08 matchDstMac 00:00:c0:a8:08:08
-194 ps_97_2 00:00:00:00:00:00:08:08 1 00:00:00:00:00:00:06:08 1 matchSrcMac 00:00:c0:a8:08:08 matchDstMac 00:00:c0:a8:06:08
-195 ps_98_1 00:00:00:00:00:00:06:09 1 00:00:00:00:00:00:08:09 1 matchSrcMac 00:00:c0:a8:06:09 matchDstMac 00:00:c0:a8:08:09
-196 ps_98_2 00:00:00:00:00:00:08:09 1 00:00:00:00:00:00:06:09 1 matchSrcMac 00:00:c0:a8:08:09 matchDstMac 00:00:c0:a8:06:09
-197 ps_99_1 00:00:00:00:00:00:06:0a 1 00:00:00:00:00:00:08:0a 1 matchSrcMac 00:00:c0:a8:06:0a matchDstMac 00:00:c0:a8:08:0a
-198 ps_99_2 00:00:00:00:00:00:08:0a 1 00:00:00:00:00:00:06:0a 1 matchSrcMac 00:00:c0:a8:08:0a matchDstMac 00:00:c0:a8:06:0a
-199 ps_100_1 00:00:00:00:00:00:06:0b 1 00:00:00:00:00:00:08:0b 1 matchSrcMac 00:00:c0:a8:06:0b matchDstMac 00:00:c0:a8:08:0b
-200 ps_100_2 00:00:00:00:00:00:08:0b 1 00:00:00:00:00:00:06:0b 1 matchSrcMac 00:00:c0:a8:08:0b matchDstMac 00:00:c0:a8:06:0b
+21 ps_11_1 00:00:00:00:00:00:02:0c 1 00:00:00:00:00:00:03:0c 1 matchSrcMac 00:00:c0:a8:02:0c matchDstMac 00:00:c0:a8:03:0c
+22 ps_11_2 00:00:00:00:00:00:03:0c 1 00:00:00:00:00:00:02:0c 1 matchSrcMac 00:00:c0:a8:03:0c matchDstMac 00:00:c0:a8:02:0c
+23 ps_12_1 00:00:00:00:00:00:02:0d 1 00:00:00:00:00:00:03:0d 1 matchSrcMac 00:00:c0:a8:02:0d matchDstMac 00:00:c0:a8:03:0d
+24 ps_12_2 00:00:00:00:00:00:03:0d 1 00:00:00:00:00:00:02:0d 1 matchSrcMac 00:00:c0:a8:03:0d matchDstMac 00:00:c0:a8:02:0d
+25 ps_13_1 00:00:00:00:00:00:02:0e 1 00:00:00:00:00:00:03:0e 1 matchSrcMac 00:00:c0:a8:02:0e matchDstMac 00:00:c0:a8:03:0e
+26 ps_13_2 00:00:00:00:00:00:03:0e 1 00:00:00:00:00:00:02:0e 1 matchSrcMac 00:00:c0:a8:03:0e matchDstMac 00:00:c0:a8:02:0e
+27 ps_14_1 00:00:00:00:00:00:02:0f 1 00:00:00:00:00:00:03:0f 1 matchSrcMac 00:00:c0:a8:02:0f matchDstMac 00:00:c0:a8:03:0f
+28 ps_14_2 00:00:00:00:00:00:03:0f 1 00:00:00:00:00:00:02:0f 1 matchSrcMac 00:00:c0:a8:03:0f matchDstMac 00:00:c0:a8:02:0f
+29 ps_15_1 00:00:00:00:00:00:02:10 1 00:00:00:00:00:00:03:10 1 matchSrcMac 00:00:c0:a8:02:10 matchDstMac 00:00:c0:a8:03:10
+30 ps_15_2 00:00:00:00:00:00:03:10 1 00:00:00:00:00:00:02:10 1 matchSrcMac 00:00:c0:a8:03:10 matchDstMac 00:00:c0:a8:02:10
+31 ps_16_1 00:00:00:00:00:00:02:11 1 00:00:00:00:00:00:03:11 1 matchSrcMac 00:00:c0:a8:02:11 matchDstMac 00:00:c0:a8:03:11
+32 ps_16_2 00:00:00:00:00:00:03:11 1 00:00:00:00:00:00:02:11 1 matchSrcMac 00:00:c0:a8:03:11 matchDstMac 00:00:c0:a8:02:11
+33 ps_17_1 00:00:00:00:00:00:02:12 1 00:00:00:00:00:00:03:12 1 matchSrcMac 00:00:c0:a8:02:12 matchDstMac 00:00:c0:a8:03:12
+34 ps_17_2 00:00:00:00:00:00:03:12 1 00:00:00:00:00:00:02:12 1 matchSrcMac 00:00:c0:a8:03:12 matchDstMac 00:00:c0:a8:02:12
+35 ps_18_1 00:00:00:00:00:00:02:13 1 00:00:00:00:00:00:03:13 1 matchSrcMac 00:00:c0:a8:02:13 matchDstMac 00:00:c0:a8:03:13
+36 ps_18_2 00:00:00:00:00:00:03:13 1 00:00:00:00:00:00:02:13 1 matchSrcMac 00:00:c0:a8:03:13 matchDstMac 00:00:c0:a8:02:13
+37 ps_19_1 00:00:00:00:00:00:02:14 1 00:00:00:00:00:00:03:14 1 matchSrcMac 00:00:c0:a8:02:14 matchDstMac 00:00:c0:a8:03:14
+38 ps_19_2 00:00:00:00:00:00:03:14 1 00:00:00:00:00:00:02:14 1 matchSrcMac 00:00:c0:a8:03:14 matchDstMac 00:00:c0:a8:02:14
+39 ps_20_1 00:00:00:00:00:00:02:15 1 00:00:00:00:00:00:03:15 1 matchSrcMac 00:00:c0:a8:02:15 matchDstMac 00:00:c0:a8:03:15
+40 ps_20_2 00:00:00:00:00:00:03:15 1 00:00:00:00:00:00:02:15 1 matchSrcMac 00:00:c0:a8:03:15 matchDstMac 00:00:c0:a8:02:15
+41 ps_21_1 00:00:00:00:00:00:02:16 1 00:00:00:00:00:00:03:16 1 matchSrcMac 00:00:c0:a8:02:16 matchDstMac 00:00:c0:a8:03:16
+42 ps_21_2 00:00:00:00:00:00:03:16 1 00:00:00:00:00:00:02:16 1 matchSrcMac 00:00:c0:a8:03:16 matchDstMac 00:00:c0:a8:02:16
+43 ps_22_1 00:00:00:00:00:00:02:17 1 00:00:00:00:00:00:03:17 1 matchSrcMac 00:00:c0:a8:02:17 matchDstMac 00:00:c0:a8:03:17
+44 ps_22_2 00:00:00:00:00:00:03:17 1 00:00:00:00:00:00:02:17 1 matchSrcMac 00:00:c0:a8:03:17 matchDstMac 00:00:c0:a8:02:17
+45 ps_23_1 00:00:00:00:00:00:02:18 1 00:00:00:00:00:00:03:18 1 matchSrcMac 00:00:c0:a8:02:18 matchDstMac 00:00:c0:a8:03:18
+46 ps_23_2 00:00:00:00:00:00:03:18 1 00:00:00:00:00:00:02:18 1 matchSrcMac 00:00:c0:a8:03:18 matchDstMac 00:00:c0:a8:02:18
+47 ps_24_1 00:00:00:00:00:00:02:19 1 00:00:00:00:00:00:03:19 1 matchSrcMac 00:00:c0:a8:02:19 matchDstMac 00:00:c0:a8:03:19
+48 ps_24_2 00:00:00:00:00:00:03:19 1 00:00:00:00:00:00:02:19 1 matchSrcMac 00:00:c0:a8:03:19 matchDstMac 00:00:c0:a8:02:19
+49 ps_25_1 00:00:00:00:00:00:02:02 1 00:00:00:00:00:00:04:02 1 matchSrcMac 00:00:c0:a8:02:02 matchDstMac 00:00:c0:a8:04:02
+50 ps_25_2 00:00:00:00:00:00:04:02 1 00:00:00:00:00:00:02:02 1 matchSrcMac 00:00:c0:a8:04:02 matchDstMac 00:00:c0:a8:02:02
+51 ps_26_1 00:00:00:00:00:00:02:03 1 00:00:00:00:00:00:04:03 1 matchSrcMac 00:00:c0:a8:02:03 matchDstMac 00:00:c0:a8:04:03
+52 ps_26_2 00:00:00:00:00:00:04:03 1 00:00:00:00:00:00:02:03 1 matchSrcMac 00:00:c0:a8:04:03 matchDstMac 00:00:c0:a8:02:03
+53 ps_27_1 00:00:00:00:00:00:02:04 1 00:00:00:00:00:00:04:04 1 matchSrcMac 00:00:c0:a8:02:04 matchDstMac 00:00:c0:a8:04:04
+54 ps_27_2 00:00:00:00:00:00:04:04 1 00:00:00:00:00:00:02:04 1 matchSrcMac 00:00:c0:a8:04:04 matchDstMac 00:00:c0:a8:02:04
+55 ps_28_1 00:00:00:00:00:00:02:05 1 00:00:00:00:00:00:04:05 1 matchSrcMac 00:00:c0:a8:02:05 matchDstMac 00:00:c0:a8:04:05
+56 ps_28_2 00:00:00:00:00:00:04:05 1 00:00:00:00:00:00:02:05 1 matchSrcMac 00:00:c0:a8:04:05 matchDstMac 00:00:c0:a8:02:05
+57 ps_29_1 00:00:00:00:00:00:02:06 1 00:00:00:00:00:00:04:06 1 matchSrcMac 00:00:c0:a8:02:06 matchDstMac 00:00:c0:a8:04:06
+58 ps_29_2 00:00:00:00:00:00:04:06 1 00:00:00:00:00:00:02:06 1 matchSrcMac 00:00:c0:a8:04:06 matchDstMac 00:00:c0:a8:02:06
+59 ps_30_1 00:00:00:00:00:00:02:07 1 00:00:00:00:00:00:04:07 1 matchSrcMac 00:00:c0:a8:02:07 matchDstMac 00:00:c0:a8:04:07
+60 ps_30_2 00:00:00:00:00:00:04:07 1 00:00:00:00:00:00:02:07 1 matchSrcMac 00:00:c0:a8:04:07 matchDstMac 00:00:c0:a8:02:07
+61 ps_31_1 00:00:00:00:00:00:02:08 1 00:00:00:00:00:00:04:08 1 matchSrcMac 00:00:c0:a8:02:08 matchDstMac 00:00:c0:a8:04:08
+62 ps_31_2 00:00:00:00:00:00:04:08 1 00:00:00:00:00:00:02:08 1 matchSrcMac 00:00:c0:a8:04:08 matchDstMac 00:00:c0:a8:02:08
+63 ps_32_1 00:00:00:00:00:00:02:09 1 00:00:00:00:00:00:04:09 1 matchSrcMac 00:00:c0:a8:02:09 matchDstMac 00:00:c0:a8:04:09
+64 ps_32_2 00:00:00:00:00:00:04:09 1 00:00:00:00:00:00:02:09 1 matchSrcMac 00:00:c0:a8:04:09 matchDstMac 00:00:c0:a8:02:09
+65 ps_33_1 00:00:00:00:00:00:02:0a 1 00:00:00:00:00:00:04:0a 1 matchSrcMac 00:00:c0:a8:02:0a matchDstMac 00:00:c0:a8:04:0a
+66 ps_33_2 00:00:00:00:00:00:04:0a 1 00:00:00:00:00:00:02:0a 1 matchSrcMac 00:00:c0:a8:04:0a matchDstMac 00:00:c0:a8:02:0a
+67 ps_34_1 00:00:00:00:00:00:02:0b 1 00:00:00:00:00:00:04:0b 1 matchSrcMac 00:00:c0:a8:02:0b matchDstMac 00:00:c0:a8:04:0b
+68 ps_34_2 00:00:00:00:00:00:04:0b 1 00:00:00:00:00:00:02:0b 1 matchSrcMac 00:00:c0:a8:04:0b matchDstMac 00:00:c0:a8:02:0b
+69 ps_35_1 00:00:00:00:00:00:02:0c 1 00:00:00:00:00:00:04:0c 1 matchSrcMac 00:00:c0:a8:02:0c matchDstMac 00:00:c0:a8:04:0c
+70 ps_35_2 00:00:00:00:00:00:04:0c 1 00:00:00:00:00:00:02:0c 1 matchSrcMac 00:00:c0:a8:04:0c matchDstMac 00:00:c0:a8:02:0c
+71 ps_36_1 00:00:00:00:00:00:02:0d 1 00:00:00:00:00:00:04:0d 1 matchSrcMac 00:00:c0:a8:02:0d matchDstMac 00:00:c0:a8:04:0d
+72 ps_36_2 00:00:00:00:00:00:04:0d 1 00:00:00:00:00:00:02:0d 1 matchSrcMac 00:00:c0:a8:04:0d matchDstMac 00:00:c0:a8:02:0d
+73 ps_37_1 00:00:00:00:00:00:02:0e 1 00:00:00:00:00:00:04:0e 1 matchSrcMac 00:00:c0:a8:02:0e matchDstMac 00:00:c0:a8:04:0e
+74 ps_37_2 00:00:00:00:00:00:04:0e 1 00:00:00:00:00:00:02:0e 1 matchSrcMac 00:00:c0:a8:04:0e matchDstMac 00:00:c0:a8:02:0e
+75 ps_38_1 00:00:00:00:00:00:02:0f 1 00:00:00:00:00:00:04:0f 1 matchSrcMac 00:00:c0:a8:02:0f matchDstMac 00:00:c0:a8:04:0f
+76 ps_38_2 00:00:00:00:00:00:04:0f 1 00:00:00:00:00:00:02:0f 1 matchSrcMac 00:00:c0:a8:04:0f matchDstMac 00:00:c0:a8:02:0f
+77 ps_39_1 00:00:00:00:00:00:02:10 1 00:00:00:00:00:00:04:10 1 matchSrcMac 00:00:c0:a8:02:10 matchDstMac 00:00:c0:a8:04:10
+78 ps_39_2 00:00:00:00:00:00:04:10 1 00:00:00:00:00:00:02:10 1 matchSrcMac 00:00:c0:a8:04:10 matchDstMac 00:00:c0:a8:02:10
+79 ps_40_1 00:00:00:00:00:00:02:11 1 00:00:00:00:00:00:04:11 1 matchSrcMac 00:00:c0:a8:02:11 matchDstMac 00:00:c0:a8:04:11
+80 ps_40_2 00:00:00:00:00:00:04:11 1 00:00:00:00:00:00:02:11 1 matchSrcMac 00:00:c0:a8:04:11 matchDstMac 00:00:c0:a8:02:11
+81 ps_41_1 00:00:00:00:00:00:02:12 1 00:00:00:00:00:00:04:12 1 matchSrcMac 00:00:c0:a8:02:12 matchDstMac 00:00:c0:a8:04:12
+82 ps_41_2 00:00:00:00:00:00:04:12 1 00:00:00:00:00:00:02:12 1 matchSrcMac 00:00:c0:a8:04:12 matchDstMac 00:00:c0:a8:02:12
+83 ps_42_1 00:00:00:00:00:00:02:13 1 00:00:00:00:00:00:04:13 1 matchSrcMac 00:00:c0:a8:02:13 matchDstMac 00:00:c0:a8:04:13
+84 ps_42_2 00:00:00:00:00:00:04:13 1 00:00:00:00:00:00:02:13 1 matchSrcMac 00:00:c0:a8:04:13 matchDstMac 00:00:c0:a8:02:13
+85 ps_43_1 00:00:00:00:00:00:02:14 1 00:00:00:00:00:00:04:14 1 matchSrcMac 00:00:c0:a8:02:14 matchDstMac 00:00:c0:a8:04:14
+86 ps_43_2 00:00:00:00:00:00:04:14 1 00:00:00:00:00:00:02:14 1 matchSrcMac 00:00:c0:a8:04:14 matchDstMac 00:00:c0:a8:02:14
+87 ps_44_1 00:00:00:00:00:00:02:15 1 00:00:00:00:00:00:04:15 1 matchSrcMac 00:00:c0:a8:02:15 matchDstMac 00:00:c0:a8:04:15
+88 ps_44_2 00:00:00:00:00:00:04:15 1 00:00:00:00:00:00:02:15 1 matchSrcMac 00:00:c0:a8:04:15 matchDstMac 00:00:c0:a8:02:15
+89 ps_45_1 00:00:00:00:00:00:02:16 1 00:00:00:00:00:00:04:16 1 matchSrcMac 00:00:c0:a8:02:16 matchDstMac 00:00:c0:a8:04:16
+90 ps_45_2 00:00:00:00:00:00:04:16 1 00:00:00:00:00:00:02:16 1 matchSrcMac 00:00:c0:a8:04:16 matchDstMac 00:00:c0:a8:02:16
+91 ps_46_1 00:00:00:00:00:00:02:17 1 00:00:00:00:00:00:04:17 1 matchSrcMac 00:00:c0:a8:02:17 matchDstMac 00:00:c0:a8:04:17
+92 ps_46_2 00:00:00:00:00:00:04:17 1 00:00:00:00:00:00:02:17 1 matchSrcMac 00:00:c0:a8:04:17 matchDstMac 00:00:c0:a8:02:17
+93 ps_47_1 00:00:00:00:00:00:02:18 1 00:00:00:00:00:00:04:18 1 matchSrcMac 00:00:c0:a8:02:18 matchDstMac 00:00:c0:a8:04:18
+94 ps_47_2 00:00:00:00:00:00:04:18 1 00:00:00:00:00:00:02:18 1 matchSrcMac 00:00:c0:a8:04:18 matchDstMac 00:00:c0:a8:02:18
+95 ps_48_1 00:00:00:00:00:00:02:19 1 00:00:00:00:00:00:04:19 1 matchSrcMac 00:00:c0:a8:02:19 matchDstMac 00:00:c0:a8:04:19
+96 ps_48_2 00:00:00:00:00:00:04:19 1 00:00:00:00:00:00:02:19 1 matchSrcMac 00:00:c0:a8:04:19 matchDstMac 00:00:c0:a8:02:19
+97 ps_49_1 00:00:00:00:00:00:03:02 1 00:00:00:00:00:00:04:02 1 matchSrcMac 00:00:c0:a8:03:02 matchDstMac 00:00:c0:a8:04:02
+98 ps_49_2 00:00:00:00:00:00:04:02 1 00:00:00:00:00:00:03:02 1 matchSrcMac 00:00:c0:a8:04:02 matchDstMac 00:00:c0:a8:03:02
+99 ps_50_1 00:00:00:00:00:00:03:03 1 00:00:00:00:00:00:04:03 1 matchSrcMac 00:00:c0:a8:03:03 matchDstMac 00:00:c0:a8:04:03
+100 ps_50_2 00:00:00:00:00:00:04:03 1 00:00:00:00:00:00:03:03 1 matchSrcMac 00:00:c0:a8:04:03 matchDstMac 00:00:c0:a8:03:03
+101 ps_51_1 00:00:00:00:00:00:03:04 1 00:00:00:00:00:00:04:04 1 matchSrcMac 00:00:c0:a8:03:04 matchDstMac 00:00:c0:a8:04:04
+102 ps_51_2 00:00:00:00:00:00:04:04 1 00:00:00:00:00:00:03:04 1 matchSrcMac 00:00:c0:a8:04:04 matchDstMac 00:00:c0:a8:03:04
+103 ps_52_1 00:00:00:00:00:00:03:05 1 00:00:00:00:00:00:04:05 1 matchSrcMac 00:00:c0:a8:03:05 matchDstMac 00:00:c0:a8:04:05
+104 ps_52_2 00:00:00:00:00:00:04:05 1 00:00:00:00:00:00:03:05 1 matchSrcMac 00:00:c0:a8:04:05 matchDstMac 00:00:c0:a8:03:05
+105 ps_53_1 00:00:00:00:00:00:03:06 1 00:00:00:00:00:00:04:06 1 matchSrcMac 00:00:c0:a8:03:06 matchDstMac 00:00:c0:a8:04:06
+106 ps_53_2 00:00:00:00:00:00:04:06 1 00:00:00:00:00:00:03:06 1 matchSrcMac 00:00:c0:a8:04:06 matchDstMac 00:00:c0:a8:03:06
+107 ps_54_1 00:00:00:00:00:00:03:07 1 00:00:00:00:00:00:04:07 1 matchSrcMac 00:00:c0:a8:03:07 matchDstMac 00:00:c0:a8:04:07
+108 ps_54_2 00:00:00:00:00:00:04:07 1 00:00:00:00:00:00:03:07 1 matchSrcMac 00:00:c0:a8:04:07 matchDstMac 00:00:c0:a8:03:07
+109 ps_55_1 00:00:00:00:00:00:03:08 1 00:00:00:00:00:00:04:08 1 matchSrcMac 00:00:c0:a8:03:08 matchDstMac 00:00:c0:a8:04:08
+110 ps_55_2 00:00:00:00:00:00:04:08 1 00:00:00:00:00:00:03:08 1 matchSrcMac 00:00:c0:a8:04:08 matchDstMac 00:00:c0:a8:03:08
+111 ps_56_1 00:00:00:00:00:00:03:09 1 00:00:00:00:00:00:04:09 1 matchSrcMac 00:00:c0:a8:03:09 matchDstMac 00:00:c0:a8:04:09
+112 ps_56_2 00:00:00:00:00:00:04:09 1 00:00:00:00:00:00:03:09 1 matchSrcMac 00:00:c0:a8:04:09 matchDstMac 00:00:c0:a8:03:09
+113 ps_57_1 00:00:00:00:00:00:03:0a 1 00:00:00:00:00:00:04:0a 1 matchSrcMac 00:00:c0:a8:03:0a matchDstMac 00:00:c0:a8:04:0a
+114 ps_57_2 00:00:00:00:00:00:04:0a 1 00:00:00:00:00:00:03:0a 1 matchSrcMac 00:00:c0:a8:04:0a matchDstMac 00:00:c0:a8:03:0a
+115 ps_58_1 00:00:00:00:00:00:03:0b 1 00:00:00:00:00:00:04:0b 1 matchSrcMac 00:00:c0:a8:03:0b matchDstMac 00:00:c0:a8:04:0b
+116 ps_58_2 00:00:00:00:00:00:04:0b 1 00:00:00:00:00:00:03:0b 1 matchSrcMac 00:00:c0:a8:04:0b matchDstMac 00:00:c0:a8:03:0b
+117 ps_59_1 00:00:00:00:00:00:03:0c 1 00:00:00:00:00:00:04:0c 1 matchSrcMac 00:00:c0:a8:03:0c matchDstMac 00:00:c0:a8:04:0c
+118 ps_59_2 00:00:00:00:00:00:04:0c 1 00:00:00:00:00:00:03:0c 1 matchSrcMac 00:00:c0:a8:04:0c matchDstMac 00:00:c0:a8:03:0c
+119 ps_60_1 00:00:00:00:00:00:03:0d 1 00:00:00:00:00:00:04:0d 1 matchSrcMac 00:00:c0:a8:03:0d matchDstMac 00:00:c0:a8:04:0d
+120 ps_60_2 00:00:00:00:00:00:04:0d 1 00:00:00:00:00:00:03:0d 1 matchSrcMac 00:00:c0:a8:04:0d matchDstMac 00:00:c0:a8:03:0d
+121 ps_61_1 00:00:00:00:00:00:03:0e 1 00:00:00:00:00:00:04:0e 1 matchSrcMac 00:00:c0:a8:03:0e matchDstMac 00:00:c0:a8:04:0e
+122 ps_61_2 00:00:00:00:00:00:04:0e 1 00:00:00:00:00:00:03:0e 1 matchSrcMac 00:00:c0:a8:04:0e matchDstMac 00:00:c0:a8:03:0e
+123 ps_62_1 00:00:00:00:00:00:03:0f 1 00:00:00:00:00:00:04:0f 1 matchSrcMac 00:00:c0:a8:03:0f matchDstMac 00:00:c0:a8:04:0f
+124 ps_62_2 00:00:00:00:00:00:04:0f 1 00:00:00:00:00:00:03:0f 1 matchSrcMac 00:00:c0:a8:04:0f matchDstMac 00:00:c0:a8:03:0f
+125 ps_63_1 00:00:00:00:00:00:03:10 1 00:00:00:00:00:00:04:10 1 matchSrcMac 00:00:c0:a8:03:10 matchDstMac 00:00:c0:a8:04:10
+126 ps_63_2 00:00:00:00:00:00:04:10 1 00:00:00:00:00:00:03:10 1 matchSrcMac 00:00:c0:a8:04:10 matchDstMac 00:00:c0:a8:03:10
+127 ps_64_1 00:00:00:00:00:00:03:11 1 00:00:00:00:00:00:04:11 1 matchSrcMac 00:00:c0:a8:03:11 matchDstMac 00:00:c0:a8:04:11
+128 ps_64_2 00:00:00:00:00:00:04:11 1 00:00:00:00:00:00:03:11 1 matchSrcMac 00:00:c0:a8:04:11 matchDstMac 00:00:c0:a8:03:11
+129 ps_65_1 00:00:00:00:00:00:03:12 1 00:00:00:00:00:00:04:12 1 matchSrcMac 00:00:c0:a8:03:12 matchDstMac 00:00:c0:a8:04:12
+130 ps_65_2 00:00:00:00:00:00:04:12 1 00:00:00:00:00:00:03:12 1 matchSrcMac 00:00:c0:a8:04:12 matchDstMac 00:00:c0:a8:03:12
+131 ps_66_1 00:00:00:00:00:00:03:13 1 00:00:00:00:00:00:04:13 1 matchSrcMac 00:00:c0:a8:03:13 matchDstMac 00:00:c0:a8:04:13
+132 ps_66_2 00:00:00:00:00:00:04:13 1 00:00:00:00:00:00:03:13 1 matchSrcMac 00:00:c0:a8:04:13 matchDstMac 00:00:c0:a8:03:13
+133 ps_67_1 00:00:00:00:00:00:03:14 1 00:00:00:00:00:00:04:14 1 matchSrcMac 00:00:c0:a8:03:14 matchDstMac 00:00:c0:a8:04:14
+134 ps_67_2 00:00:00:00:00:00:04:14 1 00:00:00:00:00:00:03:14 1 matchSrcMac 00:00:c0:a8:04:14 matchDstMac 00:00:c0:a8:03:14
+135 ps_68_1 00:00:00:00:00:00:03:15 1 00:00:00:00:00:00:04:15 1 matchSrcMac 00:00:c0:a8:03:15 matchDstMac 00:00:c0:a8:04:15
+136 ps_68_2 00:00:00:00:00:00:04:15 1 00:00:00:00:00:00:03:15 1 matchSrcMac 00:00:c0:a8:04:15 matchDstMac 00:00:c0:a8:03:15
+137 ps_69_1 00:00:00:00:00:00:03:16 1 00:00:00:00:00:00:04:16 1 matchSrcMac 00:00:c0:a8:03:16 matchDstMac 00:00:c0:a8:04:16
+138 ps_69_2 00:00:00:00:00:00:04:16 1 00:00:00:00:00:00:03:16 1 matchSrcMac 00:00:c0:a8:04:16 matchDstMac 00:00:c0:a8:03:16
+139 ps_70_1 00:00:00:00:00:00:03:17 1 00:00:00:00:00:00:04:17 1 matchSrcMac 00:00:c0:a8:03:17 matchDstMac 00:00:c0:a8:04:17
+140 ps_70_2 00:00:00:00:00:00:04:17 1 00:00:00:00:00:00:03:17 1 matchSrcMac 00:00:c0:a8:04:17 matchDstMac 00:00:c0:a8:03:17
+141 ps_71_1 00:00:00:00:00:00:03:18 1 00:00:00:00:00:00:04:18 1 matchSrcMac 00:00:c0:a8:03:18 matchDstMac 00:00:c0:a8:04:18
+142 ps_71_2 00:00:00:00:00:00:04:18 1 00:00:00:00:00:00:03:18 1 matchSrcMac 00:00:c0:a8:04:18 matchDstMac 00:00:c0:a8:03:18
+143 ps_72_1 00:00:00:00:00:00:03:19 1 00:00:00:00:00:00:04:19 1 matchSrcMac 00:00:c0:a8:03:19 matchDstMac 00:00:c0:a8:04:19
+144 ps_72_2 00:00:00:00:00:00:04:19 1 00:00:00:00:00:00:03:19 1 matchSrcMac 00:00:c0:a8:04:19 matchDstMac 00:00:c0:a8:03:19
diff --git a/web/floodlight/js/controller-status.js b/web/js/controller-status.js
similarity index 100%
rename from web/floodlight/js/controller-status.js
rename to web/js/controller-status.js
diff --git a/web/floodlight/js/jquery-1.7.2.min.js b/web/js/jquery-1.7.2.min.js
similarity index 100%
rename from web/floodlight/js/jquery-1.7.2.min.js
rename to web/js/jquery-1.7.2.min.js
diff --git a/web/floodlight/js/onos-topology-route.js b/web/js/onos-topology-route.js
similarity index 100%
rename from web/floodlight/js/onos-topology-route.js
rename to web/js/onos-topology-route.js
diff --git a/web/floodlight/js/onos-topology.js b/web/js/onos-topology.js
similarity index 100%
rename from web/floodlight/js/onos-topology.js
rename to web/js/onos-topology.js
diff --git a/web/onos-topology.html b/web/onos-topology.html
index d72c0e1..5834521 100644
--- a/web/onos-topology.html
+++ b/web/onos-topology.html
@@ -24,7 +24,7 @@
 <button id="more">more</button>
 <button id="less">less</button>
 --!>
-<svg width="4in" height="2in" 
+<svg width="0.1in" height="0.1in" 
      viewBox="0 0 4000 2000" version="1.1"
      xmlns="http://www.w3.org/2000/svg">
   <defs>