blob: 0885653724d26425a64095914b860275fa3bfaf4 [file] [log] [blame]
Andrea Campanellae4084402017-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 Campanella3970e472018-01-25 16:44:04 +010024import org.onlab.packet.MplsLabel;
Andrea Campanellae4084402017-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 Campanella54923d62018-01-23 12:46:04 +010054 private T3TestObjects() {
Andrea Campanella4401bd72018-01-18 16:54:34 +010055 //banning construction
56 }
57
Andrea Campanellae4084402017-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 Campanella17d45192018-01-18 17:11:42 +010065 //offline device
66 static final DeviceId OFFLINE_DEVICE = DeviceId.deviceId("offlineDevice");
67
Andrea Campanellae4084402017-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 Campanella7d3cf652018-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 Campanella54923d62018-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 Campanella7d3cf652018-01-22 15:10:30 +0100131
Andrea Campanellae4084402017-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 Campanella3970e472018-01-25 16:44:04 +0100170 .pushMpls()
171 .setMpls(MplsLabel.mplsLabel(100))
Andrea Campanellae4084402017-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 Campanella3970e472018-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 Campanellae4084402017-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 Campanella4401bd72018-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 Campanellae4084402017-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 Campanella4401bd72018-01-18 16:54:34 +0100289 protected static final ConnectPoint TOPO_FLOW_OUT_CP_2 =
290 ConnectPoint.deviceConnectPoint(TOPO_GROUP_FLOW_DEVICE + "/" + 3);
Andrea Campanellae4084402017-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 Campanella94c594a2018-02-06 18:58:40 +0100347 //HW Double Rule on 10
348
349 static final DeviceId HARDWARE_DEVICE_10 = DeviceId.deviceId("HardwareDevice10");
350
351 static final ConnectPoint HARDWARE_DEVICE_10_IN_CP = ConnectPoint.deviceConnectPoint(HARDWARE_DEVICE_10 + "/" + 1);
352
353 static final ConnectPoint HARDWARE_DEVICE_10_OUT_CP = ConnectPoint.deviceConnectPoint(HARDWARE_DEVICE_10 + "/" + 2);
354
355 private static final TrafficSelector HARDWARE_10_FLOW_SELECTOR = DefaultTrafficSelector.builder()
356 .matchInPort(PortNumber.portNumber(1))
357 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
358 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
359 .matchVlanId(VlanId.NONE)
360 .build();
361
362 private static final TrafficTreatment HARDWARE_10_TRANSITION_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
363 .setVlanId(VlanId.vlanId("10"))
364 .transition(20)
365 .build();
366
367 private static final FlowRule HARDWARE_DEVICE_10_FLOW = DefaultFlowEntry.builder().forDevice(HARDWARE_DEVICE_10)
368 .forTable(10)
369 .withPriority(100)
370 .withSelector(HARDWARE_10_FLOW_SELECTOR)
371 .withTreatment(HARDWARE_10_TRANSITION_FLOW_TREATMENT)
372 .fromApp(new DefaultApplicationId(0, "TestApp"))
373 .makePermanent()
374 .build();
375
376 static final FlowEntry HARDWARE_10_FLOW_ENTRY = new DefaultFlowEntry(HARDWARE_DEVICE_10_FLOW);
377
378 private static final TrafficSelector HARDWARE_10_SECOND_SELECTOR = DefaultTrafficSelector.builder()
379 .matchInPort(PortNumber.portNumber(1))
380 .matchVlanId(VlanId.vlanId("10"))
381 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
382 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
383 .matchEthType(EthType.EtherType.IPV4.ethType().toShort())
384 .build();
385
386 private static final FlowRule HARDWARE_10_SECOND_FLOW = DefaultFlowEntry.builder().forDevice(HARDWARE_DEVICE_10)
387 .forTable(10)
388 .withPriority(100)
389 .withSelector(HARDWARE_10_SECOND_SELECTOR)
390 .withTreatment(HARDWARE_10_TRANSITION_FLOW_TREATMENT)
391 .fromApp(new DefaultApplicationId(0, "TestApp"))
392 .makePermanent()
393 .build();
394
395 static final FlowEntry HARDWARE_10_SECOND_FLOW_ENTRY = new DefaultFlowEntry(HARDWARE_10_SECOND_FLOW);
396
397 private static final FlowRule HARDWARE_10_OUTPUT_FLOW = DefaultFlowEntry.builder().forDevice(HARDWARE_DEVICE_10)
398 .forTable(20)
399 .withPriority(100)
400 .withSelector(SINGLE_FLOW_SELECTOR)
401 .withTreatment(OUTPUT_FLOW_TREATMENT)
402 .fromApp(new DefaultApplicationId(0, "TestApp"))
403 .makePermanent()
404 .build();
405
406 static final FlowEntry HARDWARE_10_OUTPUT_FLOW_ENTRY = new DefaultFlowEntry(HARDWARE_10_OUTPUT_FLOW);
407
Andrea Campanellab022b5e2018-01-31 14:59:03 +0100408 //Dual Links
409 // - (1) Device 1 (2-3) - (1-4) Device 2 (2-3) - (1-2) Device 3 (3) -
410 static final DeviceId DUAL_LINK_1 = DeviceId.deviceId("DualLink1");
411 static final DeviceId DUAL_LINK_2 = DeviceId.deviceId("DualLink2");
412 static final DeviceId DUAL_LINK_3 = DeviceId.deviceId("DualLink3");
413
414 static final ConnectPoint DUAL_LINK_1_CP_1_IN = ConnectPoint.deviceConnectPoint(DUAL_LINK_1 + "/" + 1);
415 static final ConnectPoint DUAL_LINK_1_CP_2_OUT = ConnectPoint.deviceConnectPoint(DUAL_LINK_1 + "/" + 2);
416 static final ConnectPoint DUAL_LINK_1_CP_3_OUT = ConnectPoint.deviceConnectPoint(DUAL_LINK_1 + "/" + 3);
417 static final ConnectPoint DUAL_LINK_2_CP_1_IN = ConnectPoint.deviceConnectPoint(DUAL_LINK_2 + "/" + 1);
418 static final ConnectPoint DUAL_LINK_2_CP_4_IN = ConnectPoint.deviceConnectPoint(DUAL_LINK_2 + "/" + 4);
419 static final ConnectPoint DUAL_LINK_2_CP_2_OUT = ConnectPoint.deviceConnectPoint(DUAL_LINK_2 + "/" + 2);
420 static final ConnectPoint DUAL_LINK_2_CP_3_OUT = ConnectPoint.deviceConnectPoint(DUAL_LINK_2 + "/" + 3);
421 static final ConnectPoint DUAL_LINK_3_CP_1_IN = ConnectPoint.deviceConnectPoint(DUAL_LINK_3 + "/" + 1);
422 static final ConnectPoint DUAL_LINK_3_CP_2_IN = ConnectPoint.deviceConnectPoint(DUAL_LINK_3 + "/" + 2);
423 static final ConnectPoint DUAL_LINK_3_CP_3_OUT = ConnectPoint.deviceConnectPoint(DUAL_LINK_3 + "/" + 3);
424
425 //match on port 1 and point to group for device 1 and 2
426 private static final TrafficTreatment DUAL_LINK_1_GROUP_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
427 .pushMpls()
428 .setMpls(MplsLabel.mplsLabel(100))
429 .group(GROUP_ID)
430 .build();
431 private static final FlowRule DUAL_LINK_1_GROUP_FLOW = DefaultFlowEntry.builder().forDevice(DUAL_LINK_1)
432 .forTable(0)
433 .withPriority(100)
434 .withSelector(SINGLE_FLOW_SELECTOR)
435 .withTreatment(DUAL_LINK_1_GROUP_FLOW_TREATMENT)
436 .fromApp(new DefaultApplicationId(0, "TestApp"))
437 .makePermanent()
438 .build();
439 static final FlowEntry DUAL_LINK_1_GROUP_FLOW_ENTRY = new DefaultFlowEntry(DUAL_LINK_1_GROUP_FLOW);
440
441 //Match on port 4 and point to group for device 2
442 private static final TrafficSelector DUAL_LINK_2_FLOW_SELECTOR = DefaultTrafficSelector.builder()
443 .matchInPort(PortNumber.portNumber(4))
444 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
445 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
446 .build();
447
448 private static final FlowRule DUAL_LINK_2_GROUP_FLOW = DefaultFlowEntry.builder().forDevice(DUAL_LINK_2)
449 .forTable(0)
450 .withPriority(100)
451 .withSelector(DUAL_LINK_2_FLOW_SELECTOR)
452 .withTreatment(DUAL_LINK_1_GROUP_FLOW_TREATMENT)
453 .fromApp(new DefaultApplicationId(0, "TestApp"))
454 .makePermanent()
455 .build();
456 static final FlowEntry DUAL_LINK_2_GROUP_FLOW_ENTRY = new DefaultFlowEntry(DUAL_LINK_2_GROUP_FLOW);
457
458 //Flows for device 3 to ouput on port 3
459 private static final TrafficTreatment DUAL_LINK_1_OUTPUT_TREATMENT = DefaultTrafficTreatment.builder()
460 .popMpls(EthType.EtherType.IPV4.ethType())
461 .setOutput(PortNumber.portNumber(3)).build();
462
463 private static final TrafficSelector DUAL_LINK_3_FLOW_SELECTOR_1 = DefaultTrafficSelector.builder()
464 .matchInPort(PortNumber.portNumber(1))
465 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
466 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
467 .build();
468 private static final FlowRule DUAL_LINK_3_FLOW_1 = DefaultFlowEntry.builder().forDevice(DUAL_LINK_3)
469 .forTable(0)
470 .withPriority(100)
471 .withSelector(DUAL_LINK_3_FLOW_SELECTOR_1)
472 .withTreatment(DUAL_LINK_1_OUTPUT_TREATMENT)
473 .fromApp(new DefaultApplicationId(0, "TestApp"))
474 .makePermanent()
475 .build();
476
477 static final FlowEntry DUAL_LINK_3_FLOW_ENTRY = new DefaultFlowEntry(DUAL_LINK_3_FLOW_1);
478
479 private static final TrafficSelector DUAL_LINK_3_FLOW_SELECTOR_2 = DefaultTrafficSelector.builder()
480 .matchInPort(PortNumber.portNumber(2))
481 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
482 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
483 .build();
484 private static final FlowRule DUAL_LINK_3_FLOW_2 = DefaultFlowEntry.builder().forDevice(DUAL_LINK_3)
485 .forTable(0)
486 .withPriority(100)
487 .withSelector(DUAL_LINK_3_FLOW_SELECTOR_2)
488 .withTreatment(DUAL_LINK_1_OUTPUT_TREATMENT)
489 .fromApp(new DefaultApplicationId(0, "TestApp"))
490 .makePermanent()
491 .build();
492
493 static final FlowEntry DUAL_LINK_3_FLOW_ENTRY_2 = new DefaultFlowEntry(DUAL_LINK_3_FLOW_2);
494
495 //Group with two buckets to output on port 2 and 3 of device 1 and 2
496
497 private static final GroupBucket BUCKET_2_DUAL =
498 DefaultGroupBucket.createSelectGroupBucket(DUAL_LINK_1_OUTPUT_TREATMENT);
499
500 private static final GroupBuckets BUCKETS_DUAL = new GroupBuckets(ImmutableList.of(BUCKET, BUCKET_2_DUAL));
501
502 static final Group DUAL_LINK_GROUP = new DefaultGroup(GROUP_ID, DUAL_LINK_1, Group.Type.SELECT, BUCKETS_DUAL);
Andrea Campanellae4084402017-12-15 15:27:31 +0100503
Andrea Campanella8292ba62018-01-31 16:43:23 +0100504 //Clear Deferred
505 static final DeviceId DEFERRED_1 = DeviceId.deviceId("Deferred");
506
507 static final ConnectPoint DEFERRED_CP_1_IN = ConnectPoint.deviceConnectPoint(DEFERRED_1 + "/" + 1);
508 static final ConnectPoint DEFERRED_CP_2_OUT = ConnectPoint.deviceConnectPoint(DEFERRED_1 + "/" + 2);
509
510 //match on port 1 and apply deferred actions
511 private static final TrafficTreatment DEFERRED_1_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
512 .transition(10)
513 .deferred()
514 .pushMpls()
515 .setMpls(MplsLabel.mplsLabel(100))
516 .build();
517 private static final FlowRule DEFERRED_FLOW = DefaultFlowEntry.builder().forDevice(DEFERRED_1)
518 .forTable(0)
519 .withPriority(100)
520 .withSelector(SINGLE_FLOW_SELECTOR)
521 .withTreatment(DEFERRED_1_FLOW_TREATMENT)
522 .fromApp(new DefaultApplicationId(0, "TestApp"))
523 .makePermanent()
524 .build();
525 static final FlowEntry DEFERRED_FLOW_ENTRY = new DefaultFlowEntry(DEFERRED_FLOW);
526
Andrea Campanella4c6170a2018-01-17 16:34:51 +0100527 //Multicast Flow and Group Test
528 static final DeviceId MULTICAST_GROUP_FLOW_DEVICE = DeviceId.deviceId("MulticastGroupFlowDevice");
529
530 private static final TrafficSelector MULTICAST_FLOW_SELECTOR = DefaultTrafficSelector.builder()
531 .matchInPort(PortNumber.portNumber(1))
532 .matchIPDst(IpPrefix.valueOf("224.0.0.1/32"))
533 .matchEthDst(MacAddress.valueOf("01:00:5e:00:00:01"))
534 .build();
535
536 private static final FlowRule MULTICAST_GROUP_FLOW =
537 DefaultFlowEntry.builder().forDevice(MULTICAST_GROUP_FLOW_DEVICE)
538 .forTable(0)
539 .withPriority(100)
540 .withSelector(MULTICAST_FLOW_SELECTOR)
541 .withTreatment(GROUP_FLOW_TREATMENT)
542 .fromApp(new DefaultApplicationId(0, "TestApp"))
543 .makePermanent()
544 .build();
545
546 static final FlowEntry MULTICAST_GROUP_FLOW_ENTRY = new DefaultFlowEntry(MULTICAST_GROUP_FLOW);
547
548 static final Group MULTICAST_GROUP = new DefaultGroup(GROUP_ID, MULTICAST_GROUP_FLOW_DEVICE,
549 Group.Type.SELECT, BUCKETS_MULTIPLE);
550
551 static final ConnectPoint MULTICAST_IN_CP = ConnectPoint.deviceConnectPoint(MULTICAST_GROUP_FLOW_DEVICE + "/" + 1);
552
553 static final ConnectPoint MULTICAST_OUT_CP = ConnectPoint.deviceConnectPoint(MULTICAST_GROUP_FLOW_DEVICE + "/" + 3);
554
555 static final ConnectPoint MULTICAST_OUT_CP_2 =
556 ConnectPoint.deviceConnectPoint(MULTICAST_GROUP_FLOW_DEVICE + "/" + 2);
557
Andrea Campanella8292ba62018-01-31 16:43:23 +0100558 //match on port 1, clear deferred actions and output
559 private static final TrafficTreatment DEFERRED_CLEAR_1_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
560 .wipeDeferred()
561 .setOutput(PortNumber.portNumber(2))
562 .build();
563 private static final FlowRule DEFERRED_CLEAR_FLOW = DefaultFlowEntry.builder().forDevice(DEFERRED_1)
564 .forTable(10)
565 .withPriority(100)
566 .withSelector(SINGLE_FLOW_SELECTOR)
567 .withTreatment(DEFERRED_CLEAR_1_FLOW_TREATMENT)
568 .fromApp(new DefaultApplicationId(0, "TestApp"))
569 .makePermanent()
570 .build();
571 static final FlowEntry DEFERRED_CLEAR_FLOW_ENTRY = new DefaultFlowEntry(DEFERRED_CLEAR_FLOW);
572
Andrea Campanella1445f7a2018-02-07 12:00:12 +0100573 //LLDP
574
575 static final DeviceId LLDP_FLOW_DEVICE = DeviceId.deviceId("LldpDevice");
576
577 private static final TrafficSelector LLDP_FLOW_SELECTOR = DefaultTrafficSelector.builder()
578 .matchInPort(PortNumber.portNumber(1))
579 .matchEthType(EthType.EtherType.LLDP.ethType().toShort())
580 .build();
581
582 private static final TrafficTreatment LLDP_FLOW_TREATMENT = DefaultTrafficTreatment.builder()
583 .setOutput(PortNumber.CONTROLLER).build();
584 private static final FlowRule LLDP_FLOW = DefaultFlowEntry.builder().forDevice(LLDP_FLOW_DEVICE)
585 .forTable(0)
586 .withPriority(100)
587 .withSelector(LLDP_FLOW_SELECTOR)
588 .withTreatment(LLDP_FLOW_TREATMENT)
589 .fromApp(new DefaultApplicationId(0, "TestApp"))
590 .makePermanent()
591 .build();
592 static final FlowEntry LLDP_FLOW_ENTRY = new DefaultFlowEntry(LLDP_FLOW);
593
594 static final ConnectPoint LLDP_FLOW_CP = ConnectPoint.deviceConnectPoint(LLDP_FLOW_DEVICE + "/" + 1);
595
Andrea Campanellae4084402017-12-15 15:27:31 +0100596 //helper elements
597
Andrea Campanella54923d62018-01-23 12:46:04 +0100598 static final String MASTER_1 = "Master1";
599
Andrea Campanellae4084402017-12-15 15:27:31 +0100600 static final Host H1 = new DefaultHost(ProviderId.NONE, HostId.hostId(HOST_ONE), MacAddress.valueOf(100),
601 VlanId.NONE, new HostLocation(SINGLE_FLOW_DEVICE, PortNumber.portNumber(2), 0),
602 ImmutableSet.of(IpAddress.valueOf("127.0.0.2")));
603
604 static final Host H2 = new DefaultHost(ProviderId.NONE, HostId.hostId(HOST_TWO), MacAddress.valueOf(100),
605 VlanId.NONE, new HostLocation(TOPO_FLOW_3_DEVICE, PortNumber.portNumber(2), 0),
606 ImmutableSet.of(IpAddress.valueOf("127.0.0.3")));
607
608 static final TrafficSelector PACKET_OK = DefaultTrafficSelector.builder()
609 .matchInPort(PortNumber.portNumber(1))
Andrea Campanella4401bd72018-01-18 16:54:34 +0100610 .matchEthType(EthType.EtherType.IPV4.ethType().toShort())
Andrea Campanellae4084402017-12-15 15:27:31 +0100611 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
612 .matchIPDst(IpPrefix.valueOf("127.0.0.2/32"))
Andrea Campanella94c594a2018-02-06 18:58:40 +0100613 .matchVlanId(VlanId.NONE)
Andrea Campanellae4084402017-12-15 15:27:31 +0100614 .build();
615
616 static final TrafficSelector PACKET_OK_TOPO = DefaultTrafficSelector.builder()
617 .matchInPort(PortNumber.portNumber(1))
618 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
619 .matchIPDst(IpPrefix.valueOf("127.0.0.3/32"))
620 .build();
621
Andrea Campanella54923d62018-01-23 12:46:04 +0100622 static final TrafficSelector PACKET_ARP = DefaultTrafficSelector.builder()
623 .matchInPort(PortNumber.portNumber(1))
624 .matchIPDst(IpPrefix.valueOf("255.255.255.255/32"))
625 .matchEthType(EthType.EtherType.ARP.ethType().toShort())
626 .build();
627
Andrea Campanella1445f7a2018-02-07 12:00:12 +0100628 static final TrafficSelector PACKET_LLDP = DefaultTrafficSelector.builder()
629 .matchInPort(PortNumber.portNumber(1))
630 .matchEthType(EthType.EtherType.LLDP.ethType().toShort())
631 .build();
632
Andrea Campanella4c6170a2018-01-17 16:34:51 +0100633 static final TrafficSelector PACKET_OK_MULTICAST = DefaultTrafficSelector.builder()
634 .matchInPort(PortNumber.portNumber(1))
635 .matchEthType(EthType.EtherType.IPV4.ethType().toShort())
636 .matchEthDst(MacAddress.valueOf("01:00:5e:00:00:01"))
637 .matchIPDst(IpPrefix.valueOf("224.0.0.1/32"))
638 .build();
639
Andrea Campanellae4084402017-12-15 15:27:31 +0100640 static final TrafficSelector PACKET_FAIL = DefaultTrafficSelector.builder()
641 .matchInPort(PortNumber.portNumber(1))
642 .matchIPSrc(IpPrefix.valueOf("127.0.0.1/32"))
643 .matchIPDst(IpPrefix.valueOf("127.0.0.99/32"))
644 .build();
645}