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 0abf4c3e31..628346b748 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 void initialize(boolean shouldManage) { 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 a26195eaf4..f259317e8f 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 NMDeviceInfo(String c, String d, String type) { } } + 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;