Skip to content
Snippets Groups Projects
Commit f9cf9abf authored by Alex Reimers's avatar Alex Reimers
Browse files

First checking for ITopology REST API. Links between OpenFlow switches...

First checking for ITopology REST API. Links between OpenFlow switches connected to the controller can now be seen through /wm/topology/links. [#23518013]
parent 15ee0a0c
No related branches found
No related tags found
No related merge requests found
......@@ -80,6 +80,7 @@ import net.floodlightcontroller.storage.memory.MemoryStorageSource;
import net.floodlightcontroller.storage.web.StorageWebRoutable;
import net.floodlightcontroller.topology.ITopologyAware;
import net.floodlightcontroller.topology.internal.TopologyImpl;
import net.floodlightcontroller.topology.web.TopologyWebRouteable;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.buffer.ChannelBuffer;
......@@ -1427,6 +1428,7 @@ public class Controller
restlets.add(new CoreWebRoutable());
restlets.add(new StorageWebRoutable());
restlets.add(new TopologyWebRouteable());
JacksonCustomConverter.replaceConverter();
}
......
......@@ -21,6 +21,7 @@ import java.util.List;
import net.floodlightcontroller.core.web.serializers.EventHistoryAttachmentPointJSONSerializer;
import net.floodlightcontroller.core.web.serializers.EventHistoryBaseInfoJSONSerializer;
import net.floodlightcontroller.core.web.serializers.LinkTupleSerializer;
import net.floodlightcontroller.core.web.serializers.OFFeaturesReplyJSONSerializer;
import net.floodlightcontroller.core.web.serializers.OFMatchJSONSerializer;
import net.floodlightcontroller.core.web.serializers.OFPhysicalPortJSONSerializer;
......@@ -67,6 +68,7 @@ public class JacksonCustomConverter extends JacksonConverter {
jsonModule.addSerializer(new PerfMonOneComponentTimeJSONSerializer());
jsonModule.addSerializer(
new PerfMonCumulativeTimeBucketJSONSerializer());
jsonModule.addSerializer(new LinkTupleSerializer());
jsonObjectMapper.registerModule(jsonModule);
}
......
package net.floodlightcontroller.core.web.serializers;
import java.io.IOException;
import net.floodlightcontroller.topology.LinkTuple;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
import org.openflow.util.HexString;
public class LinkTupleSerializer extends JsonSerializer<LinkTuple> {
/**
* Serializes the @LinkTuple object.
* @param linkTuple The LinkTuple to serialize
* @param jGen The JSON Generator to use
* @param serializer The Jackson serializer provider
*/
@Override
public void serialize(LinkTuple linkTuple, JsonGenerator jGen, SerializerProvider serializer) throws IOException, JsonProcessingException {
jGen.writeStartObject();
jGen.writeNumberField("dst-port", linkTuple.getDst().getPort());
jGen.writeStringField("dst-switch", HexString.toHexString(linkTuple.getDst().getSw().getId()));
jGen.writeNumberField("src-port", linkTuple.getSrc().getPort());
jGen.writeStringField("src-switch", HexString.toHexString(linkTuple.getSrc().getSw().getId()));
jGen.writeEndObject();
}
/**
* Tells SimpleModule that we are the serializer for @LinkTuple
*/
@Override
public Class<LinkTuple> handledType() {
return LinkTuple.class;
}
}
package net.floodlightcontroller.topology.web;
import java.util.HashSet;
import java.util.Set;
import net.floodlightcontroller.topology.ITopology;
import net.floodlightcontroller.topology.LinkTuple;
import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;
public class LinksResource extends ServerResource {
@Get("json")
public Set<LinkTuple> retrieve() {
ITopology topo = (ITopology)getContext().getAttributes().get("topology");
Set <LinkTuple> links = new HashSet<LinkTuple>();
if (topo != null) {
for (Set<LinkTuple> linkSet : topo.getSwitchLinks().values()) {
links.addAll(linkSet);
}
}
return links;
}
}
package net.floodlightcontroller.topology.web;
import org.restlet.Context;
import org.restlet.Restlet;
import org.restlet.routing.Router;
import net.floodlightcontroller.core.web.RestletRoutable;
public class TopologyWebRouteable implements RestletRoutable {
@Override
public Restlet getRestlet(Context context) {
Router router = new Router(context);
router.attach("/links", LinksResource.class);
return router;
}
@Override
public String basePath() {
return "/wm/topology";
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment