Merge branch 'master' of https://github.com/OPENNETWORKINGLAB/ONOS into develop062001
diff --git a/README.md b/README.md
index b10188e..495a2ed 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,7 @@
$ mvn clean
$ mvn compile
+ NOTE: installing maven for the first time may switch java version from 1.7 to 1.6 causing cassandra to not run
Dependencies
------------
@@ -31,12 +32,14 @@
1. Start zookeeper
- $ cd (ZOOKEEPER-INSTALL-DIR)/bin
-
- $ ./zkServer.sh start
+ $ cd (ONOS-INSTALL-DIR)/
+
+ $ ./start-zk.sh
2. Start cassandra
+ $ cd (ONOS-INSTALL-DIR)/
+
$ ./start-cassandra.sh start
1. Confirm cassandra is running
@@ -58,8 +61,8 @@
1. Start Zookeeper
- $ cd (ZOOKEEPER-INSTALL-DIR)/bin
-
+ $ cd (ONOS-INSTALL-DIR)/
+
$ ./zkServer.sh start
2. Start ONOS and Cassandra embedded
diff --git a/cluster-mgmt/bin/bootup.sh b/cluster-mgmt/bin/bootup.sh
index e58e802..ca86f7e 100755
--- a/cluster-mgmt/bin/bootup.sh
+++ b/cluster-mgmt/bin/bootup.sh
@@ -1,5 +1,5 @@
#! /bin/bash
-. $HOME/bin/func.sh
+. `dirname $0`/func.sh
onos stop
cassandra cleandb
diff --git a/cluster-mgmt/bin/cassandra b/cluster-mgmt/bin/cassandra
index 262c936..b2033ad 100755
--- a/cluster-mgmt/bin/cassandra
+++ b/cluster-mgmt/bin/cassandra
@@ -1,5 +1,5 @@
#! /bin/bash
-. ${HOME}/bin/func.sh
+. `dirname $0`/func.sh
#$0 $1 $2
`basename $0` $1 $2
diff --git a/cluster-mgmt/bin/cmd b/cluster-mgmt/bin/cmd
index 262c936..b2033ad 100755
--- a/cluster-mgmt/bin/cmd
+++ b/cluster-mgmt/bin/cmd
@@ -1,5 +1,5 @@
#! /bin/bash
-. ${HOME}/bin/func.sh
+. `dirname $0`/func.sh
#$0 $1 $2
`basename $0` $1 $2
diff --git a/cluster-mgmt/bin/config.sh b/cluster-mgmt/bin/config.sh
index 5baf2e0..19bfbf2 100755
--- a/cluster-mgmt/bin/config.sh
+++ b/cluster-mgmt/bin/config.sh
@@ -1,6 +1,6 @@
#! /bin/sh
-. ${HOME}/bin/func.sh
+. `dirname $0`/func.sh
basename=$ONOS_CLUSTER_BASENAME
nr_nodes=$ONOS_CLUSTER_NR_NODES
diff --git a/cluster-mgmt/bin/func.sh b/cluster-mgmt/bin/func.sh
index e3a5b68..fe65ab6 100755
--- a/cluster-mgmt/bin/func.sh
+++ b/cluster-mgmt/bin/func.sh
@@ -1,6 +1,7 @@
CASSANDRA_DIR='${HOME}/apache-cassandra-1.1.4'
ZK_DIR='${HOME}/zookeeper-3.4.5'
ONOS_DIR='${HOME}/ONOS'
+
ZK_LIB='/var/lib/zookeeper'
CASSANDRA_LIB='/var/lib/cassandra'
diff --git a/cluster-mgmt/bin/onos b/cluster-mgmt/bin/onos
index 262c936..b2033ad 100755
--- a/cluster-mgmt/bin/onos
+++ b/cluster-mgmt/bin/onos
@@ -1,5 +1,5 @@
#! /bin/bash
-. ${HOME}/bin/func.sh
+. `dirname $0`/func.sh
#$0 $1 $2
`basename $0` $1 $2
diff --git a/onos-embedded.sh b/onos-embedded.sh
index b5cfed6..fe0db44 100755
--- a/onos-embedded.sh
+++ b/onos-embedded.sh
@@ -1,9 +1,9 @@
#!/bin/sh
# Set paths
-FL_HOME=`dirname $0`
-FL_JAR="${FL_HOME}/target/floodlight.jar"
-FL_LOGBACK="${FL_HOME}/logback.xml"
+ONOS_HOME=`dirname $0`
+ONOS_JAR="${ONOS_HOME}/target/floodlight.jar"
+ONOS_LOGBACK="${ONOS_HOME}/logback.xml"
TITAN_CONFIG="/tmp/cassandra.titan"
CASSANDRA_CONFIG="/home/`whoami`/apache-cassandra-1.1.4/conf/cassandra.yaml"
@@ -17,15 +17,15 @@
#JVM_OPTS="$JVM_OPTS -Dpython.security.respectJavaAccessibility=false"
# Set classpath to include titan libs
-#CLASSPATH=`echo ${FL_HOME}/lib/*.jar ${FL_HOME}/lib/titan/*.jar | sed 's/ /:/g'`
-CLASSPATH="${FL_HOME}/lib/*.jar:${FL_HOME}/lib/titan/*.jar"
+#CLASSPATH=`echo ${ONOS_HOME}/lib/*.jar ${ONOS_HOME}/lib/titan/*.jar | sed 's/ /:/g'`
+CLASSPATH="${ONOS_HOME}/lib/*.jar:${ONOS_HOME}/lib/titan/*.jar"
CASSANDRA_OPTS="-Dcom.sun.management.jmxremote.port=7199"
CASSANDRA_OPTS="$CASSANDRA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
CASSANDRA_OPTS="$CASSANDRA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
# Create a logback file if required
-cat <<EOF_LOGBACK >${FL_LOGBACK}
+cat <<EOF_LOGBACK >${ONOS_LOGBACK}
<configuration scan="true" debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
@@ -64,5 +64,5 @@
# Run floodlight
echo "Starting ONOS controller ..."
echo
-#java ${JVM_OPTS} -Dlogback.configurationFile=${FL_LOGBACK} -Xbootclasspath/a:$CLASSPATH -jar ${FL_JAR} -cf ./onos.properties
-java ${JVM_OPTS} ${CASSANDRA_OPTS} -Dlogback.configurationFile=${FL_LOGBACK} -jar ${FL_JAR}
+#java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -Xbootclasspath/a:$CLASSPATH -jar ${ONOS_JAR} -cf ./onos.properties
+java ${JVM_OPTS} ${CASSANDRA_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -jar ${ONOS_JAR}
diff --git a/pom.xml b/pom.xml
index 98d0e61..0a8c37c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
<maven>3.0.4</maven>
</prerequisites>
<groupId>net.onrc.onos</groupId>
- <artifactId>ONOS</artifactId>
+ <artifactId>onos</artifactId>
<version>0.1.0</version>
<packaging>jar</packaging>
<name>ONOS</name>
diff --git a/scripts/runiperf.sh b/scripts/runiperf.sh
index 4e26bd2..6233986 100755
--- a/scripts/runiperf.sh
+++ b/scripts/runiperf.sh
@@ -2,11 +2,17 @@
import sys
import os
+ONOSDIR=os.getenv("HOME") + "/ONOS"
+IPERF=ONOSDIR + "/scripts/iperf"
+IPERFLOGDIR=ONOSDIR + "/web/log"
+
# Usage: flowid src_dpid dst_dpid params
def usage():
print "%s flowid src_dpid dst_dpid hw:svr|sw:svr|hw:client|sw:client <proto>/<duration>/<interval>/<samples>" % sys.argv[0]
sys.exit()
+
+
def main():
flowid = sys.argv[1]
src_dpid = sys.argv[2]
@@ -24,9 +30,16 @@
src_hostid=int(src_dpid.split(':')[-1], 16)
dst_hostid=int(dst_dpid.split(':')[-1], 16)
+ if (testbed == "SW"):
+ MRUN=ONOSDIR + "/test-network/mininet/mrun"
+ HOST_FMT="host%d.%d"
+ else:
+ MRUN=ONOSDIR + "$HOME/mininet/util/m"
+ HOST_FMT="g%sh%02d"
+
if (proto == "tcp"):
- if (testbed == "SW"):
- cmd="ssh -o StrictHostKeyChecking=no 1.1.%d.1 '/home/ubuntu/ONOS/scripts/iperf -t%s -i%s -k%s -yJ -o /home/ubuntu/ONOS/web/log/iperf_%s.out -c 192.168.%d.%d 2>&1 &' &" % (src_hostid, duration, interval, samples, flowid, dst_nwid, dst_hostid)
+ mininet_host = HOST_FMT % (dst_nwid, dst_hostid)
+ cmd="%s %s \'%s -t%s -i%s -k%s -yJ -o %s/iperf_%s.out -c 192.168.%d.%d 2>&1 &\' &" % (MRUN, mininet_host, IPERF, src_hostid, duration, interval, samples, IPERFLOGDIR, flowid, dst_nwid, dst_hostid)
killcmd='sudo pkill -KILL -f \"iperf .* -o .*/iperf_%s.out\"' % (flowid)
print killcmd
print cmd
@@ -34,21 +47,18 @@
os.popen(cmd)
else:
if (server == 'S'):
- if (testbed == "SW"):
- cmd="ssh -o StrictHostKeyChecking=no 1.1.%d.1 '/home/ubuntu/ONOS/scripts/iperf -us -i%s -k%s -yJ -o /home/ubuntu/ONOS/web/log/iperfsvr_%s.out 2>&1 &' &" % (dst_hostid, interval, samples, flowid)
- else:
- cmd="~/mininet/util/m g%sh%02d '/home/ubuntu/ONOS/scripts/iperf -us -i%s -k%s -yJ -o /home/ubuntu/ONOS/web/log/iperfsvr_%s.out 2>&1 &' &" % (dst_nwid, dst_hostid, interval, samples, flowid)
+ mininet_host = HOST_FMT % (dst_nwid, dst_hostid)
+ cmd="%s %s \'%s -us -i%s -k%s -yJ -o %s/iperfsvr_%s.out 2>&1 &\' &" % (MRUN, mininet_host, IPERF, interval, samples, IPERFLOGDIR, flowid)
killcmd='sudo pkill -KILL -f \"iperf .* -o .*/iperfsvr_%s.out\"' % (flowid)
print killcmd
print cmd
else:
- if (testbed == "SW"):
- cmd="ssh -o StrictHostKeyChecking=no 1.1.%d.1 '/home/ubuntu/ONOS/scripts/iperf -u -t%s -i%s -k%s -yJ -o /home/ubuntu/ONOS/web/log/iperfclient_%s.out -c 192.168.%d.%d 2>&1 &' &" % (src_hostid, duration, interval, samples, flowid, dst_nwid, dst_hostid)
- else:
- cmd="~/mininet/util/m g%sh%02d '/home/ubuntu/ONOS/scripts/iperf -u -t%s -i%s -k%s -yJ -o /home/ubuntu/ONOS/web/log/iperfclient_%s.out -c 192.168.%d.%d 2>&1 &' &" % (src_nwid, src_hostid, duration, interval, samples, flowid, dst_nwid, dst_hostid )
+ mininet_host = HOST_FMT % (src_nwid, src_hostid)
+ cmd="%s %s \'%s -u -t%s -i%s -k%s -yJ -o %s/iperfclient_%s.out -c 192.168.%d.%d 2>&1 &\' &" % (MRUN, mininet_host, IPERF, duration, interval, samples, IPERFLOGDIR, flowid, dst_nwid, dst_hostid)
killcmd='sudo pkill -KILL -f \"iperf .* -o .*/iperfclient_%s.out\"' % (flowid)
print killcmd
print cmd
+
os.popen(killcmd)
os.popen(cmd)
diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
index 0eca19c..467c74a 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
@@ -402,7 +402,7 @@
*/
@Override
public String toString() {
- return "OFSwitchImpl [" + channel.getRemoteAddress() + " DPID[" + ((stringId != null) ? stringId : "?") + "]]";
+ return "OFSwitchImpl [" + ((channel != null) ? channel.getRemoteAddress() : "?") + " DPID[" + ((stringId != null) ? stringId : "?") + "]]";
}
@Override
diff --git a/src/main/java/net/onrc/onos/flow/FlowManagerImpl.java b/src/main/java/net/onrc/onos/flow/FlowManagerImpl.java
index 9e69115..1f041e6 100644
--- a/src/main/java/net/onrc/onos/flow/FlowManagerImpl.java
+++ b/src/main/java/net/onrc/onos/flow/FlowManagerImpl.java
@@ -18,6 +18,8 @@
import com.tinkerpop.blueprints.Vertex;
import net.floodlightcontroller.core.IOFSwitch;
+import net.onrc.onos.graph.GraphDBOperation;
+import net.onrc.onos.graph.LocalTopologyEventListener;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowPath;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
@@ -30,8 +32,6 @@
import net.onrc.onos.ofcontroller.util.FlowPath;
import net.onrc.onos.ofcontroller.util.Port;
import net.onrc.onos.ofcontroller.util.SwitchPort;
-import net.onrc.onos.util.GraphDBOperation;
-import net.onrc.onos.util.LocalTopologyEventListener;
public class FlowManagerImpl implements IFlowManager {
diff --git a/src/main/java/net/onrc/onos/util/GraphDBConnection.java b/src/main/java/net/onrc/onos/graph/GraphDBConnection.java
similarity index 94%
rename from src/main/java/net/onrc/onos/util/GraphDBConnection.java
rename to src/main/java/net/onrc/onos/graph/GraphDBConnection.java
index 1cc4e5a..f9f3b67 100644
--- a/src/main/java/net/onrc/onos/util/GraphDBConnection.java
+++ b/src/main/java/net/onrc/onos/graph/GraphDBConnection.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.util;
+package net.onrc.onos.graph;
import java.util.Set;
@@ -63,11 +63,14 @@
if (!s.contains("dpid")) {
graph.createKeyIndex("dpid", Vertex.class);
}
+ if (!s.contains("port_id")) {
+ graph.createKeyIndex("port_id", Vertex.class);
+ }
if (!s.contains("type")) {
graph.createKeyIndex("type", Vertex.class);
}
- if (!s.contains("dl_address")) {
- graph.createKeyIndex("dl_address", Vertex.class);
+ if (!s.contains("dl_addr")) {
+ graph.createKeyIndex("dl_addr", Vertex.class);
}
if (!s.contains("flow_id")) {
graph.createKeyIndex("flow_id", Vertex.class);
diff --git a/src/main/java/net/onrc/onos/util/GraphDBOperation.java b/src/main/java/net/onrc/onos/graph/GraphDBOperation.java
similarity index 91%
rename from src/main/java/net/onrc/onos/util/GraphDBOperation.java
rename to src/main/java/net/onrc/onos/graph/GraphDBOperation.java
index 92157fb..acfe43b 100644
--- a/src/main/java/net/onrc/onos/util/GraphDBOperation.java
+++ b/src/main/java/net/onrc/onos/graph/GraphDBOperation.java
@@ -1,8 +1,10 @@
-package net.onrc.onos.util;
+package net.onrc.onos.graph;
import java.util.ArrayList;
import java.util.List;
+import org.openflow.protocol.OFPhysicalPort;
+
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowPath;
@@ -12,6 +14,7 @@
import net.onrc.onos.ofcontroller.util.FlowEntryId;
import net.onrc.onos.ofcontroller.util.FlowId;
+import com.google.common.base.Stopwatch;
import com.thinkaurelius.titan.core.TitanGraph;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.frames.FramedGraph;
@@ -56,7 +59,7 @@
* @param dpid DPID of the switch
*/
public ISwitchObject searchSwitch(String dpid) {
- // TODO Auto-generated method stub
+
FramedGraph<TitanGraph> fg = conn.getFramedGraph();
return (fg != null && fg.getVertices("dpid",dpid).iterator().hasNext()) ?
@@ -136,11 +139,26 @@
FramedGraph<TitanGraph> fg = conn.getFramedGraph();
fg.removeVertex(sw.asVertex());
}
+
+ @Override
+ public IPortObject newPort(String dpid, Short portNumber) {
+ FramedGraph<TitanGraph> fg = conn.getFramedGraph();
+ IPortObject obj = fg.addVertex(null,IPortObject.class);
+ if (obj != null) {
+ obj.setType("port");
+ String id = dpid + portNumber.toString();
+ obj.setPortId(id);
+ obj.setNumber(portNumber);
+ }
+ return obj;
+
+ }
/**
* Create a port having specified port number.
* @param portNumber port number
*/
+ @Deprecated
public IPortObject newPort(Short portNumber) {
FramedGraph<TitanGraph> fg = conn.getFramedGraph();
IPortObject obj = fg.addVertex(null,IPortObject.class);
@@ -156,32 +174,11 @@
* @param dpid DPID of a switch
* @param number port number of the switch's port
*/
- public IPortObject searchPort(String dpid, short number) {
- ISwitchObject sw = searchSwitch(dpid);
- if (sw != null) {
-
- IPortObject port = null;
-
- // Requires Frames 2.3.0
-
- try {
- port = sw.getPort(number);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- return port;
- }
-
- // if (sw != null) {
- // GremlinPipeline<Vertex, IPortObject> pipe = new GremlinPipeline<Vertex, IPortObject>();
- // pipe.start(sw.asVertex());
- // pipe.out("on").has("number", number);
- // FramedVertexIterable<IPortObject> r = new FramedVertexIterable<IPortObject>(conn.getFramedGraph(), (Iterable) pipe, IPortObject.class);
- // return r != null && r.iterator().hasNext() ? r.iterator().next() : null;
- // }
- return null;
+ public IPortObject searchPort(String dpid, Short number) {
+ FramedGraph<TitanGraph> fg = conn.getFramedGraph();
+ String id = dpid + number.toString();
+ return (fg != null && fg.getVertices("port_id",id).iterator().hasNext()) ?
+ fg.getVertices("port_id",id,IPortObject.class).iterator().next() : null;
}
/**
@@ -359,4 +356,6 @@
public void close() {
conn.close();
}
+
+
}
diff --git a/src/main/java/net/onrc/onos/util/IDBConnection.java b/src/main/java/net/onrc/onos/graph/IDBConnection.java
similarity index 92%
rename from src/main/java/net/onrc/onos/util/IDBConnection.java
rename to src/main/java/net/onrc/onos/graph/IDBConnection.java
index 995ce39..82ebba2 100644
--- a/src/main/java/net/onrc/onos/util/IDBConnection.java
+++ b/src/main/java/net/onrc/onos/graph/IDBConnection.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.util;
+package net.onrc.onos.graph;
import com.thinkaurelius.titan.core.TitanGraph;
import com.tinkerpop.frames.FramedGraph;
diff --git a/src/main/java/net/onrc/onos/util/IDBOperation.java b/src/main/java/net/onrc/onos/graph/IDBOperation.java
similarity index 91%
rename from src/main/java/net/onrc/onos/util/IDBOperation.java
rename to src/main/java/net/onrc/onos/graph/IDBOperation.java
index 335b08b..f873f27 100644
--- a/src/main/java/net/onrc/onos/util/IDBOperation.java
+++ b/src/main/java/net/onrc/onos/graph/IDBOperation.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.util;
+package net.onrc.onos.graph;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
@@ -18,8 +18,10 @@
public Iterable<IFlowEntry> getAllSwitchNotUpdatedFlowEntries();
public void removeSwitch(ISwitchObject sw);
+ @Deprecated
public IPortObject newPort(Short portNumber);
- public IPortObject searchPort(String dpid, short number);
+ public IPortObject newPort(String dpid, Short portNum);
+ public IPortObject searchPort(String dpid, Short number);
public void removePort(IPortObject port);
public IDeviceObject newDevice();
@@ -42,4 +44,5 @@
public void commit();
public void rollback();
public void close();
+
}
diff --git a/src/main/java/net/onrc/onos/util/LocalGraphChangedListener.java b/src/main/java/net/onrc/onos/graph/LocalGraphChangedListener.java
similarity index 84%
rename from src/main/java/net/onrc/onos/util/LocalGraphChangedListener.java
rename to src/main/java/net/onrc/onos/graph/LocalGraphChangedListener.java
index ac819f9..5f3bbf1 100644
--- a/src/main/java/net/onrc/onos/util/LocalGraphChangedListener.java
+++ b/src/main/java/net/onrc/onos/graph/LocalGraphChangedListener.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.util;
+package net.onrc.onos.graph;
import com.tinkerpop.blueprints.util.wrappers.event.listener.GraphChangedListener;
diff --git a/src/main/java/net/onrc/onos/util/LocalTopologyEventListener.java b/src/main/java/net/onrc/onos/graph/LocalTopologyEventListener.java
similarity index 98%
rename from src/main/java/net/onrc/onos/util/LocalTopologyEventListener.java
rename to src/main/java/net/onrc/onos/graph/LocalTopologyEventListener.java
index dd3c2ec..f83e7c2 100644
--- a/src/main/java/net/onrc/onos/util/LocalTopologyEventListener.java
+++ b/src/main/java/net/onrc/onos/graph/LocalTopologyEventListener.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.util;
+package net.onrc.onos.graph;
import net.onrc.onos.flow.FlowManagerImpl;
import net.onrc.onos.flow.IFlowManager;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyObjects.java b/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyObjects.java
index fc1c32f..d08da7c 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyObjects.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyObjects.java
@@ -73,6 +73,14 @@
@Property("number")
public Short getNumber();
+ @JsonIgnore
+ @Property("port_id")
+ public void setPortId(String id);
+
+ @JsonIgnore
+ @Property("port_id")
+ public String getPortId();
+
@Property("number")
public void setNumber(Short n);
diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/ISwitchStorage.java b/src/main/java/net/onrc/onos/ofcontroller/core/ISwitchStorage.java
index 79a4f76..a4dd528 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/ISwitchStorage.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/ISwitchStorage.java
@@ -3,6 +3,8 @@
import java.util.Collection;
+import net.floodlightcontroller.core.IOFSwitch;
+
import org.openflow.protocol.OFPhysicalPort;
public interface ISwitchStorage extends INetMapStorage {
@@ -21,7 +23,11 @@
*/
public void addPort(String dpid, OFPhysicalPort port);
/*
- * Get all ports associated on a switch
+ * Add a switch and all its associated ports
+ */
+ public void addSwitch(IOFSwitch sw);
+ /*
+ * Add a switch
*/
public void addSwitch(String dpid);
/*
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 dcb28ce..386c1bd 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
@@ -11,11 +11,11 @@
import net.floodlightcontroller.devicemanager.IDevice;
import net.floodlightcontroller.devicemanager.SwitchPort;
import net.floodlightcontroller.packet.IPv4;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.IDeviceStorage;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
import net.onrc.onos.ofcontroller.core.internal.SwitchStorageImpl;
-import net.onrc.onos.util.GraphDBOperation;
/**
* This is the class for storing the information of devices into CassandraDB
@@ -50,7 +50,7 @@
/***
* Finalize/close function. After you use this class, please call this method.
- * It will close the DB connection. This is for Java gabage collection.
+ * It will close the DB connection. This is for Java garbage collection.
*/
@Override
public void finalize() {
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 b33591e..50783c9 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
@@ -4,11 +4,11 @@
import java.util.List;
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.IPortObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
import net.onrc.onos.ofcontroller.linkdiscovery.LinkInfo;
-import net.onrc.onos.util.GraphDBOperation;
import org.openflow.util.HexString;
import org.slf4j.Logger;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImpl.java b/src/main/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImpl.java
index b12ccfa..03a5e8e 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImpl.java
@@ -1,10 +1,11 @@
package net.onrc.onos.ofcontroller.core.internal;
+import net.floodlightcontroller.core.IOFSwitch;
+import net.onrc.onos.graph.GraphDBConnection;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.ISwitchStorage;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
-import net.onrc.onos.util.GraphDBConnection;
-import net.onrc.onos.util.GraphDBOperation;
import org.openflow.protocol.OFPhysicalPort;
import org.openflow.protocol.OFPhysicalPort.OFPortConfig;
@@ -39,7 +40,7 @@
/***
* Finalize/close function. After you use this class, please call this method.
- * It will close the DB connection. This is for Java gabage collection.
+ * It will close the DB connection. This is for Java garbage collection.
*/
@Override
public void close() {
@@ -71,23 +72,8 @@
log.info("SwitchStorage:addSwitch(): dpid {} ", dpid);
try {
- ISwitchObject sw = op.searchSwitch(dpid);
- if (sw != null) {
- //If existing the switch. set The SW state ACTIVE.
- log.info("SwitchStorage:addSwitch dpid:{} already exists", dpid);
- sw.setState(SwitchState.ACTIVE.toString());
- op.commit();
- } else {
- sw = op.newSwitch(dpid);
-
- if (sw != null) {
- sw.setState(SwitchState.ACTIVE.toString());
- op.commit();
- log.info("SwitchStorage:addSwitch dpid:{} added", dpid);
- } else {
- log.error("switchStorage:addSwitch dpid:{} failed -> newSwitch failed", dpid);
- }
- }
+ newSwitch(dpid);
+ op.commit();
} catch (Exception e) {
e.printStackTrace();
op.rollback();
@@ -95,6 +81,24 @@
}
}
+ private ISwitchObject newSwitch(String dpid) {
+ ISwitchObject sw = op.searchSwitch(dpid);
+ if (sw != null) {
+ //If existing the switch. set The SW state ACTIVE.
+ log.info("SwitchStorage:newSwitch dpid:{} already exists", dpid);
+ sw.setState(SwitchState.ACTIVE.toString());
+ } else {
+ sw = op.newSwitch(dpid);
+ if (sw != null) {
+ sw.setState(SwitchState.ACTIVE.toString());
+ log.info("SwitchStorage:newSwitch dpid:{} added", dpid);
+ } else {
+ log.error("switchStorage:newSwitch dpid:{} failed -> newSwitch failed", dpid);
+ }
+ }
+ return sw;
+ }
+
/***
* This function is for updating the switch into the DB.
* @param dpid The switch dpid you want to update from the DB
@@ -164,7 +168,7 @@
if (p != null) {
log.error("SwitchStorage:addPort dpid:{} port:{} exists", dpid, port.getPortNumber());
} else {
- p = op.newPort(port.getPortNumber());
+ p = op.newPort(dpid, port.getPortNumber());
p.setState("ACTIVE");
p.setPortState(port.getState());
p.setDesc(port.getName());
@@ -207,4 +211,32 @@
log.info("SwitchStorage:deletePort dpid:{} port:{} failed", dpid, port);
}
}
+
+ @Override
+ public void addSwitch(IOFSwitch sw) {
+ // TODO Auto-generated method stub
+ String dpid = sw.getStringId();
+ log.info("SwitchStorage:addSwitch(): dpid {} ", dpid);
+ try {
+ ISwitchObject switchObject = newSwitch(dpid);
+ for (OFPhysicalPort port: sw.getPorts()) {
+ IPortObject p = op.searchPort(dpid, port.getPortNumber());
+ if (p != null) {
+ log.error("SwitchStorage:addPort dpid:{} port:{} exists", dpid, port.getPortNumber());
+ } else {
+ p = op.newPort(dpid, port.getPortNumber());
+ p.setState("ACTIVE");
+ p.setPortState(port.getState());
+ p.setDesc(port.getName());
+ switchObject.addPort(p);
+ }
+ }
+ op.commit();
+ } catch (Exception e) {
+ e.printStackTrace();
+ op.rollback();
+ log.info("SwitchStorage:addSwitch dpid:{} failed", dpid);
+ }
+
+ }
}
\ No newline at end of file
diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/internal/TopoLinkServiceImpl.java b/src/main/java/net/onrc/onos/ofcontroller/core/internal/TopoLinkServiceImpl.java
index 1222ff3..e810646 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/internal/TopoLinkServiceImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/internal/TopoLinkServiceImpl.java
@@ -4,10 +4,10 @@
import java.util.List;
import net.floodlightcontroller.routing.Link;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoLinkService;
import net.onrc.onos.ofcontroller.core.internal.LinkStorageImpl.ExtractLink;
-import net.onrc.onos.util.GraphDBOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/internal/TopoSwitchServiceImpl.java b/src/main/java/net/onrc/onos/ofcontroller/core/internal/TopoSwitchServiceImpl.java
index c1659fb..978fcde 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/internal/TopoSwitchServiceImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/internal/TopoSwitchServiceImpl.java
@@ -1,9 +1,9 @@
package net.onrc.onos.ofcontroller.core.internal;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoSwitchService;
-import net.onrc.onos.util.GraphDBOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/devicemanager/web/TopoDevicesResource.java b/src/main/java/net/onrc/onos/ofcontroller/devicemanager/web/TopoDevicesResource.java
index 97ecfcc..ac9409f 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/devicemanager/web/TopoDevicesResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/devicemanager/web/TopoDevicesResource.java
@@ -2,8 +2,8 @@
import java.util.Iterator;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
-import net.onrc.onos.util.GraphDBOperation;
import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;
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 bb7318f..8c83a7c 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java
@@ -24,6 +24,10 @@
import net.floodlightcontroller.devicemanager.IDeviceService;
import net.floodlightcontroller.routing.Link;
import net.floodlightcontroller.threadpool.IThreadPoolService;
+import net.onrc.onos.graph.GraphDBConnection;
+import net.onrc.onos.graph.GraphDBOperation;
+import net.onrc.onos.graph.IDBConnection;
+import net.onrc.onos.graph.LocalTopologyEventListener;
import net.onrc.onos.ofcontroller.core.IDeviceStorage;
import net.onrc.onos.ofcontroller.core.ILinkStorage;
import net.onrc.onos.ofcontroller.core.IOFSwitchPortListener;
@@ -39,10 +43,6 @@
import net.onrc.onos.registry.controller.IControllerRegistryService;
import net.onrc.onos.registry.controller.IControllerRegistryService.ControlChangeCallback;
import net.onrc.onos.registry.controller.RegistryException;
-import net.onrc.onos.util.GraphDBConnection;
-import net.onrc.onos.util.GraphDBOperation;
-import net.onrc.onos.util.IDBConnection;
-import net.onrc.onos.util.LocalTopologyEventListener;
public class NetworkGraphPublisher implements IDeviceListener, IOFSwitchListener, IOFSwitchPortListener,
ILinkDiscoveryListener, IFloodlightModule {
@@ -153,10 +153,7 @@
public void addedSwitch(IOFSwitch sw) {
if (registryService.hasControl(sw.getId())) {
- swStore.update(sw.getStringId(), SwitchState.ACTIVE, DM_OPERATION.UPDATE);
- for (OFPhysicalPort port: sw.getPorts()) {
- swStore.addPort(sw.getStringId(), port);
- }
+ swStore.addSwitch(sw);
}
}
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 2dc230c..2e0d837 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
@@ -27,6 +27,7 @@
import net.floodlightcontroller.restserver.IRestApiService;
import net.floodlightcontroller.util.MACAddress;
import net.floodlightcontroller.util.OFMessageDamper;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.INetMapStorage;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowPath;
@@ -49,7 +50,6 @@
import net.onrc.onos.ofcontroller.util.IPv4Net;
import net.onrc.onos.ofcontroller.util.Port;
import net.onrc.onos.ofcontroller.util.SwitchPort;
-import net.onrc.onos.util.GraphDBOperation;
import org.openflow.protocol.OFFlowMod;
import org.openflow.protocol.OFMatch;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/routing/TopoRouteService.java b/src/main/java/net/onrc/onos/ofcontroller/routing/TopoRouteService.java
index 1671412..432e578 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/routing/TopoRouteService.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/routing/TopoRouteService.java
@@ -15,6 +15,7 @@
import net.floodlightcontroller.core.module.FloodlightModuleException;
import net.floodlightcontroller.core.module.IFloodlightModule;
import net.floodlightcontroller.core.module.IFloodlightService;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoRouteService;
import net.onrc.onos.ofcontroller.core.ISwitchStorage.SwitchState;
@@ -23,7 +24,6 @@
import net.onrc.onos.ofcontroller.util.FlowEntry;
import net.onrc.onos.ofcontroller.util.Port;
import net.onrc.onos.ofcontroller.util.SwitchPort;
-import net.onrc.onos.util.GraphDBOperation;
import org.openflow.util.HexString;
import org.slf4j.Logger;
diff --git a/src/test/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImplTest.java b/src/test/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImplTest.java
index 7bf2b1a..5c42452 100644
--- a/src/test/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImplTest.java
+++ b/src/test/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImplTest.java
@@ -5,17 +5,21 @@
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import net.floodlightcontroller.routing.Link;
+import net.onrc.onos.graph.GraphDBConnection;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.ILinkStorage;
import net.onrc.onos.ofcontroller.core.INetMapStorage.DM_OPERATION;
-import net.onrc.onos.ofcontroller.core.internal.TestableGraphDBOperation.TestPortObject;
-import net.onrc.onos.util.GraphDBConnection;
-import net.onrc.onos.util.GraphDBOperation;
+import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
+import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
import net.onrc.onos.ofcontroller.linkdiscovery.LinkInfo;
-import org.easymock.EasyMock;
+import org.easymock.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
@@ -40,7 +44,54 @@
private static GraphDBConnection conn;
// Mock GraphDBOperation (mocks port-related methods only)
- private static TestableGraphDBOperation ope;
+ private static GraphDBOperation ope;
+
+ // Uncommitted actions executed in LinkStorageImpl
+ private static ArrayList<LinkEvent> actions;
+
+ // Dictionary of mock IPortObject to information of port
+ // -> Used to refer DPID from IPortObject
+ private static Map<IPortObject,PortInfo> mockToPortInfoMap;
+
+
+ // Links existing in virtual graph
+ private List<Link> links;
+
+ //================ Utility classes for logging actions in LinkStorageImpl ===========
+ private enum LinkEventType {
+ ADD, DELETE
+ }
+
+ private class LinkEvent {
+ private Long src_dpid = null;
+ private Long dst_dpid = null;
+ private Short src_port = null;
+ private Short dst_port = null;
+
+ public LinkEventType type;
+
+ public LinkEvent(Link link, LinkEventType type) {
+ this.src_dpid = link.getSrc();
+ this.src_port = link.getSrcPort();
+ this.dst_dpid = link.getDst();
+ this.dst_port = link.getDstPort();
+
+ this.type = type;
+ }
+
+ public Long getSrcDpid() { return src_dpid; }
+ public Short getSrcPort() { return src_port; }
+ public Long getDstDpid() { return dst_dpid; }
+ public Short getDstPort() { return dst_port; }
+ public LinkEventType getType() { return type; }
+ }
+
+ private class PortInfo {
+ public Long dpid = null;
+ public Short port = null;
+
+ public PortInfo(Long dpid, Short port) { this.dpid = dpid; this.port = port; }
+ }
/**
* Setup code called before each tests.
@@ -55,10 +106,13 @@
EasyMock.expect(GraphDBConnection.getInstance((String)EasyMock.anyObject())).andReturn(conn).anyTimes();
PowerMock.replay(GraphDBConnection.class);
- ope = new TestableGraphDBOperation();
- PowerMock.expectNew(GraphDBOperation.class, (GraphDBConnection)EasyMock.anyObject()).andReturn(ope).anyTimes();
+ ope = createMockGraphDBOperation();
+ PowerMock.expectNew(GraphDBOperation.class, new Class<?>[] {GraphDBConnection.class}, EasyMock.anyObject(GraphDBConnection.class)).andReturn(ope).anyTimes();
PowerMock.replay(GraphDBOperation.class);
-
+
+ actions = new ArrayList<LinkEvent>();
+ mockToPortInfoMap = new HashMap<IPortObject,PortInfo>();
+
linkStorage = new LinkStorageImpl();
linkStorage.init("/dummy/path/to/conf");
@@ -74,7 +128,6 @@
public void tearDown() throws Exception {
// finish code
linkStorage.close();
- ope.close();
}
// TODO: remove @Ignore after UPDATE method is implemented
@@ -104,6 +157,14 @@
//Use the link storage API to add the link
linkStorage.update(linkToCreate, ILinkStorage.DM_OPERATION.CREATE);
doTestLinkExist(linkToVerify);
+
+ // Avoiding duplication is out of scope. DBOperation is responsible for this.
+// // Add same link
+// Link linkToCreateTwice = createFeasibleLink();
+// linkStorage.update(linkToCreateTwice, ILinkStorage.DM_OPERATION.CREATE);
+//
+// // this occurs assertion failure if there are two links in titanGraph
+// doTestLinkIsInGraph(linkToVerify);
}
/**
@@ -145,6 +206,14 @@
for(Link l : linksToVerify) {
doTestLinkExist(l);
}
+
+ // Out of scope: DBOperation is responsible for avoiding duplication.
+// // Test creation of existing links
+// linksToCreate = createFeasibleLinks();
+// linkStorage.update(linksToCreate, ILinkStorage.DM_OPERATION.CREATE);
+// for(Link l : linksToVerify) {
+// doTestLinkIsInGraph(l);
+// }
}
/**
@@ -298,7 +367,7 @@
List<Link> list = linkStorage.getLinks(dpid, port);
- assertEquals(list.size(), 1);
+ assertEquals(1, list.size());
Link l = list.get(0);
assertEquals(l.getSrc(), linkToVerify.getSrc());
@@ -310,7 +379,7 @@
List<Link> list2 = linkStorage.getLinks(linkToVerifyNot.getSrc(), (short)linkToVerifyNot.getSrcPort());
- assertEquals(list2.size(), 0);
+ assertEquals(0, list2.size());
}
/**
@@ -398,25 +467,26 @@
}
/**
- * Test if specific link is existing
+ * Test if specific link exists
* @param link
*/
private void doTestLinkExist(Link link) {
- assertTrue(ope.hasLinkBetween(HexString.toHexString(link.getSrc()),
- link.getSrcPort(),
- HexString.toHexString(link.getDst()),
- link.getDstPort()));
+ int count = 0;
+ for(Link lt : links) {
+ if(lt.equals(link)) {
+ ++count;
+ }
+ }
+
+ assertTrue(count == 1);
}
/**
- * Test if titanGraph doesn't have specific link
+ * Test if specific link doesn't exist
* @param link
*/
private void doTestLinkNotExist(Link link) {
- assertFalse(ope.hasLinkBetween(HexString.toHexString(link.getSrc()),
- link.getSrcPort(),
- HexString.toHexString(link.getDst()),
- link.getDstPort()));
+ assertFalse(links.contains(link));
}
/**
@@ -426,6 +496,252 @@
private void doTestLinkHasStateOf(Link link, LinkInfo info) {
}
+ /**
+ * Class defines a function called back when IPortObject#removeLink is called.
+ * @author Naoki Shiota
+ *
+ */
+ private class RemoveLinkCallback implements IAnswer<Object> {
+ private long dpid;
+ private short port;
+ public RemoveLinkCallback(long dpid, short port) {
+ this.dpid = dpid; this.port = port;
+ }
+
+ @Override
+ public Object answer() throws Throwable {
+ IPortObject dstPort = (IPortObject) EasyMock.getCurrentArguments()[0];
+ PortInfo dst = mockToPortInfoMap.get(dstPort);
+
+ Link linkToRemove = new Link(this.dpid,this.port,dst.dpid,dst.port);
+ actions.add(new LinkEvent(linkToRemove,LinkEventType.DELETE));
+
+ return null;
+ }
+ }
+
+ /**
+ * Class defines a function called back when IPortObject#setLinkPort is called.
+ * @author Naoki Shiota
+ *
+ */
+ private class SetLinkPortCallback implements IAnswer<Object> {
+ private long dpid;
+ private short port;
+ public SetLinkPortCallback(long dpid, short port) {
+ this.dpid = dpid; this.port = port;
+ }
+
+ @Override
+ public Object answer() throws Throwable {
+ IPortObject dstPort = (IPortObject) EasyMock.getCurrentArguments()[0];
+ PortInfo dst = mockToPortInfoMap.get(dstPort);
+
+ Link linkToAdd = new Link(this.dpid,this.port,dst.dpid,dst.port);
+ actions.add(new LinkEvent(linkToAdd,LinkEventType.ADD));
+
+ return null;
+ }
+
+ }
+
+ /**
+ * Class defines a function called back when IPortObject#getSwitch is called.
+ * @author Naoki Shiota
+ *
+ */
+ private class GetSwitchCallback implements IAnswer<ISwitchObject> {
+ private long dpid;
+
+ public GetSwitchCallback(long dpid) {
+ this.dpid = dpid;
+ }
+
+ @Override
+ public ISwitchObject answer() throws Throwable {
+ ISwitchObject sw = createMockSwitch(dpid);
+ return sw;
+ }
+ }
+
+ /**
+ * Class defines a function called back when IPortObject#getLinkedPorts is called.
+ * @author Naoki Shiota
+ *
+ */
+ private class GetLinkedPortsCallback implements IAnswer< Iterable<IPortObject> > {
+ private long dpid;
+ private short port;
+
+ public GetLinkedPortsCallback(long dpid, short port) {
+ this.dpid = dpid;
+ this.port = port;
+ }
+
+ @Override
+ public Iterable<IPortObject> answer() throws Throwable {
+ List<IPortObject> ports = new ArrayList<IPortObject>();
+
+ for(Link lk : links) {
+ if(lk.getSrc() == dpid && lk.getSrcPort() == port) {
+ ports.add(createMockPort(lk.getDst(), lk.getDstPort()));
+ }
+ }
+
+ return ports;
+ }
+
+ }
+
+ /**
+ * Class defines a function called back when ISwitchObject#getPorts is called.
+ * @author Naoki Shiota
+ *
+ */
+ private class GetPortsCallback implements IAnswer< Iterable <IPortObject> > {
+ private long dpid;
+
+ public GetPortsCallback(long dpid) {
+ this.dpid = dpid;
+ }
+
+ @Override
+ public Iterable<IPortObject> answer() throws Throwable {
+ List<IPortObject> ports = new ArrayList<IPortObject>();
+
+ for(Short number : getPorts(dpid)) {
+ ports.add(createMockPort(dpid, number));
+ }
+
+ return ports;
+ }
+ }
+
+ // ------------------------Creation of Mock-----------------------------
+ /**
+ * Create a mock GraphDBOperation which hooks port-related methods.
+ * @return EasyMock-wrapped GraphDBOperation object.
+ */
+ @SuppressWarnings("serial")
+ private GraphDBOperation createMockGraphDBOperation() {
+ GraphDBOperation mockDBOpe = EasyMock.createNiceMock(GraphDBOperation.class);
+
+ // Mock searchPort() method to create new mock IPortObject.
+ EasyMock.expect(mockDBOpe.searchPort((String)EasyMock.anyObject(), EasyMock.anyShort())).
+ andAnswer(new IAnswer<IPortObject>() {
+ @Override
+ public IPortObject answer() throws Throwable {
+ long dpid = HexString.toLong((String)EasyMock.getCurrentArguments()[0]);
+ short port = (Short) EasyMock.getCurrentArguments()[1];
+ IPortObject ret = createMockPort(dpid,port);
+
+ return ret;
+ }
+ }).anyTimes();
+
+ // Mock searchSwitch() method to create new mock ISwitchObject.
+ EasyMock.expect(mockDBOpe.searchSwitch((String)EasyMock.anyObject())).
+ andAnswer(new IAnswer<ISwitchObject>() {
+ @Override
+ public ISwitchObject answer() throws Throwable {
+ long dpid = HexString.toLong((String)EasyMock.getCurrentArguments()[0]);
+ ISwitchObject ret = createMockSwitch(dpid);
+
+ return ret;
+ }
+ }).anyTimes();
+
+ // Mock getActiveSwitches() method to create list of mock ISwitchObject.
+ EasyMock.expect(mockDBOpe.getActiveSwitches()).andReturn(new ArrayList<ISwitchObject> () {{
+ for(Long dpid : getDpids()) {
+ add(createMockSwitch(dpid));
+ }
+ }}).anyTimes();
+
+ // Mock commit() method to commit change of link information
+ mockDBOpe.commit();
+ EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ @Override
+ public Object answer() throws Throwable {
+ for(LinkEvent action : actions) {
+ if(action.getType().equals(LinkEventType.ADD)) {
+ Link linkToAdd = new Link(
+ action.getSrcDpid(),
+ action.getSrcPort(),
+ action.getDstDpid(),
+ action.getDstPort());
+ links.add(linkToAdd);
+ } else if(action.getType().equals(LinkEventType.DELETE)) {
+ Link linkToRemove = new Link(
+ action.getSrcDpid(),
+ action.getSrcPort(),
+ action.getDstDpid(),
+ action.getDstPort());
+ links.remove(linkToRemove);
+ } else {
+ log.error("mock commit(): unexpected action {}", new Object[]{action.getType()});
+ }
+ }
+ actions.clear();
+ return null;
+ }
+ }).atLeastOnce();
+
+ EasyMock.replay(mockDBOpe);
+ return mockDBOpe;
+ }
+
+ /**
+ * Create a mock IPortObject using given DPID and port number.
+ * IPortObject can't store DPID, so DPID is stored to mockToPortInfoMap for later use.
+ * Duplication is not checked.
+ * @param dpid DPID of a port
+ * @param number Port Number
+ * @return EasyMock-wrapped IPortObject
+ */
+ private IPortObject createMockPort(long dpid, short number) {
+ IPortObject mockPort = EasyMock.createNiceMock(IPortObject.class);
+
+ EasyMock.expect(mockPort.getNumber()).andReturn(number);
+
+ // Mock removeLink() method
+ mockPort.removeLink((IPortObject) EasyMock.anyObject());
+ EasyMock.expectLastCall().andAnswer(new RemoveLinkCallback(dpid, number)).anyTimes();
+
+ // Mock setLinkPort() method
+ mockPort.setLinkPort((IPortObject) EasyMock.anyObject());
+ EasyMock.expectLastCall().andAnswer(new SetLinkPortCallback(dpid, number)).anyTimes();
+
+ // Mock getLinkPorts() method
+ EasyMock.expect(mockPort.getLinkedPorts()).andAnswer(new GetLinkedPortsCallback(dpid, number)).anyTimes();
+
+ // Mock getSwitch() method
+ EasyMock.expect(mockPort.getSwitch()).andAnswer(new GetSwitchCallback(dpid)).anyTimes();
+
+ mockToPortInfoMap.put(mockPort, new PortInfo(dpid,number));
+ EasyMock.replay(mockPort);
+
+ return mockPort;
+ }
+
+ /**
+ * Create a mock ISwitchObject using given DPID number.
+ * Duplication is not checked.
+ * @param dpid DPID of a switch
+ * @return EasyMock-wrapped ISwitchObject
+ */
+ private ISwitchObject createMockSwitch(long dpid) {
+ ISwitchObject mockSw = EasyMock.createNiceMock(ISwitchObject.class);
+
+ EasyMock.expect(mockSw.getPorts()).andAnswer(new GetPortsCallback(dpid)).anyTimes();
+ EasyMock.expect(mockSw.getDPID()).andReturn(HexString.toHexString(dpid)).anyTimes();
+ EasyMock.expect(mockSw.getState()).andReturn("ACTIVE").anyTimes();
+
+ EasyMock.replay(mockSw);
+ return mockSw;
+ }
+
+
//----------------- Creation of test data -----------------------
// Assume a network shown below.
//
@@ -441,38 +757,61 @@
// dpid2 : 00:00:00:00:0a:02
// dpid3 : 00:00:00:00:0a:03
+ /**
+ * Initialize links member to represent test topology above.
+ */
private void initLinks() {
- final String dpid1 = "00:00:00:00:0a:01";
- final String dpid2 = "00:00:00:00:0a:02";
- final String dpid3 = "00:00:00:00:0a:03";
+ links = new ArrayList<Link>();
- ope.createNewSwitchForTest(dpid1).setStateForTest("ACTIVE");
- ope.createNewSwitchForTest(dpid2).setStateForTest("ACTIVE");
- ope.createNewSwitchForTest(dpid3).setStateForTest("ACTIVE");
-
- TestPortObject ports1 [] = {
- ope.createNewPortForTest(dpid1, (short)1),
- ope.createNewPortForTest(dpid1, (short)2),
- ope.createNewPortForTest(dpid1, (short)3),
- ope.createNewPortForTest(dpid1, (short)4),
- };
-
- TestPortObject ports2 [] = {
- ope.createNewPortForTest(dpid2, (short)1),
- ope.createNewPortForTest(dpid2, (short)2),
- };
-
- TestPortObject ports3 [] = {
- ope.createNewPortForTest(dpid3, (short)1),
- ope.createNewPortForTest(dpid3, (short)2),
- };
-
- ope.setLinkBetweenPortsForTest(ports1[0], ports2[0]);
- ope.setLinkBetweenPortsForTest(ports1[3], ports3[1]);
+ links.add(new Link(Long.decode("0x0000000000000a01"), 1, Long.decode("0x0000000000000a02"), 1));
+ links.add(new Link(Long.decode("0x0000000000000a01"), 4, Long.decode("0x0000000000000a03"), 2));
}
/**
- * Returns new Link object of existing link
+ * Returns list of port number attached to the switch specified by given DPID.
+ * @param dpid DPID of the switch
+ * @return List of port number
+ */
+ @SuppressWarnings("serial")
+ private List<Short> getPorts(long dpid) {
+ List<Short> ports;
+
+ if(dpid == Long.decode("0x0000000000000a01")) {
+ ports = new ArrayList<Short>() {{
+ add((short)1);
+ add((short)2);
+ add((short)3);
+ add((short)4);
+ }};
+ } else if(dpid == Long.decode("0x0000000000000a02") || dpid == Long.decode("0x0000000000000a03")) {
+ ports = new ArrayList<Short>() {{
+ add((short)1);
+ add((short)2);
+ }};
+ } else {
+ ports = new ArrayList<Short>();
+ }
+
+ return ports;
+ }
+
+ /**
+ * Returns list of DPIDs in test topology.
+ * @return List of DPIDs
+ */
+ @SuppressWarnings("serial")
+ private List<Long> getDpids() {
+ List<Long> dpids = new ArrayList<Long>() {{
+ add(Long.decode("0x0000000000000a01"));
+ add(Long.decode("0x0000000000000a02"));
+ add(Long.decode("0x0000000000000a03"));
+ }};
+
+ return dpids;
+ }
+
+ /**
+ * Returns new Link object of an existing link
* @return new Link object
*/
private Link createExistingLink() {
@@ -480,7 +819,7 @@
}
/**
- * Returns new Link object of not-existing but feasible link
+ * Returns new Link object of a not-existing but feasible link
* @return new Link object
*/
private Link createFeasibleLink() {
diff --git a/src/test/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImplTest.java b/src/test/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImplTest.java
index daac980..d2a6712 100644
--- a/src/test/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImplTest.java
+++ b/src/test/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImplTest.java
@@ -2,11 +2,11 @@
import static org.easymock.EasyMock.*;
+import net.onrc.onos.graph.GraphDBConnection;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.ISwitchStorage;
import net.onrc.onos.ofcontroller.core.ISwitchStorage.SwitchState;
import net.onrc.onos.ofcontroller.core.internal.SwitchStorageImpl;
-import net.onrc.onos.util.GraphDBConnection;
-import net.onrc.onos.util.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.INetMapStorage.DM_OPERATION;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
@@ -447,7 +447,7 @@
mockOpe.commit();
expect(mockOpe.searchSwitch(dpid)).andReturn(mockISw);
expect(mockOpe.searchPort(dpid, portNumber)).andReturn(null);
- expect(mockOpe.newPort(portNumber)).andReturn(mockIPort);
+ expect(mockOpe.newPort(dpid, portNumber)).andReturn(mockIPort);
mockOpe.commit();
mockOpe.close();
replay(mockOpe);
@@ -588,7 +588,7 @@
mockOpe.commit();
expect(mockOpe.searchSwitch(dpid)).andReturn(mockISw);
expect(mockOpe.searchPort(dpid, portNumber)).andReturn(null);
- expect(mockOpe.newPort(portNumber)).andReturn(null);
+ expect(mockOpe.newPort(dpid, portNumber)).andReturn(null);
mockOpe.rollback();
mockOpe.close();
replay(mockOpe);
@@ -639,7 +639,7 @@
mockOpe.commit();
expect(mockOpe.searchSwitch(dpid)).andReturn(mockISw);
expect(mockOpe.searchPort(dpid, portNumber)).andReturn(null);
- expect(mockOpe.newPort(portNumber)).andReturn(mockIPort);
+ expect(mockOpe.newPort(dpid, portNumber)).andReturn(mockIPort);
mockOpe.commit();
expectLastCall().andThrow(new RuntimeException());
mockOpe.rollback();
@@ -693,7 +693,7 @@
mockOpe.commit();
expect(mockOpe.searchSwitch(dpid)).andReturn(mockISw);
expect(mockOpe.searchPort(dpid, portNumber)).andReturn(null);
- expect(mockOpe.newPort(portNumber)).andReturn(mockIPort);
+ expect(mockOpe.newPort(dpid, portNumber)).andReturn(mockIPort);
mockOpe.commit();
expect(mockOpe.searchSwitch(dpid)).andReturn(mockISw);
expect(mockOpe.searchPort(dpid, portNumber)).andReturn(mockIPort);
@@ -750,7 +750,7 @@
mockOpe.commit();
expect(mockOpe.searchSwitch(dpid)).andReturn(mockISw);
expect(mockOpe.searchPort(dpid, portNumber)).andReturn(null);
- expect(mockOpe.newPort(portNumber)).andReturn(mockIPort);
+ expect(mockOpe.newPort(dpid, portNumber)).andReturn(mockIPort);
mockOpe.commit();
expect(mockOpe.searchSwitch(dpid)).andReturn(mockISw);
expect(mockOpe.searchPort(dpid, portNumber)).andReturn(mockIPort);
diff --git a/src/test/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImplTestBB.java b/src/test/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImplTestBB.java
index f6f70ae..57aefd3 100644
--- a/src/test/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImplTestBB.java
+++ b/src/test/java/net/onrc/onos/ofcontroller/core/internal/SwitchStorageImplTestBB.java
@@ -3,11 +3,11 @@
import static org.junit.Assert.*;
import net.floodlightcontroller.core.internal.TestDatabaseManager;
+import net.onrc.onos.graph.GraphDBConnection;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.ISwitchStorage;
import net.onrc.onos.ofcontroller.core.ISwitchStorage.SwitchState;
import net.onrc.onos.ofcontroller.core.internal.SwitchStorageImpl;
-import net.onrc.onos.util.GraphDBConnection;
-import net.onrc.onos.util.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.INetMapStorage;
import net.onrc.onos.ofcontroller.core.INetMapStorage.DM_OPERATION;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
diff --git a/src/test/java/net/onrc/onos/ofcontroller/core/internal/TestableGraphDBOperation.java b/src/test/java/net/onrc/onos/ofcontroller/core/internal/TestableGraphDBOperation.java
index 31a4bb0..658aaaf 100644
--- a/src/test/java/net/onrc/onos/ofcontroller/core/internal/TestableGraphDBOperation.java
+++ b/src/test/java/net/onrc/onos/ofcontroller/core/internal/TestableGraphDBOperation.java
@@ -3,14 +3,19 @@
import java.util.ArrayList;
import java.util.List;
+import org.codehaus.jackson.annotate.JsonIgnore;
import org.easymock.EasyMock;
import org.openflow.util.HexString;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.tinkerpop.blueprints.Vertex;
+import com.tinkerpop.frames.Property;
import com.tinkerpop.frames.annotations.gremlin.GremlinParam;
+import net.onrc.onos.graph.GraphDBConnection;
+import net.onrc.onos.graph.GraphDBOperation;
+import net.onrc.onos.graph.IDBConnection;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowPath;
@@ -18,9 +23,6 @@
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
import net.onrc.onos.ofcontroller.util.FlowEntryId;
import net.onrc.onos.ofcontroller.util.FlowId;
-import net.onrc.onos.util.GraphDBConnection;
-import net.onrc.onos.util.GraphDBOperation;
-import net.onrc.onos.util.IDBConnection;
/**
* Mock class of GraphDBOperation which provides additional setter to construct a graph for test.
@@ -291,6 +293,22 @@
@Override
public void setLinkPort(IPortObject dest_port) { linkedPortsToAdd.add(dest_port); }
+
+ @Override
+ @JsonIgnore
+ @Property("port_id")
+ public void setPortId(String id) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ @JsonIgnore
+ @Property("port_id")
+ public String getPortId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
public static class TestDeviceObject implements IDeviceObject {
@@ -1127,7 +1145,7 @@
}
@Override
- public IPortObject searchPort(String dpid_str, short number) {
+ public IPortObject searchPort(String dpid_str, Short number) {
long dpid = HexString.toLong(dpid_str);
for(TestSwitchObject sw : switches) {
diff --git a/src/test/java/net/onrc/onos/ofcontroller/devicemanager/internal/DeviceStorageImplTest.java b/src/test/java/net/onrc/onos/ofcontroller/devicemanager/internal/DeviceStorageImplTest.java
index 5cdcbb5..de8be4e 100644
--- a/src/test/java/net/onrc/onos/ofcontroller/devicemanager/internal/DeviceStorageImplTest.java
+++ b/src/test/java/net/onrc/onos/ofcontroller/devicemanager/internal/DeviceStorageImplTest.java
@@ -14,12 +14,12 @@
import net.floodlightcontroller.devicemanager.IDevice;
import net.floodlightcontroller.devicemanager.SwitchPort;
import net.floodlightcontroller.packet.IPv4;
+import net.onrc.onos.graph.GraphDBConnection;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
import net.onrc.onos.ofcontroller.core.internal.DeviceStorageImpl;
import net.onrc.onos.ofcontroller.core.internal.SwitchStorageImpl;
-import net.onrc.onos.util.GraphDBConnection;
-import net.onrc.onos.util.GraphDBOperation;
import net.floodlightcontroller.devicemanager.internal.Device;
import org.easymock.EasyMock;
import org.junit.After;
diff --git a/src/test/java/net/onrc/onos/ofcontroller/devicemanager/internal/DeviceStorageImplTestBB.java b/src/test/java/net/onrc/onos/ofcontroller/devicemanager/internal/DeviceStorageImplTestBB.java
index cea70f0..e4053f4 100644
--- a/src/test/java/net/onrc/onos/ofcontroller/devicemanager/internal/DeviceStorageImplTestBB.java
+++ b/src/test/java/net/onrc/onos/ofcontroller/devicemanager/internal/DeviceStorageImplTestBB.java
@@ -10,14 +10,14 @@
import net.floodlightcontroller.devicemanager.SwitchPort;
import net.floodlightcontroller.devicemanager.internal.Device;
import net.floodlightcontroller.packet.IPv4;
+import net.onrc.onos.graph.GraphDBConnection;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.IDeviceStorage;
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.core.internal.DeviceStorageImpl;
import net.onrc.onos.ofcontroller.core.internal.SwitchStorageImpl;
-import net.onrc.onos.util.GraphDBConnection;
-import net.onrc.onos.util.GraphDBOperation;
import org.easymock.EasyMock;
import org.junit.After;
diff --git a/src/test/java/net/onrc/onos/util/GraphDBOperationTest.java b/src/test/java/net/onrc/onos/util/GraphDBOperationTest.java
index 223ac67..f85cc4f 100644
--- a/src/test/java/net/onrc/onos/util/GraphDBOperationTest.java
+++ b/src/test/java/net/onrc/onos/util/GraphDBOperationTest.java
@@ -9,6 +9,7 @@
import junit.framework.TestCase;
+import net.onrc.onos.graph.GraphDBOperation;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowPath;
@@ -88,7 +89,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#newSwitch(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#newSwitch(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testNewSwitch() {
@@ -103,7 +104,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#searchSwitch(net.onrc.onos.util.GraphDBConnection, java.lang.String)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#searchSwitch(net.onrc.onos.graph.GraphDBConnection, java.lang.String)}.
*/
@Test
public final void testSearchSwitch() {
@@ -120,7 +121,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#searchActiveSwitch(net.onrc.onos.util.GraphDBConnection, java.lang.String)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#searchActiveSwitch(net.onrc.onos.graph.GraphDBConnection, java.lang.String)}.
*/
@Test
public final void testSearchActiveSwitch() {
@@ -137,7 +138,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#getActiveSwitches(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#getActiveSwitches(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testGetActiveSwitches() {
@@ -153,7 +154,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#getAllSwitches(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#getAllSwitches(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testGetAllSwitches() {
@@ -171,7 +172,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#getInactiveSwitches(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#getInactiveSwitches(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testGetInactiveSwitches() {
@@ -187,7 +188,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#getAllSwitchNotUpdatedFlowEntries(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#getAllSwitchNotUpdatedFlowEntries(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testGetAllSwitchNotUpdatedFlowEntries() {
@@ -209,7 +210,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#removeSwitch(net.onrc.onos.util.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.ISwitchObject)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#removeSwitch(net.onrc.onos.graph.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.ISwitchObject)}.
*/
@Test
public final void testRemoveSwitch() {
@@ -225,7 +226,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#newPort(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#newPort(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testNewPort() {
@@ -241,7 +242,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#searchPort(net.onrc.onos.util.GraphDBConnection, java.lang.String, short)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#searchPort(net.onrc.onos.graph.GraphDBConnection, java.lang.String, short)}.
*/
@Test
public final void testSearchPort() {
@@ -291,7 +292,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#removePort(net.onrc.onos.util.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.IPortObject)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#removePort(net.onrc.onos.graph.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.IPortObject)}.
*/
@Test
public final void testRemovePort() {
@@ -324,7 +325,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#newDevice(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#newDevice(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testNewDevice() {
@@ -343,7 +344,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#searchDevice(net.onrc.onos.util.GraphDBConnection, java.lang.String)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#searchDevice(net.onrc.onos.graph.GraphDBConnection, java.lang.String)}.
*/
@Test
public final void testSearchDevice() {
@@ -361,7 +362,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#getDevices(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#getDevices(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testGetDevices() {
@@ -382,7 +383,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#removeDevice(net.onrc.onos.util.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.IDeviceObject)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#removeDevice(net.onrc.onos.graph.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.IDeviceObject)}.
*/
@Test
public final void testRemoveDevice() {
@@ -395,7 +396,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#newFlowPath(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#newFlowPath(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testNewFlowPath() {
@@ -410,7 +411,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#searchFlowPath(net.onrc.onos.util.GraphDBConnection, net.floodlightcontroller.util.FlowId)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#searchFlowPath(net.onrc.onos.graph.GraphDBConnection, net.floodlightcontroller.util.FlowId)}.
*/
@Test
public final void testSearchFlowPath() {
@@ -426,7 +427,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#getFlowPathByFlowEntry(net.onrc.onos.util.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.IFlowEntry)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#getFlowPathByFlowEntry(net.onrc.onos.graph.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.IFlowEntry)}.
*/
@Test
public final void testGetFlowPathByFlowEntry() {
@@ -465,7 +466,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#getAllFlowPaths(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#getAllFlowPaths(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testGetAllFlowPaths() {
@@ -489,7 +490,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#removeFlowPath(net.onrc.onos.util.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.IFlowPath)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#removeFlowPath(net.onrc.onos.graph.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.IFlowPath)}.
*/
@Test
public final void testRemoveFlowPath() {
@@ -509,7 +510,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#newFlowEntry(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#newFlowEntry(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testNewFlowEntry() {
@@ -525,7 +526,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#searchFlowEntry(net.onrc.onos.util.GraphDBConnection, net.floodlightcontroller.util.FlowEntryId)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#searchFlowEntry(net.onrc.onos.graph.GraphDBConnection, net.floodlightcontroller.util.FlowEntryId)}.
*/
@Test
public final void testSearchFlowEntry() {
@@ -548,7 +549,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#getAllFlowEntries(net.onrc.onos.util.GraphDBConnection)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#getAllFlowEntries(net.onrc.onos.graph.GraphDBConnection)}.
*/
@Test
public final void testGetAllFlowEntries() {
@@ -572,7 +573,7 @@
}
/**
- * Test method for {@link net.onrc.onos.util.GraphDBOperation#removeFlowEntry(net.onrc.onos.util.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.IFlowEntry)}.
+ * Test method for {@link net.onrc.onos.graph.GraphDBOperation#removeFlowEntry(net.onrc.onos.graph.GraphDBConnection, net.floodlightcontroller.core.INetMapTopologyObjects.IFlowEntry)}.
*/
@Test
public final void testRemoveFlowEntry() {
diff --git a/start-cassandra.sh b/start-cassandra.sh
index 95cb1db..d4d722c 100755
--- a/start-cassandra.sh
+++ b/start-cassandra.sh
@@ -1,7 +1,7 @@
#!/bin/bash
# Set paths
-FL_HOME=`dirname $0`
+ONOS_HOME=`dirname $0`
CASSANDRA_DIR=${HOME}/apache-cassandra-1.2.4
LOGDIR=${HOME}/ONOS/onos-logs
CASSANDRA_LOG=$LOGDIR/cassandara.`hostname`.log
@@ -30,6 +30,10 @@
# Run cassandra
echo "Starting cassandra"
+ echo "[31;48m[WARNING] This script copies conf/cassandra.yam to $CASSANDRA_DIR/conf/cassandra.yaml (overwrites)[0m"
+ echo "[31;48moriginal cassandra.yaml was backed up as cassandra.yaml.backup[0m"
+ cp $CASSANDRA_DIR/conf/cassandra.yaml $CASSANDRA_DIR/conf/cassandra.yaml.backup
+ cp ${ONOS_HOME}/conf/cassandra.yaml $CASSANDRA_DIR/conf
$CASSANDRA_DIR/bin/cassandra > $CASSANDRA_LOG 2>&1
}
@@ -56,7 +60,7 @@
case "$1" in
start)
deldb
- cp $FL_HOME/cassandra.titan /tmp
+ cp $ONOS_HOME/conf/cassandra.titan /tmp
stop
start
;;
diff --git a/start-onos-embedded.sh b/start-onos-embedded.sh
index fa6bb3a..5da4d9b 100755
--- a/start-onos-embedded.sh
+++ b/start-onos-embedded.sh
@@ -1,9 +1,9 @@
#!/bin/bash
# Set paths
-ONOS_HOME=`dirname $0`
-ONOS_JAR="${ONOS_HOME}/target/floodlight.jar"
-ONOS_ONLY_JAR="${ONOS_HOME}/target/floodlight-only.jar"
+if [ -z "${ONOS_HOME}" ]; then
+ ONOS_HOME=`dirname $0`
+fi
ONOS_LOGBACK="${ONOS_HOME}/logback.xml"
LOGDIR=${ONOS_HOME}/onos-logs
ONOS_LOG="${LOGDIR}/onos.`hostname`.log"
@@ -23,9 +23,7 @@
#JVM_OPTS="$JVM_OPTS -Dpython.security.respectJavaAccessibility=false"
-# Set classpath to include titan libs
-#CLASSPATH=`echo ${ONOS_HOME}/lib/*.jar ${ONOS_HOME}/lib/titan/*.jar | sed 's/ /:/g'`
-CLASSPATH="${ONOS_ONLY_JAR}:${ONOS_HOME}/lib/*:${ONOS_HOME}/lib/titan/*"
+# Set Main class to start ONOS core
MAIN_CLASS="net.onrc.onos.ofcontroller.core.Main"
if [ -z "${MVN}" ]; then
@@ -88,9 +86,9 @@
# Run floodlight
echo "Starting ONOS controller ..."
echo
- #java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -jar ${ONOS_JAR} -cf ${ONOS_HOME}/onos.properties > /dev/null 2>&1 &
- #java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp ${CLASSPATH} ${MAIN_CLASS} -cf ${ONOS_HOME}/onos.properties > /dev/n
+ # XXX MVN has to run at the project top dir..
+ cd ${ONOS_HOME}
${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 &
echo "Waiting for ONOS to start..."
@@ -107,8 +105,7 @@
echo "Timed out"
exit 1
-# echo "java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -jar ${ONOS_JAR} -cf ./onos.properties > /dev/null 2>&1 &"
-# sudo -b /usr/sbin/tcpdump -n -i eth0 -s0 -w ${PCAP_LOG} 'tcp port 6633' > /dev/null 2>&1
+ sudo -b /usr/sbin/tcpdump -n -i eth0 -s0 -w ${PCAP_LOG} 'tcp port 6633' > /dev/null 2>&1
}
function stop {
@@ -119,7 +116,7 @@
for p in ${pids}; do
if [ x$p != "x" ]; then
kill -KILL $p
- echo "Killed existing prosess (pid: $p)"
+ echo "Killed existing process (pid: $p)"
fi
done
}
diff --git a/start-onos.sh b/start-onos.sh
index 56a8999..667fd31 100755
--- a/start-onos.sh
+++ b/start-onos.sh
@@ -1,9 +1,9 @@
#!/bin/bash
# Set paths
-ONOS_HOME=`dirname $0`
-ONOS_JAR="${ONOS_HOME}/target/floodlight.jar"
-ONOS_ONLY_JAR="${ONOS_HOME}/target/floodlight-only.jar"
+if [ -z "${ONOS_HOME}" ]; then
+ ONOS_HOME=`dirname $0`
+fi
ONOS_LOGBACK="${ONOS_HOME}/logback.xml"
LOGDIR=${ONOS_HOME}/onos-logs
ONOS_LOG="${LOGDIR}/onos.`hostname`.log"
@@ -22,9 +22,7 @@
JVM_OPTS="$JVM_OPTS -XX:OnError=crash-logger" ;# For dumping core
#JVM_OPTS="$JVM_OPTS -Dpython.security.respectJavaAccessibility=false"
-# Set classpath to include titan libs
-#CLASSPATH=`echo ${ONOS_HOME}/lib/*.jar ${ONOS_HOME}/lib/titan/*.jar | sed 's/ /:/g'`
-CLASSPATH="${ONOS_ONLY_JAR}:${ONOS_HOME}/lib/*:${ONOS_HOME}/lib/titan/*"
+# Set ONOS core main class
MAIN_CLASS="net.onrc.onos.ofcontroller.core.Main"
if [ -z "${MVN}" ]; then
@@ -88,10 +86,9 @@
# Run floodlight
echo "Starting ONOS controller ..."
echo
- #java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -jar ${ONOS_JAR} -cf ${ONOS_HOME}/onos.properties > /dev/null 2>&1 &
- #java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp ${CLASSPATH} ${MAIN_CLASS} -cf ${ONOS_HOME}/onos.properties > /dev/n
- echo "mvn exec:exec -Dexec.executable=\"java\" -Dexec.args=\"${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp %classpath ${MAIN_CLASS} -cf ${ONOS_HOME}/conf/onos.properties\""
+ # XXX : MVN has to run at the project top dir
+ cd ${ONOS_HOME}
${MVN} exec:exec -Dexec.executable="java" -Dexec.args="${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp %classpath ${MAIN_CLASS} -cf ${ONOS_HOME}/conf/onos.properties" > ${LOGDIR}/onos.stdout 2>${LOGDIR}/onos.stderr &
echo "Waiting for ONOS to start..."
diff --git a/start-zk.sh b/start-zk.sh
new file mode 100755
index 0000000..206370f
--- /dev/null
+++ b/start-zk.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+# Set paths
+
+ONOS_HOME=`dirname $0`
+ZK_DIR=${HOME}/zookeeper-3.4.5
+ZK_CONF=${ONOS_HOME}/conf/zoo.cfg
+
+function start {
+ # Run Zookeeper with our configuration
+ echo "Starting Zookeeper"
+ echo "[31;48m[WARNING] This script copies conf/zoo.cfg to $ZK_DIR/conf/zoo.cfg (overwrites)[0m"
+ echo "[31;48moriginal zoo.cfg was backed up as zoo.cfg.backup[0m"
+ if [ $ZK_DIR/conf/zoo.cfg ]; then
+ cp $ZK_DIR/conf/zoo.cfg $ZK_DIR/conf/zoo.cfg.backup
+ fi
+ cp $ZK_CONF $ZK_DIR/conf
+ echo "cp $ZK_CONF $ZK_DIR/conf"
+ $ZK_DIR/bin/zkServer.sh start
+}
+
+function stop {
+ # Kill the existing processes
+ pids=`jps -l | grep org.apache.zookeeper.server | awk '{print $1}'`
+ for p in ${pids}; do
+ if [ x$p != "x" ]; then
+ kill -KILL $p
+ echo "Killed existing prosess (pid: $p)"
+ fi
+ done
+}
+function status {
+ $ZK_DIR/bin/zkServer.sh status $ZK_CONF
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ status)
+ status
+ ;;
+ restart)
+ stop
+ start
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|status}"
+ exit 1
+esac
diff --git a/titan/schema/dbapi-testdata.graphml b/titan/schema/dbapi-testdata.graphml
index fbf7e2b..952a62a 100644
--- a/titan/schema/dbapi-testdata.graphml
+++ b/titan/schema/dbapi-testdata.graphml
@@ -1 +1 @@
-<?xml version=\"1.0\" ?><graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"> <key id=\"id\" for=\"node\" attr.name=\"id\" attr.type=\"string\"></key> <key id=\"type\" for=\"node\" attr.name=\"type\" attr.type=\"string\"></key> <key id=\"dpid\" for=\"node\" attr.name=\"dpid\" attr.type=\"string\"></key> <key id=\"desc\" for=\"node\" attr.name=\"desc\" attr.type=\"string\"></key> <key id=\"number\" for=\"node\" attr.name=\"number\" attr.type=\"int\"></key> <key id=\"dl_addr\" for=\"node\" attr.name=\"dl_addr\" attr.type=\"string\"></key> <key id=\"nw_addr\" for=\"node\" attr.name=\"nw_addr\" attr.type=\"string\"></key> <key id=\"id\" for=\"edge\" attr.name=\"id\" attr.type=\"string\"></key> <key id=\"source\" for=\"edge\" attr.name=\"source\" attr.type=\"string\"></key> <key id=\"target\" for=\"edge\" attr.name=\"target\" attr.type=\"string\"></key> <key id=\"label\" for=\"edge\" attr.name=\"label\" attr.type=\"string\"></key> <graph id=\"G\" edgedefault=\"directed\"> <node id=\"1\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:01</data> <data key=\"desc\">OpenFlow Switch at SEA</data> </node> <node id=\"2\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:02</data> <data key=\"desc\">OpenFlow Switch at LAX</data> </node> <node id=\"3\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:03</data> <data key=\"desc\">OpenFlow Switch at CHI</data> </node> <node id=\"4\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:04</data> <data key=\"desc\">OpenFlow Switch at IAH</data> </node> <node id=\"5\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:05</data> <data key=\"desc\">OpenFlow Switch at NYC</data> </node> <node id=\"6\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:06</data> <data key=\"desc\">OpenFlow Switch at ATL</data> </node> <node id=\"100\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at SEA Switch</data> </node> <node id=\"101\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at SEA Switch</data> </node> <node id=\"102\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at SEA Switch</data> </node> <node id=\"103\"> <data key=\"type\">port</data> <data key=\"number\">4</data> <data key=\"desc\">port 4 at SEA Switch</data> </node> <node id=\"104\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at LAX Switch</data> </node> <node id=\"105\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at LAX Switch</data> </node> <node id=\"106\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at LAX Switch</data> </node> <node id=\"107\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at CHI Switch</data> </node> <node id=\"108\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at CHI Switch</data> </node> <node id=\"109\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at CHI Switch</data> </node> <node id=\"110\"> <data key=\"type\">port</data> <data key=\"number\">4</data> <data key=\"desc\">port 4 at CHI Switch</data> </node> <node id=\"111\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at IAH Switch</data> </node> <node id=\"112\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at IAH Switch</data> </node> <node id=\"113\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at IAH Switch</data> </node> <node id=\"114\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at NYC Switch</data> </node> <node id=\"115\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at NYC Switch</data> </node> <node id=\"116\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at NYC Switch</data> </node> <node id=\"117\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at ATL Switch</data> </node> <node id=\"118\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at ATL Switch</data> </node> <node id=\"119\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at ATL Switch</data> </node> <node id=\"1000\"> <data key=\"type\">device</data> <data key=\"dl_addr\">20:c9:d0:4a:e1:73</data> <data key=\"nw_addr\">192.168.10.101</data> </node> <node id=\"1001\"> <data key=\"type\">device</data> <data key=\"dl_addr\">20:c9:d0:4a:e1:62</data> <data key=\"nw_addr\">192.168.20.101</data> </node> <node id=\"1002\"> <data key=\"type\">device</data> <data key=\"dl_addr\">10:40:f3:e6:8d:55</data> <data key=\"nw_addr\">192.168.10.1</data> </node> <node id=\"1003\"> <data key=\"type\">device</data> <data key=\"dl_addr\">a0:b3:cc:9c:c6:88</data> <data key=\"nw_addr\">192.168.20.1</data> </node> <node id=\"1004\"> <data key=\"type\">device</data> <data key=\"dl_addr\">00:04:20:e2:50:a2</data> <data key=\"nw_addr\">192.168.30.1</data> </node> <node id=\"1005\"> <data key=\"type\">device</data> <data key=\"dl_addr\">58:55:ca:c4:1b:a0</data> <data key=\"nw_addr\">192.168.40.1</data> </node> <edge id=\"10000\" source=\"1\" target=\"101\" label=\"on\"></edge> <edge id=\"10001\" source=\"1\" target=\"102\" label=\"on\"></edge> <edge id=\"10002\" source=\"1\" target=\"103\" label=\"on\"></edge> <edge id=\"10003\" source=\"2\" target=\"104\" label=\"on\"></edge> <edge id=\"10004\" source=\"2\" target=\"105\" label=\"on\"></edge> <edge id=\"10005\" source=\"2\" target=\"106\" label=\"on\"></edge> <edge id=\"10006\" source=\"3\" target=\"107\" label=\"on\"></edge> <edge id=\"10007\" source=\"3\" target=\"108\" label=\"on\"></edge> <edge id=\"10008\" source=\"3\" target=\"109\" label=\"on\"></edge> <edge id=\"10009\" source=\"3\" target=\"110\" label=\"on\"></edge> <edge id=\"10010\" source=\"4\" target=\"111\" label=\"on\"></edge> <edge id=\"10011\" source=\"4\" target=\"112\" label=\"on\"></edge> <edge id=\"10012\" source=\"4\" target=\"113\" label=\"on\"></edge> <edge id=\"10013\" source=\"5\" target=\"114\" label=\"on\"></edge> <edge id=\"10014\" source=\"5\" target=\"115\" label=\"on\"></edge> <edge id=\"10015\" source=\"5\" target=\"116\" label=\"on\"></edge> <edge id=\"10016\" source=\"6\" target=\"117\" label=\"on\"></edge> <edge id=\"10017\" source=\"6\" target=\"118\" label=\"on\"></edge> <edge id=\"10018\" source=\"6\" target=\"119\" label=\"on\"></edge> <edge id=\"11000\" source=\"101\" target=\"107\" label=\"link\"></edge> <edge id=\"11003\" source=\"105\" target=\"111\" label=\"link\"></edge> <edge id=\"11004\" source=\"107\" target=\"101\" label=\"link\"></edge> <edge id=\"11005\" source=\"108\" target=\"112\" label=\"link\"></edge> <edge id=\"11006\" source=\"109\" target=\"114\" label=\"link\"></edge> <edge id=\"11007\" source=\"111\" target=\"105\" label=\"link\"></edge> <edge id=\"11008\" source=\"112\" target=\"108\" label=\"link\"></edge> <edge id=\"11009\" source=\"113\" target=\"117\" label=\"link\"></edge> <edge id=\"11010\" source=\"114\" target=\"109\" label=\"link\"></edge> <edge id=\"11011\" source=\"115\" target=\"118\" label=\"link\"></edge> <edge id=\"11012\" source=\"117\" target=\"113\" label=\"link\"></edge> <edge id=\"11013\" source=\"118\" target=\"115\" label=\"link\"></edge> <edge id=\"12000\" source=\"103\" target=\"1000\" label=\"host\"></edge> <edge id=\"12001\" source=\"103\" target=\"1001\" label=\"host\"></edge> <edge id=\"12002\" source=\"110\" target=\"1002\" label=\"host\"></edge> <edge id=\"12003\" source=\"116\" target=\"1003\" label=\"host\"></edge> <edge id=\"12004\" source=\"106\" target=\"1004\" label=\"host\"></edge> <edge id=\"12005\" source=\"119\" target=\"1005\" label=\"host\"></edge> </graph> </graphml>
\ No newline at end of file
+<?xml version=\"1.0\" ?><graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"> <key id=\"id\" for=\"node\" attr.name=\"id\" attr.type=\"string\"></key> <key id=\"type\" for=\"node\" attr.name=\"type\" attr.type=\"string\"></key> <key id=\"dpid\" for=\"node\" attr.name=\"dpid\" attr.type=\"string\"></key> <key id=\"desc\" for=\"node\" attr.name=\"desc\" attr.type=\"string\"></key> <key id=\"number\" for=\"node\" attr.name=\"number\" attr.type=\"int\"></key> <key id=\"dl_add\" for=\"node\" attr.name=\"dl_addr\" attr.type=\"string\"></key> <key id=\"nw_addr\" for=\"node\" attr.name=\"nw_addr\" attr.type=\"string\"></key> <key id=\"id\" for=\"edge\" attr.name=\"id\" attr.type=\"string\"></key> <key id=\"source\" for=\"edge\" attr.name=\"source\" attr.type=\"string\"></key> <key id=\"target\" for=\"edge\" attr.name=\"target\" attr.type=\"string\"></key> <key id=\"label\" for=\"edge\" attr.name=\"label\" attr.type=\"string\"></key> <graph id=\"G\" edgedefault=\"directed\"> <node id=\"1\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:01</data> <data key=\"desc\">OpenFlow Switch at SEA</data> </node> <node id=\"2\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:02</data> <data key=\"desc\">OpenFlow Switch at LAX</data> </node> <node id=\"3\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:03</data> <data key=\"desc\">OpenFlow Switch at CHI</data> </node> <node id=\"4\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:04</data> <data key=\"desc\">OpenFlow Switch at IAH</data> </node> <node id=\"5\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:05</data> <data key=\"desc\">OpenFlow Switch at NYC</data> </node> <node id=\"6\"> <data key=\"type\">switch</data> <data key=\"dpid\">00:00:00:00:00:00:0a:06</data> <data key=\"desc\">OpenFlow Switch at ATL</data> </node> <node id=\"100\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at SEA Switch</data> </node> <node id=\"101\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at SEA Switch</data> </node> <node id=\"102\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at SEA Switch</data> </node> <node id=\"103\"> <data key=\"type\">port</data> <data key=\"number\">4</data> <data key=\"desc\">port 4 at SEA Switch</data> </node> <node id=\"104\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at LAX Switch</data> </node> <node id=\"105\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at LAX Switch</data> </node> <node id=\"106\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at LAX Switch</data> </node> <node id=\"107\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at CHI Switch</data> </node> <node id=\"108\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at CHI Switch</data> </node> <node id=\"109\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at CHI Switch</data> </node> <node id=\"110\"> <data key=\"type\">port</data> <data key=\"number\">4</data> <data key=\"desc\">port 4 at CHI Switch</data> </node> <node id=\"111\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at IAH Switch</data> </node> <node id=\"112\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at IAH Switch</data> </node> <node id=\"113\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at IAH Switch</data> </node> <node id=\"114\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at NYC Switch</data> </node> <node id=\"115\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at NYC Switch</data> </node> <node id=\"116\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at NYC Switch</data> </node> <node id=\"117\"> <data key=\"type\">port</data> <data key=\"number\">1</data> <data key=\"desc\">port 1 at ATL Switch</data> </node> <node id=\"118\"> <data key=\"type\">port</data> <data key=\"number\">2</data> <data key=\"desc\">port 2 at ATL Switch</data> </node> <node id=\"119\"> <data key=\"type\">port</data> <data key=\"number\">3</data> <data key=\"desc\">port 3 at ATL Switch</data> </node> <node id=\"1000\"> <data key=\"type\">device</data> <data key=\"dl_addr\">20:c9:d0:4a:e1:73</data> <data key=\"nw_addr\">192.168.10.101</data> </node> <node id=\"1001\"> <data key=\"type\">device</data> <data key=\"dl_addr\">20:c9:d0:4a:e1:62</data> <data key=\"nw_addr\">192.168.20.101</data> </node> <node id=\"1002\"> <data key=\"type\">device</data> <data key=\"dl_addr\">10:40:f3:e6:8d:55</data> <data key=\"nw_addr\">192.168.10.1</data> </node> <node id=\"1003\"> <data key=\"type\">device</data> <data key=\"dl_addr\">a0:b3:cc:9c:c6:88</data> <data key=\"nw_addr\">192.168.20.1</data> </node> <node id=\"1004\"> <data key=\"type\">device</data> <data key=\"dl_addr\">00:04:20:e2:50:a2</data> <data key=\"nw_addr\">192.168.30.1</data> </node> <node id=\"1005\"> <data key=\"type\">device</data> <data key=\"dl_addr\">58:55:ca:c4:1b:a0</data> <data key=\"nw_addr\">192.168.40.1</data> </node> <edge id=\"10000\" source=\"1\" target=\"101\" label=\"on\"></edge> <edge id=\"10001\" source=\"1\" target=\"102\" label=\"on\"></edge> <edge id=\"10002\" source=\"1\" target=\"103\" label=\"on\"></edge> <edge id=\"10003\" source=\"2\" target=\"104\" label=\"on\"></edge> <edge id=\"10004\" source=\"2\" target=\"105\" label=\"on\"></edge> <edge id=\"10005\" source=\"2\" target=\"106\" label=\"on\"></edge> <edge id=\"10006\" source=\"3\" target=\"107\" label=\"on\"></edge> <edge id=\"10007\" source=\"3\" target=\"108\" label=\"on\"></edge> <edge id=\"10008\" source=\"3\" target=\"109\" label=\"on\"></edge> <edge id=\"10009\" source=\"3\" target=\"110\" label=\"on\"></edge> <edge id=\"10010\" source=\"4\" target=\"111\" label=\"on\"></edge> <edge id=\"10011\" source=\"4\" target=\"112\" label=\"on\"></edge> <edge id=\"10012\" source=\"4\" target=\"113\" label=\"on\"></edge> <edge id=\"10013\" source=\"5\" target=\"114\" label=\"on\"></edge> <edge id=\"10014\" source=\"5\" target=\"115\" label=\"on\"></edge> <edge id=\"10015\" source=\"5\" target=\"116\" label=\"on\"></edge> <edge id=\"10016\" source=\"6\" target=\"117\" label=\"on\"></edge> <edge id=\"10017\" source=\"6\" target=\"118\" label=\"on\"></edge> <edge id=\"10018\" source=\"6\" target=\"119\" label=\"on\"></edge> <edge id=\"11000\" source=\"101\" target=\"107\" label=\"link\"></edge> <edge id=\"11003\" source=\"105\" target=\"111\" label=\"link\"></edge> <edge id=\"11004\" source=\"107\" target=\"101\" label=\"link\"></edge> <edge id=\"11005\" source=\"108\" target=\"112\" label=\"link\"></edge> <edge id=\"11006\" source=\"109\" target=\"114\" label=\"link\"></edge> <edge id=\"11007\" source=\"111\" target=\"105\" label=\"link\"></edge> <edge id=\"11008\" source=\"112\" target=\"108\" label=\"link\"></edge> <edge id=\"11009\" source=\"113\" target=\"117\" label=\"link\"></edge> <edge id=\"11010\" source=\"114\" target=\"109\" label=\"link\"></edge> <edge id=\"11011\" source=\"115\" target=\"118\" label=\"link\"></edge> <edge id=\"11012\" source=\"117\" target=\"113\" label=\"link\"></edge> <edge id=\"11013\" source=\"118\" target=\"115\" label=\"link\"></edge> <edge id=\"12000\" source=\"103\" target=\"1000\" label=\"host\"></edge> <edge id=\"12001\" source=\"103\" target=\"1001\" label=\"host\"></edge> <edge id=\"12002\" source=\"110\" target=\"1002\" label=\"host\"></edge> <edge id=\"12003\" source=\"116\" target=\"1003\" label=\"host\"></edge> <edge id=\"12004\" source=\"106\" target=\"1004\" label=\"host\"></edge> <edge id=\"12005\" source=\"119\" target=\"1005\" label=\"host\"></edge> </graph> </graphml>
diff --git a/titan/schema/test-network.xml b/titan/schema/test-network.xml
index a03a99c..5c63d90 100644
--- a/titan/schema/test-network.xml
+++ b/titan/schema/test-network.xml
@@ -234,4 +234,4 @@
<edge id="12004" source="106" target="1004" label="host"></edge>
<edge id="12005" source="119" target="1005" label="host"></edge>
</graph>
-</graphml>
\ No newline at end of file
+</graphml>
diff --git a/web/config.json.dev.1node b/web/config.json.dev.1node
new file mode 100644
index 0000000..580a136
--- /dev/null
+++ b/web/config.json.dev.1node
@@ -0,0 +1,26 @@
+{
+ "LB": false,
+ "TESTBED": "sw",
+ "ONOS_DEFAULT_HOST": "localhost",
+ "ONOS_GUI3_CONTROL_HOST": "http://localhost:9000",
+ "ONOS_GUI3_HOST": "http://localhost:9000",
+ "cluster_basename": "onosdev",
+ "controllers": [
+ "onosdev1",
+ "onosdev1",
+ "onosdev1",
+ "onosdev1",
+ "onosdev1",
+ "onosdev1",
+ "onosdev1",
+ "onosdev1"
+ ],
+ "core_switches": [
+ "00:00:00:00:00:00:01:01",
+ "00:00:00:00:00:00:01:02",
+ "00:00:00:00:00:00:01:03",
+ "00:00:00:00:00:00:01:04",
+ "00:00:00:00:00:00:01:05",
+ "00:00:00:00:00:00:01:06"
+ ]
+}
diff --git a/web/onos-topology.html b/web/onos-topology.html
index 72e9fc4..d72c0e1 100644
--- a/web/onos-topology.html
+++ b/web/onos-topology.html
@@ -52,8 +52,8 @@
<div id="topology"></div>
<script type="text/javascript" src="js/controller-status.js"></script>
<script type="text/javascript">
-controller_status("http://gui3.onlab.us:8081/controller_status");
-gui("http://gui3.onlab.us:8081/topology");
+controller_status("controller_status");
+gui("topology");
</script>
</svg>
</body>
diff --git a/web/ons-demo/data/controllers.json.dev b/web/ons-demo/data/controllers.json.dev
index 4abcf5a..b936d96 100644
--- a/web/ons-demo/data/controllers.json.dev
+++ b/web/ons-demo/data/controllers.json.dev
@@ -1,10 +1,10 @@
[
- "onosdevb1",
- "onosdevb2",
- "onosdevb3",
- "onosdevb4",
- "onosdevb5",
- "onosdevb6",
- "onosdevb7",
- "onosdevb8"
-]
\ No newline at end of file
+ "onosdev1",
+ "onosdev2",
+ "onosdev3",
+ "onosdev4",
+ "onosdev5",
+ "onosdev6",
+ "onosdev7",
+ "onosdev8"
+]
diff --git a/web/ons-demo/js/constants.js b/web/ons-demo/js/constants.js
index 51b3aa6..236d79a 100644
--- a/web/ons-demo/js/constants.js
+++ b/web/ons-demo/js/constants.js
@@ -2,7 +2,8 @@
timeout used by controller functions. after the timeout expires the "pending" action
is removed and the topology view is whatever is reported by the API
***************************************************************************************************/
-var pendingTimeout = 30000;
+/* var pendingTimeout = 30000; */
+var pendingTimeout = 60000;
/***************************************************************************************************
CSS names for the pallette of colors used by the topology view
@@ -27,4 +28,4 @@
edge: 6,
aggregation: 16,
core: 20
-}
\ No newline at end of file
+}
diff --git a/web/topology_rest.py b/web/topology_rest.py
index 6c2ea15..53f46bc 100755
--- a/web/topology_rest.py
+++ b/web/topology_rest.py
@@ -13,9 +13,9 @@
from flask import Flask, json, Response, render_template, make_response, request
-
CONFIG_FILE=os.getenv("HOME") + "/ONOS/web/config.json"
LINK_FILE=os.getenv("HOME") + "/ONOS/web/link.json"
+ONOSDIR=os.getenv("HOME") + "/ONOS"
## Global Var for ON.Lab local REST ##
RestIP="localhost"
@@ -373,7 +373,8 @@
except:
log_error("REST IF has issue: %s" % command)
log_error("%s" % result)
- sys.exit(0)
+ return
+# sys.exit(0)
topo = {}
switches = []
@@ -439,7 +440,8 @@
except:
log_error("REST IF has issue: %s" % command)
log_error("%s" % result)
- sys.exit(0)
+ return
+# sys.exit(0)
for v in parsedResult:
link = {}
@@ -479,7 +481,8 @@
except:
log_error("REST IF has issue: %s" % command)
log_error("%s" % result)
- sys.exit(0)
+ return
+# sys.exit(0)
topo = {}
switches = []
@@ -526,7 +529,8 @@
except:
log_error("REST IF has issue: %s" % command)
log_error("%s" % result)
- sys.exit(0)
+ return
+# sys.exit(0)
for v in parsedResult:
link = {}
@@ -565,7 +569,8 @@
except:
log_error("REST IF has issue: %s" % command)
log_error("%s" % result)
- sys.exit(0)
+ return
+# sys.exit(0)
# print command
# print result
@@ -594,7 +599,8 @@
except:
log_error("REST IF has issue: %s" % command)
log_error("%s" % result)
- sys.exit(0)
+ return
+# sys.exit(0)
devices = []
for v in parsedResult:
@@ -656,7 +662,8 @@
except:
log_error("REST IF has issue: %s" % command)
log_error("%s" % result)
- sys.exit(0)
+ return
+# sys.exit(0)
debug("query_links %s" % command)
# pp.pprint(parsedResult)
@@ -672,7 +679,8 @@
except:
log_error("REST IF has issue: %s" % command)
log_error("%s" % result)
- sys.exit(0)
+ return
+# sys.exit(0)
for p in linkResults:
if p.has_key('type') and p['type'] == "port":
@@ -697,14 +705,14 @@
@app.route("/controller_status")
def controller_status():
# onos_check="ssh -i ~/.ssh/onlabkey.pem %s ONOS/start-onos.sh status | awk '{print $1}'"
- onos_check="cd; onos status %s | grep %s | awk '{print $2}'"
+ onos_check="cd; onos status | grep %s | awk '{print $2}'"
#cassandra_check="ssh -i ~/.ssh/onlabkey.pem %s ONOS/start-cassandra.sh status"
cont_status=[]
for i in controllers:
status={}
onos=os.popen(onos_check % i).read()[:-1]
- onos=os.popen(onos_check % (i, i.lower())).read()[:-1]
+# onos=os.popen(onos_check % (i, i.lower())).read()[:-1]
status["name"]=i
status["onos"]=onos
status["cassandra"]=0
@@ -724,8 +732,11 @@
# stop_onos="/home/admin/bin/onos stop %s > /tmp/debug " % (controller_name[-1:])
# print "Debug: Controller command %s called %s" % (cmd, controller_name)
else:
- start_onos="ssh -i ~/.ssh/onlabkey.pem %s ONOS/start-onos.sh start" % (controller_name)
- stop_onos="ssh -i ~/.ssh/onlabkey.pem %s ONOS/start-onos.sh stop" % (controller_name)
+ # No longer use -i to specify keys (use .ssh/config to specify it)
+ start_onos="ssh %s ONOS/start-onos.sh start" % (controller_name)
+ stop_onos="ssh %s ONOS/start-onos.sh stop" % (controller_name)
+# start_onos="ssh -i ~/.ssh/onlabkey.pem %s ONOS/start-onos.sh start" % (controller_name)
+# stop_onos="ssh -i ~/.ssh/onlabkey.pem %s ONOS/start-onos.sh stop" % (controller_name)
if cmd == "up":
result=os.popen(start_onos).read()
@@ -743,8 +754,8 @@
result=""
if (TESTBED == "sw"):
for i in range(1, len(controllers)):
- cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; ./ctrl-local.sh'" % (controllers[i])
- result += os.popen(cmd_string).read()
+ cmd_string="ssh %s 'cd ONOS/scripts; ./ctrl-local.sh'" % (controllers[i])
+ result += os.popen(cmd_string).read()
else:
cmd_string="cd; switch local > /tmp/watch"
result += os.popen(cmd_string).read()
@@ -753,7 +764,8 @@
result=""
if (TESTBED == "sw"):
for i in range(1, len(controllers)):
- cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; ./ctrl-add-ext.sh'" % (controllers[i])
+ cmd_string="ssh %s 'cd ONOS/scripts; ./ctrl-add-ext.sh'" % (controllers[i])
+# cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; ./ctrl-add-ext.sh'" % (controllers[i])
print "cmd is: "+cmd_string
result += os.popen(cmd_string).read()
else:
@@ -789,7 +801,8 @@
r = re.compile(':')
dpid = re.sub(r, '', dpid)
host=controllers[0]
- cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; ./switch.sh %s %s'" % (host, dpid, cmd)
+ cmd_string="ssh %s 'cd ONOS/scripts; ./switch.sh %s %s'" % (host, dpid, cmd)
+# cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; ./switch.sh %s %s'" % (host, dpid, cmd)
get_status="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; ./switch.sh %s'" % (host, dpid)
print "cmd_string"
@@ -829,7 +842,8 @@
else:
(port, dontcare) = get_link_ports(dpid, src_dpid)
- cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; ./link.sh %s %s %s'" % (host, dpid, port, cmd)
+# cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; ./link.sh %s %s %s'" % (host, dpid, port, cmd)
+ cmd_string="ssh %s 'cd ONOS/scripts; ./link.sh %s %s %s'" % (host, dpid, port, cmd)
print cmd_string
res=os.popen(cmd_string).read()
result = result + ' ' + res
@@ -936,7 +950,7 @@
host = controllers[hostid-1]
if (TESTBED == "sw"):
- cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; ./link.sh %s %s %s'" % (host, src_dpid, src_port, cmd)
+ cmd_string="ssh %s 'cd ONOS/scripts; ./link.sh %s %s %s'" % (host, src_dpid, src_port, cmd)
else:
if ( src_dpid == "00:00:00:08:a2:08:f9:01" ):
cmd_string="~/ONOS/scripts/link-hw.sh %s %s %s " % ( dst_dpid, dst_port, cmd)
@@ -957,11 +971,17 @@
url ="%s/wm/flow/getsummary/%s/%s/json" % (host, 0, 0)
(code, result) = get_json(url)
parsedResult = json.loads(result)
- flow_nr = int(parsedResult[-1]['flowId'], 16)
+ if len(parsedResult) > 0:
+ if parsedResult[-1].has_key('flowId'):
+ flow_nr = int(parsedResult[-1]['flowId'], 16)
+ else:
+ flow_nr = -1 # first flow
+ print "first flow"
+
flow_nr += 1
- command = "/home/ubuntu/ONOS/web/add_flow.py -m onos %d %s %s %s %s %s matchSrcMac %s matchDstMac %s" % (flow_nr, "dummy", src_dpid, src_port, dst_dpid, dst_port, srcMAC, dstMAC)
+ command = "%s/web/add_flow.py -m onos %d %s %s %s %s %s matchSrcMac %s matchDstMac %s" % (ONOSDIR, flow_nr, "dummy", src_dpid, src_port, dst_dpid, dst_port, srcMAC, dstMAC)
flow_nr += 1
- command1 = "/home/ubuntu/ONOS/web/add_flow.py -m onos %d %s %s %s %s %s matchSrcMac %s matchDstMac %s" % (flow_nr, "dummy", dst_dpid, dst_port, src_dpid, src_port, dstMAC, srcMAC)
+ command1 = "%s/web/add_flow.py -m onos %d %s %s %s %s %s matchSrcMac %s matchDstMac %s" % (ONOSDIR, flow_nr, "dummy", dst_dpid, dst_port, src_dpid, src_port, dstMAC, srcMAC)
print "add flow: %s, %s" % (command, command1)
errcode = os.popen(command).read()
errcode1 = os.popen(command1).read()
@@ -973,7 +993,7 @@
#http://localhost:9000/gui/delflow/<flow_id>
@app.route("/gui/delflow/<flow_id>")
def del_flow(flow_id):
- command = "/home/ubuntu/ONOS/web/delete_flow.py %s" % (flow_id)
+ command = "%/web/delete_flow.py %s" % (ONOSDIR, flow_id)
print command
errcode = os.popen(command).read()
return errcode
@@ -1027,7 +1047,7 @@
if TESTBED == "hw":
cmd_string="dsh -w %s 'cd ONOS/scripts; " % dst_host
else:
- cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; " % dst_host
+ cmd_string="ssh %s 'cd ONOS/scripts; " % dst_host
cmd_string += "./runiperf.sh %d %s %s %s:%s %s/%s/%s/%s'" % (flowId, src_dpid, dst_dpid, TESTBED, "svr", protocol, duration, interval, samples)
print cmd_string
os.popen(cmd_string)
@@ -1035,7 +1055,7 @@
if TESTBED == "hw":
cmd_string="dsh -w %s 'cd ONOS/scripts; " % src_host
else:
- cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts;" % src_host
+ cmd_string="ssh %s 'cd ONOS/scripts;" % src_host
cmd_string+="./runiperf.sh %d %s %s %s:%s %s/%s/%s/%s'" % (flowId, src_dpid, dst_dpid, TESTBED, "client", protocol, duration, interval, samples)
print cmd_string
os.popen(cmd_string)