Accept loopback interfaces in the network.host setting

Closes #2924. Adds support for loopback interfaces such as _lo0_ in network.host and other network settings.
This commit is contained in:
Igor Motov 2013-04-24 11:13:10 +02:00
parent f22510cab5
commit f92c53efdb
2 changed files with 25 additions and 2 deletions

View File

@ -172,11 +172,15 @@ public class NetworkService extends AbstractComponent {
} }
Collection<NetworkInterface> allInterfs = NetworkUtils.getAllAvailableInterfaces(); Collection<NetworkInterface> allInterfs = NetworkUtils.getAllAvailableInterfaces();
for (NetworkInterface ni : allInterfs) { for (NetworkInterface ni : allInterfs) {
if (!ni.isUp() || ni.isLoopback()) { if (!ni.isUp()) {
continue; continue;
} }
if (host.equals(ni.getName()) || host.equals(ni.getDisplayName())) { if (host.equals(ni.getName()) || host.equals(ni.getDisplayName())) {
return NetworkUtils.getFirstNonLoopbackAddress(ni, stackType); if (ni.isLoopback()) {
return NetworkUtils.getFirstAddress(ni, stackType);
} else {
return NetworkUtils.getFirstNonLoopbackAddress(ni, stackType);
}
} }
} }
} }

View File

@ -162,6 +162,25 @@ public abstract class NetworkUtils {
return null; return null;
} }
/**
* Returns the first address with the proper ipVersion on the given interface on the current host.
*
* @param intf the interface to be checked
* @param ipVersion Constraint on IP version of address to be returned, 4 or 6
*/
public static InetAddress getFirstAddress(NetworkInterface intf, StackType ipVersion) throws SocketException {
if (intf == null)
throw new IllegalArgumentException("Network interface pointer is null");
for (Enumeration addresses = intf.getInetAddresses(); addresses.hasMoreElements(); ) {
InetAddress address = (InetAddress) addresses.nextElement();
if ((address instanceof Inet4Address && ipVersion == StackType.IPv4) ||
(address instanceof Inet6Address && ipVersion == StackType.IPv6))
return address;
}
return null;
}
/** /**
* A function to check if an interface supports an IP version (i.e has addresses * A function to check if an interface supports an IP version (i.e has addresses
* defined for that IP version). * defined for that IP version).