in tso-server/src/main/java/org/apache/omid/tso/NetworkInterfaceUtils.java [72:110]
static InetAddress getIPAddressFromNetworkInterface(String ifaceName)
throws SocketException, UnknownHostException {
NetworkInterface iface = NetworkInterface.getByName(ifaceName);
if (iface == null) {
throw new IllegalArgumentException(
"Network interface " + ifaceName + " not found");
}
InetAddress candidateAddress = null;
Enumeration<InetAddress> inetAddrs = iface.getInetAddresses();
while (inetAddrs.hasMoreElements()) {
InetAddress inetAddr = inetAddrs.nextElement();
if (!inetAddr.isLoopbackAddress()) {
if (inetAddr.isSiteLocalAddress()) {
return inetAddr; // Return non-loopback site-local address
} else if (candidateAddress == null) {
// Found non-loopback address, but not necessarily site-local
candidateAddress = inetAddr;
}
}
}
if (candidateAddress != null) {
// Site-local address not found, but found other non-loopback addr
// Server might have a non-site-local address assigned to its NIC
// (or might be running IPv6 which deprecates "site-local" concept)
return candidateAddress;
}
// At this point, we did not find a non-loopback address.
// Fall back to returning whatever InetAddress.getLocalHost() returns
InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
if (jdkSuppliedAddress == null) {
throw new UnknownHostException(
"InetAddress.getLocalHost() unexpectedly returned null.");
}
return jdkSuppliedAddress;
}