blob: 2171c6f8171697bbcc6be31d35f368ba0ccc739a [file] [log] [blame]
Nikhil Cheerlad6734f62015-07-21 10:41:44 -07001package org.onosproject.flowanalyzer;
2
3import org.onosproject.net.PortNumber;
4import org.onosproject.net.link.LinkServiceAdapter;
5import org.onosproject.net.topology.TopologyEdge;
6import org.onosproject.net.ConnectPoint;
7import org.onosproject.net.DeviceId;
8import org.onosproject.net.ElementId;
9import org.onosproject.net.HostId;
10import org.onosproject.net.Link;
11import org.onosproject.net.Annotations;
12import org.onosproject.net.provider.ProviderId;
13import org.onosproject.net.topology.TopologyVertex;
14
15import java.util.Set;
16import java.util.ArrayList;
17import java.util.List;
18import java.util.HashSet;
19
20import static org.onosproject.net.Link.State.ACTIVE;
21
22
23/**
24 * Created by nikcheerla on 7/21/15.
25 */
26public class MockLinkService extends LinkServiceAdapter {
27 DefaultMutableTopologyGraph createdGraph = new DefaultMutableTopologyGraph(new HashSet<>(), new HashSet<>());
28 List<Link> links = new ArrayList<>();
29
30 @Override
31 public int getLinkCount() {
32 return links.size();
33 }
34
35 @Override
36 public Iterable<Link> getLinks() {
37 return links;
38 }
39
40 @Override
41 public Set<Link> getDeviceLinks(DeviceId deviceId) {
42 Set<Link> egress = getDeviceEgressLinks(deviceId);
43 egress.addAll(getDeviceIngressLinks(deviceId));
44 return egress;
45 }
46
47 @Override
48 public Set<Link> getDeviceEgressLinks(DeviceId deviceId) {
49 Set<Link> setL = new HashSet<>();
50 for (Link l: links) {
51 if (l.src().elementId() instanceof DeviceId && l.src().deviceId().equals(deviceId)) {
52 setL.add(l);
53 }
54 }
55 return setL;
56 }
57
58 @Override
59 public Set<Link> getDeviceIngressLinks(DeviceId deviceId) {
60 Set<Link> setL = new HashSet<>();
61 for (Link l: links) {
62 if (l.dst().elementId() instanceof DeviceId && l.dst().deviceId().equals(deviceId)) {
63 setL.add(l);
64 }
65 }
66 return setL;
67 }
68
69
70 @Override
71 public Set<Link> getEgressLinks(ConnectPoint pt) {
72 Set<Link> setL = new HashSet<>();
73 for (Link l: links) {
74 if (l.src().equals(pt)) {
75 setL.add(l);
76 }
77 }
78 return setL;
79 }
80
81 @Override
82 public Set<Link> getIngressLinks(ConnectPoint pt) {
83 Set<Link> setL = new HashSet<>();
84 for (Link l: links) {
85 if (l.dst().equals(pt)) {
86 setL.add(l);
87 }
88 }
89 return setL;
90 }
91
92 @Override
93 public Set<Link> getLinks(ConnectPoint pt) {
94 Set<Link> setL = new HashSet<>();
95 for (Link l: links) {
96 if (l.src().equals(pt) || l.dst().equals(pt)) {
97 setL.add(l);
98 }
99 }
100 return setL;
101 }
102
103 public void addLink(String device, long port, String device2, long port2) {
104 ElementId d1;
105 if (device.charAt(0) == 'H') {
106 device = device.substring(1, device.length());
107 d1 = HostId.hostId(device);
108 } else {
109 d1 = DeviceId.deviceId(device);
110 }
111
112 ElementId d2;
113 if (device2.charAt(0) == 'H') {
114 d2 = HostId.hostId(device2.substring(1, device2.length()));
115 } else {
116 d2 = DeviceId.deviceId(device2);
117 }
118
119 ConnectPoint src = new ConnectPoint(d1, PortNumber.portNumber(port));
120 ConnectPoint dst = new ConnectPoint(d2, PortNumber.portNumber(port2));
121 Link curLink;
122 curLink = new Link() {
123 @Override
124 public ConnectPoint src() {
125 return src;
126 }
127
128 @Override
129 public ConnectPoint dst() {
130 return dst;
131 }
132
133 @Override
134 public boolean isDurable() {
135 return true;
136 }
137
138 @Override
139 public Annotations annotations() {
140 return null;
141 }
142
143 @Override
144 public Type type() {
145 return null;
146 }
147
148 @Override
149 public ProviderId providerId() {
150 return null;
151 }
152
153 @Override
154 public State state() {
155 return ACTIVE;
156 }
157 };
158 links.add(curLink);
159 if (d1 instanceof DeviceId && d2 instanceof DeviceId) {
160 TopologyVertex v1 = () -> (DeviceId) d1, v2 = () -> (DeviceId) d2;
161 createdGraph.addVertex(v1);
162 createdGraph.addVertex(v2);
163 createdGraph.addEdge(new TopologyEdge() {
164 @Override
165 public Link link() {
166 return curLink;
167 }
168
169 @Override
170 public TopologyVertex src() {
171 return v1;
172 }
173
174 @Override
175 public TopologyVertex dst() {
176 return v2;
177 }
178 });
179 }
180 }
181
182
183}