blob: 3208a0de7100a34c208ac1c8af4e2aacb96a75a6 [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.
11 * This class should be used only by test codes.
12 */
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 HIGUCHIe2a4e172014-07-03 10:50:39 -070032 new PortNumber(portNumber.shortValue()));
33 ((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
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070037 public void addBidirectionalLinks(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
38 addBidirectionalLinks(srcDpid, srcPortNo, dstDpid, dstPortNo, null);
39 }
40
41 public void addBidirectionalLinks(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo, Double capacity) {
42 LinkEvent[] links = new LinkEvent[2];
43 final SwitchPort src = new SwitchPort(srcDpid, srcPortNo);
44 final SwitchPort dst = new SwitchPort(dstDpid, dstPortNo);
45 links[0] = new LinkEvent(src, dst);
46 links[1] = new LinkEvent(dst, src);
47 if (capacity != null) {
48 links[0].setCapacity(capacity);
49 links[1].setCapacity(capacity);
50 }
TeruU5d2c9392014-06-09 20:02:02 -070051
52 putLink(links[0]);
53 putLink(links[1]);
TeruU5d2c9392014-06-09 20:02:02 -070054 }
55
56 /**
57 * create sample topology of 4 switches and 5 bidirectional links.
58 * <pre>
59 * [1] --- [2]
60 * | / |
61 * | / |
62 * [4] --- [3]
63 * </pre>
64 */
65 public void createSampleTopology1() {
66 sw1 = (SwitchImpl) addSwitch(1L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070067 addPort(sw1, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -070068 sw2 = (SwitchImpl) addSwitch(2L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070069 addPort(sw2, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -070070 sw3 = (SwitchImpl) addSwitch(3L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070071 addPort(sw3, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -070072 sw4 = (SwitchImpl) addSwitch(4L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070073 addPort(sw4, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -070074
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -070075 addPort(sw1, 12L); // sw1 -> sw2
76 addPort(sw1, 14L); // sw1 -> sw4
77 addPort(sw2, 21L); // sw2 -> sw1
78 addPort(sw2, 23L); // sw2 -> sw3
79 addPort(sw2, 24L); // sw2 -> sw4
80 addPort(sw3, 32L); // sw3 -> sw2
81 addPort(sw3, 34L); // sw3 -> sw4
82 addPort(sw4, 41L); // sw4 -> sw1
83 addPort(sw4, 42L); // sw4 -> sw2
84 addPort(sw4, 43L); // sw4 -> sw3
TeruU5d2c9392014-06-09 20:02:02 -070085
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070086 addBidirectionalLinks(1L, 12L, 2L, 21L, 1000.0);
87 addBidirectionalLinks(2L, 23L, 3L, 32L, 1000.0);
88 addBidirectionalLinks(3L, 34L, 4L, 43L, 1000.0);
89 addBidirectionalLinks(4L, 41L, 1L, 14L, 1000.0);
90 addBidirectionalLinks(2L, 24L, 4L, 42L, 1000.0);
TeruU5d2c9392014-06-09 20:02:02 -070091 }
92
93 /**
94 * create sample topology of 4 switches and 5 bidirectional links.
95 * <pre>
96 *
97 *
98 * [H1]-[1] --- [2]
99 * | / |
100 * | / |
101 * [4] --- [3]-[H3]
102 * </pre>
103 */
104 public void createSampleTopology2() {
105 sw1 = (SwitchImpl) addSwitch(1L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -0700106 addPort(sw1, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -0700107 sw2 = (SwitchImpl) addSwitch(2L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -0700108 addPort(sw2, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -0700109 sw3 = (SwitchImpl) addSwitch(3L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -0700110 addPort(sw3, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -0700111 sw4 = (SwitchImpl) addSwitch(4L);
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -0700112 addPort(sw4, LOCAL_PORT);
TeruU5d2c9392014-06-09 20:02:02 -0700113
Yuta HIGUCHIe2a4e172014-07-03 10:50:39 -0700114 Port port12 = addPort(sw1, 12L); // sw1 -> sw2
115 Port port14 = addPort(sw1, 14L); // sw1 -> sw4
116 Port port15 = addPort(sw1, 15L); // sw1 -> h1
117 Port port21 = addPort(sw2, 21L); // sw2 -> sw1
118 Port port23 = addPort(sw2, 23L); // sw2 -> sw3
119 Port port24 = addPort(sw2, 24L); // sw2 -> sw4
120 Port port32 = addPort(sw3, 32L); // sw3 -> sw2
121 Port port34 = addPort(sw3, 34L); // sw3 -> sw4
122 Port port35 = addPort(sw3, 35L); // sw3 -> h3
123 Port port41 = addPort(sw4, 41L); // sw4 -> sw1
124 Port port42 = addPort(sw4, 42L); // sw4 -> sw2
125 Port port43 = addPort(sw4, 43L); // sw4 -> sw3
TeruU5d2c9392014-06-09 20:02:02 -0700126
127 MACAddress mac1 = MACAddress.valueOf("00:44:33:22:11:00");
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700128 HostEvent host1 = new HostEvent(mac1);
129 host1.addAttachmentPoint(port15.asSwitchPort());
130 host1.setLastSeenTime(1L);
131 this.putHost(host1);
TeruU5d2c9392014-06-09 20:02:02 -0700132
133 MACAddress mac3 = MACAddress.valueOf("00:11:22:33:44:55");
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700134 HostEvent host3 = new HostEvent(mac3);
135 host3.addAttachmentPoint(port35.asSwitchPort());
136 host3.setLastSeenTime(1L);
137 this.putHost(host3);
TeruU5d2c9392014-06-09 20:02:02 -0700138
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700139 addBidirectionalLinks(1L, 12L, 2L, 21L, 1000.0);
140 addBidirectionalLinks(2L, 23L, 3L, 32L, 1000.0);
141 addBidirectionalLinks(3L, 34L, 4L, 43L, 1000.0);
142 addBidirectionalLinks(4L, 41L, 1L, 14L, 1000.0);
143 addBidirectionalLinks(2L, 24L, 4L, 42L, 1000.0);
TeruU5d2c9392014-06-09 20:02:02 -0700144 }
145
146 public void removeLink(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700147 this.removeLink(new Dpid(srcDpid),
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700148 new PortNumber(srcPortNo.shortValue()),
149 new Dpid(dstDpid),
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700150 new PortNumber(dstPortNo.shortValue()));
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700151 }
152
153 public void removeLink(Dpid srcDpid, PortNumber srcPortNo,
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700154 Dpid dstDpid, PortNumber dstPortNo) {
155 this.removeLink(srcDpid, srcPortNo, dstDpid, dstPortNo,
156 TopologyElement.TYPE_PACKET_LAYER);
157 }
158 public void removeLink(Dpid srcDpid, PortNumber srcPortNo,
159 Dpid dstDpid, PortNumber dstPortNo, String type) {
160 super.removeLink(new LinkTuple(srcDpid, srcPortNo, dstDpid, dstPortNo),
161 type);
TeruU5d2c9392014-06-09 20:02:02 -0700162 }
163}