--- services.inc 2013-09-11 17:20:12.000000000 -0500 +++ services-fixed.inc 2014-01-22 11:34:24.000000000 -0600 @@ -320,6 +320,21 @@ fclose($fd); mwexec("/bin/sh {$g['tmp_path']}/dhcpd.sh"); + /* Ensure all enable interfaces with enabled DHCP servers are running before starting dhcpd */ + foreach($config['dhcpd'] as $ifdescr => $ifname) { + if(isset($config['dhcpd'][$ifdescr]['enable']) && isset($config['interfaces'][$ifdescr]['enable'])) { + $i = 0; + while($i < 10) { + exec("/sbin/ifconfig {$config['interfaces'][$ifdescr]['if']} | grep 'UP' 2>&1", $out, $ret); + if($ret == 0) + break; + log_error("DHCP server enabled and configured on {$config['interfaces'][$ifdescr]['if']} but interface is not up, waiting 1 second and trying again. \n"); + sleep(1); + $i++; + } + } + } + if ($family == "all" || $family == "inet") services_dhcpdv4_configure(); if ($family == "all" || $family == "inet6") {