blob: 5f6a7d987620bd02e93c6f5ab8a9fd9c13891f37 [file] [log] [blame]
Andrea Campanella01e886e2017-12-15 15:27:31 +01001/*
2 * Copyright 2018-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.t3.impl;
17
18import com.google.common.collect.ImmutableList;
19import com.google.common.collect.ImmutableSet;
20import org.onlab.packet.EthType;
21import org.onlab.packet.IpAddress;
22import org.onlab.packet.IpPrefix;
23import org.onlab.packet.MacAddress;
Andrea Campanella09ca07a2018-01-25 16:44:04 +010024import org.onlab.packet.MplsLabel;
Andrea Campanella01e886e2017-12-15 15:27:31 +010025import org.onlab.packet.VlanId;
26import org.onosproject.core.DefaultApplicationId;
27import org.onosproject.core.GroupId;
28import org.onosproject.net.ConnectPoint;
29import org.onosproject.net.DefaultHost;
30import org.onosproject.net.DeviceId;
31import org.onosproject.net.Host;
32import org.onosproject.net.HostId;
33import org.onosproject.net.HostLocation;
34import org.onosproject.net.PortNumber;
35import org.onosproject.net.flow.DefaultFlowEntry;
36import org.onosproject.net.flow.DefaultTrafficSelector;
37import org.onosproject.net.flow.DefaultTrafficTreatment;
38import org.onosproject.net.flow.FlowEntry;
39import org.onosproject.net.flow.FlowRule;
40import org.onosproject.net.flow.TrafficSelector;
41import org.onosproject.net.flow.TrafficTreatment;
42import org.onosproject.net.group.DefaultGroup;
43import org.onosproject.net.group.DefaultGroupBucket;
44import org.onosproject.net.group.Group;
45import org.onosproject.net.group.GroupBucket;
46import org.onosproject.net.group.GroupBuckets;
47import org.onosproject.net.provider.ProviderId;
48
49/**
50 * Helper class for objects related to the Troubleshoot Manager Test.
51 */
52final class T3TestObjects {
53
Andrea Campanella7c8e7912018-01-23 12:46:04 +010054 private T3TestObjects() {
Andrea Campanella2bc55dd2018-01-18 16:54:34 +010055 //banning construction
56 }
57
Andrea Campanella01e886e2017-12-15 15:27:31 +010058 private static final String HOST_ONE_MAC = "00:00:00:00:00:01";
59 private static final String HOST_TWO_MAC = "00:00:00:00:00:02";
60 private static final String HOST_ONE_VLAN = "None";
61 private static final String HOST_TWO_VLAN = "None";
62 private static final String HOST_ONE = HOST_ONE_MAC + "/" + HOST_ONE_VLAN;
63 private static final String HOST_TWO = HOST_TWO_MAC + "/" + HOST_TWO_VLAN;
64
Andrea Campanella37d10622018-01-18 17:11:42 +010065 //offline device
66 static final DeviceId OFFLINE_DEVICE = DeviceId.deviceId("offlineDevice");
67
Andrea Campanella01e886e2017-12-15 15:27:31 +010068 //Single Flow Test
69 static final DeviceId SINGLE_FLOW_DEVICE = DeviceId.deviceId("SingleFlowDevice");
70 private static final TrafficSelector SINGLE_FLOW_SELECTOR = DefaultTrafficSelector.builder()
71 .matchInPort(PortNumber.portNumber(1))
72 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
73 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
74 .build();
75
76 private static final TrafficTreatment OUTPUT_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
77 .setOutput(PortNumber.portNumber(2)).build();
78 private static final FlowRule SINGLE_FLOW = DefaultFlowEntry.builder().forDevice(SINGLE_FLOW_DEVICE)
79 .forTable(0)
80 .withPriority(100)
81 .withSelector(SINGLE_FLOW_SELECTOR)
82 .withTreatment(OUTPUT_FLOW_TREATMENT)
83 .fromApp(new DefaultApplicationId(0, "TestApp"))
84 .makePermanent()
85 .build();
86 static final FlowEntry SINGLE_FLOW_ENTRY = new DefaultFlowEntry(SINGLE_FLOW);
87
88 static final ConnectPoint SINGLE_FLOW_IN_CP = ConnectPoint.deviceConnectPoint(SINGLE_FLOW_DEVICE + "/" + 1);
89
90 static final ConnectPoint SINGLE_FLOW_OUT_CP = ConnectPoint.deviceConnectPoint(SINGLE_FLOW_DEVICE + "/" + 2);
91
Andrea Campanellabb9d3fb2018-01-22 15:10:30 +010092 //same output as input
93 static final DeviceId SAME_OUTPUT_FLOW_DEVICE = DeviceId.deviceId("sameOutputDevice");
94
95 private static final TrafficTreatment SAME_OUTPUT_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
96 .setOutput(PortNumber.portNumber(1)).build();
97 private static final FlowRule SAME_OUTPUT_FLOW = DefaultFlowEntry.builder().forDevice(SAME_OUTPUT_FLOW_DEVICE)
98 .forTable(0)
99 .withPriority(100)
100 .withSelector(SINGLE_FLOW_SELECTOR)
101 .withTreatment(SAME_OUTPUT_FLOW_TREATMENT)
102 .fromApp(new DefaultApplicationId(0, "TestApp"))
103 .makePermanent()
104 .build();
105 static final FlowEntry SAME_OUTPUT_FLOW_ENTRY = new DefaultFlowEntry(SAME_OUTPUT_FLOW);
106
107 static final ConnectPoint SAME_OUTPUT_FLOW_CP = ConnectPoint.deviceConnectPoint(SAME_OUTPUT_FLOW_DEVICE + "/" + 1);
108
Andrea Campanella7c8e7912018-01-23 12:46:04 +0100109 //ARP
110 static final DeviceId ARP_FLOW_DEVICE = DeviceId.deviceId("ArpDevice");
111
112 private static final TrafficSelector ARP_FLOW_SELECTOR = DefaultTrafficSelector.builder()
113 .matchInPort(PortNumber.portNumber(1))
114 .matchEthType(EthType.EtherType.ARP.ethType().toShort())
115 .build();
116
117 private static final TrafficTreatment ARP_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
118 .setOutput(PortNumber.CONTROLLER).build();
119 private static final FlowRule ARP_FLOW = DefaultFlowEntry.builder().forDevice(ARP_FLOW_DEVICE)
120 .forTable(0)
121 .withPriority(100)
122 .withSelector(ARP_FLOW_SELECTOR)
123 .withTreatment(ARP_FLOW_TREATMENT)
124 .fromApp(new DefaultApplicationId(0, "TestApp"))
125 .makePermanent()
126 .build();
127 static final FlowEntry ARP_FLOW_ENTRY = new DefaultFlowEntry(ARP_FLOW);
128
129 static final ConnectPoint ARP_FLOW_CP = ConnectPoint.deviceConnectPoint(ARP_FLOW_DEVICE + "/" + 1);
130
Andrea Campanellabb9d3fb2018-01-22 15:10:30 +0100131
Andrea Campanella01e886e2017-12-15 15:27:31 +0100132 //Dual Flow Test
133 static final DeviceId DUAL_FLOW_DEVICE = DeviceId.deviceId("DualFlowDevice");
134 private static final TrafficTreatment TRANSITION_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
135 .setVlanId(VlanId.vlanId((short) 100))
136 .transition(10)
137 .build();
138 private static final TrafficSelector VLAN_FLOW_SELECTOR = DefaultTrafficSelector.builder()
139 .matchVlanId(VlanId.vlanId((short) 100))
140 .build();
141 private static final FlowRule FIRST_FLOW = DefaultFlowEntry.builder().forDevice(DUAL_FLOW_DEVICE)
142 .forTable(0)
143 .withPriority(100)
144 .withSelector(SINGLE_FLOW_SELECTOR)
145 .withTreatment(TRANSITION_FLOW_TREATMENT)
146 .fromApp(new DefaultApplicationId(0, "TestApp"))
147 .makePermanent()
148 .build();
149 static final FlowEntry FIRST_FLOW_ENTRY = new DefaultFlowEntry(FIRST_FLOW);
150 private static final FlowRule SECOND_FLOW = DefaultFlowEntry.builder().forDevice(DUAL_FLOW_DEVICE)
151 .forTable(10)
152 .withPriority(100)
153 .withSelector(VLAN_FLOW_SELECTOR)
154 .withTreatment(OUTPUT_FLOW_TREATMENT)
155 .fromApp(new DefaultApplicationId(0, "TestApp"))
156 .makePermanent()
157 .build();
158 static final FlowEntry SECOND_FLOW_ENTRY = new DefaultFlowEntry(SECOND_FLOW);
159
160 static final ConnectPoint DUAL_FLOW_IN_CP = ConnectPoint.deviceConnectPoint(DUAL_FLOW_DEVICE + "/" + 1);
161
162 static final ConnectPoint DUAL_FLOW_OUT_CP = ConnectPoint.deviceConnectPoint(DUAL_FLOW_DEVICE + "/" + 2);
163
164 //Flow and Group Test
165 static final DeviceId GROUP_FLOW_DEVICE = DeviceId.deviceId("GroupFlowDevice");
166
167 private static final GroupId GROUP_ID = GroupId.valueOf(1);
168
169 private static final TrafficTreatment GROUP_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
Andrea Campanella09ca07a2018-01-25 16:44:04 +0100170 .pushMpls()
171 .setMpls(MplsLabel.mplsLabel(100))
Andrea Campanella01e886e2017-12-15 15:27:31 +0100172 .group(GROUP_ID)
173 .build();
174 private static final FlowRule GROUP_FLOW = DefaultFlowEntry.builder().forDevice(GROUP_FLOW_DEVICE)
175 .forTable(0)
176 .withPriority(100)
177 .withSelector(SINGLE_FLOW_SELECTOR)
178 .withTreatment(GROUP_FLOW_TREATMENT)
179 .fromApp(new DefaultApplicationId(0, "TestApp"))
180 .makePermanent()
181 .build();
182 static final FlowEntry GROUP_FLOW_ENTRY = new DefaultFlowEntry(GROUP_FLOW);
183
Andrea Campanella09ca07a2018-01-25 16:44:04 +0100184 private static final TrafficTreatment OUTPUT_GROUP_TREATMENT = DefaultTrafficTreatment.builder()
185 .popMpls(EthType.EtherType.IPV4.ethType())
186 .setOutput(PortNumber.portNumber(2)).build();
187
188 private static final GroupBucket BUCKET = DefaultGroupBucket.createSelectGroupBucket(OUTPUT_GROUP_TREATMENT);
Andrea Campanella01e886e2017-12-15 15:27:31 +0100189
190 private static final GroupBuckets BUCKETS = new GroupBuckets(ImmutableList.of(BUCKET));
191
192 static final Group GROUP = new DefaultGroup(GROUP_ID, GROUP_FLOW_DEVICE, Group.Type.SELECT, BUCKETS);
193
194 static final ConnectPoint GROUP_FLOW_IN_CP = ConnectPoint.deviceConnectPoint(GROUP_FLOW_DEVICE + "/" + 1);
195
196 static final ConnectPoint GROUP_FLOW_OUT_CP = ConnectPoint.deviceConnectPoint(GROUP_FLOW_DEVICE + "/" + 2);
197
198 //topology
199
200 static final DeviceId TOPO_FLOW_DEVICE = DeviceId.deviceId("SingleFlowDevice1");
201
202 static final DeviceId TOPO_FLOW_2_DEVICE = DeviceId.deviceId("SingleFlowDevice2");
203
204 static final DeviceId TOPO_FLOW_3_DEVICE = DeviceId.deviceId("SingleFlowDevice3");
205
206 private static final TrafficSelector TOPO_FLOW_SELECTOR = DefaultTrafficSelector.builder()
207 .matchInPort(PortNumber.portNumber(1))
208 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
209 .matchIPDst(IpPrefix.valueOf("127.0.0.3/32"))
210 .build();
211
212 private static final FlowRule TOPO_SINGLE_FLOW = DefaultFlowEntry.builder().forDevice(TOPO_FLOW_DEVICE)
213 .forTable(0)
214 .withPriority(100)
215 .withSelector(TOPO_FLOW_SELECTOR)
216 .withTreatment(OUTPUT_FLOW_TREATMENT)
217 .fromApp(new DefaultApplicationId(0, "TestApp"))
218 .makePermanent()
219 .build();
220
221 static final FlowEntry TOPO_SINGLE_FLOW_ENTRY = new DefaultFlowEntry(TOPO_SINGLE_FLOW);
222
223 static final ConnectPoint TOPO_FLOW_1_IN_CP = ConnectPoint.deviceConnectPoint(TOPO_FLOW_DEVICE + "/" + 1);
224
225 static final ConnectPoint TOPO_FLOW_1_OUT_CP = ConnectPoint.deviceConnectPoint(TOPO_FLOW_DEVICE + "/" + 2);
226
227 static final ConnectPoint TOPO_FLOW_2_IN_CP = ConnectPoint.deviceConnectPoint(TOPO_FLOW_2_DEVICE + "/" + 1);
228
229 static final ConnectPoint TOPO_FLOW_2_OUT_CP = ConnectPoint.deviceConnectPoint(TOPO_FLOW_2_DEVICE + "/" + 2);
230
231 static final ConnectPoint TOPO_FLOW_3_IN_CP = ConnectPoint.deviceConnectPoint(TOPO_FLOW_3_DEVICE + "/" + 1);
232
233 static final ConnectPoint TOPO_FLOW_3_OUT_CP = ConnectPoint.deviceConnectPoint(TOPO_FLOW_3_DEVICE + "/" + 2);
234
235
236 //Topology with Groups
237
238 static final DeviceId TOPO_GROUP_FLOW_DEVICE = DeviceId.deviceId("TopoGroupFlowDevice");
239
240 private static final TrafficSelector TOPO_SECOND_INPUT_FLOW_SELECTOR = DefaultTrafficSelector.builder()
241 .matchInPort(PortNumber.portNumber(3))
242 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
243 .matchIPDst(IpPrefix.valueOf("127.0.0.3/32"))
244 .build();
245
246 private static final FlowRule TOPO_SECOND_INPUT_FLOW = DefaultFlowEntry.builder().forDevice(TOPO_FLOW_3_DEVICE)
247 .forTable(0)
248 .withPriority(100)
249 .withSelector(TOPO_SECOND_INPUT_FLOW_SELECTOR)
250 .withTreatment(OUTPUT_FLOW_TREATMENT)
251 .fromApp(new DefaultApplicationId(0, "TestApp"))
252 .makePermanent()
253 .build();
254
255 private static final TrafficTreatment OUTPUT_2_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
256 .setOutput(PortNumber.portNumber(3)).build();
257
258
259 private static final GroupId TOPO_GROUP_ID = GroupId.valueOf(1);
260
261 private static final TrafficTreatment TOPO_GROUP_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
262 .group(TOPO_GROUP_ID)
263 .build();
264 private static final FlowRule TOPO_GROUP_FLOW = DefaultFlowEntry.builder().forDevice(TOPO_GROUP_FLOW_DEVICE)
265 .forTable(0)
266 .withPriority(100)
267 .withSelector(TOPO_FLOW_SELECTOR)
268 .withTreatment(TOPO_GROUP_FLOW_TREATMENT)
269 .fromApp(new DefaultApplicationId(0, "TestApp"))
270 .makePermanent()
271 .build();
272 static final FlowEntry TOPO_GROUP_FLOW_ENTRY = new DefaultFlowEntry(TOPO_GROUP_FLOW);
273
274 private static final GroupBucket BUCKET_2 = DefaultGroupBucket.createSelectGroupBucket(OUTPUT_2_FLOW_TREATMENT);
275
276 private static final GroupBuckets BUCKETS_MULTIPLE = new GroupBuckets(ImmutableList.of(BUCKET, BUCKET_2));
277
Andrea Campanella2bc55dd2018-01-18 16:54:34 +0100278 static final Group TOPO_GROUP = new DefaultGroup(TOPO_GROUP_ID, TOPO_GROUP_FLOW_DEVICE,
279 Group.Type.SELECT, BUCKETS_MULTIPLE);
Andrea Campanella01e886e2017-12-15 15:27:31 +0100280
281 static final FlowEntry TOPO_SECOND_INPUT_FLOW_ENTRY = new DefaultFlowEntry(TOPO_SECOND_INPUT_FLOW);
282
283 static final DeviceId TOPO_FLOW_4_DEVICE = DeviceId.deviceId("SingleFlowDevice4");
284
285 static final ConnectPoint TOPO_FLOW_IN_CP = ConnectPoint.deviceConnectPoint(TOPO_GROUP_FLOW_DEVICE + "/" + 1);
286
287 static final ConnectPoint TOPO_FLOW_OUT_CP_1 = ConnectPoint.deviceConnectPoint(TOPO_GROUP_FLOW_DEVICE + "/" + 2);
288
Andrea Campanella2bc55dd2018-01-18 16:54:34 +0100289 protected static final ConnectPoint TOPO_FLOW_OUT_CP_2 =
290 ConnectPoint.deviceConnectPoint(TOPO_GROUP_FLOW_DEVICE + "/" + 3);
Andrea Campanella01e886e2017-12-15 15:27:31 +0100291
292 static final ConnectPoint TOPO_FLOW_4_IN_CP = ConnectPoint.deviceConnectPoint(TOPO_FLOW_4_DEVICE + "/" + 1);
293
294 static final ConnectPoint TOPO_FLOW_3_IN_2_CP = ConnectPoint.deviceConnectPoint(TOPO_FLOW_3_DEVICE + "/" + 3);
295
296 static final ConnectPoint TOPO_FLOW_4_OUT_CP = ConnectPoint.deviceConnectPoint(TOPO_FLOW_4_DEVICE + "/" + 2);
297
298
299 //hardware
300
301 static final DeviceId HARDWARE_DEVICE = DeviceId.deviceId("HardwareDevice");
302
303 static final ConnectPoint HARDWARE_DEVICE_IN_CP = ConnectPoint.deviceConnectPoint(HARDWARE_DEVICE + "/" + 1);
304
305 static final ConnectPoint HARDWARE_DEVICE_OUT_CP = ConnectPoint.deviceConnectPoint(HARDWARE_DEVICE + "/" + 2);
306
307 private static final TrafficSelector HARDWARE_FLOW_SELECTOR = DefaultTrafficSelector.builder()
308 .matchInPort(PortNumber.portNumber(1))
309 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
310 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
311 .build();
312
313 private static final TrafficTreatment HW_TRANSITION_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
314 .pushMpls()
315 .transition(27)
316 .build();
317
318 private static final FlowRule HARDWARE_FLOW = DefaultFlowEntry.builder().forDevice(TOPO_FLOW_3_DEVICE)
319 .forTable(0)
320 .withPriority(100)
321 .withSelector(HARDWARE_FLOW_SELECTOR)
322 .withTreatment(HW_TRANSITION_FLOW_TREATMENT)
323 .fromApp(new DefaultApplicationId(0, "TestApp"))
324 .makePermanent()
325 .build();
326
327 static final FlowEntry HARDWARE_FLOW_ENTRY = new DefaultFlowEntry(HARDWARE_FLOW);
328
329 private static final TrafficSelector HARDWARE_ETH_FLOW_SELECTOR = DefaultTrafficSelector.builder()
330 .matchInPort(PortNumber.portNumber(1))
331 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
332 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
333 .matchEthType(EthType.EtherType.IPV4.ethType().toShort())
334 .build();
335
336 private static final FlowRule HARDWARE_ETH_FLOW = DefaultFlowEntry.builder().forDevice(TOPO_FLOW_3_DEVICE)
337 .forTable(30)
338 .withPriority(100)
339 .withSelector(HARDWARE_ETH_FLOW_SELECTOR)
340 .withTreatment(OUTPUT_FLOW_TREATMENT)
341 .fromApp(new DefaultApplicationId(0, "TestApp"))
342 .makePermanent()
343 .build();
344
345 static final FlowEntry HARDWARE_ETH_FLOW_ENTRY = new DefaultFlowEntry(HARDWARE_ETH_FLOW);
346
Andrea Campanellae04aac92018-01-31 14:59:03 +0100347 //Dual Links
348 // - (1) Device 1 (2-3) - (1-4) Device 2 (2-3) - (1-2) Device 3 (3) -
349 static final DeviceId DUAL_LINK_1 = DeviceId.deviceId("DualLink1");
350 static final DeviceId DUAL_LINK_2 = DeviceId.deviceId("DualLink2");
351 static final DeviceId DUAL_LINK_3 = DeviceId.deviceId("DualLink3");
352
353 static final ConnectPoint DUAL_LINK_1_CP_1_IN = ConnectPoint.deviceConnectPoint(DUAL_LINK_1 + "/" + 1);
354 static final ConnectPoint DUAL_LINK_1_CP_2_OUT = ConnectPoint.deviceConnectPoint(DUAL_LINK_1 + "/" + 2);
355 static final ConnectPoint DUAL_LINK_1_CP_3_OUT = ConnectPoint.deviceConnectPoint(DUAL_LINK_1 + "/" + 3);
356 static final ConnectPoint DUAL_LINK_2_CP_1_IN = ConnectPoint.deviceConnectPoint(DUAL_LINK_2 + "/" + 1);
357 static final ConnectPoint DUAL_LINK_2_CP_4_IN = ConnectPoint.deviceConnectPoint(DUAL_LINK_2 + "/" + 4);
358 static final ConnectPoint DUAL_LINK_2_CP_2_OUT = ConnectPoint.deviceConnectPoint(DUAL_LINK_2 + "/" + 2);
359 static final ConnectPoint DUAL_LINK_2_CP_3_OUT = ConnectPoint.deviceConnectPoint(DUAL_LINK_2 + "/" + 3);
360 static final ConnectPoint DUAL_LINK_3_CP_1_IN = ConnectPoint.deviceConnectPoint(DUAL_LINK_3 + "/" + 1);
361 static final ConnectPoint DUAL_LINK_3_CP_2_IN = ConnectPoint.deviceConnectPoint(DUAL_LINK_3 + "/" + 2);
362 static final ConnectPoint DUAL_LINK_3_CP_3_OUT = ConnectPoint.deviceConnectPoint(DUAL_LINK_3 + "/" + 3);
363
364 //match on port 1 and point to group for device 1 and 2
365 private static final TrafficTreatment DUAL_LINK_1_GROUP_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
366 .pushMpls()
367 .setMpls(MplsLabel.mplsLabel(100))
368 .group(GROUP_ID)
369 .build();
370 private static final FlowRule DUAL_LINK_1_GROUP_FLOW = DefaultFlowEntry.builder().forDevice(DUAL_LINK_1)
371 .forTable(0)
372 .withPriority(100)
373 .withSelector(SINGLE_FLOW_SELECTOR)
374 .withTreatment(DUAL_LINK_1_GROUP_FLOW_TREATMENT)
375 .fromApp(new DefaultApplicationId(0, "TestApp"))
376 .makePermanent()
377 .build();
378 static final FlowEntry DUAL_LINK_1_GROUP_FLOW_ENTRY = new DefaultFlowEntry(DUAL_LINK_1_GROUP_FLOW);
379
380 //Match on port 4 and point to group for device 2
381 private static final TrafficSelector DUAL_LINK_2_FLOW_SELECTOR = DefaultTrafficSelector.builder()
382 .matchInPort(PortNumber.portNumber(4))
383 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
384 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
385 .build();
386
387 private static final FlowRule DUAL_LINK_2_GROUP_FLOW = DefaultFlowEntry.builder().forDevice(DUAL_LINK_2)
388 .forTable(0)
389 .withPriority(100)
390 .withSelector(DUAL_LINK_2_FLOW_SELECTOR)
391 .withTreatment(DUAL_LINK_1_GROUP_FLOW_TREATMENT)
392 .fromApp(new DefaultApplicationId(0, "TestApp"))
393 .makePermanent()
394 .build();
395 static final FlowEntry DUAL_LINK_2_GROUP_FLOW_ENTRY = new DefaultFlowEntry(DUAL_LINK_2_GROUP_FLOW);
396
397 //Flows for device 3 to ouput on port 3
398 private static final TrafficTreatment DUAL_LINK_1_OUTPUT_TREATMENT = DefaultTrafficTreatment.builder()
399 .popMpls(EthType.EtherType.IPV4.ethType())
400 .setOutput(PortNumber.portNumber(3)).build();
401
402 private static final TrafficSelector DUAL_LINK_3_FLOW_SELECTOR_1 = DefaultTrafficSelector.builder()
403 .matchInPort(PortNumber.portNumber(1))
404 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
405 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
406 .build();
407 private static final FlowRule DUAL_LINK_3_FLOW_1 = DefaultFlowEntry.builder().forDevice(DUAL_LINK_3)
408 .forTable(0)
409 .withPriority(100)
410 .withSelector(DUAL_LINK_3_FLOW_SELECTOR_1)
411 .withTreatment(DUAL_LINK_1_OUTPUT_TREATMENT)
412 .fromApp(new DefaultApplicationId(0, "TestApp"))
413 .makePermanent()
414 .build();
415
416 static final FlowEntry DUAL_LINK_3_FLOW_ENTRY = new DefaultFlowEntry(DUAL_LINK_3_FLOW_1);
417
418 private static final TrafficSelector DUAL_LINK_3_FLOW_SELECTOR_2 = DefaultTrafficSelector.builder()
419 .matchInPort(PortNumber.portNumber(2))
420 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
421 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
422 .build();
423 private static final FlowRule DUAL_LINK_3_FLOW_2 = DefaultFlowEntry.builder().forDevice(DUAL_LINK_3)
424 .forTable(0)
425 .withPriority(100)
426 .withSelector(DUAL_LINK_3_FLOW_SELECTOR_2)
427 .withTreatment(DUAL_LINK_1_OUTPUT_TREATMENT)
428 .fromApp(new DefaultApplicationId(0, "TestApp"))
429 .makePermanent()
430 .build();
431
432 static final FlowEntry DUAL_LINK_3_FLOW_ENTRY_2 = new DefaultFlowEntry(DUAL_LINK_3_FLOW_2);
433
434 //Group with two buckets to output on port 2 and 3 of device 1 and 2
435
436 private static final GroupBucket BUCKET_2_DUAL =
437 DefaultGroupBucket.createSelectGroupBucket(DUAL_LINK_1_OUTPUT_TREATMENT);
438
439 private static final GroupBuckets BUCKETS_DUAL = new GroupBuckets(ImmutableList.of(BUCKET, BUCKET_2_DUAL));
440
441 static final Group DUAL_LINK_GROUP = new DefaultGroup(GROUP_ID, DUAL_LINK_1, Group.Type.SELECT, BUCKETS_DUAL);
Andrea Campanella01e886e2017-12-15 15:27:31 +0100442
Andrea Campanella01e886e2017-12-15 15:27:31 +0100443 //helper elements
444
Andrea Campanella7c8e7912018-01-23 12:46:04 +0100445 static final String MASTER_1 = "Master1";
446
Andrea Campanella01e886e2017-12-15 15:27:31 +0100447 static final Host H1 = new DefaultHost(ProviderId.NONE, HostId.hostId(HOST_ONE), MacAddress.valueOf(100),
448 VlanId.NONE, new HostLocation(SINGLE_FLOW_DEVICE, PortNumber.portNumber(2), 0),
449 ImmutableSet.of(IpAddress.valueOf("127.0.0.2")));
450
451 static final Host H2 = new DefaultHost(ProviderId.NONE, HostId.hostId(HOST_TWO), MacAddress.valueOf(100),
452 VlanId.NONE, new HostLocation(TOPO_FLOW_3_DEVICE, PortNumber.portNumber(2), 0),
453 ImmutableSet.of(IpAddress.valueOf("127.0.0.3")));
454
455 static final TrafficSelector PACKET_OK = DefaultTrafficSelector.builder()
456 .matchInPort(PortNumber.portNumber(1))
Andrea Campanella2bc55dd2018-01-18 16:54:34 +0100457 .matchEthType(EthType.EtherType.IPV4.ethType().toShort())
Andrea Campanella01e886e2017-12-15 15:27:31 +0100458 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
459 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
460 .build();
461
462 static final TrafficSelector PACKET_OK_TOPO = DefaultTrafficSelector.builder()
463 .matchInPort(PortNumber.portNumber(1))
464 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
465 .matchIPDst(IpPrefix.valueOf("127.0.0.3/32"))
466 .build();
467
Andrea Campanella7c8e7912018-01-23 12:46:04 +0100468 static final TrafficSelector PACKET_ARP = DefaultTrafficSelector.builder()
469 .matchInPort(PortNumber.portNumber(1))
470 .matchIPDst(IpPrefix.valueOf("255.255.255.255/32"))
471 .matchEthType(EthType.EtherType.ARP.ethType().toShort())
472 .build();
473
Andrea Campanella01e886e2017-12-15 15:27:31 +0100474 static final TrafficSelector PACKET_FAIL = DefaultTrafficSelector.builder()
475 .matchInPort(PortNumber.portNumber(1))
476 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
477 .matchIPDst(IpPrefix.valueOf("127.0.0.99/32"))
478 .build();
479}