Created basic network graph objects, and implementation for the southbound API against the Ramcloud datastore
Change-Id: I2172dacb171f27ba2099ee5a52835030d2004689
Created basic objects and southbound API to build the network graph
Change-Id: I061efdf10e5e8549f7192844d10781dc28ee62d4
Added basic northbound get switch method on network graph
Change-Id: I4f2e4d4a4df00979abc927ef0772997dcdebc4e2
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchImpl.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchImpl.java
new file mode 100644
index 0000000..7b83224
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchImpl.java
@@ -0,0 +1,99 @@
+package net.onrc.onos.ofcontroller.networkgraph;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import edu.stanford.ramcloud.JRamCloud.ObjectDoesntExistException;
+import edu.stanford.ramcloud.JRamCloud.WrongVersionException;
+import net.onrc.onos.datastore.topology.RCPort;
+import net.onrc.onos.datastore.topology.RCSwitch;
+import net.onrc.onos.ofcontroller.util.FlowEntry;
+
+public class SwitchImpl extends NetworkGraphObject implements Switch {
+
+ private long dpid;
+ private final Map<Short, Port> ports;
+
+ public SwitchImpl(NetworkGraph graph) {
+ super(graph);
+
+ ports = new HashMap<Short, Port>();
+ }
+
+ @Override
+ public long getDpid() {
+ return dpid;
+ }
+
+ @Override
+ public Collection<Port> getPorts() {
+ return Collections.unmodifiableCollection(ports.values());
+ }
+
+ @Override
+ public Port getPort(short number) {
+ return ports.get(number);
+ }
+
+ @Override
+ public Collection<FlowEntry> getFlowEntries() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Iterable<Switch> getNeighbors() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Link getLinkToNeighbor(long neighborDpid) {
+ for (Link link : graph.getLinksFromSwitch(dpid)) {
+ if (link.getDestinationSwitch().getDpid() == neighborDpid) {
+ return link;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public Collection<Device> getDevices() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void setDpid(long dpid) {
+ this.dpid = dpid;
+ }
+
+ public void addPort(Port port) {
+ this.ports.put(port.getNumber(), port);
+ }
+
+ @Override
+ public Iterable<Link> getLinks() {
+ return graph.getLinksFromSwitch(dpid);
+ }
+
+ public void store() {
+ RCSwitch rcSwitch = new RCSwitch(dpid);
+
+ for (Port port : ports.values()) {
+ RCPort rcPort = new RCPort(dpid, (long)port.getNumber());
+ rcSwitch.addPortId(rcPort.getId());
+ }
+
+
+ try {
+ rcSwitch.update();
+
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+}