0048f1da4c
Reviewed-by: jpai
1146 lines
53 KiB
Java
1146 lines
53 KiB
Java
/*
|
|
* Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.FileNotFoundException;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.ObjectInputStream;
|
|
import java.io.ObjectOutputStream;
|
|
import java.io.PrintStream;
|
|
import java.net.Inet6Address;
|
|
import java.net.InetAddress;
|
|
import java.net.NetworkInterface;
|
|
import java.net.UnknownHostException;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Enumeration;
|
|
import java.util.List;
|
|
|
|
import jdk.test.lib.Platform;
|
|
import jdk.test.lib.NetworkConfiguration;
|
|
|
|
/**
|
|
* @test
|
|
* @bug 8007373
|
|
* @summary jdk7 backward compatibility serialization problem
|
|
* @library /test/lib
|
|
* @build jdk.test.lib.NetworkConfiguration
|
|
* @run main/othervm Inet6AddressSerializationTest
|
|
*/
|
|
|
|
public class Inet6AddressSerializationTest {
|
|
|
|
static boolean failed;
|
|
|
|
static boolean isWindows = System.getProperty("os.name").startsWith("Windows");
|
|
|
|
public static final int LOOPBACK_SCOPE_ID = 0;
|
|
|
|
public static final byte[] IN6ADDR_ANY_INIT = { (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
|
|
|
|
public static final byte[] LOOPBACKIPV6ADDRESS = { (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01 };
|
|
|
|
// fe80::21b:24ff:febd:f29c
|
|
public static final byte[] E1000G0IPV6ADDRESS = { (byte) 0xfe, (byte) 0x80,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x02, (byte) 0x1b, (byte) 0x24, (byte) 0xff,
|
|
(byte) 0xfe, (byte) 0xbd, (byte) 0xf2, (byte) 0x9c };
|
|
|
|
public static final String E1000G0HOSTNAME = "fe80:0:0:0:21b:24ff:febd:f29c%e1000g0";
|
|
|
|
public static final String LOCALHOSTNAME = "localhost";
|
|
|
|
public static final String NETWORK_IF_E1000G0 = "e1000g0";
|
|
|
|
public static final String NETWORK_IF_LO0 = "lo0";
|
|
|
|
public static final int SCOPE_ID_E1000G0 = 2;
|
|
|
|
public static final int SCOPE_ID_LO0 = 1;
|
|
|
|
public static final int SCOPE_ID_ZERO = 0;
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
// args[0] == generate-loopback generates serial data for loopback if
|
|
// args[0] == generateAll generates serial data for interfaces with an
|
|
// IPV6 address binding
|
|
|
|
if (args.length != 0) {
|
|
|
|
if (args[0].equals("generate-loopback")) {
|
|
|
|
generateSerializedInet6AddressData(Inet6Address.getByAddress(
|
|
InetAddress.getLoopbackAddress().getHostName(),
|
|
LOOPBACKIPV6ADDRESS, LOOPBACK_SCOPE_ID), System.out,
|
|
true);
|
|
|
|
} else {
|
|
generateAllInet6AddressSerializedData();
|
|
}
|
|
} else {
|
|
runTests();
|
|
}
|
|
}
|
|
|
|
private static void runTests() throws UnknownHostException, Exception,
|
|
IOException {
|
|
byte[] thisHostIPV6Address = null;
|
|
int scope_id = LOOPBACK_SCOPE_ID;
|
|
|
|
System.out.println("Hostname: "
|
|
+ InetAddress.getLocalHost().getHostName());
|
|
System.out.println("LocalHost isLoopback : "
|
|
+ InetAddress.getLocalHost().isLoopbackAddress());
|
|
thisHostIPV6Address = getThisHostIPV6Address(InetAddress.getLocalHost()
|
|
.getHostName());
|
|
|
|
if (thisHostIPV6Address == null) {
|
|
thisHostIPV6Address = IN6ADDR_ANY_INIT;
|
|
}
|
|
|
|
// testing JDK7 generated serialized loopback against locally generated
|
|
// loopback address
|
|
testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
|
|
.getLoopbackAddress().getHostName(), LOOPBACKIPV6ADDRESS,
|
|
scope_id), JDK7Inet6AddressSerialData);
|
|
// testing JDK8 generated serialized loopback against locally generated
|
|
// loopback address
|
|
testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
|
|
.getLoopbackAddress().getHostName(), LOOPBACKIPV6ADDRESS,
|
|
scope_id), JDK8Inet6AddressSerialData);
|
|
testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
|
|
.getLocalHost().getHostName(), IN6ADDR_ANY_INIT, scope_id),
|
|
null);
|
|
testInet6AddressSerialization(Inet6Address.getByAddress(InetAddress
|
|
.getLocalHost().getHostName(), thisHostIPV6Address, scope_id),
|
|
null);
|
|
testAllNetworkInterfaces();
|
|
|
|
// test against lo0
|
|
testSerializedLo0Inet6Address();
|
|
|
|
testSerializedE1000gInet6Address();
|
|
|
|
if (failed)
|
|
throw new RuntimeException("Some tests failed, check output");
|
|
}
|
|
|
|
private static byte[] getThisHostIPV6Address(String hostName)
|
|
throws Exception {
|
|
InetAddress[] thisHostIPAddresses = null;
|
|
try {
|
|
thisHostIPAddresses = InetAddress.getAllByName(InetAddress
|
|
.getLocalHost().getHostName());
|
|
} catch (UnknownHostException uhEx) {
|
|
uhEx.printStackTrace();
|
|
throw uhEx;
|
|
}
|
|
byte[] thisHostIPV6Address = null;
|
|
for (InetAddress inetAddress : thisHostIPAddresses) {
|
|
if (inetAddress instanceof Inet6Address) {
|
|
if (inetAddress.getHostName().equals(hostName)) {
|
|
thisHostIPV6Address = inetAddress.getAddress();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
// System.err.println("getThisHostIPV6Address: address is "
|
|
// + Arrays.toString(thisHostIPV6Address));
|
|
return thisHostIPV6Address;
|
|
}
|
|
|
|
static void testAllNetworkInterfaces() throws Exception {
|
|
System.err.println("\n testAllNetworkInterfaces: \n ");
|
|
for (Enumeration<NetworkInterface> e = NetworkInterface
|
|
.getNetworkInterfaces(); e.hasMoreElements();) {
|
|
NetworkInterface netIF = e.nextElement();
|
|
// Skip (Windows)Teredo Tunneling Pseudo-Interface
|
|
String dName = netIF.getDisplayName();
|
|
if (isWindows) {
|
|
if (dName != null && dName.contains("Teredo")) {
|
|
continue;
|
|
}
|
|
}
|
|
// skip awdl and llw interfaces on macosx
|
|
if (Platform.isOSX()) {
|
|
if((dName != null) &&
|
|
((dName.contains("awdl")) || (dName.contains("llw")))) {
|
|
continue;
|
|
}
|
|
}
|
|
for (Enumeration<InetAddress> iadrs = netIF.getInetAddresses(); iadrs
|
|
.hasMoreElements();) {
|
|
InetAddress iadr = iadrs.nextElement();
|
|
if (iadr instanceof Inet6Address) {
|
|
System.err.println("Test NetworkInterface: " + netIF);
|
|
Inet6Address i6adr = (Inet6Address) iadr;
|
|
System.err.println("Testing with " + iadr);
|
|
System.err.println(" scoped iface: "
|
|
+ i6adr.getScopedInterface());
|
|
System.err.println(" hostname: " + i6adr.getHostName());
|
|
testInet6AddressSerialization(i6adr, null);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
static void displayExpectedInet6Address(Inet6Address expectedInet6Address) {
|
|
|
|
String expectedHostName = expectedInet6Address.getHostName();
|
|
byte[] expectedAddress = expectedInet6Address.getAddress();
|
|
String expectedHostAddress = expectedInet6Address.getHostAddress();
|
|
int expectedScopeId = expectedInet6Address.getScopeId();
|
|
NetworkInterface expectedNetIf = expectedInet6Address
|
|
.getScopedInterface();
|
|
|
|
System.err.println("Excpected HostName: " + expectedHostName);
|
|
System.err.println("Expected Address: "
|
|
+ Arrays.toString(expectedAddress));
|
|
System.err.println("Expected HostAddress: " + expectedHostAddress);
|
|
System.err.println("Expected Scope Id " + expectedScopeId);
|
|
System.err.println("Expected NetworkInterface " + expectedNetIf);
|
|
System.err.println("Expected Inet6Address " + expectedInet6Address);
|
|
}
|
|
|
|
// test serialization deserialization of Inet6Address
|
|
static void testInet6AddressSerialization(
|
|
Inet6Address expectedInet6Address, byte[] serializedAddress)
|
|
throws IOException {
|
|
System.err.println("\n testInet6AddressSerialization: enter \n");
|
|
|
|
// displayExpectedInet6Address(expectedInet6Address);
|
|
|
|
byte[] serialData = serializedAddress != null ? serializedAddress
|
|
: generateSerializedInet6AddressData(expectedInet6Address,
|
|
null, false);
|
|
try (ByteArrayInputStream bis = new ByteArrayInputStream(serialData);
|
|
ObjectInputStream oin = new ObjectInputStream(bis)) {
|
|
Inet6Address deserializedIPV6Addr = (Inet6Address) oin.readObject();
|
|
System.err.println("Deserialized Inet6Address "
|
|
+ deserializedIPV6Addr);
|
|
assertHostNameEqual(expectedInet6Address.getHostName(),
|
|
deserializedIPV6Addr.getHostName());
|
|
assertHostAddressEqual(expectedInet6Address.getHostAddress(),
|
|
deserializedIPV6Addr.getHostAddress());
|
|
assertAddressEqual(expectedInet6Address.getAddress(),
|
|
deserializedIPV6Addr.getAddress());
|
|
assertScopeIdEqual(expectedInet6Address.getScopeId(),
|
|
deserializedIPV6Addr.getScopeId());
|
|
assertNetworkInterfaceEqual(
|
|
expectedInet6Address.getScopedInterface(),
|
|
deserializedIPV6Addr.getScopedInterface());
|
|
} catch (Exception e) {
|
|
System.err.println("Exception caught during deserialization");
|
|
failed = true;
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
static void testSerializedE1000gInet6Address() throws IOException {
|
|
System.err.println("\n testSerializedE1000gInet6Address: enter \n");
|
|
boolean testWithNetIf = true;
|
|
boolean useMockInet6Address = false;
|
|
|
|
NetworkInterface testNetIf = NetworkInterface
|
|
.getByName(NETWORK_IF_E1000G0);
|
|
Inet6Address expectedInet6Address = null;
|
|
if (testNetIf != null) {
|
|
System.err
|
|
.println("\n testSerializedE1000gInet6Address: using netif \n");
|
|
try {
|
|
expectedInet6Address = Inet6Address.getByAddress(
|
|
E1000G0HOSTNAME, E1000G0IPV6ADDRESS, testNetIf);
|
|
} catch (UnknownHostException ukhEx) {
|
|
ukhEx.printStackTrace();
|
|
testWithNetIf = true;
|
|
useMockInet6Address = true;
|
|
}
|
|
} else {
|
|
System.err
|
|
.println("\n testSerializedE1000gInet6Address: using index \n");
|
|
try {
|
|
expectedInet6Address = Inet6Address.getByAddress(
|
|
E1000G0HOSTNAME, E1000G0IPV6ADDRESS, SCOPE_ID_ZERO);
|
|
} catch (UnknownHostException ukhEx1) {
|
|
ukhEx1.printStackTrace();
|
|
useMockInet6Address = true;
|
|
}
|
|
testWithNetIf = false;
|
|
}
|
|
|
|
byte[] serializedAddress = SerialData_ifname_e1000g0;
|
|
|
|
// displayExpectedInet6Address(expectedInet6Address);
|
|
|
|
try (ByteArrayInputStream bis = new ByteArrayInputStream(
|
|
serializedAddress);
|
|
ObjectInputStream oin = new ObjectInputStream(bis)) {
|
|
Inet6Address deserializedIPV6Addr = (Inet6Address) oin.readObject();
|
|
System.err.println("Deserialized Inet6Address "
|
|
+ deserializedIPV6Addr);
|
|
|
|
if (!useMockInet6Address) {
|
|
assertHostNameEqual(expectedInet6Address.getHostName(),
|
|
deserializedIPV6Addr.getHostName());
|
|
if (testWithNetIf) {
|
|
assertHostAddressEqual(
|
|
expectedInet6Address.getHostAddress(),
|
|
deserializedIPV6Addr.getHostAddress());
|
|
} else {
|
|
assertHostAddressEqual(
|
|
MockE1000g0Inet6Address.getBareHostAddress(),
|
|
deserializedIPV6Addr.getHostAddress());
|
|
}
|
|
assertAddressEqual(expectedInet6Address.getAddress(),
|
|
deserializedIPV6Addr.getAddress());
|
|
assertScopeIdEqual(expectedInet6Address.getScopeId(),
|
|
deserializedIPV6Addr.getScopeId());
|
|
if (testWithNetIf) {
|
|
assertNetworkInterfaceEqual(
|
|
expectedInet6Address.getScopedInterface(),
|
|
deserializedIPV6Addr.getScopedInterface());
|
|
} else {
|
|
assertNetworkInterfaceEqual(null,
|
|
deserializedIPV6Addr.getScopedInterface());
|
|
}
|
|
} else { // use MockLo0Inet6Address
|
|
assertHostNameEqual(MockE1000g0Inet6Address.getHostName(),
|
|
deserializedIPV6Addr.getHostName());
|
|
if (testWithNetIf) {
|
|
assertHostAddressEqual(
|
|
MockE1000g0Inet6Address.getHostAddress(),
|
|
deserializedIPV6Addr.getHostAddress());
|
|
} else {
|
|
assertHostAddressEqual(
|
|
MockE1000g0Inet6Address.getHostAddressWithIndex(),
|
|
deserializedIPV6Addr.getHostAddress());
|
|
}
|
|
assertAddressEqual(MockE1000g0Inet6Address.getAddress(),
|
|
deserializedIPV6Addr.getAddress());
|
|
if (testWithNetIf) {
|
|
assertScopeIdEqual(MockE1000g0Inet6Address.getScopeId(),
|
|
deserializedIPV6Addr.getScopeId());
|
|
} else {
|
|
assertScopeIdEqual(MockE1000g0Inet6Address.getScopeZero(),
|
|
deserializedIPV6Addr.getScopeId());
|
|
}
|
|
assertNetworkInterfaceNameEqual(
|
|
MockE1000g0Inet6Address.getScopeIfName(),
|
|
deserializedIPV6Addr.getScopedInterface());
|
|
}
|
|
} catch (Exception e) {
|
|
System.err.println("Exception caught during deserialization");
|
|
failed = true;
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
static void testSerializedLo0Inet6Address() throws IOException {
|
|
System.err.println("\n testSerializedLo0Inet6Address: enter \n");
|
|
boolean testWithNetIf = true;
|
|
boolean useMockInet6Address = false;
|
|
|
|
NetworkInterface testNetIf = NetworkInterface.getByName(NETWORK_IF_LO0);
|
|
Inet6Address expectedInet6Address = null;
|
|
if (testNetIf != null) {
|
|
System.err
|
|
.println("\n testSerializedLo0Inet6Address: using netif \n");
|
|
try {
|
|
expectedInet6Address = Inet6Address.getByAddress(LOCALHOSTNAME,
|
|
LOOPBACKIPV6ADDRESS, testNetIf);
|
|
} catch (UnknownHostException ukhEx) {
|
|
ukhEx.printStackTrace();
|
|
testWithNetIf = true;
|
|
useMockInet6Address = true;
|
|
}
|
|
} else {
|
|
System.err
|
|
.println("\n testSerializedLo0Inet6Address: using index \n");
|
|
try {
|
|
expectedInet6Address = Inet6Address.getByAddress(LOCALHOSTNAME,
|
|
LOOPBACKIPV6ADDRESS, SCOPE_ID_ZERO);
|
|
} catch (UnknownHostException ukhEx1) {
|
|
ukhEx1.printStackTrace();
|
|
useMockInet6Address = true;
|
|
}
|
|
testWithNetIf = false;
|
|
}
|
|
|
|
// displayExpectedInet6Address(expectedInet6Address);
|
|
|
|
byte[] serializedAddress = SerialData_ifname_lo0;
|
|
|
|
try (ByteArrayInputStream bis = new ByteArrayInputStream(
|
|
serializedAddress);
|
|
ObjectInputStream oin = new ObjectInputStream(bis)) {
|
|
Inet6Address deserializedIPV6Addr = (Inet6Address) oin.readObject();
|
|
System.err.println("Deserialized Inet6Address "
|
|
+ deserializedIPV6Addr);
|
|
if (!useMockInet6Address) {
|
|
assertHostNameEqual(expectedInet6Address.getHostName(),
|
|
deserializedIPV6Addr.getHostName());
|
|
if (testWithNetIf) {
|
|
assertHostAddressEqual(
|
|
expectedInet6Address.getHostAddress(),
|
|
deserializedIPV6Addr.getHostAddress());
|
|
} else {
|
|
assertHostAddressEqual(
|
|
MockLo0Inet6Address.getBareHostAddress(),
|
|
deserializedIPV6Addr.getHostAddress());
|
|
}
|
|
assertAddressEqual(expectedInet6Address.getAddress(),
|
|
deserializedIPV6Addr.getAddress());
|
|
assertScopeIdEqual(expectedInet6Address.getScopeId(),
|
|
deserializedIPV6Addr.getScopeId());
|
|
if (testWithNetIf) {
|
|
assertNetworkInterfaceEqual(
|
|
expectedInet6Address.getScopedInterface(),
|
|
deserializedIPV6Addr.getScopedInterface());
|
|
} else {
|
|
assertNetworkInterfaceEqual(null,
|
|
deserializedIPV6Addr.getScopedInterface());
|
|
}
|
|
} else { // use MockLo0Inet6Address
|
|
assertHostNameEqual(MockLo0Inet6Address.getHostName(),
|
|
deserializedIPV6Addr.getHostName());
|
|
if (testWithNetIf) {
|
|
assertHostAddressEqual(
|
|
MockLo0Inet6Address.getHostAddress(),
|
|
deserializedIPV6Addr.getHostAddress());
|
|
} else {
|
|
assertHostAddressEqual(
|
|
MockLo0Inet6Address.getHostAddressWithIndex(),
|
|
deserializedIPV6Addr.getHostAddress());
|
|
}
|
|
assertAddressEqual(MockLo0Inet6Address.getAddress(),
|
|
deserializedIPV6Addr.getAddress());
|
|
if (testWithNetIf) {
|
|
assertScopeIdEqual(MockLo0Inet6Address.getScopeId(),
|
|
deserializedIPV6Addr.getScopeId());
|
|
} else {
|
|
assertScopeIdEqual(MockLo0Inet6Address.getScopeZero(),
|
|
deserializedIPV6Addr.getScopeId());
|
|
}
|
|
assertNetworkInterfaceNameEqual(
|
|
MockLo0Inet6Address.getScopeIfName(),
|
|
deserializedIPV6Addr.getScopedInterface());
|
|
}
|
|
} catch (Exception e) {
|
|
System.err.println("Exception caught during deserialization");
|
|
failed = true;
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
static List<Inet6Address> getAllInet6Addresses() throws Exception {
|
|
// System.err.println("\n getAllInet6Addresses: \n ");
|
|
ArrayList<Inet6Address> inet6Addresses = new ArrayList<Inet6Address>();
|
|
for (Enumeration<NetworkInterface> e = NetworkInterface
|
|
.getNetworkInterfaces(); e.hasMoreElements();) {
|
|
NetworkInterface netIF = e.nextElement();
|
|
for (Enumeration<InetAddress> iadrs = netIF.getInetAddresses(); iadrs
|
|
.hasMoreElements();) {
|
|
InetAddress iadr = iadrs.nextElement();
|
|
if (iadr instanceof Inet6Address) {
|
|
System.err.println("Test NetworkInterface: " + netIF);
|
|
Inet6Address i6adr = (Inet6Address) iadr;
|
|
System.err.println(" address " + iadr);
|
|
System.err.println(" scoped iface: "
|
|
+ i6adr.getScopedInterface());
|
|
// using this to actually set the hostName for an
|
|
// InetAddress
|
|
// created through the NetworkInterface
|
|
// have found that the fabricated instances has a null
|
|
// hostName
|
|
System.err.println(" hostName: " + i6adr.getHostName());
|
|
inet6Addresses.add(i6adr);
|
|
}
|
|
}
|
|
}
|
|
return inet6Addresses;
|
|
}
|
|
|
|
static void assertHostNameEqual(String expectedHostName,
|
|
String deserializedHostName) {
|
|
System.err
|
|
.println("Inet6AddressSerializationTest.assertHostNameEqual:");
|
|
if (expectedHostName == null) {
|
|
if (deserializedHostName == null) {
|
|
// ok, do nothing.
|
|
} else {
|
|
System.err.println("Error checking " + " HostName, expected:"
|
|
+ expectedHostName + ", got :" + deserializedHostName);
|
|
failed = true;
|
|
}
|
|
} else if (!expectedHostName.equals(deserializedHostName)) {
|
|
System.err.println("Error checking "
|
|
+ // versionStr +
|
|
" HostName, expected:" + expectedHostName + ", got :"
|
|
+ deserializedHostName);
|
|
failed = true;
|
|
} else {
|
|
System.err.println("HostName equality "
|
|
+ // versionStr +
|
|
" HostName, expected:" + expectedHostName + ", got :"
|
|
+ deserializedHostName);
|
|
}
|
|
}
|
|
|
|
static void assertHostAddressEqual(String expectedHostAddress,
|
|
String deserializedHostAddress) {
|
|
System.err
|
|
.println("Inet6AddressSerializationTest.assertHostAddressEqual:");
|
|
if (expectedHostAddress == null) {
|
|
if (deserializedHostAddress == null) {
|
|
// ok, do nothing.
|
|
} else {
|
|
System.err.println("Error checking "
|
|
+ " HostAddress, expected: " + expectedHostAddress
|
|
+ ", got: " + deserializedHostAddress);
|
|
failed = true;
|
|
}
|
|
} else if (!expectedHostAddress.equals(deserializedHostAddress)) {
|
|
System.err.println("Error checking "
|
|
+ // versionStr +
|
|
" HostAddress, expected: " + expectedHostAddress
|
|
+ ", got: " + deserializedHostAddress);
|
|
failed = true;
|
|
} else {
|
|
System.err.println("HostAddress equality "
|
|
+ // versionStr +
|
|
" HostAddress, expected: " + expectedHostAddress
|
|
+ ", got: " + deserializedHostAddress);
|
|
}
|
|
}
|
|
|
|
static void assertAddressEqual(byte[] expectedAddress,
|
|
byte[] deserializedAddress) {
|
|
System.err.println("Inet6AddressSerializationTest.assertAddressEqual:");
|
|
if (expectedAddress == null) {
|
|
if (deserializedAddress == null) {
|
|
// ok, do nothing.
|
|
} else {
|
|
System.err.println("Error checking " + " Address, expected:"
|
|
+ Arrays.toString(expectedAddress) + ", got: "
|
|
+ Arrays.toString(deserializedAddress));
|
|
failed = true;
|
|
}
|
|
} else if (!Arrays.equals(expectedAddress, deserializedAddress)) {
|
|
System.err.println("Error checking "
|
|
+ // versionStr +
|
|
" Address, expected: " + Arrays.toString(expectedAddress)
|
|
+ ", got: " + Arrays.toString(deserializedAddress));
|
|
failed = true;
|
|
} else {
|
|
System.err.println("Address equality "
|
|
+ // versionStr +
|
|
" Address, expected: " + Arrays.toString(expectedAddress)
|
|
+ ", got: " + Arrays.toString(deserializedAddress));
|
|
}
|
|
}
|
|
|
|
static void assertScopeIdEqual(int expectedScopeId, int deserializedScopeId) {
|
|
System.err.println("Inet6AddressSerializationTest.assertScopeIdEqual:");
|
|
if (expectedScopeId != deserializedScopeId) {
|
|
System.err.println("Error checking " + " ScopeId, expected:"
|
|
+ expectedScopeId + ", got: " + deserializedScopeId);
|
|
failed = true;
|
|
} else {
|
|
System.err.println("ScopeId equality "
|
|
+ // versionStr +
|
|
" ScopeId, expected: " + expectedScopeId + ", got: "
|
|
+ deserializedScopeId);
|
|
}
|
|
}
|
|
|
|
static void assertNetworkInterfaceNameEqual(String expectedNetworkIfName,
|
|
NetworkInterface deserializedNetworkInterface) {
|
|
|
|
if (deserializedNetworkInterface != null) {
|
|
String deserializedNetworkIfName = deserializedNetworkInterface
|
|
.getName();
|
|
System.err
|
|
.println("Inet6AddressSerializationTest.assertHostNameEqual:");
|
|
if (expectedNetworkIfName == null) {
|
|
if (deserializedNetworkIfName == null) {
|
|
// ok, do nothing.
|
|
} else {
|
|
System.err.println("Error checking "
|
|
+ " NetworkIfName, expected: "
|
|
+ expectedNetworkIfName + ", got: "
|
|
+ deserializedNetworkIfName);
|
|
failed = true;
|
|
}
|
|
} else if (!expectedNetworkIfName.equals(deserializedNetworkIfName)) {
|
|
System.err.println("Error checking "
|
|
+ " NetworkIfName, expected: " + expectedNetworkIfName
|
|
+ ", got: " + deserializedNetworkIfName);
|
|
failed = true;
|
|
} else {
|
|
System.err.println("NetworkIfName equality "
|
|
+ " NetworkIfName, expected: " + expectedNetworkIfName
|
|
+ ", got: " + deserializedNetworkIfName);
|
|
}
|
|
} else {
|
|
System.err
|
|
.println("Warning "
|
|
+ " NetworkInterface expected, but is null - ifname not relevant on deserializing host");
|
|
}
|
|
}
|
|
|
|
static void assertNetworkInterfaceEqual(
|
|
NetworkInterface expectedNetworkInterface,
|
|
NetworkInterface deserializedNetworkInterface) {
|
|
System.err
|
|
.println("Inet6AddressSerializationTest.assertNetworkInterfaceEqual:");
|
|
if (expectedNetworkInterface == null) {
|
|
if (deserializedNetworkInterface == null) {
|
|
// ok, do nothing.
|
|
System.err.println("Network Interface equality "
|
|
+ " NetworkInterface, expected:"
|
|
+ expectedNetworkInterface + ", got :"
|
|
+ deserializedNetworkInterface);
|
|
} else {
|
|
System.err.println("Error checking "
|
|
+ " NetworkInterface, expected:"
|
|
+ expectedNetworkInterface + ", got :"
|
|
+ deserializedNetworkInterface);
|
|
failed = true;
|
|
}
|
|
} else if (!NetworkConfiguration.isSameInterface(expectedNetworkInterface,
|
|
deserializedNetworkInterface)) {
|
|
System.err.println("Error checking "
|
|
+ // versionStr +
|
|
" NetworkInterface, expected:" + expectedNetworkInterface
|
|
+ ", got :" + deserializedNetworkInterface);
|
|
failed = true;
|
|
} else {
|
|
System.err.println("Network Interface equality "
|
|
+ " NetworkInterface, expected:" + expectedNetworkInterface
|
|
+ ", got :" + deserializedNetworkInterface);
|
|
}
|
|
}
|
|
|
|
static void equal(Object expected, Object got) {
|
|
if (expected == null) {
|
|
if (got == null) {
|
|
// ok, do nothing.
|
|
} else {
|
|
System.err.println("Error checking "
|
|
+ " serial data, expected:" + expected + ", got :"
|
|
+ got);
|
|
failed = true;
|
|
}
|
|
} else if (!expected.equals(got)) {
|
|
System.err.println("Error checking " + // versionStr +
|
|
" serial data, expected:" + expected + ", got :" + got);
|
|
failed = true;
|
|
}
|
|
}
|
|
|
|
// Used to generate serialData.
|
|
static byte[] generateSerializedInet6AddressData(Inet6Address addr,
|
|
PrintStream out, boolean outputToFile) throws IOException {
|
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
try (ObjectOutputStream oos = new ObjectOutputStream(bos)) {
|
|
oos.writeObject(addr);
|
|
}
|
|
|
|
String ifname = getIfName(addr);
|
|
byte[] ba = bos.toByteArray();
|
|
if (out != null) {
|
|
out.format("static final byte[] SerialData" + ifname + " = {\n");
|
|
for (int i = 0; i < ba.length; i++) {
|
|
out.format(" (byte)0x%02X", ba[i]);
|
|
if (i != (ba.length - 1))
|
|
out.format(",");
|
|
if (((i + 1) % 6) == 0)
|
|
out.format("\n");
|
|
}
|
|
out.format(" };\n \n");
|
|
}
|
|
if (outputToFile) {
|
|
serializeInet6AddressToFile(addr);
|
|
}
|
|
return ba;
|
|
}
|
|
|
|
private static String getIfName(Inet6Address inet6Addr) {
|
|
String ifname;
|
|
if (inet6Addr.getScopedInterface() != null) {
|
|
ifname = "_ifname_" + inet6Addr.getScopedInterface().getName();
|
|
} else {
|
|
ifname = "_ifname_"
|
|
+ Integer.valueOf(inet6Addr.getScopeId()).toString();
|
|
}
|
|
return ifname;
|
|
}
|
|
|
|
static void generateAllInet6AddressSerializedData() throws IOException {
|
|
// System.err.println("generateAllInet6AddressSerializedData: enter ....");
|
|
|
|
List<Inet6Address> inet6Addresses;
|
|
|
|
try {
|
|
inet6Addresses = getAllInet6Addresses();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
throw new IOException(e);
|
|
}
|
|
|
|
for (Inet6Address inet6Address : inet6Addresses) {
|
|
generateSerializedInet6AddressData(inet6Address, System.out, true);
|
|
}
|
|
}
|
|
|
|
static void serializeInet6AddressToFile(Inet6Address inet6Addr) {
|
|
|
|
// System.err
|
|
// .println("serializeInet6AddressToIPV6AddressFile: enter ....");
|
|
|
|
FileOutputStream fOut = null;
|
|
String inet6AddressOutputFilename = null;
|
|
inet6AddressOutputFilename = createOutputFileName(inet6Addr);
|
|
try {
|
|
fOut = new FileOutputStream(inet6AddressOutputFilename);
|
|
} catch (FileNotFoundException fnfEx) {
|
|
|
|
fnfEx.printStackTrace();
|
|
}
|
|
ObjectOutputStream ooStream = null;
|
|
try {
|
|
if (fOut != null) {
|
|
ooStream = new ObjectOutputStream(fOut);
|
|
} else {
|
|
System.err.println("Problem initilising Object output stream ");
|
|
System.exit(-1);
|
|
}
|
|
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
System.exit(-1);
|
|
}
|
|
|
|
// serialise the last Inet6Address
|
|
/*
|
|
* System.err
|
|
* .println("serializeInet6AddressToIPV6AddressFile scoped iface: \n" +
|
|
* inet6Addr.getScopedInterface());
|
|
*/
|
|
try {
|
|
ooStream.writeObject(inet6Addr);
|
|
} catch (Exception ex) {
|
|
ex.printStackTrace();
|
|
System.exit(-1);
|
|
}
|
|
|
|
try {
|
|
ooStream.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private static String createOutputFileName(Inet6Address inet6Addr) {
|
|
String inet6AddressOutputFilename;
|
|
if (inet6Addr.getScopedInterface() != null) {
|
|
inet6AddressOutputFilename = "IPV6Address_"
|
|
+ inet6Addr.getScopedInterface().getName() + ".out";
|
|
} else {
|
|
inet6AddressOutputFilename = "IPV6Address_"
|
|
+ Integer.valueOf(inet6Addr.getScopeId()).toString()
|
|
+ ".out";
|
|
}
|
|
return inet6AddressOutputFilename;
|
|
}
|
|
|
|
// --- Generated data ---
|
|
// JDK7 output java Inet6AddressSerializationTest generate.
|
|
|
|
// loopback lo0 interface on Solaris 10
|
|
|
|
static final byte[] JDK7Inet6AddressSerialData = { (byte) 0xAC,
|
|
(byte) 0xED, (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
|
|
(byte) 0x00, (byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
|
|
(byte) 0x61, (byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
|
|
(byte) 0x2E, (byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
|
|
(byte) 0x36, (byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72,
|
|
(byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C,
|
|
(byte) 0x20, (byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80,
|
|
(byte) 0x21, (byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49,
|
|
(byte) 0x00, (byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
|
|
(byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
|
|
(byte) 0x5A, (byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63,
|
|
(byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
|
|
(byte) 0x64, (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74,
|
|
(byte) 0x5A, (byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63,
|
|
(byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
|
|
(byte) 0x66, (byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
|
|
(byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C,
|
|
(byte) 0x00, (byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E,
|
|
(byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00,
|
|
(byte) 0x12, (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
|
|
(byte) 0x61, (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E,
|
|
(byte) 0x67, (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72,
|
|
(byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B,
|
|
(byte) 0x00, (byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61,
|
|
(byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
|
|
(byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
|
|
(byte) 0x42, (byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14,
|
|
(byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E,
|
|
(byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49,
|
|
(byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64,
|
|
(byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
|
|
(byte) 0x2D, (byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F,
|
|
(byte) 0xE3, (byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00,
|
|
(byte) 0x03, (byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61,
|
|
(byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
|
|
(byte) 0x73, (byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66,
|
|
(byte) 0x61, (byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79,
|
|
(byte) 0x4C, (byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F,
|
|
(byte) 0x73, (byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D,
|
|
(byte) 0x65, (byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00,
|
|
(byte) 0x01, (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x02, (byte) 0x74, (byte) 0x00, (byte) 0x09, (byte) 0x6C,
|
|
(byte) 0x6F, (byte) 0x63, (byte) 0x61, (byte) 0x6C, (byte) 0x68,
|
|
(byte) 0x6F, (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x70,
|
|
(byte) 0x75, (byte) 0x72, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
|
|
(byte) 0x42, (byte) 0xAC, (byte) 0xF3, (byte) 0x17, (byte) 0xF8,
|
|
(byte) 0x06, (byte) 0x08, (byte) 0x54, (byte) 0xE0, (byte) 0x02,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x78 };
|
|
|
|
// JDK8 output java Inet6AddressSerializationTest generate.
|
|
// loopback lo0 interface on Solaris 10
|
|
|
|
static final byte[] JDK8Inet6AddressSerialData = { (byte) 0xAC,
|
|
(byte) 0xED, (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
|
|
(byte) 0x00, (byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
|
|
(byte) 0x61, (byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
|
|
(byte) 0x2E, (byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74,
|
|
(byte) 0x36, (byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72,
|
|
(byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C,
|
|
(byte) 0x20, (byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80,
|
|
(byte) 0x21, (byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49,
|
|
(byte) 0x00, (byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
|
|
(byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
|
|
(byte) 0x5A, (byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63,
|
|
(byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
|
|
(byte) 0x64, (byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74,
|
|
(byte) 0x5A, (byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63,
|
|
(byte) 0x6F, (byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69,
|
|
(byte) 0x66, (byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
|
|
(byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C,
|
|
(byte) 0x00, (byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E,
|
|
(byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00,
|
|
(byte) 0x12, (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
|
|
(byte) 0x61, (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E,
|
|
(byte) 0x67, (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72,
|
|
(byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B,
|
|
(byte) 0x00, (byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61,
|
|
(byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
|
|
(byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
|
|
(byte) 0x42, (byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14,
|
|
(byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E,
|
|
(byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49,
|
|
(byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64,
|
|
(byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
|
|
(byte) 0x2D, (byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F,
|
|
(byte) 0xE3, (byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00,
|
|
(byte) 0x03, (byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61,
|
|
(byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73,
|
|
(byte) 0x73, (byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66,
|
|
(byte) 0x61, (byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79,
|
|
(byte) 0x4C, (byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F,
|
|
(byte) 0x73, (byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D,
|
|
(byte) 0x65, (byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00,
|
|
(byte) 0x01, (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x02, (byte) 0x74, (byte) 0x00, (byte) 0x09, (byte) 0x6C,
|
|
(byte) 0x6F, (byte) 0x63, (byte) 0x61, (byte) 0x6C, (byte) 0x68,
|
|
(byte) 0x6F, (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x70,
|
|
(byte) 0x75, (byte) 0x72, (byte) 0x00, (byte) 0x02, (byte) 0x5B,
|
|
(byte) 0x42, (byte) 0xAC, (byte) 0xF3, (byte) 0x17, (byte) 0xF8,
|
|
(byte) 0x06, (byte) 0x08, (byte) 0x54, (byte) 0xE0, (byte) 0x02,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x78 };
|
|
|
|
// java Inet6AddressSerializationTest generateAll produces this inet6address
|
|
// serial data
|
|
// jdk8 generated serialization of on address fe80:0:0:0:21b:24ff:febd:f29c
|
|
// net if e1000g0
|
|
|
|
static final byte[] SerialData_ifname_e1000g0 = { (byte) 0xAC, (byte) 0xED,
|
|
(byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, (byte) 0x00,
|
|
(byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
|
|
(byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E,
|
|
(byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x36,
|
|
(byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65,
|
|
(byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C, (byte) 0x20,
|
|
(byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80, (byte) 0x21,
|
|
(byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49, (byte) 0x00,
|
|
(byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F, (byte) 0x70,
|
|
(byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64, (byte) 0x5A,
|
|
(byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
|
|
(byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
|
|
(byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x5A,
|
|
(byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
|
|
(byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x66,
|
|
(byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x5F,
|
|
(byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C, (byte) 0x00,
|
|
(byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E, (byte) 0x61,
|
|
(byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00, (byte) 0x12,
|
|
(byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
|
|
(byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E, (byte) 0x67,
|
|
(byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72, (byte) 0x69,
|
|
(byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B, (byte) 0x00,
|
|
(byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61, (byte) 0x64,
|
|
(byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
|
|
(byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B, (byte) 0x42,
|
|
(byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14, (byte) 0x6A,
|
|
(byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E, (byte) 0x6E,
|
|
(byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49, (byte) 0x6E,
|
|
(byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64, (byte) 0x64,
|
|
(byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x2D,
|
|
(byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F, (byte) 0xE3,
|
|
(byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00, (byte) 0x03,
|
|
(byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61, (byte) 0x64,
|
|
(byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
|
|
(byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66, (byte) 0x61,
|
|
(byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79, (byte) 0x4C,
|
|
(byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F, (byte) 0x73,
|
|
(byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
|
|
(byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00, (byte) 0x01,
|
|
(byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02,
|
|
(byte) 0x74, (byte) 0x00, (byte) 0x25, (byte) 0x66, (byte) 0x65,
|
|
(byte) 0x38, (byte) 0x30, (byte) 0x3A, (byte) 0x30, (byte) 0x3A,
|
|
(byte) 0x30, (byte) 0x3A, (byte) 0x30, (byte) 0x3A, (byte) 0x32,
|
|
(byte) 0x31, (byte) 0x62, (byte) 0x3A, (byte) 0x32, (byte) 0x34,
|
|
(byte) 0x66, (byte) 0x66, (byte) 0x3A, (byte) 0x66, (byte) 0x65,
|
|
(byte) 0x62, (byte) 0x64, (byte) 0x3A, (byte) 0x66, (byte) 0x32,
|
|
(byte) 0x39, (byte) 0x63, (byte) 0x25, (byte) 0x65, (byte) 0x31,
|
|
(byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x67, (byte) 0x30,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x01,
|
|
(byte) 0x01, (byte) 0x74, (byte) 0x00, (byte) 0x07, (byte) 0x65,
|
|
(byte) 0x31, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x67,
|
|
(byte) 0x30, (byte) 0x75, (byte) 0x72, (byte) 0x00, (byte) 0x02,
|
|
(byte) 0x5B, (byte) 0x42, (byte) 0xAC, (byte) 0xF3, (byte) 0x17,
|
|
(byte) 0xF8, (byte) 0x06, (byte) 0x08, (byte) 0x54, (byte) 0xE0,
|
|
(byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0xFE,
|
|
(byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x1B, (byte) 0x24,
|
|
(byte) 0xFF, (byte) 0xFE, (byte) 0xBD, (byte) 0xF2, (byte) 0x9C,
|
|
(byte) 0x78 };
|
|
|
|
// jdk8 generated serialization of address 0::1 on net if lo0 hostname
|
|
// localhost scope_id 1
|
|
|
|
static final byte[] SerialData_ifname_lo0 = { (byte) 0xAC, (byte) 0xED,
|
|
(byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, (byte) 0x00,
|
|
(byte) 0x15, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
|
|
(byte) 0x2E, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x2E,
|
|
(byte) 0x49, (byte) 0x6E, (byte) 0x65, (byte) 0x74, (byte) 0x36,
|
|
(byte) 0x41, (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65,
|
|
(byte) 0x73, (byte) 0x73, (byte) 0x5F, (byte) 0x7C, (byte) 0x20,
|
|
(byte) 0x81, (byte) 0x52, (byte) 0x2C, (byte) 0x80, (byte) 0x21,
|
|
(byte) 0x03, (byte) 0x00, (byte) 0x05, (byte) 0x49, (byte) 0x00,
|
|
(byte) 0x08, (byte) 0x73, (byte) 0x63, (byte) 0x6F, (byte) 0x70,
|
|
(byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64, (byte) 0x5A,
|
|
(byte) 0x00, (byte) 0x0C, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
|
|
(byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x64,
|
|
(byte) 0x5F, (byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x5A,
|
|
(byte) 0x00, (byte) 0x10, (byte) 0x73, (byte) 0x63, (byte) 0x6F,
|
|
(byte) 0x70, (byte) 0x65, (byte) 0x5F, (byte) 0x69, (byte) 0x66,
|
|
(byte) 0x6E, (byte) 0x61, (byte) 0x6D, (byte) 0x65, (byte) 0x5F,
|
|
(byte) 0x73, (byte) 0x65, (byte) 0x74, (byte) 0x4C, (byte) 0x00,
|
|
(byte) 0x06, (byte) 0x69, (byte) 0x66, (byte) 0x6E, (byte) 0x61,
|
|
(byte) 0x6D, (byte) 0x65, (byte) 0x74, (byte) 0x00, (byte) 0x12,
|
|
(byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
|
|
(byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E, (byte) 0x67,
|
|
(byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72, (byte) 0x69,
|
|
(byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x5B, (byte) 0x00,
|
|
(byte) 0x09, (byte) 0x69, (byte) 0x70, (byte) 0x61, (byte) 0x64,
|
|
(byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
|
|
(byte) 0x74, (byte) 0x00, (byte) 0x02, (byte) 0x5B, (byte) 0x42,
|
|
(byte) 0x78, (byte) 0x72, (byte) 0x00, (byte) 0x14, (byte) 0x6A,
|
|
(byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2E, (byte) 0x6E,
|
|
(byte) 0x65, (byte) 0x74, (byte) 0x2E, (byte) 0x49, (byte) 0x6E,
|
|
(byte) 0x65, (byte) 0x74, (byte) 0x41, (byte) 0x64, (byte) 0x64,
|
|
(byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x2D,
|
|
(byte) 0x9B, (byte) 0x57, (byte) 0xAF, (byte) 0x9F, (byte) 0xE3,
|
|
(byte) 0xEB, (byte) 0xDB, (byte) 0x02, (byte) 0x00, (byte) 0x03,
|
|
(byte) 0x49, (byte) 0x00, (byte) 0x07, (byte) 0x61, (byte) 0x64,
|
|
(byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x73, (byte) 0x73,
|
|
(byte) 0x49, (byte) 0x00, (byte) 0x06, (byte) 0x66, (byte) 0x61,
|
|
(byte) 0x6D, (byte) 0x69, (byte) 0x6C, (byte) 0x79, (byte) 0x4C,
|
|
(byte) 0x00, (byte) 0x08, (byte) 0x68, (byte) 0x6F, (byte) 0x73,
|
|
(byte) 0x74, (byte) 0x4E, (byte) 0x61, (byte) 0x6D, (byte) 0x65,
|
|
(byte) 0x71, (byte) 0x00, (byte) 0x7E, (byte) 0x00, (byte) 0x01,
|
|
(byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02,
|
|
(byte) 0x74, (byte) 0x00, (byte) 0x09, (byte) 0x6C, (byte) 0x6F,
|
|
(byte) 0x63, (byte) 0x61, (byte) 0x6C, (byte) 0x68, (byte) 0x6F,
|
|
(byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x74, (byte) 0x00,
|
|
(byte) 0x03, (byte) 0x6C, (byte) 0x6F, (byte) 0x30, (byte) 0x75,
|
|
(byte) 0x72, (byte) 0x00, (byte) 0x02, (byte) 0x5B, (byte) 0x42,
|
|
(byte) 0xAC, (byte) 0xF3, (byte) 0x17, (byte) 0xF8, (byte) 0x06,
|
|
(byte) 0x08, (byte) 0x54, (byte) 0xE0, (byte) 0x02, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x78 };
|
|
|
|
}
|
|
|
|
class MockLo0Inet6Address {
|
|
|
|
private static final byte[] LOOPBACKIPV6ADDRESS = { (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01 };
|
|
|
|
private static final String LOCALHOSTNAME = "localhost";
|
|
|
|
private static final String LO0HOSTADDRESS = "0:0:0:0:0:0:0:1%lo0";
|
|
|
|
private static final String BARE_LO0HOSTADDRESS = "0:0:0:0:0:0:0:1";
|
|
|
|
private static final String LO0HOSTADDRESS_WITHINDEX = "0:0:0:0:0:0:0:1%1";
|
|
|
|
private static final int SCOPE_ID_LO0 = 1;
|
|
|
|
private static final int SCOPE_ID_ZERO = 0;
|
|
|
|
public static final String NETWORK_IF_LO0 = "lo0";
|
|
|
|
static String getHostName() {
|
|
return LOCALHOSTNAME;
|
|
}
|
|
|
|
static String getHostAddress() {
|
|
return LO0HOSTADDRESS;
|
|
}
|
|
|
|
static String getBareHostAddress() {
|
|
return BARE_LO0HOSTADDRESS;
|
|
}
|
|
|
|
static String getHostAddressWithIndex() {
|
|
return LO0HOSTADDRESS_WITHINDEX;
|
|
}
|
|
|
|
static byte[] getAddress() {
|
|
return LOOPBACKIPV6ADDRESS;
|
|
}
|
|
|
|
static int getScopeId() {
|
|
return SCOPE_ID_LO0;
|
|
}
|
|
|
|
static int getScopeZero() {
|
|
return SCOPE_ID_ZERO;
|
|
}
|
|
|
|
static String getScopeIfName() {
|
|
return NETWORK_IF_LO0;
|
|
}
|
|
|
|
}
|
|
|
|
class MockE1000g0Inet6Address {
|
|
|
|
// fe80::21b:24ff:febd:f29c
|
|
private static final byte[] E1000G0IPV6ADDRESS = { (byte) 0xfe,
|
|
(byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x1b, (byte) 0x24,
|
|
(byte) 0xff, (byte) 0xfe, (byte) 0xbd, (byte) 0xf2, (byte) 0x9c };
|
|
|
|
private static final String E1000G0HOSTNAME = "fe80:0:0:0:21b:24ff:febd:f29c%e1000g0";
|
|
|
|
private static final String BARE_E1000G0HOSTADDRESS = "fe80:0:0:0:21b:24ff:febd:f29c";
|
|
|
|
private static final String E1000G0HOSTADDRESS_WITHINDEX = "fe80:0:0:0:21b:24ff:febd:f29c%2";
|
|
|
|
private static final String E1000G0HOSTADDRESS = "fe80:0:0:0:21b:24ff:febd:f29c%e1000g0";
|
|
|
|
private static final String NETWORK_IF_E1000G0 = "e1000g0";
|
|
|
|
private static final int SCOPE_ID_E1000G0 = 2;
|
|
|
|
private static final int SCOPE_ID_ZERO = 0;
|
|
|
|
static String getHostName() {
|
|
return E1000G0HOSTNAME;
|
|
}
|
|
|
|
static String getHostAddress() {
|
|
return E1000G0HOSTADDRESS;
|
|
}
|
|
|
|
static String getHostAddressWithIndex() {
|
|
return E1000G0HOSTADDRESS_WITHINDEX;
|
|
}
|
|
|
|
static String getBareHostAddress() {
|
|
return BARE_E1000G0HOSTADDRESS;
|
|
}
|
|
|
|
static byte[] getAddress() {
|
|
return E1000G0IPV6ADDRESS;
|
|
}
|
|
|
|
static int getScopeId() {
|
|
return SCOPE_ID_E1000G0;
|
|
}
|
|
|
|
static int getScopeZero() {
|
|
return SCOPE_ID_ZERO;
|
|
}
|
|
|
|
static String getScopeIfName() {
|
|
return NETWORK_IF_E1000G0;
|
|
}
|
|
|
|
}
|