tom

Adding packaging script.

Added display of raw DPID and IPs or MACs for hosts.
......@@ -15,6 +15,7 @@ import org.onlab.onos.net.topology.Topology;
import org.onlab.onos.net.topology.TopologyGraph;
import org.onlab.onos.net.topology.TopologyService;
import org.onlab.onos.net.topology.TopologyVertex;
import org.onlab.packet.IPAddress;
import org.onlab.rest.BaseResource;
import javax.ws.rs.GET;
......@@ -54,6 +55,7 @@ public class TopologyResource extends BaseResource {
ArrayNode vertexesNode = mapper.createArrayNode();
for (TopologyVertex vertex : graph.getVertexes()) {
vertexesNode.add(json(mapper, vertex.deviceId(), 2,
vertex.deviceId().uri().getSchemeSpecificPart(),
deviceService.isAvailable(vertex.deviceId())));
}
......@@ -70,14 +72,17 @@ public class TopologyResource extends BaseResource {
// Merge the exterior and interior vertexes and inject host links as
// the exterior edges.
for (Host host : hostService.getHosts()) {
vertexesNode.add(json(mapper, host.id(), 3, true));
Set<IPAddress> ipAddresses = host.ipAddresses();
IPAddress ipAddress = ipAddresses.isEmpty() ? null : ipAddresses.iterator().next();
String label = ipAddress != null ? ipAddress.toString() : host.mac().toString();
vertexesNode.add(json(mapper, host.id(), 3, label, true));
edgesNode.add(json(mapper, 1, host.location(), new ConnectPoint(host.id(), portNumber(-1))));
}
// Now put the vertexes and edges into a root node and ship them off
ObjectNode rootNode = mapper.createObjectNode();
rootNode.put("vertexes", vertexesNode);
rootNode.put("edges", edgesNode);
rootNode.set("vertexes", vertexesNode);
rootNode.set("edges", edgesNode);
return Response.ok(rootNode.toString()).build();
}
......@@ -126,12 +131,12 @@ public class TopologyResource extends BaseResource {
return aggLinks;
}
// Produces JSON for a graph vertex.
private ObjectNode json(ObjectMapper mapper, ElementId id, int group,
boolean isOnline) {
String label, boolean isOnline) {
return mapper.createObjectNode()
.put("name", id.uri().toString())
.put("label", label)
.put("group", group)
.put("online", isOnline);
}
......
......@@ -147,8 +147,8 @@
}
return false;
}
node = {"id": vertex.name, "group": vertex.group,
"online": vertex.online, "stamp": stamp};
node = {"id": vertex.name, "label": vertex.label,
"group": vertex.group, "online": vertex.online, "stamp": stamp};
nodes.push(node);
topo.vertexes[vertex.name] = node;
update();
......@@ -288,7 +288,7 @@
.attr("class", "textClass")
.attr("x", 20)
.attr("y", ".31em")
.text(function (d) { return d.id; });
.text(function (d) { return d.label; });
node.exit().remove();
......
......@@ -4,12 +4,17 @@ import org.onlab.onos.net.DeviceId;
/**
* Service for injecting flow rules into the environment and for obtaining
* information about flow rules already in the environment.
* information about flow rules already in the environment. This implements
* semantics of a distributed authoritative flow table where the master copy
* of the flow rules lies with the controller and the devices hold only the
* 'cached' copy.
*/
public interface FlowRuleService {
/**
* Returns the collection of flow entries applied on the specified device.
* This will include flow rules which may not yet have been applied to
* the device.
*
* @param deviceId device identifier
* @return collection of flow rules
......@@ -17,7 +22,9 @@ public interface FlowRuleService {
Iterable<FlowEntry> getFlowEntries(DeviceId deviceId);
/**
* Applies the specified flow rules onto their respective devices.
* Applies the specified flow rules onto their respective devices. These
* flow rules will be retained by the system and re-applied anytime the
* device reconnects to the controller.
*
* @param flowRules one or more flow rules
* throws SomeKindOfException that indicates which ones were applied and
......@@ -26,7 +33,9 @@ public interface FlowRuleService {
void applyFlowRules(FlowRule... flowRules);
/**
* Removes the specified flow rules from their respective devices.
* Removes the specified flow rules from their respective devices. If the
* device is not presently connected to the controller, these flow will
* be removed once the device reconnects.
*
* @param flowRules one or more flow rules
* throws SomeKindOfException that indicates which ones were removed and
......@@ -34,6 +43,10 @@ public interface FlowRuleService {
*/
void removeFlowRules(FlowRule... flowRules);
// void addInitialFlowContributor(InitialFlowContributor contributor);
// void removeInitialFlowContributor(InitialFlowContributor contributor);
/**
* Adds the specified flow rule listener.
*
......
......@@ -39,27 +39,27 @@
<feature name="onos-rest" version="1.0.0"
description="ONOS REST API components">
<feature>onos-core</feature>
<feature>onos-api</feature>
<feature>onos-thirdparty-web</feature>
<bundle>mvn:org.onlab.onos/onos-rest/1.0.0-SNAPSHOT</bundle>
</feature>
<feature name="onos-gui" version="1.0.0"
description="ONOS GUI console components">
<feature>onos-core</feature>
<feature>onos-api</feature>
<feature>onos-thirdparty-web</feature>
<bundle>mvn:org.onlab.onos/onos-gui/1.0.0-SNAPSHOT</bundle>
</feature>
<feature name="onos-cli" version="1.0.0"
description="ONOS admin command console components">
<feature>onos-core</feature>
<feature>onos-api</feature>
<bundle>mvn:org.onlab.onos/onos-cli/1.0.0-SNAPSHOT</bundle>
</feature>
<feature name="onos-openflow" version="1.0.0"
description="ONOS OpenFlow API, Controller &amp; Providers">
<feature>onos-core</feature>
<feature>onos-api</feature>
<bundle>mvn:io.netty/netty/3.9.2.Final</bundle>
<bundle>mvn:org.onlab.onos/onos-of-api/1.0.0-SNAPSHOT</bundle>
......@@ -74,14 +74,14 @@
<feature name="onos-app-tvue" version="1.0.0"
description="ONOS sample topology viewer application">
<feature>onos-core</feature>
<feature>onos-api</feature>
<feature>onos-thirdparty-web</feature>
<bundle>mvn:org.onlab.onos/onos-app-tvue/1.0.0-SNAPSHOT</bundle>
</feature>
<feature name="onos-app-fwd" version="1.0.0"
description="ONOS sample forwarding application">
<feature>onos-core</feature>
<feature>onos-api</feature>
<bundle>mvn:org.onlab.onos/onos-app-fwd/1.0.0-SNAPSHOT</bundle>
</feature>
......
#!/bin/bash
#-------------------------------------------------------------------------------
# Starts ONOS Apache Karaf container
#-------------------------------------------------------------------------------
cd $(dirname $0)/../apache-karaf-*/bin
./karaf "$@"
#!/bin/bash
#-------------------------------------------------------------------------------
# Packages ONOS distributable into onos.tar.gz
#-------------------------------------------------------------------------------
export M2_REPO=${M2_REPO:-~/.m2/repository}
export KARAF_ZIP=${KARAF_ZIP:-~/Downloads/apache-karaf-3.0.1.zip}
export KARAF_DIST=$(basename $KARAF_ZIP .zip)
export ONOS_VERSION=${ONOS_VERSION:-1.0.0-SNAPSHOT}
export ONOS_STAGE_ROOT=${ONOS_STAGE_ROOT:-/tmp}
export ONOS_BITS=onos-$ONOS_VERSION
export ONOS_STAGE=$ONOS_STAGE_ROOT/$ONOS_BITS
# Bail on any errors
set -e
rm -fr $ONOS_STAGE # Remove this when package script is completed
# Make sure we have the original apache karaf bits first
[ ! -d $M2_REPO ] && echo "M2 repository $M2_REPO not found" && exit 1
[ ! -f $KARAF_ZIP ] && echo "Apache Karaf bits $KARAF_ZIP not found" && exit 1
[ -d $ONOS_STAGE ] && echo "ONOS stage $ONOS_STAGE already exists" && exit 1
# Create the stage directory and warp into it
mkdir -p $ONOS_STAGE
cd $ONOS_STAGE
# Unroll the Apache Karaf bits and make the ONOS top-level directories.
unzip $KARAF_ZIP
mkdir bin
mkdir lib
# Stage the ONOS admin scripts
cp -r $ONOS_ROOT/tools/package/bin .
# Stage the ONOS bundles
mkdir -p lib/org/onlab
cp -r $M2_REPO/org/onlab lib/org
# Patch the Apache Karaf distribution file to point to the lib as maven repo
#perl -pi.old -e "s|^org.ops4j.pax.url.mvn.repositories= |org.ops4j.pax.url.mvn.repositories= \\\n file:../../lib, |" $ONOS_STAGE/$KARAF_DIST/etc/org.ops4j.pax.url.mvn.cfg
# Patch the Apache Karaf distribution file to add ONOS features repository
perl -pi.old -e "s|^(featuresRepositories=.*)|\1,mvn:org.onlab.onos/onos-features/$ONOS_VERSION/xml/features|" \
$ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg
# Patch the Apache Karaf distribution file to load ONOS features
perl -pi.old -e 's|^(featuresBoot=.*)|\1,onos-api,onos-core,onos-cli,onos-rest,onos-gui,onos-openflow,onos-app-tvue|' \
/tmp/onos-1.0.0-SNAPSHOT/apache-karaf-3.0.1/etc/org.apache.karaf.features.cfg
# Patch the Apache Karaf distribution with ONOS branding bundle
cp $M2_REPO/org/onlab/onos/onos-branding/$ONOS_VERSION/onos-branding-*.jar \
$ONOS_STAGE/apache-karaf-*/lib
# Now package up the ONOS tar file
cd $ONOS_STAGE_ROOT
tar zcf $ONOS_BITS.tar.gz $ONOS_BITS