pier | 6a2052b | 2019-06-28 22:17:31 +0200 | [diff] [blame] | 1 | /* |
| 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 | |
| 17 | package org.onosproject.segmentrouting; |
| 18 | |
| 19 | import com.google.common.collect.ImmutableMap; |
| 20 | import com.google.common.collect.Lists; |
| 21 | import com.google.common.collect.Sets; |
| 22 | import org.onosproject.net.ConnectPoint; |
| 23 | import org.onosproject.net.DeviceId; |
| 24 | import org.onosproject.net.PortNumber; |
| 25 | import org.onosproject.net.host.InterfaceIpAddress; |
| 26 | import org.onosproject.net.intf.Interface; |
| 27 | import org.onosproject.routeservice.ResolvedRoute; |
| 28 | import org.onosproject.routeservice.Route; |
| 29 | import org.onlab.packet.Ethernet; |
| 30 | import org.onlab.packet.ICMP; |
| 31 | import org.onlab.packet.ICMP6; |
| 32 | import org.onlab.packet.IPv4; |
| 33 | import org.onlab.packet.IPv6; |
| 34 | import org.onlab.packet.Ip4Address; |
| 35 | import org.onlab.packet.Ip6Address; |
| 36 | import org.onlab.packet.IpAddress; |
| 37 | import org.onlab.packet.IpPrefix; |
| 38 | import org.onlab.packet.MacAddress; |
| 39 | import org.onlab.packet.VlanId; |
| 40 | import org.onlab.packet.ICMPEcho; |
| 41 | |
| 42 | import java.util.Map; |
| 43 | import java.util.Set; |
| 44 | |
| 45 | import static org.onlab.packet.ICMP.TYPE_ECHO_REQUEST; |
| 46 | import static org.onlab.packet.ICMP6.ECHO_REQUEST; |
| 47 | import static org.onlab.packet.IPv4.PROTOCOL_ICMP; |
| 48 | import static org.onosproject.routeservice.Route.Source.STATIC; |
| 49 | |
| 50 | /** |
| 51 | * Utilities class for unit tests. |
| 52 | */ |
| 53 | public 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 | } |