blob: 325718a4cea8ed3f907eeb4fa23f0de0b7cb2e16 [file] [log] [blame]
Jonathan Hart062a2e82014-02-03 09:41:57 -08001package net.onrc.onos.ofcontroller.networkgraph;
2
3import java.util.Collection;
4import java.util.Collections;
5import java.util.HashMap;
Yuta HIGUCHI1929b5d2014-02-05 20:14:51 -08006import java.util.HashSet;
Jonathan Hart062a2e82014-02-03 09:41:57 -08007import java.util.Map;
Yuta HIGUCHI1929b5d2014-02-05 20:14:51 -08008import java.util.Set;
Jonathan Hart062a2e82014-02-03 09:41:57 -08009
Jonathan Hart062a2e82014-02-03 09:41:57 -080010import net.onrc.onos.datastore.topology.RCPort;
11import net.onrc.onos.datastore.topology.RCSwitch;
12import net.onrc.onos.ofcontroller.util.FlowEntry;
Yuta HIGUCHI1929b5d2014-02-05 20:14:51 -080013import edu.stanford.ramcloud.JRamCloud.ObjectDoesntExistException;
14import edu.stanford.ramcloud.JRamCloud.WrongVersionException;
Jonathan Hart062a2e82014-02-03 09:41:57 -080015
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080016/**
17 * Switch Object stored in In-memory Topology.
18 *
19 * TODO REMOVE following design memo: This object itself may hold the DBObject,
20 * but this Object itself will not issue any read/write to the DataStore.
21 */
Jonathan Hart062a2e82014-02-03 09:41:57 -080022public class SwitchImpl extends NetworkGraphObject implements Switch {
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080023
Jonathan Hart062a2e82014-02-03 09:41:57 -080024 private long dpid;
25 private final Map<Short, Port> ports;
26
27 public SwitchImpl(NetworkGraph graph) {
28 super(graph);
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080029
Jonathan Hart062a2e82014-02-03 09:41:57 -080030 ports = new HashMap<Short, Port>();
31 }
32
33 @Override
34 public long getDpid() {
35 return dpid;
36 }
37
38 @Override
39 public Collection<Port> getPorts() {
40 return Collections.unmodifiableCollection(ports.values());
41 }
42
43 @Override
44 public Port getPort(short number) {
45 return ports.get(number);
46 }
47
48 @Override
49 public Collection<FlowEntry> getFlowEntries() {
50 // TODO Auto-generated method stub
51 return null;
52 }
53
54 @Override
55 public Iterable<Switch> getNeighbors() {
56 // TODO Auto-generated method stub
57 return null;
58 }
59
60 @Override
61 public Link getLinkToNeighbor(long neighborDpid) {
62 for (Link link : graph.getLinksFromSwitch(dpid)) {
63 if (link.getDestinationSwitch().getDpid() == neighborDpid) {
64 return link;
65 }
66 }
67 return null;
68 }
69
70 @Override
71 public Collection<Device> getDevices() {
72 // TODO Auto-generated method stub
73 return null;
74 }
75
76 public void setDpid(long dpid) {
77 this.dpid = dpid;
78 }
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080079
Jonathan Hart062a2e82014-02-03 09:41:57 -080080 public void addPort(Port port) {
81 this.ports.put(port.getNumber(), port);
82 }
83
84 @Override
85 public Iterable<Link> getLinks() {
Yuta HIGUCHI1929b5d2014-02-05 20:14:51 -080086 Set<Link> links = new HashSet<>();
87 for( Port p : ports.values()) {
88 links.add(p.getLink());
89 }
90 return links;
Jonathan Hart062a2e82014-02-03 09:41:57 -080091 }
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080092
Jonathan Hart062a2e82014-02-03 09:41:57 -080093 public void store() {
94 RCSwitch rcSwitch = new RCSwitch(dpid);
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080095
Jonathan Hart062a2e82014-02-03 09:41:57 -080096 for (Port port : ports.values()) {
97 RCPort rcPort = new RCPort(dpid, (long)port.getNumber());
98 rcSwitch.addPortId(rcPort.getId());
99 }
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -0800100
101
Jonathan Hart062a2e82014-02-03 09:41:57 -0800102 try {
103 rcSwitch.update();
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -0800104
Jonathan Hart062a2e82014-02-03 09:41:57 -0800105 } catch (ObjectDoesntExistException | WrongVersionException e) {
106 // TODO Auto-generated catch block
107 e.printStackTrace();
108 }
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -0800109
Jonathan Hart062a2e82014-02-03 09:41:57 -0800110 }
111}