blob: 05660f7681497e188c50116bc538ce4f8b4ccb5a [file] [log] [blame]
TeruU5d2c9392014-06-09 20:02:02 -07001package net.onrc.onos.core.topology;
2
3import net.floodlightcontroller.util.MACAddress;
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -07004import net.onrc.onos.core.util.Dpid;
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -07005import net.onrc.onos.core.util.LinkTuple;
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -07006import net.onrc.onos.core.util.PortNumber;
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -07007import net.onrc.onos.core.util.SwitchPort;
TeruU5d2c9392014-06-09 20:02:02 -07008
9/**
10 * A mock class of Topology.
Pavlin Radoslavovefa17b22014-08-01 16:57:56 -070011 * This class should be used only by test code.
TeruU5d2c9392014-06-09 20:02:02 -070012 */
13public class MockTopology extends TopologyImpl {
14 // TODO this class doesn't seem like it should extend TopologyImpl. It
15 // isn't a Topology, it's more of a TopologyBuilder - methods to
16 // create an populate a fake topology that's not based on discovery
17 // data from the driver modules.
18 // We may well need a MockTopology, but that's not what this class is
19 // doing.
20
21 public static final Long LOCAL_PORT = 0xFFFEL;
22 public SwitchImpl sw1, sw2, sw3, sw4;
23
24 public Switch addSwitch(Long switchId) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070025 SwitchEvent sw = new SwitchEvent(new Dpid(switchId));
TeruU5d2c9392014-06-09 20:02:02 -070026 this.putSwitch(sw);
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070027 return this.getSwitch(sw.getDpid());
TeruU5d2c9392014-06-09 20:02:02 -070028 }
29
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070030 public Port addPort(Switch sw, Long portNumber) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070031 PortEvent port = new PortEvent(sw.getDpid(),
Yuta HIGUCHIa507baf2014-08-22 13:42:40 -070032 PortNumber.uint16(portNumber.shortValue()));
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070033 ((TopologyImpl) this).putPort(port);
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070034 return this.getPort(port.getSwitchPort());
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070035 }
36
Pavlin Radoslavovefa17b22014-08-01 16:57:56 -070037 public void addBidirectionalLinks(Long srcDpid, Long srcPortNo,
38 Long dstDpid, Long dstPortNo) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070039 addBidirectionalLinks(srcDpid, srcPortNo, dstDpid, dstPortNo, null);
40 }
41
Pavlin Radoslavovefa17b22014-08-01 16:57:56 -070042 public void addBidirectionalLinks(Long srcDpid, Long srcPortNo,
43 Long dstDpid, Long dstPortNo,
44 Double capacity) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070045 LinkEvent[] links = new LinkEvent[2];
46 final SwitchPort src = new SwitchPort(srcDpid, srcPortNo);
47 final SwitchPort dst = new SwitchPort(dstDpid, dstPortNo);
48 links[0] = new LinkEvent(src, dst);
49 links[1] = new LinkEvent(dst, src);
50 if (capacity != null) {
51 links[0].setCapacity(capacity);
52 links[1].setCapacity(capacity);
53 }
TeruU5d2c9392014-06-09 20:02:02 -070054
55 putLink(links[0]);
56 putLink(links[1]);
TeruU5d2c9392014-06-09 20:02:02 -070057 }
58
59 /**
Pavlin Radoslavovefa17b22014-08-01 16:57:56 -070060 * Creates a sample topology of 4 switches and 5 bidirectional links.
TeruU5d2c9392014-06-09 20:02:02 -070061 * <pre>
62 * [1] --- [2]
63 * | / |
64 * | / |
65 * [4] --- [3]
66 * </pre>
67 */
68 public void createSampleTopology1() {
69 sw1 = (SwitchImpl) addSwitch(1L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070070 addPort(sw1, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -070071 sw2 = (SwitchImpl) addSwitch(2L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070072 addPort(sw2, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -070073 sw3 = (SwitchImpl) addSwitch(3L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070074 addPort(sw3, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -070075 sw4 = (SwitchImpl) addSwitch(4L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070076 addPort(sw4, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -070077
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070078 addPort(sw1, 12L); // sw1 -> sw2
79 addPort(sw1, 14L); // sw1 -> sw4
80 addPort(sw2, 21L); // sw2 -> sw1
81 addPort(sw2, 23L); // sw2 -> sw3
82 addPort(sw2, 24L); // sw2 -> sw4
83 addPort(sw3, 32L); // sw3 -> sw2
84 addPort(sw3, 34L); // sw3 -> sw4
85 addPort(sw4, 41L); // sw4 -> sw1
86 addPort(sw4, 42L); // sw4 -> sw2
87 addPort(sw4, 43L); // sw4 -> sw3
TeruU5d2c9392014-06-09 20:02:02 -070088
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070089 addBidirectionalLinks(1L, 12L, 2L, 21L, 1000.0);
90 addBidirectionalLinks(2L, 23L, 3L, 32L, 1000.0);
91 addBidirectionalLinks(3L, 34L, 4L, 43L, 1000.0);
92 addBidirectionalLinks(4L, 41L, 1L, 14L, 1000.0);
93 addBidirectionalLinks(2L, 24L, 4L, 42L, 1000.0);
TeruU5d2c9392014-06-09 20:02:02 -070094 }
95
96 /**
Pavlin Radoslavovefa17b22014-08-01 16:57:56 -070097 * Creates a sample topology of 4 switches and 5 bidirectional links.
TeruU5d2c9392014-06-09 20:02:02 -070098 * <pre>
99 *
100 *
101 * [H1]-[1] --- [2]
102 * | / |
103 * | / |
104 * [4] --- [3]-[H3]
105 * </pre>
106 */
107 public void createSampleTopology2() {
108 sw1 = (SwitchImpl) addSwitch(1L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -0700109 addPort(sw1, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -0700110 sw2 = (SwitchImpl) addSwitch(2L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -0700111 addPort(sw2, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -0700112 sw3 = (SwitchImpl) addSwitch(3L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -0700113 addPort(sw3, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -0700114 sw4 = (SwitchImpl) addSwitch(4L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -0700115 addPort(sw4, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -0700116
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -0700117 Port port12 = addPort(sw1, 12L); // sw1 -> sw2
118 Port port14 = addPort(sw1, 14L); // sw1 -> sw4
119 Port port15 = addPort(sw1, 15L); // sw1 -> h1
120 Port port21 = addPort(sw2, 21L); // sw2 -> sw1
121 Port port23 = addPort(sw2, 23L); // sw2 -> sw3
122 Port port24 = addPort(sw2, 24L); // sw2 -> sw4
123 Port port32 = addPort(sw3, 32L); // sw3 -> sw2
124 Port port34 = addPort(sw3, 34L); // sw3 -> sw4
125 Port port35 = addPort(sw3, 35L); // sw3 -> h3
126 Port port41 = addPort(sw4, 41L); // sw4 -> sw1
127 Port port42 = addPort(sw4, 42L); // sw4 -> sw2
128 Port port43 = addPort(sw4, 43L); // sw4 -> sw3
TeruU5d2c9392014-06-09 20:02:02 -0700129
130 MACAddress mac1 = MACAddress.valueOf("00:44:33:22:11:00");
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700131 HostEvent host1 = new HostEvent(mac1);
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700132 host1.addAttachmentPoint(port15.getSwitchPort());
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700133 host1.setLastSeenTime(1L);
134 this.putHost(host1);
TeruU5d2c9392014-06-09 20:02:02 -0700135
136 MACAddress mac3 = MACAddress.valueOf("00:11:22:33:44:55");
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700137 HostEvent host3 = new HostEvent(mac3);
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700138 host3.addAttachmentPoint(port35.getSwitchPort());
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700139 host3.setLastSeenTime(1L);
140 this.putHost(host3);
TeruU5d2c9392014-06-09 20:02:02 -0700141
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700142 addBidirectionalLinks(1L, 12L, 2L, 21L, 1000.0);
143 addBidirectionalLinks(2L, 23L, 3L, 32L, 1000.0);
144 addBidirectionalLinks(3L, 34L, 4L, 43L, 1000.0);
145 addBidirectionalLinks(4L, 41L, 1L, 14L, 1000.0);
146 addBidirectionalLinks(2L, 24L, 4L, 42L, 1000.0);
TeruU5d2c9392014-06-09 20:02:02 -0700147 }
148
Pavlin Radoslavovefa17b22014-08-01 16:57:56 -0700149 public void removeLink(Long srcDpid, Long srcPortNo, Long dstDpid,
150 Long dstPortNo) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700151 this.removeLink(new Dpid(srcDpid),
Yuta HIGUCHIa507baf2014-08-22 13:42:40 -0700152 PortNumber.uint16(srcPortNo.shortValue()),
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700153 new Dpid(dstDpid),
Yuta HIGUCHIa507baf2014-08-22 13:42:40 -0700154 PortNumber.uint16(dstPortNo.shortValue()));
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700155 }
156
157 public void removeLink(Dpid srcDpid, PortNumber srcPortNo,
Pavlin Radoslavovefa17b22014-08-01 16:57:56 -0700158 Dpid dstDpid, PortNumber dstPortNo) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700159 this.removeLink(srcDpid, srcPortNo, dstDpid, dstPortNo,
160 TopologyElement.TYPE_PACKET_LAYER);
161 }
162 public void removeLink(Dpid srcDpid, PortNumber srcPortNo,
163 Dpid dstDpid, PortNumber dstPortNo, String type) {
164 super.removeLink(new LinkTuple(srcDpid, srcPortNo, dstDpid, dstPortNo),
165 type);
TeruU5d2c9392014-06-09 20:02:02 -0700166 }
167}