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; ...@@ -15,6 +15,7 @@ import org.onlab.onos.net.topology.Topology;
15 import org.onlab.onos.net.topology.TopologyGraph; 15 import org.onlab.onos.net.topology.TopologyGraph;
16 import org.onlab.onos.net.topology.TopologyService; 16 import org.onlab.onos.net.topology.TopologyService;
17 import org.onlab.onos.net.topology.TopologyVertex; 17 import org.onlab.onos.net.topology.TopologyVertex;
18 +import org.onlab.packet.IPAddress;
18 import org.onlab.rest.BaseResource; 19 import org.onlab.rest.BaseResource;
19 20
20 import javax.ws.rs.GET; 21 import javax.ws.rs.GET;
...@@ -54,6 +55,7 @@ public class TopologyResource extends BaseResource { ...@@ -54,6 +55,7 @@ public class TopologyResource extends BaseResource {
54 ArrayNode vertexesNode = mapper.createArrayNode(); 55 ArrayNode vertexesNode = mapper.createArrayNode();
55 for (TopologyVertex vertex : graph.getVertexes()) { 56 for (TopologyVertex vertex : graph.getVertexes()) {
56 vertexesNode.add(json(mapper, vertex.deviceId(), 2, 57 vertexesNode.add(json(mapper, vertex.deviceId(), 2,
58 + vertex.deviceId().uri().getSchemeSpecificPart(),
57 deviceService.isAvailable(vertex.deviceId()))); 59 deviceService.isAvailable(vertex.deviceId())));
58 } 60 }
59 61
...@@ -70,14 +72,17 @@ public class TopologyResource extends BaseResource { ...@@ -70,14 +72,17 @@ public class TopologyResource extends BaseResource {
70 // Merge the exterior and interior vertexes and inject host links as 72 // Merge the exterior and interior vertexes and inject host links as
71 // the exterior edges. 73 // the exterior edges.
72 for (Host host : hostService.getHosts()) { 74 for (Host host : hostService.getHosts()) {
73 - vertexesNode.add(json(mapper, host.id(), 3, true)); 75 + Set<IPAddress> ipAddresses = host.ipAddresses();
76 + IPAddress ipAddress = ipAddresses.isEmpty() ? null : ipAddresses.iterator().next();
77 + String label = ipAddress != null ? ipAddress.toString() : host.mac().toString();
78 + vertexesNode.add(json(mapper, host.id(), 3, label, true));
74 edgesNode.add(json(mapper, 1, host.location(), new ConnectPoint(host.id(), portNumber(-1)))); 79 edgesNode.add(json(mapper, 1, host.location(), new ConnectPoint(host.id(), portNumber(-1))));
75 } 80 }
76 81
77 // Now put the vertexes and edges into a root node and ship them off 82 // Now put the vertexes and edges into a root node and ship them off
78 ObjectNode rootNode = mapper.createObjectNode(); 83 ObjectNode rootNode = mapper.createObjectNode();
79 - rootNode.put("vertexes", vertexesNode); 84 + rootNode.set("vertexes", vertexesNode);
80 - rootNode.put("edges", edgesNode); 85 + rootNode.set("edges", edgesNode);
81 return Response.ok(rootNode.toString()).build(); 86 return Response.ok(rootNode.toString()).build();
82 } 87 }
83 88
...@@ -126,12 +131,12 @@ public class TopologyResource extends BaseResource { ...@@ -126,12 +131,12 @@ public class TopologyResource extends BaseResource {
126 return aggLinks; 131 return aggLinks;
127 } 132 }
128 133
129 -
130 // Produces JSON for a graph vertex. 134 // Produces JSON for a graph vertex.
131 private ObjectNode json(ObjectMapper mapper, ElementId id, int group, 135 private ObjectNode json(ObjectMapper mapper, ElementId id, int group,
132 - boolean isOnline) { 136 + String label, boolean isOnline) {
133 return mapper.createObjectNode() 137 return mapper.createObjectNode()
134 .put("name", id.uri().toString()) 138 .put("name", id.uri().toString())
139 + .put("label", label)
135 .put("group", group) 140 .put("group", group)
136 .put("online", isOnline); 141 .put("online", isOnline);
137 } 142 }
......
...@@ -147,8 +147,8 @@ ...@@ -147,8 +147,8 @@
147 } 147 }
148 return false; 148 return false;
149 } 149 }
150 - node = {"id": vertex.name, "group": vertex.group, 150 + node = {"id": vertex.name, "label": vertex.label,
151 - "online": vertex.online, "stamp": stamp}; 151 + "group": vertex.group, "online": vertex.online, "stamp": stamp};
152 nodes.push(node); 152 nodes.push(node);
153 topo.vertexes[vertex.name] = node; 153 topo.vertexes[vertex.name] = node;
154 update(); 154 update();
...@@ -288,7 +288,7 @@ ...@@ -288,7 +288,7 @@
288 .attr("class", "textClass") 288 .attr("class", "textClass")
289 .attr("x", 20) 289 .attr("x", 20)
290 .attr("y", ".31em") 290 .attr("y", ".31em")
291 - .text(function (d) { return d.id; }); 291 + .text(function (d) { return d.label; });
292 292
293 node.exit().remove(); 293 node.exit().remove();
294 294
......
...@@ -4,12 +4,17 @@ import org.onlab.onos.net.DeviceId; ...@@ -4,12 +4,17 @@ import org.onlab.onos.net.DeviceId;
4 4
5 /** 5 /**
6 * Service for injecting flow rules into the environment and for obtaining 6 * Service for injecting flow rules into the environment and for obtaining
7 - * information about flow rules already in the environment. 7 + * information about flow rules already in the environment. This implements
8 + * semantics of a distributed authoritative flow table where the master copy
9 + * of the flow rules lies with the controller and the devices hold only the
10 + * 'cached' copy.
8 */ 11 */
9 public interface FlowRuleService { 12 public interface FlowRuleService {
10 13
11 /** 14 /**
12 * Returns the collection of flow entries applied on the specified device. 15 * Returns the collection of flow entries applied on the specified device.
16 + * This will include flow rules which may not yet have been applied to
17 + * the device.
13 * 18 *
14 * @param deviceId device identifier 19 * @param deviceId device identifier
15 * @return collection of flow rules 20 * @return collection of flow rules
...@@ -17,7 +22,9 @@ public interface FlowRuleService { ...@@ -17,7 +22,9 @@ public interface FlowRuleService {
17 Iterable<FlowEntry> getFlowEntries(DeviceId deviceId); 22 Iterable<FlowEntry> getFlowEntries(DeviceId deviceId);
18 23
19 /** 24 /**
20 - * Applies the specified flow rules onto their respective devices. 25 + * Applies the specified flow rules onto their respective devices. These
26 + * flow rules will be retained by the system and re-applied anytime the
27 + * device reconnects to the controller.
21 * 28 *
22 * @param flowRules one or more flow rules 29 * @param flowRules one or more flow rules
23 * throws SomeKindOfException that indicates which ones were applied and 30 * throws SomeKindOfException that indicates which ones were applied and
...@@ -26,7 +33,9 @@ public interface FlowRuleService { ...@@ -26,7 +33,9 @@ public interface FlowRuleService {
26 void applyFlowRules(FlowRule... flowRules); 33 void applyFlowRules(FlowRule... flowRules);
27 34
28 /** 35 /**
29 - * Removes the specified flow rules from their respective devices. 36 + * Removes the specified flow rules from their respective devices. If the
37 + * device is not presently connected to the controller, these flow will
38 + * be removed once the device reconnects.
30 * 39 *
31 * @param flowRules one or more flow rules 40 * @param flowRules one or more flow rules
32 * throws SomeKindOfException that indicates which ones were removed and 41 * throws SomeKindOfException that indicates which ones were removed and
...@@ -34,6 +43,10 @@ public interface FlowRuleService { ...@@ -34,6 +43,10 @@ public interface FlowRuleService {
34 */ 43 */
35 void removeFlowRules(FlowRule... flowRules); 44 void removeFlowRules(FlowRule... flowRules);
36 45
46 +
47 + // void addInitialFlowContributor(InitialFlowContributor contributor);
48 + // void removeInitialFlowContributor(InitialFlowContributor contributor);
49 +
37 /** 50 /**
38 * Adds the specified flow rule listener. 51 * Adds the specified flow rule listener.
39 * 52 *
......
...@@ -39,27 +39,27 @@ ...@@ -39,27 +39,27 @@
39 39
40 <feature name="onos-rest" version="1.0.0" 40 <feature name="onos-rest" version="1.0.0"
41 description="ONOS REST API components"> 41 description="ONOS REST API components">
42 - <feature>onos-core</feature> 42 + <feature>onos-api</feature>
43 <feature>onos-thirdparty-web</feature> 43 <feature>onos-thirdparty-web</feature>
44 <bundle>mvn:org.onlab.onos/onos-rest/1.0.0-SNAPSHOT</bundle> 44 <bundle>mvn:org.onlab.onos/onos-rest/1.0.0-SNAPSHOT</bundle>
45 </feature> 45 </feature>
46 46
47 <feature name="onos-gui" version="1.0.0" 47 <feature name="onos-gui" version="1.0.0"
48 description="ONOS GUI console components"> 48 description="ONOS GUI console components">
49 - <feature>onos-core</feature> 49 + <feature>onos-api</feature>
50 <feature>onos-thirdparty-web</feature> 50 <feature>onos-thirdparty-web</feature>
51 <bundle>mvn:org.onlab.onos/onos-gui/1.0.0-SNAPSHOT</bundle> 51 <bundle>mvn:org.onlab.onos/onos-gui/1.0.0-SNAPSHOT</bundle>
52 </feature> 52 </feature>
53 53
54 <feature name="onos-cli" version="1.0.0" 54 <feature name="onos-cli" version="1.0.0"
55 description="ONOS admin command console components"> 55 description="ONOS admin command console components">
56 - <feature>onos-core</feature> 56 + <feature>onos-api</feature>
57 <bundle>mvn:org.onlab.onos/onos-cli/1.0.0-SNAPSHOT</bundle> 57 <bundle>mvn:org.onlab.onos/onos-cli/1.0.0-SNAPSHOT</bundle>
58 </feature> 58 </feature>
59 59
60 <feature name="onos-openflow" version="1.0.0" 60 <feature name="onos-openflow" version="1.0.0"
61 description="ONOS OpenFlow API, Controller &amp; Providers"> 61 description="ONOS OpenFlow API, Controller &amp; Providers">
62 - <feature>onos-core</feature> 62 + <feature>onos-api</feature>
63 <bundle>mvn:io.netty/netty/3.9.2.Final</bundle> 63 <bundle>mvn:io.netty/netty/3.9.2.Final</bundle>
64 64
65 <bundle>mvn:org.onlab.onos/onos-of-api/1.0.0-SNAPSHOT</bundle> 65 <bundle>mvn:org.onlab.onos/onos-of-api/1.0.0-SNAPSHOT</bundle>
...@@ -74,14 +74,14 @@ ...@@ -74,14 +74,14 @@
74 74
75 <feature name="onos-app-tvue" version="1.0.0" 75 <feature name="onos-app-tvue" version="1.0.0"
76 description="ONOS sample topology viewer application"> 76 description="ONOS sample topology viewer application">
77 - <feature>onos-core</feature> 77 + <feature>onos-api</feature>
78 <feature>onos-thirdparty-web</feature> 78 <feature>onos-thirdparty-web</feature>
79 <bundle>mvn:org.onlab.onos/onos-app-tvue/1.0.0-SNAPSHOT</bundle> 79 <bundle>mvn:org.onlab.onos/onos-app-tvue/1.0.0-SNAPSHOT</bundle>
80 </feature> 80 </feature>
81 81
82 <feature name="onos-app-fwd" version="1.0.0" 82 <feature name="onos-app-fwd" version="1.0.0"
83 description="ONOS sample forwarding application"> 83 description="ONOS sample forwarding application">
84 - <feature>onos-core</feature> 84 + <feature>onos-api</feature>
85 <bundle>mvn:org.onlab.onos/onos-app-fwd/1.0.0-SNAPSHOT</bundle> 85 <bundle>mvn:org.onlab.onos/onos-app-fwd/1.0.0-SNAPSHOT</bundle>
86 </feature> 86 </feature>
87 87
......
1 +#!/bin/bash
2 +#-------------------------------------------------------------------------------
3 +# Starts ONOS Apache Karaf container
4 +#-------------------------------------------------------------------------------
5 +
6 +cd $(dirname $0)/../apache-karaf-*/bin
7 +./karaf "$@"
8 +
1 +#!/bin/bash
2 +#-------------------------------------------------------------------------------
3 +# Packages ONOS distributable into onos.tar.gz
4 +#-------------------------------------------------------------------------------
5 +
6 +export M2_REPO=${M2_REPO:-~/.m2/repository}
7 +export KARAF_ZIP=${KARAF_ZIP:-~/Downloads/apache-karaf-3.0.1.zip}
8 +export KARAF_DIST=$(basename $KARAF_ZIP .zip)
9 +
10 +export ONOS_VERSION=${ONOS_VERSION:-1.0.0-SNAPSHOT}
11 +export ONOS_STAGE_ROOT=${ONOS_STAGE_ROOT:-/tmp}
12 +export ONOS_BITS=onos-$ONOS_VERSION
13 +export ONOS_STAGE=$ONOS_STAGE_ROOT/$ONOS_BITS
14 +
15 +# Bail on any errors
16 +set -e
17 +
18 +rm -fr $ONOS_STAGE # Remove this when package script is completed
19 +
20 +# Make sure we have the original apache karaf bits first
21 +[ ! -d $M2_REPO ] && echo "M2 repository $M2_REPO not found" && exit 1
22 +[ ! -f $KARAF_ZIP ] && echo "Apache Karaf bits $KARAF_ZIP not found" && exit 1
23 +[ -d $ONOS_STAGE ] && echo "ONOS stage $ONOS_STAGE already exists" && exit 1
24 +
25 +# Create the stage directory and warp into it
26 +mkdir -p $ONOS_STAGE
27 +cd $ONOS_STAGE
28 +
29 +# Unroll the Apache Karaf bits and make the ONOS top-level directories.
30 +unzip $KARAF_ZIP
31 +mkdir bin
32 +mkdir lib
33 +
34 +# Stage the ONOS admin scripts
35 +cp -r $ONOS_ROOT/tools/package/bin .
36 +
37 +# Stage the ONOS bundles
38 +mkdir -p lib/org/onlab
39 +cp -r $M2_REPO/org/onlab lib/org
40 +
41 +
42 +# Patch the Apache Karaf distribution file to point to the lib as maven repo
43 +#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
44 +
45 +# Patch the Apache Karaf distribution file to add ONOS features repository
46 +perl -pi.old -e "s|^(featuresRepositories=.*)|\1,mvn:org.onlab.onos/onos-features/$ONOS_VERSION/xml/features|" \
47 + $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg
48 +
49 +# Patch the Apache Karaf distribution file to load ONOS features
50 +perl -pi.old -e 's|^(featuresBoot=.*)|\1,onos-api,onos-core,onos-cli,onos-rest,onos-gui,onos-openflow,onos-app-tvue|' \
51 + /tmp/onos-1.0.0-SNAPSHOT/apache-karaf-3.0.1/etc/org.apache.karaf.features.cfg
52 +
53 +# Patch the Apache Karaf distribution with ONOS branding bundle
54 +cp $M2_REPO/org/onlab/onos/onos-branding/$ONOS_VERSION/onos-branding-*.jar \
55 + $ONOS_STAGE/apache-karaf-*/lib
56 +
57 +# Now package up the ONOS tar file
58 +cd $ONOS_STAGE_ROOT
59 +tar zcf $ONOS_BITS.tar.gz $ONOS_BITS