Skip to content

Commit ba21529

Browse files
committed
Prefer ipv4 addresses
Signed-off-by: Nicola Timeus <nicola.timeus@eurotech.com>
1 parent a894d92 commit ba21529

1 file changed

Lines changed: 48 additions & 21 deletions

File tree

  • kura/org.eclipse.kura.container.provider/src/main/java/org/eclipse/kura/container/provider

kura/org.eclipse.kura.container.provider/src/main/java/org/eclipse/kura/container/provider/ContainerInstance.java

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import static java.util.Objects.isNull;
1818

19+
import java.net.Inet4Address;
1920
import java.net.InetAddress;
2021
import java.net.NetworkInterface;
2122
import java.net.SocketException;
@@ -56,6 +57,7 @@
5657
import org.eclipse.kura.identity.PasswordConfiguration;
5758
import org.eclipse.kura.identity.PasswordStrengthVerificationService;
5859
import org.eclipse.kura.identity.Permission;
60+
import org.eclipse.kura.net.IP4Address;
5961
import org.eclipse.kura.net.IPAddress;
6062
import org.eclipse.kura.net.NetInterface;
6163
import org.eclipse.kura.net.NetInterfaceAddress;
@@ -754,36 +756,62 @@ private String extractDockerInterfaceAddress(NetInterface<?> netInterface) {
754756
return null;
755757
}
756758

757-
List<? extends NetInterfaceAddress> addresses = netInterface.getNetInterfaceAddresses();
758-
if (addresses.isEmpty()) {
759+
return getAddressNetworkService(netInterface.getNetInterfaceAddresses());
760+
}
761+
762+
private String getAddressNetworkService(List<? extends NetInterfaceAddress> addresses) {
763+
if (addresses == null) {
759764
return null;
760765
}
761766

762-
IPAddress ipAddress = addresses.get(0).getAddress();
763-
if (ipAddress != null) {
764-
logger.debug("Found docker0 interface with address: {}", ipAddress.getHostAddress());
765-
return ipAddress.getHostAddress();
767+
IPAddress candidate = null;
768+
769+
for (final NetInterfaceAddress address : addresses) {
770+
candidate = address.getAddress();
771+
772+
if (candidate instanceof IP4Address) {
773+
break;
774+
}
766775
}
767-
return null;
776+
777+
return candidate != null ? candidate.getHostAddress() : null;
768778
}
769779

770780
private String getDockerBridgeViaJavaApi() {
771781
try {
772782
NetworkInterface dockerInterface = NetworkInterface.getByName("docker0");
773783
if (dockerInterface != null) {
774-
Enumeration<InetAddress> addresses = dockerInterface.getInetAddresses();
775-
if (addresses.hasMoreElements()) {
776-
String address = addresses.nextElement().getHostAddress();
777-
logger.debug("Found docker0 interface with address (via Java API): {}", address);
778-
return address;
779-
}
784+
return getAddressJavaAPI(dockerInterface);
780785
}
781786
} catch (Exception e) {
782787
logger.debug("Failed to detect docker0 interface using Java NetworkInterface API", e);
783788
}
784789
return null;
785790
}
786791

792+
private String getAddressJavaAPI(NetworkInterface nif) throws SocketException {
793+
final Enumeration<? extends InetAddress> addresses = nif.getInetAddresses();
794+
795+
InetAddress candidate = null;
796+
797+
while (addresses.hasMoreElements()) {
798+
final InetAddress addr = addresses.nextElement();
799+
800+
if (!isValidAddress(addr, nif)) {
801+
continue;
802+
}
803+
804+
candidate = addr;
805+
806+
if (candidate instanceof Inet4Address) {
807+
break;
808+
}
809+
}
810+
811+
return candidate != null ? candidate.getHostAddress() : null;
812+
813+
}
814+
787815
private String getHostPrimaryIpAddress() {
788816
try {
789817
Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces();
@@ -812,15 +840,14 @@ private String getAddressFromInterface(NetworkInterface nif) throws SocketExcept
812840
return null;
813841
}
814842

815-
Enumeration<InetAddress> nadrs = nif.getInetAddresses();
816-
while (nadrs.hasMoreElements()) {
817-
InetAddress adr = nadrs.nextElement();
818-
if (isValidAddress(adr, nif)) {
819-
logger.debug("Using host primary IP address: {}", adr.getHostAddress());
820-
return adr.getHostAddress();
821-
}
843+
final String result = getAddressJavaAPI(nif);
844+
845+
if (result != null) {
846+
logger.debug("Using host primary IP address: {}", result);
822847
}
823-
return null;
848+
849+
return result;
850+
824851
}
825852

826853
private boolean isValidNetworkInterface(NetworkInterface nif) throws SocketException {

0 commit comments

Comments
 (0)