0) { foreach ($routes as $address => $prefix) { echo "/sbin/route change -inet6 {$prefix} {$address} " . "|| /sbin/route add -inet6 {$prefix} {$address}\n"; } } /* get clog from dhcpd */ $dhcpdlogfile = "/var/log/dhcpd.log"; $expires = array(); if (file_exists($dhcpdlogfile)) { $fd = popen("clog $dhcpdlogfile", 'r'); while (($line = fgets($fd)) !== false) { //echo $line; if (preg_match("/releases[ ]+prefix[ ]+([0-9a-f:]+\/[0-9]+)/i", $line, $expire)) { if (in_array($expire[1], $routes)) { continue; } $expires[$expire[1]] = $expire[1]; } } pclose($fd); } // echo "remove routes\n"; if (count($expires) > 0) { foreach ($expires as $prefix) { echo "/sbin/route delete -inet6 {$prefix['prefix']}\n"; } } /* handle quotify_buf - https://source.isc.org/cgi-bin/gitweb.cgi?p=dhcp.git;a=blob;f=common/print.c */ function extract_duid($ia_string) { for ($i = 0, $iaid_counter = 0, $len = strlen($ia_string); $i < $len && $iaid_counter < 4; $i++, $iaid_counter++) { if ($ia_string[$i] !== '\\') { continue; } else if ($len - $i >= 2) { if (($ia_string[$i+1] === '\\') || ($ia_string[$i+1] === '"')) { $i += 1; continue; } else if ($len - $i >= 4) { if (preg_match('/[0-3][0-7]{2}/', substr($ia_string, $i+1, 3))) { $i += 3; continue; } } } return false; } /* Return anything after the first 4 octets! */ if ($iaid_counter === 4) { /* substr returns false when $len == $i */ return substr($ia_string, $i); } return false; } ?>