diff --git a/photon-core/src/main/java/org/photonvision/common/networking/NetworkManager.java b/photon-core/src/main/java/org/photonvision/common/networking/NetworkManager.java index 0abf4c3e3..628346b74 100644 --- a/photon-core/src/main/java/org/photonvision/common/networking/NetworkManager.java +++ b/photon-core/src/main/java/org/photonvision/common/networking/NetworkManager.java @@ -73,6 +73,12 @@ public class NetworkManager { return; } + if (!NetworkUtils.nmcliIsInstalled()) { + logger.error("Cannot manage network without nmcli!"); + this.networkingIsDisabled = true; + return; + } + // Start tasks to monitor the network interface(s) var ethernetDevices = NetworkUtils.getAllWiredInterfaces(); for (NMDeviceInfo deviceInfo : ethernetDevices) { diff --git a/photon-core/src/main/java/org/photonvision/common/networking/NetworkUtils.java b/photon-core/src/main/java/org/photonvision/common/networking/NetworkUtils.java index a26195eaf..f259317e8 100644 --- a/photon-core/src/main/java/org/photonvision/common/networking/NetworkUtils.java +++ b/photon-core/src/main/java/org/photonvision/common/networking/NetworkUtils.java @@ -66,6 +66,18 @@ public class NetworkUtils { } } + public static boolean nmcliIsInstalled() { + var shell = new ShellExec(true, false); + try { + shell.executeBashCommand("nmcli --version"); + + return shell.getExitCode() == 0; + } catch (IOException e) { + logger.error("Could not query nmcli version", e); + return false; + } + } + private static List allInterfaces = new ArrayList<>(); private static long lastReadTimestamp = 0;