blob: 339b2c82042baf05ecefc4e006989dc9b47eb95e [file] [log] [blame]
pierf8e328d2019-06-28 22:17:31 +02001/*
2 * Copyright 2019-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 */
16
17package org.onosproject.segmentrouting;
18
19import com.google.common.collect.ImmutableMap;
20import com.google.common.collect.Lists;
21import com.google.common.collect.Sets;
22import org.onosproject.net.ConnectPoint;
23import org.onosproject.net.DeviceId;
24import org.onosproject.net.PortNumber;
25import org.onosproject.net.host.InterfaceIpAddress;
26import org.onosproject.net.intf.Interface;
27import org.onosproject.routeservice.ResolvedRoute;
28import org.onosproject.routeservice.Route;
29import org.onlab.packet.Ethernet;
30import org.onlab.packet.ICMP;
31import org.onlab.packet.ICMP6;
32import org.onlab.packet.IPv4;
33import org.onlab.packet.IPv6;
34import org.onlab.packet.Ip4Address;
35import org.onlab.packet.Ip6Address;
36import org.onlab.packet.IpAddress;
37import org.onlab.packet.IpPrefix;
38import org.onlab.packet.MacAddress;
39import org.onlab.packet.VlanId;
40import org.onlab.packet.ICMPEcho;
41
42import java.util.Map;
43import java.util.Set;
44
45import static org.onlab.packet.ICMP.TYPE_ECHO_REQUEST;
46import static org.onlab.packet.ICMP6.ECHO_REQUEST;
47import static org.onlab.packet.IPv4.PROTOCOL_ICMP;
48import static org.onosproject.routeservice.Route.Source.STATIC;
49
50/**
51 * Utilities class for unit tests.
52 */
53public final class TestUtils {
54
55 private TestUtils() {
56
57 }
58
59 // Device configuration section
60 static final DeviceId REMOTE_LEAF = DeviceId.deviceId("of:0000000000000001");
61 static final int REMOTE_LEAF_SID4 = 1;
62 static final String REMOTE_LEAF_LB4 = "192.168.0.1";
63 static final int REMOTE_LEAF_SID6 = 10;
64 static final String REMOTE_LEAF_LB6 = "2000::c0a8:1";
65 private static final PortNumber P1 = PortNumber.portNumber(1);
66 static final MacAddress REMOTE_MAC = MacAddress.valueOf("00:00:00:00:00:02");
67
68 static final DeviceId LOCAL_LEAF = DeviceId.deviceId("of:0000000000000101");
69 static final int LOCAL_LEAF_SID4 = 101;
70 static final String LOCAL_LEAF_LB4 = "192.168.0.101";
71 static final int LOCAL_LEAF_SID6 = 111;
72 static final String LOCAL_LEAF_LB6 = "2000::c0a8:101";
73 static final MacAddress LOCAL_MAC = MacAddress.valueOf("00:00:00:00:01:01");
74
75 // Configure a pair
76 static final DeviceId LOCAL_LEAF1 = DeviceId.deviceId("of:0000000000000201");
77 static final int LOCAL_LEAF1_SID4 = 201;
78 static final String LOCAL_LEAF1_LB4 = "192.168.0.201";
79 static final int LOCAL_LEAF1_SID6 = 211;
80 static final String LOCAL_LEAF1_LB6 = "2000::c0a8:201";
81 static final MacAddress LOCAL_MAC1 = MacAddress.valueOf("00:00:00:00:02:01");
82
83 static final DeviceId LOCAL_LEAF2 = DeviceId.deviceId("of:0000000000000202");
84 static final int LOCAL_LEAF2_SID4 = 202;
85 static final String LOCAL_LEAF2_LB4 = "192.168.0.202";
86 static final int LOCAL_LEAF2_SID6 = 212;
87 static final String LOCAL_LEAF2_LB6 = "2000::c0a8:202";
88 static final MacAddress LOCAL_MAC2 = MacAddress.valueOf("00:00:00:00:02:02");
89
90 // Pair port
91 static final PortNumber P3 = PortNumber.portNumber(3);
92
93 // Ports configuration section
94 static final ConnectPoint CP11 = new ConnectPoint(REMOTE_LEAF, P1);
95 private static final PortNumber P2 = PortNumber.portNumber(2);
96 static final ConnectPoint CP12 = new ConnectPoint(REMOTE_LEAF, P2);
97 private static final IpAddress IP4_1 = IpAddress.valueOf("10.0.0.254");
98 private static final IpPrefix PREFIX4_1 = IpPrefix.valueOf("10.0.0.254/24");
99 private static final IpAddress IP6_1 = IpAddress.valueOf("2000::ff");
100 private static final IpPrefix PREFIX6_1 = IpPrefix.valueOf("2000::ff/120");
101 private static final InterfaceIpAddress INTF_IP4_1 = new InterfaceIpAddress(
102 IP4_1, PREFIX4_1);
103 private static final InterfaceIpAddress INTF_IP6_1 = new InterfaceIpAddress(
104 IP6_1, PREFIX6_1);
105 private static final VlanId INTF_VLAN_UNTAGGED = VlanId.vlanId((short) 10);
106 static final Interface INTF1 = new Interface(
107 "INTF1", CP12, Lists.newArrayList(INTF_IP4_1, INTF_IP6_1), MacAddress.NONE,
108 null, INTF_VLAN_UNTAGGED, null, null);
109 static final ConnectPoint CP13 = new ConnectPoint(REMOTE_LEAF, P3);
110 private static final IpAddress IP4_2 = IpAddress.valueOf("10.0.3.254");
111 private static final IpPrefix PREFIX4_2 = IpPrefix.valueOf("10.0.3.254/24");
112 private static final IpAddress IP6_2 = IpAddress.valueOf("2000::3ff");
113 private static final IpPrefix PREFIX6_2 = IpPrefix.valueOf("2000::3ff/120");
114 private static final InterfaceIpAddress INTF_IP4_2 = new InterfaceIpAddress(
115 IP4_2, PREFIX4_2);
116 private static final InterfaceIpAddress INTF_IP6_2 = new InterfaceIpAddress(
117 IP6_2, PREFIX6_2);
118 static final Interface INTF2 = new Interface(
119 "INTF2", CP13, Lists.newArrayList(INTF_IP4_2, INTF_IP6_2), MacAddress.NONE,
120 null, INTF_VLAN_UNTAGGED, null, null);
121
122 static final ConnectPoint CP1011 = new ConnectPoint(LOCAL_LEAF, P1);
123 private static final IpAddress IP4_11 = IpAddress.valueOf("10.0.1.254");
124 private static final IpPrefix PREFIX4_11 = IpPrefix.valueOf("10.0.1.254/24");
125 private static final InterfaceIpAddress INTF_IP4_11 = new InterfaceIpAddress(
126 IP4_11, PREFIX4_11);
127 private static final IpAddress IP6_11 = IpAddress.valueOf("2000::1ff");
128 private static final IpPrefix PREFIX6_11 = IpPrefix.valueOf("2000::1ff/120");
129 private static final InterfaceIpAddress INTF_IP6_11 = new InterfaceIpAddress(
130 IP6_11, PREFIX6_11);
131 static final Interface INTF111 = new Interface(
132 "INTF111", CP1011, Lists.newArrayList(INTF_IP4_11, INTF_IP6_11), MacAddress.NONE, null,
133 INTF_VLAN_UNTAGGED, null, null);
134
135 static final ConnectPoint CP2011 = new ConnectPoint(LOCAL_LEAF1, P1);
136 private static final IpAddress IP4_21 = IpAddress.valueOf("10.0.2.254");
137 private static final IpPrefix PREFIX4_21 = IpPrefix.valueOf("10.0.2.254/24");
138 private static final InterfaceIpAddress INTF_IP4_21 = new InterfaceIpAddress(
139 IP4_21, PREFIX4_21);
140 private static final IpAddress IP6_21 = IpAddress.valueOf("2000::2ff");
141 private static final IpPrefix PREFIX6_21 = IpPrefix.valueOf("2000::2ff/120");
142 private static final InterfaceIpAddress INTF_IP6_21 = new InterfaceIpAddress(
143 IP6_21, PREFIX6_21);
144 static final Interface INTF211 = new Interface(
145 "INTF211", CP2011, Lists.newArrayList(INTF_IP4_21, INTF_IP6_21), MacAddress.NONE, null,
146 INTF_VLAN_UNTAGGED, null, null);
147
148 static final ConnectPoint CP2021 = new ConnectPoint(LOCAL_LEAF2, P1);
149 private static final IpAddress IP4_22 = IpAddress.valueOf("10.0.2.254");
150 private static final IpPrefix PREFIX4_22 = IpPrefix.valueOf("10.0.2.254/24");
151 private static final InterfaceIpAddress INTF_IP4_22 = new InterfaceIpAddress(
152 IP4_22, PREFIX4_22);
153 private static final IpAddress IP6_22 = IpAddress.valueOf("2000::2ff");
154 private static final IpPrefix PREFIX6_22 = IpPrefix.valueOf("2000::2ff/120");
155 private static final InterfaceIpAddress INTF_IP6_22 = new InterfaceIpAddress(
156 IP6_22, PREFIX6_22);
157 static final Interface INTF212 = new Interface(
158 "INTF212", CP2021, Lists.newArrayList(INTF_IP4_22, INTF_IP6_22), MacAddress.NONE, null,
159 INTF_VLAN_UNTAGGED, null, null);
160 private static final PortNumber P4 = PortNumber.portNumber(4);
161 static final ConnectPoint CP2024 = new ConnectPoint(LOCAL_LEAF2, P4);
162 private static final PortNumber P5 = PortNumber.portNumber(5);
163 static final ConnectPoint CP2025 = new ConnectPoint(LOCAL_LEAF2, P5);
164 private static final IpAddress IP4_23 = IpAddress.valueOf("10.0.4.254");
165 private static final IpPrefix PREFIX4_23 = IpPrefix.valueOf("10.0.4.254/24");
166 private static final InterfaceIpAddress INTF_IP4_23 = new InterfaceIpAddress(
167 IP4_23, PREFIX4_23);
168 private static final IpAddress IP6_23 = IpAddress.valueOf("2000::4ff");
169 private static final IpPrefix PREFIX6_23 = IpPrefix.valueOf("2000::4ff/120");
170 private static final InterfaceIpAddress INTF_IP6_23 = new InterfaceIpAddress(
171 IP6_23, PREFIX6_23);
172 static final Interface INTF213 = new Interface(
173 "INTF212", CP2024, Lists.newArrayList(INTF_IP4_23, INTF_IP6_23), MacAddress.NONE, null,
174 INTF_VLAN_UNTAGGED, null, null);
175
176 // Packet-ins section
177 private static final MacAddress SRC_MAC = MacAddress.valueOf("00:00:00:00:00:01");
178
179 private static final ICMPEcho ICMP_ECHO = new ICMPEcho()
180 .setIdentifier((short) 0)
181 .setSequenceNum((short) 0);
182
183 private static final ICMP ICMP_REQUEST = (ICMP) new ICMP()
184 .setIcmpType(TYPE_ECHO_REQUEST)
185 .setPayload(ICMP_ECHO);
186
187 private static final Ip4Address SRC_IPV4 = Ip4Address.valueOf("10.0.1.1");
188 static final Ip4Address DST_IPV4 = Ip4Address.valueOf("10.0.0.254");
189
190 private static final IPv4 IPV4_REQUEST = (IPv4) new IPv4()
191 .setDestinationAddress(DST_IPV4.toInt())
192 .setSourceAddress(SRC_IPV4.toInt())
193 .setTtl((byte) 64)
194 .setProtocol(PROTOCOL_ICMP)
195 .setPayload(ICMP_REQUEST);
196
197 static final Ethernet ETH_REQ_IPV4 = (Ethernet) new Ethernet()
198 .setEtherType(Ethernet.TYPE_IPV4)
199 .setDestinationMACAddress(REMOTE_MAC)
200 .setSourceMACAddress(SRC_MAC)
201 .setPayload(IPV4_REQUEST);
202
203 private static final ICMP6 ICMP6_REQUEST = new ICMP6()
204 .setIcmpType(ECHO_REQUEST);
205
206 private static final Ip6Address SRC_IPV6 = Ip6Address.valueOf("2000::101");
207 static final Ip6Address DST_IPV6 = Ip6Address.valueOf("2000::ff");
208
209 private static final IPv6 IPV6_REQUEST = (IPv6) new IPv6()
210 .setDestinationAddress(DST_IPV6.toOctets())
211 .setSourceAddress(SRC_IPV6.toOctets())
212 .setHopLimit((byte) 255)
213 .setNextHeader(IPv6.PROTOCOL_ICMP6)
214 .setPayload(ICMP6_REQUEST);
215
216 static final Ethernet ETH_REQ_IPV6 = (Ethernet) new Ethernet()
217 .setEtherType(Ethernet.TYPE_IPV6)
218 .setDestinationMACAddress(REMOTE_MAC)
219 .setSourceMACAddress(SRC_MAC)
220 .setPayload(IPV6_REQUEST);
221
222 static final Ip4Address SRC_IPV41 = Ip4Address.valueOf("10.0.2.1");
223
224 private static final IPv4 IPV41_REQUEST = (IPv4) new IPv4()
225 .setDestinationAddress(DST_IPV4.toInt())
226 .setSourceAddress(SRC_IPV41.toInt())
227 .setTtl((byte) 64)
228 .setProtocol(PROTOCOL_ICMP)
229 .setPayload(ICMP_REQUEST);
230
231 static final Ethernet ETH_REQ_IPV41 = (Ethernet) new Ethernet()
232 .setEtherType(Ethernet.TYPE_IPV4)
233 .setDestinationMACAddress(REMOTE_MAC)
234 .setSourceMACAddress(SRC_MAC)
235 .setPayload(IPV41_REQUEST);
236
237 static final Ip6Address SRC_IPV61 = Ip6Address.valueOf("2000::201");
238
239 private static final IPv6 IPV61_REQUEST = (IPv6) new IPv6()
240 .setDestinationAddress(DST_IPV6.toOctets())
241 .setSourceAddress(SRC_IPV61.toOctets())
242 .setHopLimit((byte) 255)
243 .setNextHeader(IPv6.PROTOCOL_ICMP6)
244 .setPayload(ICMP6_REQUEST);
245
246 static final Ethernet ETH_REQ_IPV61 = (Ethernet) new Ethernet()
247 .setEtherType(Ethernet.TYPE_IPV6)
248 .setDestinationMACAddress(REMOTE_MAC)
249 .setSourceMACAddress(SRC_MAC)
250 .setPayload(IPV61_REQUEST);
251
252 private static final MacAddress SRC_MAC_MY = MacAddress.valueOf("00:01:00:00:00:01");
253 static final Ip4Address SRC_IPV4_MY = Ip4Address.valueOf("10.0.0.1");
254
255 private static final IPv4 IPV4_REQUEST_MY = (IPv4) new IPv4()
256 .setDestinationAddress(DST_IPV4.toInt())
257 .setSourceAddress(SRC_IPV4_MY.toInt())
258 .setTtl((byte) 64)
259 .setProtocol(PROTOCOL_ICMP)
260 .setPayload(ICMP_REQUEST);
261
262 static final Ethernet ETH_REQ_IPV4_MY = (Ethernet) new Ethernet()
263 .setEtherType(Ethernet.TYPE_IPV4)
264 .setDestinationMACAddress(REMOTE_MAC)
265 .setSourceMACAddress(SRC_MAC_MY)
266 .setPayload(IPV4_REQUEST_MY);
267
268 static final Ip6Address SRC_IPV6_MY = Ip6Address.valueOf("2000::1");
269
270 private static final IPv6 IPV6_REQUEST_MY = (IPv6) new IPv6()
271 .setDestinationAddress(DST_IPV6.toOctets())
272 .setSourceAddress(SRC_IPV6_MY.toOctets())
273 .setHopLimit((byte) 255)
274 .setNextHeader(IPv6.PROTOCOL_ICMP6)
275 .setPayload(ICMP6_REQUEST);
276
277 static final Ethernet ETH_REQ_IPV6_MY = (Ethernet) new Ethernet()
278 .setEtherType(Ethernet.TYPE_IPV6)
279 .setDestinationMACAddress(REMOTE_MAC)
280 .setSourceMACAddress(SRC_MAC_MY)
281 .setPayload(IPV6_REQUEST_MY);
282
283 static final Ip4Address DST_IPV4_LOCAL = Ip4Address.valueOf("10.0.3.254");
284
285 private static final IPv4 IPV4_REQUEST_LOCAL = (IPv4) new IPv4()
286 .setDestinationAddress(DST_IPV4_LOCAL.toInt())
287 .setSourceAddress(SRC_IPV4_MY.toInt())
288 .setTtl((byte) 64)
289 .setProtocol(PROTOCOL_ICMP)
290 .setPayload(ICMP_REQUEST);
291
292 static final Ethernet ETH_REQ_IPV4_LOCAL = (Ethernet) new Ethernet()
293 .setEtherType(Ethernet.TYPE_IPV4)
294 .setDestinationMACAddress(REMOTE_MAC)
295 .setSourceMACAddress(SRC_MAC_MY)
296 .setPayload(IPV4_REQUEST_LOCAL);
297
298 static final Ip6Address DST_IPV6_LOCAL = Ip6Address.valueOf("2000::3ff");
299
300 private static final IPv6 IPV6_REQUEST_LOCAL = (IPv6) new IPv6()
301 .setDestinationAddress(DST_IPV6_LOCAL.toOctets())
302 .setSourceAddress(SRC_IPV6_MY.toOctets())
303 .setHopLimit((byte) 255)
304 .setNextHeader(IPv6.PROTOCOL_ICMP6)
305 .setPayload(ICMP6_REQUEST);
306
307 static final Ethernet ETH_REQ_IPV6_LOCAL = (Ethernet) new Ethernet()
308 .setEtherType(Ethernet.TYPE_IPV6)
309 .setDestinationMACAddress(REMOTE_MAC)
310 .setSourceMACAddress(SRC_MAC_MY)
311 .setPayload(IPV6_REQUEST_LOCAL);
312
313 static final Ip4Address DST_IPV4_SAME = Ip4Address.valueOf("10.0.4.254");
314
315 private static final IPv4 IPV4_REQUEST_SAME = (IPv4) new IPv4()
316 .setDestinationAddress(DST_IPV4_SAME.toInt())
317 .setSourceAddress(SRC_IPV41.toInt())
318 .setTtl((byte) 64)
319 .setProtocol(PROTOCOL_ICMP)
320 .setPayload(ICMP_REQUEST);
321
322 static final Ethernet ETH_REQ_IPV4_SAME = (Ethernet) new Ethernet()
323 .setEtherType(Ethernet.TYPE_IPV4)
324 .setDestinationMACAddress(LOCAL_MAC2)
325 .setSourceMACAddress(SRC_MAC)
326 .setPayload(IPV4_REQUEST_SAME);
327
328 static final Ip6Address DST_IPV6_SAME = Ip6Address.valueOf("2000::4ff");
329
330 private static final IPv6 IPV6_REQUEST_SAME = (IPv6) new IPv6()
331 .setDestinationAddress(DST_IPV6_SAME.toOctets())
332 .setSourceAddress(SRC_IPV61.toOctets())
333 .setHopLimit((byte) 255)
334 .setNextHeader(IPv6.PROTOCOL_ICMP6)
335 .setPayload(ICMP6_REQUEST);
336
337 static final Ethernet ETH_REQ_IPV6_SAME = (Ethernet) new Ethernet()
338 .setEtherType(Ethernet.TYPE_IPV6)
339 .setDestinationMACAddress(LOCAL_MAC2)
340 .setSourceMACAddress(SRC_MAC)
341 .setPayload(IPV6_REQUEST_SAME);
342
343 static final Ip6Address DST_IPV6_LL = Ip6Address.valueOf(
344 IPv6.getLinkLocalAddress(MacAddress.NONE.toBytes()));
345 static final Ip6Address SRC_IPV6_LL = Ip6Address.valueOf(
346 IPv6.getLinkLocalAddress(SRC_MAC_MY.toBytes()));
347
348 private static final IPv6 IPV6_REQUEST_LL = (IPv6) new IPv6()
349 .setDestinationAddress(DST_IPV6_LL.toOctets())
350 .setSourceAddress(SRC_IPV6_LL.toOctets())
351 .setHopLimit((byte) 255)
352 .setNextHeader(IPv6.PROTOCOL_ICMP6)
353 .setPayload(ICMP6_REQUEST);
354
355 static final Ethernet ETH_REQ_IPV6_LL = (Ethernet) new Ethernet()
356 .setEtherType(Ethernet.TYPE_IPV6)
357 .setDestinationMACAddress(MacAddress.NONE)
358 .setSourceMACAddress(SRC_MAC_MY)
359 .setPayload(IPV6_REQUEST_LL);
360
361 static final Ip4Address DST_IPV4_LOOPBACK = Ip4Address.valueOf(REMOTE_LEAF_LB4);
362
363 private static final IPv4 IPV4_REQUEST_LOOPBACK = (IPv4) new IPv4()
364 .setDestinationAddress(DST_IPV4_LOOPBACK.toInt())
365 .setSourceAddress(SRC_IPV4_MY.toInt())
366 .setTtl((byte) 64)
367 .setProtocol(PROTOCOL_ICMP)
368 .setPayload(ICMP_REQUEST);
369
370 static final Ethernet ETH_REQ_IPV4_LOOPBACK = (Ethernet) new Ethernet()
371 .setEtherType(Ethernet.TYPE_IPV4)
372 .setDestinationMACAddress(REMOTE_MAC)
373 .setSourceMACAddress(SRC_MAC_MY)
374 .setPayload(IPV4_REQUEST_LOOPBACK);
375
376 static final Ip6Address DST_IPV6_LOOPBACK = Ip6Address.valueOf(REMOTE_LEAF_LB6);
377
378 private static final IPv6 IPV6_REQUEST_LOOPBACK = (IPv6) new IPv6()
379 .setDestinationAddress(DST_IPV6_LOOPBACK.toOctets())
380 .setSourceAddress(SRC_IPV6_MY.toOctets())
381 .setHopLimit((byte) 255)
382 .setNextHeader(IPv6.PROTOCOL_ICMP6)
383 .setPayload(ICMP6_REQUEST);
384
385 static final Ethernet ETH_REQ_IPV6_LOOPBACK = (Ethernet) new Ethernet()
386 .setEtherType(Ethernet.TYPE_IPV6)
387 .setDestinationMACAddress(REMOTE_MAC)
388 .setSourceMACAddress(SRC_MAC_MY)
389 .setPayload(IPV6_REQUEST_LOOPBACK);
390
391 static final Ip4Address DST_IPV4_LOOPBACK_PAIR = Ip4Address.valueOf(LOCAL_LEAF1_LB4);
392
393 private static final IPv4 IPV4_REQUEST_LOOPBACK_PAIR = (IPv4) new IPv4()
394 .setDestinationAddress(DST_IPV4_LOOPBACK_PAIR.toInt())
395 .setSourceAddress(SRC_IPV41.toInt())
396 .setTtl((byte) 64)
397 .setProtocol(PROTOCOL_ICMP)
398 .setPayload(ICMP_REQUEST);
399
400 static final Ethernet ETH_REQ_IPV4_LOOPBACK_PAIR = (Ethernet) new Ethernet()
401 .setEtherType(Ethernet.TYPE_IPV4)
402 .setDestinationMACAddress(LOCAL_MAC1)
403 .setSourceMACAddress(SRC_MAC)
404 .setPayload(IPV4_REQUEST_LOOPBACK_PAIR);
405
406 static final Ip6Address DST_IPV6_LOOPBACK_PAIR = Ip6Address.valueOf(LOCAL_LEAF2_LB6);
407
408 private static final IPv6 IPV6_REQUEST_LOOPBACK_PAIR = (IPv6) new IPv6()
409 .setDestinationAddress(DST_IPV6_LOOPBACK_PAIR.toOctets())
410 .setSourceAddress(SRC_IPV61.toOctets())
411 .setHopLimit((byte) 255)
412 .setNextHeader(IPv6.PROTOCOL_ICMP6)
413 .setPayload(ICMP6_REQUEST);
414
415 static final Ethernet ETH_REQ_IPV6_LOOPBACK_PAIR = (Ethernet) new Ethernet()
416 .setEtherType(Ethernet.TYPE_IPV6)
417 .setDestinationMACAddress(LOCAL_MAC2)
418 .setSourceMACAddress(SRC_MAC)
419 .setPayload(IPV6_REQUEST_LOOPBACK_PAIR);
420
421 static final Ip4Address DST_IPV4_GATEWAY_PAIR = Ip4Address.valueOf("10.0.2.254");
422
423 private static final IPv4 IPV4_REQUEST_GATEWAY_PAIR = (IPv4) new IPv4()
424 .setDestinationAddress(DST_IPV4_GATEWAY_PAIR.toInt())
425 .setSourceAddress(SRC_IPV41.toInt())
426 .setTtl((byte) 64)
427 .setProtocol(PROTOCOL_ICMP)
428 .setPayload(ICMP_REQUEST);
429
430 static final Ethernet ETH_REQ_IPV4_GATEWAY_PAIR = (Ethernet) new Ethernet()
431 .setEtherType(Ethernet.TYPE_IPV4)
432 .setDestinationMACAddress(LOCAL_MAC1)
433 .setSourceMACAddress(SRC_MAC)
434 .setPayload(IPV4_REQUEST_GATEWAY_PAIR);
435
436 static final Ip6Address DST_IPV6_GATEWAY_PAIR = Ip6Address.valueOf("2000::2ff");
437
438 private static final IPv6 IPV6_REQUEST_GATEWAY_PAIR = (IPv6) new IPv6()
439 .setDestinationAddress(DST_IPV6_GATEWAY_PAIR.toOctets())
440 .setSourceAddress(SRC_IPV61.toOctets())
441 .setHopLimit((byte) 255)
442 .setNextHeader(IPv6.PROTOCOL_ICMP6)
443 .setPayload(ICMP6_REQUEST);
444
445 static final Ethernet ETH_REQ_IPV6_GATEWAY_PAIR = (Ethernet) new Ethernet()
446 .setEtherType(Ethernet.TYPE_IPV6)
447 .setDestinationMACAddress(LOCAL_MAC2)
448 .setSourceMACAddress(SRC_MAC)
449 .setPayload(IPV6_REQUEST_GATEWAY_PAIR);
450
451 // Resolved route
452 private static final ResolvedRoute IPV4_ROUTE = new ResolvedRoute(
453 new Route(STATIC, SRC_IPV4.toIpPrefix(), SRC_IPV4), MacAddress.NONE);
454 private static final ResolvedRoute IPV6_ROUTE = new ResolvedRoute(
455 new Route(STATIC, SRC_IPV6.toIpPrefix(), SRC_IPV6), MacAddress.NONE);
456 static final Map<IpPrefix, Set<ResolvedRoute>> ROUTE_STORE = ImmutableMap.of(SRC_IPV4.toIpPrefix(),
457 Sets.newHashSet(IPV4_ROUTE),
458 SRC_IPV6.toIpPrefix(),
459 Sets.newHashSet(IPV6_ROUTE));
460}