ethernet_interface: Runtime detect uboot-env

We don't need a build time option as systems not using it don't include
uboot fw_setenv.

Change-Id: I922fb9ebb0309ab1a792892c28417794f5ed6ef0
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/ethernet_interface.cpp b/src/ethernet_interface.cpp
index 9cef02f..c965ddc 100644
--- a/src/ethernet_interface.cpp
+++ b/src/ethernet_interface.cpp
@@ -966,17 +966,18 @@
         manager.get().reloadConfigs();
     }
 
-#ifdef HAVE_UBOOT_ENV
-    // Ensure that the valid address is stored in the u-boot-env
-    auto envVar = interfaceToUbootEthAddr(interface);
-    if (envVar)
+    std::error_code ec;
+    const auto fw_setenv = std::filesystem::path("/sbin/fw_setenv");
+    if (std::filesystem::exists(fw_setenv, ec))
     {
-        // Trimming MAC addresses that are out of range. eg: AA:FF:FF:FF:FF:100;
-        // and those having more than 6 bytes. eg: AA:AA:AA:AA:AA:AA:BB
-        execute("/sbin/fw_setenv", "fw_setenv", envVar->c_str(),
-                validMAC.c_str());
+        // Ensure that the valid address is stored in the u-boot-env
+        auto envVar = interfaceToUbootEthAddr(interface);
+        if (envVar)
+        {
+            execute(fw_setenv.native(), "fw_setenv", envVar->c_str(),
+                    validMAC.c_str());
+        }
     }
-#endif // HAVE_UBOOT_ENV
 
     return value;
 #else