blob: 5ae7b137313e71c048f45f77e16f55175c0fbd8f [file] [log] [blame]
Toshio Koideebdbb622014-02-12 20:28:38 -08001package net.onrc.onos.intent;
2
Toshio Koide0c9106d2014-02-19 15:26:38 -08003import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
Pavlin Radoslavov6397a7f2014-02-18 14:56:52 -08004import net.onrc.onos.ofcontroller.networkgraph.NetworkGraphImpl;
Toshio Koideebdbb622014-02-12 20:28:38 -08005import net.onrc.onos.ofcontroller.networkgraph.Link;
6import net.onrc.onos.ofcontroller.networkgraph.LinkImpl;
Toshio Koide0c9106d2014-02-19 15:26:38 -08007import net.onrc.onos.ofcontroller.networkgraph.Port;
Toshio Koideebdbb622014-02-12 20:28:38 -08008import net.onrc.onos.ofcontroller.networkgraph.Switch;
9import net.onrc.onos.ofcontroller.networkgraph.SwitchImpl;
10
Toshio Koide066506e2014-02-20 19:52:09 -080011/**
12 * @author Toshio Koide (t-koide@onlab.us)
13 */
Pavlin Radoslavov6397a7f2014-02-18 14:56:52 -080014public class MockNetworkGraph extends NetworkGraphImpl {
Toshio Koide0c9106d2014-02-19 15:26:38 -080015 class DetachableLinkImpl extends LinkImpl {
16 public DetachableLinkImpl(NetworkGraph graph, Port srcPort, Port dstPort) {
17 super(graph, srcPort, dstPort);
18 }
19
20 public void detachFromGraph() {
21 unsetFromPorts();
Toshio Koide066506e2014-02-20 19:52:09 -080022 }
Toshio Koide0c9106d2014-02-19 15:26:38 -080023 }
Toshio Koideebdbb622014-02-12 20:28:38 -080024 public Switch addSwitch(Long switchId) {
25 SwitchImpl sw = new SwitchImpl(this, switchId);
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080026 this.putSwitch(sw);
Toshio Koideebdbb622014-02-12 20:28:38 -080027 return sw;
28
29 }
30
31 public Link addLink(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
Toshio Koide0c9106d2014-02-19 15:26:38 -080032 return new DetachableLinkImpl(
Toshio Koideebdbb622014-02-12 20:28:38 -080033 this,
34 getSwitch(srcDpid).getPort(srcPortNo),
35 getSwitch(dstDpid).getPort(dstPortNo));
36 }
37
38 public Link[] addBidirectionalLinks(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
39 Link[] links = new Link[2];
40 links[0] = addLink(srcDpid, srcPortNo, dstDpid, dstPortNo);
41 links[1] = addLink(dstDpid, dstPortNo, srcDpid, srcPortNo);
42
43 return links;
44 }
Toshio Koide066506e2014-02-20 19:52:09 -080045
Toshio Koideebdbb622014-02-12 20:28:38 -080046 public void createSampleTopology() {
47 // add 10 switches (24 ports switch)
48 for (Long dpid=1L; dpid<10L; dpid++) {
49 SwitchImpl sw = (SwitchImpl) addSwitch(dpid);
50 for (Long j=1L; j<=24L; j++) {
51 sw.addPort(j);
52 }
53 }
54
55 // add loop path
56 addBidirectionalLinks(1L, 1L, 2L, 2L);
57 addBidirectionalLinks(2L, 1L, 3L, 2L);
58 addBidirectionalLinks(3L, 1L, 4L, 2L);
59 addBidirectionalLinks(4L, 1L, 5L, 2L);
60 addBidirectionalLinks(5L, 1L, 6L, 2L);
61 addBidirectionalLinks(6L, 1L, 7L, 2L);
62 addBidirectionalLinks(7L, 1L, 8L, 2L);
63 addBidirectionalLinks(8L, 1L, 9L, 2L);
64 addBidirectionalLinks(9L, 1L, 1L, 2L);
65
66 // add other links
67 addBidirectionalLinks(1L, 3L, 5L, 3L);
68 addBidirectionalLinks(2L, 4L, 5L, 4L);
69 addBidirectionalLinks(2L, 5L, 7L, 5L);
70 addBidirectionalLinks(3L, 6L, 7L, 6L);
71 addBidirectionalLinks(3L, 7L, 8L, 7L);
72 addBidirectionalLinks(3L, 8L, 9L, 8L);
73 addBidirectionalLinks(4L, 9l, 9L, 9L);
74
75 // set capacity of all links to 1000Mbps
76 for (Link link: getLinks()) {
77 ((LinkImpl)link).setCapacity(1000.0);
78 }
79 }
Toshio Koide0c9106d2014-02-19 15:26:38 -080080
81 public void removeLink(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
82 DetachableLinkImpl link = (DetachableLinkImpl)getSwitch(srcDpid).getPort(srcPortNo).getOutgoingLink();
Pavlin Radoslavov7c8f69a2014-02-19 19:01:45 -080083 if (link.getDstSwitch().getDpid().equals(dstDpid) && link.getDstPort().getNumber().equals(dstPortNo)) {
Toshio Koide0c9106d2014-02-19 15:26:38 -080084 link.detachFromGraph();
85 }
86 }
Toshio Koideebdbb622014-02-12 20:28:38 -080087}