From 17f1fb7f5edae8fff0cf1d41a60bee1889b26073 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 6 Dec 2015 19:08:08 +0000 Subject: [PATCH 001/158] tell in README when ./bootstrap is needed Signed-off-by: Sami Kerola --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 42b6388..1b347e2 100644 --- a/README +++ b/README @@ -11,7 +11,7 @@ Quick start. Build the dhcpd-pools project. cd /tmp/dhcpd-pools - ./bootstrap + ./bootstrap # only when building git clone ./configure --with-uthash=/tmp/uthash-master/include make make check From 1dcf762967567ff676af359d81106083e783cf2c Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 7 Dec 2015 10:29:38 +0000 Subject: [PATCH 002/158] add dhcpd-pools website content to a subdirectory Start using git to backup of the website content. Signed-off-by: Sami Kerola --- webpages/dhcpd-pools.awk | 164 +++++ webpages/google3df4cc29123f74e0.html | 1 + webpages/index.html | 96 +++ webpages/robots.txt | 2 + webpages/sampleoutput.txt | 985 +++++++++++++++++++++++++++ webpages/sitemap.txt | 522 ++++++++++++++ 6 files changed, 1770 insertions(+) create mode 100644 webpages/dhcpd-pools.awk create mode 100644 webpages/google3df4cc29123f74e0.html create mode 100644 webpages/index.html create mode 100644 webpages/robots.txt create mode 100644 webpages/sampleoutput.txt create mode 100644 webpages/sitemap.txt diff --git a/webpages/dhcpd-pools.awk b/webpages/dhcpd-pools.awk new file mode 100644 index 0000000..ed2e35b --- /dev/null +++ b/webpages/dhcpd-pools.awk @@ -0,0 +1,164 @@ +# This is ISC dhcpd pool statistics script. +# +# Licensed under the Open Software License version 1.1 +# http://opensource.org/licenses/osl.php +# +# Sami Kerola +# +# Latest version is available from http://www.iki.fi/kerolasa/dhcp/ +# This is version 1.4 + +BEGIN { + # Do you want to see statistics per pool? 1 = yes, 0 = no. + PrintRanges = 1 + + leasefile="/opt/dhcp/db/dhcpd.leases" + #conffile="/opt/dhcp/etc/dhcpd.conf" + + # External commands. + uniq = "sort -nu > afterlp" + sort = "sort -nu -k 2 > aftercp" + uniqstdout = "sort -u" + + # Do the trick. + main() +} + +# Convert ip to decimal number. +function ip2num(addr) { + split(addr, z, "."); + numb = z[4]+256*(z[3]+256*(z[2]+256*z[1])) + return numb +} + +# Print decimal ip in dotted format. +function printip(number) { + a = int(number/16777216) + number = (number-(a*16777216)) + b = int(number/65536) + number = int((number-(b*65536))) + c = int(number/256) + number = (number-(c*256)) + ipstring = sprintf("%d.%d.%d.%d", a, b, c, number) + printf "%16s", ipstring +} + +# Parse dhcpd lease file. +function parseleases() { + if (system("test -r " leasefile) != 0) { + print "File " leasefile " is not readable, exiting." + exit 1 + } + while (getline < leasefile) { + if ($0 ~ /^lease/) { + A = ip2num($2) + } + if ($0 ~ /^[ ]*binding state active/) { + printf "%d\n", A | uniq + } + } + close(leasefile) + close(uniq) +} + +# Parse dhcpd configuration file. +function parseconf() { + while (getline) { + if ($0 ~ /^[ ]*shared-network/) { + sharnet = $2 + } + if ($0 ~ /^[ ]*range/) { + printf "%s %d %d\n", sharnet, ip2num($2), ip2num($3) | sort + } + } + close(sort) +} + +# Join preparsed tmp files and output pool status. +function join() { + # Get shared networks and pool ranges. + i = 1 + while (getline < "aftercp") { + split($0, j, " ") + cnf[i,1] = j[1] + cnf[i,2] = j[2] + if (j[3] == 0) { + j[3] = j[2] + } + cnf[i,3] = j[3] + shnet[j[1],1] += j[3]-j[2]+1 + shnet[j[1],2] = 0 + allofall[1] += j[3]-j[2]+1 + i++ + } + close("aftercp") + i = 1 + allofall[2] = k = 0 + thisnet = "" + # Count IPs in pools. + if (PrintRanges) { + # Print header. + print "shared-network 1st in pool last in pool max cur usage%" + } + k = 0; + while (getline < "afterlp") { + ip = $0 + allofall[2]++ + # Ip out of the range, pool is changing. + while (ip > cnf[i,3]) { + if (PrintRanges) { + printf "%-20s ", cnf[i,1] + printip(cnf[i,2]) + printip(cnf[i,3]) + printf " %5d %5d %9.2f\n", cnf[i,3]-cnf[i,2]+1, k, k/(cnf[i,3]-cnf[i,2]+1) + k = 0; + } + if (cnf[i,1] != thisnet) { + # Shared network changed. + thisnet = cnf[i,1] + } + i++ + } + if (ip > cnf[i,2] && ip < cnf[i,3]) { + # Add ip. + shnet[cnf[i,1],2]++ + } + k++; + } + + # Print pool statistics. + + + if (PrintRanges) { + printf "%-20s ", cnf[i,1] + printip(cnf[i,2]) + printip(cnf[i,3]) + printf " %5d %5d %9.2f\n", cnf[i,3]-cnf[i,2]+1, k, k/(cnf[i,3]-cnf[i,2]+1) + } + close("afterlp") + # Print header and shared network statistics. + print "#shared-network max cur usage%" + for (items in shnet) { + x = substr(items, 1, length(items)-2) + printf "%-20s %8d %8d %8.4f\n", x, shnet[x,1], shnet[x,2], shnet[x,2]/shnet[x,1] | uniqstdout + } + close(uniqstdout) + print "#--------------" + printf "%-20s %8d %8d %8.4f\n", "all_pools", allofall[1], allofall[2], allofall[2]/allofall[1] +} + +# Remove temporary files. +function cleanup() { + system("rm -f aftercp afterlp") +} + +# Main. +function main() { + system("touch afterlp aftercp") + parseleases() + parseconf() + join() + cleanup() +} + +# EOF diff --git a/webpages/google3df4cc29123f74e0.html b/webpages/google3df4cc29123f74e0.html new file mode 100644 index 0000000..806122e --- /dev/null +++ b/webpages/google3df4cc29123f74e0.html @@ -0,0 +1 @@ +google-site-verification: google3df4cc29123f74e0.html \ No newline at end of file diff --git a/webpages/index.html b/webpages/index.html new file mode 100644 index 0000000..861c4e8 --- /dev/null +++ b/webpages/index.html @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + +ISC dhcpd lease analysis and reporting + + + +
+

ISC dhcpd lease analysis and reporting

+

This is dhcpd-pools +ISC dhcp +shared network and pool range +usage analysis. +Purpose of command is to count usage ratio of +each IP range and shared network pool which ISC dhcpd is in control +of. Users of the command are most likely ISPs and other organizations +that have large IP space.

+

Program is written C. Design goal is to get analysis done quickly where +there is lots of data. On cheap laptop the speed of analysis is more than +100k leases per second. Number of ranges, or shared networks, does not make +any significant difference in getting analysis done.

+
+
prompt> ./dhcpd-pools -c ~/testdata/dhcpd.conf -l ~/testdata/dhcpd.leases -o ~/sampleoutput.txt
+prompt> cat ~/sampleoutput.txt
+
+

Where I can get dhcpd-pools?

+

Download +release package +or clone from git

+
+git clone git://git.code.sf.net/p/dhcpd-pools/code dhcpd-pools
+

See also +SourceForge project page.

+

Documentation

+

The dhcpd-pools +manual page, and +Doxygen software +reference documentation are available online.

+

Reference information

+

+ +

+

The program was written because +DHCPStatus, +DHCP Usage Statistics, +reportdhcp.pl, +lease_analyzer and +dhcpd-snmp +where too slow to handle huge number of leases. There is also difference in +printed details. The dhcpd-pools does not print quote as much information as +some other tools.

+

Notice that this utility is not the same as +dhcpd-pool +that is maintained by Trond Hasle Amundsen.

+

Just for laugh, obsolete awk proof of concept (version 1.4) +dhcpd-pools.awk

+

Where to send questions, bug reports, code contributions...

+

Sami Kerola +<kerolasa@iki.fi>

+
+ +Sun Dec 6 17:49:17 GMT 2015 +2.28 +FreeBSD License + +
+0 + +
+
+5 ( +1 ratings ) +
+
+
+ + diff --git a/webpages/robots.txt b/webpages/robots.txt new file mode 100644 index 0000000..c2a49f4 --- /dev/null +++ b/webpages/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / diff --git a/webpages/sampleoutput.txt b/webpages/sampleoutput.txt new file mode 100644 index 0000000..0271e76 --- /dev/null +++ b/webpages/sampleoutput.txt @@ -0,0 +1,985 @@ +Ranges: +shared net name first ip last ip max cur percent +Aatamila 12.34.567.127 - 12.34.567.254 128 11 8.594 +Aatamila 12.34.567.83 - 12.34.567.254 252 22 8.730 +Huohvanainen 12.34.567.3 - 12.34.567.254 252 39 15.476 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 41 16.142 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 40 15.748 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 38 14.961 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 37 14.567 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 55 21.654 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 36 14.173 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 50 19.685 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 35 13.780 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 53 20.866 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 56 22.047 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 44 17.323 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 43 16.929 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 29 11.417 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 45 17.717 +Huohvanainen 12.345.678.1 - 12.345.678.254 254 36 14.173 +Ilmovuori 12.345.678.3 - 12.345.678.254 252 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Honkanen 12.345.678.3 - 12.345.678.254 252 100 39.683 +Honkanen 12.345.678.1 - 12.345.678.254 254 92 36.220 +Huuskonen 12.345.678.3 - 12.345.678.254 252 146 57.937 +Huuskonen 12.345.678.1 - 12.345.678.254 254 139 54.724 +Huuskonen 12.345.678.1 - 12.345.678.254 254 137 53.937 +Huuskonen 12.345.678.1 - 12.345.678.254 254 147 57.874 +Huuskonen 12.345.678.1 - 12.345.678.254 254 132 51.969 +Huuskonen 12.345.678.1 - 12.345.678.254 254 132 51.969 +Huuskonen 12.345.678.1 - 12.345.678.254 254 149 58.661 +Huuskonen 12.345.678.1 - 12.345.678.254 254 140 55.118 +Huuskonen 12.345.678.1 - 12.345.678.254 254 140 55.118 +Huuskonen 12.345.678.1 - 12.345.678.254 254 139 54.724 +Huuskonen 12.345.678.1 - 12.345.678.254 254 135 53.150 +Huuskonen 12.345.678.1 - 12.345.678.1 1 0 0.000 +Huuskonen 12.345.678.1 - 12.345.678.254 254 152 59.843 +Huuskonen 12.345.678.1 - 12.345.678.254 254 132 51.969 +Huuskonen 12.345.678.1 - 12.345.678.254 254 131 51.575 +Huuskonen 12.345.678.1 - 12.345.678.254 254 147 57.874 +Halonen 12.345.678.3 - 12.345.678.254 252 114 45.238 +Halonen 12.345.678.1 - 12.345.678.254 254 107 42.126 +Halonen 12.345.678.1 - 12.345.678.254 254 106 41.732 +Halonen 12.345.678.1 - 12.345.678.254 254 121 47.638 +Halonen 12.345.678.1 - 12.345.678.254 254 119 46.850 +Halonen 12.345.678.1 - 12.345.678.254 254 102 40.157 +Halonen 12.345.678.1 - 12.345.678.254 254 111 43.701 +Halonen 12.345.678.1 - 12.345.678.254 254 122 48.031 +Halonen 12.345.678.1 - 12.345.678.254 254 119 46.850 +Halonen 12.345.678.1 - 12.345.678.254 254 109 42.913 +Halonen 12.345.678.1 - 12.345.678.254 254 106 41.732 +Halonen 12.345.678.1 - 12.345.678.254 254 120 47.244 +Halonen 12.345.678.1 - 12.345.678.254 254 117 46.063 +Halonen 12.345.678.1 - 12.345.678.254 254 111 43.701 +Halonen 12.345.678.1 - 12.345.678.254 254 117 46.063 +Halonen 12.345.678.1 - 12.345.678.254 254 120 47.244 +Halonen 12.345.678.1 - 12.345.678.254 254 102 40.157 +Halonen 12.345.678.1 - 12.345.678.254 254 130 51.181 +Halonen 12.345.678.1 - 12.345.678.254 254 117 46.063 +Halonen 12.345.678.1 - 12.345.678.254 254 120 47.244 +Halonen 12.345.678.1 - 12.345.678.254 254 111 43.701 +Halonen 12.345.678.1 - 12.345.678.254 254 118 46.457 +Halonen 12.345.678.1 - 12.345.678.254 254 114 44.882 +Halonen 12.345.678.1 - 12.345.678.254 254 112 44.094 +Halonen 12.345.678.1 - 12.345.678.254 254 120 47.244 +Halonen 12.345.678.1 - 12.345.678.254 254 118 46.457 +Halonen 12.345.678.1 - 12.345.678.254 254 105 41.339 +Halonen 12.345.678.1 - 12.345.678.254 254 110 43.307 +Halonen 12.345.678.1 - 12.345.678.254 254 117 46.063 +Halonen 12.345.678.1 - 12.345.678.254 254 103 40.551 +Halonen 12.345.678.1 - 12.345.678.254 254 107 42.126 +Halonen 12.345.678.1 - 12.345.678.254 254 109 42.913 +Hattunen 12.345.6.3 - 12.345.6.254 252 0 0.000 +Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Harkovski 12.345.6.3 - 12.345.6.254 252 197 78.175 +Harkovski 12.345.6.1 - 12.345.6.254 254 190 74.803 +Harkovski 12.345.67.1 - 12.345.67.254 254 193 75.984 +Harkovski 12.345.67.1 - 12.345.67.254 254 199 78.346 +Harkovski 12.345.67.3 - 12.345.67.254 252 196 77.778 +Harkovski 12.345.67.1 - 12.345.67.254 254 208 81.890 +Harkovski 12.345.67.1 - 12.345.67.254 254 195 76.772 +Harkovski 12.345.67.1 - 12.345.67.254 254 195 76.772 +Happo 12.345.67.3 - 12.345.67.254 252 169 67.063 +Happo 12.345.67.1 - 12.345.67.254 254 171 67.323 +Happo 12.345.67.1 - 12.345.67.254 254 158 62.205 +Happo 12.345.67.1 - 12.345.67.254 254 165 64.961 +Happonen 12.345.67.3 - 12.345.67.254 252 184 73.016 +Happonen 12.345.67.1 - 12.345.67.254 254 181 71.260 +Happonen 12.345.67.1 - 12.345.67.254 254 186 73.228 +Happonen 12.345.67.1 - 12.345.67.254 254 175 68.898 +Harakka 12.345.67.3 - 12.345.67.254 252 201 79.762 +Harakka 12.345.67.1 - 12.345.67.254 254 206 81.102 +Harakka 12.345.67.1 - 12.345.67.254 254 200 78.740 +Harakka 12.345.67.1 - 12.345.67.254 254 196 77.165 +Harjunen 12.345.67.3 - 12.345.67.254 252 208 82.540 +Harjunen 12.345.67.1 - 12.345.67.254 254 204 80.315 +Harjunen 12.345.67.1 - 12.345.67.254 254 207 81.496 +Harjunen 12.345.67.1 - 12.345.67.254 254 199 78.346 +Haukka 12.345.67.3 - 12.345.67.254 252 86 34.127 +Haukka 12.345.67.1 - 12.345.67.254 254 93 36.614 +Haukka 12.345.67.1 - 12.345.67.254 254 82 32.283 +Haukka 12.345.67.1 - 12.345.67.254 254 84 33.071 +Hautanen 12.345.67.3 - 12.345.67.254 252 109 43.254 +Hautanen 12.345.67.1 - 12.345.67.254 254 106 41.732 +Hautanen 12.345.67.1 - 12.345.67.254 254 89 35.039 +Hautanen 12.345.67.1 - 12.345.67.254 254 104 40.945 +Havu 12.345.67.3 - 12.345.67.254 252 109 43.254 +Havu 12.345.67.1 - 12.345.67.254 254 101 39.764 +Havu 12.345.67.1 - 12.345.67.254 254 96 37.795 +Havu 12.345.67.1 - 12.345.67.254 254 98 38.583 +Heiskanen 12.345.67.3 - 12.345.67.254 252 113 44.841 +Heiskanen 12.345.67.1 - 12.345.67.254 254 113 44.488 +Heiskanen 12.345.67.1 - 12.345.67.254 254 109 42.913 +Heiskanen 12.345.67.1 - 12.345.67.254 254 117 46.063 +Hietanen 12.345.67.3 - 12.345.67.254 252 96 38.095 +Hietanen 12.345.67.1 - 12.345.67.254 254 90 35.433 +Hietanen 12.345.67.1 - 12.345.67.254 254 101 39.764 +Hietanen 12.345.67.1 - 12.345.67.254 254 108 42.520 +Hiiliaho 12.345.67.3 - 12.345.67.254 252 100 39.683 +Hiiliaho 12.345.67.1 - 12.345.67.254 254 105 41.339 +Hiiliaho 12.345.67.1 - 12.345.67.254 254 98 38.583 +Hiiliaho 12.345.67.1 - 12.345.67.254 254 105 41.339 +Hilonen 12.345.67.3 - 12.345.67.254 252 80 31.746 +Hilonen 12.345.67.1 - 12.345.67.254 254 91 35.827 +Hilonen 12.345.67.1 - 12.345.67.254 254 76 29.921 +Hilonen 12.345.67.1 - 12.345.67.254 254 76 29.921 +Hirvonen 12.345.67.3 - 12.345.67.254 252 173 68.651 +Hirvonen 12.345.67.1 - 12.345.67.254 254 180 70.866 +Hirvonen 12.345.67.1 - 12.345.67.254 254 178 70.079 +Hirvonen 12.345.67.1 - 12.345.67.254 254 183 72.047 +Haavikko 12.345.678.3 - 12.345.678.254 252 99 39.286 +Haavikko 12.345.678.1 - 12.345.678.254 254 84 33.071 +Anttila 12.345.678.3 - 12.345.678.253 251 0 0.000 +Anttila 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hult 12.345.678.3 - 12.345.678.254 252 80 31.746 +Hult 12.345.678.1 - 12.345.678.254 254 106 41.732 +Hult 12.345.678.1 - 12.345.678.254 254 83 32.677 +Hult 12.345.678.1 - 12.345.678.1 1 1 100.000 +Jaskanen 12.345.678.3 - 12.345.678.254 252 150 59.524 +Jaskanen 12.345.678.1 - 12.345.678.254 254 144 56.693 +Jaskanen 12.345.678.1 - 12.345.678.254 254 169 66.535 +Jaskanen 12.345.678.1 - 12.345.678.254 254 161 63.386 +Jaskanen 12.345.678.1 - 12.345.678.254 254 166 65.354 +Jaskanen 12.345.678.1 - 12.345.678.254 254 168 66.142 +Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 +Jaskanen 12.345.678.1 - 12.345.678.254 254 164 64.567 +Itkonen 12.345.678.3 - 12.345.678.254 252 130 51.587 +Jaskanen 12.345.678.3 - 12.345.678.254 252 173 68.651 +Jaskanen 12.345.678.1 - 12.345.678.254 254 190 74.803 +Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 +Jaskanen 12.345.678.1 - 12.345.678.254 254 190 74.803 +Jaskanen 12.345.678.1 - 12.345.678.254 254 177 69.685 +Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 +Jaskanen 12.345.678.1 - 12.345.678.254 254 189 74.409 +Jaskanen 12.345.678.1 - 12.345.678.254 254 169 66.535 +Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 +Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 +Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 +Jaskanen 12.345.678.1 - 12.345.678.254 254 166 65.354 +Jaskanen 12.345.678.1 - 12.345.678.254 254 171 67.323 +Jaskanen 12.345.678.1 - 12.345.678.254 254 181 71.260 +Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 +Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 +Itkonen-temp 12.345.678.3 - 12.345.678.254 252 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.1 1 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.1 1 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 +Arviluoma 12.345.678.3 - 12.345.678.254 252 3 1.190 +Atjonen 12.345.678.3 - 12.345.678.254 252 1 0.397 +Ahtonen 12.345.678.3 - 12.345.678.254 252 70 27.778 +Ahtonen 12.345.678.1 - 12.345.678.254 254 57 22.441 +Ahtonen 12.345.678.1 - 12.345.678.254 254 74 29.134 +Ahtonen 12.345.678.1 - 12.345.678.254 254 65 25.591 +Itkonen 12.345.678.3 - 12.345.678.254 252 189 75.000 +Itkonen 12.345.678.1 - 12.345.678.254 254 152 59.843 +Itkonen 12.345.678.1 - 12.345.678.254 254 174 68.504 +Itkonen 12.345.678.1 - 12.345.678.254 254 165 64.961 +Itkonen 12.345.678.1 - 12.345.678.254 254 166 65.354 +Itkonen 12.345.678.1 - 12.345.678.254 254 165 64.961 +Itkonen 12.345.678.1 - 12.345.678.254 254 167 65.748 +Itkonen 12.345.678.1 - 12.345.678.254 254 178 70.079 +Jaskanen 12.345.678.3 - 12.345.678.254 252 185 73.413 +Jaskanen 12.345.678.1 - 12.345.678.254 254 191 75.197 +Jaskanen 12.345.678.1 - 12.345.678.254 254 179 70.472 +Jaskanen 12.345.678.1 - 12.345.678.254 254 180 70.866 +Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 +Jaskanen 12.345.678.1 - 12.345.678.254 254 188 74.016 +Jaskanen 12.345.678.1 - 12.345.678.254 254 177 69.685 +Jaskanen 12.345.678.1 - 12.345.678.1 1 0 0.000 +Hoivassilta 12.345.678.2 - 12.345.678.254 253 0 0.000 +Hoivassilta 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ikonen 12.345.6.3 - 12.345.6.254 252 0 0.000 +Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Auvinen 12.345.67.3 - 12.345.67.254 252 102 40.476 +Auvinen 12.345.67.1 - 12.345.67.254 254 103 40.551 +Auvinen 12.345.67.1 - 12.345.67.254 254 97 38.189 +Auvinen 12.345.67.1 - 12.345.67.254 254 108 42.520 +Auvinen 12.345.67.1 - 12.345.67.254 254 95 37.402 +Auvinen 12.345.67.1 - 12.345.67.254 254 101 39.764 +Auvinen 12.345.67.1 - 12.345.67.254 254 103 40.551 +Auvinen 12.345.67.1 - 12.345.67.254 254 97 38.189 +Auvinen 12.345.67.1 - 12.345.67.254 254 100 39.370 +Auvinen 12.345.67.1 - 12.345.67.254 254 102 40.157 +Auvinen 12.345.67.1 - 12.345.67.254 254 110 43.307 +Auvinen 12.345.67.1 - 12.345.67.254 254 116 45.669 +Auvinen 12.345.67.1 - 12.345.67.254 254 102 40.157 +Auvinen 12.345.67.1 - 12.345.67.254 254 99 38.976 +Auvinen 12.345.67.1 - 12.345.67.254 254 94 37.008 +Auvinen 12.345.67.1 - 12.345.67.254 254 94 37.008 +Harakka 12.345.67.3 - 12.345.67.254 252 128 50.794 +Harakka 12.345.67.1 - 12.345.67.254 254 127 50.000 +Harakka 12.345.67.1 - 12.345.67.254 254 121 47.638 +Harakka 12.345.67.1 - 12.345.67.254 254 109 42.913 +Harakka 12.345.67.1 - 12.345.67.254 254 121 47.638 +Harakka 12.345.67.1 - 12.345.67.254 254 135 53.150 +Harakka 12.345.67.1 - 12.345.67.254 254 121 47.638 +Harakka 12.345.67.1 - 12.345.67.254 254 124 48.819 +Harakka 12.345.67.1 - 12.345.67.254 254 121 47.638 +Harakka 12.345.67.1 - 12.345.67.254 254 105 41.339 +Harakka 12.345.67.1 - 12.345.67.254 254 126 49.606 +Harakka 12.345.67.1 - 12.345.67.254 254 129 50.787 +Harakka 12.345.67.1 - 12.345.67.254 254 119 46.850 +Harakka 12.345.67.1 - 12.345.67.254 254 112 44.094 +Harakka 12.345.67.1 - 12.345.67.254 254 123 48.425 +Harakka 12.345.67.1 - 12.345.67.254 254 113 44.488 +Eronen 12.345.67.3 - 12.345.67.254 252 81 32.143 +Eronen 12.345.67.1 - 12.345.67.254 254 98 38.583 +Eronen 12.345.67.1 - 12.345.67.254 254 83 32.677 +Eronen 12.345.67.1 - 12.345.67.254 254 84 33.071 +Eronen 12.345.67.1 - 12.345.67.254 254 85 33.465 +Eronen 12.345.67.1 - 12.345.67.254 254 92 36.220 +Eronen 12.345.67.1 - 12.345.67.254 254 87 34.252 +Eronen 12.345.67.1 - 12.345.67.254 254 79 31.102 +Eronen 12.345.67.1 - 12.345.67.254 254 93 36.614 +Eronen 12.345.67.1 - 12.345.67.254 254 92 36.220 +Eronen 12.345.67.1 - 12.345.67.254 254 85 33.465 +Eronen 12.345.67.1 - 12.345.67.254 254 96 37.795 +Eronen 12.345.67.1 - 12.345.67.254 254 87 34.252 +Eronen 12.345.67.1 - 12.345.67.254 254 101 39.764 +Eronen 12.345.67.1 - 12.345.67.254 254 97 38.189 +Eronen 12.345.67.1 - 12.345.67.254 254 81 31.890 +Haavikko 12.345.67.3 - 12.345.67.254 252 89 35.317 +Haavikko 12.345.67.1 - 12.345.67.254 254 91 35.827 +Haavikko 12.345.67.1 - 12.345.67.254 254 91 35.827 +Haavikko 12.345.67.1 - 12.345.67.254 254 109 42.913 +Haavikko 12.345.67.1 - 12.345.67.254 254 89 35.039 +Haavikko 12.345.67.1 - 12.345.67.254 254 100 39.370 +Haavikko 12.345.67.1 - 12.345.67.254 254 87 34.252 +Haavikko 12.345.67.1 - 12.345.67.254 254 98 38.583 +Haavikko 12.345.67.1 - 12.345.67.254 254 87 34.252 +Haavikko 12.345.67.1 - 12.345.67.254 254 90 35.433 +Haavikko 12.345.67.1 - 12.345.67.254 254 95 37.402 +Haavikko 12.345.67.1 - 12.345.67.254 254 86 33.858 +Haavikko 12.345.67.1 - 12.345.67.254 254 83 32.677 +Haavikko 12.345.67.1 - 12.345.67.254 254 102 40.157 +Haavikko 12.345.67.1 - 12.345.67.254 254 104 40.945 +Haavikko 12.345.67.1 - 12.345.67.1 1 1 100.000 +Hakkarainen 12.345.67.3 - 12.345.67.254 252 25 9.921 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 37 14.567 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 37 14.567 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 36 14.173 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 33 12.992 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 38 14.961 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 33 12.992 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 38 14.961 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 29 11.417 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 28 11.024 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 31 12.205 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 37 14.567 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 30 11.811 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 29 11.417 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 35 13.780 +Hakkarainen 12.345.67.1 - 12.345.67.254 254 44 17.323 +Halonen 12.345.67.3 - 12.345.67.254 252 110 43.651 +Halonen 12.345.67.1 - 12.345.67.254 254 122 48.031 +Halonen 12.345.67.1 - 12.345.67.254 254 113 44.488 +Halonen 12.345.67.1 - 12.345.67.254 254 95 37.402 +Halonen 12.345.678.1 - 12.345.678.254 254 107 42.126 +Halonen 12.345.678.1 - 12.345.678.254 254 117 46.063 +Halonen 12.345.678.1 - 12.345.678.254 254 124 48.819 +Halonen 12.345.678.1 - 12.345.678.254 254 126 49.606 +Halonen 12.345.678.1 - 12.345.678.254 254 114 44.882 +Halonen 12.345.678.1 - 12.345.678.254 254 112 44.094 +Halonen 12.345.678.1 - 12.345.678.254 254 120 47.244 +Halonen 12.345.678.1 - 12.345.678.254 254 109 42.913 +Halonen 12.345.678.1 - 12.345.678.254 254 111 43.701 +Halonen 12.345.678.1 - 12.345.678.254 254 115 45.276 +Halonen 12.345.678.1 - 12.345.678.254 254 119 46.850 +Halonen 12.345.678.1 - 12.345.678.254 254 101 39.764 +Halttunen 12.345.678.3 - 12.345.678.254 252 214 84.921 +Halttunen 12.345.678.1 - 12.345.678.254 254 213 83.858 +Halttunen 12.345.678.1 - 12.345.678.254 254 211 83.071 +Halttunen 12.345.678.1 - 12.345.678.254 254 224 88.189 +Halttunen 12.345.678.1 - 12.345.678.254 254 209 82.283 +Halttunen 12.345.678.1 - 12.345.678.254 254 212 83.465 +Halttunen 12.345.678.1 - 12.345.678.254 254 204 80.315 +Halttunen 12.345.678.1 - 12.345.678.254 254 215 84.646 +Husso 12.345.678.3 - 12.345.678.254 252 177 70.238 +Husso 12.345.678.1 - 12.345.678.254 254 173 68.110 +Husso 12.345.678.1 - 12.345.678.254 254 169 66.535 +Husso 12.345.678.1 - 12.345.678.254 254 170 66.929 +Husso 12.345.678.1 - 12.345.678.254 254 173 68.110 +Husso 12.345.678.1 - 12.345.678.254 254 162 63.780 +Husso 12.345.678.1 - 12.345.678.254 254 169 66.535 +Husso 12.345.678.1 - 12.345.678.254 254 185 72.835 +Ilmovuori 12.345.678.3 - 12.345.678.254 252 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.1 1 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 +Jaskanen 12.345.678.3 - 12.345.678.254 252 180 71.429 +Jaskanen 12.345.678.1 - 12.345.678.254 254 177 69.685 +Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 +Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 +Jaskanen 12.345.678.1 - 12.345.678.254 254 195 76.772 +Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 +Jaskanen 12.345.678.1 - 12.345.678.254 254 184 72.441 +Jaskanen 12.345.678.1 - 12.345.678.254 254 175 68.898 +Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 +Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 +Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 +Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 +Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 +Jaskanen 12.345.678.1 - 12.345.678.254 254 181 71.260 +Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 +Jaskanen 12.345.678.1 - 12.345.678.254 254 171 67.323 +Honkanen 12.345.678.3 - 12.345.678.254 252 105 41.667 +Honkanen 12.345.678.1 - 12.345.678.254 254 106 41.732 +Honkanen 12.345.678.1 - 12.345.678.254 254 117 46.063 +Honkanen 12.345.678.1 - 12.345.678.254 254 98 38.583 +Honkanen 12.345.678.1 - 12.345.678.254 254 103 40.551 +Honkanen 12.345.678.1 - 12.345.678.254 254 98 38.583 +Honkanen 12.345.678.1 - 12.345.678.254 254 106 41.732 +Honkanen 12.345.678.1 - 12.345.678.254 254 118 46.457 +Honkanen 12.345.678.1 - 12.345.678.254 254 109 42.913 +Honkanen 12.345.678.1 - 12.345.678.254 254 101 39.764 +Honkanen 12.345.678.1 - 12.345.678.254 254 107 42.126 +Honkanen 12.345.678.1 - 12.345.678.254 254 98 38.583 +Honkanen 12.345.678.1 - 12.345.678.254 254 105 41.339 +Honkanen 12.345.678.1 - 12.345.678.254 254 115 45.276 +Honkanen 12.345.678.1 - 12.345.678.254 254 113 44.488 +Honkanen 12.345.678.1 - 12.345.678.254 254 110 43.307 +Honkipuro 12.345.67.3 - 12.345.67.254 252 98 38.889 +Honkipuro 12.345.67.1 - 12.345.67.254 254 99 38.976 +Honkipuro 12.345.67.1 - 12.345.67.254 254 89 35.039 +Honkipuro 12.345.67.1 - 12.345.67.254 254 100 39.370 +Honkipuro 12.345.67.1 - 12.345.67.254 254 101 39.764 +Honkipuro 12.345.67.1 - 12.345.67.254 254 117 46.063 +Honkipuro 12.345.67.1 - 12.345.67.254 254 97 38.189 +Honkipuro 12.345.67.1 - 12.345.67.254 254 92 36.220 +Honkipuro 12.345.67.1 - 12.345.67.254 254 104 40.945 +Honkipuro 12.345.67.1 - 12.345.67.254 254 91 35.827 +Honkipuro 12.345.67.1 - 12.345.67.254 254 94 37.008 +Honkipuro 12.345.67.1 - 12.345.67.254 254 98 38.583 +Honkipuro 12.345.67.1 - 12.345.67.254 254 100 39.370 +Honkipuro 12.345.67.1 - 12.345.67.254 254 110 43.307 +Honkipuro 12.345.67.1 - 12.345.67.254 254 96 37.795 +Honkipuro 12.345.67.1 - 12.345.67.254 254 103 40.551 +Ilarionova 12.345.67.3 - 12.345.67.254 252 118 46.825 +Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 +Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 +Ilarionova 12.345.67.1 - 12.345.67.254 254 131 51.575 +Huhtala 12.345.67.3 - 12.345.67.254 252 105 41.667 +Huhtala 12.345.67.1 - 12.345.67.254 254 104 40.945 +Huhtala 12.345.67.1 - 12.345.67.254 254 104 40.945 +Huhtala 12.345.67.1 - 12.345.67.254 254 95 37.402 +Huhtala 12.345.67.1 - 12.345.67.254 254 97 38.189 +Huhtala 12.345.67.1 - 12.345.67.254 254 106 41.732 +Huhtala 12.345.67.1 - 12.345.67.254 254 110 43.307 +Huhtala 12.345.67.1 - 12.345.67.254 254 105 41.339 +Huhtala 12.345.67.1 - 12.345.67.254 254 88 34.646 +Huhtala 12.345.67.1 - 12.345.67.254 254 106 41.732 +Huhtala 12.345.67.1 - 12.345.67.254 254 93 36.614 +Huhtala 12.345.67.1 - 12.345.67.254 254 103 40.551 +Huhtala 12.345.67.1 - 12.345.67.254 254 103 40.551 +Huhtala 12.345.67.1 - 12.345.67.254 254 96 37.795 +Huhtala 12.345.67.1 - 12.345.67.254 254 103 40.551 +Huhtala 12.345.67.1 - 12.345.67.254 254 98 38.583 +Hult 12.345.67.3 - 12.345.67.254 252 86 34.127 +Hult 12.345.67.1 - 12.345.67.254 254 86 33.858 +Hult 12.345.67.1 - 12.345.67.254 254 80 31.496 +Hult 12.345.67.1 - 12.345.67.254 254 87 34.252 +Hult 12.345.678.1 - 12.345.678.254 254 89 35.039 +Hult 12.345.678.1 - 12.345.678.254 254 82 32.283 +Hult 12.345.678.1 - 12.345.678.254 254 94 37.008 +Hult 12.345.678.1 - 12.345.678.254 254 85 33.465 +Hult 12.345.678.1 - 12.345.678.254 254 93 36.614 +Hult 12.345.678.1 - 12.345.678.254 254 83 32.677 +Hult 12.345.678.1 - 12.345.678.254 254 89 35.039 +Hult 12.345.678.1 - 12.345.678.254 254 84 33.071 +Hult 12.345.678.1 - 12.345.678.254 254 89 35.039 +Hult 12.345.678.1 - 12.345.678.254 254 92 36.220 +Hult 12.345.678.1 - 12.345.678.254 254 83 32.677 +Hult 12.345.678.1 - 12.345.678.254 254 85 33.465 +Huusko 12.345.678.3 - 12.345.678.254 252 80 31.746 +Huusko 12.345.678.1 - 12.345.678.254 254 112 44.094 +Huusko 12.345.678.1 - 12.345.678.254 254 91 35.827 +Huusko 12.345.678.1 - 12.345.678.254 254 115 45.276 +Huusko 12.345.678.1 - 12.345.678.254 254 93 36.614 +Huusko 12.345.678.1 - 12.345.678.254 254 94 37.008 +Huusko 12.345.678.1 - 12.345.678.254 254 91 35.827 +Huusko 12.345.678.1 - 12.345.678.254 254 82 32.283 +Huusko 12.345.678.1 - 12.345.678.254 254 94 37.008 +Huusko 12.345.678.1 - 12.345.678.254 254 101 39.764 +Huusko 12.345.678.1 - 12.345.678.254 254 110 43.307 +Huusko 12.345.678.1 - 12.345.678.254 254 97 38.189 +Huusko 12.345.678.1 - 12.345.678.254 254 101 39.764 +Huusko 12.345.678.1 - 12.345.678.254 254 83 32.677 +Huusko 12.345.678.1 - 12.345.678.254 254 94 37.008 +Huusko 12.345.678.1 - 12.345.678.254 254 94 37.008 +Eronen 12.345.678.3 - 12.345.678.254 252 74 29.365 +Eronen 12.345.678.1 - 12.345.678.254 254 70 27.559 +Auvinen 12.345.678.3 - 12.345.678.254 252 102 40.476 +Auvinen 12.345.678.1 - 12.345.678.254 254 87 34.252 +Honkipuro 12.345.678.3 - 12.345.678.254 252 87 34.524 +Honkipuro 12.345.678.1 - 12.345.678.254 254 89 35.039 +Jaskanen 12.345.678.3 - 12.345.678.254 252 164 65.079 +Jaskanen 12.345.678.1 - 12.345.678.254 254 190 74.803 +Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 +Jaskanen 12.345.678.1 - 12.345.678.254 254 177 69.685 +Jaskanen 12.345.678.1 - 12.345.678.254 254 180 70.866 +Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 +Jaskanen 12.345.678.1 - 12.345.678.254 254 183 72.047 +Jaskanen 12.345.678.1 - 12.345.678.254 254 179 70.472 +Jaskanen 12.345.678.1 - 12.345.678.254 254 173 68.110 +Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 +Jaskanen 12.345.678.1 - 12.345.678.254 254 186 73.228 +Jaskanen 12.345.678.1 - 12.345.678.254 254 178 70.079 +Jaskanen 12.345.678.1 - 12.345.678.254 254 173 68.110 +Jaskanen 12.345.678.1 - 12.345.678.254 254 164 64.567 +Jaskanen 12.345.678.1 - 12.345.678.254 254 181 71.260 +Jaskanen 12.345.678.1 - 12.345.678.254 254 168 66.142 +Halttunen 12.345.6.3 - 12.345.6.254 252 139 55.159 +Halttunen 12.345.6.1 - 12.345.6.254 254 145 57.087 +Halttunen 12.345.6.1 - 12.345.6.254 254 138 54.331 +Halttunen 12.345.6.1 - 12.345.6.254 254 149 58.661 +Halttunen 12.345.6.1 - 12.345.6.254 254 142 55.906 +Halttunen 12.345.6.1 - 12.345.6.254 254 128 50.394 +Halttunen 12.345.6.1 - 12.345.6.254 254 155 61.024 +Halttunen 12.345.6.1 - 12.345.6.254 254 139 54.724 +Halttunen 12.345.6.1 - 12.345.6.254 254 137 53.937 +Halttunen 12.345.6.1 - 12.345.6.254 254 136 53.543 +Halttunen 12.345.67.1 - 12.345.67.254 254 136 53.543 +Halttunen 12.345.67.1 - 12.345.67.254 254 148 58.268 +Halttunen 12.345.67.1 - 12.345.67.254 254 146 57.480 +Halttunen 12.345.67.1 - 12.345.67.254 254 136 53.543 +Halttunen 12.345.67.1 - 12.345.67.254 254 135 53.150 +Halttunen 12.345.67.1 - 12.345.67.254 254 144 56.693 +Halttunen 12.345.67.1 - 12.345.67.254 254 146 57.480 +Halttunen 12.345.67.1 - 12.345.67.254 254 145 57.087 +Halttunen 12.345.67.1 - 12.345.67.254 254 132 51.969 +Halttunen 12.345.67.1 - 12.345.67.254 254 154 60.630 +Halttunen 12.345.67.1 - 12.345.67.254 254 144 56.693 +Halttunen 12.345.67.1 - 12.345.67.254 254 163 64.173 +Halttunen 12.345.67.1 - 12.345.67.254 254 139 54.724 +Halttunen 12.345.67.1 - 12.345.67.254 254 143 56.299 +Halttunen 12.345.67.1 - 12.345.67.254 254 141 55.512 +Halttunen 12.345.67.1 - 12.345.67.254 254 145 57.087 +Halttunen 12.345.67.1 - 12.345.67.254 254 141 55.512 +Halttunen 12.345.67.1 - 12.345.67.254 254 148 58.268 +Halttunen 12.345.67.1 - 12.345.67.254 254 146 57.480 +Halttunen 12.345.67.1 - 12.345.67.254 254 140 55.118 +Halttunen 12.345.67.1 - 12.345.67.254 254 145 57.087 +Halttunen 12.345.67.1 - 12.345.67.254 254 124 48.819 +Husso 12.345.67.3 - 12.345.67.254 252 102 40.476 +Husso 12.345.67.1 - 12.345.67.254 254 97 38.189 +Husso 12.345.67.1 - 12.345.67.254 254 115 45.276 +Husso 12.345.67.1 - 12.345.67.254 254 101 39.764 +Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 +Husso 12.345.67.1 - 12.345.67.254 254 103 40.551 +Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 +Husso 12.345.67.1 - 12.345.67.254 254 106 41.732 +Husso 12.345.67.1 - 12.345.67.254 254 100 39.370 +Husso 12.345.67.1 - 12.345.67.254 254 106 41.732 +Husso 12.345.67.1 - 12.345.67.254 254 100 39.370 +Husso 12.345.67.1 - 12.345.67.254 254 98 38.583 +Husso 12.345.67.1 - 12.345.67.254 254 100 39.370 +Husso 12.345.67.1 - 12.345.67.254 254 109 42.913 +Husso 12.345.67.1 - 12.345.67.254 254 117 46.063 +Husso 12.345.67.1 - 12.345.67.254 254 101 39.764 +Husso 12.345.67.1 - 12.345.67.254 254 109 42.913 +Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 +Husso 12.345.67.1 - 12.345.67.254 254 94 37.008 +Husso 12.345.67.1 - 12.345.67.254 254 101 39.764 +Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 +Husso 12.345.67.1 - 12.345.67.254 254 99 38.976 +Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 +Husso 12.345.67.1 - 12.345.67.254 254 103 40.551 +Husso 12.345.67.1 - 12.345.67.254 254 106 41.732 +Husso 12.345.67.1 - 12.345.67.254 254 119 46.850 +Husso 12.345.67.1 - 12.345.67.254 254 99 38.976 +Husso 12.345.67.1 - 12.345.67.254 254 96 37.795 +Husso 12.345.67.1 - 12.345.67.254 254 112 44.094 +Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 +Husso 12.345.67.1 - 12.345.67.254 254 104 40.945 +Husso 12.345.67.1 - 12.345.67.254 254 106 41.732 +Jaskanen 12.345.678.3 - 12.345.678.254 252 180 71.429 +Jaskanen 12.345.678.1 - 12.345.678.254 254 192 75.591 +Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 +Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 +Jaskanen 12.345.678.1 - 12.345.678.254 254 178 70.079 +Jaskanen 12.345.678.1 - 12.345.678.254 254 192 75.591 +Jaskanen 12.345.678.1 - 12.345.678.254 254 182 71.654 +Jaskanen 12.345.678.1 - 12.345.678.254 254 180 70.866 +Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 +Jaskanen 12.345.678.1 - 12.345.678.254 254 182 71.654 +Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 +Jaskanen 12.345.678.1 - 12.345.678.254 254 188 74.016 +Jaskanen 12.345.678.1 - 12.345.678.254 254 171 67.323 +Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 +Jaskanen 12.345.678.1 - 12.345.678.254 254 161 63.386 +Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 +Jaskanen 12.345.678.1 - 12.345.678.254 254 182 71.654 +Jaskanen 12.345.678.1 - 12.345.678.254 254 178 70.079 +Jaskanen 12.345.678.1 - 12.345.678.254 254 180 70.866 +Jaskanen 12.345.678.1 - 12.345.678.254 254 177 69.685 +Jaskanen 12.345.678.1 - 12.345.678.254 254 173 68.110 +Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 +Jaskanen 12.345.678.1 - 12.345.678.254 254 178 70.079 +Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 +Jaskanen 12.345.678.1 - 12.345.678.254 254 162 63.780 +Jaskanen 12.345.678.1 - 12.345.678.254 254 193 75.984 +Jaskanen 12.345.678.1 - 12.345.678.254 254 184 72.441 +Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 +Jaskanen 12.345.678.1 - 12.345.678.254 254 188 74.016 +Jaskanen 12.345.678.1 - 12.345.678.254 254 165 64.961 +Jaskanen 12.345.678.1 - 12.345.678.254 254 171 67.323 +Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 +Halonen 12.345.6.3 - 12.345.6.254 252 214 12.345 +Halonen 12.345.6.1 - 12.345.6.254 254 219 86.220 +Halonen 12.345.6.1 - 12.345.6.254 254 225 88.583 +Halonen 12.345.6.1 - 12.345.6.254 254 228 89.764 +Halonen 12.345.6.1 - 12.345.6.254 254 226 88.976 +Halonen 12.345.6.1 - 12.345.6.254 254 212 83.465 +Halonen 12.345.6.1 - 12.345.6.254 254 217 85.433 +Halonen 12.345.6.1 - 12.345.6.254 254 216 85.039 +Halonen 12.345.6.1 - 12.345.6.254 254 218 85.827 +Halonen 12.345.6.1 - 12.345.6.254 254 218 85.827 +Halonen 12.345.67.1 - 12.345.67.254 254 223 87.795 +Halonen 12.345.67.1 - 12.345.67.254 254 228 89.764 +Halonen 12.345.67.1 - 12.345.67.254 254 221 87.008 +Halonen 12.345.67.1 - 12.345.67.254 254 217 85.433 +Halonen 12.345.67.1 - 12.345.67.254 254 218 85.827 +Halonen 12.345.67.1 - 12.345.67.254 254 227 89.370 +Halonen 12.345.67.1 - 12.345.67.254 254 212 83.465 +Halonen 12.345.67.1 - 12.345.67.254 254 215 12.345 +Halonen 12.345.67.1 - 12.345.67.254 254 232 91.339 +Halonen 12.345.67.1 - 12.345.67.254 254 217 85.433 +Halonen 12.345.67.1 - 12.345.67.254 254 227 89.370 +Halonen 12.345.67.1 - 12.345.67.254 254 218 85.827 +Halonen 12.345.67.1 - 12.345.67.254 254 223 87.795 +Halonen 12.345.67.1 - 12.345.67.254 254 222 87.402 +Halonen 12.345.67.1 - 12.345.67.254 254 218 85.827 +Halonen 12.345.67.1 - 12.345.67.254 254 225 88.583 +Halonen 12.345.67.1 - 12.345.67.254 254 210 82.677 +Halonen 12.345.67.1 - 12.345.67.254 254 224 88.189 +Halonen 12.345.67.1 - 12.345.67.254 254 220 86.614 +Halonen 12.345.67.1 - 12.345.67.254 254 227 89.370 +Halonen 12.345.67.1 - 12.345.67.254 254 228 89.764 +Halonen 12.345.67.1 - 12.345.67.254 254 220 86.614 +Asikainen 12.345.67.4 - 12.345.67.254 251 13 5.179 +Asikainen 12.345.67.1 - 12.345.67.254 254 17 6.693 +Asikainen 12.345.67.1 - 12.345.67.254 254 14 5.512 +Asikainen 12.345.67.1 - 12.345.67.254 254 19 7.480 +Asikainen 12.345.67.1 - 12.345.67.254 254 23 9.055 +Asikainen 12.345.67.1 - 12.345.67.254 254 19 7.480 +Asikainen 12.345.67.1 - 12.345.67.254 254 18 7.087 +Asikainen 12.345.67.1 - 12.345.67.254 254 16 6.299 +Asikainen 12.345.67.1 - 12.345.67.254 254 24 9.449 +Asikainen 12.345.67.1 - 12.345.67.254 254 24 9.449 +Asikainen 12.345.67.1 - 12.345.67.254 254 24 9.449 +Asikainen 12.345.67.1 - 12.345.67.254 254 26 10.236 +Asikainen 12.345.67.1 - 12.345.67.254 254 24 9.449 +Asikainen 12.345.67.1 - 12.345.67.254 254 33 12.992 +Asikainen 12.345.67.1 - 12.345.67.254 254 29 11.417 +Asikainen 12.345.67.1 - 12.345.67.254 254 25 9.843 +Asikainen 12.345.67.1 - 12.345.67.254 254 34 13.386 +Asikainen 12.345.67.1 - 12.345.67.254 254 31 12.205 +Asikainen 12.345.67.1 - 12.345.67.254 254 28 11.024 +Asikainen 12.345.67.1 - 12.345.67.254 254 32 12.598 +Asikainen 12.345.67.1 - 12.345.67.254 254 35 13.780 +Asikainen 12.345.67.1 - 12.345.67.254 254 36 14.173 +Asikainen 12.345.67.1 - 12.345.67.254 254 41 16.142 +Asikainen 12.345.67.1 - 12.345.67.254 254 35 13.780 +Asikainen 12.345.67.1 - 12.345.67.254 254 32 12.598 +Asikainen 12.345.67.1 - 12.345.67.254 254 33 12.992 +Asikainen 12.345.67.1 - 12.345.67.254 254 44 17.323 +Asikainen 12.345.67.1 - 12.345.67.254 254 27 10.630 +Asikainen 12.345.67.1 - 12.345.67.254 254 35 13.780 +Asikainen 12.345.67.1 - 12.345.67.254 254 32 12.598 +Asikainen 12.345.67.1 - 12.345.67.254 254 40 15.748 +Asikainen 12.345.67.1 - 12.345.67.254 254 37 14.567 +Hyle 12.345.678.3 - 12.345.678.254 252 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 1 0.394 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 +Halttunen 12.345.678.3 - 12.345.678.254 252 198 78.571 +Halttunen 12.345.678.1 - 12.345.678.254 254 193 75.984 +Halttunen 12.345.678.1 - 12.345.678.254 254 207 81.496 +Halttunen 12.345.678.1 - 12.345.678.254 254 191 75.197 +Husso 12.345.678.3 - 12.345.678.254 252 156 61.905 +Husso 12.345.678.1 - 12.345.678.254 254 154 60.630 +Husso 12.345.678.1 - 12.345.678.254 254 168 66.142 +Husso 12.345.678.1 - 12.345.678.254 254 169 66.535 +Husso 12.345.678.1 - 12.345.678.254 254 171 67.323 +Husso 12.345.678.1 - 12.345.678.254 254 184 72.441 +Husso 12.345.678.1 - 12.345.678.254 254 173 68.110 +Husso 12.345.678.1 - 12.345.678.254 254 166 65.354 +Halttunen 12.345.678.3 - 12.345.678.254 252 209 82.937 +Halttunen 12.345.678.1 - 12.345.678.254 254 209 82.283 +Halttunen 12.345.678.1 - 12.345.678.254 254 212 83.465 +Halttunen 12.345.678.1 - 12.345.678.254 254 205 80.709 +Halttunen 12.345.678.1 - 12.345.678.254 254 202 79.528 +Halttunen 12.345.678.1 - 12.345.678.254 254 210 82.677 +Halttunen 12.345.678.1 - 12.345.678.254 254 194 76.378 +Halttunen 12.345.678.1 - 12.345.678.254 254 193 75.984 +Husso 12.345.678.3 - 12.345.678.254 252 173 68.651 +Husso 12.345.678.1 - 12.345.678.254 254 175 68.898 +Husso 12.345.678.1 - 12.345.678.254 254 162 63.780 +Husso 12.345.678.1 - 12.345.678.254 254 166 65.354 +Husso 12.345.678.1 - 12.345.678.254 254 183 72.047 +Husso 12.345.678.1 - 12.345.678.254 254 166 65.354 +Husso 12.345.678.1 - 12.345.678.254 254 162 63.780 +Husso 12.345.678.1 - 12.345.678.254 254 163 64.173 +Halttunen 12.345.678.3 - 12.345.678.254 252 208 82.540 +Halttunen 12.345.678.1 - 12.345.678.254 254 196 77.165 +Halttunen 12.345.678.1 - 12.345.678.254 254 196 77.165 +Halttunen 12.345.678.1 - 12.345.678.254 254 205 80.709 +Halttunen 12.345.678.1 - 12.345.678.254 254 216 85.039 +Halttunen 12.345.678.1 - 12.345.678.254 254 211 83.071 +Halttunen 12.345.678.1 - 12.345.678.254 254 200 78.740 +Halttunen 12.345.678.1 - 12.345.678.254 254 208 81.890 +Halttunen 12.345.678.3 - 12.345.678.254 252 189 75.000 +Halttunen 12.345.678.1 - 12.345.678.254 254 216 85.039 +Halttunen 12.345.678.1 - 12.345.678.254 254 201 79.134 +Halttunen 12.345.678.1 - 12.345.678.254 254 205 80.709 +Ahosvaara 12.345.678.3 - 12.345.678.254 252 107 42.460 +Ahosvaara 12.345.678.1 - 12.345.678.254 254 97 38.189 +Ahosvaara 12.345.678.1 - 12.345.678.254 254 103 40.551 +Ahosvaara 12.345.678.1 - 12.345.678.254 254 113 44.488 +Janhonen 12.345.6.4 - 12.345.6.254 251 0 0.000 +Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 +Janhonen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Janhonen 12.345.67.1 - 12.345.67.254 254 1 0.394 +Janhonen 12.345.67.1 - 12.345.67.254 254 1 0.394 +Janhonen 12.345.67.1 - 12.345.67.254 254 2 0.787 +Janhonen 12.345.67.1 - 12.345.67.254 254 5 1.969 +Janhonen 12.345.67.1 - 12.345.67.254 254 6 2.362 +Janhonen 12.345.67.1 - 12.345.67.254 254 9 3.543 +Janhonen 12.345.67.1 - 12.345.67.254 254 4 1.575 +Janhonen 12.345.67.1 - 12.345.67.254 254 5 1.969 +Janhonen 12.345.67.1 - 12.345.67.254 254 10 3.937 +Janhonen 12.345.67.1 - 12.345.67.254 254 7 2.756 +Janhonen 12.345.67.1 - 12.345.67.254 254 8 3.150 +Janhonen 12.345.67.1 - 12.345.67.254 254 12 4.724 +Janhonen 12.345.67.1 - 12.345.67.254 254 11 4.331 +Janhonen 12.345.67.1 - 12.345.67.254 254 12 4.724 +Janhonen 12.345.67.1 - 12.345.67.254 254 15 5.906 +Janhonen 12.345.67.1 - 12.345.67.254 254 16 6.299 +Janhonen 12.345.67.1 - 12.345.67.254 254 10 3.937 +Janhonen 12.345.67.1 - 12.345.67.254 254 6 2.362 +Janhonen 12.345.67.1 - 12.345.67.254 254 15 5.906 +Janhonen 12.345.67.1 - 12.345.67.254 254 12 4.724 +Janhonen 12.345.67.1 - 12.345.67.254 254 17 6.693 +Janhonen 12.345.67.1 - 12.345.67.254 254 20 7.874 +Janhonen 12.345.67.1 - 12.345.67.254 254 12 4.724 +Janhonen 12.345.67.1 - 12.345.67.254 254 15 5.906 +Janhonen 12.345.67.1 - 12.345.67.254 254 23 9.055 +Janhonen 12.345.67.1 - 12.345.67.254 254 19 7.480 +Janhonen 12.345.67.1 - 12.345.67.254 254 19 7.480 +Janhonen 12.345.67.1 - 12.345.67.254 254 25 9.843 +Janhonen 12.345.67.1 - 12.345.67.254 254 25 9.843 +Janhonen 12.345.67.1 - 12.345.67.254 254 30 11.811 +Janhonen 12.345.67.1 - 12.345.67.254 254 30 11.811 +Janhonen 12.345.67.1 - 12.345.67.254 254 31 12.205 +Janhonen 12.345.67.1 - 12.345.67.254 254 31 12.205 +Janhonen 12.345.67.1 - 12.345.67.254 254 33 12.992 +Janhonen 12.345.67.1 - 12.345.67.254 254 31 12.205 +Janhonen 12.345.67.1 - 12.345.67.254 254 35 13.780 +Janhonen 12.345.67.1 - 12.345.67.254 254 40 15.748 +Janhonen 12.345.67.1 - 12.345.67.254 254 35 13.780 +Janhonen 12.345.67.1 - 12.345.67.254 254 43 16.929 +Janhonen 12.345.67.1 - 12.345.67.254 254 44 17.323 +Janhonen 12.345.67.1 - 12.345.67.254 254 33 12.992 +Janhonen 12.345.67.1 - 12.345.67.254 254 44 17.323 +Janhonen 12.345.67.1 - 12.345.67.254 254 35 13.780 +Janhonen 12.345.67.1 - 12.345.67.254 254 48 18.898 +Janhonen 12.345.67.1 - 12.345.67.254 254 45 17.717 +Janhonen 12.345.67.1 - 12.345.67.254 254 43 16.929 +Janhonen 12.345.67.1 - 12.345.67.254 254 46 18.110 +Janhonen 12.345.67.1 - 12.345.67.254 254 51 20.079 +Janhonen 12.345.67.1 - 12.345.67.254 254 52 20.472 +Janhonen 12.345.67.1 - 12.345.67.254 254 55 21.654 +Janhonen 12.345.67.1 - 12.345.67.254 254 56 22.047 +Janhonen 12.345.67.1 - 12.345.67.254 254 51 20.079 +Janhonen 12.345.67.1 - 12.345.67.254 254 60 23.622 +Jehkinen 12.345.67.4 - 12.345.67.254 251 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 +Jehkinen 12.345.67.1 - 12.345.67.254 254 1 0.394 +Jehkinen 12.345.67.1 - 12.345.67.254 254 3 1.181 +Jehkinen 12.345.67.1 - 12.345.67.254 254 3 1.181 +Jehkinen 12.345.67.1 - 12.345.67.254 254 7 2.756 +Jehkinen 12.345.67.1 - 12.345.67.254 254 5 1.969 +Jehkinen 12.345.67.1 - 12.345.67.254 254 4 1.575 +Jehkinen 12.345.67.1 - 12.345.67.254 254 6 2.362 +Jehkinen 12.345.67.1 - 12.345.67.254 254 10 3.937 +Jehkinen 12.345.67.1 - 12.345.67.254 254 7 2.756 +Jehkinen 12.345.67.1 - 12.345.67.254 254 11 4.331 +Jehkinen 12.345.67.1 - 12.345.67.254 254 13 5.118 +Jehkinen 12.345.67.1 - 12.345.67.254 254 14 5.512 +Jehkinen 12.345.67.1 - 12.345.67.254 254 15 5.906 +Jehkinen 12.345.67.1 - 12.345.67.254 254 18 7.087 +Jehkinen 12.345.67.1 - 12.345.67.254 254 18 7.087 +Jehkinen 12.345.67.1 - 12.345.67.254 254 19 7.480 +Jehkinen 12.345.67.1 - 12.345.67.254 254 17 6.693 +Jehkinen 12.345.67.1 - 12.345.67.254 254 17 6.693 +Jehkinen 12.345.67.1 - 12.345.67.254 254 19 7.480 +Hokkanen 12.345.67.3 - 12.345.67.254 252 55 21.825 +Hokkanen 12.345.67.1 - 12.345.67.254 254 64 25.197 +Hokkanen 12.345.67.1 - 12.345.67.254 254 70 27.559 +Hokkanen 12.345.67.1 - 12.345.67.254 254 72 28.346 +Hokkanen 12.345.678.1 - 12.345.678.254 254 82 32.283 +Hokkanen 12.345.678.1 - 12.345.678.254 254 68 26.772 +Hokkanen 12.345.678.1 - 12.345.678.254 254 65 25.591 +Hokkanen 12.345.678.1 - 12.345.678.254 254 70 27.559 +Hokkanen 12.345.678.1 - 12.345.678.254 254 83 32.677 +Hokkanen 12.345.678.1 - 12.345.678.254 254 73 28.740 +Hokkanen 12.345.678.1 - 12.345.678.254 254 89 35.039 +Hokkanen 12.345.678.1 - 12.345.678.254 254 92 36.220 +Hokkanen 12.345.678.1 - 12.345.678.254 254 74 29.134 +Hokkanen 12.345.678.1 - 12.345.678.254 254 68 26.772 +Hokkanen 12.345.678.1 - 12.345.678.254 254 73 28.740 +Hokkanen 12.345.678.1 - 12.345.678.254 254 88 34.646 +Husso 12.345.678.3 - 12.345.678.254 252 142 56.349 +Husso 12.345.678.1 - 12.345.678.254 254 155 61.024 +Husso 12.345.678.1 - 12.345.678.254 254 160 62.992 +Husso 12.345.678.1 - 12.345.678.254 254 148 58.268 +Husso 12.345.678.1 - 12.345.678.254 254 148 58.268 +Husso 12.345.678.1 - 12.345.678.254 254 157 61.811 +Husso 12.345.678.1 - 12.345.678.254 254 149 58.661 +Husso 12.345.678.1 - 12.345.678.254 254 163 64.173 +Husso 12.345.678.3 - 12.345.678.254 252 135 53.571 +Husso 12.345.678.1 - 12.345.678.254 254 141 55.512 +Husso 12.345.678.1 - 12.345.678.254 254 140 55.118 +Husso 12.345.678.1 - 12.345.678.254 254 141 55.512 +Husso 12.345.678.1 - 12.345.678.254 254 136 53.543 +Husso 12.345.678.1 - 12.345.678.254 254 125 49.213 +Husso 12.345.678.1 - 12.345.678.254 254 145 57.087 +Husso 12.345.678.1 - 12.345.678.254 254 139 54.724 +Husso 12.345.678.3 - 12.345.678.254 252 148 58.730 +Husso 12.345.678.1 - 12.345.678.254 254 159 62.598 +Husso 12.345.678.1 - 12.345.678.254 254 157 61.811 +Husso 12.345.678.1 - 12.345.678.254 254 157 61.811 +Husso 12.345.678.1 - 12.345.678.254 254 168 66.142 +Husso 12.345.678.1 - 12.345.678.254 254 153 60.236 +Husso 12.345.678.1 - 12.345.678.254 254 162 63.780 +Husso 12.345.678.1 - 12.345.678.254 254 159 62.598 +Halttunen 12.345.678.3 - 12.345.678.254 252 184 73.016 +Halttunen 12.345.678.1 - 12.345.678.254 254 185 72.835 +Halttunen 12.345.678.1 - 12.345.678.254 254 181 71.260 +Halttunen 12.345.678.1 - 12.345.678.254 254 184 72.441 +Halttunen 12.345.678.1 - 12.345.678.254 254 175 68.898 +Halttunen 12.345.678.1 - 12.345.678.254 254 192 75.591 +Halttunen 12.345.678.1 - 12.345.678.254 254 173 68.110 +Halttunen 12.345.678.1 - 12.345.678.254 254 185 72.835 +Halttunen 12.345.678.3 - 12.345.678.254 252 116 46.032 +Halttunen 12.345.678.1 - 12.345.678.254 254 130 51.181 +Halttunen 12.345.678.1 - 12.345.678.254 254 130 51.181 +Halttunen 12.345.678.1 - 12.345.678.254 254 138 54.331 +Halttunen 12.345.678.1 - 12.345.678.254 254 143 56.299 +Halttunen 12.345.678.1 - 12.345.678.254 254 131 51.575 +Halttunen 12.345.678.1 - 12.345.678.254 254 121 47.638 +Halttunen 12.345.678.1 - 12.345.678.254 254 126 49.606 +Jelonen 12.345.6.3 - 12.345.6.254 252 57 22.619 +Jelonen 12.345.6.1 - 12.345.6.254 254 47 18.504 +Jelonen 12.345.6.1 - 12.345.6.254 254 52 20.472 +Jelonen 12.345.6.1 - 12.345.6.254 254 52 20.472 +Jelonen 12.345.6.1 - 12.345.6.254 254 58 22.835 +Jelonen 12.345.6.1 - 12.345.6.254 254 59 23.228 +Jelonen 12.345.6.1 - 12.345.6.254 254 55 21.654 +Jelonen 12.345.6.1 - 12.345.6.254 254 52 20.472 +Jelonen 12.345.6.1 - 12.345.6.254 254 55 21.654 +Jelonen 12.345.6.1 - 12.345.6.254 254 67 26.378 +Jelonen 12.345.67.1 - 12.345.67.254 254 62 24.409 +Jelonen 12.345.67.1 - 12.345.67.254 254 60 23.622 +Jelonen 12.345.67.1 - 12.345.67.254 254 60 23.622 +Jelonen 12.345.67.1 - 12.345.67.254 254 61 24.016 +Jelonen 12.345.67.1 - 12.345.67.254 254 64 25.197 +Jelonen 12.345.67.1 - 12.345.67.254 254 70 27.559 +Jaskanen 12.345.67.3 - 12.345.67.254 252 146 57.937 +Jaskanen 12.345.67.1 - 12.345.67.254 254 143 56.299 +Jaskanen 12.345.67.1 - 12.345.67.254 254 142 55.906 +Jaskanen 12.345.67.1 - 12.345.67.254 254 161 63.386 +Jaskanen 12.345.67.1 - 12.345.67.254 254 150 59.055 +Jaskanen 12.345.67.1 - 12.345.67.254 254 155 61.024 +Jaskanen 12.345.67.1 - 12.345.67.254 254 153 60.236 +Jaskanen 12.345.67.1 - 12.345.67.254 254 161 63.386 +Jaskanen 12.345.67.1 - 12.345.67.254 254 150 59.055 +Jaskanen 12.345.67.1 - 12.345.67.254 254 156 61.417 +Jaskanen 12.345.67.1 - 12.345.67.254 254 150 59.055 +Jaskanen 12.345.67.1 - 12.345.67.254 254 147 57.874 +Jaskanen 12.345.67.1 - 12.345.67.254 254 148 58.268 +Jaskanen 12.345.67.1 - 12.345.67.254 254 150 59.055 +Jaskanen 12.345.67.1 - 12.345.67.254 254 143 56.299 +Jaskanen 12.345.67.1 - 12.345.67.254 254 145 57.087 +Itkonen 12.345.67.3 - 12.345.67.254 252 165 65.476 +Itkonen 12.345.67.1 - 12.345.67.254 254 153 60.236 +Itkonen 12.345.67.1 - 12.345.67.254 254 142 55.906 +Itkonen 12.345.67.1 - 12.345.67.254 254 178 70.079 +Itkonen 12.345.67.1 - 12.345.67.254 254 163 64.173 +Itkonen 12.345.67.1 - 12.345.67.254 254 165 64.961 +Itkonen 12.345.67.1 - 12.345.67.254 254 175 68.898 +Itkonen 12.345.67.1 - 12.345.67.254 254 161 63.386 +Huttunen 12.345.678.3 - 12.345.678.254 252 39 15.476 +Huttunen 12.345.678.1 - 12.345.678.254 254 44 17.323 +Huttunen 12.345.678.1 - 12.345.678.254 254 43 16.929 +Huttunen 12.345.678.1 - 12.345.678.254 254 45 17.717 +Huttunen 12.345.678.1 - 12.345.678.254 254 49 19.291 +Huttunen 12.345.678.1 - 12.345.678.254 254 50 19.685 +Huttunen 12.345.678.1 - 12.345.678.254 254 48 18.898 +Huttunen 12.345.678.1 - 12.345.678.254 254 53 20.866 +Holappa 12.345.678.3 - 12.345.678.254 252 179 71.032 +Holappa 12.345.678.1 - 12.345.678.254 254 156 61.417 +Holappa 12.345.678.1 - 12.345.678.254 254 172 67.717 +Holappa 12.345.678.1 - 12.345.678.254 254 166 65.354 +Holappa 12.345.678.1 - 12.345.678.254 254 156 61.417 +Holappa 12.345.678.1 - 12.345.678.254 254 162 63.780 +Holappa 12.345.678.1 - 12.345.678.254 254 162 63.780 +Holappa 12.345.678.1 - 12.345.678.254 254 159 62.598 +Holappa 12.345.678.1 - 12.345.678.254 254 179 70.472 +Holappa 12.345.678.1 - 12.345.678.254 254 164 64.567 +Holappa 12.345.678.1 - 12.345.678.254 254 165 64.961 +Holappa 12.345.678.1 - 12.345.678.254 254 162 63.780 +Holappa 12.345.678.1 - 12.345.678.254 254 171 67.323 +Holappa 12.345.678.1 - 12.345.678.254 254 171 67.323 +Holappa 12.345.678.1 - 12.345.678.254 254 163 64.173 +Holappa 12.345.678.1 - 12.345.678.254 254 156 61.417 +Holopainen 123.45.198.2 - 124.56.198.254 253 2 0.791 + +Shared networks: +name max cur percent +Hynninen 0 0 nan +Hyttinen 0 0 nan +Hyytinen 0 0 nan +Atjonen 252 1 0.397 +Auvinen 4568 1812 39.667 +Harakka 4062 1934 47.612 +Eronen 4568 1565 34.260 +Haavikko 4315 1585 36.732 +Hakkarainen 4062 540 13.294 +Halonen 20314 12514 61.603 +Halttunen 20304 13619 67.075 +Hokkanen 4062 1186 29.197 +Huttunen 2030 371 18.276 +Honkipuro 4568 1765 38.638 +Huhtala 4062 1616 39.783 +Hult 4823 1657 34.356 +Huohvanainen 4062 677 16.667 +Husso 20306 10971 54.028 +Holappa 4062 2643 65.066 +Jelonen 4062 931 22.920 +Honkanen 4568 1901 41.616 +Huusko 4062 1532 37.715 +Huuskonen 3809 2098 55.080 +Ilarionova 520 255 49.038 +Ikonen 4062 0 0.000 +Ilmovuori 4315 0 0.000 +Hyle 4062 1 0.025 +Aatamila 252 33 13.095 +Hattunen 2030 0 0.000 +Harkovski 2028 1573 77.564 +Happo 1014 663 65.385 +Happonen 1014 726 71.598 +Harakka 1014 803 79.191 +Harjunen 1014 818 80.671 +Haukka 1014 345 34.024 +Hautanen 1014 408 40.237 +Havu 1014 404 39.842 +Heiskanen 1014 452 44.576 +Hietanen 1014 395 38.955 +Hiiliaho 1014 408 40.237 +Hilonen 1014 323 31.854 +Hirvonen 1014 714 70.414 +Hoivassilta 507 0 0.000 +Jaskanen 28181 19262 68.351 +Itkonen-temp 3556 0 0.000 +Itkonen 4312 2788 64.657 +Ahtonen 1014 266 26.233 +Arviluoma 252 3 1.190 +Ahosvaara 1014 420 41.420 +Holopainen 253 2 0.791 +Anttila 505 0 0.000 +Janhonen 16253 1344 8.269 +Asikainen 8125 900 11.077 +Jehkinen 8125 207 2.548 + +Sum of all: +name max cur percent +All networks 228455 94431 41.335 diff --git a/webpages/sitemap.txt b/webpages/sitemap.txt new file mode 100644 index 0000000..8683dc2 --- /dev/null +++ b/webpages/sitemap.txt @@ -0,0 +1,522 @@ +http://dhcpd-pools.sourceforge.net/ +http://dhcpd-pools.sourceforge.net/dhcpd-pools.awk +http://dhcpd-pools.sourceforge.net/man.html +http://dhcpd-pools.sourceforge.net/sampleoutput.txt +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/annotated.html +http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/classes.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/close_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/config_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/files.html +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/float_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/functions.html +http://dhcpd-pools.sourceforge.net/doxygen/functions_func.html +http://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/gettimeofday_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_a.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_b.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_d.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_e.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_f.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_v.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_y.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_g.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_h.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_i.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_k.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_l.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_m.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_n.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_o.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_p.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_q.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_r.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_s.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_t.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_type.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_u.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_v.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_w.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_x.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_y.html +http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/index.html +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral-members.html +http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html +http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data-members.html +http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html +http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structiovec-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structiovec.html +http://dhcpd-pools.sourceforge.net/doxygen/structleases__t-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html +http://dhcpd-pools.sourceforge.net/doxygen/structoption-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structoption.html +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html +http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html +http://dhcpd-pools.sourceforge.net/doxygen/structrange__t-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structslotvec-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html +http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html +http://dhcpd-pools.sourceforge.net/doxygen/structtimespec-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html +http://dhcpd-pools.sourceforge.net/doxygen/structtimeval-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structtimeval.html +http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone-members.html +http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html +http://dhcpd-pools.sourceforge.net/doxygen/sys_2time_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys_2time_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__time_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__time_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/types_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t-members.html +http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html +http://dhcpd-pools.sourceforge.net/doxygen/unionmax__align__t-members.html +http://dhcpd-pools.sourceforge.net/doxygen/unionmax__align__t.html +http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double-members.html +http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html From 03b1edb188aa1d556ff21ed5061e12e9c8fa36ee Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 7 Dec 2015 10:53:25 +0000 Subject: [PATCH 003/158] add sitemap url to robots.txt file Signed-off-by: Sami Kerola --- webpages/robots.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/webpages/robots.txt b/webpages/robots.txt index c2a49f4..25e6762 100644 --- a/webpages/robots.txt +++ b/webpages/robots.txt @@ -1,2 +1,3 @@ +Sitemap: http://dhcpd-pools.sourceforge.net/sitemap.txt User-agent: * -Allow: / +Disallow: From d717a043bf6598b5995f659474b8973f77d80066 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Thu, 10 Dec 2015 22:42:24 +0000 Subject: [PATCH 004/158] use long options in .indent.pro file Short options are impossible to understand without looking to manual page. Signed-off-by: Sami Kerola --- src/.indent.pro | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/.indent.pro b/src/.indent.pro index 3d15003..2d71c4e 100644 --- a/src/.indent.pro +++ b/src/.indent.pro @@ -7,7 +7,9 @@ -Tsize_t -Ttime_t -Tuintmax_t --l100 --ppi1 --bad --sob +--blank-lines-after-declarations +--format-all-comments +--line-length100 +--preprocessor-indentation1 +--start-left-side-of-comments +--swallow-optional-blank-lines From 46641751b400aaf0626e15bf8dfdabb8f4316076 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 29 Dec 2015 21:04:50 +0000 Subject: [PATCH 005/158] webpages: make index page mobile device friendly Use css max-width instead of width this permits narrow screen to wrap lines, this makes the index page more usable when browsing with a mobile phone or some other device with limited horizontal dimension. Also get rid of
tag, and make the sample usage more realistic.

Signed-off-by: Sami Kerola 
---
 webpages/index.html | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/webpages/index.html b/webpages/index.html
index 861c4e8..7fb097d 100644
--- a/webpages/index.html
+++ b/webpages/index.html
@@ -19,7 +19,13 @@
 BODY {
 background-color:#ffffff;
 margin:20px;
-width:520px;
+max-width:700px;
+}
+DIV.tt {
+font-family: Lucida Sans Typewriter,Lucida Console,monaco,Bitstream Vera Sans Mono,monospace;
+font-size: 12px;
+font-style: normal;
+font-variant: normal;
 }
 
 
@@ -39,15 +45,17 @@ there is lots of data. On cheap laptop the speed of analysis is more than
 100k leases per second. Number of ranges, or shared networks, does not make
 any significant difference in getting analysis done.


-
prompt> ./dhcpd-pools -c ~/testdata/dhcpd.conf -l ~/testdata/dhcpd.leases -o ~/sampleoutput.txt
-prompt> cat ~/sampleoutput.txt
+
+prompt> ./dhcpd-pools -c /etc/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases -o +./sampleoutput.txt
+prompt> cat ./sampleoutput.txt
+

Where I can get dhcpd-pools?

Download release package or clone from git

-
-git clone git://git.code.sf.net/p/dhcpd-pools/code dhcpd-pools
+
git clone git://git.code.sf.net/p/dhcpd-pools/code dhcpd-pools

See also SourceForge project page.

Documentation

From 3d0c510475d09c667aca5474f85c5bff34c174eb Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 29 Dec 2015 21:52:48 +0000 Subject: [PATCH 006/158] webpages: compress sitemap.txt file More than 90% is hefty pay-off. $ gzip -v -d sitemap.txt.gz sitemap.txt.gz: 93.5% -- replaced with sitemap.txt Signed-off-by: Sami Kerola --- webpages/robots.txt | 2 +- webpages/sitemap.txt | 522 ---------------------------------------- webpages/sitemap.txt.gz | Bin 0 -> 2191 bytes 3 files changed, 1 insertion(+), 523 deletions(-) delete mode 100644 webpages/sitemap.txt create mode 100644 webpages/sitemap.txt.gz diff --git a/webpages/robots.txt b/webpages/robots.txt index 25e6762..796dbd6 100644 --- a/webpages/robots.txt +++ b/webpages/robots.txt @@ -1,3 +1,3 @@ -Sitemap: http://dhcpd-pools.sourceforge.net/sitemap.txt +Sitemap: http://dhcpd-pools.sourceforge.net/sitemap.txt.gz User-agent: * Disallow: diff --git a/webpages/sitemap.txt b/webpages/sitemap.txt deleted file mode 100644 index 8683dc2..0000000 --- a/webpages/sitemap.txt +++ /dev/null @@ -1,522 +0,0 @@ -http://dhcpd-pools.sourceforge.net/ -http://dhcpd-pools.sourceforge.net/dhcpd-pools.awk -http://dhcpd-pools.sourceforge.net/man.html -http://dhcpd-pools.sourceforge.net/sampleoutput.txt -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/annotated.html -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/classes.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/close_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/config_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/files.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/functions.html -http://dhcpd-pools.sourceforge.net/doxygen/functions_func.html -http://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/gettimeofday_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_v.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_y.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_k.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_q.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_type.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_v.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_w.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_y.html -http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/index.html -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral-members.html -http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html -http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data-members.html -http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html -http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structiovec-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structiovec.html -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html -http://dhcpd-pools.sourceforge.net/doxygen/structoption-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structoption.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html -http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structslotvec-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html -http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html -http://dhcpd-pools.sourceforge.net/doxygen/structtimespec-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html -http://dhcpd-pools.sourceforge.net/doxygen/structtimeval-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structtimeval.html -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone-members.html -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html -http://dhcpd-pools.sourceforge.net/doxygen/sys_2time_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys_2time_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__time_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__time_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/types_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t-members.html -http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html -http://dhcpd-pools.sourceforge.net/doxygen/unionmax__align__t-members.html -http://dhcpd-pools.sourceforge.net/doxygen/unionmax__align__t.html -http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double-members.html -http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html diff --git a/webpages/sitemap.txt.gz b/webpages/sitemap.txt.gz new file mode 100644 index 0000000000000000000000000000000000000000..354ae7ba4036d51be722928dc0b6f6696733b612 GIT binary patch literal 2191 zcmV;A2ypiwiwFp6Uu9MT19NF~Wo=<_E_8Tw0Ii+ta;qu>hW~%}lGP?Lr|)JQ1Po3U zT!=aJ>Njc*rrk5UeP7meRy%E;hZhheo?=31|Nr);jBM4Sb*}FIbguVOm(CycAFIRL z|IB~CX8t#E{`d*f2>Zu`rvAxmJJGbYc7163@F!ftk0QCt^{DNesB0%hzBfNE?Hid- zuYd)WWr`nZID!@R^;742382;m5w!X}>5mKRtnKR>s`v{I*W9-v&#U+=xC6c#&?s^t z!?lGv;ei?g#dCMTOVNSFKVdq6Y+9`KZoK|WRbj-bN?4{A`THS$DP49@EnaZA7PaU) z-2t5I^w0uYG*IPVc*F8|^#S&?QS?O7{@31HhpxWnFcH9cWcb`b1A}nlOBG5{)lldMYZw-dUc&pxQrZBe zzJqw=k;gXBISdC-3*+1e)M$6q5GbD8wc0|l%ewCjL{>Gh{w!-J!mt8H+Ud!{4K*r| z+D;(2Y0h9cIo!jMQ(E|9$C49h3+Hsd7YJ8Yb9l$$fx~+aKXLel!|}Ze zKGgA1jt_8r!HLfb_=JGZ1^6_8&j9$~$HzTB5ZD2`8;q}Z@hJ(I zjl5`0UhDYt?-x!+V5fj8tMmn+G;}!a#-Yd3Mm%qWvshI_>s{Mn!5=IhK6t14@c?wb zkH7uBp|b+3`2Z@IEMXElu}}q9Lt$%SkCiPQ(!nzp?ck>ZJK+9>hhsP?YH8wpsiCt5 zue@P-xEkm=v}U}@8z%*Y8UjU|su96pp$E>O92XZGBQq8*zVN}Fu??i?DqBILs?m)! z(1laY$8i2=5qBTjTLE3v^IZWq-e`iV(Vb*Wa1u338;*vnK1i$!#=A3Ig$Hj~9<4_F zd0Ivdg9sah-xX+>SQ`xuis{BBglyvs(ufOE?wuoDVOTV}*YH}Ti$zN_+_9FwGw_mvxuUtUR}{Ub=!~K_6uqVB9YyaMn(8pB zzo_n_dW-5Ts;{W7Ixw(c;DUjvX;d+=X5bQqZ+8gddw{!O$qH7iV9g3LRcbd1KkaDFYH+X zJu?YbP_P2Y3KT2QtN>oA3|H3?dxr^Ma`=kF*BqX4_=dqxqV6@>{5Qukfn$}xu}W=_IaqM+W;Jr&CYiWD(YOb1Pte7FPJUoFTRceg62;DW z=rUULabpu_P!6tUP@=Am@FmY*cp^p-UqGao;Y5hI+95JLX(Gb-NG~|TlV&2gMb)%5 z8sR}x5#ZAKg7MaOeB;+u0hT_IY|(J#pEMq!wX(fp)2CmAvs;{phshZd$MbvDw_tqi zb0h8`5qW%$^unFu_eyCr{TGQzB4KL zUWPpW8#^G6KQ?_A|1b3Th)sR;qFyw*DKzk~g&)~r>-|Zf!vk39h;tbznLZGs_hP)A zKM!Q4uR2gu#YshyQAP*I)>;gg8Pm=2@PK^N9gXs2h)Dv%ar=rrNhX*iC_LRFnGf&q z*c>wzs2J|18|J=zs#8ZM`lVe=C1iYe(mxVydIsw z@RBS#^82AU$>HG2@|%LIOAus~Ad&=`I)(@`6L3MU?Qo=@Nis7~QF`Lo%`1<_pdUz* z>Tx9KpeM&WvsEV8AgA|N&|AP8`iZhf=o2Szo4$cTw559N_-aobUF~gLkyh=r#=w_y zuNn*=o>r1iCob3|FDg)>8|Sa_ZMW--T9a{JT!^C!&_m|#q`^sI!x{zH#PdSq5%9B| zz3n?4UnIO}qQqmB_~t;Xa?-vkp`+*z5-s{Hyj?iE=&{d%e#PMs!!!Dz;%^{XFt!!X zVLZUFUs*uU%say$9)4y&JNzy{8*WCU5iaBNj25bbP8;0l;lxK*eQIbD{TByU89W42 R^p}TJ{sY>yYmzjA004vGJ_G;& literal 0 HcmV?d00001 From 10b06d88f0bd5d14fb2e90fab8df8f680543c321 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Thu, 18 Feb 2016 22:35:56 +0000 Subject: [PATCH 007/158] getdata: flip ranges if they are in greater smaller order Apparently ISC dhcpd allows marking ranges in order from greater IP to smaller. In these cases first and last IPs are fliped, so that the rest of the processing can be done without alterations. Reported-by: Ivanov Ivan Signed-off-by: Sami Kerola --- THANKS | 1 + src/getdata.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/THANKS b/THANKS index 8c8f80b..1302c03 100644 --- a/THANKS +++ b/THANKS @@ -37,3 +37,4 @@ Tim Cantin Martijn van Brummelen Anton Tkachev Derrick Lin +Ivanov Ivan diff --git a/src/getdata.c b/src/getdata.c index 03a0b13..3e3be1f 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -163,6 +163,19 @@ static int is_interesting_config_clause(char const *restrict s) return ITS_NOTHING_INTERESTING; } +/*! \brief Flip first and last IP in range if they are in unusual order. + */ +void reorder_last_first(struct range_t *range_p) +{ + if (ipcomp(&range_p->first_ip, &range_p->last_ip) > 0) { + union ipaddr_t tmp; + + tmp = range_p->first_ip; + range_p->first_ip = range_p->last_ip; + range_p->last_ip = tmp; + } +} + /*! \brief The dhcpd.conf file parser. * FIXME: This spaghetti monster function need to be rewrote at least * ones. @@ -334,6 +347,7 @@ void parse_config(int is_include, const char *restrict config_file, copy_ipaddr(&range_p->first_ip, &addr); } copy_ipaddr(&range_p->last_ip, &addr); + reorder_last_first(range_p); newrange: range_p->count = 0; range_p->touched = 0; From c305e2f82cd5c3997f36d7004fdc33a4973cf753 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Thu, 18 Feb 2016 23:03:15 +0000 Subject: [PATCH 008/158] tests: add range definition flip test This test ensure 10b06d88f0bd5d14fb2e90fab8df8f680543c321 will not get regression in future. Signed-off-by: Sami Kerola --- tests/Makemodule.am | 1 + tests/big-small | 1 + tests/confs/big-small | 5 +++++ tests/expected/big-small | 10 ++++++++++ tests/leases/big-small | 1 + 5 files changed, 18 insertions(+) create mode 120000 tests/big-small create mode 100644 tests/confs/big-small create mode 100644 tests/expected/big-small create mode 120000 tests/leases/big-small diff --git a/tests/Makemodule.am b/tests/Makemodule.am index b4c0a94..12d6907 100644 --- a/tests/Makemodule.am +++ b/tests/Makemodule.am @@ -10,6 +10,7 @@ TESTS = \ tests/alarm-warning-ranges \ tests/alarm-warning-snets \ tests/shnet-alarm \ + tests/big-small \ tests/bootp \ tests/complete \ tests/empty \ diff --git a/tests/big-small b/tests/big-small new file mode 120000 index 0000000..61a58b0 --- /dev/null +++ b/tests/big-small @@ -0,0 +1 @@ +test.sh \ No newline at end of file diff --git a/tests/confs/big-small b/tests/confs/big-small new file mode 100644 index 0000000..7cc8997 --- /dev/null +++ b/tests/confs/big-small @@ -0,0 +1,5 @@ +subnet 10.0.0.0 netmask 255.255.255.0 { + pool { + range 10.0.0.10 10.0.0.1; + } +} diff --git a/tests/expected/big-small b/tests/expected/big-small new file mode 100644 index 0000000..da14b05 --- /dev/null +++ b/tests/expected/big-small @@ -0,0 +1,10 @@ +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc +All networks 10.0.0.1 - 10.0.0.10 10 10 100.000 0 10 100.000 + +Shared networks: +name max cur percent touch t+c t+c perc + +Sum of all ranges: +name max cur percent touch t+c t+c perc +All networks 10 10 100.000 0 10 100.000 diff --git a/tests/leases/big-small b/tests/leases/big-small new file mode 120000 index 0000000..8fd3246 --- /dev/null +++ b/tests/leases/big-small @@ -0,0 +1 @@ +simple \ No newline at end of file From 32e2d399a00041bd4c0720debf36c2260800f034 Mon Sep 17 00:00:00 2001 From: Manuel Hachtkemper Date: Tue, 29 Mar 2016 14:49:06 +0200 Subject: [PATCH 009/158] alarming: add additional performance data Options -p or --perfdata (in alarming mode) now enable the output of additional performance data, i.e. used, touched and backup addresses per subnet. Signed-off-by: Manuel Hachtkemper Signed-off-by: Sami Kerola --- THANKS | 1 + man/dhcpd-pools.1.in | 6 ++++ src/dhcpd-pools.c | 8 +++++- src/dhcpd-pools.h | 1 + src/other.c | 1 + src/output.c | 47 ++++++++++++++++++++++++++++++- tests/Makemodule.am | 4 ++- tests/complete-perfdata | 16 +++++++++++ tests/expected/alarm-count-option | 1 - tests/expected/complete-perfdata | 3 ++ tests/expected/v6-perfdata | 3 ++ tests/v6-perfdata | 16 +++++++++++ 12 files changed, 103 insertions(+), 4 deletions(-) create mode 100755 tests/complete-perfdata create mode 100644 tests/expected/complete-perfdata create mode 100644 tests/expected/v6-perfdata create mode 100755 tests/v6-perfdata diff --git a/THANKS b/THANKS index 1302c03..8375381 100644 --- a/THANKS +++ b/THANKS @@ -38,3 +38,4 @@ Martijn van Brummelen Anton Tkachev Derrick Lin Ivanov Ivan +Manuel Hachtkemper diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index df78f84..88794d8 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -192,6 +192,12 @@ defined size. This option is meaningful only in context of alarming, and will intented to supress for example single host ranges. By default this option is not in use. .TP +\fB\-p\fR, \fB\-\-perfdata\fR +Print additional performance data, like lease count, touched leases and +backup leases. This option is meaningful only in context of alarming and +will print lots of data, if there are many networks. By default this option +is not in use. +.TP \fB\-v\fR, \fB\-\-version\fR Print version information to standard output and exit successfully. .TP diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index d7f57f0..e3b775a 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -129,6 +129,7 @@ int main(int argc, char **argv) {"warn-count", required_argument, NULL, OPT_WARN_COUNT}, {"crit-count", required_argument, NULL, OPT_CRIT_COUNT}, {"minsize", required_argument, NULL, OPT_MINSIZE}, + {"perfdata", no_argument, NULL, 'p'}, {NULL, 0, NULL, 0} }; @@ -148,6 +149,7 @@ int main(int argc, char **argv) config.critical = ALARM_CRIT; config.warn_count = 0x100000000; /* == 2^32 that is the entire IPv4 space */ config.crit_count = 0x100000000; /* basically turns off the count criteria */ + config.perfdata = false; /* File location defaults */ strncpy(config.dhcpdconf_file, DHCPDCONF_FILE, MAXLEN - 1); strncpy(config.dhcpdlease_file, DHCPDLEASE_FILE, MAXLEN - 1); @@ -165,7 +167,7 @@ int main(int argc, char **argv) while (1) { int c; - c = getopt_long(argc, argv, "c:l:f:o:s:rL:vh", long_options, &option_index); + c = getopt_long(argc, argv, "c:l:f:o:s:rL:pvh", long_options, &option_index); if (c == EOF) break; switch (c) { @@ -235,6 +237,10 @@ int main(int argc, char **argv) case OPT_MINSIZE: config.minsize = strtod_or_err(optarg, "illegal argument"); break; + case 'p': + /* Print additional performance data in alarming mode */ + config.perfdata = true; + break; case 'v': /* Print version */ print_version(); diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index c20b72f..4415d62 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -210,6 +210,7 @@ struct configuration_t { backups_found:1, snet_alarms:1, print_mac_addreses:1, + perfdata:1, header_limit:3, number_limit:3; }; diff --git a/src/other.c b/src/other.c index cd2cb3a..5e54367 100644 --- a/src/other.c +++ b/src/other.c @@ -474,6 +474,7 @@ void __attribute__ ((__noreturn__)) usage(int status) fputs( " --crit-count=NR a number of free leases before critical raised\n", out); fputs( " --minsize=size disable alarms for small ranges and shared-nets\n", out); fputs( " --snet-alarms suppress range alarms that are part of a shared-net\n", out); + fputs( " -p --perfdata print additional perfdata in alarming mode\n", out); fputs( " -v, --version output version information and exit\n", out); fputs( " -h, --help display this help and exit\n", out); fputs( "\n", out); diff --git a/src/output.c b/src/output.c index e220243..35af873 100644 --- a/src/output.c +++ b/src/output.c @@ -1014,6 +1014,29 @@ int output_alarming(void) if (ri != 0) { fprintf(outfile, " range_ignored=%d", ri); } + if (config.perfdata == 1 && config.number_limit & R_BIT) { + for (i = 0; i < num_ranges; i++) { + range_p--; + range_size = get_range_size(range_p); + if (config.minsize < range_size) { + fprintf(outfile, " %s_r=", + ntop_ipaddr(&range_p->first_ip)); + fprintf(outfile, "%g;%g;%g;0;%g", + range_p->count, + (range_size * config.warning / 100), + (range_size * config.critical / 100), + range_size); + fprintf(outfile, " %s_rt=%g", + ntop_ipaddr(&range_p->first_ip), + range_p->touched); + if (config.backups_found == 1) { + fprintf(outfile, " %s_rbu=%g", + ntop_ipaddr(&range_p->first_ip), + range_p->backups); + } + } + } + } fprintf(outfile, "\n"); } else { fprintf(outfile, " "); @@ -1025,7 +1048,29 @@ int output_alarming(void) } fprintf(outfile, "; | snet_crit=%d snet_warn=%d snet_ok=%d", sc, sw, so); if (si != 0) { - fprintf(outfile, " snet_ignored=%d\n", si); + fprintf(outfile, " snet_ignored=%d", si); + } + if (config.perfdata == 1 && config.header_limit & R_BIT) { + for (i = 0; i < num_shared_networks; i++) { + if (config.minsize < shared_p->available) { + fprintf(outfile, " '%s_s'=%g;%g;%g;0;%g", + shared_p->name, + shared_p->used, + (shared_p->available * config.warning / 100), + (shared_p->available * config.critical / 100), + shared_p->available); + fprintf(outfile, " '%s_st'=%g", + shared_p->name, + shared_p->touched); + if (config.backups_found == 1) { + fprintf(outfile, " '%s_sbu'=%g", + shared_p->name, + shared_p->backups); + } + } + shared_p--; + } + fprintf(outfile, "\n"); } } fprintf(outfile, "\n"); diff --git a/tests/Makemodule.am b/tests/Makemodule.am index 12d6907..46bac47 100644 --- a/tests/Makemodule.am +++ b/tests/Makemodule.am @@ -13,6 +13,7 @@ TESTS = \ tests/big-small \ tests/bootp \ tests/complete \ + tests/complete-perfdata \ tests/empty \ tests/full-json \ tests/full-xml \ @@ -22,7 +23,8 @@ TESTS = \ tests/same-twice \ tests/simple \ tests/sorts \ - tests/v6 + tests/v6 \ + tests/v6-perfdata EXTRA_DIST += \ tests/confs \ diff --git a/tests/complete-perfdata b/tests/complete-perfdata new file mode 100755 index 0000000..2765fd4 --- /dev/null +++ b/tests/complete-perfdata @@ -0,0 +1,16 @@ +#!/bin/sh +# +# Minimal regression test suite. + +IAM=$(basename $0) +TESTDATA=${IAM%-*} + +if [ ! -d tests/outputs ]; then + mkdir tests/outputs +fi + +dhcpd-pools -c $top_srcdir/tests/confs/$TESTDATA \ + -l $top_srcdir/tests/leases/$TESTDATA -o tests/outputs/$IAM \ + --warning 80 --perfdata +diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM +exit $? diff --git a/tests/expected/alarm-count-option b/tests/expected/alarm-count-option index 5b00b83..a535df7 100644 --- a/tests/expected/alarm-count-option +++ b/tests/expected/alarm-count-option @@ -9,7 +9,6 @@ Shared nets - crit: 1 warn: 0 ok: 1; | snet_crit=1 snet_warn=0 snet_ok=1 == minsize == OK: Ranges - crit: 0 warn: 0 ok: 0 ignored: 5; | range_crit=0 range_warn=0 range_ok=0 range_ignored=5 Shared nets - crit: 0 warn: 0 ok: 0 ignored: 2; | snet_crit=0 snet_warn=0 snet_ok=0 snet_ignored=2 - 0 == snet alarms == WARNING: dhcpd-pools: Ranges - crit: 0 warn: 0 ok: 0; | range_crit=0 range_warn=0 range_ok=0 diff --git a/tests/expected/complete-perfdata b/tests/expected/complete-perfdata new file mode 100644 index 0000000..d9219e9 --- /dev/null +++ b/tests/expected/complete-perfdata @@ -0,0 +1,3 @@ +OK: Ranges - crit: 0 warn: 0 ok: 5; | range_crit=0 range_warn=0 range_ok=5 10.4.0.1_r=5;16;18;0;20 10.4.0.1_rt=0 10.3.0.1_r=9;16;18;0;20 10.3.0.1_rt=0 10.2.0.1_r=8;16;18;0;20 10.2.0.1_rt=0 10.1.0.1_r=10;16;18;0;20 10.1.0.1_rt=0 10.0.0.1_r=11;16;18;0;20 10.0.0.1_rt=0 +Shared nets - crit: 0 warn: 0 ok: 2; | snet_crit=0 snet_warn=0 snet_ok=2 'example2_s'=17;32;36;0;40 'example2_st'=0 'example1_s'=21;32;36;0;40 'example1_st'=0 + diff --git a/tests/expected/v6-perfdata b/tests/expected/v6-perfdata new file mode 100644 index 0000000..50ea786 --- /dev/null +++ b/tests/expected/v6-perfdata @@ -0,0 +1,3 @@ +OK: Ranges - crit: 0 warn: 0 ok: 2; | range_crit=0 range_warn=0 range_ok=2 dead:abba:4000::2_r=1;203.2;228.6;0;254 dead:abba:4000::2_rt=0 dead:abba:1000::2_r=2;3.77789e+21;4.25013e+21;0;4.72237e+21 dead:abba:1000::2_rt=1 +Shared nets - crit: 0 warn: 0 ok: 0; | snet_crit=0 snet_warn=0 snet_ok=0 + diff --git a/tests/v6-perfdata b/tests/v6-perfdata new file mode 100755 index 0000000..2765fd4 --- /dev/null +++ b/tests/v6-perfdata @@ -0,0 +1,16 @@ +#!/bin/sh +# +# Minimal regression test suite. + +IAM=$(basename $0) +TESTDATA=${IAM%-*} + +if [ ! -d tests/outputs ]; then + mkdir tests/outputs +fi + +dhcpd-pools -c $top_srcdir/tests/confs/$TESTDATA \ + -l $top_srcdir/tests/leases/$TESTDATA -o tests/outputs/$IAM \ + --warning 80 --perfdata +diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM +exit $? From e5f9a7751176b7bf080d165e8fd874515175e9b4 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 1 Apr 2016 22:34:11 +0100 Subject: [PATCH 010/158] contrib: add archlinux package build file Signed-off-by: Sami Kerola --- contrib/PKGBUILD | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 contrib/PKGBUILD diff --git a/contrib/PKGBUILD b/contrib/PKGBUILD new file mode 100644 index 0000000..6fbb5cf --- /dev/null +++ b/contrib/PKGBUILD @@ -0,0 +1,36 @@ +# Archlinux package file. Just download this file, and +# makepkg PKGBUILD +# pacman -U ./dhcpd-pools*.pkg.tar.xz + +pkgname=dhcpd-pools +pkgver=0 +pkgrel=1 +pkgdesc="ISC dhcpd lease status utility" +arch=('i686' 'x86_64') +url=http://dhcpd-pools.sourceforge.net/ +license=('BSD') +depends=('pacman') +makedepends=('uthash' 'git') +source=("$pkgname"::'git://git.code.sf.net/p/dhcpd-pools/code') +md5sums=('SKIP') + +pkgver() { + cd "$srcdir/$pkgname" + # Use the tag of the last commit + git describe --long | sed -E 's/([^-]*-g)/r\1/;s/-/./g' +} + +build() { + cd "$srcdir/$pkgname" + ./bootstrap + ./configure \ + --prefix=/usr \ + --bindir=/usr/bin + make +} + +package() { + cd "$srcdir/$pkgname" + make PREFIX=/ DESTDIR="$pkgdir" install + install -D -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} From 5a33b619d15ffdf87b10bdb35280450d2c907dfe Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 1 Apr 2016 22:51:51 +0100 Subject: [PATCH 011/158] contrib: remove unnecessary cgi script The html format is done using Bootstrap and DataTables. That deprecatated need for having cgi to wrap dhcpd-pools. Reference: 1299737d76dfabc17bb79d8eb2475b1a3784b9c7 Signed-off-by: Sami Kerola --- contrib/.gitignore | 1 - contrib/Makemodule.am | 4 ++-- contrib/dhcpd-pools.cgi.in | 34 ---------------------------------- 3 files changed, 2 insertions(+), 37 deletions(-) delete mode 100755 contrib/dhcpd-pools.cgi.in diff --git a/contrib/.gitignore b/contrib/.gitignore index 591c7bd..f28c483 100644 --- a/contrib/.gitignore +++ b/contrib/.gitignore @@ -1,2 +1 @@ -/dhcpd-pools.cgi /nagios.conf diff --git a/contrib/Makemodule.am b/contrib/Makemodule.am index a6bbc1e..289c7f9 100644 --- a/contrib/Makemodule.am +++ b/contrib/Makemodule.am @@ -1,5 +1,5 @@ contribdir = $(datadir)/dhcpd-pools/ -PATHFILES += contrib/dhcpd-pools.cgi contrib/nagios.conf -dist_contrib_SCRIPTS = contrib/dhcpd-pools.cgi contrib/snmptest.pl +PATHFILES += contrib/nagios.conf +dist_contrib_SCRIPTS = contrib/snmptest.pl dist_contrib_DATA = contrib/nagios.conf EXTRA_DIST += contrib/munin_plugins diff --git a/contrib/dhcpd-pools.cgi.in b/contrib/dhcpd-pools.cgi.in deleted file mode 100755 index 117a7cf..0000000 --- a/contrib/dhcpd-pools.cgi.in +++ /dev/null @@ -1,34 +0,0 @@ -#!@SHELL@ -# -# Simple CGI for dhcpd-pools. - -echo Content-type: text/html -echo - -# To make lease table more fancy use CSS definition something -# like this in your style.css file. -# -# TABLE.dhcpd-pools { -# border-style : groove; -# margin-left : 2px; -# foo : bar; -# } -# -# http://www.w3.org/TR/REC-CSS2/tables.html -# -# And uncomment this line. -# -#echo - -echo "" -echo "" -echo "

This was situation at " -date -echo "

" - -@bindir@/dhcpd-pools --format html - -echo "" -echo "" - -# EOF From 8a8c28a17e0e528d346e39d44c6ce9b9304390c1 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 1 Apr 2016 23:08:09 +0100 Subject: [PATCH 012/158] contrib: remove awk file duplicate Signed-off-by: Sami Kerola --- contrib/dhcpd-pools.awk | 168 --------------------------------------- webpages/dhcpd-pools.awk | 4 + 2 files changed, 4 insertions(+), 168 deletions(-) delete mode 100644 contrib/dhcpd-pools.awk diff --git a/contrib/dhcpd-pools.awk b/contrib/dhcpd-pools.awk deleted file mode 100644 index 38d5f18..0000000 --- a/contrib/dhcpd-pools.awk +++ /dev/null @@ -1,168 +0,0 @@ -# This is ISC dhcpd pool statistics script. -# -# The script is first version which was used to test that -# analysis algorithm is sane. This script is no longer -# maintained, and can be considered as historic reference. -# -# Licensed under the Open Software License version 1.1 -# http://opensource.org/licenses/osl.php -# -# Sami Kerola -# -# Latest version is available from http://www.iki.fi/kerolasa/dhcp/ -# This is version 1.4 - -BEGIN { - # Do you want to see statistics per pool? 1 = yes, 0 = no. - PrintRanges = 1 - - leasefile="/opt/dhcp/db/dhcpd.leases" - #conffile="/opt/dhcp/etc/dhcpd.conf" - - # External commands. - uniq = "sort -nu > afterlp" - sort = "sort -nu -k 2 > aftercp" - uniqstdout = "sort -u" - - # Do the trick. - main() -} - -# Convert ip to decimal number. -function ip2num(addr) { - split(addr, z, "."); - numb = z[4]+256*(z[3]+256*(z[2]+256*z[1])) - return numb -} - -# Print decimal ip in dotted format. -function printip(number) { - a = int(number/16777216) - number = (number-(a*16777216)) - b = int(number/65536) - number = int((number-(b*65536))) - c = int(number/256) - number = (number-(c*256)) - ipstring = sprintf("%d.%d.%d.%d", a, b, c, number) - printf "%16s", ipstring -} - -# Parse dhcpd lease file. -function parseleases() { - if (system("test -r " leasefile) != 0) { - print "File " leasefile " is not readable, exiting." - exit 1 - } - while (getline < leasefile) { - if ($0 ~ /^lease/) { - A = ip2num($2) - } - if ($0 ~ /^[ ]*binding state active/) { - printf "%d\n", A | uniq - } - } - close(leasefile) - close(uniq) -} - -# Parse dhcpd configuration file. -function parseconf() { - while (getline) { - if ($0 ~ /^[ ]*shared-network/) { - sharnet = $2 - } - if ($0 ~ /^[ ]*range/) { - printf "%s %d %d\n", sharnet, ip2num($2), ip2num($3) | sort - } - } - close(sort) -} - -# Join preparsed tmp files and output pool status. -function join() { - # Get shared networks and pool ranges. - i = 1 - while (getline < "aftercp") { - split($0, j, " ") - cnf[i,1] = j[1] - cnf[i,2] = j[2] - if (j[3] == 0) { - j[3] = j[2] - } - cnf[i,3] = j[3] - shnet[j[1],1] += j[3]-j[2]+1 - shnet[j[1],2] = 0 - allofall[1] += j[3]-j[2]+1 - i++ - } - close("aftercp") - i = 1 - allofall[2] = k = 0 - thisnet = "" - # Count IPs in pools. - if (PrintRanges) { - # Print header. - print "shared-network 1st in pool last in pool max cur usage%" - } - k = 0; - while (getline < "afterlp") { - ip = $0 - allofall[2]++ - # Ip out of the range, pool is changing. - while (ip > cnf[i,3]) { - if (PrintRanges) { - printf "%-20s ", cnf[i,1] - printip(cnf[i,2]) - printip(cnf[i,3]) - printf " %5d %5d %9.2f\n", cnf[i,3]-cnf[i,2]+1, k, k/(cnf[i,3]-cnf[i,2]+1) - k = 0; - } - if (cnf[i,1] != thisnet) { - # Shared network changed. - thisnet = cnf[i,1] - } - i++ - } - if (ip > cnf[i,2] && ip < cnf[i,3]) { - # Add ip. - shnet[cnf[i,1],2]++ - } - k++; - } - - # Print pool statistics. - - - if (PrintRanges) { - printf "%-20s ", cnf[i,1] - printip(cnf[i,2]) - printip(cnf[i,3]) - printf " %5d %5d %9.2f\n", cnf[i,3]-cnf[i,2]+1, k, k/(cnf[i,3]-cnf[i,2]+1) - } - close("afterlp") - # Print header and shared network statistics. - print "#shared-network max cur usage%" - for (items in shnet) { - x = substr(items, 1, length(items)-2) - printf "%-20s %8d %8d %8.4f\n", x, shnet[x,1], shnet[x,2], shnet[x,2]/shnet[x,1] | uniqstdout - } - close(uniqstdout) - print "#--------------" - printf "%-20s %8d %8d %8.4f\n", "all_pools", allofall[1], allofall[2], allofall[2]/allofall[1] -} - -# Remove temporary files. -function cleanup() { - system("rm -f aftercp afterlp") -} - -# Main. -function main() { - system("touch afterlp aftercp") - parseleases() - parseconf() - join() - cleanup() -} - -# EOF diff --git a/webpages/dhcpd-pools.awk b/webpages/dhcpd-pools.awk index ed2e35b..38d5f18 100644 --- a/webpages/dhcpd-pools.awk +++ b/webpages/dhcpd-pools.awk @@ -1,5 +1,9 @@ # This is ISC dhcpd pool statistics script. # +# The script is first version which was used to test that +# analysis algorithm is sane. This script is no longer +# maintained, and can be considered as historic reference. +# # Licensed under the Open Software License version 1.1 # http://opensource.org/licenses/osl.php # From 87c06a1b134c2ac75bd0411ef09d400950fbc941 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 23 Apr 2016 16:32:08 +0100 Subject: [PATCH 013/158] getdata: get rid of remaining stdbool usage Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 18 +++++++------- src/getdata.c | 61 +++++++++++++++++++++++------------------------ 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index e3b775a..83b1223 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -144,12 +144,12 @@ int main(int argc, char **argv) * command line option */ config.output_file[0] = '\0'; /* Alarming defaults. */ - config.snet_alarms = false; + config.snet_alarms = 0; config.warning = ALARM_WARN; config.critical = ALARM_CRIT; config.warn_count = 0x100000000; /* == 2^32 that is the entire IPv4 space */ config.crit_count = 0x100000000; /* basically turns off the count criteria */ - config.perfdata = false; + config.perfdata = 0; /* File location defaults */ strncpy(config.dhcpdconf_file, DHCPDCONF_FILE, MAXLEN - 1); strncpy(config.dhcpdlease_file, DHCPDLEASE_FILE, MAXLEN - 1); @@ -160,8 +160,8 @@ int main(int argc, char **argv) /* Make sure some output format is selected by default */ print_mac_addreses_tmp = OUTPUT_FORMAT; /* Default sort order is by IPs small to big */ - config.reverse_order = false; - config.backups_found = false; + config.reverse_order = 0; + config.backups_found = 0; prepare_memory(); /* Parse command line options */ while (1) { @@ -204,7 +204,7 @@ int main(int argc, char **argv) break; case 'r': /* What ever sort in reverse order */ - config.reverse_order = true; + config.reverse_order = 1; break; case 'o': /* Output file */ @@ -216,7 +216,7 @@ int main(int argc, char **argv) config.number_limit = return_limit(optarg[1]); break; case OPT_SNET_ALARMS: - config.snet_alarms = true; + config.snet_alarms = 1; break; case OPT_WARN: print_mac_addreses_tmp = "a"; @@ -239,7 +239,7 @@ int main(int argc, char **argv) break; case 'p': /* Print additional performance data in alarming mode */ - config.perfdata = true; + config.perfdata = 1; break; case 'v': /* Print version */ @@ -295,14 +295,14 @@ int main(int argc, char **argv) } /* Do the job */ set_ipv_functions(IPvUNKNOWN); - parse_config(true, config.dhcpdconf_file, shared_networks); + parse_config(1, config.dhcpdconf_file, shared_networks); parse_leases(); prepare_data(); do_counting(); tmp_ranges = xmalloc(sizeof(struct range_t) * num_ranges); if (config.sorts != NULL) mergesort_ranges(ranges, num_ranges, tmp_ranges); - if (config.reverse_order == true) + if (config.reverse_order == 1) flip_ranges(ranges, tmp_ranges); free(tmp_ranges); ret_val = output_analysis(); diff --git a/src/getdata.c b/src/getdata.c index 3e3be1f..d72b9cc 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -44,7 +44,6 @@ #include #include #include -#include #include #include #include @@ -65,7 +64,7 @@ int parse_leases(void) char *line, *ipstring, macstring[20], *stop; union ipaddr_t addr; struct stat lease_file_stats; - bool ethernets = false; + int ethernets = 0; /* boolean */ struct leases_t *lease; dhcpd_leases = fopen(config.dhcpdlease_file, "r"); @@ -92,7 +91,7 @@ int parse_leases(void) ipstring = xmalloc(sizeof(char) * MAXLEN); ipstring[0] = '\0'; if (config.print_mac_addreses == 1) - ethernets = true; + ethernets = 1; while (!feof(dhcpd_leases)) { if (!fgets(line, MAXLEN, dhcpd_leases) && ferror(dhcpd_leases)) error(EXIT_FAILURE, errno, "parse_leases: %s", config.dhcpdlease_file); @@ -128,10 +127,10 @@ int parse_leases(void) if ((lease = find_lease(&addr)) != NULL) delete_lease(lease); add_lease(&addr, BACKUP); - config.backups_found = true; + config.backups_found = 1; break; case PREFIX_HARDWARE_ETHERNET: - if (ethernets == false) + if (ethernets == 0) break; memcpy(macstring, line + 20, 17); macstring[17] = '\0'; @@ -184,7 +183,7 @@ void parse_config(int is_include, const char *restrict config_file, struct shared_network_t *restrict shared_p) { FILE *dhcpd_config; - bool newclause = true, comment = false, one_ip_range = false; + int newclause = 1, comment = 0, one_ip_range = 0; /* booleans */ int quote = 0, braces = 0, argument = ITS_NOTHING_INTERESTING; size_t i = 0; char *word; @@ -220,10 +219,10 @@ void parse_config(int is_include, const char *restrict config_file, /* Handle comments if they are not quoted */ case '#': if (quote == 0) - comment = true; + comment = 1; continue; case '"': - if (comment == false) { + if (comment == 0) { quote++; /* Either one or zero */ quote = quote % 2; @@ -233,18 +232,18 @@ void parse_config(int is_include, const char *restrict config_file, /* New line resets comment section, but * not if quoted */ if (quote == 0) - comment = false; + comment = 0; break; case ';': /* Quoted colon does not mean new clause */ if (0 < quote) break; - if (comment == false + if (comment == 0 && argument != ITS_A_RANGE_FIRST_IP && argument != ITS_A_RANGE_SECOND_IP && argument != ITS_AN_INCLUCE) { - newclause = true; + newclause = 1; i = 0; - } else if (argument == ITS_A_RANGE_FIRST_IP && one_ip_range == true) { + } else if (argument == ITS_A_RANGE_FIRST_IP && one_ip_range == 1) { argument = ITS_A_RANGE_SECOND_IP; c = ' '; } else if (argument == ITS_A_RANGE_SECOND_IP && 0 < i) { @@ -274,14 +273,14 @@ void parse_config(int is_include, const char *restrict config_file, * * shared-network DSL{ ... */ if (i == 0) { - newclause = true; + newclause = 1; continue; } else break; case '}': if (0 < quote) break; - if (comment == false) { + if (comment == 0) { braces--; /* End of shared-network */ if (braces_shared == braces) { @@ -290,23 +289,23 @@ void parse_config(int is_include, const char *restrict config_file, braces_shared = 1000; shared_p = shared_networks; } - /* Not literally true, but works for this + /* Not literally 1, but works for this * program */ - newclause = true; + newclause = 1; } continue; default: break; } /* Either inside comment or Nth word of clause. */ - if (comment == true || (newclause == false && argument == ITS_NOTHING_INTERESTING)) + if (comment == 1 || (newclause == 0 && argument == ITS_NOTHING_INTERESTING)) continue; /* Strip white spaces before new clause word. */ - if ((newclause == true || argument != ITS_NOTHING_INTERESTING) - && isspace(c) && i == 0 && one_ip_range == false) + if ((newclause == 1 || argument != ITS_NOTHING_INTERESTING) + && isspace(c) && i == 0 && one_ip_range == 0) continue; /* Save to word which clause this is. */ - if ((newclause == true || argument != ITS_NOTHING_INTERESTING) + if ((newclause == 1 || argument != ITS_NOTHING_INTERESTING) && (!isspace(c) || 0 < quote)) { word[i] = c; i++; @@ -314,26 +313,26 @@ void parse_config(int is_include, const char *restrict config_file, * of words are this long which the program is * searching. */ if (MAXLEN == i) { - newclause = false; + newclause = 0; i = 0; continue; } } /* See if clause is something that parser is looking for. */ - else if (newclause == true) { + else if (newclause == 1) { /* Insert string end & set state */ word[i] = '\0'; if (word[i - 1] != '{') - newclause = false; + newclause = 0; i = 0; argument = is_interesting_config_clause(word); if (argument == ITS_A_RANGE_FIRST_IP) - one_ip_range = true; + one_ip_range = 1; } /* words after range, shared-network or include */ else if (argument != ITS_NOTHING_INTERESTING) { word[i] = '\0'; - newclause = false; + newclause = 0; i = 0; switch (argument) { @@ -342,8 +341,8 @@ void parse_config(int is_include, const char *restrict config_file, range_p = ranges + num_ranges; argument = ITS_NOTHING_INTERESTING; parse_ipaddr(word, &addr); - if (one_ip_range == true) { - one_ip_range = false; + if (one_ip_range == 1) { + one_ip_range = 0; copy_ipaddr(&range_p->first_ip, &addr); } copy_ipaddr(&range_p->last_ip, &addr); @@ -359,7 +358,7 @@ void parse_config(int is_include, const char *restrict config_file, ranges = xrealloc(ranges, sizeof(struct range_t) * RANGES); range_p = ranges + num_ranges; } - newclause = true; + newclause = 1; break; case ITS_A_RANGE_FIRST_IP: /* printf ("range 1nd ip: %s\n", word); */ @@ -368,7 +367,7 @@ void parse_config(int is_include, const char *restrict config_file, /* word was not ip, try again */ break; copy_ipaddr(&range_p->first_ip, &addr); - one_ip_range = false; + one_ip_range = 0; argument = ITS_A_RANGE_SECOND_IP; break; case ITS_A_SHAREDNET: @@ -390,8 +389,8 @@ void parse_config(int is_include, const char *restrict config_file, case ITS_AN_INCLUCE: /* printf ("include file: %s\n", word); */ argument = ITS_NOTHING_INTERESTING; - parse_config(false, word, shared_p); - newclause = true; + parse_config(0, word, shared_p); + newclause = 1; break; case ITS_NOTHING_INTERESTING: /* printf ("nothing interesting: %s\n", word); */ From c4ebafb106f426b5214e6de5aa2a29e757150057 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 23 Apr 2016 16:35:38 +0100 Subject: [PATCH 014/158] argument parsing: fix compiler warning src/dhcpd-pools.c:193:18: warning: comparison of integers of different signs: 'int' and 'unsigned long' [-Wsign-compare] Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 83b1223..29ad041 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -98,7 +98,6 @@ static int return_limit(const char c) * alarming. */ int main(int argc, char **argv) { - int i; int option_index = 0; char const *tmp; char *print_mac_addreses_tmp; @@ -187,10 +186,11 @@ int main(int argc, char **argv) { /* Output sorting option */ struct output_sort *p = config.sorts; + size_t len; while (p && p->next) p = p->next; - for (i = 0; i < strlen(optarg); i++) { + for (len = 0; len < strlen(optarg); len++) { if (config.sorts == NULL) { config.sorts = xcalloc(1, sizeof(struct output_sort)); p = config.sorts; @@ -198,7 +198,7 @@ int main(int argc, char **argv) p->next = xcalloc(1, sizeof(struct output_sort)); p = p->next; } - p->func = field_selector(optarg[i]); + p->func = field_selector(optarg[len]); } } break; From ccd5370d9c0ec84767eafb61668880ad22826a48 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 23 Apr 2016 22:14:20 +0100 Subject: [PATCH 015/158] add dhcpd-pools Description Of A Project file Reference: https://github.com/edumbill/doap/wiki Signed-off-by: Sami Kerola --- project.doap | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 project.doap diff --git a/project.doap b/project.doap new file mode 100644 index 0000000..98fff0b --- /dev/null +++ b/project.doap @@ -0,0 +1,38 @@ + + + + dhcpd-pools + + This is dhcpd-pools ISC dhcp shared network and pool + range usage analysis tool. + Purpose of command is to count usage ratio of each + IP range and shared network pool which ISC dhcpd is in control + of. Program is written C. Design goal is to get analysis done + quickly where there is lots of data. On cheap laptop the speed + of analysis is more than 100k leases per second. Number of + ranges, or shared networks, does not make any significant + difference in getting analysis done. + + + C + + + + + + + + BSD + + + + + Sami Kerola + + + + + From f6e256243de76e572d70d90762354fcfd2fd0b62 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 23 Apr 2016 22:55:21 +0100 Subject: [PATCH 016/158] fix doap file git repository and license section Signed-off-by: Sami Kerola --- project.doap | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/project.doap b/project.doap index 98fff0b..e3cf0f6 100644 --- a/project.doap +++ b/project.doap @@ -20,13 +20,13 @@ xmlns:foaf="http://xmlns.com/foaf/0.1/"> C - + - - BSD - + + BSD 2-Clause license + From a3ef3d617fb6066efe69c6e75247b51be6f65427 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 24 Apr 2016 12:29:50 +0100 Subject: [PATCH 017/158] output: check alarming mode can output successfully Fixes also a resource leak. Signed-off-by: Sami Kerola --- src/output.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/output.c b/src/output.c index 35af873..450b7af 100644 --- a/src/output.c +++ b/src/output.c @@ -1002,8 +1002,12 @@ int output_alarming(void) } else { if (config.number_limit & A_BIT) fprintf(outfile, "OK:"); - else + else { + if (close_stream(outfile)) { + error(EXIT_FAILURE, errno, "output_alarming: fclose"); + } return ret_val; + } } if (config.header_limit & R_BIT) { fprintf(outfile, " Ranges - crit: %d warn: %d ok: %d", rc, rw, ro); From 840d2143e664069227a5fb7fb964b37784fa4d1f Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 29 May 2016 21:20:39 +0100 Subject: [PATCH 018/158] build-sys: update bootstrap from gnulib Signed-off-by: Sami Kerola --- bootstrap | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/bootstrap b/bootstrap index 60ff8cd..92dac46 100755 --- a/bootstrap +++ b/bootstrap @@ -1,10 +1,10 @@ #! /bin/sh # Print a version string. -scriptversion=2013-12-05.23; # UTC +scriptversion=2016-01-24.06; # UTC # Bootstrap this package from checked-out sources. -# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# Copyright (C) 2003-2016 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -42,6 +42,9 @@ export LC_ALL local_gl_dir=gl +# Honor $PERL, but work even if there is none. +PERL="${PERL-perl}" + me=$0 usage() { @@ -457,6 +460,7 @@ check_versions() { test "$appvar" = TAR && appvar=AMTAR case $appvar in GZIP) ;; # Do not use $GZIP: it contains gzip options. + PERL::*) ;; # Keep perl modules as-is *) eval "app=\${$appvar-$app}" ;; esac @@ -474,6 +478,17 @@ check_versions() { ret=1 continue } ;; + # Another check is for perl modules. These can be written as + # e.g. perl::XML::XPath in case of XML::XPath module, etc. + perl::*) + # Extract module name + app="${app#perl::}" + if ! $PERL -m"$app" -e 'exit 0' >/dev/null 2>&1; then + warn_ "Error: perl module '$app' not found" + ret=1 + fi + continue + ;; esac if [ "$req_ver" = "-" ]; then # Merely require app to exist; not all prereq apps are well-behaved @@ -901,7 +916,8 @@ if test $use_libtool = 1; then esac fi echo "$0: $gnulib_tool $gnulib_tool_options --import ..." -$gnulib_tool $gnulib_tool_options --import $gnulib_modules && +$gnulib_tool $gnulib_tool_options --import $gnulib_modules \ + || die "gnulib-tool failed" for file in $gnulib_files; do symlink_to_dir "$GNULIB_SRCDIR" $file \ @@ -1006,6 +1022,6 @@ echo "$0: done. Now you can run './configure'." # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: From d26c858c1301dca1de3ea5b8d147c67b4704f4b1 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 29 May 2016 21:22:13 +0100 Subject: [PATCH 019/158] build-sys: update gnulib .gitignore file Signed-off-by: Sami Kerola --- lib/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/.gitignore b/lib/.gitignore index b0e5275..234d761 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -63,6 +63,8 @@ /getopt_int.h /gettext.h /gettimeofday.c +/hard-locale.c +/hard-locale.h /inet_pton.c /intprops.h /isnan.c From 1b35a16d95a94707c8dcb3bd8668b47ce3ef2616 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 3 Jul 2016 14:00:00 +0100 Subject: [PATCH 020/158] analyze: use while() when for() is less fit to purpose Signed-off-by: Sami Kerola --- src/analyze.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/analyze.c b/src/analyze.c index 072c07e..1d5c456 100644 --- a/src/analyze.c +++ b/src/analyze.c @@ -65,8 +65,8 @@ void do_counting(void) /* Walk through ranges */ range_p = ranges; for (i = 0; i < num_ranges; i++) { - for (; l != NULL && ipcomp(&range_p->first_ip, &l->ip) < 0; l = l->hh.prev) - /* rewind */ ; + while (l != NULL && ipcomp(&range_p->first_ip, &l->ip) < 0) + l = l->hh.prev; /* rewind */ if (l == NULL) l = leases; for (; l != NULL && ipcomp(&l->ip, &range_p->last_ip) <= 0; l = l->hh.next) { From 9bb30b29cafc631862fd3ee60c3bdf0ced9b15e4 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 15 Aug 2016 21:18:29 +0100 Subject: [PATCH 021/158] build-sys: default to ./configure --enable-silent-rules This makes compiler to options not to be shown when running make, and that allows noticing warnings more easily. Signed-off-by: Sami Kerola --- configure.ac | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configure.ac b/configure.ac index ec993c7..cbef03a 100644 --- a/configure.ac +++ b/configure.ac @@ -24,6 +24,9 @@ AM_INIT_AUTOMAKE([ AC_CONFIG_SRCDIR([src/dhcpd-pools.h]) AC_CONFIG_HEADERS([config.h]) +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], + [AC_SUBST([AM_DEFAULT_VERBOSITY], [1])]) + # Checks for programs AC_USE_SYSTEM_EXTENSIONS AC_C_RESTRICT From 77409277214a91f7ca5d2ecb501f1b2c1432fc99 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 16 Aug 2016 13:25:23 +0100 Subject: [PATCH 022/158] build-sys: always use restrict found by autoconf Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 2 +- src/dhcpd-pools.h | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 29ad041..f07386b 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -70,7 +70,7 @@ int (*parse_ipaddr) (const char *restrict src, union ipaddr_t *restrict dst); void (*copy_ipaddr) (union ipaddr_t *restrict dst, const union ipaddr_t *restrict src); const char *(*ntop_ipaddr) (const union ipaddr_t *ip); double (*get_range_size) (const struct range_t *r); -int (*xstrstr) (const char *__restrict str); +int (*xstrstr) (const char *restrict str); int (*ipcomp) (const union ipaddr_t *restrict a, const union ipaddr_t *restrict b); int (*leasecomp) (const struct leases_t *restrict a, const struct leases_t *restrict b); int (*output_analysis) (void); diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 4415d62..1cdba5d 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -236,11 +236,11 @@ extern unsigned int RANGES; extern void prepare_memory(void); extern void set_ipv_functions(int version); extern int parse_leases(void); -extern void parse_config(int, const char *__restrict, struct shared_network_t *__restrict) +extern void parse_config(int, const char *restrict, struct shared_network_t *restrict) __attribute__ ((nonnull(2, 3))); extern void prepare_data(void); extern void do_counting(void); -extern void flip_ranges(struct range_t *__restrict ranges, struct range_t *__restrict tmp_ranges) +extern void flip_ranges(struct range_t *restrict ranges, struct range_t *restrict tmp_ranges) __attribute__ ((nonnull(1, 2))); /* support functions */ extern int (*parse_ipaddr) (const char *restrict src, union ipaddr_t *restrict dst); @@ -265,14 +265,14 @@ extern double get_range_size_init(const struct range_t *r) _DP_ATTRIBUTE_CONST; extern double get_range_size_v4(const struct range_t *r) _DP_ATTRIBUTE_PURE; extern double get_range_size_v6(const struct range_t *r) _DP_ATTRIBUTE_PURE; -extern int (*xstrstr) (const char *__restrict str); -extern int xstrstr_init(const char *__restrict str) _DP_ATTRIBUTE_CONST; -extern int xstrstr_v4(const char *__restrict str) +extern int (*xstrstr) (const char *restrict str); +extern int xstrstr_init(const char *restrict str) _DP_ATTRIBUTE_CONST; +extern int xstrstr_v4(const char *restrict str) _DP_ATTRIBUTE_HOT _DP_ATTRIBUTE_PURE; -extern int xstrstr_v6(const char *__restrict str) +extern int xstrstr_v6(const char *restrict str) _DP_ATTRIBUTE_HOT _DP_ATTRIBUTE_PURE; -extern double strtod_or_err(const char *__restrict str, const char *__restrict errmesg); +extern double strtod_or_err(const char *restrict str, const char *restrict errmesg); extern void print_version(void) __attribute__ ((noreturn)); extern void usage(int status) __attribute__ ((noreturn)); /* qsort required functions... */ @@ -300,15 +300,15 @@ extern int comp_percent(struct range_t *r1, struct range_t *r2); extern int comp_tc(struct range_t *r1, struct range_t *r2) _DP_ATTRIBUTE_PURE; extern int comp_tcperc(struct range_t *r1, struct range_t *r2); extern int comp_touched(struct range_t *r1, struct range_t *r2) _DP_ATTRIBUTE_PURE; -extern int rangecomp(const void *__restrict r1, const void *__restrict r2) +extern int rangecomp(const void *restrict r1, const void *restrict r2) __attribute__ ((nonnull(1, 2))); /* sort function pointer and functions */ extern comparer_t field_selector(char c); extern double ret_percent(struct range_t r); extern double ret_tc(struct range_t r) _DP_ATTRIBUTE_CONST; extern double ret_tcperc(struct range_t r); -extern void mergesort_ranges(struct range_t *__restrict orig, int size, - struct range_t *__restrict temp) +extern void mergesort_ranges(struct range_t *restrict orig, int size, + struct range_t *restrict temp) __attribute__ ((nonnull(1, 3))); /* output function pointer and functions */ extern int (*output_analysis) (void); From a6b77ab78594de1311ae59e6300b135bd2c696b4 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 2 Oct 2016 21:34:30 +0100 Subject: [PATCH 023/158] docs: fix couple typos and improve a sentence in README Signed-off-by: Sami Kerola --- README | 2 +- man/dhcpd-pools.1.in | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README b/README index 1b347e2..6a9ae41 100644 --- a/README +++ b/README @@ -22,7 +22,7 @@ Quick start. ./configure --help - Read the manual to see what options are available, and what they to. + Remember to read the friendly manual page. man ./man/dhcpd-pools.1 diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 88794d8..8216ee4 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -168,7 +168,7 @@ and count .I number are required to be exceeded in order to alarm criteria being fulfilled. .IP -This option is intented to be used in setup where very large and small +This option is intended to be used in setup where very large and small shared-networks and ranges co-exists. In such environments percent based alarming can lead to either flood of alarms about small ranges, or way too great overhead of free addresses in large shared-networks. Suggested usage @@ -189,7 +189,7 @@ configurations that has lots of small ranges in big shared-networks. \fB\-\-minsize\fR=\fIsize\fR Ignore ranges and shared networks that are smaller or equal to the defined size. This option is meaningful only in context of alarming, and -will intented to supress for example single host ranges. By default this +will intended to suppress for example single host ranges. By default this option is not in use. .TP \fB\-p\fR, \fB\-\-perfdata\fR @@ -226,7 +226,7 @@ $ dhcpd-pools \-c dhcpd.conf \-l dhcpd.leases \-L 22 \-\-critical 70 \-\-warning .br [no-output] .br -Supress printing OK, and make alarm only to go off if shared networks +Suppress printing OK, and make alarm only to go off if shared networks exceed critial or warning levels. .SH FILES .TP From aaad35a8c9e59247f72d67d3d930769a2a093627 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 2 Jan 2017 21:21:27 +0000 Subject: [PATCH 024/158] output: remove unnecessary increment Signed-off-by: Sami Kerola --- src/output.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/output.c b/src/output.c index 450b7af..c3ad488 100644 --- a/src/output.c +++ b/src/output.c @@ -433,7 +433,6 @@ int output_json(void) fprintf(outfile, " \"free\":%g\n", shared_networks->available - shared_networks->used); fprintf(outfile, " }"); /* end of summary */ - sep++; } fprintf(outfile, "\n}\n"); From 11c0b23d77c52286873797cec836812a74f7081f Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 6 Jan 2017 22:19:29 +0000 Subject: [PATCH 025/158] portability: add gnulib modules earlier missing Found with help if autoscan. In same go update lib/.gitignore file. Signed-off-by: Sami Kerola --- bootstrap.conf | 3 +++ lib/.gitignore | 35 +++++++++++++++++++++-------------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/bootstrap.conf b/bootstrap.conf index a3ae473..9cddfe4 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -31,6 +31,7 @@ gnulib_modules=" isnan langinfo netinet_in + nl_langinfo progname quote realloc-gnu @@ -42,6 +43,8 @@ gnulib_modules=" strdup-posix strftime strstr + strtod + time_r xalloc " diff --git a/lib/.gitignore b/lib/.gitignore index 234d761..01559e4 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -6,13 +6,12 @@ /Makefile /Makefile.am /Makefile.in -/_Exit.c /alloca.h /alloca.in.h /arg-nonnull.h -/arpa/ +/arpa/inet.h /arpa_inet.in.h -/atexit.c +/basename-lgpl.c /c++defs.h /c-ctype.c /c-ctype.h @@ -20,7 +19,6 @@ /c-strcasecmp.c /c-strcaseeq.h /c-strncasecmp.c -/calloc.c /charset.alias /close-stream.c /close-stream.h @@ -29,6 +27,8 @@ /closeout.h /config.charset /configmake.h +/dirname-lgpl.c +/dirname.h /dosname.h /errno.in.h /error.c @@ -42,6 +42,7 @@ /fd-hook.h /fdopen.c /fflush.c +/flexmember.h /float+.h /float.c /float.in.h @@ -51,7 +52,6 @@ /fpurge.c /freading.c /freading.h -/free.c /fseek.c /fseeko.c /fstat.c @@ -61,6 +61,8 @@ /getopt.in.h /getopt1.c /getopt_int.h +/getprogname.c +/getprogname.h /gettext.h /gettimeofday.c /hard-locale.c @@ -75,8 +77,13 @@ /langinfo.h /langinfo.in.h /libdhcpd_pools.la +/limits.h +/limits.in.h /localcharset.c /localcharset.h +/locale.h +/locale.in.h +/localeconv.c /lseek.c /malloc.c /malloca.c @@ -89,7 +96,7 @@ /mbsinit.c /memchr.c /memchr.valgrind -/memcpy.c +/minmax.h /mktime-internal.h /mktime.c /msvc-inval.c @@ -97,6 +104,7 @@ /msvc-nothrow.c /msvc-nothrow.h /netinet_in.in.h +/nl_langinfo.c /pathmax.h /progname.c /progname.h @@ -110,14 +118,12 @@ /ref-del.sin /setenv.c /stat.c -/stdalign.h /stdalign.in.h -/stdarg.in.h /stdbool.in.h /stddef.in.h +/stdint.h /stdint.in.h /stdio-impl.h -/stdio.c /stdio.h /stdio.in.h /stdlib.h @@ -133,9 +139,14 @@ /strftime.h /string.h /string.in.h +/stripslash.c /strstr.c /strtod.c -/sys/ +/sys/socket.h +/sys/stat.h +/sys/time.h +/sys/types.h +/sys/uio.h /sys_socket.c /sys_socket.in.h /sys_stat.in.h @@ -164,7 +175,3 @@ /xalloc-oversized.h /xalloc.h /xmalloc.c -/xprintf.c -/xprintf.h -/xstrtod.c -/xstrtod.h From ea7fd9187633782329021b1b4d31bc817ff6127f Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 6 Jan 2017 23:12:34 +0000 Subject: [PATCH 026/158] remove const and pure function attributes Most of these functions take pointers as input argument, so they cannot be considered neiter const or pure. In same go fix few issues noticed when compiling with smatch. Signed-off-by: Sami Kerola --- src/dhcpd-pools.h | 61 ++++++++++++++++++----------------------------- src/getdata.c | 2 +- 2 files changed, 24 insertions(+), 39 deletions(-) diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 1cdba5d..3765b26 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -63,21 +63,6 @@ # define unlikely(x) (x) # endif -/* The __attribute__ feature is available in gcc versions 2.5 and later. - * The attribute __pure__ was added in gcc 2.96. */ -# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _DP_ATTRIBUTE_PURE __attribute__ ((__pure__)) -# else -# define _DP_ATTRIBUTE_PURE /* empty */ -# endif - -/* The __const__ attribute was added in gcc 2.95. */ -# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) -# define _DP_ATTRIBUTE_CONST __attribute__ ((__const__)) -# else -# define _DP_ATTRIBUTE_CONST /* empty */ -# endif - /* The attribute __hot__ was added in gcc 4.3. */ # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) # define _DP_ATTRIBUTE_HOT __attribute__ ((__hot__)) @@ -245,45 +230,45 @@ extern void flip_ranges(struct range_t *restrict ranges, struct range_t *restric /* support functions */ extern int (*parse_ipaddr) (const char *restrict src, union ipaddr_t *restrict dst); extern int parse_ipaddr_init(const char *restrict src, - union ipaddr_t *restrict dst) _DP_ATTRIBUTE_CONST; + union ipaddr_t *restrict dst); extern int parse_ipaddr_v4(const char *restrict src, union ipaddr_t *restrict dst); extern int parse_ipaddr_v6(const char *restrict src, union ipaddr_t *restrict dst); extern void (*copy_ipaddr) (union ipaddr_t *restrict dst, const union ipaddr_t *restrict src); extern void copy_ipaddr_init(union ipaddr_t *restrict dst, - const union ipaddr_t *restrict src) _DP_ATTRIBUTE_CONST; + const union ipaddr_t *restrict src); extern void copy_ipaddr_v4(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src); extern void copy_ipaddr_v6(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src); extern const char *(*ntop_ipaddr) (const union ipaddr_t *ip); -extern const char *ntop_ipaddr_init(const union ipaddr_t *ip) _DP_ATTRIBUTE_CONST; +extern const char *ntop_ipaddr_init(const union ipaddr_t *ip); extern const char *ntop_ipaddr_v4(const union ipaddr_t *ip); extern const char *ntop_ipaddr_v6(const union ipaddr_t *ip); extern double (*get_range_size) (const struct range_t *r); -extern double get_range_size_init(const struct range_t *r) _DP_ATTRIBUTE_CONST; -extern double get_range_size_v4(const struct range_t *r) _DP_ATTRIBUTE_PURE; -extern double get_range_size_v6(const struct range_t *r) _DP_ATTRIBUTE_PURE; +extern double get_range_size_init(const struct range_t *r); +extern double get_range_size_v4(const struct range_t *r); +extern double get_range_size_v6(const struct range_t *r); extern int (*xstrstr) (const char *restrict str); -extern int xstrstr_init(const char *restrict str) _DP_ATTRIBUTE_CONST; +extern int xstrstr_init(const char *restrict str); extern int xstrstr_v4(const char *restrict str) -_DP_ATTRIBUTE_HOT _DP_ATTRIBUTE_PURE; +_DP_ATTRIBUTE_HOT; extern int xstrstr_v6(const char *restrict str) -_DP_ATTRIBUTE_HOT _DP_ATTRIBUTE_PURE; +_DP_ATTRIBUTE_HOT; extern double strtod_or_err(const char *restrict str, const char *restrict errmesg); -extern void print_version(void) __attribute__ ((noreturn)); -extern void usage(int status) __attribute__ ((noreturn)); +extern void __attribute__ ((noreturn)) print_version(void); +extern void __attribute__ ((noreturn)) usage(int status); /* qsort required functions... */ /* ...for ranges and... */ extern int (*ipcomp) (const union ipaddr_t *restrict a, const union ipaddr_t *restrict b); extern int ipcomp_init(const union ipaddr_t *restrict a, - const union ipaddr_t *restrict b) _DP_ATTRIBUTE_CONST; + const union ipaddr_t *restrict b); extern int ipcomp_v4(const union ipaddr_t *restrict a, - const union ipaddr_t *restrict b) _DP_ATTRIBUTE_PURE; + const union ipaddr_t *restrict b); extern int ipcomp_v6(const union ipaddr_t *restrict a, - const union ipaddr_t *restrict b) _DP_ATTRIBUTE_PURE; + const union ipaddr_t *restrict b); extern int (*leasecomp) (const struct leases_t *restrict a, const struct leases_t *restrict b); extern int leasecomp_init(const struct leases_t *restrict a @@ -292,20 +277,20 @@ extern int leasecomp_init(const struct leases_t *restrict a extern int leasecomp_v4(const struct leases_t *restrict a, const struct leases_t *restrict b); extern int leasecomp_v6(const struct leases_t *restrict a, const struct leases_t *restrict b); -extern int comp_cur(struct range_t *r1, struct range_t *r2) _DP_ATTRIBUTE_PURE; -extern int comp_double(double f1, double f2) _DP_ATTRIBUTE_CONST; +extern int comp_cur(struct range_t *r1, struct range_t *r2); +extern int comp_double(double f1, double f2); extern int comp_ip(struct range_t *r1, struct range_t *r2); extern int comp_max(struct range_t *r1, struct range_t *r2); extern int comp_percent(struct range_t *r1, struct range_t *r2); -extern int comp_tc(struct range_t *r1, struct range_t *r2) _DP_ATTRIBUTE_PURE; +extern int comp_tc(struct range_t *r1, struct range_t *r2); extern int comp_tcperc(struct range_t *r1, struct range_t *r2); -extern int comp_touched(struct range_t *r1, struct range_t *r2) _DP_ATTRIBUTE_PURE; +extern int comp_touched(struct range_t *r1, struct range_t *r2); extern int rangecomp(const void *restrict r1, const void *restrict r2) __attribute__ ((nonnull(1, 2))); /* sort function pointer and functions */ extern comparer_t field_selector(char c); extern double ret_percent(struct range_t r); -extern double ret_tc(struct range_t r) _DP_ATTRIBUTE_CONST; +extern double ret_tc(struct range_t r); extern double ret_tcperc(struct range_t r); extern void mergesort_ranges(struct range_t *restrict orig, int size, struct range_t *restrict temp) @@ -322,14 +307,14 @@ extern int output_alarming(void); extern void clean_up(void); /* Hash functions */ extern void (*add_lease) (union ipaddr_t *ip, enum ltype type); -extern void add_lease_init(union ipaddr_t *ip, enum ltype type) _DP_ATTRIBUTE_CONST; +extern void add_lease_init(union ipaddr_t *ip, enum ltype type); extern void add_lease_v4(union ipaddr_t *ip, enum ltype type); extern void add_lease_v6(union ipaddr_t *ip, enum ltype type); extern struct leases_t *(*find_lease) (union ipaddr_t *ip); -extern struct leases_t *find_lease_init(union ipaddr_t *ip) _DP_ATTRIBUTE_CONST; -extern struct leases_t *find_lease_v4(union ipaddr_t *ip) _DP_ATTRIBUTE_PURE; -extern struct leases_t *find_lease_v6(union ipaddr_t *ip) _DP_ATTRIBUTE_PURE; +extern struct leases_t *find_lease_init(union ipaddr_t *ip); +extern struct leases_t *find_lease_v4(union ipaddr_t *ip); +extern struct leases_t *find_lease_v6(union ipaddr_t *ip); extern void delete_lease(struct leases_t *lease); extern void delete_all_leases(void); diff --git a/src/getdata.c b/src/getdata.c index d72b9cc..05adee5 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -164,7 +164,7 @@ static int is_interesting_config_clause(char const *restrict s) /*! \brief Flip first and last IP in range if they are in unusual order. */ -void reorder_last_first(struct range_t *range_p) +static void reorder_last_first(struct range_t *range_p) { if (ipcomp(&range_p->first_ip, &range_p->last_ip) > 0) { union ipaddr_t tmp; From 5eae1b41a723f4e93b19fef907f49f9fc6be50e9 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 6 Jan 2017 23:34:00 +0000 Subject: [PATCH 027/158] man: improve synopsis and output limit Signed-off-by: Sami Kerola --- man/dhcpd-pools.1.in | 56 ++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 8216ee4..9327749 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -1,9 +1,25 @@ -.TH DHCPD-POOLS "1" "2015-09-04" "@VERSION@" "User Commands" +.TH DHCPD-POOLS "1" "2017-01-06" "@VERSION@" "User Commands" .SH NAME dhcpd-pools \- ISC dhcpd pools usage analysis .SH SYNOPSIS -.B dhcpd-pools -[options] +.SY dhcpd-pools +.OP \-\-config file +.OP \-\-leases file +.OP \-\-sort nimcptTe +.OP \-\-reverse +.OP \-\-format thHcxXjJ +.OP \-\-output file +.OP \-\-limit nr +.OP \-\-warning percent +.OP \-\-critical percent +.OP \-\-warn\-count number +.OP \-\-crit\-count number +.OP \-\-snet\-alarms +.OP \-\-minsize size +.OP \-\-perfdata +.OP \-\-version +.OP \-\-help +.YS .SH DESCRIPTION The program analyses ISC dhcpd shared network and pool usage and outputs the results in a format selected by user. @@ -104,29 +120,17 @@ determines which numeric analysis tables to include in the output. The following values are "OR'd" together to create the desired output. The default is .IR @OUTPUT_LIMIT@ . -.PP -.RS -.PD 0 -.TP -.B 01 -Print ranges -.TP -.B 02 -Print shared networks -.TP -.B 04 -Print total summary -.TP -.B 10 -Print range header -.TP -.B 20 -Print shared network header -.TP -.B 40 -Print total summary header -.PD -.RE +.IP +.TS +tab(:); +ll. +0\fI1\fR:Print ranges +0\fI2\fR:Print shared networks +0\fI4\fR:Print total summary +\fI1\fR0:Print range header +\fI2\fR0:Print shared network header +\fI4\fR0:Print total summary header +.TE .IP The output limit for total summary has special meaning in .B \-\-warning From ae2edb0fbc80e237359a8156ada30d2835535bfa Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 7 Jan 2017 11:01:22 +0000 Subject: [PATCH 028/158] man: remove old html table only option argument from manual Incomplete html page, that was just a html table, was removed some time ago but deprecated option arguments were unfortunately left to manual that are now removed. Reference: 1299737d76dfabc17bb79d8eb2475b1a3784b9c7 Signed-off-by: Sami Kerola --- man/dhcpd-pools.1.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 9327749..6b7a74b 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -7,7 +7,7 @@ dhcpd-pools \- ISC dhcpd pools usage analysis .OP \-\-leases file .OP \-\-sort nimcptTe .OP \-\-reverse -.OP \-\-format thHcxXjJ +.OP \-\-format tHcxXjJ .OP \-\-output file .OP \-\-limit nr .OP \-\-warning percent @@ -80,7 +80,7 @@ field is default sort key. \fB\-r\fR, \fB\-\-reverse\fR Sort results in reverse order. .TP -\fB\-f\fR, \fB\-\-format\fR=\fI[thHcxXjJ]\fR +\fB\-f\fR, \fB\-\-format\fR=\fI[tHcxXjJ]\fR Output format. Text .RI ( t ). From a905b50943e93db917b785d07cb6eebd3e2efff8 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 8 Jan 2017 11:49:41 +0000 Subject: [PATCH 029/158] getdata: report position in config file when parsing fails It seems that one can reach the abort() with severely broken configuration file, that is extremely unlikely to run without parser error when given to ISC dhcpd. So such files ought to be impossible, and it is good enough for this software to report position where parsing cannot be continued. Signed-off-by: Sami Kerola --- src/getdata.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/getdata.c b/src/getdata.c index 05adee5..906fa27 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -257,8 +257,9 @@ void parse_config(int is_include, const char *restrict config_file, break; } else if (argument == ITS_A_RANGE_SECOND_IP && i == 0) { if (!range_p) { - puts("parse_config: range_p uninitialized: report a bug"); - abort(); + fpos_t pos; + fgetpos(dhcpd_config, &pos); + error(EXIT_FAILURE, 0, "parse_config: parsing failed at position: %Ld", pos); } range_p->last_ip = range_p->first_ip; goto newrange; From c4a654a1497149e9470078b5ab067305a2016361 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Thu, 12 Jan 2017 22:40:33 +0000 Subject: [PATCH 030/158] output: fix timestamp localization on html page Signed-off-by: Sami Kerola --- src/output.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/output.c b/src/output.c index c3ad488..7c29d4f 100644 --- a/src/output.c +++ b/src/output.c @@ -468,6 +468,8 @@ static void html_header(FILE *restrict f) if (tmp == NULL) { error(EXIT_FAILURE, errno, "html_header: localtime"); } + setlocale(LC_CTYPE, ""); + setlocale(LC_NUMERIC, ""); if (strftime(outstr, sizeof(outstr), nl_langinfo(D_T_FMT), &result) == 0) { error(EXIT_FAILURE, 0, "html_header: strftime returned 0"); } From 344e01c1f62217484b91396474b5e9e2f9310128 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 4 Feb 2017 18:00:02 +0000 Subject: [PATCH 031/158] output: add include avoid referringt to undefined definition Reference: c4a654a1497149e9470078b5ab067305a2016361 Signed-off-by: Sami Kerola --- src/output.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/output.c b/src/output.c index 7c29d4f..407b2a8 100644 --- a/src/output.c +++ b/src/output.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include From 2b75a0d78e12ebdace42dd2812600b0adf7ae320 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 4 Feb 2017 23:11:43 +0000 Subject: [PATCH 032/158] getdata: remove POSIX_FADV_NOREUSE It is too difficult to know what users might want to do. Maybe some run this software all the time from a monitoring system, and in cases like that it is best to have caches helping. Signed-off-by: Sami Kerola --- src/getdata.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/getdata.c b/src/getdata.c index 906fa27..13b882a 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -71,10 +71,6 @@ int parse_leases(void) if (dhcpd_leases == NULL) error(EXIT_FAILURE, errno, "parse_leases: %s", config.dhcpdlease_file); #ifdef HAVE_POSIX_FADVISE -# ifdef POSIX_FADV_NOREUSE - if (posix_fadvise(fileno(dhcpd_leases), 0, 0, POSIX_FADV_NOREUSE) != 0) - error(EXIT_FAILURE, errno, "parse_leases: fadvise %s", config.dhcpdlease_file); -# endif /* POSIX_FADV_NOREUSE */ # ifdef POSIX_FADV_SEQUENTIAL if (posix_fadvise(fileno(dhcpd_leases), 0, 0, POSIX_FADV_SEQUENTIAL) != 0) error(EXIT_FAILURE, errno, "parse_leases: fadvise %s", config.dhcpdlease_file); @@ -200,10 +196,6 @@ void parse_config(int is_include, const char *restrict config_file, if (dhcpd_config == NULL) error(EXIT_FAILURE, errno, "parse_config: %s", config_file); #ifdef HAVE_POSIX_FADVISE -# ifdef POSIX_FADV_NOREUSE - if (posix_fadvise(fileno(dhcpd_config), 0, 0, POSIX_FADV_NOREUSE) != 0) - error(EXIT_FAILURE, errno, "parse_config: fadvise %s", config_file); -# endif /* POSIX_FADV_NOREUSE */ # ifdef POSIX_FADV_SEQUENTIAL if (posix_fadvise(fileno(dhcpd_config), 0, 0, POSIX_FADV_SEQUENTIAL) != 0) error(EXIT_FAILURE, errno, "parse_config: fadvise %s", config_file); From 9a526193853620e451aa6ebd5d10f9288825971e Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 7 Apr 2017 22:56:19 +0100 Subject: [PATCH 033/158] style: use same argument names in header and source file Signed-off-by: Sami Kerola --- src/dhcpd-pools.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 3765b26..5b2dbc7 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -225,7 +225,7 @@ extern void parse_config(int, const char *restrict, struct shared_network_t *res __attribute__ ((nonnull(2, 3))); extern void prepare_data(void); extern void do_counting(void); -extern void flip_ranges(struct range_t *restrict ranges, struct range_t *restrict tmp_ranges) +extern void flip_ranges(struct range_t *restrict flip_me, struct range_t *restrict tmp_ranges) __attribute__ ((nonnull(1, 2))); /* support functions */ extern int (*parse_ipaddr) (const char *restrict src, union ipaddr_t *restrict dst); @@ -306,15 +306,15 @@ extern int output_alarming(void); /* Memory release, file closing etc */ extern void clean_up(void); /* Hash functions */ -extern void (*add_lease) (union ipaddr_t *ip, enum ltype type); -extern void add_lease_init(union ipaddr_t *ip, enum ltype type); -extern void add_lease_v4(union ipaddr_t *ip, enum ltype type); -extern void add_lease_v6(union ipaddr_t *ip, enum ltype type); +extern void (*add_lease) (union ipaddr_t *addr, enum ltype type); +extern void add_lease_init(union ipaddr_t *addr, enum ltype type); +extern void add_lease_v4(union ipaddr_t *addr, enum ltype type); +extern void add_lease_v6(union ipaddr_t *addr, enum ltype type); -extern struct leases_t *(*find_lease) (union ipaddr_t *ip); -extern struct leases_t *find_lease_init(union ipaddr_t *ip); -extern struct leases_t *find_lease_v4(union ipaddr_t *ip); -extern struct leases_t *find_lease_v6(union ipaddr_t *ip); +extern struct leases_t *(*find_lease) (union ipaddr_t *addr); +extern struct leases_t *find_lease_init(union ipaddr_t *addr); +extern struct leases_t *find_lease_v4(union ipaddr_t *addr); +extern struct leases_t *find_lease_v6(union ipaddr_t *addr); extern void delete_lease(struct leases_t *lease); extern void delete_all_leases(void); From e9223a852c90e47e6ff49b40c39f11d7c89c1bef Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 10 Apr 2017 13:12:34 +0100 Subject: [PATCH 034/158] contrib: Klaus Slott told about opensuse package Add opensuse rpm as an example how to build one. Signed-off-by: Sami Kerola --- THANKS | 1 + contrib/rpm.spec | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 contrib/rpm.spec diff --git a/THANKS b/THANKS index 8375381..7a9ce82 100644 --- a/THANKS +++ b/THANKS @@ -39,3 +39,4 @@ Anton Tkachev Derrick Lin Ivanov Ivan Manuel Hachtkemper +Klaus Slott diff --git a/contrib/rpm.spec b/contrib/rpm.spec new file mode 100644 index 0000000..46826d8 --- /dev/null +++ b/contrib/rpm.spec @@ -0,0 +1,4 @@ +Klaus Slott made a package that works for opensuse, and is +a good starting point for whom ever happens to need an rpm. + +https://build.opensuse.org/package/show/home:Mr_Manor/dhcpd-pools From c3c3fc6e406763914c1a6163d311320298a1663d Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 15 Apr 2017 20:42:07 +0100 Subject: [PATCH 035/158] getdata: fpos_t is not easy to print correctly On some systems fpos_t may be a complex object, so printing it is not as easy as ftell() position. Signed-off-by: Sami Kerola --- src/getdata.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/getdata.c b/src/getdata.c index 13b882a..2083440 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -249,9 +249,9 @@ void parse_config(int is_include, const char *restrict config_file, break; } else if (argument == ITS_A_RANGE_SECOND_IP && i == 0) { if (!range_p) { - fpos_t pos; - fgetpos(dhcpd_config, &pos); - error(EXIT_FAILURE, 0, "parse_config: parsing failed at position: %Ld", pos); + long int pos; + pos = ftell(dhcpd_config); + error(EXIT_FAILURE, 0, "parse_config: parsing failed at position: %ld", pos); } range_p->last_ip = range_p->first_ip; goto newrange; From e93fc5dba49a50ecaab516e6d3e3a5b8cc32b200 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 15 Apr 2017 20:42:58 +0100 Subject: [PATCH 036/158] lib: update .gitignore Signed-off-by: Sami Kerola --- lib/.gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/.gitignore b/lib/.gitignore index 01559e4..203f90d 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -6,6 +6,7 @@ /Makefile /Makefile.am /Makefile.in +/_Noreturn.h /alloca.h /alloca.in.h /arg-nonnull.h @@ -57,6 +58,11 @@ /fstat.c /ftell.c /ftello.c +/getopt-cdefs.in.h +/getopt-core.h +/getopt-ext.h +/getopt-pfx-core.h +/getopt-pfx-ext.h /getopt.c /getopt.in.h /getopt1.c From 1c8b799799409c9446ef326894f5ba94356b1b63 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 6 May 2017 16:44:19 +0100 Subject: [PATCH 037/158] fix typo Signed-off-by: Sami Kerola --- webpages/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpages/index.html b/webpages/index.html index 7fb097d..5e9f398 100644 --- a/webpages/index.html +++ b/webpages/index.html @@ -74,7 +74,7 @@ reference documentation are available online.

lease_analyzer and dhcpd-snmp where too slow to handle huge number of leases. There is also difference in -printed details. The dhcpd-pools does not print quote as much information as +printed details. The dhcpd-pools does not print quite as much information as some other tools.

Notice that this utility is not the same as dhcpd-pool From 242ef3109b979e08a1db890e40bf4c6969f0bc7e Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 21 May 2017 17:21:57 +0100 Subject: [PATCH 038/158] variable: add const to print_mac_addreses_tmp Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index f07386b..0d9718d 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -100,7 +100,7 @@ int main(int argc, char **argv) { int option_index = 0; char const *tmp; - char *print_mac_addreses_tmp; + const char *print_mac_addreses_tmp; struct range_t *tmp_ranges; enum { OPT_SNET_ALARMS = CHAR_MAX + 1, From dff991666e400ab08dcb55c98b5808473fefdb3f Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 21 May 2017 17:30:24 +0100 Subject: [PATCH 039/158] lib: update .gitignore Signed-off-by: Sami Kerola --- lib/.gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/.gitignore b/lib/.gitignore index 203f90d..bd99cb1 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -43,6 +43,7 @@ /fd-hook.h /fdopen.c /fflush.c +/filename.h /flexmember.h /float+.h /float.c @@ -90,6 +91,8 @@ /locale.h /locale.in.h /localeconv.c +/localtime-buffer.c +/localtime-buffer.h /lseek.c /malloc.c /malloca.c @@ -123,6 +126,8 @@ /ref-del.sed /ref-del.sin /setenv.c +/stat-w32.c +/stat-w32.h /stat.c /stdalign.in.h /stdbool.in.h @@ -165,6 +170,7 @@ /time_r.c /time_rz.c /timegm.c +/tzset.c /unistd.c /unistd.h /unistd.in.h From b9cff0d814dd886f38ff1dabe76f632d7829f3e4 Mon Sep 17 00:00:00 2001 From: Boris Lytochkin Date: Sun, 4 Dec 2016 17:09:32 +0300 Subject: [PATCH 040/158] introduce -A arg: treat single subnets as shared-network with CIDR as their name Current output makes some false-positives for situations when multiple ranges are specified inside single network, for example: subnet 10.0.0.0 netmask 255.255.254.0 { ... range 10.0.0.1 10.0.0.254; range 10.0.1.1 10.0.1.253; ... } An alert for range 10.0.0.1 - 10.0.0.254 will be raised even in situations when range 10.0.1.1 - 10.0.1.253 is completely empty. To cope with this issue, an -A option is added to treat all single networks as shared-network. This option changes output for both range and shared networks output if specified. Frankly saying, using network CIDR as network name is much more sane for me than 'All Networks'. Signed-off-by: Boris Lytochkin --- THANKS | 1 + man/dhcpd-pools.1.in | 4 ++++ src/dhcpd-pools.c | 9 ++++++++- src/dhcpd-pools.h | 6 +++++- src/getdata.c | 34 ++++++++++++++++++++++++++++++++++ src/other.c | 3 ++- 6 files changed, 54 insertions(+), 3 deletions(-) diff --git a/THANKS b/THANKS index 7a9ce82..ae23230 100644 --- a/THANKS +++ b/THANKS @@ -40,3 +40,4 @@ Derrick Lin Ivanov Ivan Manuel Hachtkemper Klaus Slott +Boris Lytochkin diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 6b7a74b..8a55165 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -202,6 +202,10 @@ backup leases. This option is meaningful only in context of alarming and will print lots of data, if there are many networks. By default this option is not in use. .TP +\fB\-A\fR, \fB\-\-all\-as\-shared\fR +Treat all stand-alone subnets as shared-network with named formed from it's +CIDR. By default this option is not in use for backwards compatibility. +.TP \fB\-v\fR, \fB\-\-version\fR Print version information to standard output and exit successfully. .TP diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 0d9718d..16d685e 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -129,6 +129,7 @@ int main(int argc, char **argv) {"crit-count", required_argument, NULL, OPT_CRIT_COUNT}, {"minsize", required_argument, NULL, OPT_MINSIZE}, {"perfdata", no_argument, NULL, 'p'}, + {"all-as-shared", no_argument, NULL, 'A'}, {NULL, 0, NULL, 0} }; @@ -161,12 +162,14 @@ int main(int argc, char **argv) /* Default sort order is by IPs small to big */ config.reverse_order = 0; config.backups_found = 0; + /* Treat single networks as shared with network CIDR as name */ + config.all_as_shared = 0; prepare_memory(); /* Parse command line options */ while (1) { int c; - c = getopt_long(argc, argv, "c:l:f:o:s:rL:pvh", long_options, &option_index); + c = getopt_long(argc, argv, "c:l:f:o:s:rL:pAvh", long_options, &option_index); if (c == EOF) break; switch (c) { @@ -241,6 +244,10 @@ int main(int argc, char **argv) /* Print additional performance data in alarming mode */ config.perfdata = 1; break; + case 'A': + /* Treat single networks as shared with network CIDR as name */ + config.all_as_shared = 1; + break; case 'v': /* Print version */ print_version(); diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 5b2dbc7..53df74a 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -108,6 +108,7 @@ struct shared_network_t { double used; double touched; double backups; + int netmask; }; /*! \struct range_t * \brief Counters for an individual range. @@ -128,7 +129,9 @@ enum isc_conf_parser { ITS_A_RANGE_FIRST_IP, ITS_A_RANGE_SECOND_IP, ITS_A_SHAREDNET, - ITS_AN_INCLUCE + ITS_AN_INCLUCE, + ITS_A_SUBNET, + ITS_A_NETMASK }; /*! \enum ltype * \brief Lease state types. @@ -196,6 +199,7 @@ struct configuration_t { snet_alarms:1, print_mac_addreses:1, perfdata:1, + all_as_shared:1, header_limit:3, number_limit:3; }; diff --git a/src/getdata.c b/src/getdata.c index 2083440..995e1a9 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -153,6 +153,12 @@ static int is_interesting_config_clause(char const *restrict s) return ITS_A_RANGE_FIRST_IP; if (strstr(s, "shared-network")) return ITS_A_SHAREDNET; + if (config.all_as_shared) { + if (strstr(s, "subnet")) + return ITS_A_SUBNET; + if (strstr(s, "netmask")) + return ITS_A_NETMASK; + } if (strstr(s, "include")) return ITS_AN_INCLUCE; return ITS_NOTHING_INTERESTING; @@ -364,6 +370,12 @@ void parse_config(int is_include, const char *restrict config_file, argument = ITS_A_RANGE_SECOND_IP; break; case ITS_A_SHAREDNET: + case ITS_A_SUBNET: + /* ignore subnets inside a shared-network */ + if (argument == ITS_A_SUBNET && shared_p != shared_networks) { + argument = ITS_NOTHING_INTERESTING; + break; + } /* printf ("shared-network named: %s\n", word); */ num_shared_networks++; shared_p = shared_networks + num_shared_networks; @@ -372,10 +384,32 @@ void parse_config(int is_include, const char *restrict config_file, shared_p->used = 0; shared_p->touched = 0; shared_p->backups = 0; + shared_p->netmask = (argument == ITS_A_SUBNET ? -1 : 0); /* do not fill in netmask */ if (SHARED_NETWORKS < num_shared_networks + 2) /* FIXME: make this to go away by reallocating more space. */ error(EXIT_FAILURE, 0, "parse_config: increase default.h SHARED_NETWORKS and recompile"); + /* record network's mask too */ + if (argument == ITS_A_SUBNET) + newclause = 1; + argument = ITS_NOTHING_INTERESTING; + braces_shared = braces; + break; + case ITS_A_NETMASK: + /* fill in only when requested to do so */ + if (shared_p->netmask) { + if (!(parse_ipaddr(word, &addr))) + break; + shared_p->netmask = 32; + while ((addr.v4 & 0x01) == 0) { + addr.v4 >>= 1; + shared_p->netmask--; + } + snprintf(word, MAXLEN-1, "%s/%d", shared_p->name, shared_p->netmask); + if (shared_p->name) + free(shared_p->name); + shared_p->name = xstrdup(word); + } argument = ITS_NOTHING_INTERESTING; braces_shared = braces; break; diff --git a/src/other.c b/src/other.c index 5e54367..5794ccc 100644 --- a/src/other.c +++ b/src/other.c @@ -474,7 +474,8 @@ void __attribute__ ((__noreturn__)) usage(int status) fputs( " --crit-count=NR a number of free leases before critical raised\n", out); fputs( " --minsize=size disable alarms for small ranges and shared-nets\n", out); fputs( " --snet-alarms suppress range alarms that are part of a shared-net\n", out); - fputs( " -p --perfdata print additional perfdata in alarming mode\n", out); + fputs( " -p, --perfdata print additional perfdata in alarming mode\n", out); + fputs( " -A, --all-as-shared treat single subnets as shared-network with CIDR as their name\n", out); fputs( " -v, --version output version information and exit\n", out); fputs( " -h, --help display this help and exit\n", out); fputs( "\n", out); From 782f63c3ad2ec9ae46af90ae4507693e2a873f63 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 9 Sep 2017 10:09:35 +0100 Subject: [PATCH 041/158] add --ip-version option to force either IPv4 or IPv6 analysis Proposed-by: Jeff Balley Signed-off-by: Sami Kerola --- man/dhcpd-pools.1.in | 6 ++++++ src/dhcpd-pools.c | 18 ++++++++++++++++-- src/other.c | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 8a55165..0eee034 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -206,6 +206,12 @@ is not in use. Treat all stand-alone subnets as shared-network with named formed from it's CIDR. By default this option is not in use for backwards compatibility. .TP +\fB\-\-ip\-version\fR=\fI4|6\fR +Force command to read configuration and leases files in IPv4 or IPv6 mode. +Notice that when inputs do not match with what is forced analysis output is +garbage. This option should not be necessary to use, and exists only to +allow debugging. +.TP \fB\-v\fR, \fB\-\-version\fR Print version information to standard output and exit successfully. .TP diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 16d685e..4f6f22b 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -108,7 +108,8 @@ int main(int argc, char **argv) OPT_CRIT, OPT_MINSIZE, OPT_WARN_COUNT, - OPT_CRIT_COUNT + OPT_CRIT_COUNT, + OPT_SET_IPV }; int ret_val; @@ -130,6 +131,7 @@ int main(int argc, char **argv) {"minsize", required_argument, NULL, OPT_MINSIZE}, {"perfdata", no_argument, NULL, 'p'}, {"all-as-shared", no_argument, NULL, 'A'}, + {"ip-version", required_argument, NULL, OPT_SET_IPV}, {NULL, 0, NULL, 0} }; @@ -165,6 +167,7 @@ int main(int argc, char **argv) /* Treat single networks as shared with network CIDR as name */ config.all_as_shared = 0; prepare_memory(); + set_ipv_functions(IPvUNKNOWN); /* Parse command line options */ while (1) { int c; @@ -240,6 +243,18 @@ int main(int argc, char **argv) case OPT_MINSIZE: config.minsize = strtod_or_err(optarg, "illegal argument"); break; + case OPT_SET_IPV: + switch(optarg[0]) { + case '4': + set_ipv_functions(IPv4); + break; + case '6': + set_ipv_functions(IPv6); + break; + default: + error(EXIT_FAILURE, 0, "unknown --ip-version argument: %s", optarg); + } + break; case 'p': /* Print additional performance data in alarming mode */ config.perfdata = 1; @@ -301,7 +316,6 @@ int main(int argc, char **argv) error(EXIT_FAILURE, 0, "unknown output format: %s", quote(print_mac_addreses_tmp)); } /* Do the job */ - set_ipv_functions(IPvUNKNOWN); parse_config(1, config.dhcpdconf_file, shared_networks); parse_leases(); prepare_data(); diff --git a/src/other.c b/src/other.c index 5794ccc..7ac69c9 100644 --- a/src/other.c +++ b/src/other.c @@ -476,6 +476,7 @@ void __attribute__ ((__noreturn__)) usage(int status) fputs( " --snet-alarms suppress range alarms that are part of a shared-net\n", out); fputs( " -p, --perfdata print additional perfdata in alarming mode\n", out); fputs( " -A, --all-as-shared treat single subnets as shared-network with CIDR as their name\n", out); + fputs( " --ip-version=4|6 force analysis to use either IPv4 or IPv6 functions\n", out); fputs( " -v, --version output version information and exit\n", out); fputs( " -h, --help display this help and exit\n", out); fputs( "\n", out); From 48d0629881a255fc1a3c445c867e694b38df6369 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 9 Sep 2017 10:19:20 +0100 Subject: [PATCH 042/158] lib: update .gitignore Signed-off-by: Sami Kerola --- lib/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/.gitignore b/lib/.gitignore index bd99cb1..e138fda 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -114,6 +114,7 @@ /msvc-nothrow.h /netinet_in.in.h /nl_langinfo.c +/nstrftime.c /pathmax.h /progname.c /progname.h From bb0fa9adaeb9ae8da2e52aa9b2767fce5ff6b337 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 17 Sep 2017 00:03:06 +0100 Subject: [PATCH 043/158] getdata: add cidr range support This makes 'range6 123::/45' style cidr notation to be understood as address range. Earlier ranges that used cidr failed to parse completely. Reported-by: Jeff Bailey Signed-off-by: Sami Kerola --- THANKS | 1 + src/dhcpd-pools.h | 2 + src/getdata.c | 16 +++++--- src/other.c | 94 +++++++++++++++++++++++++++++++++++++++++++ tests/Makemodule.am | 2 + tests/confs/range4 | 31 ++++++++++++++ tests/confs/range6 | 4 ++ tests/expected/range4 | 16 ++++++++ tests/expected/range6 | 10 +++++ tests/leases/range4 | 1 + tests/leases/range6 | 1 + tests/range4 | 1 + tests/range6 | 1 + 13 files changed, 175 insertions(+), 5 deletions(-) create mode 100644 tests/confs/range4 create mode 100644 tests/confs/range6 create mode 100644 tests/expected/range4 create mode 100644 tests/expected/range6 create mode 120000 tests/leases/range4 create mode 120000 tests/leases/range6 create mode 120000 tests/range4 create mode 120000 tests/range6 diff --git a/THANKS b/THANKS index ae23230..f230fcd 100644 --- a/THANKS +++ b/THANKS @@ -41,3 +41,4 @@ Ivanov Ivan Manuel Hachtkemper Klaus Slott Boris Lytochkin +Jeff Bailey diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 53df74a..47e246e 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -238,6 +238,8 @@ extern int parse_ipaddr_init(const char *restrict src, extern int parse_ipaddr_v4(const char *restrict src, union ipaddr_t *restrict dst); extern int parse_ipaddr_v6(const char *restrict src, union ipaddr_t *restrict dst); +extern void parse_cidr(struct range_t *range_p, const char *word); + extern void (*copy_ipaddr) (union ipaddr_t *restrict dst, const union ipaddr_t *restrict src); extern void copy_ipaddr_init(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src); diff --git a/src/getdata.c b/src/getdata.c index 995e1a9..6f53b1a 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -339,13 +339,19 @@ void parse_config(int is_include, const char *restrict config_file, /* printf ("range 2nd ip: %s\n", word); */ range_p = ranges + num_ranges; argument = ITS_NOTHING_INTERESTING; - parse_ipaddr(word, &addr); - if (one_ip_range == 1) { + if (strchr(word, '/')) { + parse_cidr(range_p, word); one_ip_range = 0; - copy_ipaddr(&range_p->first_ip, &addr); + } else { + /* not cidr */ + parse_ipaddr(word, &addr); + if (one_ip_range == 1) { + one_ip_range = 0; + copy_ipaddr(&range_p->first_ip, &addr); + } + copy_ipaddr(&range_p->last_ip, &addr); + reorder_last_first(range_p); } - copy_ipaddr(&range_p->last_ip, &addr); - reorder_last_first(range_p); newrange: range_p->count = 0; range_p->touched = 0; diff --git a/src/other.c b/src/other.c index 7ac69c9..4eda1ad 100644 --- a/src/other.c +++ b/src/other.c @@ -52,10 +52,15 @@ #include "error.h" #include "progname.h" #include "quote.h" +#include "xalloc.h" #include "dhcpd-pools.h" #include "defaults.h" +char *(*cidr_last)(union ipaddr_t *restrict addr, const int mask); +static char *cidr_last_v4(union ipaddr_t *restrict addr, const int mask); +static char *cidr_last_v6(union ipaddr_t *restrict addr, const int mask); + /*! \brief Set function pointers depending on IP version. * \param ip IP version. */ @@ -73,6 +78,7 @@ void set_ipv_functions(int version) leasecomp = leasecomp_v4; ntop_ipaddr = ntop_ipaddr_v4; parse_ipaddr = parse_ipaddr_v4; + cidr_last = cidr_last_v4; xstrstr = xstrstr_v4; break; @@ -86,6 +92,7 @@ void set_ipv_functions(int version) leasecomp = leasecomp_v6; ntop_ipaddr = ntop_ipaddr_v6; parse_ipaddr = parse_ipaddr_v6; + cidr_last = cidr_last_v6; xstrstr = xstrstr_v6; break; @@ -99,6 +106,7 @@ void set_ipv_functions(int version) leasecomp = leasecomp_init; ntop_ipaddr = ntop_ipaddr_init; parse_ipaddr = parse_ipaddr_init; + cidr_last = NULL; xstrstr = xstrstr_init; break; @@ -148,6 +156,92 @@ int parse_ipaddr_v6(const char *restrict src, union ipaddr_t *restrict dst) return rv == 1; } +static int strtol_mask(const char *str) +{ + long num; + char *end = NULL; + + errno = 0; + if (str == NULL || *str == '\0') + goto err; + num = strtol(str, &end, 10); + + if (errno || str == end || (end && *end)) + goto err; + if (num < 0 || 128 < num) + goto err; + return (int)num; + err: + return -1; +} + +static char *cidr_last_v4(union ipaddr_t *restrict addr, const int mask) +{ + union ipaddr_t last_ip; + uint32_t netmask; + const char *ip; + + if (mask) + netmask = (1U << (32 - mask)) - 1; + else + netmask = 0; + last_ip.v4 = addr->v4 | netmask; + + ip = ntop_ipaddr(&last_ip); + return xstrdup(ip); +} + +static char *cidr_last_v6(union ipaddr_t *restrict addr, const int mask) +{ + union ipaddr_t bitmask; + int i, j; + char ip[128]; + + memset(&bitmask, 0x0, sizeof(bitmask)); + for (i = mask, j = 0; i > 0; i -= 8, j++) { + if (i >= 8) + bitmask.v6[j] = 0xff; + else + bitmask.v6[j] = (unsigned char)(0xffU << (8 - i)); + } + for (i = 0; i < (int)sizeof(bitmask); i++) + addr->v6[i] |= ~bitmask.v6[i]; + inet_ntop(AF_INET6, addr, ip, sizeof(ip)); + return xstrdup(ip); +} + +void parse_cidr(struct range_t *range_p, const char *word) +{ + char *divider; + int mask; + union ipaddr_t addr; + char *last; + + /* determine cidr */ + divider = strchr(word, '/'); + *divider++ = '\0'; + mask = strtol_mask(divider); + if (mask < 0) + error(EXIT_FAILURE, 0, "cidr %s invalid mask %s", word, + divider); + if (config.ip_version == IPvUNKNOWN) { + if (!strchr(word, ':')) + set_ipv_functions(IPv4); + else + set_ipv_functions(IPv6); + } + + /* start of the range is easy */ + parse_ipaddr(word, &addr); + copy_ipaddr(&range_p->first_ip, &addr); + + /* end of the range depends cidr size */ + last = cidr_last(&addr, mask); + parse_ipaddr(last, &addr); + copy_ipaddr(&range_p->last_ip, &addr); + free(last); +} + /*! \brief Copy IP address to union. * * \param dst Destination for a binary IP address. diff --git a/tests/Makemodule.am b/tests/Makemodule.am index 46bac47..2784298 100644 --- a/tests/Makemodule.am +++ b/tests/Makemodule.am @@ -20,6 +20,8 @@ TESTS = \ tests/leading0 \ tests/one-ip \ tests/one-line \ + tests/range4 \ + tests/range6 \ tests/same-twice \ tests/simple \ tests/sorts \ diff --git a/tests/confs/range4 b/tests/confs/range4 new file mode 100644 index 0000000..6540de7 --- /dev/null +++ b/tests/confs/range4 @@ -0,0 +1,31 @@ +shared-network example1 { + subnet 10.0.0.0 netmask 255.255.255.0 { + pool { + range 10.0.0.0/27; + } + } + subnet 10.1.0.0 netmask 255.255.255.0 { + pool { + range 10.1.0.1/27; + } + } +} + +shared-network example2 { + subnet 10.2.0.0 netmask 255.255.255.0 { + pool { + range 10.2.0.1/28; + } + } + subnet 10.3.0.0 netmask 255.255.255.0 { + pool { + range 10.3.0.1/29; + } + } +} + +subnet 10.4.0.0 netmask 255.255.255.0 { + pool { + range 10.4.0.1/32; + } +} diff --git a/tests/confs/range6 b/tests/confs/range6 new file mode 100644 index 0000000..b15d615 --- /dev/null +++ b/tests/confs/range6 @@ -0,0 +1,4 @@ +subnet6 dead:abba:1000::/56 { + range6 dead:abba:1000::/56; + prefix6 dead:abba:1000:0100:: dead:abba:1000:ff00::/56; +} diff --git a/tests/expected/range4 b/tests/expected/range4 new file mode 100644 index 0000000..f22e11d --- /dev/null +++ b/tests/expected/range4 @@ -0,0 +1,16 @@ +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc +example1 10.0.0.0 - 10.0.0.31 32 12 37.500 0 12 37.500 +example1 10.1.0.1 - 10.1.0.31 31 10 32.258 0 10 32.258 +example2 10.2.0.1 - 10.2.0.15 15 8 53.333 0 8 53.333 +example2 10.3.0.1 - 10.3.0.7 7 7 100.000 0 7 100.000 +All networks 10.4.0.1 - 10.4.0.1 1 1 100.000 0 1 100.000 + +Shared networks: +name max cur percent touch t+c t+c perc +example1 63 22 34.921 0 22 34.921 +example2 22 15 68.182 0 15 68.182 + +Sum of all ranges: +name max cur percent touch t+c t+c perc +All networks 86 38 44.186 0 38 44.186 diff --git a/tests/expected/range6 b/tests/expected/range6 new file mode 100644 index 0000000..fe06786 --- /dev/null +++ b/tests/expected/range6 @@ -0,0 +1,10 @@ +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc +All networks dead:abba:1000:: - dead:abba:1000:ff:ffff:ffff:ffff:ffff 4.72237e+21 2 0.000 1 3 0.000 + +Shared networks: +name max cur percent touch t+c t+c perc + +Sum of all ranges: +name max cur percent touch t+c t+c perc +All networks 4.72237e+21 2 0.000 1 3 0.000 diff --git a/tests/leases/range4 b/tests/leases/range4 new file mode 120000 index 0000000..ceb7cbb --- /dev/null +++ b/tests/leases/range4 @@ -0,0 +1 @@ +complete \ No newline at end of file diff --git a/tests/leases/range6 b/tests/leases/range6 new file mode 120000 index 0000000..82e3978 --- /dev/null +++ b/tests/leases/range6 @@ -0,0 +1 @@ +v6 \ No newline at end of file diff --git a/tests/range4 b/tests/range4 new file mode 120000 index 0000000..61a58b0 --- /dev/null +++ b/tests/range4 @@ -0,0 +1 @@ +test.sh \ No newline at end of file diff --git a/tests/range6 b/tests/range6 new file mode 120000 index 0000000..61a58b0 --- /dev/null +++ b/tests/range6 @@ -0,0 +1 @@ +test.sh \ No newline at end of file From 0c32a67ff1dfa0512536b325d4955129acd01c7f Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 17 Sep 2017 08:33:53 +0100 Subject: [PATCH 044/158] build-sys: update bootstrap from gnulib Signed-off-by: Sami Kerola --- bootstrap | 48 +++++++++++++++++++++++++----------------------- bootstrap.conf | 2 +- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/bootstrap b/bootstrap index 92dac46..43c8545 100755 --- a/bootstrap +++ b/bootstrap @@ -1,10 +1,10 @@ #! /bin/sh # Print a version string. -scriptversion=2016-01-24.06; # UTC +scriptversion=2017-09-13.06; # UTC # Bootstrap this package from checked-out sources. -# Copyright (C) 2003-2016 Free Software Foundation, Inc. +# Copyright (C) 2003-2017 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,7 +17,7 @@ scriptversion=2016-01-24.06; # UTC # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # Originally written by Paul Eggert. The canonical version of this # script is maintained as build-aux/bootstrap in gnulib, however, to @@ -141,7 +141,7 @@ po_download_command_format=\ # Fallback for downloading .po files (if rsync fails). po_download_command_format2=\ "wget --mirror -nd -q -np -A.po -P '%s' \ - http://translationproject.org/latest/%s/" + https://translationproject.org/latest/%s/" # Prefer a non-empty tarname (4th argument of AC_INIT if given), else # fall back to the package name (1st argument with munging) @@ -419,28 +419,30 @@ sort_ver() { # sort -V is not generally available done } +get_version_sed=' +# Move version to start of line. +s/.*[v ]\([0-9]\)/\1/ + +# Skip lines that do not start with version. +/^[0-9]/!d + +# Remove characters after the version. +s/[^.a-z0-9-].*// + +# The first component must be digits only. +s/^\([0-9]*\)[a-z-].*/\1/ + +#the following essentially does s/5.005/5.5/ +s/\.0*\([1-9]\)/.\1/g +p +q' + get_version() { app=$1 $app --version >/dev/null 2>&1 || { $app --version; return 1; } - $app --version 2>&1 | - sed -n '# Move version to start of line. - s/.*[v ]\([0-9]\)/\1/ - - # Skip lines that do not start with version. - /^[0-9]/!d - - # Remove characters after the version. - s/[^.a-z0-9-].*// - - # The first component must be digits only. - s/^\([0-9]*\)[a-z-].*/\1/ - - #the following essentially does s/5.005/5.5/ - s/\.0*\([1-9]\)/.\1/g - p - q' + $app --version 2>&1 | sed -n "$get_version_sed" } check_versions() { @@ -789,9 +791,9 @@ symlink_to_dir() # Leave any existing symlink alone, if it already points to the source, # so that broken build tools that care about symlink times # aren't confused into doing unnecessary builds. Conversely, if the - # existing symlink's time stamp is older than the source, make it afresh, + # existing symlink's timestamp is older than the source, make it afresh, # so that broken tools aren't confused into skipping needed builds. See - # . + # . test -h "$dst" && src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 && dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 && diff --git a/bootstrap.conf b/bootstrap.conf index 9cddfe4..5647477 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -1,6 +1,6 @@ # Bootstrap configuration. -# Copyright (C) 2006-2012 Free Software Foundation, Inc. +# Copyright (C) 2006-2017 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by From 1d47eb9a1cbce1781258cd5f3acf7757aadf3132 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 17 Sep 2017 08:43:19 +0100 Subject: [PATCH 045/158] docs: update doxygen configuration file Signed-off-by: Sami Kerola --- doc/doxy.conf.in | 172 ++++++++++++++++++++++++++++------------------- 1 file changed, 104 insertions(+), 68 deletions(-) diff --git a/doc/doxy.conf.in b/doc/doxy.conf.in index d64080e..776809f 100644 --- a/doc/doxy.conf.in +++ b/doc/doxy.conf.in @@ -1,4 +1,4 @@ -# Doxyfile 1.8.10 +# Doxyfile 1.8.13 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -51,7 +51,7 @@ PROJECT_BRIEF = "ISC dhcpd lease usage analyser" # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = +PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is @@ -118,7 +118,7 @@ REPEAT_BRIEF = YES # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. -ABBREVIATE_BRIEF = +ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief @@ -161,7 +161,7 @@ STRIP_FROM_PATH = src # specify the list of include paths that are normally passed to the compiler # using the -I flag. -STRIP_FROM_INC_PATH = +STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't @@ -228,13 +228,13 @@ TAB_SIZE = 4 # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. -ALIASES = +ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. -TCL_SUBST = +TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For @@ -242,7 +242,7 @@ TCL_SUBST = # members will be omitted, etc. # The default value is: NO. -OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored @@ -281,7 +281,7 @@ OPTIMIZE_OUTPUT_VHDL = NO # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. -EXTENSION_MAPPING = +EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable @@ -293,6 +293,15 @@ EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or @@ -512,7 +521,7 @@ CASE_SENSE_NAMES = YES # scope will be hidden. # The default value is: NO. -HIDE_SCOPE_NAMES = NO +HIDE_SCOPE_NAMES = YES # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to @@ -629,7 +638,7 @@ GENERATE_DEPRECATEDLIST= YES # sections, marked by \if ... \endif and \cond # ... \endcond blocks. -ENABLED_SECTIONS = +ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the @@ -671,7 +680,7 @@ SHOW_NAMESPACES = YES # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. -FILE_VERSION_FILTER = +FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated @@ -684,7 +693,7 @@ FILE_VERSION_FILTER = # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = +LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib @@ -694,7 +703,7 @@ LAYOUT_FILE = # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. -CITE_BIB_FILES = +CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages @@ -739,6 +748,12 @@ WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated @@ -753,7 +768,7 @@ WARN_FORMAT = "$file:$line: $text" # messages should be written. If left blank the output is written to standard # error (stderr). -WARN_LOGFILE = +WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files @@ -787,8 +802,8 @@ INPUT_ENCODING = UTF-8 # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, -# *.vhdl, *.ucf, *.qsf, *.as and *.js. +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. FILE_PATTERNS = *.c \ *.h \ @@ -824,7 +839,7 @@ EXCLUDE_SYMLINKS = NO # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* -EXCLUDE_PATTERNS = +EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the @@ -835,20 +850,20 @@ EXCLUDE_PATTERNS = # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* -EXCLUDE_SYMBOLS = +EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). -EXAMPLE_PATH = +EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. -EXAMPLE_PATTERNS = +EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands @@ -861,7 +876,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = +IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -877,8 +892,12 @@ IMAGE_PATH = # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. -INPUT_FILTER = +INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the @@ -886,8 +905,12 @@ INPUT_FILTER = # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. -FILTER_PATTERNS = +FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for @@ -910,7 +933,7 @@ FILTER_SOURCE_PATTERNS = *.c \ # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. -USE_MDFILE_AS_MAINPAGE = +USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing @@ -1022,7 +1045,7 @@ COLS_IN_ALPHA_INDEX = 5 # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. -IGNORE_PREFIX = +IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output @@ -1066,7 +1089,7 @@ HTML_FILE_EXTENSION = .html # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_HEADER = +HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard @@ -1076,7 +1099,7 @@ HTML_HEADER = # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FOOTER = +HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of @@ -1088,7 +1111,7 @@ HTML_FOOTER = # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_STYLESHEET = +HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets @@ -1101,7 +1124,7 @@ HTML_STYLESHEET = # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = +HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1111,7 +1134,7 @@ HTML_EXTRA_STYLESHEET = # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_FILES = +HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to @@ -1240,7 +1263,7 @@ GENERATE_HTMLHELP = NO # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -CHM_FILE = +CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, @@ -1248,7 +1271,7 @@ CHM_FILE = # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -HHC_LOCATION = +HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the master .chm file (NO). @@ -1261,7 +1284,7 @@ GENERATE_CHI = NO # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -CHM_INDEX_ENCODING = +CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it @@ -1292,7 +1315,7 @@ GENERATE_QHP = NO # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. -QCH_FILE = +QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace @@ -1317,7 +1340,7 @@ QHP_VIRTUAL_FOLDER = doc # filters). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom @@ -1325,21 +1348,21 @@ QHP_CUST_FILTER_NAME = # filters). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_CUST_FILTER_ATTRS = +QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_SECT_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. -QHG_LOCATION = +QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To @@ -1472,7 +1495,7 @@ MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_EXTENSIONS = +MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site @@ -1480,7 +1503,7 @@ MATHJAX_EXTENSIONS = # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_CODEFILE = +MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and @@ -1540,7 +1563,7 @@ EXTERNAL_SEARCH = NO # Searching" for details. # This tag requires that the tag SEARCHENGINE is set to YES. -SEARCHENGINE_URL = +SEARCHENGINE_URL = # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed # search data is written to a file for indexing by an external tool. With the @@ -1556,7 +1579,7 @@ SEARCHDATA_FILE = searchdata.xml # projects and redirect the results back to the right project. # This tag requires that the tag SEARCHENGINE is set to YES. -EXTERNAL_SEARCH_ID = +EXTERNAL_SEARCH_ID = # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen # projects other than the one defined by this configuration file, but that are @@ -1566,7 +1589,7 @@ EXTERNAL_SEARCH_ID = # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... # This tag requires that the tag SEARCHENGINE is set to YES. -EXTRA_SEARCH_MAPPINGS = +EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output @@ -1630,7 +1653,7 @@ PAPER_TYPE = a4 # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. -EXTRA_PACKAGES = +EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the # generated LaTeX document. The header should contain everything until the first @@ -1646,7 +1669,7 @@ EXTRA_PACKAGES = # to HTML_HEADER. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_HEADER = +LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # generated LaTeX document. The footer should contain everything after the last @@ -1657,7 +1680,7 @@ LATEX_HEADER = # Note: Only use a user-defined footer if you know what you are doing! # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_FOOTER = +LATEX_FOOTER = # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined # LaTeX style sheets that are included after the standard style sheets created @@ -1668,7 +1691,7 @@ LATEX_FOOTER = # list). # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_STYLESHEET = # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the LATEX_OUTPUT output @@ -1676,7 +1699,7 @@ LATEX_EXTRA_STYLESHEET = # markers available. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_EXTRA_FILES = +LATEX_EXTRA_FILES = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will @@ -1729,6 +1752,14 @@ LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_TIMESTAMP = NO + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -1776,14 +1807,14 @@ RTF_HYPERLINKS = NO # default style sheet that doxygen normally uses. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_STYLESHEET_FILE = +RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is # similar to doxygen's config file. A template extensions file can be generated # using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_EXTENSIONS_FILE = +RTF_EXTENSIONS_FILE = # If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code # with syntax highlighting in the RTF output. @@ -1828,7 +1859,7 @@ MAN_EXTENSION = .3 # MAN_EXTENSION with the initial . removed. # This tag requires that the tag GENERATE_MAN is set to YES. -MAN_SUBDIR = +MAN_SUBDIR = # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it # will generate one additional man file for each entity documented in the real @@ -1941,7 +1972,7 @@ PERLMOD_PRETTY = YES # overwrite each other's variables. # This tag requires that the tag GENERATE_PERLMOD is set to YES. -PERLMOD_MAKEVAR_PREFIX = +PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor @@ -1982,7 +2013,7 @@ SEARCH_INCLUDES = YES # preprocessor. # This tag requires that the tag SEARCH_INCLUDES is set to YES. -INCLUDE_PATH = +INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the @@ -1990,7 +2021,7 @@ INCLUDE_PATH = # used. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -INCLUDE_FILE_PATTERNS = +INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that are # defined before the preprocessor is started (similar to the -D option of e.g. @@ -2000,7 +2031,7 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = +PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -2009,7 +2040,7 @@ PREDEFINED = # definition found in the source code. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_AS_DEFINED = +EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will # remove all references to function-like macros that are alone on a line, have @@ -2038,13 +2069,13 @@ SKIP_FUNCTION_MACROS = YES # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. -TAGFILES = +TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create a # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = +GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES, all external class will be listed in # the class index. If set to NO, only the inherited external classes will be @@ -2084,7 +2115,7 @@ PERL_PATH = /usr/bin/perl # powerful graphs. # The default value is: YES. -CLASS_DIAGRAMS = YES +CLASS_DIAGRAMS = NO # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see: @@ -2093,14 +2124,14 @@ CLASS_DIAGRAMS = YES # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. -MSCGEN_PATH = +MSCGEN_PATH = # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. # If left empty dia is assumed to be found in the default search path. -DIA_PATH = +DIA_PATH = # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. @@ -2149,7 +2180,7 @@ DOT_FONTSIZE = 10 # the path where dot can find it using this tag. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTPATH = +DOT_FONTPATH = # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for # each documented class showing the direct and indirect inheritance relations. @@ -2293,26 +2324,26 @@ INTERACTIVE_SVG = NO # found. If left blank, it is assumed the dot tool can be found in the path. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_PATH = +DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the \dotfile # command). # This tag requires that the tag HAVE_DOT is set to YES. -DOTFILE_DIRS = +DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the \mscfile # command). -MSCFILE_DIRS = +MSCFILE_DIRS = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile # command). -DIAFILE_DIRS = +DIAFILE_DIRS = # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the # path where java can find the plantuml.jar file. If left blank, it is assumed @@ -2320,12 +2351,17 @@ DIAFILE_DIRS = # generate a warning when it encounters a \startuml command in this case and # will not generate output for the diagram. -PLANTUML_JAR_PATH = +PLANTUML_JAR_PATH = + +# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a +# configuration file for plantuml. + +PLANTUML_CFG_FILE = # When using plantuml, the specified paths are searched for files specified by # the !include statement in a plantuml block. -PLANTUML_INCLUDE_PATH = +PLANTUML_INCLUDE_PATH = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes From fefd8d26cf92b5686d759da41ffd15119b8a98dd Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 17 Sep 2017 09:00:25 +0100 Subject: [PATCH 046/158] docs: tell what needs to be done when releasing new version Signed-off-by: Sami Kerola --- TODO | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/TODO b/TODO index fa08675..ebc6e9b 100644 --- a/TODO +++ b/TODO @@ -14,3 +14,16 @@ o When time stamps are part of lease situation evaluation (see bug 1) add a --now switch which will one can use to change when expiry happens. o Add lease time histogram support. + +### When releasing + +o Update gnulib +o Update bootstrap +o Make annotated git tag +o ./configure --enable-doxygen && make distcheck +o gpg --armor --detach-sign dhcpd-pools*tar* +o Upload files to sourceforge +o mv doc/html webpages/doxygen +o PAGER=cat man -H ./man/dhcpd-pools.1 | tee ./webpages/man.html +o Update webpages/index.html dateModified & version (remove old doxygen before uploading new) +o Send email to dhcpd-pools-announce@lists.sourceforge.net subject: Version 2.nn is released From af1ae9411236aa6454d3086311149261c60f07f5 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 17 Sep 2017 09:17:15 +0100 Subject: [PATCH 047/158] docs: add build instruction link to the project web page Signed-off-by: Sami Kerola --- webpages/index.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/webpages/index.html b/webpages/index.html index 5e9f398..e3d5864 100644 --- a/webpages/index.html +++ b/webpages/index.html @@ -54,7 +54,10 @@ prompt> cat ./s

Where I can get dhcpd-pools?

Download release package -or clone from git

+or clone from git. Build instructions are in +README +file. +

git clone git://git.code.sf.net/p/dhcpd-pools/code dhcpd-pools

See also SourceForge project page.

From 804aa3236dacc2aa53f0fffe45e558a2a71ec44f Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 17 Sep 2017 09:50:55 +0100 Subject: [PATCH 048/158] docs: update maintainer gpg key Signed-off-by: Sami Kerola --- contrib/kerolasa.gpg | 135 +++++++++++++++++++++++++++++++------------ 1 file changed, 97 insertions(+), 38 deletions(-) diff --git a/contrib/kerolasa.gpg b/contrib/kerolasa.gpg index 47d1ed6..97a480d 100644 --- a/contrib/kerolasa.gpg +++ b/contrib/kerolasa.gpg @@ -1,5 +1,4 @@ -----BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v2.0.22 (GNU/Linux) mQINBFLH/jcBEADNgkgZAr7b/qvHzNkme8eSplDA8UHhcCFQmBnQ8HYFEYBi1Y5a GhICcuisRSuZIPLtqRF8ntoOXsOHOUxnn5hVR62HxMLgOC1PQMw8TzREobbkAxMp @@ -12,41 +11,101 @@ v8Bj+uLXc4JT9kTB5E8DT2ZR+61E4eT/zk4rpZ5j6tTktLNaSG58VYc+oQlPkPsB ntraDsORpa5cK9uPUbHIHN1qd4gi35O4UDSqS023XnStQqsUD4vlzICedPDypn28 h9q2nlNQHSDjIRnZFD+z9IHfVoBNTfm5/UH7NKBAvSS6rP5zsgi2fittt5AFdbmQ VBOtpYp5vbcdSt8gNdJRy8FRaiQ/2n74xF1Zso/PGni1xRmseS+qBGI95QARAQAB -tDtTYW1pIEtlcm9sYSAoaHR0cDovL3d3dy5pa2kuZmkva2Vyb2xhc2EvKSA8a2Vy -b2xhc2FAaWtpLmZpPokCPwQTAQIAKQUCUsf+NwIbAwUJCWYBgAcLCQgHAwIBBhUI -AgkKCwQWAgMBAh4BAheAAAoJEKlVMkX96bc5aBwP/3XE1ZW3pp6B337vW5VfPY8v -+8h2JMdL/PfCLqDHbQm6fYgtT+EFbVE3JotXcocSqvl3xjA2LERROoN9a+jdaS9O -+WDWdIxVjnpMheb502ZnTbwFuh1OVasvqT7x4e9Tmq31S/0VFjTFLm8M+anuoUsn -9lfy5jeGnULMT0G737uySmm8M7hP5lSXHhFaiQi2R95wo8titvZ9ckGFJH3/u5qV -8aU34yzIw3MnKG52FeieYjSVfEaso9FrO8thMFIJclHSGzd5fw9CbPggFzMR0zHc -wJl+AEshAIG13+P88wcJ4sqfZGltdjm0vSgcmWgkmrZyDhvyA4Hnb2Rc3faqh3VC -/qU7p82yhoJ9M12xz4PIXQbodPDu/q8Ckzt8zh6h8ROUkqqZ90M2Yc3QoX82qOzR -tMokbhhwtYcgyAZHw0CLvJuJvAME41zjH1Wq9wY+gXHewTppi9Yqbd8E1LJaCvr7 -pMhKr9f08lBoUD5G/M54HGMKW+1R0yvxR9C2lR8P5JfVfTmD9E/g8WbmzZuy1dm1 -sL3fzjmnc3yNNt9MgfJgHQu2W15myNAzK/sEXGjuXJSqn/dpCoxiqQooEc2qokN/ -wQp5g70We305+BZB1fQcjE7wBmF4OEtEcI3p4lSrffyxcsqFFds0ikDU024lA46D -V1nSGsKLk7fme3itszWmuQINBFLH/jcBEADGsDuJyhEGExcInkb4Zy8HlSNaT0nF -xpQK+tI5RlqyC11TnxdUDCQwPPRh/hdNs7RDQ6lHhmXydD04+Sjjn0nkQCxd8TlB -TwOU6BV4vPF7BonskTMHb6mXxOo+6f7+J5q4beQ7XzRSoFqLZ0kiump7B4m6L4WS -qZmcfi8f6EOQZHK1HsTB2jE+cwaPm7vNeNaKXYM6hHojZ7XnDavv4vMxfLRGGx5e -6wNcZexD4t4pkMwmA+A576t5CnIm8JVB2HLj2YZN6DfIfYQ9EcMYSYVLg/EuivPa -MZIoIa9ki5TbeQDANluJqAG+i+CSoIfJX1V1p0WoeSEKJnGBhVFmajU+nek1lCqe -M/VXQF4dWbFCQm8/eKl1M9PY77dwT90xRZDeigM6o6CoB+6rfePAnwsmtA21LyQ9 -WMTCH9qii9SvlWkfCvLK3HnC/2d1ctwsF8yoc6KF+Qwj7RV23/iHYqjxB8OcOAyH -uv+k0sD9o0MLlzAExOftLPkwyWS8ePs7rJVLSA42N3diUYx5TO3NzmU8ifn4hGxb -F9J/sIYQUfCxH9V+DBe2vhVSZ/bQKpVUZTE8KxINL32JvTR3HbEwHKIe0xIFnDOM -GrWP7icPEsaSKj/0vEq/Is/R2nJWfD0Vzs7vil9zYU16vHQtZrv/5SzavzDRFGxL -m7/jDfrzMuNRdQARAQABiQIlBBgBAgAPBQJSx/43AhsMBQkJZgGAAAoJEKlVMkX9 -6bc5cYEQAI8xVRdoza/MY9KFJCRiobii4GjxAJqIXXvbY8mM7rvmiLnzfr5msLzS -op7Epse6tkI8QvYXbY+EjXke27J8rM/zqXyqdKJfcqKVzq6fIQyVVsz9o0hwvuSj -kcSgCV2b8XHKbNygSnNh2VJ5YY/zL2x5tsySa3tLukh46ydKWRQqOSMIxMT0TnCO -iTMr5INwGnX68rB0kEuCSUdkzDuyulW2T0oN7Yx4ASgrJixwSu/UNMO/fXvkG0NY -IWeXQcnn0C8zQv/PAfzJ9O+24Md4m6tzVuDpblSRB6E8xQhusysRc4BEHB/G3Ege -3JR/tumT6solJD7pfFDYkC9rAKhTKK9h1b2VpEGxN9o8qwwjtNljLakEYXuWNpCm -ZxKAR4Agg3UY8CGmgsTKyjsfB9iO2+LXCS9uQMAtIHbnr++mPASBEKD6rP8QIyf1 -2fbI9JRNGWcXQVZBGXWmu4UaKOrXBTVzooj2yG7kZmKO0FoIaCqqTUs2/KhnFj2E -Fvym2j1OMrYxOM/pT6w3cv3CwGb1ILOX0qrTQiEpOExSMa21Mi4678jXt6F6NPWG -/lwlgE1WM9i9jIcua+NU5ZJiqQ/rjuSRMB/WFrQy66/jb9wWNp/G6DXrANgdgoC9 -Dq5oviB+dqSXlU5b0atG4ru506mXCHKmOC+wu0oRlGQ/X6iuuDfS -=U+eW +tB1TYW1pIEtlcm9sYSA8a2Vyb2xhc2FAaWtpLmZpPokCcwQTAQgAXQIbAwULCQgH +AgYVCAkKCwIEFgIDAQIeAQIXgAIZARsYaHR0cDovL2h0dHAta2V5cy5nbnVwZy5u +ZXQWIQSO05bjfjjUcaAFMNOpVTJF/em3OQUCWb42mgUJGcI7YwAKCRCpVTJF/em3 +OWNBD/4/N0OO6cA3bmEAum5qmHdcJVcUor9ClY3oY2QWdTyDCmSJLcTZUNsTrYYA +hY5vQsDxG6ZaKiITvhwp9y4PdJmnqqzRfnqnXusSVEsqG3vGHIVlpQj8Vgurr68d +1x2buHGRvRrjBMWR/Ro1TUeNOmM4HStcvjXRTWlHk9VXi9nk+uMQY9n1lXYNChda +0usj7q5QXXFXbOukKrvEZzt4I1tGbSEv7bBIghr5fMAJg8ZqAMDwfqsUKSM38HF4 +leCUgMZS7XuXuEb35ImjR1VYYCb+L2Q/PFqDOEGQpUwyLOzXcU9TaIDjMhNQY19y +DTUjW1YdQtf+3XmQFa4X1Od0jP1PiVJhw1LNCQLOENs+SRqT9s0W8+nP3qjso/LR +T3vR3FcGSw6KrESMFvmwY7EEYGvOpEgaIv8sIJl7un4BoWHYq/2D6jDHK/YmbpgG +J2FIvZZ4vVYixqgrqCh54USpwTaKd4KQpdm4zZMJ2yIznR6+gXxTi2TyUwKFV67y +RY6o5n3jusWuRejB1BI2eXRbFSeZn6IxAG8QLlLHu1R/XBB1dYDkbtYZ5XuAJRTH +qjCL+s/4rjJIUj02dmmtiyObN3bs/48DTQsDqgCYbA2wmbBjT9lPmRWfncBSlqbx +XSRwyXnDql+UIi6wphBdESn5TNVJjWxYQ16ZRYoZlz4tV2bPl4kCHAQQAQoABgUC +WCOB1QAKCRCB/dUuZfDuelcKD/4iggO8sgYYmTf63y2LJhG7e2d3K/cbQ04Pn/iF +b6zBa5kCsLAWHJmWBPlPkQB3HjZ+j1OSs4sHvwuotuVde2cbtzEvuphQRamFSU83 +lakXwXrk00IU7oVEz1Yo9c7IB6pOY0uDgQMIp/Vitm9pomZXAV3S1bYciYuvXdJC +6SaUbyrHzkVgxEV7TSK2XUgMFGnBCIUhqxNA+chkGg6KS715XH8MJyb1Izinsjux +Q07+tquoiYqRhSntTc+bJ83OpSB8bPlqP1FZdc+ypZjq8OEpFIZK8QtK+849vzYw +vORq19mwFAY9y6XZip7YZzSGzn7Q4v3XfVJlIwGrkHSnUkqOmQXGdoSHAiwX3WhU +nPtpYFZQoFFQjm0SsgdPWbqJmmLj2MjHUFbKzl9PVa0INnwp6RxfzNZjU6OxphoI +ocw+2hmXv/lHzb+cwFf8Nae0WOJkCoGwxk9mYA0omhuKJ/WWVvauu+uaswBkeX6O +1Yf1jSrWgK5u+jbDcmZj0kFL0zdB/pBxshngxCA3efPd1e2dJGcPlaoqkwZAtEmG +hwWDj9Gk5IhSX1/Wpv+ke2wprUPzwv7Z5loXroLub2R29FWyHzymwlnts5hSg7kR +1PzxD3iOHFgmnWcBCchf8UWmAjrutZQJZWLTDkzlC6Vj8rkJcgdb0v14zvYVJTWs +Q/hMDYkCHAQSAQoABgUCWCN/ZwAKCRCRAl9JYWN/KLmND/9k8ydscqaMW86NswOC +drJDXuOTDvJJlnLYhgO1+jKQizbHQqnszIVk7KvXY2/K++TdTNdG/+/LosvtIRKb +2DEvV2hPZhc3UxZ2Gnx9ocqjSCfmd9er9EY34WGLtr57eQnu93CJGe10F3qg4rr3 +8zsgQcLXomvKnB2J5oRWBla01DXZhum1uIbehrqDmBUz9YxAIz9adY0AjDyLNvAB +IghkjobLHWhouQaTV1IT6Koixdrj6eKekjRojWVZ7Po5dcUe525NlA1yBJhI9VDF +TLy6DHEwmJJuAQqDpyRILzSDsyQ0B+wBgpGks5reCDZlwAjogLy0O6nV2qYKfVXK +ziHeXPvzLPEfSmkA0ZutLXnJBLNfod4zELLJrPJA27dDdQO4yImoAjjTklyBpHXy +Fp3r5RlDq5yA9VpNkC58KJQZoiplkUNBaQTjYgcYX4LDaU4bEq++CUUEnisIyqPO +KqJPJAvmlm1d2vOMxhzcjxt3xBAvDZ8ibRIXlV296Y56SEBe5UZhyUqpAQBa0zsp +oQm9MdkqoC+IDBTRVnbGSxsw0GiQRpAJyNOlkTzP6z6ySmRIQ1hH1TqXx7TChPqP +tcLHLOnRTY9/v5Kt8APa+qgn/0UVgGcetkarqXNdtq+zD1x9C0DFNURBl0uH/E1E +Dtyx4xI6xCY3jzv0Cb1y9Afrc7Q7U2FtaSBLZXJvbGEgKGh0dHA6Ly93d3cuaWtp +LmZpL2tlcm9sYXNhLykgPGtlcm9sYXNhQGlraS5maT6JAlYEEwECAEACGwMHCwkI +BwMCAQYVCAIJCgsEFgIDAQIeAQIXgBYhBI7TluN+ONRxoAUw06lVMkX96bc5BQJZ +vjaaBQkZwjtjAAoJEKlVMkX96bc58KYP/jvpHWmoKKFzqClLdDkN8tBo30GgHGoh +WKHbgW859mi/ZcYzTxlx6Dm88QwV5DRulgqAHvLTippncR3LTpL3Ys86ZDoIskF9 +BnWOm/bC+Czl9mDL6BNfFEWWnfeGFsCaMq/Jx8nj8i2o0ezhbTjCeGeng4quWK1D +T6G8Kvnk7Dc+i0n20LUQf2WRCLrtJEl/PMElc+11X/jLm9ypjE/jr24xiNsZck45 +4rdMsdkZqgbSHWNIHyxS66mWmD1vbHp3kq0ic09ISCx/Xc7OQpv7V0hN+lxE+AvA +3Mjp2i7A3ntwUbPwmZkdiWUrBqU4CYee0S4fbgroUjNQ/JhGZmCku5YbcyAg4KrP +quXEftY0HP3qQMMElcwna5ljDQdC9NGuSWkH0OKZsuXlgtIz583wjNTKupzii+jo +AJcNnbdRR4i/U7cI+/ySluTp+Az/odmTNzssGnlsXOSGYWk4o6ruKvU4HzUauMEO +XPrTvI7IlH/GIHvwrOcXAyAU90M0qppC4YjXK8oCawzTnbQVQsbedwoNaEPaD4Bz +N4ka9PtvgKnBzODvOeDsTz1O6vTomttW2C6nficc/PXQvxDkZ3NeJw3eGiiAQxeA +w2Ps3+oIasyQZZVLlvu8dfE2BsPArggPLNgd6bLk3yk/gQGR0D+/TyHuCgPM1nZt +mBG3utrXfMz3iQIcBBABCgAGBQJYI4HVAAoJEIH91S5l8O56YhYQAIfxcRP31w+6 +htYZO5dGS1zF1CReY8VO/AyBa59YJHAlFSbOhqHQY1SAYD+H1IZhv/JCvQScZhyT +giI3KPP1RAPUa1xGZrf4hwl7Yu8ZpFn1Y0Gxd4bj2i9HWJcd1A+ci4kc+dU4rPEB +ac2U06vcIyuyCSjuK2RdYCyd7pQRkoUtZxWen6sxi1khsw3Qucfbr5QZyh/roA4i +hTb3VlFFIiCRcZOAqSYml9a+kbDxpgswbdCE3EMHVYBWtFwWImZOhnsun148H7EA ++b+hAcbkoNpXJOfC8q/EM0qm6C1GhryXe1voLxfeMdKKjXM78dc0z3L/Vz0E+stD +qrT7CG1jLSk/rIjSvRhbnEX/ZTKa+19ytht0B2zxkokjevvzw6cXSM5JjG8Q9k7R +PcPOTS0t7MSwRqCEFvhvswH3JYy0SH0U2nKbPmkY1Awh6BZNyGpf3dxHV648RVZv +lrXUbXv1azD8U+llaMkVx0PTbej0RcRHQM6B5zJ0qu1MC64V/v2uUK3MNl38JdFa +wkB494uf024FRIfJlQ8+WYrsGlHbUBZZsWzsyrPaeaqL0Xcy+hOc7wu7cZPxkqL8 +71O3jbq2dFkBWA4ANsiRdJTh14qoen4YVdc9gjq6HsuFyu0gauDktLaLUHVCX27e +kWThHNxeNoGkcKKHoQdHrN8sII8C1q6fiQIcBBIBCgAGBQJYI39nAAoJEJECX0lh +Y38oIbEP/165gMnaD+g7cfGsHCHQk9/ZrE+4iXfZSwxlhaJ4kK88Ad/tPvoiOxmS +NaUIfH/koGBQNeE/OjjIkPiGlsldg9//4mGmSglM4jLeQBG0QuTLo30aNCl9xU6q +rv9PV/ROfjRUF5NxCAiDdA24uBZ8CftdK5sglD6fazeINQyNk5Wm8e7Jk9PRzIuK +jnZRyaGJl3egx5smWnCZZ8QfjsYXDzbp1uDavmF7Qczp+xbzBhdh6VdSZ0VwvnPr +kN3CzGiR3AuG982R41UGZQ3a+3d38QnmX8cdT1yCqJLrSh4+AJbuGrndOqxBhTN0 +VQBIGHteZ6ezxDHs4kVBwfSc3XOzNimJKFVxWCJDXZQojKawu7PaDPYGxU9OWAjs +OWtJFTGqeEiBDQbnLwncT5l/I1O1zv9MIFhQ4MgJeRbvG/QjuLrP6RoIMGZLkX6K +o35dZ6gO/XAdhJmOhfon6Q5/RPdB11e/UkM58xZMbQLGJ3Gm9vjz039vwMabMjXf +28UE3xKzdzDg8Fb3ykNtIQSFNr/cf5YBZ7KMtfJ6ugExmJQQdWxZLQpHoNNCmknt +OHOajlB628N3J0PKlwPjjt5KveBO2ur/yAly6SSv2Oi/astGscgrJtIyPFKMmKar +gPzEnPv4DfLbHnskHkyzVBrQE16Pmcfx4fAe2LeDIO8KJMqSxKOouQINBFLH/jcB +EADGsDuJyhEGExcInkb4Zy8HlSNaT0nFxpQK+tI5RlqyC11TnxdUDCQwPPRh/hdN +s7RDQ6lHhmXydD04+Sjjn0nkQCxd8TlBTwOU6BV4vPF7BonskTMHb6mXxOo+6f7+ +J5q4beQ7XzRSoFqLZ0kiump7B4m6L4WSqZmcfi8f6EOQZHK1HsTB2jE+cwaPm7vN +eNaKXYM6hHojZ7XnDavv4vMxfLRGGx5e6wNcZexD4t4pkMwmA+A576t5CnIm8JVB +2HLj2YZN6DfIfYQ9EcMYSYVLg/EuivPaMZIoIa9ki5TbeQDANluJqAG+i+CSoIfJ +X1V1p0WoeSEKJnGBhVFmajU+nek1lCqeM/VXQF4dWbFCQm8/eKl1M9PY77dwT90x +RZDeigM6o6CoB+6rfePAnwsmtA21LyQ9WMTCH9qii9SvlWkfCvLK3HnC/2d1ctws +F8yoc6KF+Qwj7RV23/iHYqjxB8OcOAyHuv+k0sD9o0MLlzAExOftLPkwyWS8ePs7 +rJVLSA42N3diUYx5TO3NzmU8ifn4hGxbF9J/sIYQUfCxH9V+DBe2vhVSZ/bQKpVU +ZTE8KxINL32JvTR3HbEwHKIe0xIFnDOMGrWP7icPEsaSKj/0vEq/Is/R2nJWfD0V +zs7vil9zYU16vHQtZrv/5SzavzDRFGxLm7/jDfrzMuNRdQARAQABiQIlBBgBAgAP +BQJSx/43AhsMBQkJZgGAAAoJEKlVMkX96bc5cYEQAI8xVRdoza/MY9KFJCRiobii +4GjxAJqIXXvbY8mM7rvmiLnzfr5msLzSop7Epse6tkI8QvYXbY+EjXke27J8rM/z +qXyqdKJfcqKVzq6fIQyVVsz9o0hwvuSjkcSgCV2b8XHKbNygSnNh2VJ5YY/zL2x5 +tsySa3tLukh46ydKWRQqOSMIxMT0TnCOiTMr5INwGnX68rB0kEuCSUdkzDuyulW2 +T0oN7Yx4ASgrJixwSu/UNMO/fXvkG0NYIWeXQcnn0C8zQv/PAfzJ9O+24Md4m6tz +VuDpblSRB6E8xQhusysRc4BEHB/G3Ege3JR/tumT6solJD7pfFDYkC9rAKhTKK9h +1b2VpEGxN9o8qwwjtNljLakEYXuWNpCmZxKAR4Agg3UY8CGmgsTKyjsfB9iO2+LX +CS9uQMAtIHbnr++mPASBEKD6rP8QIyf12fbI9JRNGWcXQVZBGXWmu4UaKOrXBTVz +ooj2yG7kZmKO0FoIaCqqTUs2/KhnFj2EFvym2j1OMrYxOM/pT6w3cv3CwGb1ILOX +0qrTQiEpOExSMa21Mi4678jXt6F6NPWG/lwlgE1WM9i9jIcua+NU5ZJiqQ/rjuSR +MB/WFrQy66/jb9wWNp/G6DXrANgdgoC9Dq5oviB+dqSXlU5b0atG4ru506mXCHKm +OC+wu0oRlGQ/X6iuuDfS +=fVwo -----END PGP PUBLIC KEY BLOCK----- From 58a31513fe3265533b5274325b5fbccd92ed164e Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 23 Sep 2017 08:17:38 +0100 Subject: [PATCH 049/158] release: 2.29 Signed-off-by: Sami Kerola --- NEWS | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 85f09a7..2700f4b 100644 --- a/NEWS +++ b/NEWS @@ -5,7 +5,64 @@ See the end for copying conditions. Please send dhcpd-pools bug reports to kerolasa@iki.fi. -gpg: Signature is crated using RSA key ID FDE9B739. +gpg: Signature is crated using RSA key ID 8ED396E37E38D471A00530D3A9553245FDE9B739. + + +Version 2.29 +Boris Lytochkin (1): + introduce -A arg: treat single subnets as shared-network with CIDR as their name + +Manuel Hachtkemper (1): + alarming: add additional performance data + +Sami Kerola (47): + tell in README when ./bootstrap is needed + add dhcpd-pools website content to a subdirectory + add sitemap url to robots.txt file + use long options in .indent.pro file + webpages: make index page mobile device friendly + webpages: compress sitemap.txt file + getdata: flip ranges if they are in greater smaller order + tests: add range definition flip test + contrib: add archlinux package build file + contrib: remove unnecessary cgi script + contrib: remove awk file duplicate + getdata: get rid of remaining stdbool usage + argument parsing: fix compiler warning + add dhcpd-pools Description Of A Project file + fix doap file git repository and license section + output: check alarming mode can output successfully + build-sys: update bootstrap from gnulib + build-sys: update gnulib .gitignore file + analyze: use while() when for() is less fit to purpose + build-sys: default to ./configure --enable-silent-rules + build-sys: always use restrict found by autoconf + docs: fix couple typos and improve a sentence in README + output: remove unnecessary increment + portability: add gnulib modules earlier missing + remove const and pure function attributes + man: improve synopsis and output limit + man: remove old html table only option argument from manual + getdata: report position in config file when parsing fails + output: fix timestamp localization on html page + output: add include avoid referringt to undefined definition + getdata: remove POSIX_FADV_NOREUSE + style: use same argument names in header and source file + contrib: Klaus Slott told about opensuse package + getdata: fpos_t is not easy to print correctly + lib: update .gitignore + fix typo + variable: add const to print_mac_addreses_tmp + lib: update .gitignore + add --ip-version option to force either IPv4 or IPv6 analysis + lib: update .gitignore + getdata: add cidr range support + build-sys: update bootstrap from gnulib + docs: update doxygen configuration file + docs: tell what needs to be done when releasing new version + docs: add build instruction link to the project web page + docs: update maintainer gpg key + release: 2.29 Version 2.28 Sami Kerola (26): From 548ce63963e10523187589abad9dd0d2aef48d72 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 23 Sep 2017 08:29:48 +0100 Subject: [PATCH 050/158] release: update web page meta data This should have been done before tag. Signed-off-by: Sami Kerola --- TODO | 3 ++- webpages/index.html | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/TODO b/TODO index ebc6e9b..7a7b5aa 100644 --- a/TODO +++ b/TODO @@ -19,11 +19,12 @@ o Add lease time histogram support. o Update gnulib o Update bootstrap +o Update NEWS, webpages/index.html dateModified & version (remove old + doxygen before uploading new). o Make annotated git tag o ./configure --enable-doxygen && make distcheck o gpg --armor --detach-sign dhcpd-pools*tar* o Upload files to sourceforge o mv doc/html webpages/doxygen o PAGER=cat man -H ./man/dhcpd-pools.1 | tee ./webpages/man.html -o Update webpages/index.html dateModified & version (remove old doxygen before uploading new) o Send email to dhcpd-pools-announce@lists.sourceforge.net subject: Version 2.nn is released diff --git a/webpages/index.html b/webpages/index.html index e3d5864..82fe9a0 100644 --- a/webpages/index.html +++ b/webpages/index.html @@ -89,8 +89,8 @@ that is maintained by Trond Hasle Amundsen.

<kerolasa@iki.fi>

-Sun Dec 6 17:49:17 GMT 2015 -2.28 +Sat Sep 23 08:28:26 BST 2017 +2.29 FreeBSD License
From 9deeae8c366c7410bebf026b334b70ba79cda1d3 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 23 Sep 2017 09:18:35 +0100 Subject: [PATCH 051/158] update sitemap Signed-off-by: Sami Kerola --- webpages/robots.txt | 2 +- webpages/sitemap.txt | 2052 +++++++++++++++++++++++++++++++++++++++ webpages/sitemap.txt.gz | Bin 2191 -> 0 bytes 3 files changed, 2053 insertions(+), 1 deletion(-) create mode 100644 webpages/sitemap.txt delete mode 100644 webpages/sitemap.txt.gz diff --git a/webpages/robots.txt b/webpages/robots.txt index 796dbd6..25e6762 100644 --- a/webpages/robots.txt +++ b/webpages/robots.txt @@ -1,3 +1,3 @@ -Sitemap: http://dhcpd-pools.sourceforge.net/sitemap.txt.gz +Sitemap: http://dhcpd-pools.sourceforge.net/sitemap.txt User-agent: * Disallow: diff --git a/webpages/sitemap.txt b/webpages/sitemap.txt new file mode 100644 index 0000000..7114d61 --- /dev/null +++ b/webpages/sitemap.txt @@ -0,0 +1,2052 @@ +http://dhcpd-pools.sourceforge.net/ +http://dhcpd-pools.sourceforge.net/dhcpd-pools.awk +http://dhcpd-pools.sourceforge.net/man.html +http://dhcpd-pools.sourceforge.net/sampleoutput.txt +http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_a367dd14828b91673777c2c4223580349_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_a367dd14828b91673777c2c4223580349_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_a367dd14828b91673777c2c4223580349_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/annotated.html +http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/bc_s.png +http://dhcpd-pools.sourceforge.net/doxygen/bdwn.png +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/classes.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/close_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/closed.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/config_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a136654209abbb18131b1fa16e6226bd6_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a136654209abbb18131b1fa16e6226bd6_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a136654209abbb18131b1fa16e6226bd6_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a136654209abbb18131b1fa16e6226bd6_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a136654209abbb18131b1fa16e6226bd6_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a136654209abbb18131b1fa16e6226bd6_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a19952e74e024d455578db51ddde0c889_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a19952e74e024d455578db51ddde0c889_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a19952e74e024d455578db51ddde0c889_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a25ca605983446a21da7359aa7fa243f9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a25ca605983446a21da7359aa7fa243f9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a25ca605983446a21da7359aa7fa243f9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3d9a782b263a4e3f07d9666628ff8e41_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3d9a782b263a4e3f07d9666628ff8e41_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3d9a782b263a4e3f07d9666628ff8e41_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a4e76c4237bbe96272bac63f591199eb2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a4e76c4237bbe96272bac63f591199eb2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a4e76c4237bbe96272bac63f591199eb2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a6ddedfa093b006537c291f1e6538bb9b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a6ddedfa093b006537c291f1e6538bb9b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a6ddedfa093b006537c291f1e6538bb9b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a7a4f150597a1a15704a4c77330cf376b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a7a4f150597a1a15704a4c77330cf376b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a7a4f150597a1a15704a4c77330cf376b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a97ef409fb9cabe07ea1faf83d6e98f36_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a97ef409fb9cabe07ea1faf83d6e98f36_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a97ef409fb9cabe07ea1faf83d6e98f36_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa7a92db4e2584e419af19ffb6e56ecd9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa7a92db4e2584e419af19ffb6e56ecd9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa7a92db4e2584e419af19ffb6e56ecd9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac486c5c99a86bde979068caedf66464c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac486c5c99a86bde979068caedf66464c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac486c5c99a86bde979068caedf66464c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac91da245635c0c189b64c64b5c083ec4_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac91da245635c0c189b64c64b5c083ec4_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac91da245635c0c189b64c64b5c083ec4_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af088ebe63395c5d93e2d025f9994816b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af088ebe63395c5d93e2d025f9994816b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af088ebe63395c5d93e2d025f9994816b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af82eaad913c94241ab70ee489a15fd22_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af82eaad913c94241ab70ee489a15fd22_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af82eaad913c94241ab70ee489a15fd22_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.map +http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.png +http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.map +http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.png +http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.map +http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/doc.png +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/doxygen.css +http://dhcpd-pools.sourceforge.net/doxygen/doxygen.png +http://dhcpd-pools.sourceforge.net/doxygen/dynsections.js +http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/filename_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/filename_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/files.html +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/float_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/folderclosed.png +http://dhcpd-pools.sourceforge.net/doxygen/folderopen.png +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/functions.html +http://dhcpd-pools.sourceforge.net/doxygen/functions_func.html +http://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a4b988695a22a646e6482a7e7b4694cc7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a4b988695a22a646e6482a7e7b4694cc7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a4b988695a22a646e6482a7e7b4694cc7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5ca869af07888cb04c2194e50ba26bd4_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5ca869af07888cb04c2194e50ba26bd4_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5ca869af07888cb04c2194e50ba26bd4_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/globals.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_a.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_b.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_d.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_e.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_f.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_b.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_g.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_h.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_i.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_k.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_l.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_m.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_n.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_o.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_p.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_q.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_r.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_s.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_t.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_type.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_u.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_v.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_w.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_x.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_y.html +http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html +http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.md5 +http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.png +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a4e76c4237bbe96272bac63f591199eb2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a4e76c4237bbe96272bac63f591199eb2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a4e76c4237bbe96272bac63f591199eb2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/index.html +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/jquery.js +http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/locale_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/locale_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/locale_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/locale_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/locale_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/locale_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/locale_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/localeconv_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/localeconv_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/localeconv_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localeconv_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/math_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/menu.js +http://dhcpd-pools.sourceforge.net/doxygen/menudata.js +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/nav_f.png +http://dhcpd-pools.sourceforge.net/doxygen/nav_g.png +http://dhcpd-pools.sourceforge.net/doxygen/nav_h.png +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_a3ddc67b70c406ca689a2dc5905cd3b66_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_a3ddc67b70c406ca689a2dc5905cd3b66_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_a3ddc67b70c406ca689a2dc5905cd3b66_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_abf836a27b312d6dd8a2fc87b0f2ba451_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_abf836a27b312d6dd8a2fc87b0f2ba451_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_abf836a27b312d6dd8a2fc87b0f2ba451_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a656c0014bca06d6d9fd748a2f9dc4ab9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a656c0014bca06d6d9fd748a2f9dc4ab9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a656c0014bca06d6d9fd748a2f9dc4ab9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/open.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a19952e74e024d455578db51ddde0c889_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a19952e74e024d455578db51ddde0c889_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a19952e74e024d455578db51ddde0c889_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a54dbbe157750755e28f856b415ff16ec_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a54dbbe157750755e28f856b415ff16ec_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a54dbbe157750755e28f856b415ff16ec_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac486c5c99a86bde979068caedf66464c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac486c5c99a86bde979068caedf66464c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac486c5c99a86bde979068caedf66464c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adca513ff26c3cba2e7ea74c64bf59fd8_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adca513ff26c3cba2e7ea74c64bf59fd8_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adca513ff26c3cba2e7ea74c64bf59fd8_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af088ebe63395c5d93e2d025f9994816b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af088ebe63395c5d93e2d025f9994816b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af088ebe63395c5d93e2d025f9994816b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af82eaad913c94241ab70ee489a15fd22_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af82eaad913c94241ab70ee489a15fd22_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af82eaad913c94241ab70ee489a15fd22_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a25ca605983446a21da7359aa7fa243f9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a25ca605983446a21da7359aa7fa243f9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a25ca605983446a21da7359aa7fa243f9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a291834e7b08c27936c2ed4c61baef3a3_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a291834e7b08c27936c2ed4c61baef3a3_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a291834e7b08c27936c2ed4c61baef3a3_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6ddedfa093b006537c291f1e6538bb9b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6ddedfa093b006537c291f1e6538bb9b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6ddedfa093b006537c291f1e6538bb9b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a7a4f150597a1a15704a4c77330cf376b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a7a4f150597a1a15704a4c77330cf376b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a7a4f150597a1a15704a4c77330cf376b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a27e69f6fec7e64d52e1fdc49c8c813d0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a27e69f6fec7e64d52e1fdc49c8c813d0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a27e69f6fec7e64d52e1fdc49c8c813d0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d9e24bfed149261c782fcab4ce8692a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d9e24bfed149261c782fcab4ce8692a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d9e24bfed149261c782fcab4ce8692a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3326aee231570141ab97e7f6b41248a2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3326aee231570141ab97e7f6b41248a2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3326aee231570141ab97e7f6b41248a2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/search +http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/close.png +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.js +http://dhcpd-pools.sourceforge.net/doxygen/search/mag_sel.png +http://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html +http://dhcpd-pools.sourceforge.net/doxygen/search/search.css +http://dhcpd-pools.sourceforge.net/doxygen/search/search.js +http://dhcpd-pools.sourceforge.net/doxygen/search/search_l.png +http://dhcpd-pools.sourceforge.net/doxygen/search/search_m.png +http://dhcpd-pools.sourceforge.net/doxygen/search/search_r.png +http://dhcpd-pools.sourceforge.net/doxygen/search/searchdata.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.js +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a61fbbba1c5ed14bc82d9b4cefdde14f7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a61fbbba1c5ed14bc82d9b4cefdde14f7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a61fbbba1c5ed14bc82d9b4cefdde14f7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/splitbar.png +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html +http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html +http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/structiovec.html +http://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html +http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/structoption.html +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html +http://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html +http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html +http://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html +http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html +http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/sync_off.png +http://dhcpd-pools.sourceforge.net/doxygen/sync_on.png +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/tab_a.png +http://dhcpd-pools.sourceforge.net/doxygen/tab_b.png +http://dhcpd-pools.sourceforge.net/doxygen/tab_h.png +http://dhcpd-pools.sourceforge.net/doxygen/tab_s.png +http://dhcpd-pools.sourceforge.net/doxygen/tabs.css +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/types_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html +http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html +http://dhcpd-pools.sourceforge.net/doxygen/unionrpl__max__align__t.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_abb353ec32fd152026c853fea429fe857_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_abb353ec32fd152026c853fea429fe857_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_abb353ec32fd152026c853fea429fe857_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a69334a531533dbafdeb52429a03a8db7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a69334a531533dbafdeb52429a03a8db7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a69334a531533dbafdeb52429a03a8db7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.png diff --git a/webpages/sitemap.txt.gz b/webpages/sitemap.txt.gz deleted file mode 100644 index 354ae7ba4036d51be722928dc0b6f6696733b612..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2191 zcmV;A2ypiwiwFp6Uu9MT19NF~Wo=<_E_8Tw0Ii+ta;qu>hW~%}lGP?Lr|)JQ1Po3U zT!=aJ>Njc*rrk5UeP7meRy%E;hZhheo?=31|Nr);jBM4Sb*}FIbguVOm(CycAFIRL z|IB~CX8t#E{`d*f2>Zu`rvAxmJJGbYc7163@F!ftk0QCt^{DNesB0%hzBfNE?Hid- zuYd)WWr`nZID!@R^;742382;m5w!X}>5mKRtnKR>s`v{I*W9-v&#U+=xC6c#&?s^t z!?lGv;ei?g#dCMTOVNSFKVdq6Y+9`KZoK|WRbj-bN?4{A`THS$DP49@EnaZA7PaU) z-2t5I^w0uYG*IPVc*F8|^#S&?QS?O7{@31HhpxWnFcH9cWcb`b1A}nlOBG5{)lldMYZw-dUc&pxQrZBe zzJqw=k;gXBISdC-3*+1e)M$6q5GbD8wc0|l%ewCjL{>Gh{w!-J!mt8H+Ud!{4K*r| z+D;(2Y0h9cIo!jMQ(E|9$C49h3+Hsd7YJ8Yb9l$$fx~+aKXLel!|}Ze zKGgA1jt_8r!HLfb_=JGZ1^6_8&j9$~$HzTB5ZD2`8;q}Z@hJ(I zjl5`0UhDYt?-x!+V5fj8tMmn+G;}!a#-Yd3Mm%qWvshI_>s{Mn!5=IhK6t14@c?wb zkH7uBp|b+3`2Z@IEMXElu}}q9Lt$%SkCiPQ(!nzp?ck>ZJK+9>hhsP?YH8wpsiCt5 zue@P-xEkm=v}U}@8z%*Y8UjU|su96pp$E>O92XZGBQq8*zVN}Fu??i?DqBILs?m)! z(1laY$8i2=5qBTjTLE3v^IZWq-e`iV(Vb*Wa1u338;*vnK1i$!#=A3Ig$Hj~9<4_F zd0Ivdg9sah-xX+>SQ`xuis{BBglyvs(ufOE?wuoDVOTV}*YH}Ti$zN_+_9FwGw_mvxuUtUR}{Ub=!~K_6uqVB9YyaMn(8pB zzo_n_dW-5Ts;{W7Ixw(c;DUjvX;d+=X5bQqZ+8gddw{!O$qH7iV9g3LRcbd1KkaDFYH+X zJu?YbP_P2Y3KT2QtN>oA3|H3?dxr^Ma`=kF*BqX4_=dqxqV6@>{5Qukfn$}xu}W=_IaqM+W;Jr&CYiWD(YOb1Pte7FPJUoFTRceg62;DW z=rUULabpu_P!6tUP@=Am@FmY*cp^p-UqGao;Y5hI+95JLX(Gb-NG~|TlV&2gMb)%5 z8sR}x5#ZAKg7MaOeB;+u0hT_IY|(J#pEMq!wX(fp)2CmAvs;{phshZd$MbvDw_tqi zb0h8`5qW%$^unFu_eyCr{TGQzB4KL zUWPpW8#^G6KQ?_A|1b3Th)sR;qFyw*DKzk~g&)~r>-|Zf!vk39h;tbznLZGs_hP)A zKM!Q4uR2gu#YshyQAP*I)>;gg8Pm=2@PK^N9gXs2h)Dv%ar=rrNhX*iC_LRFnGf&q z*c>wzs2J|18|J=zs#8ZM`lVe=C1iYe(mxVydIsw z@RBS#^82AU$>HG2@|%LIOAus~Ad&=`I)(@`6L3MU?Qo=@Nis7~QF`Lo%`1<_pdUz* z>Tx9KpeM&WvsEV8AgA|N&|AP8`iZhf=o2Szo4$cTw559N_-aobUF~gLkyh=r#=w_y zuNn*=o>r1iCob3|FDg)>8|Sa_ZMW--T9a{JT!^C!&_m|#q`^sI!x{zH#PdSq5%9B| zz3n?4UnIO}qQqmB_~t;Xa?-vkp`+*z5-s{Hyj?iE=&{d%e#PMs!!!Dz;%^{XFt!!X zVLZUFUs*uU%say$9)4y&JNzy{8*WCU5iaBNj25bbP8;0l;lxK*eQIbD{TByU89W42 R^p}TJ{sY>yYmzjA004vGJ_G;& From abf5d04736fbed4ec21f8a1f278ffcafdb4bfe74 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 5 Nov 2017 09:49:45 +0000 Subject: [PATCH 052/158] output: make output_analysis() to be regular function This commit makes it possible to define alarming thresholds at the same time with other output formats. Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 72 ++++++++++++++--------------------------------- src/dhcpd-pools.h | 14 +++------ src/getdata.c | 7 ++--- src/output.c | 54 +++++++++++++++++++++++++++++------ 4 files changed, 73 insertions(+), 74 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 4f6f22b..09eb137 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -73,7 +73,6 @@ double (*get_range_size) (const struct range_t *r); int (*xstrstr) (const char *restrict str); int (*ipcomp) (const union ipaddr_t *restrict a, const union ipaddr_t *restrict b); int (*leasecomp) (const struct leases_t *restrict a, const struct leases_t *restrict b); -int (*output_analysis) (void); void (*add_lease) (union ipaddr_t *ip, enum ltype type); struct leases_t *(*find_lease) (union ipaddr_t *ip); @@ -99,8 +98,9 @@ static int return_limit(const char c) int main(int argc, char **argv) { int option_index = 0; + char output_format = '\0'; + int alarming = 0; char const *tmp; - const char *print_mac_addreses_tmp; struct range_t *tmp_ranges; enum { OPT_SNET_ALARMS = CHAR_MAX + 1, @@ -159,8 +159,6 @@ int main(int argc, char **argv) config.header_limit = (*tmp - '0'); tmp++; config.number_limit = (*tmp - '0'); - /* Make sure some output format is selected by default */ - print_mac_addreses_tmp = OUTPUT_FORMAT; /* Default sort order is by IPs small to big */ config.reverse_order = 0; config.backups_found = 0; @@ -186,7 +184,7 @@ int main(int argc, char **argv) break; case 'f': /* Output format */ - print_mac_addreses_tmp = optarg; + output_format = optarg[0]; break; case 's': { @@ -225,19 +223,19 @@ int main(int argc, char **argv) config.snet_alarms = 1; break; case OPT_WARN: - print_mac_addreses_tmp = "a"; + alarming = 1; config.warning = strtod_or_err(optarg, "illegal argument"); break; case OPT_CRIT: - print_mac_addreses_tmp = "a"; + alarming = 1; config.critical = strtod_or_err(optarg, "illegal argument"); break; case OPT_WARN_COUNT: - print_mac_addreses_tmp = "a"; + alarming = 1; config.warn_count = strtod_or_err(optarg, "illegal argument"); break; case OPT_CRIT_COUNT: - print_mac_addreses_tmp = "a"; + alarming = 1; config.crit_count = strtod_or_err(optarg, "illegal argument"); break; case OPT_MINSIZE: @@ -274,50 +272,22 @@ int main(int argc, char **argv) program_name); } } - /* Output function selection */ - switch (print_mac_addreses_tmp[0]) { - case 't': - output_analysis = output_txt; - config.print_mac_addreses = 0; - break; - case 'a': - output_analysis = output_alarming; - config.print_mac_addreses = 0; - break; - case 'h': - error(EXIT_FAILURE, 0, "html table only output format is deprecated"); - break; - case 'H': - output_analysis = output_html; - config.print_mac_addreses = 0; - break; - case 'x': - output_analysis = output_xml; - config.print_mac_addreses = 0; - break; - case 'X': - output_analysis = output_xml; - config.print_mac_addreses = 1; - break; - case 'j': - output_analysis = output_json; - config.print_mac_addreses = 0; - break; - case 'J': - output_analysis = output_json; - config.print_mac_addreses = 1; - break; - case 'c': - output_analysis = output_csv; - config.print_mac_addreses = 0; - break; - default: - clean_up(); - error(EXIT_FAILURE, 0, "unknown output format: %s", quote(print_mac_addreses_tmp)); + /* Output format is not defined, if alarm thresholds are then it's + * alarming, else use the default. */ + if (output_format == '\0') { + if (alarming == 1) + output_format = 'a'; + else { + const char *const def = OUTPUT_FORMAT; + output_format = def[0]; + } } /* Do the job */ parse_config(1, config.dhcpdconf_file, shared_networks); - parse_leases(); + if (output_format == 'X' || output_format == 'J') + parse_leases(1); + else + parse_leases(0); prepare_data(); do_counting(); tmp_ranges = xmalloc(sizeof(struct range_t) * num_ranges); @@ -326,7 +296,7 @@ int main(int argc, char **argv) if (config.reverse_order == 1) flip_ranges(ranges, tmp_ranges); free(tmp_ranges); - ret_val = output_analysis(); + ret_val = output_analysis(output_format); clean_up(); return (ret_val); } diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 47e246e..5ca3154 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -186,6 +186,7 @@ struct configuration_t { enum dhcp_version ip_version; char *dhcpdconf_file; char *dhcpdlease_file; + int output_format; struct output_sort *sorts; char *output_file; double warning; @@ -197,7 +198,6 @@ struct configuration_t { reverse_order:1, backups_found:1, snet_alarms:1, - print_mac_addreses:1, perfdata:1, all_as_shared:1, header_limit:3, @@ -224,7 +224,7 @@ extern unsigned int RANGES; /* Function prototypes */ extern void prepare_memory(void); extern void set_ipv_functions(int version); -extern int parse_leases(void); +extern int parse_leases(const int print_mac_addreses); extern void parse_config(int, const char *restrict, struct shared_network_t *restrict) __attribute__ ((nonnull(2, 3))); extern void prepare_data(void); @@ -301,14 +301,8 @@ extern double ret_tcperc(struct range_t r); extern void mergesort_ranges(struct range_t *restrict orig, int size, struct range_t *restrict temp) __attribute__ ((nonnull(1, 3))); -/* output function pointer and functions */ -extern int (*output_analysis) (void); -extern int output_txt(void); -extern int output_html(void); -extern int output_xml(void); -extern int output_json(void); -extern int output_csv(void); -extern int output_alarming(void); +/* output function */ +extern int output_analysis(const char); /* Memory release, file closing etc */ extern void clean_up(void); /* Hash functions */ diff --git a/src/getdata.c b/src/getdata.c index 6f53b1a..890b241 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -58,13 +58,12 @@ /*! \brief Lease file parser. The parser can only read ISC DHCPD * dhcpd.leases file format. */ -int parse_leases(void) +int parse_leases(const int print_mac_addreses) { FILE *dhcpd_leases; char *line, *ipstring, macstring[20], *stop; union ipaddr_t addr; struct stat lease_file_stats; - int ethernets = 0; /* boolean */ struct leases_t *lease; dhcpd_leases = fopen(config.dhcpdlease_file, "r"); @@ -86,8 +85,6 @@ int parse_leases(void) line[0] = '\0'; ipstring = xmalloc(sizeof(char) * MAXLEN); ipstring[0] = '\0'; - if (config.print_mac_addreses == 1) - ethernets = 1; while (!feof(dhcpd_leases)) { if (!fgets(line, MAXLEN, dhcpd_leases) && ferror(dhcpd_leases)) error(EXIT_FAILURE, errno, "parse_leases: %s", config.dhcpdlease_file); @@ -126,7 +123,7 @@ int parse_leases(void) config.backups_found = 1; break; case PREFIX_HARDWARE_ETHERNET: - if (ethernets == 0) + if (print_mac_addreses == 0) break; memcpy(macstring, line + 20, 17); macstring[17] = '\0'; diff --git a/src/output.c b/src/output.c index 407b2a8..eb066e5 100644 --- a/src/output.c +++ b/src/output.c @@ -59,7 +59,7 @@ #include "dhcpd-pools.h" /*! \brief Text output format, which is the default. */ -int output_txt(void) +static int output_txt(void) { unsigned int i; struct range_t *range_p; @@ -214,7 +214,7 @@ int output_txt(void) } /*! \brief The xml output formats. */ -int output_xml(void) +static int output_xml(const int print_mac_addreses) { unsigned int i; struct range_t *range_p; @@ -238,7 +238,7 @@ int output_xml(void) fprintf(outfile, "\n"); - if (config.print_mac_addreses == 1) { + if (print_mac_addreses == 1) { struct leases_t *l; for (l = leases; l != NULL; l = l->hh.next) { @@ -317,7 +317,7 @@ int output_xml(void) } /*! \brief The json output formats. */ -int output_json(void) +static int output_json(const int print_mac_addreses) { unsigned int i = 0; struct range_t *range_p; @@ -343,7 +343,7 @@ int output_json(void) fprintf(outfile, "{\n"); - if (config.print_mac_addreses == 1) { + if (print_mac_addreses == 1) { struct leases_t *l; fprintf(outfile, " \"active_leases\": ["); @@ -595,7 +595,7 @@ static void newsection(FILE *restrict f, char const *restrict title) } /*! \brief Output html format. */ -int output_html(void) +static int output_html(void) { unsigned int i; struct range_t *range_p; @@ -783,7 +783,7 @@ int output_html(void) } /*! \brief Output cvs format. */ -int output_csv(void) +static int output_csv(void) { unsigned int i; struct range_t *range_p; @@ -925,7 +925,7 @@ int output_csv(void) } /*! \brief Output alarm text, and return program exit value. */ -int output_alarming(void) +static int output_alarming(void) { FILE *outfile; struct range_t *range_p; @@ -1093,3 +1093,41 @@ int output_alarming(void) } return ret_val; } + +/*! \brief Return output_format_names enum based on single char input. */ +int output_analysis(const char c) +{ + int ret = 1; + switch (c) { + case 't': + ret = output_txt(); + break; + case 'a': + ret = output_alarming(); + break; + case 'h': + error(EXIT_FAILURE, 0, "html table only output format is deprecated"); + break; + case 'H': + ret = output_html(); + break; + case 'x': + ret = output_xml(0); + break; + case 'X': + ret = output_xml(1); + break; + case 'j': + ret = output_json(0); + break; + case 'J': + ret = output_json(1); + break; + case 'c': + ret = output_csv(); + break; + default: + error(EXIT_FAILURE, 0, "unknown output format: '%c'", c); + } + return ret; +} From 05f8208518a5a5d4fa0540a05a0edff1aed79536 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 5 Nov 2017 10:01:07 +0000 Subject: [PATCH 053/158] getdata: fix typo Signed-off-by: Sami Kerola --- src/dhcpd-pools.h | 2 +- src/getdata.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 5ca3154..7e067c0 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -129,7 +129,7 @@ enum isc_conf_parser { ITS_A_RANGE_FIRST_IP, ITS_A_RANGE_SECOND_IP, ITS_A_SHAREDNET, - ITS_AN_INCLUCE, + ITS_AN_INCLUDE, ITS_A_SUBNET, ITS_A_NETMASK }; diff --git a/src/getdata.c b/src/getdata.c index 890b241..eb92c66 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -157,7 +157,7 @@ static int is_interesting_config_clause(char const *restrict s) return ITS_A_NETMASK; } if (strstr(s, "include")) - return ITS_AN_INCLUCE; + return ITS_AN_INCLUDE; return ITS_NOTHING_INTERESTING; } @@ -235,7 +235,7 @@ void parse_config(int is_include, const char *restrict config_file, break; if (comment == 0 && argument != ITS_A_RANGE_FIRST_IP - && argument != ITS_A_RANGE_SECOND_IP && argument != ITS_AN_INCLUCE) { + && argument != ITS_A_RANGE_SECOND_IP && argument != ITS_AN_INCLUDE) { newclause = 1; i = 0; } else if (argument == ITS_A_RANGE_FIRST_IP && one_ip_range == 1) { @@ -416,7 +416,7 @@ void parse_config(int is_include, const char *restrict config_file, argument = ITS_NOTHING_INTERESTING; braces_shared = braces; break; - case ITS_AN_INCLUCE: + case ITS_AN_INCLUDE: /* printf ("include file: %s\n", word); */ argument = ITS_NOTHING_INTERESTING; parse_config(0, word, shared_p); From 48962004b82d659893ecc2b552d28f355f8e3a2c Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 5 Nov 2017 15:05:35 +0000 Subject: [PATCH 054/158] output: add output helper functions There is too much repetative confusing maths near printouts. Move that stuff to a function. This change also fixes --snet-alarms option counting issue in range that were not part of any shared network were ignored. Signed-off-by: Sami Kerola --- src/dhcpd-pools.h | 21 +++ src/output.c | 287 +++++++++++++++++------------- tests/expected/alarm-count-option | 2 +- 3 files changed, 184 insertions(+), 126 deletions(-) diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 7e067c0..50d9a54 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -121,6 +121,27 @@ struct range_t { double touched; double backups; }; +/*! \enum count_status_t + * \brief Enumeration of possible range and shared net statuses. + */ +enum count_status_t { + STATUS_OK, + STATUS_WARN, + STATUS_CRIT, + STATUS_IGNORED, + STATUS_SUPPRESSED +}; +/*! \struct output_helper_t + * \brief Various per range and shared net temporary calculation results. + */ +struct output_helper_t { + int status; + double range_size; + double percent; + double tc; + double tcp; + double bup; +}; /*! \enum isc_conf_parser * \brief Configuration file parsing state flags. */ diff --git a/src/output.c b/src/output.c index eb066e5..0ef8353 100644 --- a/src/output.c +++ b/src/output.c @@ -58,13 +58,79 @@ #include "dhcpd-pools.h" +/*! \brief Calculate range percentages and such. */ +static void range_output_helper(struct output_helper_t *oh, struct range_t *range_p) +{ + /* counts and calculations */ + oh->range_size = get_range_size(range_p); + oh->percent = (double)(100 * range_p->count) / oh->range_size; + oh->tc = range_p->touched + range_p->count; + oh->tcp = (double)(100 * oh->tc) / oh->range_size; + if (config.backups_found == 1) { + oh->bup = (double)(100 * range_p->backups) / oh->range_size; + } + /* set status */ + if (config.snet_alarms && range_p->shared_net != shared_networks) { + oh->status = STATUS_SUPPRESSED; + return; + } + if (oh->range_size <= config.minsize) { + oh->status = STATUS_IGNORED; + return; + } + if (config.critical < oh->percent + && (oh->range_size - range_p->count) < config.crit_count) { + oh->status = STATUS_CRIT; + return; + } + if (config.warning < oh->percent + && (oh->range_size - range_p->count) < config.warn_count) { + oh->status = STATUS_WARN; + return; + } + oh->status = STATUS_OK; +} + +/*! \brief Calculate shared network percentages and such. */ +static void shnet_output_helper(struct output_helper_t *oh, struct shared_network_t *shared_p) +{ + /* counts and calculations */ + oh->tc = shared_p->touched + shared_p->used; + if (shared_p->available == 0) { + oh->percent = NAN; + oh->tcp = NAN; + oh->bup = NAN; + } else { + oh->percent = (double)(100 * shared_p->used) / shared_p->available; + oh->tcp = + (double)((100 * (shared_p->touched + shared_p->used)) / shared_p->available); + if (config.backups_found == 1) { + oh->bup = (double)(100 * shared_p->backups) / shared_p->available; + } + } + /* set status */ + if (oh->percent == NAN || shared_p->available <= config.minsize) { + oh->status = STATUS_IGNORED; + return; + } + if (config.critical < oh->percent && shared_p->used < config.crit_count) { + oh->status = STATUS_CRIT; + return; + } + if (config.warning < oh->percent && shared_p->used < config.warn_count) { + oh->status = STATUS_WARN; + return; + } + oh->status = STATUS_OK; +} + /*! \brief Text output format, which is the default. */ static int output_txt(void) { unsigned int i; struct range_t *range_p; - double range_size; struct shared_network_t *shared_p; + struct output_helper_t oh; int ret; FILE *outfile; int max_ipaddr_length = config.ip_version == IPv6 ? 39 : 16; @@ -79,7 +145,6 @@ static int output_txt(void) } range_p = ranges; - range_size = get_range_size(range_p); shared_p = shared_networks; if (config.header_limit & R_BIT) { @@ -99,6 +164,7 @@ static int output_txt(void) } if (config.number_limit & R_BIT) { for (i = 0; i < num_ranges; i++) { + range_output_helper(&oh, range_p); if (range_p->shared_net) { fprintf(outfile, "%-20s", range_p->shared_net->name); } else { @@ -113,20 +179,18 @@ static int output_txt(void) " - %-*s %5g %5g %10.3f %5g %5g %9.3f", max_ipaddr_length, ntop_ipaddr(&range_p->last_ip), - range_size, + oh.range_size, range_p->count, - (float)(100 * range_p->count) / range_size, + oh.percent, range_p->touched, - range_p->touched + range_p->count, - (float)(100 * (range_p->touched + range_p->count)) / range_size); + oh.tc, + oh.tcp); if (config.backups_found == 1) { fprintf(outfile, "%7g %8.3f", - range_p->backups, - (float)(100 * range_p->backups) / range_size); + range_p->backups, oh.bup); } fprintf(outfile, "\n"); range_p++; - range_size = get_range_size(range_p); } } if (config.number_limit & R_BIT && config.header_limit & S_BIT) { @@ -144,20 +208,20 @@ static int output_txt(void) if (config.number_limit & S_BIT) { for (i = 0; i < num_shared_networks; i++) { shared_p++; + shnet_output_helper(&oh, shared_p); fprintf(outfile, "%-20s %5g %5g %10.3f %7g %6g %9.3f", - shared_p->name, shared_p->available, + shared_p->name, + shared_p->available, shared_p->used, - shared_p->available == - 0 ? NAN : (float)(100 * shared_p->used) / shared_p->available, - shared_p->touched, shared_p->touched + shared_p->used, - shared_p->available == - 0 ? NAN : ((float)(100 * (shared_p->touched + shared_p->used)) / - shared_p->available)); + oh.percent, + shared_p->touched, + oh.tc, + oh.tcp); if (config.backups_found == 1) { fprintf(outfile, "%7g %8.3f", shared_p->backups, - (float)(100 * shared_p->backups) / shared_p->available); + oh.bup); } fprintf(outfile, "\n"); @@ -177,24 +241,20 @@ static int output_txt(void) fprintf(outfile, "\n"); } if (config.number_limit & A_BIT) { + shnet_output_helper(&oh, shared_networks); fprintf(outfile, "%-20s %5g %5g %10.3f %7g %6g %9.3f", shared_networks->name, shared_networks->available, shared_networks->used, - shared_networks->available == - 0 ? NAN : (float)(100 * shared_networks->used) / - shared_networks->available, shared_networks->touched, - shared_networks->touched + shared_networks->used, - shared_networks->available == - 0 ? NAN : (float)(100 * - (shared_networks->touched + - shared_networks->used)) / shared_networks->available); + oh.percent, + shared_networks->touched, + oh.tc, + oh.tcp); if (config.backups_found == 1) { fprintf(outfile, "%7g %8.3f", - shared_networks->available == 0 ? NAN : shared_networks->backups, - (float)(100 * shared_networks->backups) / - shared_networks->available); + shared_networks->backups, + oh.bup); } fprintf(outfile, "\n"); } @@ -599,8 +659,8 @@ static int output_html(void) { unsigned int i; struct range_t *range_p; - double range_size; struct shared_network_t *shared_p; + struct output_helper_t oh; int ret; FILE *outfile; @@ -614,7 +674,6 @@ static int output_html(void) } range_p = ranges; - range_size = get_range_size(range_p); shared_p = shared_networks; html_header(outfile); newsection(outfile, "Sum of all"); @@ -639,27 +698,17 @@ static int output_html(void) if (config.number_limit & A_BIT) { start_tag(outfile, "tbody"); start_tag(outfile, "tr"); + shnet_output_helper(&oh, shared_networks); output_line(outfile, "td", shared_networks->name); output_double(outfile, "td", shared_networks->available); output_double(outfile, "td", shared_networks->used); - output_float(outfile, "td", - shared_networks->available == - 0 ? NAN : (float)(100 * shared_networks->used) / - shared_networks->available); + output_float(outfile, "td", oh.percent); output_double(outfile, "td", shared_networks->touched); - output_double(outfile, "td", shared_networks->touched + shared_networks->used); - output_float(outfile, "td", - shared_networks->available == 0 ? NAN : (float)(100 * - (shared_networks->touched - + - shared_networks->used)) - / shared_networks->available); + output_double(outfile, "td", oh.tc); + output_float(outfile, "td", oh.tcp); if (config.backups_found == 1) { output_double(outfile, "td", shared_networks->backups); - output_float(outfile, "td", - shared_networks->available == 0 ? NAN : (float)(100 * - shared_networks->backups) - / shared_networks->available); + output_float(outfile, "td", oh.tcp); } end_tag(outfile, "tr"); end_tag(outfile, "tbody"); @@ -688,27 +737,18 @@ static int output_html(void) start_tag(outfile, "tbody"); for (i = 0; i < num_shared_networks; i++) { shared_p++; + shnet_output_helper(&oh, shared_networks); start_tag(outfile, "tr"); output_line(outfile, "td", shared_p->name); output_double(outfile, "td", shared_p->available); output_double(outfile, "td", shared_p->used); - output_float(outfile, "td", - shared_p->available == - 0 ? NAN : (float)(100 * shared_p->used) / - shared_p->available); + output_float(outfile, "td", oh.percent); output_double(outfile, "td", shared_p->touched); - output_double(outfile, "td", shared_p->touched + shared_p->used); - output_float(outfile, "td", - shared_p->available == 0 ? NAN : (float)(100 * - (shared_p->touched + - shared_p->used)) / - shared_p->available); + output_double(outfile, "td", oh.tc); + output_float(outfile, "td", oh.tcp); if (config.backups_found == 1) { output_double(outfile, "td", shared_p->backups); - output_float(outfile, "td", - shared_p->available == 0 ? NAN : (float)(100 * - shared_p->backups) - / shared_p->available); + output_float(outfile, "td", oh.bup); } end_tag(outfile, "tr"); } @@ -739,6 +779,7 @@ static int output_html(void) if (config.number_limit & R_BIT) { start_tag(outfile, "tbody"); for (i = 0; i < num_ranges; i++) { + range_output_helper(&oh, range_p); start_tag(outfile, "tr"); if (range_p->shared_net) { output_line(outfile, "td", range_p->shared_net->name); @@ -747,22 +788,18 @@ static int output_html(void) } output_line(outfile, "td", ntop_ipaddr(&range_p->first_ip)); output_line(outfile, "td", ntop_ipaddr(&range_p->last_ip)); - output_double(outfile, "td", range_size); + output_double(outfile, "td", oh.range_size); output_double(outfile, "td", range_p->count); - output_float(outfile, "td", (float)(100 * range_p->count) / range_size); + output_float(outfile, "td", oh.percent); output_double(outfile, "td", range_p->touched); - output_double(outfile, "td", range_p->touched + range_p->count); - output_float(outfile, "td", - (float)(100 * - (range_p->touched + range_p->count)) / range_size); + output_double(outfile, "td", oh.tc); + output_float(outfile, "td", oh.tcp); if (config.backups_found == 1) { output_double(outfile, "td", range_p->backups); - output_float(outfile, "td", - (float)(100 * range_p->backups) / range_size); + output_float(outfile, "td", oh.bup); } end_tag(outfile, "tr"); range_p++; - range_size = get_range_size(range_p); } end_tag(outfile, "tbody"); } @@ -787,8 +824,8 @@ static int output_csv(void) { unsigned int i; struct range_t *range_p; - double range_size; struct shared_network_t *shared_p; + struct output_helper_t oh; FILE *outfile; int ret; @@ -802,7 +839,6 @@ static int output_csv(void) } range_p = ranges; - range_size = get_range_size(range_p); shared_p = shared_networks; if (config.header_limit & R_BIT) { fprintf(outfile, "\"Ranges:\"\n"); @@ -816,6 +852,7 @@ static int output_csv(void) } if (config.number_limit & R_BIT) { for (i = 0; i < num_ranges; i++) { + range_output_helper(&oh, range_p); if (range_p->shared_net) { fprintf(outfile, "\"%s\",", range_p->shared_net->name); } else { @@ -824,21 +861,21 @@ static int output_csv(void) fprintf(outfile, "\"%s\",", ntop_ipaddr(&range_p->first_ip)); fprintf(outfile, "\"%s\",\"%g\",\"%g\",\"%.3f\",\"%g\",\"%g\",\"%.3f\"", - ntop_ipaddr(&range_p->last_ip), range_size, + ntop_ipaddr(&range_p->last_ip), + oh.range_size, range_p->count, - (float)(100 * range_p->count) / range_size, + oh.percent, range_p->touched, - range_p->touched + range_p->count, - (float)(100 * (range_p->touched + range_p->count)) / range_size); + oh.tc, + oh.tcp); if (config.backups_found == 1) { fprintf(outfile, ",\"%g\",\"%.3f\"", range_p->backups, - (float)(100 * range_p->backups) / range_size); + oh.bup); } fprintf(outfile, "\n"); range_p++; - range_size = get_range_size(range_p); } fprintf(outfile, "\n"); } @@ -855,23 +892,20 @@ static int output_csv(void) for (i = 0; i < num_shared_networks; i++) { shared_p++; + shnet_output_helper(&oh, shared_p); fprintf(outfile, "\"%s\",\"%g\",\"%g\",\"%.3f\",\"%g\",\"%g\",\"%.3f\"", - shared_p->name, shared_p->available, + shared_p->name, + shared_p->available, shared_p->used, - shared_p->available == 0 ? NAN : (float)(100 * shared_p->used) / - shared_p->available, shared_p->touched, - shared_p->touched + shared_p->used, - shared_p->available == 0 ? NAN : (float)(100 * - (shared_p->touched + - shared_p->used)) / - shared_p->available); + oh.percent, + shared_p->touched, + oh.tc, + oh.tcp); if (config.backups_found == 1) { fprintf(outfile, ",\"%g\",\"%.3f\"", shared_p->backups, - shared_p->available == - 0 ? NAN : (float)(100 * shared_p->backups) / - shared_p->available); + oh.bup); } fprintf(outfile, "\n"); @@ -888,25 +922,20 @@ static int output_csv(void) fprintf(outfile, "\n"); } if (config.number_limit & A_BIT) { - + shnet_output_helper(&oh, shared_networks); fprintf(outfile, "\"%s\",\"%g\",\"%g\",\"%.3f\",\"%g\",\"%g\",\"%.3f\"", - shared_networks->name, shared_networks->available, + shared_networks->name, + shared_networks->available, shared_networks->used, - shared_networks->available == - 0 ? NAN : (float)(100 * shared_networks->used) / - shared_networks->available, shared_networks->touched, - shared_networks->touched + shared_networks->used, - shared_networks->available == - 0 ? NAN : (float)(100 * - (shared_networks->touched + - shared_networks->used)) / shared_networks->available); + oh.percent, + shared_networks->touched, + oh.tc, + oh.tcp); if (config.backups_found == 1) { fprintf(outfile, "%7g %8.3f", shared_networks->backups, - shared_networks->available == - 0 ? NAN : (float)(100 * shared_networks->backups) / - shared_networks->available); + oh.bup); } fprintf(outfile, "\n"); } @@ -931,8 +960,8 @@ static int output_alarming(void) struct range_t *range_p; double range_size; struct shared_network_t *shared_p; + struct output_helper_t oh; unsigned int i; - float perc; int rw = 0, rc = 0, ro = 0, ri = 0, sw = 0, sc = 0, so = 0, si = 0; int ret_val, ret; @@ -951,39 +980,47 @@ static int output_alarming(void) if (config.number_limit & R_BIT) { for (i = 0; i < num_ranges; i++) { - if (config.snet_alarms && range_p->shared_net != shared_networks) { - continue; - } - if (config.minsize < range_size) { - perc = (float)(100 * range_p->count) / range_size; - if (config.critical < perc && (range_size - range_p->count) < config.crit_count) - rc++; - else if (config.warning < perc && (range_size - range_p->count) < config.warn_count) - rw++; - else - ro++; - } else { + range_output_helper(&oh, range_p); + switch (oh.status) { + case STATUS_SUPPRESSED: + break; + case STATUS_IGNORED: ri++; + break; + case STATUS_CRIT: + rc++; + break; + case STATUS_WARN: + rw++; + break; + case STATUS_OK: + ro++; + break; + default: + abort(); } range_p++; - range_size = get_range_size(range_p); } } if (config.number_limit & S_BIT) { for (i = 0; i < num_shared_networks; i++) { shared_p++; - if (config.minsize < shared_p->available) { - perc = - shared_p->available == - 0 ? 100 : (float)(100 * shared_p->used) / shared_p->available; - if (config.critical < perc && shared_p->used < config.crit_count) - sc++; - else if (config.warning < perc && shared_p->used < config.warn_count) - sw++; - else - so++; - } else { + shnet_output_helper(&oh, shared_p); + switch (oh.status) { + case STATUS_IGNORED: si++; + break; + case STATUS_CRIT: + sc++; + break; + case STATUS_WARN: + sw++; + break; + case STATUS_OK: + so++; + break; + default: + abort(); } } } diff --git a/tests/expected/alarm-count-option b/tests/expected/alarm-count-option index a535df7..3c43afe 100644 --- a/tests/expected/alarm-count-option +++ b/tests/expected/alarm-count-option @@ -11,6 +11,6 @@ OK: Ranges - crit: 0 warn: 0 ok: 0 ignored: 5; | range_crit=0 range_warn=0 range Shared nets - crit: 0 warn: 0 ok: 0 ignored: 2; | snet_crit=0 snet_warn=0 snet_ok=0 snet_ignored=2 0 == snet alarms == -WARNING: dhcpd-pools: Ranges - crit: 0 warn: 0 ok: 0; | range_crit=0 range_warn=0 range_ok=0 +WARNING: dhcpd-pools: Ranges - crit: 0 warn: 0 ok: 1; | range_crit=0 range_warn=0 range_ok=1 Shared nets - crit: 0 warn: 2 ok: 0; | snet_crit=0 snet_warn=2 snet_ok=0 1 From 344ed2900dcfa3d2f2f786c07389e45fb6ba209f Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 5 Nov 2017 17:07:16 +0000 Subject: [PATCH 055/158] output: add color support to text output When --warning or --critical thresholds are defined with text output lines that exceed threshold will be either yellow (warning) or red (critical). Signed-off-by: Sami Kerola --- man/dhcpd-pools.1.in | 19 ++++++++ src/dhcpd-pools.c | 9 ++++ src/dhcpd-pools.h | 20 +++++++- src/other.c | 17 +++++++ src/output.c | 77 +++++++++++++++++++++++-------- tests/alarm-count-option | 8 ++-- tests/expected/alarm-count-option | 4 +- tests/test.sh | 2 +- 8 files changed, 128 insertions(+), 28 deletions(-) diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 0eee034..c7febb4 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -10,6 +10,7 @@ dhcpd-pools \- ISC dhcpd pools usage analysis .OP \-\-format tHcxXjJ .OP \-\-output file .OP \-\-limit nr +.OP \-\-color when .OP \-\-warning percent .OP \-\-critical percent .OP \-\-warn\-count number @@ -140,6 +141,24 @@ alarming context. When the alarming is in use, and total is not wanted to be seen then in the case of alarming returning success nothing is printed. .TP +\fB\-\-color\fR=\fIwhen\fR +Use yellow for warning, red for critical, green for suppressed by \-\-minsize +and blue when \-\-snet\-alarms is the cause of supression. The +.I when +string can be +.BR always , +.BR never , +or +.BR auto . +Default is auto, that uses colors when command is running in interactive +terminal. With use of +.B \-\-warning +or +.B \-\-critical +coloring thresholds can be changed, but one must also use +.B \-\-format=text +to avoid turning on alarting mode. +.TP \fB\-\-warning\fR=\fIpercent\fR Turn on alarm output format, and specify percentage number which will cause an alarm. If either a range or shared network will exceed diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 09eb137..1edd9e9 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -39,6 +39,7 @@ #include +#include #include #include #include @@ -109,6 +110,7 @@ int main(int argc, char **argv) OPT_MINSIZE, OPT_WARN_COUNT, OPT_CRIT_COUNT, + OPT_COLOR, OPT_SET_IPV }; int ret_val; @@ -116,6 +118,7 @@ int main(int argc, char **argv) static struct option const long_options[] = { {"config", required_argument, NULL, 'c'}, {"leases", required_argument, NULL, 'l'}, + {"color", required_argument, NULL, OPT_COLOR}, {"format", required_argument, NULL, 'f'}, {"sort", required_argument, NULL, 's'}, {"reverse", no_argument, NULL, 'r'}, @@ -152,6 +155,7 @@ int main(int argc, char **argv) config.warn_count = 0x100000000; /* == 2^32 that is the entire IPv4 space */ config.crit_count = 0x100000000; /* basically turns off the count criteria */ config.perfdata = 0; + config.color_mode = color_auto; /* File location defaults */ strncpy(config.dhcpdconf_file, DHCPDCONF_FILE, MAXLEN - 1); strncpy(config.dhcpdlease_file, DHCPDLEASE_FILE, MAXLEN - 1); @@ -219,6 +223,11 @@ int main(int argc, char **argv) config.header_limit = return_limit(optarg[0]); config.number_limit = return_limit(optarg[1]); break; + case OPT_COLOR: + config.color_mode = parse_color_mode(optarg); + if (config.color_mode == color_unknown) + error(EXIT_FAILURE, errno, "unknown color mode: %s", quote(optarg)); + break; case OPT_SNET_ALARMS: config.snet_alarms = 1; break; diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 50d9a54..b160094 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -187,6 +187,21 @@ enum limbits { # define STATE_WARNING 1 # define STATE_CRITICAL 2 +/*! \def COLOR_BOLD_RED + * \brief Shell warning color. + */ +# define COLOR_BOLD_RED "\033[1;31m" +# define COLOR_BOLD_YELLOW "\033[1;33m" +# define COLOR_BOLD_GREEN "\033[1;32m" +# define COLOR_BOLD_BLUE "\033[1;34m" +# define COLOR_RESET "\033[0m" +enum color_mode { + color_unknown, + color_off, + color_on, + color_auto /* default */ +}; + /*! \var comparer_t * \brief Function pointer holding sort algorithm. */ @@ -222,8 +237,10 @@ struct configuration_t { perfdata:1, all_as_shared:1, header_limit:3, - number_limit:3; + number_limit:3, + color_mode:2; }; + /* Global variables */ /* \var prefix_length Length of each prefix. */ extern int prefix_length[2][NUM_OF_PREFIX]; @@ -284,6 +301,7 @@ _DP_ATTRIBUTE_HOT; extern int xstrstr_v6(const char *restrict str) _DP_ATTRIBUTE_HOT; +extern int parse_color_mode(const char *restrict optarg); extern double strtod_or_err(const char *restrict str, const char *restrict errmesg); extern void __attribute__ ((noreturn)) print_version(void); extern void __attribute__ ((noreturn)) usage(int status); diff --git a/src/other.c b/src/other.c index 4eda1ad..2031b01 100644 --- a/src/other.c +++ b/src/other.c @@ -454,6 +454,22 @@ int return NUM_OF_PREFIX; } +/*! \brief Parse option argument color mode. + * + * \param Color mode string. + * \return color mode enum. + */ +int parse_color_mode(const char *restrict optarg) +{ + if (!strcmp(optarg, "always")) + return color_on; + if (!strcmp(optarg, "auto")) + return color_auto; + if (!strcmp(optarg, "never")) + return color_off; + return color_unknown; +} + /*! \brief Return a double floating point value. * * \param str String to be converted to a double. @@ -562,6 +578,7 @@ void __attribute__ ((__noreturn__)) usage(int status) fputs( " -r, --reverse reverse order sort\n", out); fputs( " -o, --output=FILE output into a file\n", out); fputs( " -L, --limit=NR output limit mask 77 - 00\n", out); + fputs( " --color=WHEN use colors 'always', 'never', or 'auto'\n", out); fputs( " --warning=PERC set warning alarming limit\n", out); fputs( " --critical=PERC set critical alarming limit\n", out); fputs( " --warn-count=NR a number of free leases before warning raised\n", out); diff --git a/src/output.c b/src/output.c index 0ef8353..c092f16 100644 --- a/src/output.c +++ b/src/output.c @@ -50,6 +50,7 @@ #include #include #include +#include #include "close-stream.h" #include "error.h" @@ -70,25 +71,19 @@ static void range_output_helper(struct output_helper_t *oh, struct range_t *rang oh->bup = (double)(100 * range_p->backups) / oh->range_size; } /* set status */ - if (config.snet_alarms && range_p->shared_net != shared_networks) { - oh->status = STATUS_SUPPRESSED; - return; - } - if (oh->range_size <= config.minsize) { - oh->status = STATUS_IGNORED; - return; - } - if (config.critical < oh->percent - && (oh->range_size - range_p->count) < config.crit_count) { - oh->status = STATUS_CRIT; - return; - } - if (config.warning < oh->percent - && (oh->range_size - range_p->count) < config.warn_count) { - oh->status = STATUS_WARN; - return; - } oh->status = STATUS_OK; + if (config.critical < oh->percent + && (oh->range_size - range_p->count) < config.crit_count) + oh->status = STATUS_CRIT; + else if (config.warning < oh->percent + && (oh->range_size - range_p->count) < config.warn_count) + oh->status = STATUS_WARN; + if (oh->status != STATUS_OK) { + if (oh->range_size <= config.minsize) + oh->status = STATUS_IGNORED; + else if (config.snet_alarms && range_p->shared_net != shared_networks) + oh->status = STATUS_SUPPRESSED; + } } /*! \brief Calculate shared network percentages and such. */ @@ -109,7 +104,11 @@ static void shnet_output_helper(struct output_helper_t *oh, struct shared_networ } } /* set status */ - if (oh->percent == NAN || shared_p->available <= config.minsize) { + if (oh->percent == NAN) { + oh->status = STATUS_SUPPRESSED; + return; + } + if (shared_p->available <= config.minsize) { oh->status = STATUS_IGNORED; return; } @@ -124,6 +123,26 @@ static void shnet_output_helper(struct output_helper_t *oh, struct shared_networ oh->status = STATUS_OK; } +static int start_color(struct output_helper_t *oh, FILE *outfile) +{ + if (oh->status == STATUS_CRIT) { + fputs(COLOR_BOLD_RED, outfile); + return 1; + } + if (oh->status == STATUS_WARN) { + fputs(COLOR_BOLD_YELLOW, outfile); + return 1; + } + if (oh->status == STATUS_IGNORED) { + fputs(COLOR_BOLD_GREEN, outfile); + return 1; + } + if (oh->status == STATUS_SUPPRESSED) { + fputs(COLOR_BOLD_BLUE, outfile); + return 1; + } + return 0; +} /*! \brief Text output format, which is the default. */ static int output_txt(void) { @@ -135,6 +154,10 @@ static int output_txt(void) FILE *outfile; int max_ipaddr_length = config.ip_version == IPv6 ? 39 : 16; + if (config.color_mode == color_auto && isatty(STDIN_FILENO)) { + config.color_mode = color_on; + } + if (config.output_file[0]) { outfile = fopen(config.output_file, "w+"); if (outfile == NULL) { @@ -164,7 +187,10 @@ static int output_txt(void) } if (config.number_limit & R_BIT) { for (i = 0; i < num_ranges; i++) { + int color_set = 0; range_output_helper(&oh, range_p); + if (config.color_mode == color_on) + color_set = start_color(&oh, outfile); if (range_p->shared_net) { fprintf(outfile, "%-20s", range_p->shared_net->name); } else { @@ -189,6 +215,8 @@ static int output_txt(void) fprintf(outfile, "%7g %8.3f", range_p->backups, oh.bup); } + if (color_set) + fputs(COLOR_RESET, outfile); fprintf(outfile, "\n"); range_p++; } @@ -207,8 +235,11 @@ static int output_txt(void) } if (config.number_limit & S_BIT) { for (i = 0; i < num_shared_networks; i++) { + int color_set = 0; shared_p++; shnet_output_helper(&oh, shared_p); + if (config.color_mode == color_on) + color_set = start_color(&oh, outfile); fprintf(outfile, "%-20s %5g %5g %10.3f %7g %6g %9.3f", shared_p->name, @@ -223,7 +254,8 @@ static int output_txt(void) shared_p->backups, oh.bup); } - + if (color_set) + fputs(COLOR_RESET, outfile); fprintf(outfile, "\n"); } } @@ -241,7 +273,10 @@ static int output_txt(void) fprintf(outfile, "\n"); } if (config.number_limit & A_BIT) { + int color_set = 0; shnet_output_helper(&oh, shared_networks); + if (config.color_mode == color_on) + color_set = start_color(&oh, outfile); fprintf(outfile, "%-20s %5g %5g %10.3f %7g %6g %9.3f", shared_networks->name, shared_networks->available, @@ -256,6 +291,8 @@ static int output_txt(void) shared_networks->backups, oh.bup); } + if (color_set) + fputs(COLOR_RESET, outfile); fprintf(outfile, "\n"); } if (outfile == stdout) { diff --git a/tests/alarm-count-option b/tests/alarm-count-option index 15f1dea..763af1b 100755 --- a/tests/alarm-count-option +++ b/tests/alarm-count-option @@ -10,25 +10,25 @@ fi echo '== warn count ==' > tests/outputs/$IAM dhcpd-pools --config $top_srcdir/tests/confs/complete --leases $top_srcdir/tests/leases/complete \ - --warning=40 --warn-count=20 --output=tests/outputs/$IAM-too + --color=never --warning=40 --warn-count=20 --output=tests/outputs/$IAM-too echo $? >> tests/outputs/$IAM-too cat tests/outputs/$IAM-too >> tests/outputs/$IAM echo '== crit count ==' >> tests/outputs/$IAM dhcpd-pools --config $top_srcdir/tests/confs/complete --leases $top_srcdir/tests/leases/complete \ - --critical=40 --crit-count=20 --output=tests/outputs/$IAM-too + --color=never --critical=40 --crit-count=20 --output=tests/outputs/$IAM-too echo $? >> tests/outputs/$IAM-too cat tests/outputs/$IAM-too >> tests/outputs/$IAM echo '== minsize ==' >> tests/outputs/$IAM dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/complete \ - --warning=40 --warn-count=20 --minsize=40 -o tests/outputs/$IAM-too + --color=never --warning=40 --warn-count=20 --minsize=40 -o tests/outputs/$IAM-too echo $? >> tests/outputs/$IAM-too cat tests/outputs/$IAM-too >> tests/outputs/$IAM echo '== snet alarms ==' >> tests/outputs/$IAM dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/complete \ - --warning=40 --snet-alarms -o tests/outputs/$IAM-too + --color=never --warning=40 --snet-alarms -o tests/outputs/$IAM-too echo $? >> tests/outputs/$IAM-too cat tests/outputs/$IAM-too >> tests/outputs/$IAM diff --git a/tests/expected/alarm-count-option b/tests/expected/alarm-count-option index 3c43afe..3e9b76d 100644 --- a/tests/expected/alarm-count-option +++ b/tests/expected/alarm-count-option @@ -7,10 +7,10 @@ CRITICAL: dhcpd-pools: Ranges - crit: 3 warn: 0 ok: 2; | range_crit=3 range_warn Shared nets - crit: 1 warn: 0 ok: 1; | snet_crit=1 snet_warn=0 snet_ok=1 2 == minsize == -OK: Ranges - crit: 0 warn: 0 ok: 0 ignored: 5; | range_crit=0 range_warn=0 range_ok=0 range_ignored=5 +OK: Ranges - crit: 0 warn: 0 ok: 2 ignored: 3; | range_crit=0 range_warn=0 range_ok=2 range_ignored=3 Shared nets - crit: 0 warn: 0 ok: 0 ignored: 2; | snet_crit=0 snet_warn=0 snet_ok=0 snet_ignored=2 0 == snet alarms == -WARNING: dhcpd-pools: Ranges - crit: 0 warn: 0 ok: 1; | range_crit=0 range_warn=0 range_ok=1 +WARNING: dhcpd-pools: Ranges - crit: 0 warn: 0 ok: 2; | range_crit=0 range_warn=0 range_ok=2 Shared nets - crit: 0 warn: 2 ok: 0; | snet_crit=0 snet_warn=2 snet_ok=0 1 diff --git a/tests/test.sh b/tests/test.sh index 6694344..a5e98d0 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -8,7 +8,7 @@ if [ ! -d tests/outputs ]; then mkdir tests/outputs fi -dhcpd-pools -c $top_srcdir/tests/confs/$IAM \ +dhcpd-pools -c $top_srcdir/tests/confs/$IAM --color=never \ -l $top_srcdir/tests/leases/$IAM -o tests/outputs/$IAM diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM exit $? From e079cc16e029ef877fda0b3b9800e4a7aa2209c3 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 5 Nov 2017 20:03:59 +0000 Subject: [PATCH 056/158] output: include earlier missing data to json output This commit adds all the data that is in text output to json output. Signed-off-by: Sami Kerola --- src/output.c | 42 +++++++++++++++++++++++++++------- tests/expected/same-twice-json | 8 +++++-- 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/output.c b/src/output.c index c092f16..6c1d67b 100644 --- a/src/output.c +++ b/src/output.c @@ -418,8 +418,8 @@ static int output_json(const int print_mac_addreses) { unsigned int i = 0; struct range_t *range_p; - double range_size; struct shared_network_t *shared_p; + struct output_helper_t oh; int ret; FILE *outfile; unsigned int sep; @@ -434,7 +434,6 @@ static int output_json(const int print_mac_addreses) } range_p = ranges; - range_size = get_range_size(range_p); shared_p = shared_networks; sep = 0; @@ -470,6 +469,7 @@ static int output_json(const int print_mac_addreses) } fprintf(outfile, " \"subnets\": [\n"); for (i = 0; i < num_ranges; i++) { + range_output_helper(&oh, range_p); fprintf(outfile, " "); fprintf(outfile, "{ "); if (range_p->shared_net) { @@ -481,12 +481,20 @@ static int output_json(const int print_mac_addreses) fprintf(outfile, "\"range\":\"%s", ntop_ipaddr(&range_p->first_ip)); fprintf(outfile, " - %s\", ", ntop_ipaddr(&range_p->last_ip)); - fprintf(outfile, "\"defined\":%g, ", range_size); + fprintf(outfile, "\"defined\":%g, ", oh.range_size); fprintf(outfile, "\"used\":%g, ", range_p->count); fprintf(outfile, "\"touched\":%g, ", range_p->touched); - fprintf(outfile, "\"free\":%g ", range_size - range_p->count); + fprintf(outfile, "\"free\":%g, ", oh.range_size - range_p->count); + fprintf(outfile, "\"percent\":%g, ", oh.percent); + fprintf(outfile, "\"touch_count\":%g, ", oh.tc); + fprintf(outfile, "\"touch_percent\":%g, ", oh.tcp); + if (config.backups_found == 1) { + fprintf(outfile, "\"backup_count\":%g, ", range_p->backups); + fprintf(outfile, "\"backup_percent\":%g, ", oh.bup); + } + fprintf(outfile, "\"status\":%d ", oh.status); + range_p++; - range_size = get_range_size(range_p); if (i + 1 < num_ranges) fprintf(outfile, "},\n"); else @@ -502,6 +510,7 @@ static int output_json(const int print_mac_addreses) } fprintf(outfile, " \"shared-networks\": [\n"); for (i = 0; i < num_shared_networks; i++) { + shnet_output_helper(&oh, shared_p); fprintf(outfile, " "); shared_p++; fprintf(outfile, "{ "); @@ -509,7 +518,15 @@ static int output_json(const int print_mac_addreses) fprintf(outfile, "\"defined\":%g, ", shared_p->available); fprintf(outfile, "\"used\":%g, ", shared_p->used); fprintf(outfile, "\"touched\":%g, ", shared_p->touched); - fprintf(outfile, "\"free\":%g ", shared_p->available - shared_p->used); + fprintf(outfile, "\"free\":%g, ", shared_p->available - shared_p->used); + fprintf(outfile, "\"percent\":%g, ", oh.percent); + fprintf(outfile, "\"touch_count\":%g, ", oh.tc); + fprintf(outfile, "\"touch_percent\":%g, ", oh.tcp); + if (config.backups_found == 1) { + fprintf(outfile, "\"backup_count\":%g, ", shared_p->backups); + fprintf(outfile, "\"backup_percent\":%g, ", oh.bup); + } + fprintf(outfile, "\"status\":%d ", oh.status); if (i + 1 < num_shared_networks) fprintf(outfile, "},\n"); else @@ -520,6 +537,7 @@ static int output_json(const int print_mac_addreses) } if (config.header_limit & A_BIT) { + shnet_output_helper(&oh, shared_networks); if (sep) { fprintf(outfile, ",\n"); } @@ -528,8 +546,16 @@ static int output_json(const int print_mac_addreses) fprintf(outfile, " \"defined\":%g,\n", shared_networks->available); fprintf(outfile, " \"used\":%g,\n", shared_networks->used); fprintf(outfile, " \"touched\":%g,\n", shared_networks->touched); - fprintf(outfile, " \"free\":%g\n", - shared_networks->available - shared_networks->used); + fprintf(outfile, " \"free\":%g,\n", + shared_networks->available - shared_networks->used); + fprintf(outfile, " \"percent\":%g,\n", oh.percent); + fprintf(outfile, " \"touch_count\":%g,\n", oh.tc); + fprintf(outfile, " \"touch_percent\":%g,\n", oh.tcp); + if (config.backups_found == 1) { + fprintf(outfile, " \"backup_count\":%g,\n", shared_p->backups); + fprintf(outfile, " \"backup_percent\":%g,\n", oh.bup); + } + fprintf(outfile, " \"status\":%d\n", oh.status); fprintf(outfile, " }"); /* end of summary */ } diff --git a/tests/expected/same-twice-json b/tests/expected/same-twice-json index 7d29ad9..598410d 100644 --- a/tests/expected/same-twice-json +++ b/tests/expected/same-twice-json @@ -3,7 +3,7 @@ { "ip":"10.0.0.5", "macaddress":"00:00:00:00:00:00" } ], "subnets": [ - { "location":"All networks", "range":"10.0.0.1 - 10.0.0.10", "defined":10, "used":1, "touched":0, "free":9 } + { "location":"All networks", "range":"10.0.0.1 - 10.0.0.10", "defined":10, "used":1, "touched":0, "free":9, "percent":10, "touch_count":1, "touch_percent":10, "status":0 } ], "shared-networks": [ ], @@ -12,6 +12,10 @@ "defined":10, "used":1, "touched":0, - "free":9 + "free":9, + "percent":10, + "touch_count":1, + "touch_percent":10, + "status":0 } } From c55c8237531e0195f44ef4e03ab824e85b6b3607 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 6 Nov 2017 22:11:47 +0000 Subject: [PATCH 057/158] output: add --skip-ok option Omit ranges and shared networks that do not exceed warning or critical thresholds. Signed-off-by: Sami Kerola --- man/dhcpd-pools.1.in | 6 ++++++ src/dhcpd-pools.c | 5 +++++ src/dhcpd-pools.h | 1 + src/output.c | 37 +++++++++++++++++++++++++++++++++++-- 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index c7febb4..5541cfe 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -159,6 +159,12 @@ coloring thresholds can be changed, but one must also use .B \-\-format=text to avoid turning on alarting mode. .TP +\fB\-\-skip\-ok +Do not print ranges that are within thresholds of +.B \-\-warning +or +.BR \-\-critical . +.TP \fB\-\-warning\fR=\fIpercent\fR Turn on alarm output format, and specify percentage number which will cause an alarm. If either a range or shared network will exceed diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 1edd9e9..2213ba8 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -111,6 +111,7 @@ int main(int argc, char **argv) OPT_WARN_COUNT, OPT_CRIT_COUNT, OPT_COLOR, + OPT_SKIP_OK, OPT_SET_IPV }; int ret_val; @@ -119,6 +120,7 @@ int main(int argc, char **argv) {"config", required_argument, NULL, 'c'}, {"leases", required_argument, NULL, 'l'}, {"color", required_argument, NULL, OPT_COLOR}, + {"skip-ok", no_argument, NULL, OPT_SKIP_OK}, {"format", required_argument, NULL, 'f'}, {"sort", required_argument, NULL, 's'}, {"reverse", no_argument, NULL, 'r'}, @@ -228,6 +230,9 @@ int main(int argc, char **argv) if (config.color_mode == color_unknown) error(EXIT_FAILURE, errno, "unknown color mode: %s", quote(optarg)); break; + case OPT_SKIP_OK: + config.skip_ok = 1; + break; case OPT_SNET_ALARMS: config.snet_alarms = 1; break; diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index b160094..d3b2d75 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -238,6 +238,7 @@ struct configuration_t { all_as_shared:1, header_limit:3, number_limit:3, + skip_ok:1, color_mode:2; }; diff --git a/src/output.c b/src/output.c index 6c1d67b..9a65144 100644 --- a/src/output.c +++ b/src/output.c @@ -189,6 +189,10 @@ static int output_txt(void) for (i = 0; i < num_ranges; i++) { int color_set = 0; range_output_helper(&oh, range_p); + if (config.skip_ok && oh.status == STATUS_OK) { + range_p++; + continue; + } if (config.color_mode == color_on) color_set = start_color(&oh, outfile); if (range_p->shared_net) { @@ -238,6 +242,8 @@ static int output_txt(void) int color_set = 0; shared_p++; shnet_output_helper(&oh, shared_p); + if (config.skip_ok && oh.status == STATUS_OK) + continue; if (config.color_mode == color_on) color_set = start_color(&oh, outfile); fprintf(outfile, @@ -317,6 +323,7 @@ static int output_xml(const int print_mac_addreses) struct range_t *range_p; double range_size; struct shared_network_t *shared_p; + struct output_helper_t oh; int ret; FILE *outfile; @@ -353,6 +360,11 @@ static int output_xml(const int print_mac_addreses) if (config.number_limit & R_BIT) { for (i = 0; i < num_ranges; i++) { + range_output_helper(&oh, range_p); + if (config.skip_ok && oh.status == STATUS_OK) { + range_p++; + continue; + } fprintf(outfile, "\n"); if (range_p->shared_net) { fprintf(outfile, @@ -375,6 +387,9 @@ static int output_xml(const int print_mac_addreses) if (config.number_limit & S_BIT) { for (i = 0; i < num_shared_networks; i++) { shared_p++; + shnet_output_helper(&oh, shared_p); + if (config.skip_ok && oh.status == STATUS_OK) + continue; fprintf(outfile, "\n"); fprintf(outfile, "\t%s\n", shared_p->name); fprintf(outfile, "\t%g\n", shared_p->available); @@ -470,6 +485,10 @@ static int output_json(const int print_mac_addreses) fprintf(outfile, " \"subnets\": [\n"); for (i = 0; i < num_ranges; i++) { range_output_helper(&oh, range_p); + if (config.skip_ok && oh.status == STATUS_OK) { + range_p++; + continue; + } fprintf(outfile, " "); fprintf(outfile, "{ "); if (range_p->shared_net) { @@ -510,9 +529,11 @@ static int output_json(const int print_mac_addreses) } fprintf(outfile, " \"shared-networks\": [\n"); for (i = 0; i < num_shared_networks; i++) { - shnet_output_helper(&oh, shared_p); - fprintf(outfile, " "); shared_p++; + shnet_output_helper(&oh, shared_p); + if (config.skip_ok && oh.status == STATUS_OK) + continue; + fprintf(outfile, " "); fprintf(outfile, "{ "); fprintf(outfile, "\"location\":\"%s\", ", shared_p->name); fprintf(outfile, "\"defined\":%g, ", shared_p->available); @@ -801,6 +822,8 @@ static int output_html(void) for (i = 0; i < num_shared_networks; i++) { shared_p++; shnet_output_helper(&oh, shared_networks); + if (config.skip_ok && oh.status == STATUS_OK) + continue; start_tag(outfile, "tr"); output_line(outfile, "td", shared_p->name); output_double(outfile, "td", shared_p->available); @@ -843,6 +866,10 @@ static int output_html(void) start_tag(outfile, "tbody"); for (i = 0; i < num_ranges; i++) { range_output_helper(&oh, range_p); + if (config.skip_ok && oh.status == STATUS_OK) { + range_p++; + continue; + } start_tag(outfile, "tr"); if (range_p->shared_net) { output_line(outfile, "td", range_p->shared_net->name); @@ -916,6 +943,10 @@ static int output_csv(void) if (config.number_limit & R_BIT) { for (i = 0; i < num_ranges; i++) { range_output_helper(&oh, range_p); + if (config.skip_ok && oh.status == STATUS_OK) { + range_p++; + continue; + } if (range_p->shared_net) { fprintf(outfile, "\"%s\",", range_p->shared_net->name); } else { @@ -956,6 +987,8 @@ static int output_csv(void) for (i = 0; i < num_shared_networks; i++) { shared_p++; shnet_output_helper(&oh, shared_p); + if (config.skip_ok && oh.status == STATUS_OK) + continue; fprintf(outfile, "\"%s\",\"%g\",\"%g\",\"%.3f\",\"%g\",\"%g\",\"%.3f\"", shared_p->name, From 8fe7dc2c03ca4c5fabacb99916dc03f3092fd807 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 6 Nov 2017 22:34:06 +0000 Subject: [PATCH 058/158] other: add --skip-ok to usage() output Forgot in previous commit. Signed-off-by: Sami Kerola --- src/other.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/other.c b/src/other.c index 2031b01..3ee9162 100644 --- a/src/other.c +++ b/src/other.c @@ -579,6 +579,7 @@ void __attribute__ ((__noreturn__)) usage(int status) fputs( " -o, --output=FILE output into a file\n", out); fputs( " -L, --limit=NR output limit mask 77 - 00\n", out); fputs( " --color=WHEN use colors 'always', 'never', or 'auto'\n", out); + fputs( " --skip=ok do not print items below alarm threshold\n", out); fputs( " --warning=PERC set warning alarming limit\n", out); fputs( " --critical=PERC set critical alarming limit\n", out); fputs( " --warn-count=NR a number of free leases before warning raised\n", out); From eb7547c74287151842ac1b018a44c0e8d531c7c4 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 7 Nov 2017 10:41:53 +0000 Subject: [PATCH 059/158] output: json nan values need quoting Signed-off-by: Sami Kerola --- src/output.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/output.c b/src/output.c index 9a65144..4fd5fff 100644 --- a/src/output.c +++ b/src/output.c @@ -540,14 +540,23 @@ static int output_json(const int print_mac_addreses) fprintf(outfile, "\"used\":%g, ", shared_p->used); fprintf(outfile, "\"touched\":%g, ", shared_p->touched); fprintf(outfile, "\"free\":%g, ", shared_p->available - shared_p->used); - fprintf(outfile, "\"percent\":%g, ", oh.percent); - fprintf(outfile, "\"touch_count\":%g, ", oh.tc); - fprintf(outfile, "\"touch_percent\":%g, ", oh.tcp); - if (config.backups_found == 1) { - fprintf(outfile, "\"backup_count\":%g, ", shared_p->backups); - fprintf(outfile, "\"backup_percent\":%g, ", oh.bup); - } - fprintf(outfile, "\"status\":%d ", oh.status); + if (shared_p->available == 0) + fprintf(outfile, "\"percent\":\"%g\", ", oh.percent); + else + fprintf(outfile, "\"percent\":%g, ", oh.percent); + fprintf(outfile, "\"touch_count\":%g, ", oh.tc); + if (shared_p->available == 0) + fprintf(outfile, "\"touch_percent\":\"%g\", ", oh.tcp); + else + fprintf(outfile, "\"touch_percent\":%g, ", oh.tcp); + if (config.backups_found == 1) { + fprintf(outfile, "\"backup_count\":%g, ", shared_p->backups); + if (shared_p->available == 0) + fprintf(outfile, "\"backup_percent\":\"%g\", ", oh.bup); + else + fprintf(outfile, "\"backup_percent\":%g, ", oh.bup); + } + fprintf(outfile, "\"status\":%d ", oh.status); if (i + 1 < num_shared_networks) fprintf(outfile, "},\n"); else From e5cd46e4e99f5f721c06f20592d7fd8e17a45f36 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 7 Nov 2017 13:12:37 +0000 Subject: [PATCH 060/158] other: do not use 'else' after 'return' Signed-off-by: Sami Kerola --- src/other.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/other.c b/src/other.c index 3ee9162..2f31fcc 100644 --- a/src/other.c +++ b/src/other.c @@ -341,7 +341,8 @@ int if (memcmp("lease ", str, 6)) { set_ipv_functions(IPv4); return PREFIX_LEASE; - } else if (memcmp(" iaaddr ", str, 9)) { + } + if (memcmp(" iaaddr ", str, 9)) { set_ipv_functions(IPv6); return PREFIX_LEASE; } From e9736f74e7b3aeffc34fbb8b24d87f98af166e66 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 7 Nov 2017 13:37:59 +0000 Subject: [PATCH 061/158] getdata: do not use 'else' after 'continue' Signed-off-by: Sami Kerola --- src/getdata.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/getdata.c b/src/getdata.c index eb92c66..e77b76c 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -271,8 +271,8 @@ void parse_config(int is_include, const char *restrict config_file, if (i == 0) { newclause = 1; continue; - } else - break; + } + break; case '}': if (0 < quote) break; From 1182ec4cc97b96e16ffdf621dd49763d25c48178 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 7 Nov 2017 13:45:17 +0000 Subject: [PATCH 062/158] include: use project specific header guard Signed-off-by: Sami Kerola --- src/defaults.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/defaults.h b/src/defaults.h index c39149a..480f229 100644 --- a/src/defaults.h +++ b/src/defaults.h @@ -38,8 +38,8 @@ * the software. */ -#ifndef DEFAULTS_H -# define DEFAULTS_H 1 +#ifndef DHCPD_POOLS_DEFAULTS_H +# define DHCPD_POOLS_DEFAULTS_H 1 # include "dhcpd-pools.h" @@ -52,4 +52,4 @@ static const size_t MAXLEN = 1024; * \brief Maximum number of different shared networks in dhcpd.conf file. */ static const unsigned int SHARED_NETWORKS = 8192; -#endif /* DEFAULTS_H */ +#endif /* DHCPD_POOLS_DEFAULTS_H */ From fe847bb9b13595e0f81557ff4b454ac57676be61 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Wed, 8 Nov 2017 23:04:28 +0000 Subject: [PATCH 063/158] output: use range_output_helper() value in output_xml() Earlier commit started to use range_output_helper() in output_xml() so remove the unnecessary calls to get_range_size(). Reference: c55c8237531e0195f44ef4e03ab824e85b6b3607 Signed-off-by: Sami Kerola --- src/output.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/output.c b/src/output.c index 4fd5fff..ff1561d 100644 --- a/src/output.c +++ b/src/output.c @@ -321,7 +321,6 @@ static int output_xml(const int print_mac_addreses) { unsigned int i; struct range_t *range_p; - double range_size; struct shared_network_t *shared_p; struct output_helper_t oh; int ret; @@ -337,7 +336,6 @@ static int output_xml(const int print_mac_addreses) } range_p = ranges; - range_size = get_range_size(range_p); shared_p = shared_networks; fprintf(outfile, "\n"); @@ -374,12 +372,11 @@ static int output_xml(const int print_mac_addreses) } fprintf(outfile, "\t%s ", ntop_ipaddr(&range_p->first_ip)); fprintf(outfile, "- %s\n", ntop_ipaddr(&range_p->last_ip)); - fprintf(outfile, "\t%g\n", range_size); + fprintf(outfile, "\t%g\n", oh.range_size); fprintf(outfile, "\t%g\n", range_p->count); fprintf(outfile, "\t%g\n", range_p->touched); - fprintf(outfile, "\t%g\n", range_size - range_p->count); + fprintf(outfile, "\t%g\n", oh.range_size - range_p->count); range_p++; - range_size = get_range_size(range_p); fprintf(outfile, "\n"); } } From 7d9a5b5561f2543be63fe0fd6ae04847f48571e6 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Thu, 9 Nov 2017 09:49:26 +0000 Subject: [PATCH 064/158] output: add mustach templating support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Based on José Bollo's mustache C implementation. This adaptation uses project specific data structures to avoid overhead with json parsing. Reference: https://gitlab.com/jobol/mustach.git Commit: d84608a69033d38c81b8fcff0cb272e225dd5428 Signed-off-by: Sami Kerola --- THANKS | 1 + man/dhcpd-pools.1.in | 20 ++- src/Makemodule.am | 3 + src/dhcpd-pools.c | 8 +- src/dhcpd-pools.h | 4 + src/mustach-dhcpd-pools.c | 334 ++++++++++++++++++++++++++++++++++++++ src/mustach.c | 258 +++++++++++++++++++++++++++++ src/mustach.h | 112 +++++++++++++ src/output.c | 7 +- 9 files changed, 741 insertions(+), 6 deletions(-) create mode 100644 src/mustach-dhcpd-pools.c create mode 100644 src/mustach.c create mode 100644 src/mustach.h diff --git a/THANKS b/THANKS index f230fcd..bec03eb 100644 --- a/THANKS +++ b/THANKS @@ -42,3 +42,4 @@ Manuel Hachtkemper Klaus Slott Boris Lytochkin Jeff Bailey +José Bollo diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 5541cfe..935b1c0 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -8,6 +8,7 @@ dhcpd-pools \- ISC dhcpd pools usage analysis .OP \-\-sort nimcptTe .OP \-\-reverse .OP \-\-format tHcxXjJ +.OP \-\-mustach template .OP \-\-output file .OP \-\-limit nr .OP \-\-color when @@ -103,6 +104,14 @@ to include ethernet address. The default format is .IR @OUTPUT_FORMAT@ . .TP +\fB\-\-mustach\fR=\fITEMPLATE\fR +Output using mustach +.I template +file. Mustache tags in the template are same as json output without IP +address information. When the native output formats controlled with +.B \-\-format +option do not provide what you need you should use mustach instead. +.TP \fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR .I File where output is written. Default is stdout. @@ -280,8 +289,11 @@ Original design by Sami Kerola. XML support by Dominic Germain, Sogetel inc. .br IPv6 support by Cheer Xiao. -.PP -The software has FreeBSD License. +.br +Mustache templating support by José Bollo. +.SH LICENSE +The dhcpd-pools uses FreeBSD License, the mustache uses Apache License, and +the gnulib modules are Mostly, but not entirely, GPL. .SH "REPORTING BUGS" Report bugs to .MT @PACKAGE_BUGREPORT@ @@ -294,4 +306,6 @@ Home page .SH "SEE ALSO" .BR dhcpd.leases (5), .BR dhcpd.conf (5), -.BR chmod (1) +.BR chmod (1), +.UR https://mustache.github.io/ +.UE diff --git a/src/Makemodule.am b/src/Makemodule.am index 45e62b5..46ca5a3 100644 --- a/src/Makemodule.am +++ b/src/Makemodule.am @@ -13,6 +13,9 @@ dhcpd_pools_SOURCES = \ src/dhcpd-pools.h \ src/getdata.c \ src/hash.c \ + src/mustach-dhcpd-pools.c \ + src/mustach.c \ + src/mustach.h \ src/other.c \ src/output.c \ src/sort.c diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 2213ba8..4389e20 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -112,7 +112,8 @@ int main(int argc, char **argv) OPT_CRIT_COUNT, OPT_COLOR, OPT_SKIP_OK, - OPT_SET_IPV + OPT_SET_IPV, + OPT_MUSTACH }; int ret_val; @@ -126,6 +127,7 @@ int main(int argc, char **argv) {"reverse", no_argument, NULL, 'r'}, {"output", required_argument, NULL, 'o'}, {"limit", required_argument, NULL, 'L'}, + {"mustach", required_argument, NULL, OPT_MUSTACH}, {"version", no_argument, NULL, 'v'}, {"help", no_argument, NULL, 'h'}, {"snet-alarms", no_argument, NULL, OPT_SNET_ALARMS}, @@ -225,6 +227,10 @@ int main(int argc, char **argv) config.header_limit = return_limit(optarg[0]); config.number_limit = return_limit(optarg[1]); break; + case OPT_MUSTACH: + config.mustach_template = optarg; + output_format = 'm'; + break; case OPT_COLOR: config.color_mode = parse_color_mode(optarg); if (config.color_mode == color_unknown) diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index d3b2d75..5778666 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -225,6 +225,7 @@ struct configuration_t { int output_format; struct output_sort *sorts; char *output_file; + char *mustach_template; double warning; double critical; double warn_count; @@ -342,7 +343,10 @@ extern void mergesort_ranges(struct range_t *restrict orig, int size, struct range_t *restrict temp) __attribute__ ((nonnull(1, 3))); /* output function */ +extern void range_output_helper(struct output_helper_t *oh, struct range_t *range_p); +extern void shnet_output_helper(struct output_helper_t *oh, struct shared_network_t *shared_p); extern int output_analysis(const char); +extern int mustach_dhcpd_pools(void); /* Memory release, file closing etc */ extern void clean_up(void); /* Hash functions */ diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c new file mode 100644 index 0000000..1cc8bfc --- /dev/null +++ b/src/mustach-dhcpd-pools.c @@ -0,0 +1,334 @@ +/* + * The dhcpd-pools has BSD 2-clause license which also known as "Simplified + * BSD License" or "FreeBSD License". + * + * Copyright 2006- Sami Kerola. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR AND CONTRIBUTORS OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are + * those of the authors and should not be interpreted as representing + * official policies, either expressed or implied, of Sami Kerola. + */ + +/*! \file mustach-dhcpd-pools.c + * \brief Mustache templating specific functions. + */ + +#include + +#include +#include +#include +#include +#include + +#include "close-stream.h" +#include "dhcpd-pools.h" +#include "error.h" +#include "mustach.h" +#include "xalloc.h" + +struct expl { + struct range_t *range_p; + struct shared_network_t *shnet_p; + int current; +}; + +static int must_enter(void *closure, const char *name); +static int must_leave(void *closure); + +/* Set mustach function pointers. */ +static struct mustach_itf itf = { + .start = NULL, + .enter = must_enter, + .put = NULL, + .next = NULL, + .leave = must_leave +}; + +static int must_put_range(void *closure, const char *name, int escape + __attribute__ ((unused)), FILE *file) +{ + struct expl *e = closure; + struct output_helper_t oh; + + if (!strcmp(name, "location")) { + fprintf(file, "%s", e->range_p->shared_net->name); + return 0; + } + if (!strcmp(name, "range")) { + fprintf(file, "%s - %s", ntop_ipaddr(&e->range_p->first_ip), + ntop_ipaddr(&e->range_p->last_ip)); + return 0; + } + if (!strcmp(name, "used")) { + fprintf(file, "%g", e->range_p->count); + return 0; + } + if (!strcmp(name, "touched")) { + fprintf(file, "%g", e->range_p->touched); + return 0; + } + range_output_helper(&oh, e->range_p); + if (!strcmp(name, "defined")) { + fprintf(file, "%g", oh.range_size); + return 0; + } + if (!strcmp(name, "free")) { + fprintf(file, "%g", oh.range_size - e->range_p->count); + return 0; + } + if (!strcmp(name, "percent")) { + fprintf(file, "%g", oh.percent); + return 0; + } + if (!strcmp(name, "touch_count")) { + fprintf(file, "%g", oh.tc); + return 0; + } + if (!strcmp(name, "touch_percent")) { + fprintf(file, "%g", oh.tcp); + return 0; + } + if (config.backups_found == 1) { + if (!strcmp(name, "backup_count")) { + fprintf(file, "%g", e->range_p->backups); + return 0; + } + if (!strcmp(name, "backup_percent")) { + fprintf(file, "%g", oh.bup); + return 0; + } + } + if (!strcmp(name, "status")) { + fprintf(file, "%d", oh.status); + return 0; + } + return 0; +} + +static int must_put_shnet(void *closure, const char *name, int escape + __attribute__ ((unused)), FILE *file) +{ + struct expl *e = closure; + struct output_helper_t oh; + + if (!strcmp(name, "location")) { + fprintf(file, "%s", e->shnet_p->name); + return 0; + } + if (!strcmp(name, "defined")) { + fprintf(file, "%g", e->shnet_p->available); + return 0; + } + if (!strcmp(name, "used")) { + fprintf(file, "%g", e->shnet_p->used); + return 0; + } + if (!strcmp(name, "touched")) { + fprintf(file, "%g", e->shnet_p->touched); + return 0; + } + shnet_output_helper(&oh, e->shnet_p); + if (!strcmp(name, "free")) { + fprintf(file, "%g", e->shnet_p->available - e->shnet_p->used); + return 0; + } + if (!strcmp(name, "percent")) { + fprintf(file, "%g", oh.percent); + return 0; + } + if (!strcmp(name, "touch_count")) { + fprintf(file, "%g", oh.tc); + return 0; + } + if (!strcmp(name, "touch_percent")) { + fprintf(file, "%g", oh.tcp); + return 0; + } + if (config.backups_found == 1) { + if (!strcmp(name, "backup_count")) { + fprintf(file, "%g", e->shnet_p->backups); + return 0; + } + if (!strcmp(name, "backup_percent")) { + fprintf(file, "%g", oh.bup); + return 0; + } + } + if (!strcmp(name, "status")) { + fprintf(file, "%d", oh.status); + return 0; + } + return 0; +} + +static int must_next_range(void *closure) +{ + struct expl *e = closure; + struct output_helper_t oh; + + do { + e->range_p++; + e->current--; + if (e->current <= 0) + return 0; + range_output_helper(&oh, e->range_p); + } while (config.skip_ok && oh.status == STATUS_OK); + return 1; +} + +static int must_next_shnet(void *closure) +{ + struct expl *e = closure; + struct output_helper_t oh; + + do { + e->shnet_p++; + e->current--; + if (e->current <= 0) + return 0; + shnet_output_helper(&oh, e->shnet_p); + } while (config.skip_ok && oh.status == STATUS_OK); + return 1; +} + +static int must_enter(void *closure, const char *name) +{ + struct expl *e = closure; + + if (!strcmp(name, "subnets")) { + itf.put = must_put_range; + itf.next = must_next_range; + e->current = num_ranges; + e->range_p = ranges; + /* must_next_range() will skip_ok when needed */ + return must_next_range(closure); + } + if (!strcmp(name, "shared-networks")) { + itf.put = must_put_shnet; + itf.next = must_next_shnet; + e->shnet_p = shared_networks; + e->current = num_shared_networks + 1; + return must_next_shnet(closure); + } + if (!strcmp(name, "summary")) { + itf.put = must_put_shnet; + itf.next = must_next_shnet; + e->shnet_p = shared_networks; + e->current = 1; + return 1; + } + return 0; +} + +static int must_leave(void *closure __attribute__ ((unused))) +{ + struct expl *e = closure; + + e->shnet_p = shared_networks; + e->range_p = ranges; + return 0; +} + +static char *must_read_template(const char *filename) +{ + int f; + struct stat s; + char *result; + + if ((f = open(filename, O_RDONLY)) < 0) { + error(EXIT_FAILURE, errno, "must_read_template: open: %s", filename); + } + fstat(f, &s); + result = xmalloc(s.st_size + 1); + if (read(f, result, s.st_size) != s.st_size) { + error(EXIT_FAILURE, errno, "must_read_template: read: %s", filename); + } + close(f); + result[s.st_size] = 0; + return result; +} + + +int mustach_dhcpd_pools(void) +{ + struct expl e; + char *template; + FILE *outfile; + int ret; + + template = must_read_template(config.mustach_template); + if (config.output_file[0]) { + outfile = fopen(config.output_file, "w+"); + if (outfile == NULL) { + error(EXIT_FAILURE, errno, "mustach_dhcpd_pools: fopen: %s", + config.output_file); + } + } else { + outfile = stdout; + } + ret = fmustach(template, &itf, &e, outfile); + free(template); + if (outfile == stdout) { + if (fflush(stdout)) + error(EXIT_FAILURE, errno, "mustach_dhcpd_pools: fflush"); + } else { + if (close_stream(outfile)) + error(EXIT_FAILURE, errno, "mustach_dhcpd_pools: fclose"); + } + switch (ret) { + case MUSTACH_OK: + return 0; + case MUSTACH_ERROR_SYSTEM: + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: system error"); + break; + case MUSTACH_ERROR_UNEXPECTED_END: + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: unexpected end"); + break; + case MUSTACH_ERROR_EMPTY_TAG: + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: empty tag"); + break; + case MUSTACH_ERROR_TAG_TOO_LONG: + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: too long tag"); + break; + case MUSTACH_ERROR_BAD_SEPARATORS: + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: bad separator"); + break; + case MUSTACH_ERROR_TOO_DEPTH: + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: too deep"); + break; + case MUSTACH_ERROR_CLOSING: + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: closing"); + break; + case MUSTACH_ERROR_BAD_UNESCAPE_TAG: + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: bad escape tag"); + break; + default: + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: unknown error"); + } + return 1; +} diff --git a/src/mustach.c b/src/mustach.c new file mode 100644 index 0000000..9868cff --- /dev/null +++ b/src/mustach.c @@ -0,0 +1,258 @@ +/* + Author: José Bollo + Author: José Bollo + + https://gitlab.com/jobol/mustach + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#define _GNU_SOURCE + +#include +#include +#include +#include +#include + +#include "mustach.h" + +#define NAME_LENGTH_MAX 1024 +#define DEPTH_MAX 256 + +static int getpartial(struct mustach_itf *itf, void *closure, const char *name, char **result) +{ + int rc; + FILE *file; + size_t size; + + *result = NULL; + file = open_memstream(result, &size); + if (file == NULL) + rc = MUSTACH_ERROR_SYSTEM; + else { + rc = itf->put(closure, name, 0, file); + if (rc == 0) + /* adds terminating null */ + rc = fputc(0, file) ? MUSTACH_ERROR_SYSTEM : 0; + fclose(file); + if (rc < 0) { + free(*result); + *result = NULL; + } + } + return rc; +} + +static int process(const char *template, struct mustach_itf *itf, void *closure, FILE *file, const char *opstr, const char *clstr) +{ + char name[NAME_LENGTH_MAX + 1], *partial, c; + const char *beg, *term; + struct { const char *name, *again; size_t length; int emit, entered; } stack[DEPTH_MAX]; + size_t oplen, cllen, len, l; + int depth, rc, emit; + + emit = 1; + oplen = strlen(opstr); + cllen = strlen(clstr); + depth = 0; + for(;;) { + beg = strstr(template, opstr); + if (beg == NULL) { + /* no more mustach */ + if (emit) + fwrite(template, strlen(template), 1, file); + return depth ? MUSTACH_ERROR_UNEXPECTED_END : 0; + } + if (emit) + fwrite(template, (size_t)(beg - template), 1, file); + beg += oplen; + term = strstr(beg, clstr); + if (term == NULL) + return MUSTACH_ERROR_UNEXPECTED_END; + template = term + cllen; + len = (size_t)(term - beg); + c = *beg; + switch(c) { + case '!': + case '=': + break; + case '{': + for (l = 0 ; clstr[l] == '}' ; l++); + if (clstr[l]) { + if (!len || beg[len-1] != '}') + return MUSTACH_ERROR_BAD_UNESCAPE_TAG; + len--; + } else { + if (term[l] != '}') + return MUSTACH_ERROR_BAD_UNESCAPE_TAG; + template++; + } + c = '&'; + /*@fallthrough@*/ + case '^': + case '#': + case '/': + case '&': + case '>': +#if !defined(NO_EXTENSION_FOR_MUSTACH) && !defined(NO_COLON_EXTENSION_FOR_MUSTACH) + case ':': +#endif + beg++; len--; + default: + while (len && isspace(beg[0])) { beg++; len--; } + while (len && isspace(beg[len-1])) len--; + if (len == 0) + return MUSTACH_ERROR_EMPTY_TAG; + if (len > NAME_LENGTH_MAX) + return MUSTACH_ERROR_TAG_TOO_LONG; + memcpy(name, beg, len); + name[len] = 0; + break; + } + switch(c) { + case '!': + /* comment */ + /* nothing to do */ + break; + case '=': + /* defines separators */ + if (len < 5 || beg[len - 1] != '=') + return MUSTACH_ERROR_BAD_SEPARATORS; + beg++; + len -= 2; + for (l = 0; l < len && !isspace(beg[l]) ; l++); + if (l == len) + return MUSTACH_ERROR_BAD_SEPARATORS; + opstr = strndupa(beg, l); + while (l < len && isspace(beg[l])) l++; + if (l == len) + return MUSTACH_ERROR_BAD_SEPARATORS; + clstr = strndupa(beg + l, len - l); + oplen = strlen(opstr); + cllen = strlen(clstr); + break; + case '^': + case '#': + /* begin section */ + if (depth == DEPTH_MAX) + return MUSTACH_ERROR_TOO_DEPTH; + rc = emit; + if (rc) { + rc = itf->enter(closure, name); + if (rc < 0) + return rc; + } + stack[depth].name = beg; + stack[depth].again = template; + stack[depth].length = len; + stack[depth].emit = emit; + stack[depth].entered = rc; + if ((c == '#') == (rc == 0)) + emit = 0; + depth++; + break; + case '/': + /* end section */ + if (depth-- == 0 || len != stack[depth].length || memcmp(stack[depth].name, name, len)) + return MUSTACH_ERROR_CLOSING; + rc = emit && stack[depth].entered ? itf->next(closure) : 0; + if (rc < 0) + return rc; + if (rc) { + template = stack[depth++].again; + } else { + emit = stack[depth].emit; + if (emit && stack[depth].entered) + itf->leave(closure); + } + break; + case '>': + /* partials */ + if (emit) { + rc = getpartial(itf, closure, name, &partial); + if (rc == 0) { + rc = process(partial, itf, closure, file, opstr, clstr); + free(partial); + } + if (rc < 0) + return rc; + } + break; + default: + /* replacement */ + if (emit) { + rc = itf->put(closure, name, c != '&', file); + if (rc < 0) + return rc; + } + break; + } + } +} + +int fmustach(const char *template, struct mustach_itf *itf, void *closure, FILE *file) +{ + int rc = itf->start ? itf->start(closure) : 0; + if (rc == 0) + rc = process(template, itf, closure, file, "{{", "}}"); + return rc; +} + +int fdmustach(const char *template, struct mustach_itf *itf, void *closure, int fd) +{ + int rc; + FILE *file; + + file = fdopen(fd, "w"); + if (file == NULL) { + rc = MUSTACH_ERROR_SYSTEM; + errno = ENOMEM; + } else { + rc = fmustach(template, itf, closure, file); + fclose(file); + } + return rc; +} + +int mustach(const char *template, struct mustach_itf *itf, void *closure, char **result, size_t *size) +{ + int rc; + FILE *file; + size_t s; + + *result = NULL; + if (size == NULL) + size = &s; + file = open_memstream(result, size); + if (file == NULL) { + rc = MUSTACH_ERROR_SYSTEM; + errno = ENOMEM; + } else { + rc = fmustach(template, itf, closure, file); + if (rc == 0) + /* adds terminating null */ + rc = fputc(0, file) ? MUSTACH_ERROR_SYSTEM : 0; + fclose(file); + if (rc >= 0) + /* removes terminating null of the length */ + (*size)--; + else { + free(*result); + *result = NULL; + *size = 0; + } + } + return rc; +} + diff --git a/src/mustach.h b/src/mustach.h new file mode 100644 index 0000000..8196679 --- /dev/null +++ b/src/mustach.h @@ -0,0 +1,112 @@ +/* + Author: José Bollo + Author: José Bollo + + https://gitlab.com/jobol/mustach + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef _mustach_h_included_ +#define _mustach_h_included_ + +/** + * mustach_itf - interface for callbacks + * + * All of this function should return a negative value to stop + * the mustache processing. The returned negative value will be + * then returned to the caller of mustach as is. + * + * The functions enter and next should return 0 or 1. + * + * All other functions should normally return 0. + * + * @start: Starts the mustach processing of the closure + * 'start' is optional (can be NULL) + * + * @put: Writes the value of 'name' to 'file' with 'escape' or not + * + * @enter: Enters the section of 'name' if possible. + * Musts return 1 if entered or 0 if not entered. + * When 1 is returned, the function 'leave' will always be called. + * Conversely 'leave' is never called when enter returns 0 or + * a negative value. + * When 1 is returned, the function must activate the first + * item of the section. + * + * @next: Activates the next item of the section if it exists. + * Musts return 1 when the next item is activated. + * Musts return 0 when there is no item to activate. + * + * @leave: Leaves the last entered section + */ +struct mustach_itf { + int (*start)(void *closure); + int (*put)(void *closure, const char *name, int escape, FILE *file); + int (*enter)(void *closure, const char *name); + int (*next)(void *closure); + int (*leave)(void *closure); +}; + +#define MUSTACH_OK 0 +#define MUSTACH_ERROR_SYSTEM -1 +#define MUSTACH_ERROR_UNEXPECTED_END -2 +#define MUSTACH_ERROR_EMPTY_TAG -3 +#define MUSTACH_ERROR_TAG_TOO_LONG -4 +#define MUSTACH_ERROR_BAD_SEPARATORS -5 +#define MUSTACH_ERROR_TOO_DEPTH -6 +#define MUSTACH_ERROR_CLOSING -7 +#define MUSTACH_ERROR_BAD_UNESCAPE_TAG -8 + +/** + * fmustach - Renders the mustache 'template' in 'file' for 'itf' and 'closure'. + * + * @template: the template string to instanciate + * @itf: the interface to the functions that mustach calls + * @closure: the closure to pass to functions called + * @file: the file where to write the result + * + * Returns 0 in case of success, -1 with errno set in case of system error + * a other negative value in case of error. + */ +extern int fmustach(const char *template, struct mustach_itf *itf, void *closure, FILE *file); + +/** + * fmustach - Renders the mustache 'template' in 'fd' for 'itf' and 'closure'. + * + * @template: the template string to instanciate + * @itf: the interface to the functions that mustach calls + * @closure: the closure to pass to functions called + * @fd: the file descriptor number where to write the result + * + * Returns 0 in case of success, -1 with errno set in case of system error + * a other negative value in case of error. + */ +extern int fdmustach(const char *template, struct mustach_itf *itf, void *closure, int fd); + +/** + * fmustach - Renders the mustache 'template' in 'result' for 'itf' and 'closure'. + * + * @template: the template string to instanciate + * @itf: the interface to the functions that mustach calls + * @closure: the closure to pass to functions called + * @result: the pointer receiving the result when 0 is returned + * @size: the size of the returned result + * + * Returns 0 in case of success, -1 with errno set in case of system error + * a other negative value in case of error. + */ +extern int mustach(const char *template, struct mustach_itf *itf, void *closure, char **result, size_t *size); + +#endif + diff --git a/src/output.c b/src/output.c index ff1561d..28f2a57 100644 --- a/src/output.c +++ b/src/output.c @@ -60,7 +60,7 @@ #include "dhcpd-pools.h" /*! \brief Calculate range percentages and such. */ -static void range_output_helper(struct output_helper_t *oh, struct range_t *range_p) +void range_output_helper(struct output_helper_t *oh, struct range_t *range_p) { /* counts and calculations */ oh->range_size = get_range_size(range_p); @@ -87,7 +87,7 @@ static void range_output_helper(struct output_helper_t *oh, struct range_t *rang } /*! \brief Calculate shared network percentages and such. */ -static void shnet_output_helper(struct output_helper_t *oh, struct shared_network_t *shared_p) +void shnet_output_helper(struct output_helper_t *oh, struct shared_network_t *shared_p) { /* counts and calculations */ oh->tc = shared_p->touched + shared_p->used; @@ -1265,6 +1265,9 @@ int output_analysis(const char c) case 'c': ret = output_csv(); break; + case 'm': + ret = mustach_dhcpd_pools(); + break; default: error(EXIT_FAILURE, 0, "unknown output format: '%c'", c); } From 74fdf90980d6b0887a76bad491acad437f4fa888 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Thu, 9 Nov 2017 09:55:11 +0000 Subject: [PATCH 065/158] output: add separate first_ip and last_ip to json and mustach outputs This give greater liberty to people who are using these formats to do what ever they need to. Signed-off-by: Sami Kerola --- src/mustach-dhcpd-pools.c | 8 ++++++++ src/output.c | 2 ++ tests/expected/same-twice-json | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 1cc8bfc..d8096e2 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -84,6 +84,14 @@ static int must_put_range(void *closure, const char *name, int escape ntop_ipaddr(&e->range_p->last_ip)); return 0; } + if (!strcmp(name, "first_ip")) { + fprintf(file, "%s", ntop_ipaddr(&e->range_p->first_ip)); + return 0; + } + if (!strcmp(name, "last_ip")) { + fprintf(file, "%s", ntop_ipaddr(&e->range_p->last_ip)); + return 0; + } if (!strcmp(name, "used")) { fprintf(file, "%g", e->range_p->count); return 0; diff --git a/src/output.c b/src/output.c index 28f2a57..5c86d54 100644 --- a/src/output.c +++ b/src/output.c @@ -497,6 +497,8 @@ static int output_json(const int print_mac_addreses) fprintf(outfile, "\"range\":\"%s", ntop_ipaddr(&range_p->first_ip)); fprintf(outfile, " - %s\", ", ntop_ipaddr(&range_p->last_ip)); + fprintf(outfile, "\"first_ip\":\"%s\", ", ntop_ipaddr(&range_p->first_ip)); + fprintf(outfile, "\"last_ip\":\"%s\", ", ntop_ipaddr(&range_p->last_ip)); fprintf(outfile, "\"defined\":%g, ", oh.range_size); fprintf(outfile, "\"used\":%g, ", range_p->count); fprintf(outfile, "\"touched\":%g, ", range_p->touched); diff --git a/tests/expected/same-twice-json b/tests/expected/same-twice-json index 598410d..43d431b 100644 --- a/tests/expected/same-twice-json +++ b/tests/expected/same-twice-json @@ -3,7 +3,7 @@ { "ip":"10.0.0.5", "macaddress":"00:00:00:00:00:00" } ], "subnets": [ - { "location":"All networks", "range":"10.0.0.1 - 10.0.0.10", "defined":10, "used":1, "touched":0, "free":9, "percent":10, "touch_count":1, "touch_percent":10, "status":0 } + { "location":"All networks", "range":"10.0.0.1 - 10.0.0.10", "first_ip":"10.0.0.1", "last_ip":"10.0.0.10", "defined":10, "used":1, "touched":0, "free":9, "percent":10, "touch_count":1, "touch_percent":10, "status":0 } ], "shared-networks": [ ], From 39e6e652018a5770c29b4543e11a516052512a98 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Thu, 9 Nov 2017 10:04:23 +0000 Subject: [PATCH 066/158] docs: add mustach sample files Include samples to installation, and give a hint to user where it can be found in manual page. Signed-off-by: Sami Kerola --- Makefile.am | 2 + man/dhcpd-pools.1.in | 3 + samples/Makemodule.am | 4 + samples/dhcpd.conf | 31 ++++++ samples/dhcpd.leases | 210 +++++++++++++++++++++++++++++++++++++++ samples/mustach.template | 44 ++++++++ 6 files changed, 294 insertions(+) create mode 100644 samples/Makemodule.am create mode 100644 samples/dhcpd.conf create mode 100644 samples/dhcpd.leases create mode 100644 samples/mustach.template diff --git a/Makefile.am b/Makefile.am index 0daa8bf..b1f14be 100644 --- a/Makefile.am +++ b/Makefile.am @@ -35,6 +35,7 @@ edit_cmd = sed \ -e 's|@SHELL[@]|$(SHELL)|g' \ -e 's|@VERSION[@]|$(VERSION)|g' \ -e 's|@bindir[@]|$(bindir)|g' \ + -e 's|@docdir[@]|$(docdir)|g' \ -e 's|@top_srcdir[@]|$(top_srcdir)|g' $(PATHFILES): Makefile @@ -48,6 +49,7 @@ $(PATHFILES): Makefile include contrib/Makemodule.am include doc/Makemodule.am include man/Makemodule.am +include samples/Makemodule.am include src/Makemodule.am include tests/Makemodule.am diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 935b1c0..e5f014e 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -111,6 +111,9 @@ file. Mustache tags in the template are same as json output without IP address information. When the native output formats controlled with .B \-\-format option do not provide what you need you should use mustach instead. +.IP +@bindir@/dhcpd-pools --config @docdir@/dhcpd.conf --leases +@docdir@/dhcpd.leases --mustach @docdir@/mustach.template .TP \fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR .I File diff --git a/samples/Makemodule.am b/samples/Makemodule.am new file mode 100644 index 0000000..2d1bddd --- /dev/null +++ b/samples/Makemodule.am @@ -0,0 +1,4 @@ +dist_doc_DATA = \ + samples/dhcpd.conf \ + samples/dhcpd.leases \ + samples/mustach.template diff --git a/samples/dhcpd.conf b/samples/dhcpd.conf new file mode 100644 index 0000000..0ef9eb0 --- /dev/null +++ b/samples/dhcpd.conf @@ -0,0 +1,31 @@ +shared-network example1 { + subnet 10.0.0.0 netmask 255.255.255.0 { + pool { + range 10.0.0.1 10.0.0.20; + } + } + subnet 10.1.0.0 netmask 255.255.255.0 { + pool { + range 10.1.0.1 10.1.0.20; + } + } +} + +shared-network example2 { + subnet 10.2.0.0 netmask 255.255.255.0 { + pool { + range 10.2.0.1 10.2.0.20; + } + } + subnet 10.3.0.0 netmask 255.255.255.0 { + pool { + range 10.3.0.1 10.3.0.20; + } + } +} + +subnet 10.4.0.0 netmask 255.255.255.0 { + pool { + range 10.4.0.1 10.4.0.20; + } +} diff --git a/samples/dhcpd.leases b/samples/dhcpd.leases new file mode 100644 index 0000000..0d7e317 --- /dev/null +++ b/samples/dhcpd.leases @@ -0,0 +1,210 @@ +lease 10.0.0.0 { + binding state active; + hardware ethernet 00:00:00:00:00:00; +} +lease 10.0.0.1 { + binding state active; + hardware ethernet 00:00:00:00:00:01; +} +lease 10.0.0.2 { + binding state active; + hardware ethernet 00:00:00:00:00:02; +} +lease 10.0.0.3 { + binding state active; + hardware ethernet 00:00:00:00:00:03; +} +lease 10.0.0.4 { + binding state active; + hardware ethernet 00:00:00:00:00:04; +} +lease 10.0.0.5 { + binding state active; + hardware ethernet 00:00:00:00:00:05; +} +lease 10.0.0.6 { + binding state active; + hardware ethernet 00:00:00:00:00:06; +} +lease 10.0.0.7 { + binding state active; + hardware ethernet 00:00:00:00:00:07; +} +lease 10.0.0.8 { + binding state active; + hardware ethernet 00:00:00:00:00:08; +} +lease 10.0.0.9 { + binding state active; + hardware ethernet 00:00:00:00:00:09; +} +lease 10.0.0.10 { + binding state active; + hardware ethernet 00:00:00:00:00:10; +} +lease 10.0.0.11 { + binding state active; + hardware ethernet 00:00:00:00:00:11; +} +lease 10.0.0.12 { + binding state backup; + hardware ethernet 00:00:00:00:00:12; +} + + +lease 10.1.0.0 { + binding state active; + hardware ethernet 00:00:00:00:01:00; +} +lease 10.1.0.1 { + binding state active; + hardware ethernet 00:00:00:00:01:01; +} +lease 10.1.0.2 { + binding state active; + hardware ethernet 00:00:00:00:01:02; +} +lease 10.1.0.3 { + binding state active; + hardware ethernet 00:00:00:00:01:03; +} +lease 10.1.0.4 { + binding state active; + hardware ethernet 00:00:00:00:01:04; +} +lease 10.1.0.5 { + binding state active; + hardware ethernet 00:00:00:00:01:05; +} +lease 10.1.0.6 { + binding state active; + hardware ethernet 00:00:00:00:01:06; +} +lease 10.1.0.7 { + binding state active; + hardware ethernet 00:00:00:00:01:07; +} +lease 10.1.0.8 { + binding state active; + hardware ethernet 00:00:00:00:01:08; +} +lease 10.1.0.9 { + binding state active; + hardware ethernet 00:00:00:00:01:09; +} +lease 10.1.0.10 { + binding state active; + hardware ethernet 00:00:00:00:01:10; +} + + +lease 10.2.0.0 { + binding state active; + hardware ethernet 00:00:00:00:02:00; +} +lease 10.2.0.1 { + binding state active; + hardware ethernet 00:00:00:00:02:01; +} +lease 10.2.0.2 { + binding state active; + hardware ethernet 00:00:00:00:02:02; +} +lease 10.2.0.3 { + binding state active; + hardware ethernet 00:00:00:00:02:03; +} +lease 10.2.0.4 { + binding state active; + hardware ethernet 00:00:00:00:02:04; +} +lease 10.2.0.5 { + binding state active; + hardware ethernet 00:00:00:00:02:05; +} +lease 10.2.0.6 { + binding state active; + hardware ethernet 00:00:00:00:02:06; +} +lease 10.2.0.7 { + binding state active; + hardware ethernet 00:00:00:00:02:07; +} +lease 10.2.0.8 { + binding state active; + hardware ethernet 00:00:00:00:02:08; +} + +lease 10.3.0.0 { + binding state active; + hardware ethernet 00:00:00:00:03:00; +} +lease 10.3.0.1 { + binding state active; + hardware ethernet 00:00:00:00:03:01; +} +lease 10.3.0.2 { + binding state active; + hardware ethernet 00:00:00:00:03:02; +} +lease 10.3.0.3 { + binding state active; + hardware ethernet 00:00:00:00:03:03; +} +lease 10.3.0.4 { + binding state active; + hardware ethernet 00:00:00:00:03:04; +} +lease 10.3.0.5 { + binding state active; + hardware ethernet 00:00:00:00:03:05; +} +lease 10.3.0.6 { + binding state active; + hardware ethernet 00:00:00:00:03:06; +} +lease 10.3.0.7 { + binding state active; + hardware ethernet 00:00:00:00:03:07; +} +lease 10.3.0.8 { + binding state active; + hardware ethernet 00:00:00:00:03:08; +} +lease 10.3.0.9 { + binding state active; + hardware ethernet 00:00:00:00:03:09; +} +lease 10.3.0.9 { + binding state active; + hardware ethernet 00:00:00:00:03:09; +} + +lease 10.4.0.0 { + binding state active; + hardware ethernet 00:00:00:00:04:00; +} +lease 10.4.0.1 { + binding state active; + hardware ethernet 00:00:00:00:04:01; +} +lease 10.4.0.2 { + binding state active; + hardware ethernet 00:00:00:00:04:02; +} +lease 10.4.0.3 { + binding state active; + hardware ethernet 00:00:00:00:04:03; +} +lease 10.4.0.4 { + binding state active; + hardware ethernet 00:00:00:00:04:04; +} +lease 10.4.0.5 { + binding state active; + hardware ethernet 00:00:00:00:04:05; +} +lease 10.4.0.6 { + binding state backup; + hardware ethernet 00:00:00:00:04:06; +} diff --git a/samples/mustach.template b/samples/mustach.template new file mode 100644 index 0000000..f8582c3 --- /dev/null +++ b/samples/mustach.template @@ -0,0 +1,44 @@ +Subnets:{{#subnets}} + location: {{location}} + range: {{range}} + first_ip: {{first_ip}} + last_ip: {{last_ip}} + used: {{used}} + touched: {{touched}} + defined: {{defined}} + free: {{free}} + percent: {{percent}} + touch_count: {{touch_count}} + touch_percent: {{touch_percent}} + backup_count: {{backup_count}} + backup_percent: {{backup_percent}} + status: {{status}} +{{/subnets}} + +Shared-networks:{{#shared-networks}} + location: {{location}} + defined: {{defined}} + used: {{used}} + touched: {{touched}} + free: {{free}} + percent: {{percent}} + touch_count: {{touch_count}} + touch_percent: {{touch_percent}} + backup_count: {{backup_count}} + backup_percent: {{backup_percent}} + status: {{status}} +{{/shared-networks}} + +Summary:{{#summary}} + location: {{location}} + defined: {{defined}} + used: {{used}} + touched: {{touched}} + free: {{free}} + percent: {{percent}} + touch_count: {{touch_count}} + touch_percent: {{touch_percent}} + backup_count: {{backup_count}} + backup_percent: {{backup_percent}} + status: {{status}} +{{/summary}} From 2ec953858b0e7bbe71a93c84190d35bba60e17b8 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Thu, 9 Nov 2017 11:23:42 +0000 Subject: [PATCH 067/158] tests: add mustach check Use samples directory data as input to ensure they do not break. Signed-off-by: Sami Kerola --- tests/Makemodule.am | 1 + tests/expected/mustach | 161 +++++++++++++++++++++++++++++++++++++++++ tests/mustach | 19 +++++ 3 files changed, 181 insertions(+) create mode 100644 tests/expected/mustach create mode 100755 tests/mustach diff --git a/tests/Makemodule.am b/tests/Makemodule.am index 2784298..252d638 100644 --- a/tests/Makemodule.am +++ b/tests/Makemodule.am @@ -18,6 +18,7 @@ TESTS = \ tests/full-json \ tests/full-xml \ tests/leading0 \ + tests/mustach \ tests/one-ip \ tests/one-line \ tests/range4 \ diff --git a/tests/expected/mustach b/tests/expected/mustach new file mode 100644 index 0000000..f2bd27b --- /dev/null +++ b/tests/expected/mustach @@ -0,0 +1,161 @@ +Subnets: + location: example1 + range: 10.1.0.1 - 10.1.0.1 + first_ip: 10.1.0.1 + last_ip: 10.1.0.20 + used: 10 + touched: 0 + defined: 20 + free: 10 + percent: 50 + touch_count: 10 + touch_percent: 50 + backup_count: 0 + backup_percent: 0 + status: 0 + + location: example2 + range: 10.2.0.1 - 10.2.0.1 + first_ip: 10.2.0.1 + last_ip: 10.2.0.20 + used: 8 + touched: 0 + defined: 20 + free: 12 + percent: 40 + touch_count: 8 + touch_percent: 40 + backup_count: 0 + backup_percent: 0 + status: 0 + + location: example2 + range: 10.3.0.1 - 10.3.0.1 + first_ip: 10.3.0.1 + last_ip: 10.3.0.20 + used: 9 + touched: 0 + defined: 20 + free: 11 + percent: 45 + touch_count: 9 + touch_percent: 45 + backup_count: 0 + backup_percent: 0 + status: 0 + + location: All networks + range: 10.4.0.1 - 10.4.0.1 + first_ip: 10.4.0.1 + last_ip: 10.4.0.20 + used: 5 + touched: 0 + defined: 20 + free: 15 + percent: 25 + touch_count: 5 + touch_percent: 25 + backup_count: 1 + backup_percent: 5 + status: 0 + + +Shared-networks: + location: example1 + defined: 40 + used: 21 + touched: 0 + free: 19 + percent: 52.5 + touch_count: 21 + touch_percent: 52.5 + backup_count: 1 + backup_percent: 2.5 + status: 0 + + location: example2 + defined: 40 + used: 17 + touched: 0 + free: 23 + percent: 42.5 + touch_count: 17 + touch_percent: 42.5 + backup_count: 0 + backup_percent: 0 + status: 0 + + +Summary: + location: All networks + defined: 100 + used: 43 + touched: 0 + free: 57 + percent: 43 + touch_count: 43 + touch_percent: 43 + backup_count: 3 + backup_percent: 3 + status: 0 + +--- skip ok --- +Subnets: + location: example1 + range: 10.1.0.1 - 10.1.0.1 + first_ip: 10.1.0.1 + last_ip: 10.1.0.20 + used: 10 + touched: 0 + defined: 20 + free: 10 + percent: 50 + touch_count: 10 + touch_percent: 50 + backup_count: 0 + backup_percent: 0 + status: 1 + + location: example2 + range: 10.3.0.1 - 10.3.0.1 + first_ip: 10.3.0.1 + last_ip: 10.3.0.20 + used: 9 + touched: 0 + defined: 20 + free: 11 + percent: 45 + touch_count: 9 + touch_percent: 45 + backup_count: 0 + backup_percent: 0 + status: 1 + + +Shared-networks: + location: example1 + defined: 40 + used: 21 + touched: 0 + free: 19 + percent: 52.5 + touch_count: 21 + touch_percent: 52.5 + backup_count: 1 + backup_percent: 2.5 + status: 1 + + +Summary: + location: All networks + defined: 100 + used: 43 + touched: 0 + free: 57 + percent: 43 + touch_count: 43 + touch_percent: 43 + backup_count: 3 + backup_percent: 3 + status: 0 + diff --git a/tests/mustach b/tests/mustach new file mode 100755 index 0000000..4a282c6 --- /dev/null +++ b/tests/mustach @@ -0,0 +1,19 @@ +#!/bin/sh +# +# Minimal regression test suite. + +IAM=$(basename $0) + +if [ ! -d tests/outputs ]; then + mkdir tests/outputs +fi + +dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ + --mustach $top_srcdir/samples/mustach.template -o tests/outputs/$IAM + +echo "--- skip ok ---" >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ + --mustach $top_srcdir/samples/mustach.template --skip-ok --warning 44 >> tests/outputs/$IAM + +diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM +exit $? From 66183bc7c7ae0d3f367c08f4e7476c4cbcd459cd Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Thu, 9 Nov 2017 18:51:29 +0000 Subject: [PATCH 068/158] output: make mustach processing more robust Fix issues found with afl-fuzz. It is a pity I had to change mustach.c it is no longer exactly the same as upstream. Lets see if Jose will accept these changes. Signed-off-by: Sami Kerola --- src/mustach.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mustach.c b/src/mustach.c index 9868cff..e2da8b2 100644 --- a/src/mustach.c +++ b/src/mustach.c @@ -38,7 +38,7 @@ static int getpartial(struct mustach_itf *itf, void *closure, const char *name, *result = NULL; file = open_memstream(result, &size); - if (file == NULL) + if (itf->put == NULL || file == NULL) rc = MUSTACH_ERROR_SYSTEM; else { rc = itf->put(closure, name, 0, file); @@ -192,6 +192,8 @@ static int process(const char *template, struct mustach_itf *itf, void *closure, default: /* replacement */ if (emit) { + if (itf->put == NULL) + return MUSTACH_ERROR_SYSTEM; rc = itf->put(closure, name, c != '&', file); if (rc < 0) return rc; From 50fc4ebe9dce4b9d57d0e9da0e13bc0239408dce Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 11 Nov 2017 08:12:51 +0000 Subject: [PATCH 069/158] output: avoid mixing ntop_ipaddr() output buffers Signed-off-by: Sami Kerola --- src/mustach-dhcpd-pools.c | 4 ++-- tests/expected/mustach | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index d8096e2..fe06fce 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -80,8 +80,8 @@ static int must_put_range(void *closure, const char *name, int escape return 0; } if (!strcmp(name, "range")) { - fprintf(file, "%s - %s", ntop_ipaddr(&e->range_p->first_ip), - ntop_ipaddr(&e->range_p->last_ip)); + fprintf(file, "%s - ", ntop_ipaddr(&e->range_p->first_ip)); + fprintf(file, "%s", ntop_ipaddr(&e->range_p->last_ip)); return 0; } if (!strcmp(name, "first_ip")) { diff --git a/tests/expected/mustach b/tests/expected/mustach index f2bd27b..4599887 100644 --- a/tests/expected/mustach +++ b/tests/expected/mustach @@ -1,6 +1,6 @@ Subnets: location: example1 - range: 10.1.0.1 - 10.1.0.1 + range: 10.1.0.1 - 10.1.0.20 first_ip: 10.1.0.1 last_ip: 10.1.0.20 used: 10 @@ -15,7 +15,7 @@ Subnets: status: 0 location: example2 - range: 10.2.0.1 - 10.2.0.1 + range: 10.2.0.1 - 10.2.0.20 first_ip: 10.2.0.1 last_ip: 10.2.0.20 used: 8 @@ -30,7 +30,7 @@ Subnets: status: 0 location: example2 - range: 10.3.0.1 - 10.3.0.1 + range: 10.3.0.1 - 10.3.0.20 first_ip: 10.3.0.1 last_ip: 10.3.0.20 used: 9 @@ -45,7 +45,7 @@ Subnets: status: 0 location: All networks - range: 10.4.0.1 - 10.4.0.1 + range: 10.4.0.1 - 10.4.0.20 first_ip: 10.4.0.1 last_ip: 10.4.0.20 used: 5 @@ -102,7 +102,7 @@ Summary: --- skip ok --- Subnets: location: example1 - range: 10.1.0.1 - 10.1.0.1 + range: 10.1.0.1 - 10.1.0.20 first_ip: 10.1.0.1 last_ip: 10.1.0.20 used: 10 @@ -117,7 +117,7 @@ Subnets: status: 1 location: example2 - range: 10.3.0.1 - 10.3.0.1 + range: 10.3.0.1 - 10.3.0.20 first_ip: 10.3.0.1 last_ip: 10.3.0.20 used: 9 From d5ae2a80c0fe6491c8b180f8efe12965212007f4 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 11 Nov 2017 08:20:10 +0000 Subject: [PATCH 070/158] output: do not skip over first range in mustach output Off by one that is caused by must_next_range() advancing pointer, and moving over the first range. Fix by setting indexes one step backwards, that is not excellent but better than copying skip_ok stuff to must_enter(). Signed-off-by: Sami Kerola --- src/mustach-dhcpd-pools.c | 3 ++- tests/expected/mustach | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index fe06fce..142394a 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -231,9 +231,10 @@ static int must_enter(void *closure, const char *name) if (!strcmp(name, "subnets")) { itf.put = must_put_range; itf.next = must_next_range; - e->current = num_ranges; + e->current = num_ranges + 1; e->range_p = ranges; /* must_next_range() will skip_ok when needed */ + e->range_p--; return must_next_range(closure); } if (!strcmp(name, "shared-networks")) { diff --git a/tests/expected/mustach b/tests/expected/mustach index 4599887..39f5e6e 100644 --- a/tests/expected/mustach +++ b/tests/expected/mustach @@ -1,4 +1,19 @@ Subnets: + location: example1 + range: 10.0.0.1 - 10.0.0.20 + first_ip: 10.0.0.1 + last_ip: 10.0.0.20 + used: 11 + touched: 0 + defined: 20 + free: 9 + percent: 55 + touch_count: 11 + touch_percent: 55 + backup_count: 1 + backup_percent: 5 + status: 0 + location: example1 range: 10.1.0.1 - 10.1.0.20 first_ip: 10.1.0.1 @@ -101,6 +116,21 @@ Summary: --- skip ok --- Subnets: + location: example1 + range: 10.0.0.1 - 10.0.0.20 + first_ip: 10.0.0.1 + last_ip: 10.0.0.20 + used: 11 + touched: 0 + defined: 20 + free: 9 + percent: 55 + touch_count: 11 + touch_percent: 55 + backup_count: 1 + backup_percent: 5 + status: 1 + location: example1 range: 10.1.0.1 - 10.1.0.20 first_ip: 10.1.0.1 From 4fc4bcd083493718557ba97b8e2c693024cca5fd Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 11 Nov 2017 08:26:57 +0000 Subject: [PATCH 071/158] output: save and reuse output helper results Signed-off-by: Sami Kerola --- src/mustach-dhcpd-pools.c | 40 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 142394a..f88cc0e 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -54,6 +54,7 @@ struct expl { struct range_t *range_p; struct shared_network_t *shnet_p; + struct output_helper_t oh; int current; }; @@ -73,7 +74,6 @@ static int must_put_range(void *closure, const char *name, int escape __attribute__ ((unused)), FILE *file) { struct expl *e = closure; - struct output_helper_t oh; if (!strcmp(name, "location")) { fprintf(file, "%s", e->range_p->shared_net->name); @@ -100,25 +100,24 @@ static int must_put_range(void *closure, const char *name, int escape fprintf(file, "%g", e->range_p->touched); return 0; } - range_output_helper(&oh, e->range_p); if (!strcmp(name, "defined")) { - fprintf(file, "%g", oh.range_size); + fprintf(file, "%g", e->oh.range_size); return 0; } if (!strcmp(name, "free")) { - fprintf(file, "%g", oh.range_size - e->range_p->count); + fprintf(file, "%g", e->oh.range_size - e->range_p->count); return 0; } if (!strcmp(name, "percent")) { - fprintf(file, "%g", oh.percent); + fprintf(file, "%g", e->oh.percent); return 0; } if (!strcmp(name, "touch_count")) { - fprintf(file, "%g", oh.tc); + fprintf(file, "%g", e->oh.tc); return 0; } if (!strcmp(name, "touch_percent")) { - fprintf(file, "%g", oh.tcp); + fprintf(file, "%g", e->oh.tcp); return 0; } if (config.backups_found == 1) { @@ -127,12 +126,12 @@ static int must_put_range(void *closure, const char *name, int escape return 0; } if (!strcmp(name, "backup_percent")) { - fprintf(file, "%g", oh.bup); + fprintf(file, "%g", e->oh.bup); return 0; } } if (!strcmp(name, "status")) { - fprintf(file, "%d", oh.status); + fprintf(file, "%d", e->oh.status); return 0; } return 0; @@ -142,7 +141,6 @@ static int must_put_shnet(void *closure, const char *name, int escape __attribute__ ((unused)), FILE *file) { struct expl *e = closure; - struct output_helper_t oh; if (!strcmp(name, "location")) { fprintf(file, "%s", e->shnet_p->name); @@ -160,21 +158,20 @@ static int must_put_shnet(void *closure, const char *name, int escape fprintf(file, "%g", e->shnet_p->touched); return 0; } - shnet_output_helper(&oh, e->shnet_p); if (!strcmp(name, "free")) { fprintf(file, "%g", e->shnet_p->available - e->shnet_p->used); return 0; } if (!strcmp(name, "percent")) { - fprintf(file, "%g", oh.percent); + fprintf(file, "%g", e->oh.percent); return 0; } if (!strcmp(name, "touch_count")) { - fprintf(file, "%g", oh.tc); + fprintf(file, "%g", e->oh.tc); return 0; } if (!strcmp(name, "touch_percent")) { - fprintf(file, "%g", oh.tcp); + fprintf(file, "%g", e->oh.tcp); return 0; } if (config.backups_found == 1) { @@ -183,12 +180,12 @@ static int must_put_shnet(void *closure, const char *name, int escape return 0; } if (!strcmp(name, "backup_percent")) { - fprintf(file, "%g", oh.bup); + fprintf(file, "%g", e->oh.bup); return 0; } } if (!strcmp(name, "status")) { - fprintf(file, "%d", oh.status); + fprintf(file, "%d", e->oh.status); return 0; } return 0; @@ -197,30 +194,28 @@ static int must_put_shnet(void *closure, const char *name, int escape static int must_next_range(void *closure) { struct expl *e = closure; - struct output_helper_t oh; do { e->range_p++; e->current--; if (e->current <= 0) return 0; - range_output_helper(&oh, e->range_p); - } while (config.skip_ok && oh.status == STATUS_OK); + range_output_helper(&e->oh, e->range_p); + } while (config.skip_ok && e->oh.status == STATUS_OK); return 1; } static int must_next_shnet(void *closure) { struct expl *e = closure; - struct output_helper_t oh; do { e->shnet_p++; e->current--; if (e->current <= 0) return 0; - shnet_output_helper(&oh, e->shnet_p); - } while (config.skip_ok && oh.status == STATUS_OK); + shnet_output_helper(&e->oh, e->shnet_p); + } while (config.skip_ok && e->oh.status == STATUS_OK); return 1; } @@ -248,6 +243,7 @@ static int must_enter(void *closure, const char *name) itf.put = must_put_shnet; itf.next = must_next_shnet; e->shnet_p = shared_networks; + shnet_output_helper(&e->oh, e->shnet_p); e->current = 1; return 1; } From e4baff79bd7dccb9271a209c88e2c7f05aadad5c Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 11 Nov 2017 09:00:33 +0000 Subject: [PATCH 072/158] output: add must_put_err() utility function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This function deals situation when mustach put happens before enter, that is a sign of an invalid input template. Good side of adding this function is that dhcpd-pools does not need to modify code provided by Jose. Reference: 66183bc7c7ae0d3f367c08f4e7476c4cbcd459cd Proposed-by: José Bollo Signed-off-by: Sami Kerola --- src/mustach-dhcpd-pools.c | 11 ++++++++++- src/mustach.c | 4 +--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index f88cc0e..c2ecc0f 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -61,11 +61,20 @@ struct expl { static int must_enter(void *closure, const char *name); static int must_leave(void *closure); +/* This can be called when template is invalid end put happens before enter. */ +int must_put_err(void *closure __attribute__ ((unused)), + const char *name __attribute__ ((unused)), + int escape __attribute__ ((unused)), + FILE *file __attribute__ ((unused))) +{ + return MUSTACH_ERROR_SYSTEM; +} + /* Set mustach function pointers. */ static struct mustach_itf itf = { .start = NULL, .enter = must_enter, - .put = NULL, + .put = must_put_err, .next = NULL, .leave = must_leave }; diff --git a/src/mustach.c b/src/mustach.c index e2da8b2..9868cff 100644 --- a/src/mustach.c +++ b/src/mustach.c @@ -38,7 +38,7 @@ static int getpartial(struct mustach_itf *itf, void *closure, const char *name, *result = NULL; file = open_memstream(result, &size); - if (itf->put == NULL || file == NULL) + if (file == NULL) rc = MUSTACH_ERROR_SYSTEM; else { rc = itf->put(closure, name, 0, file); @@ -192,8 +192,6 @@ static int process(const char *template, struct mustach_itf *itf, void *closure, default: /* replacement */ if (emit) { - if (itf->put == NULL) - return MUSTACH_ERROR_SYSTEM; rc = itf->put(closure, name, c != '&', file); if (rc < 0) return rc; From 54cedc1001e2978fd389a3d74543150a918538df Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 11 Nov 2017 14:25:38 +0000 Subject: [PATCH 073/158] output: include stdlib.h to avoid compilation error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The stdlib.h has EXIT_FAILURE and free(3). Reported-by: Sebastián Cramatte Signed-off-by: Sami Kerola --- THANKS | 1 + src/mustach-dhcpd-pools.c | 1 + 2 files changed, 2 insertions(+) diff --git a/THANKS b/THANKS index bec03eb..331a775 100644 --- a/THANKS +++ b/THANKS @@ -43,3 +43,4 @@ Klaus Slott Boris Lytochkin Jeff Bailey José Bollo +Sebastián Cramatte diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index c2ecc0f..ff06394 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -42,6 +42,7 @@ #include #include #include +#include #include #include From b96f8cd8adc7a68d61c9592b25e9a1a4b00dd1d8 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 11 Nov 2017 15:35:01 +0000 Subject: [PATCH 074/158] gnulib: use nstrftime instead of strftime The strftime module is obsolete. Signed-off-by: Sami Kerola --- bootstrap.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bootstrap.conf b/bootstrap.conf index 5647477..7ab7e49 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -32,6 +32,7 @@ gnulib_modules=" langinfo netinet_in nl_langinfo + nstrftime progname quote realloc-gnu @@ -41,7 +42,6 @@ gnulib_modules=" stdlib stpncpy strdup-posix - strftime strstr strtod time_r From 39b2811aa73abb03118589dc0aa3fda7d2448afb Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 11 Nov 2017 16:13:14 +0000 Subject: [PATCH 075/158] build-sys: omit mustach compilation when it cannot work For example mac does not have open_memstream(3), and strndupa(3) can also be missing. Signed-off-by: Sami Kerola --- configure.ac | 10 ++++++++++ src/Makemodule.am | 10 +++++++--- src/dhcpd-pools.c | 4 ++++ src/other.c | 3 +++ src/output.c | 2 ++ tests/Makemodule.am | 6 +++++- 6 files changed, 31 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index cbef03a..5b0ce95 100644 --- a/configure.ac +++ b/configure.ac @@ -69,8 +69,18 @@ AC_TYPE_UINT32_T AC_FUNC_ERROR_AT_LINE AC_CHECK_FUNCS([\ __fpending \ + open_memstream \ posix_fadvise \ ]) +AC_CHECK_DECL([strndupa]) + +AS_IF([test "x$ac_cv_func_open_memstream" = "xyes" && test "x$ac_cv_have_decl_strndupa" == "xyes"], [ + build_mustach=yes + AC_DEFINE([BUILD_MUSTACH], [1], [build mustach support]) +], [ + build_mustach=no +]) +AM_CONDITIONAL([ENABLE_MUSTACH], [test "x$build_mustach" = xyes]) AC_MSG_CHECKING([if the compiler supports __builtin_expect]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ diff --git a/src/Makemodule.am b/src/Makemodule.am index 46ca5a3..d0bbba5 100644 --- a/src/Makemodule.am +++ b/src/Makemodule.am @@ -13,9 +13,13 @@ dhcpd_pools_SOURCES = \ src/dhcpd-pools.h \ src/getdata.c \ src/hash.c \ - src/mustach-dhcpd-pools.c \ - src/mustach.c \ - src/mustach.h \ src/other.c \ src/output.c \ src/sort.c + +if ENABLE_MUSTACH +dhcpd_pools_SOURCES += \ + src/mustach-dhcpd-pools.c \ + src/mustach.c \ + src/mustach.h +endif diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 4389e20..6ac3ac6 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -127,7 +127,9 @@ int main(int argc, char **argv) {"reverse", no_argument, NULL, 'r'}, {"output", required_argument, NULL, 'o'}, {"limit", required_argument, NULL, 'L'}, +#ifdef BUILD_MUSTACH {"mustach", required_argument, NULL, OPT_MUSTACH}, +#endif {"version", no_argument, NULL, 'v'}, {"help", no_argument, NULL, 'h'}, {"snet-alarms", no_argument, NULL, OPT_SNET_ALARMS}, @@ -227,10 +229,12 @@ int main(int argc, char **argv) config.header_limit = return_limit(optarg[0]); config.number_limit = return_limit(optarg[1]); break; +#ifdef BUILD_MUSTACH case OPT_MUSTACH: config.mustach_template = optarg; output_format = 'm'; break; +#endif case OPT_COLOR: config.color_mode = parse_color_mode(optarg); if (config.color_mode == color_unknown) diff --git a/src/other.c b/src/other.c index 2f31fcc..b8a4634 100644 --- a/src/other.c +++ b/src/other.c @@ -567,6 +567,9 @@ void __attribute__ ((__noreturn__)) usage(int status) fputs( " j for json\n", out); fputs( " J for json with active lease details\n", out); fputs( " c for comma separated values\n", out); +#ifdef BUILD_MUSTACH + fputs( " --mustach=tmpl output using mustach template file\n", out); +#endif fputs( " -s, --sort=[nimcptTe] sort ranges by\n", out); fputs( " n name\n", out); fputs( " i IP\n", out); diff --git a/src/output.c b/src/output.c index 5c86d54..e858a96 100644 --- a/src/output.c +++ b/src/output.c @@ -1267,9 +1267,11 @@ int output_analysis(const char c) case 'c': ret = output_csv(); break; +#ifdef BUILD_MUSTACH case 'm': ret = mustach_dhcpd_pools(); break; +#endif default: error(EXIT_FAILURE, 0, "unknown output format: '%c'", c); } diff --git a/tests/Makemodule.am b/tests/Makemodule.am index 252d638..4256ae1 100644 --- a/tests/Makemodule.am +++ b/tests/Makemodule.am @@ -18,7 +18,6 @@ TESTS = \ tests/full-json \ tests/full-xml \ tests/leading0 \ - tests/mustach \ tests/one-ip \ tests/one-line \ tests/range4 \ @@ -29,6 +28,11 @@ TESTS = \ tests/v6 \ tests/v6-perfdata +if ENABLE_MUSTACH +TESTS += \ + tests/mustach +endif + EXTRA_DIST += \ tests/confs \ tests/expected \ From 7575294c36ab644e68b9acf40e28b1141549af9a Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 11 Nov 2017 21:15:36 +0000 Subject: [PATCH 076/158] usage: add error message informing mustach support is not available Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 6ac3ac6..2a3f730 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -127,9 +127,7 @@ int main(int argc, char **argv) {"reverse", no_argument, NULL, 'r'}, {"output", required_argument, NULL, 'o'}, {"limit", required_argument, NULL, 'L'}, -#ifdef BUILD_MUSTACH {"mustach", required_argument, NULL, OPT_MUSTACH}, -#endif {"version", no_argument, NULL, 'v'}, {"help", no_argument, NULL, 'h'}, {"snet-alarms", no_argument, NULL, OPT_SNET_ALARMS}, @@ -229,12 +227,14 @@ int main(int argc, char **argv) config.header_limit = return_limit(optarg[0]); config.number_limit = return_limit(optarg[1]); break; -#ifdef BUILD_MUSTACH case OPT_MUSTACH: +#ifdef BUILD_MUSTACH config.mustach_template = optarg; output_format = 'm'; - break; +#else + error(EXIT_FAILURE, 0, "compiled without mustach support"); #endif + break; case OPT_COLOR: config.color_mode = parse_color_mode(optarg); if (config.color_mode == color_unknown) From 3dda0a77a578e584fb8048b64f3c91e1650c0ed1 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 11 Nov 2017 23:09:33 +0000 Subject: [PATCH 077/158] output: deduplicate file closing code Signed-off-by: Sami Kerola --- src/output.c | 170 ++++++++++++--------------------------------------- 1 file changed, 40 insertions(+), 130 deletions(-) diff --git a/src/output.c b/src/output.c index e858a96..225e8cf 100644 --- a/src/output.c +++ b/src/output.c @@ -143,6 +143,33 @@ static int start_color(struct output_helper_t *oh, FILE *outfile) } return 0; } + +static FILE *open_outfile(void) +{ + FILE *outfile; + + if (config.output_file[0]) { + outfile = fopen(config.output_file, "w+"); + if (outfile == NULL) { + error(EXIT_FAILURE, errno, "open_outfile: %s", config.output_file); + } + } else { + outfile = stdout; + } + return outfile; +} + +static void close_outfile(FILE *outfile) +{ + if (outfile == stdout) { + if (fflush(stdout)) + error(EXIT_FAILURE, errno, "close_outfile: fflush"); + } else { + if (close_stream(outfile)) + error(EXIT_FAILURE, errno, "close_outfile: fclose"); + } +} + /*! \brief Text output format, which is the default. */ static int output_txt(void) { @@ -150,7 +177,6 @@ static int output_txt(void) struct range_t *range_p; struct shared_network_t *shared_p; struct output_helper_t oh; - int ret; FILE *outfile; int max_ipaddr_length = config.ip_version == IPv6 ? 39 : 16; @@ -158,15 +184,7 @@ static int output_txt(void) config.color_mode = color_on; } - if (config.output_file[0]) { - outfile = fopen(config.output_file, "w+"); - if (outfile == NULL) { - error(EXIT_FAILURE, errno, "output_txt: %s", config.output_file); - } - } else { - outfile = stdout; - } - + outfile = open_outfile(); range_p = ranges; shared_p = shared_networks; @@ -301,18 +319,7 @@ static int output_txt(void) fputs(COLOR_RESET, outfile); fprintf(outfile, "\n"); } - if (outfile == stdout) { - ret = fflush(stdout); - if (ret) { - error(EXIT_FAILURE, errno, "output_txt: fflush"); - } - } else { - ret = close_stream(outfile); - if (ret) { - error(EXIT_FAILURE, errno, "output_txt: fclose"); - } - } - + close_outfile(outfile); return 0; } @@ -323,18 +330,9 @@ static int output_xml(const int print_mac_addreses) struct range_t *range_p; struct shared_network_t *shared_p; struct output_helper_t oh; - int ret; FILE *outfile; - if (config.output_file[0]) { - outfile = fopen(config.output_file, "w+"); - if (outfile == NULL) { - error(EXIT_FAILURE, errno, "output_xml: %s", config.output_file); - } - } else { - outfile = stdout; - } - + outfile = open_outfile(); range_p = ranges; shared_p = shared_networks; @@ -410,18 +408,7 @@ static int output_xml(const int print_mac_addreses) } fprintf(outfile, "\n"); - if (outfile == stdout) { - ret = fflush(stdout); - if (ret) { - error(EXIT_FAILURE, errno, "output_xml: fflush"); - } - } else { - ret = close_stream(outfile); - if (ret) { - error(EXIT_FAILURE, errno, "output_xml: fclose"); - } - } - + close_outfile(outfile); return 0; } @@ -432,19 +419,10 @@ static int output_json(const int print_mac_addreses) struct range_t *range_p; struct shared_network_t *shared_p; struct output_helper_t oh; - int ret; FILE *outfile; unsigned int sep; - if (config.output_file[0]) { - outfile = fopen(config.output_file, "w+"); - if (outfile == NULL) { - error(EXIT_FAILURE, errno, "output_json: %s", config.output_file); - } - } else { - outfile = stdout; - } - + outfile = open_outfile(); range_p = ranges; shared_p = shared_networks; sep = 0; @@ -587,20 +565,8 @@ static int output_json(const int print_mac_addreses) fprintf(outfile, " \"status\":%d\n", oh.status); fprintf(outfile, " }"); /* end of summary */ } - fprintf(outfile, "\n}\n"); - if (outfile == stdout) { - ret = fflush(stdout); - if (ret) { - error(EXIT_FAILURE, errno, "output_json: fflush"); - } - } else { - ret = close_stream(outfile); - if (ret) { - error(EXIT_FAILURE, errno, "output_json: fclose"); - } - } - + close_outfile(outfile); return 0; } @@ -753,18 +719,9 @@ static int output_html(void) struct range_t *range_p; struct shared_network_t *shared_p; struct output_helper_t oh; - int ret; FILE *outfile; - if (config.output_file[0]) { - outfile = fopen(config.output_file, "w+"); - if (outfile == NULL) { - error(EXIT_FAILURE, errno, "output_html: %s", config.output_file); - } - } else { - outfile = stdout; - } - + outfile = open_outfile(); range_p = ranges; shared_p = shared_networks; html_header(outfile); @@ -903,17 +860,7 @@ static int output_html(void) } table_end(outfile); html_footer(outfile); - if (outfile == stdout) { - ret = fflush(stdout); - if (ret) { - error(EXIT_FAILURE, errno, "output_html: fflush"); - } - } else { - ret = close_stream(outfile); - if (ret) { - error(EXIT_FAILURE, errno, "output_html: fclose"); - } - } + close_outfile(outfile); return 0; } @@ -925,17 +872,8 @@ static int output_csv(void) struct shared_network_t *shared_p; struct output_helper_t oh; FILE *outfile; - int ret; - - if (config.output_file[0]) { - outfile = fopen(config.output_file, "w+"); - if (outfile == NULL) { - error(EXIT_FAILURE, errno, "output_csv: %s", config.output_file); - } - } else { - outfile = stdout; - } + outfile = open_outfile(); range_p = ranges; shared_p = shared_networks; if (config.header_limit & R_BIT) { @@ -1043,17 +981,7 @@ static int output_csv(void) } fprintf(outfile, "\n"); } - if (outfile == stdout) { - ret = fflush(stdout); - if (ret) { - error(EXIT_FAILURE, errno, "output_cvs: fflush"); - } - } else { - ret = close_stream(outfile); - if (ret) { - error(EXIT_FAILURE, errno, "output_cvs: fclose"); - } - } + close_outfile(outfile); return 0; } @@ -1067,21 +995,13 @@ static int output_alarming(void) struct output_helper_t oh; unsigned int i; int rw = 0, rc = 0, ro = 0, ri = 0, sw = 0, sc = 0, so = 0, si = 0; - int ret_val, ret; + int ret_val; + outfile = open_outfile(); range_p = ranges; range_size = get_range_size(range_p); shared_p = shared_networks; - if (config.output_file[0]) { - outfile = fopen(config.output_file, "w+"); - if (outfile == NULL) { - error(EXIT_FAILURE, errno, "output_alarming: %s", config.output_file); - } - } else { - outfile = stdout; - } - if (config.number_limit & R_BIT) { for (i = 0; i < num_ranges; i++) { range_output_helper(&oh, range_p); @@ -1221,17 +1141,7 @@ static int output_alarming(void) } } fprintf(outfile, "\n"); - if (outfile == stdout) { - ret = fflush(stdout); - if (ret) { - error(EXIT_FAILURE, errno, "output_alarming: fflush"); - } - } else { - ret = close_stream(outfile); - if (ret) { - error(EXIT_FAILURE, errno, "output_alarming: fclose"); - } - } + close_outfile(outfile); return ret_val; } From adda925c1ec95c3e8917726016f047d782ec8daa Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 11 Nov 2017 23:56:34 +0000 Subject: [PATCH 078/158] clean up: remove unused variable Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 1 - src/dhcpd-pools.h | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 2a3f730..1f15052 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -57,7 +57,6 @@ #include "defaults.h" /* Global variables */ -int prefix_length[2][NUM_OF_PREFIX]; struct configuration_t config; struct shared_network_t *shared_networks; unsigned int num_shared_networks; diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 5778666..5617477 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -244,8 +244,6 @@ struct configuration_t { }; /* Global variables */ -/* \var prefix_length Length of each prefix. */ -extern int prefix_length[2][NUM_OF_PREFIX]; /* \var config Runtime configuration. */ extern struct configuration_t config; /* \var shared_networks Pointer holding shared network count results. */ From 1875a1373386fff2b540ad793bffbe2a9f7ad693 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 12 Nov 2017 13:35:04 +0000 Subject: [PATCH 079/158] all files: replace global variables with runtime config state structure Earlier variables magically appeared to scope of functions that took void as argument. One could figure out perhaps they were globals, but programs that do that are unnessarily hard to follow. Signed-off-by: Sami Kerola --- src/.indent.pro | 1 + src/Makemodule.am | 1 - src/analyze.c | 35 ++-- src/defaults.h | 55 ------ src/dhcpd-pools.c | 186 ++++++++---------- src/dhcpd-pools.h | 188 +++++++++--------- src/getdata.c | 93 +++++---- src/hash.c | 36 ++-- src/mustach-dhcpd-pools.c | 41 ++-- src/other.c | 88 ++++----- src/output.c | 398 +++++++++++++++++++------------------- src/sort.c | 55 +++--- 12 files changed, 551 insertions(+), 626 deletions(-) delete mode 100644 src/defaults.h diff --git a/src/.indent.pro b/src/.indent.pro index 2d71c4e..64735c3 100644 --- a/src/.indent.pro +++ b/src/.indent.pro @@ -1,5 +1,6 @@ -linux -TFILE +-Tconf_t -Tipaddr_t -Tleases_t -Toff_t diff --git a/src/Makemodule.am b/src/Makemodule.am index d0bbba5..c072af3 100644 --- a/src/Makemodule.am +++ b/src/Makemodule.am @@ -8,7 +8,6 @@ dhcpd_pools_LDADD = $(top_builddir)/lib/libdhcpd_pools.la dhcpd_pools_SOURCES = \ src/analyze.c \ - src/defaults.h \ src/dhcpd-pools.c \ src/dhcpd-pools.h \ src/getdata.c \ diff --git a/src/analyze.c b/src/analyze.c index 1d5c456..2ed13a6 100644 --- a/src/analyze.c +++ b/src/analyze.c @@ -47,28 +47,27 @@ /*! \brief Prepare data for analysis. The function will sort leases and * ranges. */ -void prepare_data(void) +void prepare_data(struct conf_t *state) { /* Sort leases */ - HASH_SORT(leases, leasecomp); + HASH_SORT(state->leases, leasecomp); /* Sort ranges */ - qsort(ranges, (size_t)num_ranges, sizeof(struct range_t), &rangecomp); + qsort(state->ranges, state->num_ranges, sizeof(struct range_t), &rangecomp); } /*! \brief Perform counting. Join leases with ranges, and update counters. */ -void do_counting(void) +void do_counting(struct conf_t *state) { - struct range_t *restrict range_p; - const struct leases_t *restrict l = leases; + struct range_t *restrict range_p = state->ranges; + const struct leases_t *restrict l = state->leases; unsigned long i, k, block_size; /* Walk through ranges */ - range_p = ranges; - for (i = 0; i < num_ranges; i++) { + for (i = 0; i < state->num_ranges; i++) { while (l != NULL && ipcomp(&range_p->first_ip, &l->ip) < 0) l = l->hh.prev; /* rewind */ if (l == NULL) - l = leases; + l = state->leases; for (; l != NULL && ipcomp(&l->ip, &range_p->last_ip) <= 0; l = l->hh.next) { if (ipcomp(&l->ip, &range_p->first_ip) < 0) continue; /* cannot happen? */ @@ -107,15 +106,15 @@ void do_counting(void) /* FIXME: During count of other shared networks default network * and all networks got mixed together semantically. The below * fixes the problem, but is not elegant. */ - shared_networks->available = 0; - shared_networks->used = 0; - shared_networks->touched = 0; - range_p = ranges; - for (k = 0; k < num_ranges; k++) { - shared_networks->available += get_range_size(range_p); - shared_networks->used += range_p->count; - shared_networks->touched += range_p->touched; - shared_networks->backups += range_p->backups; + state->shared_networks->available = 0; + state->shared_networks->used = 0; + state->shared_networks->touched = 0; + range_p = state->ranges; + for (k = 0; k < state->num_ranges; k++) { + state->shared_networks->available += get_range_size(range_p); + state->shared_networks->used += range_p->count; + state->shared_networks->touched += range_p->touched; + state->shared_networks->backups += range_p->backups; range_p++; } } diff --git a/src/defaults.h b/src/defaults.h deleted file mode 100644 index 480f229..0000000 --- a/src/defaults.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * The dhcpd-pools has BSD 2-clause license which also known as "Simplified - * BSD License" or "FreeBSD License". - * - * Copyright 2006- Sami Kerola. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR AND CONTRIBUTORS OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are - * those of the authors and should not be interpreted as representing - * official policies, either expressed or implied, of Sami Kerola. - */ - -/*! \file defaults.h - * \brief Default settings which cannot be changed without recompiling - * the software. - */ - -#ifndef DHCPD_POOLS_DEFAULTS_H -# define DHCPD_POOLS_DEFAULTS_H 1 - -# include "dhcpd-pools.h" - -/*! \var MAXLEN - * \brief Maximum expected line length in dhcpd.conf and dhcpd.leases - * files. */ -static const size_t MAXLEN = 1024; - -/*! \var SHARED_NETWORKS - * \brief Maximum number of different shared networks in dhcpd.conf file. */ -static const unsigned int SHARED_NETWORKS = 8192; - -#endif /* DHCPD_POOLS_DEFAULTS_H */ diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 1f15052..3841158 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -54,37 +54,38 @@ #include "xalloc.h" #include "dhcpd-pools.h" -#include "defaults.h" - -/* Global variables */ -struct configuration_t config; -struct shared_network_t *shared_networks; -unsigned int num_shared_networks; -struct range_t *ranges; -unsigned int num_ranges; -struct leases_t *leases; -unsigned int RANGES; /* Function pointers */ -int (*parse_ipaddr) (const char *restrict src, union ipaddr_t *restrict dst); +int (*parse_ipaddr) (struct conf_t *state, const char *restrict src, union ipaddr_t *restrict dst); void (*copy_ipaddr) (union ipaddr_t *restrict dst, const union ipaddr_t *restrict src); const char *(*ntop_ipaddr) (const union ipaddr_t *ip); double (*get_range_size) (const struct range_t *r); -int (*xstrstr) (const char *restrict str); +int (*xstrstr) (struct conf_t *state, const char *restrict str); int (*ipcomp) (const union ipaddr_t *restrict a, const union ipaddr_t *restrict b); int (*leasecomp) (const struct leases_t *restrict a, const struct leases_t *restrict b); -void (*add_lease) (union ipaddr_t *ip, enum ltype type); -struct leases_t *(*find_lease) (union ipaddr_t *ip); +void (*add_lease) (struct conf_t *state, union ipaddr_t *ip, enum ltype type); +struct leases_t *(*find_lease) (struct conf_t *state, union ipaddr_t *ip); static int return_limit(const char c) { if ('0' <= c && c < '8') return c - '0'; - clean_up(); error(EXIT_FAILURE, 0, "return_limit: output mask %s is illegal", quote(optarg)); return 0; } +/*! \brief Run time initialization. Global allocations, counter + * initializations, etc are here. */ +static void prepare_memory(struct conf_t *state) +{ + /* The SHARED_NETWORKS is a static value from defaults.h */ + state->shared_networks = xcalloc(sizeof(struct shared_network_t), SHARED_NETWORKS); + state->ranges = xmalloc(sizeof(struct range_t) * state->ranges_size); + + /* First shared network entry is all networks */ + state->shared_networks->name = xstrdup("All networks"); +} + /*! \brief Start of execution. Parse options, and call other other * functions one after another. At the moment adding threading support * would be difficult, but there does not seem to be valid reason to @@ -97,11 +98,21 @@ static int return_limit(const char c) * alarming. */ int main(int argc, char **argv) { + struct conf_t state = { + .warning = ALARM_WARN, + .critical = ALARM_CRIT, + .warn_count = 0x100000000, /* == 2^32 that is the entire IPv4 space */ + .crit_count = 0x100000000, /* basically turns off the count criteria */ + .header_limit = 8, + .color_mode = color_auto, + .ranges_size = 64, + .ip_version = IPvUNKNOWN, + 0 + }; + int option_index = 0; char output_format = '\0'; int alarming = 0; - char const *tmp; - struct range_t *tmp_ranges; enum { OPT_SNET_ALARMS = CHAR_MAX + 1, OPT_WARN, @@ -143,36 +154,10 @@ int main(int argc, char **argv) atexit(close_stdout); set_program_name(argv[0]); - /* FIXME: These allocations should be fully dynamic, e.g., grow - * if needed. */ - config.dhcpdconf_file = xmalloc(sizeof(char) * MAXLEN); - config.dhcpdlease_file = xmalloc(sizeof(char) * MAXLEN); - config.output_file = xmalloc(sizeof(char) * MAXLEN); - /* Make sure string has zero length if there is no - * command line option */ - config.output_file[0] = '\0'; - /* Alarming defaults. */ - config.snet_alarms = 0; - config.warning = ALARM_WARN; - config.critical = ALARM_CRIT; - config.warn_count = 0x100000000; /* == 2^32 that is the entire IPv4 space */ - config.crit_count = 0x100000000; /* basically turns off the count criteria */ - config.perfdata = 0; - config.color_mode = color_auto; - /* File location defaults */ - strncpy(config.dhcpdconf_file, DHCPDCONF_FILE, MAXLEN - 1); - strncpy(config.dhcpdlease_file, DHCPDLEASE_FILE, MAXLEN - 1); - tmp = OUTPUT_LIMIT; - config.header_limit = (*tmp - '0'); - tmp++; - config.number_limit = (*tmp - '0'); - /* Default sort order is by IPs small to big */ - config.reverse_order = 0; - config.backups_found = 0; - /* Treat single networks as shared with network CIDR as name */ - config.all_as_shared = 0; - prepare_memory(); - set_ipv_functions(IPvUNKNOWN); + + + prepare_memory(&state); + set_ipv_functions(&state, IPvUNKNOWN); /* Parse command line options */ while (1) { int c; @@ -183,11 +168,11 @@ int main(int argc, char **argv) switch (c) { case 'c': /* config file */ - strncpy(config.dhcpdconf_file, optarg, MAXLEN - 1); + state.dhcpdconf_file = optarg; break; case 'l': /* lease file */ - strncpy(config.dhcpdlease_file, optarg, MAXLEN - 1); + state.dhcpdlease_file = optarg; break; case 'f': /* Output format */ @@ -196,15 +181,15 @@ int main(int argc, char **argv) case 's': { /* Output sorting option */ - struct output_sort *p = config.sorts; + struct output_sort *p = state.sorts; size_t len; while (p && p->next) p = p->next; for (len = 0; len < strlen(optarg); len++) { - if (config.sorts == NULL) { - config.sorts = xcalloc(1, sizeof(struct output_sort)); - p = config.sorts; + if (state.sorts == NULL) { + state.sorts = xcalloc(1, sizeof(struct output_sort)); + p = state.sorts; } else { p->next = xcalloc(1, sizeof(struct output_sort)); p = p->next; @@ -215,62 +200,62 @@ int main(int argc, char **argv) break; case 'r': /* What ever sort in reverse order */ - config.reverse_order = 1; + state.reverse_order = 1; break; case 'o': /* Output file */ - strncpy(config.output_file, optarg, MAXLEN - 1); + state.output_file = optarg; break; case 'L': /* Specification what will be printed */ - config.header_limit = return_limit(optarg[0]); - config.number_limit = return_limit(optarg[1]); + state.header_limit = return_limit(optarg[0]); + state.number_limit = return_limit(optarg[1]); break; case OPT_MUSTACH: #ifdef BUILD_MUSTACH - config.mustach_template = optarg; + state.mustach_template = optarg; output_format = 'm'; #else error(EXIT_FAILURE, 0, "compiled without mustach support"); #endif break; case OPT_COLOR: - config.color_mode = parse_color_mode(optarg); - if (config.color_mode == color_unknown) + state.color_mode = parse_color_mode(optarg); + if (state.color_mode == color_unknown) error(EXIT_FAILURE, errno, "unknown color mode: %s", quote(optarg)); break; case OPT_SKIP_OK: - config.skip_ok = 1; + state.skip_ok = 1; break; case OPT_SNET_ALARMS: - config.snet_alarms = 1; + state.snet_alarms = 1; break; case OPT_WARN: alarming = 1; - config.warning = strtod_or_err(optarg, "illegal argument"); + state.warning = strtod_or_err(optarg, "illegal argument"); break; case OPT_CRIT: alarming = 1; - config.critical = strtod_or_err(optarg, "illegal argument"); + state.critical = strtod_or_err(optarg, "illegal argument"); break; case OPT_WARN_COUNT: alarming = 1; - config.warn_count = strtod_or_err(optarg, "illegal argument"); + state.warn_count = strtod_or_err(optarg, "illegal argument"); break; case OPT_CRIT_COUNT: alarming = 1; - config.crit_count = strtod_or_err(optarg, "illegal argument"); + state.crit_count = strtod_or_err(optarg, "illegal argument"); break; case OPT_MINSIZE: - config.minsize = strtod_or_err(optarg, "illegal argument"); + state.minsize = strtod_or_err(optarg, "illegal argument"); break; case OPT_SET_IPV: switch(optarg[0]) { case '4': - set_ipv_functions(IPv4); + set_ipv_functions(&state, IPv4); break; case '6': - set_ipv_functions(IPv6); + set_ipv_functions(&state, IPv6); break; default: error(EXIT_FAILURE, 0, "unknown --ip-version argument: %s", optarg); @@ -278,11 +263,11 @@ int main(int argc, char **argv) break; case 'p': /* Print additional performance data in alarming mode */ - config.perfdata = 1; + state.perfdata = 1; break; case 'A': /* Treat single networks as shared with network CIDR as name */ - config.all_as_shared = 1; + state.all_as_shared = 1; break; case 'v': /* Print version */ @@ -295,48 +280,45 @@ int main(int argc, char **argv) program_name); } } + + /* Use default dhcpd.conf when user did not define anything. */ + if (state.dhcpdconf_file == NULL) + state.dhcpdconf_file = DHCPDCONF_FILE; + /* Use default dhcpd.leases when user did not define anything. */ + if (state.dhcpdlease_file == NULL) + state.dhcpdlease_file = DHCPDLEASE_FILE; + /* Use default limits when user did not define anything. */ + if (state.header_limit == 8) { + char const *default_limit = OUTPUT_LIMIT; + + state.header_limit = return_limit(default_limit[0]); + state.number_limit = return_limit(default_limit[1]); + } /* Output format is not defined, if alarm thresholds are then it's * alarming, else use the default. */ if (output_format == '\0') { if (alarming == 1) output_format = 'a'; else { - const char *const def = OUTPUT_FORMAT; - output_format = def[0]; + const char *const default_format = OUTPUT_FORMAT; + output_format = default_format[0]; } } + /* Do the job */ - parse_config(1, config.dhcpdconf_file, shared_networks); + parse_config(&state, 1, state.dhcpdconf_file, state.shared_networks); if (output_format == 'X' || output_format == 'J') - parse_leases(1); + parse_leases(&state, 1); else - parse_leases(0); - prepare_data(); - do_counting(); - tmp_ranges = xmalloc(sizeof(struct range_t) * num_ranges); - if (config.sorts != NULL) - mergesort_ranges(ranges, num_ranges, tmp_ranges); - if (config.reverse_order == 1) - flip_ranges(ranges, tmp_ranges); - free(tmp_ranges); - ret_val = output_analysis(output_format); - clean_up(); + parse_leases(&state, 0); + prepare_data(&state); + do_counting(&state); + if (state.sorts != NULL) + mergesort_ranges(&state, state.ranges, state.num_ranges, NULL, 1); + if (state.reverse_order == 1) + flip_ranges(&state); + ret_val = output_analysis(&state, output_format); + clean_up(&state); return (ret_val); } -/*! \brief Run time initialization. Global allocations, counter - * initializations, etc are here. */ -void prepare_memory(void) -{ - config.ip_version = IPvUNKNOWN; - RANGES = 64; - num_ranges = num_shared_networks = 0; - shared_networks = xmalloc(sizeof(struct shared_network_t) * SHARED_NETWORKS); - ranges = xmalloc(sizeof(struct range_t) * RANGES); - /* First shared network entry is all networks */ - shared_networks->name = xstrdup("All networks"); - shared_networks->used = 0; - shared_networks->touched = 0; - shared_networks->backups = 0; - config.sorts = NULL; -} diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 5617477..f519c6f 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -35,8 +35,6 @@ /*! \file dhcpd-pools.h * \brief Global definitions of structures, enums, and function prototypes. - * FIXME: The file has too many global variables. Most of them should be - * removed, if not all. */ #ifndef DHCPD_POOLS_H @@ -76,6 +74,17 @@ union ipaddr_t { uint32_t v4; unsigned char v6[16]; }; + +/*! \enum dhcpd_magic_numbers + * \brief MAXLEN is maximum expected line length in dhcpd.conf and + * dhcpd.leases, and SHARED_NETWORKS is maximum number of different shared + * networks in dhcpd.conf file. + */ +enum dhcpd_magic_numbers { + MAXLEN = 1024, + SHARED_NETWORKS = 8192 +}; + /*! \enum dhcp_version * \brief The IP version, IPv4 or IPv6, served by the dhcpd. */ @@ -214,18 +223,24 @@ struct output_sort { comparer_t func; struct output_sort *next; }; -/*! \struct configuration_t - * \brief Runtime configuration. +/*! \struct conf_t + * \brief Runtime configuration state. */ -struct configuration_t { +struct conf_t { + struct shared_network_t *shared_networks; + unsigned int num_shared_networks; + struct range_t *ranges; + unsigned int num_ranges; + size_t ranges_size; + struct leases_t *leases; char dhcpv6; enum dhcp_version ip_version; - char *dhcpdconf_file; - char *dhcpdlease_file; - int output_format; + const char *dhcpdconf_file; + const char *dhcpdlease_file; + const int output_format; struct output_sort *sorts; - char *output_file; - char *mustach_template; + const char *output_file; + const char *mustach_template; double warning; double critical; double warn_count; @@ -237,50 +252,67 @@ struct configuration_t { snet_alarms:1, perfdata:1, all_as_shared:1, - header_limit:3, + header_limit:4, number_limit:3, skip_ok:1, color_mode:2; }; -/* Global variables */ -/* \var config Runtime configuration. */ -extern struct configuration_t config; -/* \var shared_networks Pointer holding shared network count results. */ -extern struct shared_network_t *shared_networks; -/* \var num_shared_networks Number of shared networks found. */ -extern unsigned int num_shared_networks; -/* \var ranges Pointer holding range count results. */ -extern struct range_t *ranges; -/* \var num_ranges Number of ranges found. */ -extern unsigned int num_ranges; -/* \var leases Pointer holding all leases. */ -extern struct leases_t *leases; -/*! \var RANGES Maximum number of ranges. */ -extern unsigned int RANGES; - /* Function prototypes */ -extern void prepare_memory(void); -extern void set_ipv_functions(int version); -extern int parse_leases(const int print_mac_addreses); -extern void parse_config(int, const char *restrict, struct shared_network_t *restrict) - __attribute__ ((nonnull(2, 3))); -extern void prepare_data(void); -extern void do_counting(void); -extern void flip_ranges(struct range_t *restrict flip_me, struct range_t *restrict tmp_ranges) - __attribute__ ((nonnull(1, 2))); -/* support functions */ -extern int (*parse_ipaddr) (const char *restrict src, union ipaddr_t *restrict dst); -extern int parse_ipaddr_init(const char *restrict src, - union ipaddr_t *restrict dst); -extern int parse_ipaddr_v4(const char *restrict src, union ipaddr_t *restrict dst); -extern int parse_ipaddr_v6(const char *restrict src, union ipaddr_t *restrict dst); -extern void parse_cidr(struct range_t *range_p, const char *word); +/* analyze.c */ +extern void prepare_data(struct conf_t *state); +extern void do_counting(struct conf_t *state); + +/* getdata.c */ +extern int parse_leases(struct conf_t *state, const int print_mac_addreses); +extern void parse_config(struct conf_t *state, const int is_include, + const char *restrict config_file, + struct shared_network_t *restrict shared_p); + +/* hash.c */ +extern void (*add_lease) (struct conf_t *state, union ipaddr_t *addr, enum ltype type); +extern void add_lease_init(struct conf_t *state, union ipaddr_t *addr, enum ltype type); +extern void add_lease_v4(struct conf_t *state, union ipaddr_t *addr, enum ltype type); +extern void add_lease_v6(struct conf_t *state, union ipaddr_t *addr, enum ltype type); + +extern struct leases_t *(*find_lease) (struct conf_t *state, union ipaddr_t *addr); +extern struct leases_t *find_lease_init(struct conf_t *state, union ipaddr_t *addr); +extern struct leases_t *find_lease_v4(struct conf_t *state, union ipaddr_t *addr); +extern struct leases_t *find_lease_v6(struct conf_t *state, union ipaddr_t *addr); + +extern void delete_lease(struct conf_t *state, struct leases_t *lease); +extern void delete_all_leases(struct conf_t *state); + +/* mustach-dhcpd-pools.c */ +extern int mustach_dhcpd_pools(struct conf_t *state); + +/* other.c */ +extern void set_ipv_functions(struct conf_t *state, int version); +extern void flip_ranges(struct conf_t *state); +extern void clean_up(struct conf_t *state); +extern void parse_cidr(struct conf_t *state, struct range_t *range_p, const char *word); +extern int parse_color_mode(const char *restrict optarg); +extern double strtod_or_err(const char *restrict str, const char *restrict errmesg); +extern void __attribute__ ((noreturn)) print_version(void); +extern void __attribute__ ((noreturn)) usage(int status); + +extern int (*parse_ipaddr) (struct conf_t *state, const char *restrict src, + union ipaddr_t *restrict dst); +extern int parse_ipaddr_init(struct conf_t *state, const char *restrict src, + union ipaddr_t *restrict dst); +extern int parse_ipaddr_v4(struct conf_t *state, const char *restrict src, + union ipaddr_t *restrict dst); +extern int parse_ipaddr_v6(struct conf_t *state, const char *restrict src, + union ipaddr_t *restrict dst); + +extern int (*xstrstr) (struct conf_t *state, const char *restrict str); +extern int xstrstr_init(struct conf_t *state, const char *restrict str); +extern int xstrstr_v4(struct conf_t *state, const char *restrict str); +extern int xstrstr_v6(struct conf_t *state, const char *restrict str); extern void (*copy_ipaddr) (union ipaddr_t *restrict dst, const union ipaddr_t *restrict src); -extern void copy_ipaddr_init(union ipaddr_t *restrict dst, - const union ipaddr_t *restrict src); +extern void copy_ipaddr_init(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src); extern void copy_ipaddr_v4(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src); extern void copy_ipaddr_v6(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src); @@ -294,26 +326,17 @@ extern double get_range_size_init(const struct range_t *r); extern double get_range_size_v4(const struct range_t *r); extern double get_range_size_v6(const struct range_t *r); -extern int (*xstrstr) (const char *restrict str); -extern int xstrstr_init(const char *restrict str); -extern int xstrstr_v4(const char *restrict str) -_DP_ATTRIBUTE_HOT; -extern int xstrstr_v6(const char *restrict str) -_DP_ATTRIBUTE_HOT; +/* output.c */ +extern void range_output_helper(struct conf_t *state, struct output_helper_t *oh, + struct range_t *range_p); +extern void shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, + struct shared_network_t *shared_p); +extern int output_analysis(struct conf_t *state, const char output_format); -extern int parse_color_mode(const char *restrict optarg); -extern double strtod_or_err(const char *restrict str, const char *restrict errmesg); -extern void __attribute__ ((noreturn)) print_version(void); -extern void __attribute__ ((noreturn)) usage(int status); -/* qsort required functions... */ -/* ...for ranges and... */ -extern int (*ipcomp) (const union ipaddr_t *restrict a, const union ipaddr_t *restrict b); -extern int ipcomp_init(const union ipaddr_t *restrict a, - const union ipaddr_t *restrict b); -extern int ipcomp_v4(const union ipaddr_t *restrict a, - const union ipaddr_t *restrict b); -extern int ipcomp_v6(const union ipaddr_t *restrict a, - const union ipaddr_t *restrict b); +/* sort.c */ +extern void mergesort_ranges(struct conf_t *state, + struct range_t *restrict orig, unsigned int size, + struct range_t *restrict temp, const int root_call); extern int (*leasecomp) (const struct leases_t *restrict a, const struct leases_t *restrict b); extern int leasecomp_init(const struct leases_t *restrict a @@ -322,6 +345,14 @@ extern int leasecomp_init(const struct leases_t *restrict a extern int leasecomp_v4(const struct leases_t *restrict a, const struct leases_t *restrict b); extern int leasecomp_v6(const struct leases_t *restrict a, const struct leases_t *restrict b); +extern int (*ipcomp) (const union ipaddr_t *restrict a, const union ipaddr_t *restrict b); +extern int ipcomp_init(const union ipaddr_t *restrict a, const union ipaddr_t *restrict b); +extern int ipcomp_v4(const union ipaddr_t *restrict a, const union ipaddr_t *restrict b); +extern int ipcomp_v6(const union ipaddr_t *restrict a, const union ipaddr_t *restrict b); + +extern int rangecomp(const void *restrict r1, const void *restrict r2) + __attribute__ ((nonnull(1, 2))); + extern int comp_cur(struct range_t *r1, struct range_t *r2); extern int comp_double(double f1, double f2); extern int comp_ip(struct range_t *r1, struct range_t *r2); @@ -330,35 +361,10 @@ extern int comp_percent(struct range_t *r1, struct range_t *r2); extern int comp_tc(struct range_t *r1, struct range_t *r2); extern int comp_tcperc(struct range_t *r1, struct range_t *r2); extern int comp_touched(struct range_t *r1, struct range_t *r2); -extern int rangecomp(const void *restrict r1, const void *restrict r2) - __attribute__ ((nonnull(1, 2))); -/* sort function pointer and functions */ + extern comparer_t field_selector(char c); extern double ret_percent(struct range_t r); extern double ret_tc(struct range_t r); extern double ret_tcperc(struct range_t r); -extern void mergesort_ranges(struct range_t *restrict orig, int size, - struct range_t *restrict temp) - __attribute__ ((nonnull(1, 3))); -/* output function */ -extern void range_output_helper(struct output_helper_t *oh, struct range_t *range_p); -extern void shnet_output_helper(struct output_helper_t *oh, struct shared_network_t *shared_p); -extern int output_analysis(const char); -extern int mustach_dhcpd_pools(void); -/* Memory release, file closing etc */ -extern void clean_up(void); -/* Hash functions */ -extern void (*add_lease) (union ipaddr_t *addr, enum ltype type); -extern void add_lease_init(union ipaddr_t *addr, enum ltype type); -extern void add_lease_v4(union ipaddr_t *addr, enum ltype type); -extern void add_lease_v6(union ipaddr_t *addr, enum ltype type); -extern struct leases_t *(*find_lease) (union ipaddr_t *addr); -extern struct leases_t *find_lease_init(union ipaddr_t *addr); -extern struct leases_t *find_lease_v4(union ipaddr_t *addr); -extern struct leases_t *find_lease_v6(union ipaddr_t *addr); - -extern void delete_lease(struct leases_t *lease); -extern void delete_all_leases(void); - -#endif /* DHCPD_POOLS_H */ +#endif /* DHCPD_POOLS_H */ diff --git a/src/getdata.c b/src/getdata.c index e77b76c..5e30ba3 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -54,11 +54,10 @@ #include "xalloc.h" #include "dhcpd-pools.h" -#include "defaults.h" /*! \brief Lease file parser. The parser can only read ISC DHCPD * dhcpd.leases file format. */ -int parse_leases(const int print_mac_addreses) +int parse_leases(struct conf_t *state, const int print_mac_addreses) { FILE *dhcpd_leases; char *line, *ipstring, macstring[20], *stop; @@ -66,68 +65,68 @@ int parse_leases(const int print_mac_addreses) struct stat lease_file_stats; struct leases_t *lease; - dhcpd_leases = fopen(config.dhcpdlease_file, "r"); + dhcpd_leases = fopen(state->dhcpdlease_file, "r"); if (dhcpd_leases == NULL) - error(EXIT_FAILURE, errno, "parse_leases: %s", config.dhcpdlease_file); + error(EXIT_FAILURE, errno, "parse_leases: %s", state->dhcpdlease_file); #ifdef HAVE_POSIX_FADVISE # ifdef POSIX_FADV_SEQUENTIAL if (posix_fadvise(fileno(dhcpd_leases), 0, 0, POSIX_FADV_SEQUENTIAL) != 0) - error(EXIT_FAILURE, errno, "parse_leases: fadvise %s", config.dhcpdlease_file); + error(EXIT_FAILURE, errno, "parse_leases: fadvise %s", state->dhcpdlease_file); # endif /* POSIX_FADV_SEQUENTIAL */ #endif /* HAVE_POSIX_FADVISE */ /* I found out that there's one lease address per 300 bytes in * dhcpd.leases file. Malloc is little bit pessimistic and uses 250. * If someone has higher density in lease file I'm interested to * hear about that. */ - if (stat(config.dhcpdlease_file, &lease_file_stats)) - error(EXIT_FAILURE, errno, "parse_leases: %s", config.dhcpdlease_file); + if (stat(state->dhcpdlease_file, &lease_file_stats)) + error(EXIT_FAILURE, errno, "parse_leases: %s", state->dhcpdlease_file); line = xmalloc(sizeof(char) * MAXLEN); line[0] = '\0'; ipstring = xmalloc(sizeof(char) * MAXLEN); ipstring[0] = '\0'; while (!feof(dhcpd_leases)) { if (!fgets(line, MAXLEN, dhcpd_leases) && ferror(dhcpd_leases)) - error(EXIT_FAILURE, errno, "parse_leases: %s", config.dhcpdlease_file); - switch (xstrstr(line)) { + error(EXIT_FAILURE, errno, "parse_leases: %s", state->dhcpdlease_file); + switch (xstrstr(state, line)) { /* It's a lease, save IP */ case PREFIX_LEASE: stop = memccpy(ipstring, - line + (config.ip_version == + line + (state->ip_version == IPv4 ? 6 : 9), ' ', strlen(line)); if (stop != NULL) { --stop; *stop = '\0'; } - parse_ipaddr(ipstring, &addr); + parse_ipaddr(state, ipstring, &addr); break; case PREFIX_BINDING_STATE_FREE: case PREFIX_BINDING_STATE_ABANDONED: case PREFIX_BINDING_STATE_EXPIRED: case PREFIX_BINDING_STATE_RELEASED: - if ((lease = find_lease(&addr)) != NULL) - delete_lease(lease); - add_lease(&addr, FREE); + if ((lease = find_lease(state, &addr)) != NULL) + delete_lease(state, lease); + add_lease(state, &addr, FREE); break; case PREFIX_BINDING_STATE_ACTIVE: /* remove old entry, if exists */ - if ((lease = find_lease(&addr)) != NULL) - delete_lease(lease); - add_lease(&addr, ACTIVE); + if ((lease = find_lease(state, &addr)) != NULL) + delete_lease(state, lease); + add_lease(state, &addr, ACTIVE); break; case PREFIX_BINDING_STATE_BACKUP: /* remove old entry, if exists */ - if ((lease = find_lease(&addr)) != NULL) - delete_lease(lease); - add_lease(&addr, BACKUP); - config.backups_found = 1; + if ((lease = find_lease(state, &addr)) != NULL) + delete_lease(state, lease); + add_lease(state, &addr, BACKUP); + state->backups_found = 1; break; case PREFIX_HARDWARE_ETHERNET: if (print_mac_addreses == 0) break; memcpy(macstring, line + 20, 17); macstring[17] = '\0'; - if ((lease = find_lease(&addr)) != NULL) + if ((lease = find_lease(state, &addr)) != NULL) lease->ethernet = xstrdup(macstring); break; default: @@ -144,13 +143,13 @@ int parse_leases(const int print_mac_addreses) /*! \brief Keyword search in dhcpd.conf file. * \param s A line from the dhcpd.conf file. * \return Indicator what configuration was found. */ -static int is_interesting_config_clause(char const *restrict s) +static int is_interesting_config_clause(struct conf_t *state, char const *restrict s) { if (strstr(s, "range")) return ITS_A_RANGE_FIRST_IP; if (strstr(s, "shared-network")) return ITS_A_SHAREDNET; - if (config.all_as_shared) { + if (state->all_as_shared) { if (strstr(s, "subnet")) return ITS_A_SUBNET; if (strstr(s, "netmask")) @@ -178,7 +177,7 @@ static void reorder_last_first(struct range_t *range_p) * FIXME: This spaghetti monster function need to be rewrote at least * ones. */ -void parse_config(int is_include, const char *restrict config_file, +void parse_config(struct conf_t *state, const int is_include, const char *restrict config_file, struct shared_network_t *restrict shared_p) { FILE *dhcpd_config; @@ -193,7 +192,7 @@ void parse_config(int is_include, const char *restrict config_file, word = xmalloc(sizeof(char) * MAXLEN); if (is_include) /* Default place holder for ranges "All networks". */ - shared_p->name = shared_networks->name; + shared_p->name = state->shared_networks->name; /* Open configuration file */ dhcpd_config = fopen(config_file, "r"); if (dhcpd_config == NULL) @@ -283,7 +282,7 @@ void parse_config(int is_include, const char *restrict config_file, /* FIXME: Using 1000 is lame, but * works. */ braces_shared = 1000; - shared_p = shared_networks; + shared_p = state->shared_networks; } /* Not literally 1, but works for this * program */ @@ -321,7 +320,7 @@ void parse_config(int is_include, const char *restrict config_file, if (word[i - 1] != '{') newclause = 0; i = 0; - argument = is_interesting_config_clause(word); + argument = is_interesting_config_clause(state, word); if (argument == ITS_A_RANGE_FIRST_IP) one_ip_range = 1; } @@ -334,14 +333,14 @@ void parse_config(int is_include, const char *restrict config_file, switch (argument) { case ITS_A_RANGE_SECOND_IP: /* printf ("range 2nd ip: %s\n", word); */ - range_p = ranges + num_ranges; + range_p = state->ranges + state->num_ranges; argument = ITS_NOTHING_INTERESTING; if (strchr(word, '/')) { - parse_cidr(range_p, word); + parse_cidr(state, range_p, word); one_ip_range = 0; } else { /* not cidr */ - parse_ipaddr(word, &addr); + parse_ipaddr(state, word, &addr); if (one_ip_range == 1) { one_ip_range = 0; copy_ipaddr(&range_p->first_ip, &addr); @@ -354,18 +353,18 @@ void parse_config(int is_include, const char *restrict config_file, range_p->touched = 0; range_p->backups = 0; range_p->shared_net = shared_p; - num_ranges++; - if (RANGES < num_ranges + 1) { - RANGES *= 2; - ranges = xrealloc(ranges, sizeof(struct range_t) * RANGES); - range_p = ranges + num_ranges; + state->num_ranges++; + if (state->ranges_size <= state->num_ranges) { + state->ranges_size *= 2; + state->ranges = xrealloc(state->ranges, sizeof(struct range_t) * state->ranges_size); + range_p = state->ranges + state->num_ranges; } newclause = 1; break; case ITS_A_RANGE_FIRST_IP: /* printf ("range 1nd ip: %s\n", word); */ - range_p = ranges + num_ranges; - if (!(parse_ipaddr(word, &addr))) + range_p = state->ranges + state->num_ranges; + if (!(parse_ipaddr(state, word, &addr))) /* word was not ip, try again */ break; copy_ipaddr(&range_p->first_ip, &addr); @@ -375,23 +374,19 @@ void parse_config(int is_include, const char *restrict config_file, case ITS_A_SHAREDNET: case ITS_A_SUBNET: /* ignore subnets inside a shared-network */ - if (argument == ITS_A_SUBNET && shared_p != shared_networks) { + if (argument == ITS_A_SUBNET && shared_p != state->shared_networks) { argument = ITS_NOTHING_INTERESTING; break; } /* printf ("shared-network named: %s\n", word); */ - num_shared_networks++; - shared_p = shared_networks + num_shared_networks; + state->num_shared_networks++; + shared_p = state->shared_networks + state->num_shared_networks; shared_p->name = xstrdup(word); - shared_p->available = 0; - shared_p->used = 0; - shared_p->touched = 0; - shared_p->backups = 0; shared_p->netmask = (argument == ITS_A_SUBNET ? -1 : 0); /* do not fill in netmask */ - if (SHARED_NETWORKS < num_shared_networks + 2) + if (SHARED_NETWORKS < state->num_shared_networks + 2) /* FIXME: make this to go away by reallocating more space. */ error(EXIT_FAILURE, 0, - "parse_config: increase default.h SHARED_NETWORKS and recompile"); + "parse_config: increase SHARED_NETWORKS in dhcpd-pools.h and recompile"); /* record network's mask too */ if (argument == ITS_A_SUBNET) newclause = 1; @@ -401,7 +396,7 @@ void parse_config(int is_include, const char *restrict config_file, case ITS_A_NETMASK: /* fill in only when requested to do so */ if (shared_p->netmask) { - if (!(parse_ipaddr(word, &addr))) + if (!(parse_ipaddr(state, word, &addr))) break; shared_p->netmask = 32; while ((addr.v4 & 0x01) == 0) { @@ -419,7 +414,7 @@ void parse_config(int is_include, const char *restrict config_file, case ITS_AN_INCLUDE: /* printf ("include file: %s\n", word); */ argument = ITS_NOTHING_INTERESTING; - parse_config(0, word, shared_p); + parse_config(state, 0, word, shared_p); newclause = 1; break; case ITS_NOTHING_INTERESTING: diff --git a/src/hash.c b/src/hash.c index 08b95b4..fdc1861 100644 --- a/src/hash.c +++ b/src/hash.c @@ -50,30 +50,30 @@ /*! \brief Add a lease to hash array. * \param addr Binary IP to be added in leases hash. * \param type Lease state of the IP. */ -void add_lease_init(union ipaddr_t *addr +void add_lease_init(struct conf_t *state __attribute__ ((unused)), union ipaddr_t *addr __attribute__ ((unused)), enum ltype type __attribute__ ((unused))) { } -void add_lease_v4(union ipaddr_t *addr, enum ltype type) +void add_lease_v4(struct conf_t *state, union ipaddr_t *addr, enum ltype type) { struct leases_t *l; l = xmalloc(sizeof(struct leases_t)); copy_ipaddr(&l->ip, addr); l->type = type; - HASH_ADD_INT(leases, ip.v4, l); + HASH_ADD_INT(state->leases, ip.v4, l); l->ethernet = NULL; } -void add_lease_v6(union ipaddr_t *addr, enum ltype type) +void add_lease_v6(struct conf_t *state, union ipaddr_t *addr, enum ltype type) { struct leases_t *l; l = xmalloc(sizeof(struct leases_t)); copy_ipaddr(&l->ip, addr); l->type = type; - HASH_ADD_V6(leases, ip.v6, l); + HASH_ADD_V6(state->leases, ip.v6, l); l->ethernet = NULL; } @@ -81,57 +81,57 @@ void add_lease_v6(union ipaddr_t *addr, enum ltype type) * \param addr Binary IP searched from leases hash. * \return A lease structure about requested IP, or NULL. */ -struct leases_t *find_lease_init(union ipaddr_t *addr __attribute__ ((unused))) +struct leases_t *find_lease_init(struct conf_t *state __attribute__ ((unused)), union ipaddr_t *addr __attribute__ ((unused))) { return NULL; } -struct leases_t *find_lease_v4(union ipaddr_t *addr) +struct leases_t *find_lease_v4(struct conf_t *state, union ipaddr_t *addr) { struct leases_t *l; - HASH_FIND_INT(leases, &addr->v4, l); + HASH_FIND_INT(state->leases, &addr->v4, l); return l; } -struct leases_t *find_lease_v6(union ipaddr_t *addr) +struct leases_t *find_lease_v6(struct conf_t *state, union ipaddr_t *addr) { struct leases_t *l; - HASH_FIND_V6(leases, &addr->v4, l); + HASH_FIND_V6(state->leases, &addr->v4, l); return l; } /*! \brief Delete a lease from hash array. * \param lease Pointer to lease hash. */ -void delete_lease(struct leases_t *lease) +void delete_lease(struct conf_t *state, struct leases_t *lease) { free(lease->ethernet); - HASH_DEL(leases, lease); + HASH_DEL(state->leases, lease); free(lease); } /*! \brief Delete all leases from hash array. */ #ifdef HASH_ITER -void delete_all_leases(void) +void delete_all_leases(struct conf_t *state) { struct leases_t *l, *tmp; - HASH_ITER(hh, leases, l, tmp) { + HASH_ITER(hh, state->leases, l, tmp) { free(l->ethernet); - HASH_DEL(leases, l); + HASH_DEL(state->leases, l); free(l); } } #else -void delete_all_leases(void) +void delete_all_leases(struct conf_t *state) { while (leases) { struct leases_t *l; - l = leases; + l = state->leases; free(l->ethernet); - HASH_DEL(leases, l); /* leases advances to next on delete */ + HASH_DEL(state->leases, l); /* leases advances to next on delete */ free(l); } } diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index ff06394..54a2009 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -53,6 +53,7 @@ #include "xalloc.h" struct expl { + struct conf_t *state; struct range_t *range_p; struct shared_network_t *shnet_p; struct output_helper_t oh; @@ -130,7 +131,7 @@ static int must_put_range(void *closure, const char *name, int escape fprintf(file, "%g", e->oh.tcp); return 0; } - if (config.backups_found == 1) { + if (e->state->backups_found == 1) { if (!strcmp(name, "backup_count")) { fprintf(file, "%g", e->range_p->backups); return 0; @@ -184,7 +185,7 @@ static int must_put_shnet(void *closure, const char *name, int escape fprintf(file, "%g", e->oh.tcp); return 0; } - if (config.backups_found == 1) { + if (e->state->backups_found == 1) { if (!strcmp(name, "backup_count")) { fprintf(file, "%g", e->shnet_p->backups); return 0; @@ -210,8 +211,8 @@ static int must_next_range(void *closure) e->current--; if (e->current <= 0) return 0; - range_output_helper(&e->oh, e->range_p); - } while (config.skip_ok && e->oh.status == STATUS_OK); + range_output_helper(e->state, &e->oh, e->range_p); + } while (e->state->skip_ok && e->oh.status == STATUS_OK); return 1; } @@ -224,8 +225,8 @@ static int must_next_shnet(void *closure) e->current--; if (e->current <= 0) return 0; - shnet_output_helper(&e->oh, e->shnet_p); - } while (config.skip_ok && e->oh.status == STATUS_OK); + shnet_output_helper(e->state, &e->oh, e->shnet_p); + } while (e->state->skip_ok && e->oh.status == STATUS_OK); return 1; } @@ -236,8 +237,8 @@ static int must_enter(void *closure, const char *name) if (!strcmp(name, "subnets")) { itf.put = must_put_range; itf.next = must_next_range; - e->current = num_ranges + 1; - e->range_p = ranges; + e->current = e->state->num_ranges + 1; + e->range_p = e->state->ranges; /* must_next_range() will skip_ok when needed */ e->range_p--; return must_next_range(closure); @@ -245,15 +246,15 @@ static int must_enter(void *closure, const char *name) if (!strcmp(name, "shared-networks")) { itf.put = must_put_shnet; itf.next = must_next_shnet; - e->shnet_p = shared_networks; - e->current = num_shared_networks + 1; + e->shnet_p = e->state->shared_networks; + e->current = e->state->num_shared_networks + 1; return must_next_shnet(closure); } if (!strcmp(name, "summary")) { itf.put = must_put_shnet; itf.next = must_next_shnet; - e->shnet_p = shared_networks; - shnet_output_helper(&e->oh, e->shnet_p); + e->shnet_p = e->state->shared_networks; + shnet_output_helper(e->state, &e->oh, e->shnet_p); e->current = 1; return 1; } @@ -264,8 +265,8 @@ static int must_leave(void *closure __attribute__ ((unused))) { struct expl *e = closure; - e->shnet_p = shared_networks; - e->range_p = ranges; + e->shnet_p = e->state->shared_networks; + e->range_p = e->state->ranges; return 0; } @@ -289,19 +290,19 @@ static char *must_read_template(const char *filename) } -int mustach_dhcpd_pools(void) +int mustach_dhcpd_pools(struct conf_t *state) { - struct expl e; + struct expl e = { .state = state }; char *template; FILE *outfile; int ret; - template = must_read_template(config.mustach_template); - if (config.output_file[0]) { - outfile = fopen(config.output_file, "w+"); + template = must_read_template(state->mustach_template); + if (state->output_file) { + outfile = fopen(state->output_file, "w+"); if (outfile == NULL) { error(EXIT_FAILURE, errno, "mustach_dhcpd_pools: fopen: %s", - config.output_file); + state->output_file); } } else { outfile = stdout; diff --git a/src/other.c b/src/other.c index b8a4634..c20bed5 100644 --- a/src/other.c +++ b/src/other.c @@ -55,7 +55,6 @@ #include "xalloc.h" #include "dhcpd-pools.h" -#include "defaults.h" char *(*cidr_last)(union ipaddr_t *restrict addr, const int mask); static char *cidr_last_v4(union ipaddr_t *restrict addr, const int mask); @@ -64,12 +63,12 @@ static char *cidr_last_v6(union ipaddr_t *restrict addr, const int mask); /*! \brief Set function pointers depending on IP version. * \param ip IP version. */ -void set_ipv_functions(int version) +void set_ipv_functions(struct conf_t *state, int version) { switch (version) { case IPv4: - config.ip_version = version; + state->ip_version = version; add_lease = add_lease_v4; copy_ipaddr = copy_ipaddr_v4; find_lease = find_lease_v4; @@ -83,7 +82,7 @@ void set_ipv_functions(int version) break; case IPv6: - config.ip_version = version; + state->ip_version = version; add_lease = add_lease_v6; copy_ipaddr = copy_ipaddr_v6; find_lease = find_lease_v6; @@ -97,7 +96,7 @@ void set_ipv_functions(int version) break; case IPvUNKNOWN: - config.ip_version = version; + state->ip_version = version; add_lease = add_lease_init; copy_ipaddr = copy_ipaddr_init; find_lease = find_lease_init; @@ -122,21 +121,21 @@ void set_ipv_functions(int version) * \param dst An union which will hold conversion result. * \return Was parsing successful. */ -int parse_ipaddr_init(const char *restrict src, union ipaddr_t *restrict dst) +int parse_ipaddr_init(struct conf_t *state, const char *restrict src, union ipaddr_t *restrict dst) { struct in_addr addr; struct in6_addr addr6; if (inet_aton(src, &addr) == 1) - set_ipv_functions(IPv4); + set_ipv_functions(state, IPv4); else if (inet_pton(AF_INET6, src, &addr6) == 1) - set_ipv_functions(IPv6); + set_ipv_functions(state, IPv6); else return 0; - return parse_ipaddr(src, dst); + return parse_ipaddr(state, src, dst); } -int parse_ipaddr_v4(const char *restrict src, union ipaddr_t *restrict dst) +int parse_ipaddr_v4(struct conf_t *state __attribute__ ((unused)), const char *restrict src, union ipaddr_t *restrict dst) { int rv; struct in_addr addr; @@ -146,7 +145,7 @@ int parse_ipaddr_v4(const char *restrict src, union ipaddr_t *restrict dst) return rv == 1; } -int parse_ipaddr_v6(const char *restrict src, union ipaddr_t *restrict dst) +int parse_ipaddr_v6(struct conf_t *state __attribute__ ((unused)), const char *restrict src, union ipaddr_t *restrict dst) { int rv; struct in6_addr addr; @@ -210,7 +209,7 @@ static char *cidr_last_v6(union ipaddr_t *restrict addr, const int mask) return xstrdup(ip); } -void parse_cidr(struct range_t *range_p, const char *word) +void parse_cidr(struct conf_t *state, struct range_t *range_p, const char *word) { char *divider; int mask; @@ -224,20 +223,20 @@ void parse_cidr(struct range_t *range_p, const char *word) if (mask < 0) error(EXIT_FAILURE, 0, "cidr %s invalid mask %s", word, divider); - if (config.ip_version == IPvUNKNOWN) { + if (state->ip_version == IPvUNKNOWN) { if (!strchr(word, ':')) - set_ipv_functions(IPv4); + set_ipv_functions(state, IPv4); else - set_ipv_functions(IPv6); + set_ipv_functions(state, IPv6); } /* start of the range is easy */ - parse_ipaddr(word, &addr); + parse_ipaddr(state, word, &addr); copy_ipaddr(&range_p->first_ip, &addr); /* end of the range depends cidr size */ last = cidr_last(&addr, mask); - parse_ipaddr(last, &addr); + parse_ipaddr(state, last, &addr); copy_ipaddr(&range_p->last_ip, &addr); free(last); } @@ -332,18 +331,14 @@ double get_range_size_v6(const struct range_t *r) * \param str A line from dhcpd.conf * \return prefix_t enum value */ -int -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) - __attribute__ ((hot)) -#endif - xstrstr_init(const char *restrict str) +int xstrstr_init(struct conf_t *state, const char *restrict str) { if (memcmp("lease ", str, 6)) { - set_ipv_functions(IPv4); + set_ipv_functions(state, IPv4); return PREFIX_LEASE; } if (memcmp(" iaaddr ", str, 9)) { - set_ipv_functions(IPv6); + set_ipv_functions(state, IPv6); return PREFIX_LEASE; } return NUM_OF_PREFIX; @@ -359,7 +354,7 @@ int #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) __attribute__ ((hot)) #endif - xstrstr_v4(const char *restrict str) + xstrstr_v4(struct conf_t *state __attribute__ ((unused)), const char *restrict str) { size_t len; @@ -412,7 +407,7 @@ int #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) __attribute__ ((hot)) #endif - xstrstr_v6(const char *restrict str) + xstrstr_v6(struct conf_t *state __attribute__ ((unused)), const char *restrict str) { size_t len; @@ -495,43 +490,38 @@ double strtod_or_err(const char *restrict str, const char *restrict errmesg) } /*! \brief Reverse range. - * Used before output, if a caller has requested reverse sorting. - * FIXME: The temporary memory area handling should be internal to this - * function, not a parameter. - * - * \param flip_me The range that needs to be inverted. - * \param tmp_ranges Temporary memory area for the flip. */ -void flip_ranges(struct range_t *restrict flip_me, struct range_t *restrict tmp_ranges) + * Used before output, if a caller has requested reverse sorting. */ +void flip_ranges(struct conf_t *state) { - unsigned int i = num_ranges - 1, j; + unsigned int i = state->num_ranges - 1, j; + struct range_t *tmp_ranges; - for (j = 0; j < num_ranges; j++, i--) - *(tmp_ranges + j) = *(flip_me + i); - memcpy(flip_me, tmp_ranges, num_ranges * sizeof(struct range_t)); + tmp_ranges = xmalloc(sizeof(struct range_t) * state->num_ranges); + for (j = 0; j < state->num_ranges; j++, i--) + *(tmp_ranges + j) = *(state->ranges + i); + memcpy(state->ranges, tmp_ranges, state->num_ranges * sizeof(struct range_t)); + free(tmp_ranges); } /*! \brief Free memory, flush buffers etc. */ -void clean_up(void) +void clean_up(struct conf_t *state) { struct output_sort *cur, *next; /* Just in case there something in buffers */ if (fflush(NULL)) error(EXIT_FAILURE, errno, "clean_up: fflush"); - free(config.dhcpdconf_file); - free(config.dhcpdlease_file); - free(config.output_file); - free(ranges); - delete_all_leases(); - if (shared_networks) { + free(state->ranges); + delete_all_leases(state); + if (state->shared_networks) { unsigned int i; - num_shared_networks++; - for (i = 0; i < num_shared_networks; i++) - free((shared_networks + i)->name); - free(shared_networks); + state->num_shared_networks++; + for (i = 0; i < state->num_shared_networks; i++) + free((state->shared_networks + i)->name); + free(state->shared_networks); } - for (cur = config.sorts; cur; cur = next) { + for (cur = state->sorts; cur; cur = next) { next = cur->next; free(cur); } diff --git a/src/output.c b/src/output.c index 225e8cf..cdd37c9 100644 --- a/src/output.c +++ b/src/output.c @@ -60,34 +60,34 @@ #include "dhcpd-pools.h" /*! \brief Calculate range percentages and such. */ -void range_output_helper(struct output_helper_t *oh, struct range_t *range_p) +void range_output_helper(struct conf_t *state, struct output_helper_t *oh, struct range_t *range_p) { /* counts and calculations */ oh->range_size = get_range_size(range_p); oh->percent = (double)(100 * range_p->count) / oh->range_size; oh->tc = range_p->touched + range_p->count; oh->tcp = (double)(100 * oh->tc) / oh->range_size; - if (config.backups_found == 1) { + if (state->backups_found == 1) { oh->bup = (double)(100 * range_p->backups) / oh->range_size; } /* set status */ oh->status = STATUS_OK; - if (config.critical < oh->percent - && (oh->range_size - range_p->count) < config.crit_count) + if (state->critical < oh->percent + && (oh->range_size - range_p->count) < state->crit_count) oh->status = STATUS_CRIT; - else if (config.warning < oh->percent - && (oh->range_size - range_p->count) < config.warn_count) + else if (state->warning < oh->percent + && (oh->range_size - range_p->count) < state->warn_count) oh->status = STATUS_WARN; if (oh->status != STATUS_OK) { - if (oh->range_size <= config.minsize) + if (oh->range_size <= state->minsize) oh->status = STATUS_IGNORED; - else if (config.snet_alarms && range_p->shared_net != shared_networks) + else if (state->snet_alarms && range_p->shared_net != state->shared_networks) oh->status = STATUS_SUPPRESSED; } } /*! \brief Calculate shared network percentages and such. */ -void shnet_output_helper(struct output_helper_t *oh, struct shared_network_t *shared_p) +void shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, struct shared_network_t *shared_p) { /* counts and calculations */ oh->tc = shared_p->touched + shared_p->used; @@ -99,7 +99,7 @@ void shnet_output_helper(struct output_helper_t *oh, struct shared_network_t *sh oh->percent = (double)(100 * shared_p->used) / shared_p->available; oh->tcp = (double)((100 * (shared_p->touched + shared_p->used)) / shared_p->available); - if (config.backups_found == 1) { + if (state->backups_found == 1) { oh->bup = (double)(100 * shared_p->backups) / shared_p->available; } } @@ -108,15 +108,15 @@ void shnet_output_helper(struct output_helper_t *oh, struct shared_network_t *sh oh->status = STATUS_SUPPRESSED; return; } - if (shared_p->available <= config.minsize) { + if (shared_p->available <= state->minsize) { oh->status = STATUS_IGNORED; return; } - if (config.critical < oh->percent && shared_p->used < config.crit_count) { + if (state->critical < oh->percent && shared_p->used < state->crit_count) { oh->status = STATUS_CRIT; return; } - if (config.warning < oh->percent && shared_p->used < config.warn_count) { + if (state->warning < oh->percent && shared_p->used < state->warn_count) { oh->status = STATUS_WARN; return; } @@ -144,14 +144,14 @@ static int start_color(struct output_helper_t *oh, FILE *outfile) return 0; } -static FILE *open_outfile(void) +static FILE *open_outfile(struct conf_t *state) { FILE *outfile; - if (config.output_file[0]) { - outfile = fopen(config.output_file, "w+"); + if (state->output_file) { + outfile = fopen(state->output_file, "w+"); if (outfile == NULL) { - error(EXIT_FAILURE, errno, "open_outfile: %s", config.output_file); + error(EXIT_FAILURE, errno, "open_outfile: %s", state->output_file); } } else { outfile = stdout; @@ -171,24 +171,24 @@ static void close_outfile(FILE *outfile) } /*! \brief Text output format, which is the default. */ -static int output_txt(void) +static int output_txt(struct conf_t *state) { unsigned int i; struct range_t *range_p; struct shared_network_t *shared_p; struct output_helper_t oh; FILE *outfile; - int max_ipaddr_length = config.ip_version == IPv6 ? 39 : 16; + int max_ipaddr_length = state->ip_version == IPv6 ? 39 : 16; - if (config.color_mode == color_auto && isatty(STDIN_FILENO)) { - config.color_mode = color_on; + if (state->color_mode == color_auto && isatty(STDIN_FILENO)) { + state->color_mode = color_on; } - outfile = open_outfile(); - range_p = ranges; - shared_p = shared_networks; + outfile = open_outfile(state); + range_p = state->ranges; + shared_p = state->shared_networks; - if (config.header_limit & R_BIT) { + if (state->header_limit & R_BIT) { fprintf(outfile, "Ranges:\n"); fprintf (outfile, @@ -198,20 +198,20 @@ static int output_txt(void) "first ip", max_ipaddr_length, "last ip", "max", "cur", "percent", "touch", "t+c", "t+c perc"); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, " bu bu perc"); } fprintf(outfile, "\n"); } - if (config.number_limit & R_BIT) { - for (i = 0; i < num_ranges; i++) { + if (state->number_limit & R_BIT) { + for (i = 0; i < state->num_ranges; i++) { int color_set = 0; - range_output_helper(&oh, range_p); - if (config.skip_ok && oh.status == STATUS_OK) { + range_output_helper(state, &oh, range_p); + if (state->skip_ok && oh.status == STATUS_OK) { range_p++; continue; } - if (config.color_mode == color_on) + if (state->color_mode == color_on) color_set = start_color(&oh, outfile); if (range_p->shared_net) { fprintf(outfile, "%-20s", range_p->shared_net->name); @@ -233,7 +233,7 @@ static int output_txt(void) range_p->touched, oh.tc, oh.tcp); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, "%7g %8.3f", range_p->backups, oh.bup); } @@ -243,26 +243,26 @@ static int output_txt(void) range_p++; } } - if (config.number_limit & R_BIT && config.header_limit & S_BIT) { + if (state->number_limit & R_BIT && state->header_limit & S_BIT) { fprintf(outfile, "\n"); } - if (config.header_limit & S_BIT) { + if (state->header_limit & S_BIT) { fprintf(outfile, "Shared networks:\n"); fprintf(outfile, "name max cur percent touch t+c t+c perc"); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, " bu bu perc"); } fprintf(outfile, "\n"); } - if (config.number_limit & S_BIT) { - for (i = 0; i < num_shared_networks; i++) { + if (state->number_limit & S_BIT) { + for (i = 0; i < state->num_shared_networks; i++) { int color_set = 0; shared_p++; - shnet_output_helper(&oh, shared_p); - if (config.skip_ok && oh.status == STATUS_OK) + shnet_output_helper(state, &oh, shared_p); + if (state->skip_ok && oh.status == STATUS_OK) continue; - if (config.color_mode == color_on) + if (state->color_mode == color_on) color_set = start_color(&oh, outfile); fprintf(outfile, "%-20s %5g %5g %10.3f %7g %6g %9.3f", @@ -273,7 +273,7 @@ static int output_txt(void) shared_p->touched, oh.tc, oh.tcp); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, "%7g %8.3f", shared_p->backups, oh.bup); @@ -283,36 +283,36 @@ static int output_txt(void) fprintf(outfile, "\n"); } } - if (config.number_limit & S_BIT && config.header_limit & A_BIT) { + if (state->number_limit & S_BIT && state->header_limit & A_BIT) { fprintf(outfile, "\n"); } - if (config.header_limit & A_BIT) { + if (state->header_limit & A_BIT) { fprintf(outfile, "Sum of all ranges:\n"); fprintf(outfile, "name max cur percent touch t+c t+c perc"); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, " bu bu perc"); } fprintf(outfile, "\n"); } - if (config.number_limit & A_BIT) { + if (state->number_limit & A_BIT) { int color_set = 0; - shnet_output_helper(&oh, shared_networks); - if (config.color_mode == color_on) + shnet_output_helper(state, &oh, state->shared_networks); + if (state->color_mode == color_on) color_set = start_color(&oh, outfile); fprintf(outfile, "%-20s %5g %5g %10.3f %7g %6g %9.3f", - shared_networks->name, - shared_networks->available, - shared_networks->used, + state->shared_networks->name, + state->shared_networks->available, + state->shared_networks->used, oh.percent, - shared_networks->touched, + state->shared_networks->touched, oh.tc, oh.tcp); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, "%7g %8.3f", - shared_networks->backups, + state->shared_networks->backups, oh.bup); } if (color_set) @@ -324,7 +324,7 @@ static int output_txt(void) } /*! \brief The xml output formats. */ -static int output_xml(const int print_mac_addreses) +static int output_xml(struct conf_t *state, const int print_mac_addreses) { unsigned int i; struct range_t *range_p; @@ -332,16 +332,16 @@ static int output_xml(const int print_mac_addreses) struct output_helper_t oh; FILE *outfile; - outfile = open_outfile(); - range_p = ranges; - shared_p = shared_networks; + outfile = open_outfile(state); + range_p = state->ranges; + shared_p = state->shared_networks; fprintf(outfile, "\n"); if (print_mac_addreses == 1) { struct leases_t *l; - for (l = leases; l != NULL; l = l->hh.next) { + for (l = state->leases; l != NULL; l = l->hh.next) { if (l->type == ACTIVE) { fputs("\n\t", outfile); fputs(ntop_ipaddr(&l->ip), outfile); @@ -354,10 +354,10 @@ static int output_xml(const int print_mac_addreses) } } - if (config.number_limit & R_BIT) { - for (i = 0; i < num_ranges; i++) { - range_output_helper(&oh, range_p); - if (config.skip_ok && oh.status == STATUS_OK) { + if (state->number_limit & R_BIT) { + for (i = 0; i < state->num_ranges; i++) { + range_output_helper(state, &oh, range_p); + if (state->skip_ok && oh.status == STATUS_OK) { range_p++; continue; } @@ -379,11 +379,11 @@ static int output_xml(const int print_mac_addreses) } } - if (config.number_limit & S_BIT) { - for (i = 0; i < num_shared_networks; i++) { + if (state->number_limit & S_BIT) { + for (i = 0; i < state->num_shared_networks; i++) { shared_p++; - shnet_output_helper(&oh, shared_p); - if (config.skip_ok && oh.status == STATUS_OK) + shnet_output_helper(state, &oh, shared_p); + if (state->skip_ok && oh.status == STATUS_OK) continue; fprintf(outfile, "\n"); fprintf(outfile, "\t%s\n", shared_p->name); @@ -396,14 +396,14 @@ static int output_xml(const int print_mac_addreses) } } - if (config.header_limit & A_BIT) { + if (state->header_limit & A_BIT) { fprintf(outfile, "\n"); - fprintf(outfile, "\t%s\n", shared_networks->name); - fprintf(outfile, "\t%g\n", shared_networks->available); - fprintf(outfile, "\t%g\n", shared_networks->used); - fprintf(outfile, "\t%g\n", shared_networks->touched); + fprintf(outfile, "\t%s\n", state->shared_networks->name); + fprintf(outfile, "\t%g\n", state->shared_networks->available); + fprintf(outfile, "\t%g\n", state->shared_networks->used); + fprintf(outfile, "\t%g\n", state->shared_networks->touched); fprintf(outfile, "\t%g\n", - shared_networks->available - shared_networks->used); + state->shared_networks->available - state->shared_networks->used); fprintf(outfile, "\n"); } @@ -413,7 +413,7 @@ static int output_xml(const int print_mac_addreses) } /*! \brief The json output formats. */ -static int output_json(const int print_mac_addreses) +static int output_json(struct conf_t *state, const int print_mac_addreses) { unsigned int i = 0; struct range_t *range_p; @@ -422,9 +422,9 @@ static int output_json(const int print_mac_addreses) FILE *outfile; unsigned int sep; - outfile = open_outfile(); - range_p = ranges; - shared_p = shared_networks; + outfile = open_outfile(state); + range_p = state->ranges; + shared_p = state->shared_networks; sep = 0; fprintf(outfile, "{\n"); @@ -433,7 +433,7 @@ static int output_json(const int print_mac_addreses) struct leases_t *l; fprintf(outfile, " \"active_leases\": ["); - for (l = leases; l != NULL; l = l->hh.next) { + for (l = state->leases; l != NULL; l = l->hh.next) { if (l->type == ACTIVE) { if (i == 0) { i = 1; @@ -453,14 +453,14 @@ static int output_json(const int print_mac_addreses) sep++; } - if (config.number_limit & R_BIT) { + if (state->number_limit & R_BIT) { if (sep) { fprintf(outfile, ",\n"); } fprintf(outfile, " \"subnets\": [\n"); - for (i = 0; i < num_ranges; i++) { - range_output_helper(&oh, range_p); - if (config.skip_ok && oh.status == STATUS_OK) { + for (i = 0; i < state->num_ranges; i++) { + range_output_helper(state, &oh, range_p); + if (state->skip_ok && oh.status == STATUS_OK) { range_p++; continue; } @@ -484,14 +484,14 @@ static int output_json(const int print_mac_addreses) fprintf(outfile, "\"percent\":%g, ", oh.percent); fprintf(outfile, "\"touch_count\":%g, ", oh.tc); fprintf(outfile, "\"touch_percent\":%g, ", oh.tcp); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, "\"backup_count\":%g, ", range_p->backups); fprintf(outfile, "\"backup_percent\":%g, ", oh.bup); } fprintf(outfile, "\"status\":%d ", oh.status); range_p++; - if (i + 1 < num_ranges) + if (i + 1 < state->num_ranges) fprintf(outfile, "},\n"); else fprintf(outfile, "}\n"); @@ -500,15 +500,15 @@ static int output_json(const int print_mac_addreses) sep++; } - if (config.number_limit & S_BIT) { + if (state->number_limit & S_BIT) { if (sep) { fprintf(outfile, ",\n"); } fprintf(outfile, " \"shared-networks\": [\n"); - for (i = 0; i < num_shared_networks; i++) { + for (i = 0; i < state->num_shared_networks; i++) { shared_p++; - shnet_output_helper(&oh, shared_p); - if (config.skip_ok && oh.status == STATUS_OK) + shnet_output_helper(state, &oh, shared_p); + if (state->skip_ok && oh.status == STATUS_OK) continue; fprintf(outfile, " "); fprintf(outfile, "{ "); @@ -526,7 +526,7 @@ static int output_json(const int print_mac_addreses) fprintf(outfile, "\"touch_percent\":\"%g\", ", oh.tcp); else fprintf(outfile, "\"touch_percent\":%g, ", oh.tcp); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, "\"backup_count\":%g, ", shared_p->backups); if (shared_p->available == 0) fprintf(outfile, "\"backup_percent\":\"%g\", ", oh.bup); @@ -534,7 +534,7 @@ static int output_json(const int print_mac_addreses) fprintf(outfile, "\"backup_percent\":%g, ", oh.bup); } fprintf(outfile, "\"status\":%d ", oh.status); - if (i + 1 < num_shared_networks) + if (i + 1 < state->num_shared_networks) fprintf(outfile, "},\n"); else fprintf(outfile, "}\n"); @@ -543,23 +543,23 @@ static int output_json(const int print_mac_addreses) sep++; } - if (config.header_limit & A_BIT) { - shnet_output_helper(&oh, shared_networks); + if (state->header_limit & A_BIT) { + shnet_output_helper(state, &oh, state->shared_networks); if (sep) { fprintf(outfile, ",\n"); } fprintf(outfile, " \"summary\": {\n"); - fprintf(outfile, " \"location\":\"%s\",\n", shared_networks->name); - fprintf(outfile, " \"defined\":%g,\n", shared_networks->available); - fprintf(outfile, " \"used\":%g,\n", shared_networks->used); - fprintf(outfile, " \"touched\":%g,\n", shared_networks->touched); + fprintf(outfile, " \"location\":\"%s\",\n", state->shared_networks->name); + fprintf(outfile, " \"defined\":%g,\n", state->shared_networks->available); + fprintf(outfile, " \"used\":%g,\n", state->shared_networks->used); + fprintf(outfile, " \"touched\":%g,\n", state->shared_networks->touched); fprintf(outfile, " \"free\":%g,\n", - shared_networks->available - shared_networks->used); + state->shared_networks->available - state->shared_networks->used); fprintf(outfile, " \"percent\":%g,\n", oh.percent); fprintf(outfile, " \"touch_count\":%g,\n", oh.tc); fprintf(outfile, " \"touch_percent\":%g,\n", oh.tcp); - if (config.backups_found == 1) { - fprintf(outfile, " \"backup_count\":%g,\n", shared_p->backups); + if (state->backups_found == 1) { + fprintf(outfile, " \"backup_count\":%g,\n", state->shared_networks->backups); fprintf(outfile, " \"backup_percent\":%g,\n", oh.bup); } fprintf(outfile, " \"status\":%d\n", oh.status); @@ -574,14 +574,14 @@ static int output_json(const int print_mac_addreses) * * \param f Output file descriptor. */ -static void html_header(FILE *restrict f) +static void html_header(struct conf_t *state, FILE *restrict f) { char outstr[200]; struct tm *tmp, result; struct stat statbuf; - stat(config.dhcpdlease_file, &statbuf); + stat(state->dhcpdlease_file, &statbuf); tmp = localtime_r(&statbuf.st_mtime, &result); if (tmp == NULL) { @@ -608,7 +608,7 @@ static void html_header(FILE *restrict f) fprintf(f, "\n"); fprintf(f, "
\n"); fprintf(f, "

ISC DHCPD status

\n"); - fprintf(f, "File %s was last modified at %s
\n", config.dhcpdlease_file, outstr); + fprintf(f, "File %s was last modified at %s
\n", state->dhcpdlease_file, outstr); } /*! \brief Footer for full html output format. @@ -713,7 +713,7 @@ static void newsection(FILE *restrict f, char const *restrict title) } /*! \brief Output html format. */ -static int output_html(void) +static int output_html(struct conf_t *state) { unsigned int i; struct range_t *range_p; @@ -721,13 +721,13 @@ static int output_html(void) struct output_helper_t oh; FILE *outfile; - outfile = open_outfile(); - range_p = ranges; - shared_p = shared_networks; - html_header(outfile); + outfile = open_outfile(state); + range_p = state->ranges; + shared_p = state->shared_networks; + html_header(state, outfile); newsection(outfile, "Sum of all"); table_start(outfile, "a", "all"); - if (config.header_limit & A_BIT) { + if (state->header_limit & A_BIT) { start_tag(outfile, "thead"); start_tag(outfile, "tr"); output_line(outfile, "th", "name"); @@ -737,26 +737,26 @@ static int output_html(void) output_line(outfile, "th", "touch"); output_line(outfile, "th", "t+c"); output_line(outfile, "th", "t+c perc"); - if (config.backups_found == 1) { + if (state->backups_found == 1) { output_line(outfile, "th", "bu"); output_line(outfile, "th", "bu perc"); } end_tag(outfile, "tr"); end_tag(outfile, "thead"); } - if (config.number_limit & A_BIT) { + if (state->number_limit & A_BIT) { start_tag(outfile, "tbody"); start_tag(outfile, "tr"); - shnet_output_helper(&oh, shared_networks); - output_line(outfile, "td", shared_networks->name); - output_double(outfile, "td", shared_networks->available); - output_double(outfile, "td", shared_networks->used); + shnet_output_helper(state, &oh, state->shared_networks); + output_line(outfile, "td", state->shared_networks->name); + output_double(outfile, "td", state->shared_networks->available); + output_double(outfile, "td", state->shared_networks->used); output_float(outfile, "td", oh.percent); - output_double(outfile, "td", shared_networks->touched); + output_double(outfile, "td", state->shared_networks->touched); output_double(outfile, "td", oh.tc); output_float(outfile, "td", oh.tcp); - if (config.backups_found == 1) { - output_double(outfile, "td", shared_networks->backups); + if (state->backups_found == 1) { + output_double(outfile, "td", state->shared_networks->backups); output_float(outfile, "td", oh.tcp); } end_tag(outfile, "tr"); @@ -765,7 +765,7 @@ static int output_html(void) table_end(outfile); newsection(outfile, "Shared networks"); table_start(outfile, "s", "snet"); - if (config.header_limit & S_BIT) { + if (state->header_limit & S_BIT) { start_tag(outfile, "thead"); start_tag(outfile, "tr"); output_line(outfile, "th", "name"); @@ -775,19 +775,19 @@ static int output_html(void) output_line(outfile, "th", "touch"); output_line(outfile, "th", "t+c"); output_line(outfile, "th", "t+c perc"); - if (config.backups_found == 1) { + if (state->backups_found == 1) { output_line(outfile, "th", "bu"); output_line(outfile, "th", "bu perc"); } end_tag(outfile, "tr"); end_tag(outfile, "thead"); } - if (config.number_limit & S_BIT) { + if (state->number_limit & S_BIT) { start_tag(outfile, "tbody"); - for (i = 0; i < num_shared_networks; i++) { + for (i = 0; i < state->num_shared_networks; i++) { shared_p++; - shnet_output_helper(&oh, shared_networks); - if (config.skip_ok && oh.status == STATUS_OK) + shnet_output_helper(state, &oh, state->shared_networks); + if (state->skip_ok && oh.status == STATUS_OK) continue; start_tag(outfile, "tr"); output_line(outfile, "td", shared_p->name); @@ -797,7 +797,7 @@ static int output_html(void) output_double(outfile, "td", shared_p->touched); output_double(outfile, "td", oh.tc); output_float(outfile, "td", oh.tcp); - if (config.backups_found == 1) { + if (state->backups_found == 1) { output_double(outfile, "td", shared_p->backups); output_float(outfile, "td", oh.bup); } @@ -808,7 +808,7 @@ static int output_html(void) table_end(outfile); newsection(outfile, "Ranges"); table_start(outfile, "r", "ranges"); - if (config.header_limit & R_BIT) { + if (state->header_limit & R_BIT) { start_tag(outfile, "thead"); start_tag(outfile, "tr"); output_line(outfile, "th", "shared net name"); @@ -820,18 +820,18 @@ static int output_html(void) output_line(outfile, "th", "touch"); output_line(outfile, "th", "t+c"); output_line(outfile, "th", "t+c perc"); - if (config.backups_found == 1) { + if (state->backups_found == 1) { output_line(outfile, "th", "bu"); output_line(outfile, "th", "bu perc"); } end_tag(outfile, "tr"); end_tag(outfile, "thead"); } - if (config.number_limit & R_BIT) { + if (state->number_limit & R_BIT) { start_tag(outfile, "tbody"); - for (i = 0; i < num_ranges; i++) { - range_output_helper(&oh, range_p); - if (config.skip_ok && oh.status == STATUS_OK) { + for (i = 0; i < state->num_ranges; i++) { + range_output_helper(state, &oh, range_p); + if (state->skip_ok && oh.status == STATUS_OK) { range_p++; continue; } @@ -849,7 +849,7 @@ static int output_html(void) output_double(outfile, "td", range_p->touched); output_double(outfile, "td", oh.tc); output_float(outfile, "td", oh.tcp); - if (config.backups_found == 1) { + if (state->backups_found == 1) { output_double(outfile, "td", range_p->backups); output_float(outfile, "td", oh.bup); } @@ -865,7 +865,7 @@ static int output_html(void) } /*! \brief Output cvs format. */ -static int output_csv(void) +static int output_csv(struct conf_t *state) { unsigned int i; struct range_t *range_p; @@ -873,23 +873,23 @@ static int output_csv(void) struct output_helper_t oh; FILE *outfile; - outfile = open_outfile(); - range_p = ranges; - shared_p = shared_networks; - if (config.header_limit & R_BIT) { + outfile = open_outfile(state); + range_p = state->ranges; + shared_p = state->shared_networks; + if (state->header_limit & R_BIT) { fprintf(outfile, "\"Ranges:\"\n"); fprintf (outfile, "\"shared net name\",\"first ip\",\"last ip\",\"max\",\"cur\",\"percent\",\"touch\",\"t+c\",\"t+c perc\""); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, ",\"bu\",\"bu perc\""); } fprintf(outfile, "\n"); } - if (config.number_limit & R_BIT) { - for (i = 0; i < num_ranges; i++) { - range_output_helper(&oh, range_p); - if (config.skip_ok && oh.status == STATUS_OK) { + if (state->number_limit & R_BIT) { + for (i = 0; i < state->num_ranges; i++) { + range_output_helper(state, &oh, range_p); + if (state->skip_ok && oh.status == STATUS_OK) { range_p++; continue; } @@ -908,7 +908,7 @@ static int output_csv(void) range_p->touched, oh.tc, oh.tcp); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, ",\"%g\",\"%.3f\"", range_p->backups, oh.bup); @@ -919,21 +919,21 @@ static int output_csv(void) } fprintf(outfile, "\n"); } - if (config.header_limit & S_BIT) { + if (state->header_limit & S_BIT) { fprintf(outfile, "\"Shared networks:\"\n"); fprintf(outfile, "\"name\",\"max\",\"cur\",\"percent\",\"touch\",\"t+c\",\"t+c perc\""); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, ",\"bu\",\"bu perc\""); } fprintf(outfile, "\n"); } - if (config.number_limit & S_BIT) { + if (state->number_limit & S_BIT) { - for (i = 0; i < num_shared_networks; i++) { + for (i = 0; i < state->num_shared_networks; i++) { shared_p++; - shnet_output_helper(&oh, shared_p); - if (config.skip_ok && oh.status == STATUS_OK) + shnet_output_helper(state, &oh, shared_p); + if (state->skip_ok && oh.status == STATUS_OK) continue; fprintf(outfile, "\"%s\",\"%g\",\"%g\",\"%.3f\",\"%g\",\"%g\",\"%.3f\"", @@ -944,7 +944,7 @@ static int output_csv(void) shared_p->touched, oh.tc, oh.tcp); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, ",\"%g\",\"%.3f\"", shared_p->backups, oh.bup); @@ -954,29 +954,29 @@ static int output_csv(void) } fprintf(outfile, "\n"); } - if (config.header_limit & A_BIT) { + if (state->header_limit & A_BIT) { fprintf(outfile, "\"Sum of all ranges:\"\n"); fprintf(outfile, "\"name\",\"max\",\"cur\",\"percent\",\"touch\",\"t+c\",\"t+c perc\""); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, ",\"bu\",\"bu perc\""); } fprintf(outfile, "\n"); } - if (config.number_limit & A_BIT) { - shnet_output_helper(&oh, shared_networks); + if (state->number_limit & A_BIT) { + shnet_output_helper(state, &oh, state->shared_networks); fprintf(outfile, "\"%s\",\"%g\",\"%g\",\"%.3f\",\"%g\",\"%g\",\"%.3f\"", - shared_networks->name, - shared_networks->available, - shared_networks->used, + state->shared_networks->name, + state->shared_networks->available, + state->shared_networks->used, oh.percent, - shared_networks->touched, + state->shared_networks->touched, oh.tc, oh.tcp); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, "%7g %8.3f", - shared_networks->backups, + state->shared_networks->backups, oh.bup); } fprintf(outfile, "\n"); @@ -986,7 +986,7 @@ static int output_csv(void) } /*! \brief Output alarm text, and return program exit value. */ -static int output_alarming(void) +static int output_alarming(struct conf_t *state) { FILE *outfile; struct range_t *range_p; @@ -997,14 +997,14 @@ static int output_alarming(void) int rw = 0, rc = 0, ro = 0, ri = 0, sw = 0, sc = 0, so = 0, si = 0; int ret_val; - outfile = open_outfile(); - range_p = ranges; + outfile = open_outfile(state); + range_p = state->ranges; range_size = get_range_size(range_p); - shared_p = shared_networks; + shared_p = state->shared_networks; - if (config.number_limit & R_BIT) { - for (i = 0; i < num_ranges; i++) { - range_output_helper(&oh, range_p); + if (state->number_limit & R_BIT) { + for (i = 0; i < state->num_ranges; i++) { + range_output_helper(state, &oh, range_p); switch (oh.status) { case STATUS_SUPPRESSED: break; @@ -1026,10 +1026,10 @@ static int output_alarming(void) range_p++; } } - if (config.number_limit & S_BIT) { - for (i = 0; i < num_shared_networks; i++) { + if (state->number_limit & S_BIT) { + for (i = 0; i < state->num_shared_networks; i++) { shared_p++; - shnet_output_helper(&oh, shared_p); + shnet_output_helper(state, &oh, shared_p); switch (oh.status) { case STATUS_IGNORED: si++; @@ -1056,14 +1056,14 @@ static int output_alarming(void) else ret_val = STATE_OK; - if ((0 < rc && config.number_limit & R_BIT) - || (0 < sc && config.number_limit & S_BIT)) { + if ((0 < rc && state->number_limit & R_BIT) + || (0 < sc && state->number_limit & S_BIT)) { fprintf(outfile, "CRITICAL: %s:", program_name); - } else if ((0 < rw && config.number_limit & R_BIT) - || (0 < sw && config.number_limit & S_BIT)) { + } else if ((0 < rw && state->number_limit & R_BIT) + || (0 < sw && state->number_limit & S_BIT)) { fprintf(outfile, "WARNING: %s:", program_name); } else { - if (config.number_limit & A_BIT) + if (state->number_limit & A_BIT) fprintf(outfile, "OK:"); else { if (close_stream(outfile)) { @@ -1072,7 +1072,7 @@ static int output_alarming(void) return ret_val; } } - if (config.header_limit & R_BIT) { + if (state->header_limit & R_BIT) { fprintf(outfile, " Ranges - crit: %d warn: %d ok: %d", rc, rw, ro); if (ri != 0) { fprintf(outfile, " ignored: %d", ri); @@ -1081,22 +1081,22 @@ static int output_alarming(void) if (ri != 0) { fprintf(outfile, " range_ignored=%d", ri); } - if (config.perfdata == 1 && config.number_limit & R_BIT) { - for (i = 0; i < num_ranges; i++) { + if (state->perfdata == 1 && state->number_limit & R_BIT) { + for (i = 0; i < state->num_ranges; i++) { range_p--; range_size = get_range_size(range_p); - if (config.minsize < range_size) { + if (state->minsize < range_size) { fprintf(outfile, " %s_r=", ntop_ipaddr(&range_p->first_ip)); fprintf(outfile, "%g;%g;%g;0;%g", range_p->count, - (range_size * config.warning / 100), - (range_size * config.critical / 100), + (range_size * state->warning / 100), + (range_size * state->critical / 100), range_size); fprintf(outfile, " %s_rt=%g", ntop_ipaddr(&range_p->first_ip), range_p->touched); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, " %s_rbu=%g", ntop_ipaddr(&range_p->first_ip), range_p->backups); @@ -1108,7 +1108,7 @@ static int output_alarming(void) } else { fprintf(outfile, " "); } - if (config.header_limit & S_BIT) { + if (state->header_limit & S_BIT) { fprintf(outfile, "Shared nets - crit: %d warn: %d ok: %d", sc, sw, so); if (si != 0) { fprintf(outfile, " ignored: %d", si); @@ -1117,19 +1117,19 @@ static int output_alarming(void) if (si != 0) { fprintf(outfile, " snet_ignored=%d", si); } - if (config.perfdata == 1 && config.header_limit & R_BIT) { - for (i = 0; i < num_shared_networks; i++) { - if (config.minsize < shared_p->available) { + if (state->perfdata == 1 && state->header_limit & R_BIT) { + for (i = 0; i < state->num_shared_networks; i++) { + if (state->minsize < shared_p->available) { fprintf(outfile, " '%s_s'=%g;%g;%g;0;%g", shared_p->name, shared_p->used, - (shared_p->available * config.warning / 100), - (shared_p->available * config.critical / 100), + (shared_p->available * state->warning / 100), + (shared_p->available * state->critical / 100), shared_p->available); fprintf(outfile, " '%s_st'=%g", shared_p->name, shared_p->touched); - if (config.backups_found == 1) { + if (state->backups_found == 1) { fprintf(outfile, " '%s_sbu'=%g", shared_p->name, shared_p->backups); @@ -1146,44 +1146,44 @@ static int output_alarming(void) } /*! \brief Return output_format_names enum based on single char input. */ -int output_analysis(const char c) +int output_analysis(struct conf_t *state, const char output_format) { int ret = 1; - switch (c) { + switch (output_format) { case 't': - ret = output_txt(); + ret = output_txt(state); break; case 'a': - ret = output_alarming(); + ret = output_alarming(state); break; case 'h': error(EXIT_FAILURE, 0, "html table only output format is deprecated"); break; case 'H': - ret = output_html(); + ret = output_html(state); break; case 'x': - ret = output_xml(0); + ret = output_xml(state, 0); break; case 'X': - ret = output_xml(1); + ret = output_xml(state, 1); break; case 'j': - ret = output_json(0); + ret = output_json(state, 0); break; case 'J': - ret = output_json(1); + ret = output_json(state, 1); break; case 'c': - ret = output_csv(); + ret = output_csv(state); break; #ifdef BUILD_MUSTACH case 'm': - ret = mustach_dhcpd_pools(); + ret = mustach_dhcpd_pools(state); break; #endif default: - error(EXIT_FAILURE, 0, "unknown output format: '%c'", c); + error(EXIT_FAILURE, 0, "unknown output format: '%c'", output_format); } return ret; } diff --git a/src/sort.c b/src/sort.c index 0bc9a5b..57d69da 100644 --- a/src/sort.c +++ b/src/sort.c @@ -47,6 +47,7 @@ #include "error.h" #include "progname.h" #include "quote.h" +#include "xalloc.h" #include "dhcpd-pools.h" @@ -239,7 +240,6 @@ comparer_t field_selector(char c) default: { char str[2] = { c, '\0' }; - clean_up(); error(EXIT_FAILURE, 0, "field_selector: unknown sort order: %s", quote(str)); } } @@ -251,12 +251,13 @@ comparer_t field_selector(char c) * \param right The right side of the merge sort. * \return Relevant for merge sort decision. */ -static int merge(struct range_t *restrict left, struct range_t *restrict right) +int merge(struct conf_t *state, struct range_t *restrict left, + struct range_t *restrict right) { struct output_sort *p; int ret; - for (p = config.sorts; p; p = p->next) { + for (p = state->sorts; p; p = p->next) { if (p->func == NULL) { /* String sorting is special. */ ret = strcmp(left->shared_net->name, right->shared_net->name); @@ -274,43 +275,46 @@ static int merge(struct range_t *restrict left, struct range_t *restrict right) } /*! \brief Mergesort for range table. - * \param orig Pointer to range that is requested to be sorted. - * \param size Number of ranges to be sorted. - * \param temp Temporary memory space, needed when a values has to be - * flipped. */ -void mergesort_ranges(struct range_t *restrict orig, int size, struct range_t *restrict temp) +void mergesort_ranges(struct conf_t *state, struct range_t *restrict orig, unsigned int size, + struct range_t *restrict temp, const int root_call) { - int left, right, i; + unsigned int left, i, u_right; + int s_right; struct range_t hold; + if (temp == NULL) + temp = xmalloc(sizeof(struct range_t) * size); + /* Merge sort split size */ - static const int MIN_MERGE_SIZE = 8; + static const unsigned int MIN_MERGE_SIZE = 8; if (size < MIN_MERGE_SIZE) { for (left = 0; left < size; left++) { hold = *(orig + left); - for (right = left - 1; 0 <= right; right--) { - if (merge((orig + right), &hold)) + for (s_right = left - 1; 0 <= s_right; s_right--) { + if (merge(state, (orig + s_right), &hold)) break; - *(orig + right + 1) = *(orig + right); + *(orig + s_right + 1) = *(orig + s_right); } - *(orig + right + 1) = hold; + *(orig + s_right + 1) = hold; } + if (root_call) + free(temp); return; } - mergesort_ranges(orig, size / 2, temp); - mergesort_ranges(orig + size / 2, size - size / 2, temp); + mergesort_ranges(state, orig, size / 2, temp, 0); + mergesort_ranges(state, orig + size / 2, size - size / 2, temp, 0); left = 0; - right = size / 2; + u_right = size / 2; i = 0; - while (left < size / 2 && right < size) { - if (merge((orig + left), (orig + right))) { + while (left < size / 2 && u_right < size) { + if (merge(state, (orig + left), (orig + u_right))) { *(temp + i) = *(orig + left); left++; } else { - *(temp + i) = *(orig + right); - right++; + *(temp + i) = *(orig + u_right); + u_right++; } i++; } @@ -319,10 +323,13 @@ void mergesort_ranges(struct range_t *restrict orig, int size, struct range_t *r left++; i++; } - while (right < size) { - *(temp + i) = *(orig + right); - right++; + while (u_right < size) { + *(temp + i) = *(orig + u_right); + u_right++; i++; } memcpy(orig, temp, size * sizeof(struct range_t)); + + if (root_call) + free(temp); } From 7cd381ed839413e80e0b58aca9807c51ecee5890 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 12 Nov 2017 13:41:33 +0000 Subject: [PATCH 080/158] all files: re-indent Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 41 ++++++++++++++++---------------- src/dhcpd-pools.h | 12 +++++++++- src/hash.c | 3 ++- src/other.c | 15 +++++++----- src/output.c | 59 +++++++++++++++++++---------------------------- src/sort.c | 6 ++--- 6 files changed, 69 insertions(+), 67 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 3841158..ea17c06 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -155,7 +155,6 @@ int main(int argc, char **argv) atexit(close_stdout); set_program_name(argv[0]); - prepare_memory(&state); set_ipv_functions(&state, IPvUNKNOWN); /* Parse command line options */ @@ -179,24 +178,25 @@ int main(int argc, char **argv) output_format = optarg[0]; break; case 's': - { - /* Output sorting option */ - struct output_sort *p = state.sorts; - size_t len; + { + /* Output sorting option */ + struct output_sort *p = state.sorts; + size_t len; - while (p && p->next) - p = p->next; - for (len = 0; len < strlen(optarg); len++) { - if (state.sorts == NULL) { - state.sorts = xcalloc(1, sizeof(struct output_sort)); - p = state.sorts; - } else { - p->next = xcalloc(1, sizeof(struct output_sort)); + while (p && p->next) p = p->next; + for (len = 0; len < strlen(optarg); len++) { + if (state.sorts == NULL) { + state.sorts = + xcalloc(1, sizeof(struct output_sort)); + p = state.sorts; + } else { + p->next = xcalloc(1, sizeof(struct output_sort)); + p = p->next; + } + p->func = field_selector(optarg[len]); } - p->func = field_selector(optarg[len]); } - } break; case 'r': /* What ever sort in reverse order */ @@ -250,7 +250,7 @@ int main(int argc, char **argv) state.minsize = strtod_or_err(optarg, "illegal argument"); break; case OPT_SET_IPV: - switch(optarg[0]) { + switch (optarg[0]) { case '4': set_ipv_functions(&state, IPv4); break; @@ -276,8 +276,7 @@ int main(int argc, char **argv) /* Print help */ usage(EXIT_SUCCESS); default: - error(EXIT_FAILURE, 0, "Try %s --help for more information.", - program_name); + error(EXIT_FAILURE, 0, "Try %s --help for more information.", program_name); } } @@ -294,13 +293,14 @@ int main(int argc, char **argv) state.header_limit = return_limit(default_limit[0]); state.number_limit = return_limit(default_limit[1]); } - /* Output format is not defined, if alarm thresholds are then it's - * alarming, else use the default. */ + /* Output format is not defined, if alarm thresholds are then it's alarming, else use the + * default. */ if (output_format == '\0') { if (alarming == 1) output_format = 'a'; else { const char *const default_format = OUTPUT_FORMAT; + output_format = default_format[0]; } } @@ -321,4 +321,3 @@ int main(int argc, char **argv) clean_up(&state); return (ret_val); } - diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index f519c6f..3604ad1 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -93,6 +93,7 @@ enum dhcp_version { IPv4, IPv6 }; + /*! \enum prefix_t * \brief Enumeration of interesting data in dhcpd.leases file, that has * to be further examined, and saved. @@ -108,6 +109,7 @@ enum prefix_t { PREFIX_HARDWARE_ETHERNET, NUM_OF_PREFIX }; + /*! \struct shared_network_t * \brief Counters for an individual shared network. */ @@ -119,6 +121,7 @@ struct shared_network_t { double backups; int netmask; }; + /*! \struct range_t * \brief Counters for an individual range. */ @@ -130,6 +133,7 @@ struct range_t { double touched; double backups; }; + /*! \enum count_status_t * \brief Enumeration of possible range and shared net statuses. */ @@ -140,6 +144,7 @@ enum count_status_t { STATUS_IGNORED, STATUS_SUPPRESSED }; + /*! \struct output_helper_t * \brief Various per range and shared net temporary calculation results. */ @@ -151,6 +156,7 @@ struct output_helper_t { double tcp; double bup; }; + /*! \enum isc_conf_parser * \brief Configuration file parsing state flags. */ @@ -163,6 +169,7 @@ enum isc_conf_parser { ITS_A_SUBNET, ITS_A_NETMASK }; + /*! \enum ltype * \brief Lease state types. */ @@ -171,6 +178,7 @@ enum ltype { FREE, BACKUP }; + /*! \struct leases_t * \brief An individual lease. The leaases are hashed. */ @@ -180,6 +188,7 @@ struct leases_t { char *ethernet; UT_hash_handle hh; }; + /*! \enum limbits * \brief Output limit bits: R_BIT ranges, S_BIT shared networks, A_BIT all. */ @@ -208,7 +217,7 @@ enum color_mode { color_unknown, color_off, color_on, - color_auto /* default */ + color_auto /* default */ }; /*! \var comparer_t @@ -223,6 +232,7 @@ struct output_sort { comparer_t func; struct output_sort *next; }; + /*! \struct conf_t * \brief Runtime configuration state. */ diff --git a/src/hash.c b/src/hash.c index fdc1861..8bcdb30 100644 --- a/src/hash.c +++ b/src/hash.c @@ -81,7 +81,8 @@ void add_lease_v6(struct conf_t *state, union ipaddr_t *addr, enum ltype type) * \param addr Binary IP searched from leases hash. * \return A lease structure about requested IP, or NULL. */ -struct leases_t *find_lease_init(struct conf_t *state __attribute__ ((unused)), union ipaddr_t *addr __attribute__ ((unused))) +struct leases_t *find_lease_init(struct conf_t *state __attribute__ ((unused)), union ipaddr_t *addr + __attribute__ ((unused))) { return NULL; } diff --git a/src/other.c b/src/other.c index c20bed5..9b83a27 100644 --- a/src/other.c +++ b/src/other.c @@ -56,7 +56,7 @@ #include "dhcpd-pools.h" -char *(*cidr_last)(union ipaddr_t *restrict addr, const int mask); +char *(*cidr_last) (union ipaddr_t *restrict addr, const int mask); static char *cidr_last_v4(union ipaddr_t *restrict addr, const int mask); static char *cidr_last_v6(union ipaddr_t *restrict addr, const int mask); @@ -135,7 +135,9 @@ int parse_ipaddr_init(struct conf_t *state, const char *restrict src, union ipad return parse_ipaddr(state, src, dst); } -int parse_ipaddr_v4(struct conf_t *state __attribute__ ((unused)), const char *restrict src, union ipaddr_t *restrict dst) +int parse_ipaddr_v4(struct conf_t *state + __attribute__ ((unused)), const char *restrict src, + union ipaddr_t *restrict dst) { int rv; struct in_addr addr; @@ -145,7 +147,9 @@ int parse_ipaddr_v4(struct conf_t *state __attribute__ ((unused)), const char *r return rv == 1; } -int parse_ipaddr_v6(struct conf_t *state __attribute__ ((unused)), const char *restrict src, union ipaddr_t *restrict dst) +int parse_ipaddr_v6(struct conf_t *state + __attribute__ ((unused)), const char *restrict src, + union ipaddr_t *restrict dst) { int rv; struct in6_addr addr; @@ -184,7 +188,7 @@ static char *cidr_last_v4(union ipaddr_t *restrict addr, const int mask) netmask = (1U << (32 - mask)) - 1; else netmask = 0; - last_ip.v4 = addr->v4 | netmask; + last_ip.v4 = addr->v4 | netmask; ip = ntop_ipaddr(&last_ip); return xstrdup(ip); @@ -221,8 +225,7 @@ void parse_cidr(struct conf_t *state, struct range_t *range_p, const char *word) *divider++ = '\0'; mask = strtol_mask(divider); if (mask < 0) - error(EXIT_FAILURE, 0, "cidr %s invalid mask %s", word, - divider); + error(EXIT_FAILURE, 0, "cidr %s invalid mask %s", word, divider); if (state->ip_version == IPvUNKNOWN) { if (!strchr(word, ':')) set_ipv_functions(state, IPv4); diff --git a/src/output.c b/src/output.c index cdd37c9..0ed0041 100644 --- a/src/output.c +++ b/src/output.c @@ -72,8 +72,7 @@ void range_output_helper(struct conf_t *state, struct output_helper_t *oh, struc } /* set status */ oh->status = STATUS_OK; - if (state->critical < oh->percent - && (oh->range_size - range_p->count) < state->crit_count) + if (state->critical < oh->percent && (oh->range_size - range_p->count) < state->crit_count) oh->status = STATUS_CRIT; else if (state->warning < oh->percent && (oh->range_size - range_p->count) < state->warn_count) @@ -87,7 +86,8 @@ void range_output_helper(struct conf_t *state, struct output_helper_t *oh, struc } /*! \brief Calculate shared network percentages and such. */ -void shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, struct shared_network_t *shared_p) +void shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, + struct shared_network_t *shared_p) { /* counts and calculations */ oh->tc = shared_p->touched + shared_p->used; @@ -206,6 +206,7 @@ static int output_txt(struct conf_t *state) if (state->number_limit & R_BIT) { for (i = 0; i < state->num_ranges; i++) { int color_set = 0; + range_output_helper(state, &oh, range_p); if (state->skip_ok && oh.status == STATUS_OK) { range_p++; @@ -234,8 +235,7 @@ static int output_txt(struct conf_t *state) oh.tc, oh.tcp); if (state->backups_found == 1) { - fprintf(outfile, "%7g %8.3f", - range_p->backups, oh.bup); + fprintf(outfile, "%7g %8.3f", range_p->backups, oh.bup); } if (color_set) fputs(COLOR_RESET, outfile); @@ -258,6 +258,7 @@ static int output_txt(struct conf_t *state) if (state->number_limit & S_BIT) { for (i = 0; i < state->num_shared_networks; i++) { int color_set = 0; + shared_p++; shnet_output_helper(state, &oh, shared_p); if (state->skip_ok && oh.status == STATUS_OK) @@ -274,9 +275,7 @@ static int output_txt(struct conf_t *state) oh.tc, oh.tcp); if (state->backups_found == 1) { - fprintf(outfile, "%7g %8.3f", - shared_p->backups, - oh.bup); + fprintf(outfile, "%7g %8.3f", shared_p->backups, oh.bup); } if (color_set) fputs(COLOR_RESET, outfile); @@ -298,6 +297,7 @@ static int output_txt(struct conf_t *state) } if (state->number_limit & A_BIT) { int color_set = 0; + shnet_output_helper(state, &oh, state->shared_networks); if (state->color_mode == color_on) color_set = start_color(&oh, outfile); @@ -311,9 +311,7 @@ static int output_txt(struct conf_t *state) oh.tcp); if (state->backups_found == 1) { - fprintf(outfile, "%7g %8.3f", - state->shared_networks->backups, - oh.bup); + fprintf(outfile, "%7g %8.3f", state->shared_networks->backups, oh.bup); } if (color_set) fputs(COLOR_RESET, outfile); @@ -554,12 +552,13 @@ static int output_json(struct conf_t *state, const int print_mac_addreses) fprintf(outfile, " \"used\":%g,\n", state->shared_networks->used); fprintf(outfile, " \"touched\":%g,\n", state->shared_networks->touched); fprintf(outfile, " \"free\":%g,\n", - state->shared_networks->available - state->shared_networks->used); + state->shared_networks->available - state->shared_networks->used); fprintf(outfile, " \"percent\":%g,\n", oh.percent); fprintf(outfile, " \"touch_count\":%g,\n", oh.tc); fprintf(outfile, " \"touch_percent\":%g,\n", oh.tcp); if (state->backups_found == 1) { - fprintf(outfile, " \"backup_count\":%g,\n", state->shared_networks->backups); + fprintf(outfile, " \"backup_count\":%g,\n", + state->shared_networks->backups); fprintf(outfile, " \"backup_percent\":%g,\n", oh.bup); } fprintf(outfile, " \"status\":%d\n", oh.status); @@ -608,7 +607,8 @@ static void html_header(struct conf_t *state, FILE *restrict f) fprintf(f, "\n"); fprintf(f, "
\n"); fprintf(f, "

ISC DHCPD status

\n"); - fprintf(f, "File %s was last modified at %s
\n", state->dhcpdlease_file, outstr); + fprintf(f, "File %s was last modified at %s
\n", state->dhcpdlease_file, + outstr); } /*! \brief Footer for full html output format. @@ -656,8 +656,7 @@ static void end_tag(FILE *restrict f, char const *restrict tag) * \param class How the data is aligned. * \param text Actual payload of the printout. */ -static void output_line(FILE *restrict f, char const *restrict type, - char const *restrict text) +static void output_line(FILE *restrict f, char const *restrict type, char const *restrict text) { fprintf(f, "<%s>%s\n", type, text, type); } @@ -909,9 +908,7 @@ static int output_csv(struct conf_t *state) oh.tc, oh.tcp); if (state->backups_found == 1) { - fprintf(outfile, ",\"%g\",\"%.3f\"", - range_p->backups, - oh.bup); + fprintf(outfile, ",\"%g\",\"%.3f\"", range_p->backups, oh.bup); } fprintf(outfile, "\n"); @@ -945,9 +942,7 @@ static int output_csv(struct conf_t *state) oh.tc, oh.tcp); if (state->backups_found == 1) { - fprintf(outfile, ",\"%g\",\"%.3f\"", - shared_p->backups, - oh.bup); + fprintf(outfile, ",\"%g\",\"%.3f\"", shared_p->backups, oh.bup); } fprintf(outfile, "\n"); @@ -975,9 +970,7 @@ static int output_csv(struct conf_t *state) oh.tc, oh.tcp); if (state->backups_found == 1) { - fprintf(outfile, "%7g %8.3f", - state->shared_networks->backups, - oh.bup); + fprintf(outfile, "%7g %8.3f", state->shared_networks->backups, oh.bup); } fprintf(outfile, "\n"); } @@ -1086,16 +1079,13 @@ static int output_alarming(struct conf_t *state) range_p--; range_size = get_range_size(range_p); if (state->minsize < range_size) { - fprintf(outfile, " %s_r=", - ntop_ipaddr(&range_p->first_ip)); + fprintf(outfile, " %s_r=", ntop_ipaddr(&range_p->first_ip)); fprintf(outfile, "%g;%g;%g;0;%g", range_p->count, (range_size * state->warning / 100), - (range_size * state->critical / 100), - range_size); + (range_size * state->critical / 100), range_size); fprintf(outfile, " %s_rt=%g", - ntop_ipaddr(&range_p->first_ip), - range_p->touched); + ntop_ipaddr(&range_p->first_ip), range_p->touched); if (state->backups_found == 1) { fprintf(outfile, " %s_rbu=%g", ntop_ipaddr(&range_p->first_ip), @@ -1127,12 +1117,10 @@ static int output_alarming(struct conf_t *state) (shared_p->available * state->critical / 100), shared_p->available); fprintf(outfile, " '%s_st'=%g", - shared_p->name, - shared_p->touched); + shared_p->name, shared_p->touched); if (state->backups_found == 1) { fprintf(outfile, " '%s_sbu'=%g", - shared_p->name, - shared_p->backups); + shared_p->name, shared_p->backups); } } shared_p--; @@ -1149,6 +1137,7 @@ static int output_alarming(struct conf_t *state) int output_analysis(struct conf_t *state, const char output_format) { int ret = 1; + switch (output_format) { case 't': ret = output_txt(state); diff --git a/src/sort.c b/src/sort.c index 57d69da..5911a20 100644 --- a/src/sort.c +++ b/src/sort.c @@ -240,7 +240,8 @@ comparer_t field_selector(char c) default: { char str[2] = { c, '\0' }; - error(EXIT_FAILURE, 0, "field_selector: unknown sort order: %s", quote(str)); + error(EXIT_FAILURE, 0, "field_selector: unknown sort order: %s", + quote(str)); } } return NULL; @@ -251,8 +252,7 @@ comparer_t field_selector(char c) * \param right The right side of the merge sort. * \return Relevant for merge sort decision. */ -int merge(struct conf_t *state, struct range_t *restrict left, - struct range_t *restrict right) +int merge(struct conf_t *state, struct range_t *restrict left, struct range_t *restrict right) { struct output_sort *p; int ret; From d25e7afa1c5729ade8c80b898fd3d3c34fc42a70 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 12 Nov 2017 14:22:49 +0000 Subject: [PATCH 081/158] analyze: bug fix shared networks counts This also fixes backup state counts that were added to shared networks twice, making the numbers to be much greater than they really where. Signed-off-by: Sami Kerola --- src/analyze.c | 47 ++++++++++++++---------------------------- tests/expected/mustach | 8 +++---- 2 files changed, 20 insertions(+), 35 deletions(-) diff --git a/src/analyze.c b/src/analyze.c index 2ed13a6..93c0ae5 100644 --- a/src/analyze.c +++ b/src/analyze.c @@ -60,7 +60,8 @@ void do_counting(struct conf_t *state) { struct range_t *restrict range_p = state->ranges; const struct leases_t *restrict l = state->leases; - unsigned long i, k, block_size; + unsigned long i; + double block_size; /* Walk through ranges */ for (i = 0; i < state->num_ranges; i++) { @@ -83,38 +84,22 @@ void do_counting(struct conf_t *state) range_p->backups++; break; } - if (range_p->shared_net) { - switch (l->type) { - case FREE: - range_p->shared_net->touched++; - break; - case ACTIVE: - range_p->shared_net->used++; - break; - case BACKUP: - range_p->shared_net->backups++; - break; - } - } } - /* Size of range, shared net & all networks */ + /* Size of range size. */ block_size = get_range_size(range_p); - if (range_p->shared_net) - range_p->shared_net->available += block_size; - range_p++; - } - /* FIXME: During count of other shared networks default network - * and all networks got mixed together semantically. The below - * fixes the problem, but is not elegant. */ - state->shared_networks->available = 0; - state->shared_networks->used = 0; - state->shared_networks->touched = 0; - range_p = state->ranges; - for (k = 0; k < state->num_ranges; k++) { - state->shared_networks->available += get_range_size(range_p); - state->shared_networks->used += range_p->count; - state->shared_networks->touched += range_p->touched; - state->shared_networks->backups += range_p->backups; + /* Count together ranges within shared network block. */ + range_p->shared_net->available += block_size; + range_p->shared_net->used += range_p->count; + range_p->shared_net->touched += range_p->touched; + range_p->shared_net->backups += range_p->backups; + /* When shared network is not 'all networks' add it as well. */ + if (range_p->shared_net != state->shared_networks) { + state->shared_networks->available += block_size; + state->shared_networks->used += range_p->count; + state->shared_networks->touched += range_p->touched; + state->shared_networks->backups += range_p->backups; + } + /* Next range. */ range_p++; } } diff --git a/tests/expected/mustach b/tests/expected/mustach index 39f5e6e..73358a8 100644 --- a/tests/expected/mustach +++ b/tests/expected/mustach @@ -110,8 +110,8 @@ Summary: percent: 43 touch_count: 43 touch_percent: 43 - backup_count: 3 - backup_percent: 3 + backup_count: 2 + backup_percent: 2 status: 0 --- skip ok --- @@ -185,7 +185,7 @@ Summary: percent: 43 touch_count: 43 touch_percent: 43 - backup_count: 3 - backup_percent: 3 + backup_count: 2 + backup_percent: 2 status: 0 From 5a8c178924afd579cc4b70a1a7feb321e8d12b91 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 12 Nov 2017 15:01:36 +0000 Subject: [PATCH 082/158] other: add Jose Bollo to version output credits Be also a little bit more verbose about licenses in version output. Signed-off-by: Sami Kerola --- src/other.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/other.c b/src/other.c index 9b83a27..730e858 100644 --- a/src/other.c +++ b/src/other.c @@ -534,10 +534,13 @@ void clean_up(struct conf_t *state) void __attribute__ ((__noreturn__)) print_version(void) { fprintf(stdout, "%s\n" - "Original design by Sami Kerola.\n" + "Original design and maintainer Sami Kerola.\n" "XML support by Dominic Germain, Sogetel inc.\n" - "IPv6 support by Cheer Xiao.\n\n" - "The software has FreeBSD License.\n", PACKAGE_STRING); + "IPv6 support by Cheer Xiao.\n" + "Mustach templating support by Jose Bollo.\n" + " The dhcpd-pools is FreeBSD Licensed,\n" + " gnulib parts are mostly GPL,\n" + " and mustache uses Apache License.\n", PACKAGE_STRING); exit(EXIT_SUCCESS); } From a237c11d5a351125ae6ee6bcf2d02ee183a16374 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 12 Nov 2017 15:22:46 +0000 Subject: [PATCH 083/158] output: improve mustach template parsing error Following error did not inform clearly what is wrong. $ ./dhcpd-pools -l samples/dhcpd.leases -c samples/dhcpd.conf -fm ./dhcpd-pools: must_read_template: open: (null): Bad address Signed-off-by: Sami Kerola --- src/mustach-dhcpd-pools.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 54a2009..90e09e5 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -276,6 +276,8 @@ static char *must_read_template(const char *filename) struct stat s; char *result; + if (filename == NULL) + error(EXIT_FAILURE, 0, "must_read_template: --mustach argument missing"); if ((f = open(filename, O_RDONLY)) < 0) { error(EXIT_FAILURE, errno, "must_read_template: open: %s", filename); } From ef5421ed056dde8cee526dc7bbf624a86fb6da4b Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 12 Nov 2017 16:50:19 +0000 Subject: [PATCH 084/158] analysis: shared networks to be linked list This way memory is allocated only for items that are in use, and walking through shared network items is also more straightforward. As an unfortunate side effect in --perfdata output shared networks are no longer printed in reverse order. This should be a cosmetic issue. Signed-off-by: Sami Kerola --- src/analyze.c | 10 ++-- src/dhcpd-pools.c | 9 ++-- src/dhcpd-pools.h | 11 ++-- src/getdata.c | 16 +++--- src/mustach-dhcpd-pools.c | 29 +++++----- src/other.c | 14 +++-- src/output.c | 93 ++++++++++++++------------------ tests/expected/complete-perfdata | 2 +- 8 files changed, 84 insertions(+), 100 deletions(-) diff --git a/src/analyze.c b/src/analyze.c index 93c0ae5..fb1084e 100644 --- a/src/analyze.c +++ b/src/analyze.c @@ -93,11 +93,11 @@ void do_counting(struct conf_t *state) range_p->shared_net->touched += range_p->touched; range_p->shared_net->backups += range_p->backups; /* When shared network is not 'all networks' add it as well. */ - if (range_p->shared_net != state->shared_networks) { - state->shared_networks->available += block_size; - state->shared_networks->used += range_p->count; - state->shared_networks->touched += range_p->touched; - state->shared_networks->backups += range_p->backups; + if (range_p->shared_net != state->shared_net_root) { + state->shared_net_root->available += block_size; + state->shared_net_root->used += range_p->count; + state->shared_net_root->touched += range_p->touched; + state->shared_net_root->backups += range_p->backups; } /* Next range. */ range_p++; diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index ea17c06..681ec55 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -78,12 +78,11 @@ static int return_limit(const char c) * initializations, etc are here. */ static void prepare_memory(struct conf_t *state) { - /* The SHARED_NETWORKS is a static value from defaults.h */ - state->shared_networks = xcalloc(sizeof(struct shared_network_t), SHARED_NETWORKS); state->ranges = xmalloc(sizeof(struct range_t) * state->ranges_size); - /* First shared network entry is all networks */ - state->shared_networks->name = xstrdup("All networks"); + state->shared_net_root = xcalloc(sizeof(struct shared_network_t), 1); + state->shared_net_root->name = xstrdup("All networks"); + state->shared_net_head = state->shared_net_root; } /*! \brief Start of execution. Parse options, and call other other @@ -306,7 +305,7 @@ int main(int argc, char **argv) } /* Do the job */ - parse_config(&state, 1, state.dhcpdconf_file, state.shared_networks); + parse_config(&state, 1, state.dhcpdconf_file, state.shared_net_root); if (output_format == 'X' || output_format == 'J') parse_leases(&state, 1); else diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 3604ad1..46efd59 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -77,12 +77,10 @@ union ipaddr_t { /*! \enum dhcpd_magic_numbers * \brief MAXLEN is maximum expected line length in dhcpd.conf and - * dhcpd.leases, and SHARED_NETWORKS is maximum number of different shared - * networks in dhcpd.conf file. + * dhcpd.leases. */ enum dhcpd_magic_numbers { - MAXLEN = 1024, - SHARED_NETWORKS = 8192 + MAXLEN = 1024 }; /*! \enum dhcp_version @@ -120,6 +118,7 @@ struct shared_network_t { double touched; double backups; int netmask; + struct shared_network_t *next; }; /*! \struct range_t @@ -237,8 +236,8 @@ struct output_sort { * \brief Runtime configuration state. */ struct conf_t { - struct shared_network_t *shared_networks; - unsigned int num_shared_networks; + struct shared_network_t *shared_net_root; + struct shared_network_t *shared_net_head; struct range_t *ranges; unsigned int num_ranges; size_t ranges_size; diff --git a/src/getdata.c b/src/getdata.c index 5e30ba3..d7b9bb2 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -192,7 +192,7 @@ void parse_config(struct conf_t *state, const int is_include, const char *restri word = xmalloc(sizeof(char) * MAXLEN); if (is_include) /* Default place holder for ranges "All networks". */ - shared_p->name = state->shared_networks->name; + shared_p->name = state->shared_net_root->name; /* Open configuration file */ dhcpd_config = fopen(config_file, "r"); if (dhcpd_config == NULL) @@ -282,7 +282,7 @@ void parse_config(struct conf_t *state, const int is_include, const char *restri /* FIXME: Using 1000 is lame, but * works. */ braces_shared = 1000; - shared_p = state->shared_networks; + shared_p = state->shared_net_root; } /* Not literally 1, but works for this * program */ @@ -374,19 +374,15 @@ void parse_config(struct conf_t *state, const int is_include, const char *restri case ITS_A_SHAREDNET: case ITS_A_SUBNET: /* ignore subnets inside a shared-network */ - if (argument == ITS_A_SUBNET && shared_p != state->shared_networks) { + if (argument == ITS_A_SUBNET && shared_p != state->shared_net_root) { argument = ITS_NOTHING_INTERESTING; break; } - /* printf ("shared-network named: %s\n", word); */ - state->num_shared_networks++; - shared_p = state->shared_networks + state->num_shared_networks; + state->shared_net_head->next = xcalloc(sizeof(struct shared_network_t), 1); + state->shared_net_head = state->shared_net_head->next; + shared_p = state->shared_net_head; shared_p->name = xstrdup(word); shared_p->netmask = (argument == ITS_A_SUBNET ? -1 : 0); /* do not fill in netmask */ - if (SHARED_NETWORKS < state->num_shared_networks + 2) - /* FIXME: make this to go away by reallocating more space. */ - error(EXIT_FAILURE, 0, - "parse_config: increase SHARED_NETWORKS in dhcpd-pools.h and recompile"); /* record network's mask too */ if (argument == ITS_A_SUBNET) newclause = 1; diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 90e09e5..700a873 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -220,14 +220,19 @@ static int must_next_shnet(void *closure) { struct expl *e = closure; - do { - e->shnet_p++; - e->current--; - if (e->current <= 0) - return 0; + if (e->current == 1 || e->shnet_p == NULL) + return 0; + while (1) { + e->shnet_p = e->shnet_p->next; + if (e->shnet_p == NULL) + break; shnet_output_helper(e->state, &e->oh, e->shnet_p); - } while (e->state->skip_ok && e->oh.status == STATUS_OK); - return 1; + if (e->state->skip_ok && e->oh.status == STATUS_OK) + continue; + else + return 1; + } + return 0; } static int must_enter(void *closure, const char *name) @@ -246,16 +251,16 @@ static int must_enter(void *closure, const char *name) if (!strcmp(name, "shared-networks")) { itf.put = must_put_shnet; itf.next = must_next_shnet; - e->shnet_p = e->state->shared_networks; - e->current = e->state->num_shared_networks + 1; + e->shnet_p = e->state->shared_net_root; + e->current = 0; return must_next_shnet(closure); } if (!strcmp(name, "summary")) { itf.put = must_put_shnet; itf.next = must_next_shnet; - e->shnet_p = e->state->shared_networks; - shnet_output_helper(e->state, &e->oh, e->shnet_p); + e->shnet_p = e->state->shared_net_root; e->current = 1; + shnet_output_helper(e->state, &e->oh, e->shnet_p); return 1; } return 0; @@ -265,7 +270,7 @@ static int must_leave(void *closure __attribute__ ((unused))) { struct expl *e = closure; - e->shnet_p = e->state->shared_networks; + e->shnet_p = e->state->shared_net_root; e->range_p = e->state->ranges; return 0; } diff --git a/src/other.c b/src/other.c index 730e858..7660d65 100644 --- a/src/other.c +++ b/src/other.c @@ -510,24 +510,22 @@ void flip_ranges(struct conf_t *state) void clean_up(struct conf_t *state) { struct output_sort *cur, *next; + struct shared_network_t *c, *n; /* Just in case there something in buffers */ if (fflush(NULL)) error(EXIT_FAILURE, errno, "clean_up: fflush"); free(state->ranges); delete_all_leases(state); - if (state->shared_networks) { - unsigned int i; - - state->num_shared_networks++; - for (i = 0; i < state->num_shared_networks; i++) - free((state->shared_networks + i)->name); - free(state->shared_networks); - } for (cur = state->sorts; cur; cur = next) { next = cur->next; free(cur); } + for (c = state->shared_net_root; c; c = n) { + n = c->next; + free(c->name); + free(c); + } } /*! \brief A version printing. */ diff --git a/src/output.c b/src/output.c index 0ed0041..9c509c5 100644 --- a/src/output.c +++ b/src/output.c @@ -80,7 +80,7 @@ void range_output_helper(struct conf_t *state, struct output_helper_t *oh, struc if (oh->status != STATUS_OK) { if (oh->range_size <= state->minsize) oh->status = STATUS_IGNORED; - else if (state->snet_alarms && range_p->shared_net != state->shared_networks) + else if (state->snet_alarms && range_p->shared_net != state->shared_net_root) oh->status = STATUS_SUPPRESSED; } } @@ -186,7 +186,6 @@ static int output_txt(struct conf_t *state) outfile = open_outfile(state); range_p = state->ranges; - shared_p = state->shared_networks; if (state->header_limit & R_BIT) { fprintf(outfile, "Ranges:\n"); @@ -256,10 +255,9 @@ static int output_txt(struct conf_t *state) fprintf(outfile, "\n"); } if (state->number_limit & S_BIT) { - for (i = 0; i < state->num_shared_networks; i++) { + for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { int color_set = 0; - shared_p++; shnet_output_helper(state, &oh, shared_p); if (state->skip_ok && oh.status == STATUS_OK) continue; @@ -298,20 +296,20 @@ static int output_txt(struct conf_t *state) if (state->number_limit & A_BIT) { int color_set = 0; - shnet_output_helper(state, &oh, state->shared_networks); + shnet_output_helper(state, &oh, state->shared_net_root); if (state->color_mode == color_on) color_set = start_color(&oh, outfile); fprintf(outfile, "%-20s %5g %5g %10.3f %7g %6g %9.3f", - state->shared_networks->name, - state->shared_networks->available, - state->shared_networks->used, + state->shared_net_root->name, + state->shared_net_root->available, + state->shared_net_root->used, oh.percent, - state->shared_networks->touched, + state->shared_net_root->touched, oh.tc, oh.tcp); if (state->backups_found == 1) { - fprintf(outfile, "%7g %8.3f", state->shared_networks->backups, oh.bup); + fprintf(outfile, "%7g %8.3f", state->shared_net_root->backups, oh.bup); } if (color_set) fputs(COLOR_RESET, outfile); @@ -332,7 +330,6 @@ static int output_xml(struct conf_t *state, const int print_mac_addreses) outfile = open_outfile(state); range_p = state->ranges; - shared_p = state->shared_networks; fprintf(outfile, "\n"); @@ -378,8 +375,7 @@ static int output_xml(struct conf_t *state, const int print_mac_addreses) } if (state->number_limit & S_BIT) { - for (i = 0; i < state->num_shared_networks; i++) { - shared_p++; + for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { shnet_output_helper(state, &oh, shared_p); if (state->skip_ok && oh.status == STATUS_OK) continue; @@ -396,12 +392,12 @@ static int output_xml(struct conf_t *state, const int print_mac_addreses) if (state->header_limit & A_BIT) { fprintf(outfile, "\n"); - fprintf(outfile, "\t%s\n", state->shared_networks->name); - fprintf(outfile, "\t%g\n", state->shared_networks->available); - fprintf(outfile, "\t%g\n", state->shared_networks->used); - fprintf(outfile, "\t%g\n", state->shared_networks->touched); + fprintf(outfile, "\t%s\n", state->shared_net_root->name); + fprintf(outfile, "\t%g\n", state->shared_net_root->available); + fprintf(outfile, "\t%g\n", state->shared_net_root->used); + fprintf(outfile, "\t%g\n", state->shared_net_root->touched); fprintf(outfile, "\t%g\n", - state->shared_networks->available - state->shared_networks->used); + state->shared_net_root->available - state->shared_net_root->used); fprintf(outfile, "\n"); } @@ -422,7 +418,6 @@ static int output_json(struct conf_t *state, const int print_mac_addreses) outfile = open_outfile(state); range_p = state->ranges; - shared_p = state->shared_networks; sep = 0; fprintf(outfile, "{\n"); @@ -503,8 +498,7 @@ static int output_json(struct conf_t *state, const int print_mac_addreses) fprintf(outfile, ",\n"); } fprintf(outfile, " \"shared-networks\": [\n"); - for (i = 0; i < state->num_shared_networks; i++) { - shared_p++; + for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { shnet_output_helper(state, &oh, shared_p); if (state->skip_ok && oh.status == STATUS_OK) continue; @@ -532,7 +526,7 @@ static int output_json(struct conf_t *state, const int print_mac_addreses) fprintf(outfile, "\"backup_percent\":%g, ", oh.bup); } fprintf(outfile, "\"status\":%d ", oh.status); - if (i + 1 < state->num_shared_networks) + if (shared_p->next) fprintf(outfile, "},\n"); else fprintf(outfile, "}\n"); @@ -542,23 +536,23 @@ static int output_json(struct conf_t *state, const int print_mac_addreses) } if (state->header_limit & A_BIT) { - shnet_output_helper(state, &oh, state->shared_networks); + shnet_output_helper(state, &oh, state->shared_net_root); if (sep) { fprintf(outfile, ",\n"); } fprintf(outfile, " \"summary\": {\n"); - fprintf(outfile, " \"location\":\"%s\",\n", state->shared_networks->name); - fprintf(outfile, " \"defined\":%g,\n", state->shared_networks->available); - fprintf(outfile, " \"used\":%g,\n", state->shared_networks->used); - fprintf(outfile, " \"touched\":%g,\n", state->shared_networks->touched); + fprintf(outfile, " \"location\":\"%s\",\n", state->shared_net_root->name); + fprintf(outfile, " \"defined\":%g,\n", state->shared_net_root->available); + fprintf(outfile, " \"used\":%g,\n", state->shared_net_root->used); + fprintf(outfile, " \"touched\":%g,\n", state->shared_net_root->touched); fprintf(outfile, " \"free\":%g,\n", - state->shared_networks->available - state->shared_networks->used); + state->shared_net_root->available - state->shared_net_root->used); fprintf(outfile, " \"percent\":%g,\n", oh.percent); fprintf(outfile, " \"touch_count\":%g,\n", oh.tc); fprintf(outfile, " \"touch_percent\":%g,\n", oh.tcp); if (state->backups_found == 1) { fprintf(outfile, " \"backup_count\":%g,\n", - state->shared_networks->backups); + state->shared_net_root->backups); fprintf(outfile, " \"backup_percent\":%g,\n", oh.bup); } fprintf(outfile, " \"status\":%d\n", oh.status); @@ -722,7 +716,6 @@ static int output_html(struct conf_t *state) outfile = open_outfile(state); range_p = state->ranges; - shared_p = state->shared_networks; html_header(state, outfile); newsection(outfile, "Sum of all"); table_start(outfile, "a", "all"); @@ -746,16 +739,16 @@ static int output_html(struct conf_t *state) if (state->number_limit & A_BIT) { start_tag(outfile, "tbody"); start_tag(outfile, "tr"); - shnet_output_helper(state, &oh, state->shared_networks); - output_line(outfile, "td", state->shared_networks->name); - output_double(outfile, "td", state->shared_networks->available); - output_double(outfile, "td", state->shared_networks->used); + shnet_output_helper(state, &oh, state->shared_net_root); + output_line(outfile, "td", state->shared_net_root->name); + output_double(outfile, "td", state->shared_net_root->available); + output_double(outfile, "td", state->shared_net_root->used); output_float(outfile, "td", oh.percent); - output_double(outfile, "td", state->shared_networks->touched); + output_double(outfile, "td", state->shared_net_root->touched); output_double(outfile, "td", oh.tc); output_float(outfile, "td", oh.tcp); if (state->backups_found == 1) { - output_double(outfile, "td", state->shared_networks->backups); + output_double(outfile, "td", state->shared_net_root->backups); output_float(outfile, "td", oh.tcp); } end_tag(outfile, "tr"); @@ -783,9 +776,8 @@ static int output_html(struct conf_t *state) } if (state->number_limit & S_BIT) { start_tag(outfile, "tbody"); - for (i = 0; i < state->num_shared_networks; i++) { - shared_p++; - shnet_output_helper(state, &oh, state->shared_networks); + for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { + shnet_output_helper(state, &oh, shared_p); if (state->skip_ok && oh.status == STATUS_OK) continue; start_tag(outfile, "tr"); @@ -874,7 +866,6 @@ static int output_csv(struct conf_t *state) outfile = open_outfile(state); range_p = state->ranges; - shared_p = state->shared_networks; if (state->header_limit & R_BIT) { fprintf(outfile, "\"Ranges:\"\n"); fprintf @@ -927,8 +918,7 @@ static int output_csv(struct conf_t *state) } if (state->number_limit & S_BIT) { - for (i = 0; i < state->num_shared_networks; i++) { - shared_p++; + for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { shnet_output_helper(state, &oh, shared_p); if (state->skip_ok && oh.status == STATUS_OK) continue; @@ -959,18 +949,18 @@ static int output_csv(struct conf_t *state) fprintf(outfile, "\n"); } if (state->number_limit & A_BIT) { - shnet_output_helper(state, &oh, state->shared_networks); + shnet_output_helper(state, &oh, state->shared_net_root); fprintf(outfile, "\"%s\",\"%g\",\"%g\",\"%.3f\",\"%g\",\"%g\",\"%.3f\"", - state->shared_networks->name, - state->shared_networks->available, - state->shared_networks->used, + state->shared_net_root->name, + state->shared_net_root->available, + state->shared_net_root->used, oh.percent, - state->shared_networks->touched, + state->shared_net_root->touched, oh.tc, oh.tcp); if (state->backups_found == 1) { - fprintf(outfile, "%7g %8.3f", state->shared_networks->backups, oh.bup); + fprintf(outfile, "%7g %8.3f", state->shared_net_root->backups, oh.bup); } fprintf(outfile, "\n"); } @@ -993,7 +983,6 @@ static int output_alarming(struct conf_t *state) outfile = open_outfile(state); range_p = state->ranges; range_size = get_range_size(range_p); - shared_p = state->shared_networks; if (state->number_limit & R_BIT) { for (i = 0; i < state->num_ranges; i++) { @@ -1020,8 +1009,7 @@ static int output_alarming(struct conf_t *state) } } if (state->number_limit & S_BIT) { - for (i = 0; i < state->num_shared_networks; i++) { - shared_p++; + for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { shnet_output_helper(state, &oh, shared_p); switch (oh.status) { case STATUS_IGNORED: @@ -1108,7 +1096,7 @@ static int output_alarming(struct conf_t *state) fprintf(outfile, " snet_ignored=%d", si); } if (state->perfdata == 1 && state->header_limit & R_BIT) { - for (i = 0; i < state->num_shared_networks; i++) { + for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { if (state->minsize < shared_p->available) { fprintf(outfile, " '%s_s'=%g;%g;%g;0;%g", shared_p->name, @@ -1123,7 +1111,6 @@ static int output_alarming(struct conf_t *state) shared_p->name, shared_p->backups); } } - shared_p--; } fprintf(outfile, "\n"); } diff --git a/tests/expected/complete-perfdata b/tests/expected/complete-perfdata index d9219e9..dfe0ac6 100644 --- a/tests/expected/complete-perfdata +++ b/tests/expected/complete-perfdata @@ -1,3 +1,3 @@ OK: Ranges - crit: 0 warn: 0 ok: 5; | range_crit=0 range_warn=0 range_ok=5 10.4.0.1_r=5;16;18;0;20 10.4.0.1_rt=0 10.3.0.1_r=9;16;18;0;20 10.3.0.1_rt=0 10.2.0.1_r=8;16;18;0;20 10.2.0.1_rt=0 10.1.0.1_r=10;16;18;0;20 10.1.0.1_rt=0 10.0.0.1_r=11;16;18;0;20 10.0.0.1_rt=0 -Shared nets - crit: 0 warn: 0 ok: 2; | snet_crit=0 snet_warn=0 snet_ok=2 'example2_s'=17;32;36;0;40 'example2_st'=0 'example1_s'=21;32;36;0;40 'example1_st'=0 +Shared nets - crit: 0 warn: 0 ok: 2; | snet_crit=0 snet_warn=0 snet_ok=2 'example1_s'=21;32;36;0;40 'example1_st'=0 'example2_s'=17;32;36;0;40 'example2_st'=0 From 15f08bbf02a86717bbc6b133ec4096d5c591d5d9 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 12 Nov 2017 17:29:40 +0000 Subject: [PATCH 085/158] output: make --skip-ok to effect --perfdata Reported-by: Frank Bulk Signed-off-by: Sami Kerola --- src/output.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/output.c b/src/output.c index 9c509c5..6448b75 100644 --- a/src/output.c +++ b/src/output.c @@ -973,7 +973,6 @@ static int output_alarming(struct conf_t *state) { FILE *outfile; struct range_t *range_p; - double range_size; struct shared_network_t *shared_p; struct output_helper_t oh; unsigned int i; @@ -982,7 +981,6 @@ static int output_alarming(struct conf_t *state) outfile = open_outfile(state); range_p = state->ranges; - range_size = get_range_size(range_p); if (state->number_limit & R_BIT) { for (i = 0; i < state->num_ranges; i++) { @@ -1065,13 +1063,15 @@ static int output_alarming(struct conf_t *state) if (state->perfdata == 1 && state->number_limit & R_BIT) { for (i = 0; i < state->num_ranges; i++) { range_p--; - range_size = get_range_size(range_p); - if (state->minsize < range_size) { + range_output_helper(state, &oh, range_p); + if (state->skip_ok && oh.status == STATUS_OK) + continue; + if (state->minsize < oh.range_size) { fprintf(outfile, " %s_r=", ntop_ipaddr(&range_p->first_ip)); fprintf(outfile, "%g;%g;%g;0;%g", range_p->count, - (range_size * state->warning / 100), - (range_size * state->critical / 100), range_size); + (oh.range_size * state->warning / 100), + (oh.range_size * state->critical / 100), oh.range_size); fprintf(outfile, " %s_rt=%g", ntop_ipaddr(&range_p->first_ip), range_p->touched); if (state->backups_found == 1) { @@ -1097,6 +1097,9 @@ static int output_alarming(struct conf_t *state) } if (state->perfdata == 1 && state->header_limit & R_BIT) { for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { + shnet_output_helper(state, &oh, shared_p); + if (state->skip_ok && oh.status == STATUS_OK) + continue; if (state->minsize < shared_p->available) { fprintf(outfile, " '%s_s'=%g;%g;%g;0;%g", shared_p->name, From a64630aa49180d29509323657a232d06593b5004 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 12 Nov 2017 17:43:42 +0000 Subject: [PATCH 086/158] output: move shared net andn range status check to output_helper Having same logic in many places is error prone if and when the logic needs maintenance. Signed-off-by: Sami Kerola --- src/dhcpd-pools.h | 8 ++--- src/mustach-dhcpd-pools.c | 6 ++-- src/output.c | 69 ++++++++++++++++----------------------- 3 files changed, 35 insertions(+), 48 deletions(-) diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 46efd59..170f099 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -336,10 +336,10 @@ extern double get_range_size_v4(const struct range_t *r); extern double get_range_size_v6(const struct range_t *r); /* output.c */ -extern void range_output_helper(struct conf_t *state, struct output_helper_t *oh, - struct range_t *range_p); -extern void shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, - struct shared_network_t *shared_p); +extern int range_output_helper(struct conf_t *state, struct output_helper_t *oh, + struct range_t *range_p); +extern int shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, + struct shared_network_t *shared_p); extern int output_analysis(struct conf_t *state, const char output_format); /* sort.c */ diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 700a873..1019452 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -211,8 +211,7 @@ static int must_next_range(void *closure) e->current--; if (e->current <= 0) return 0; - range_output_helper(e->state, &e->oh, e->range_p); - } while (e->state->skip_ok && e->oh.status == STATUS_OK); + } while (range_output_helper(e->state, &e->oh, e->range_p)); return 1; } @@ -226,8 +225,7 @@ static int must_next_shnet(void *closure) e->shnet_p = e->shnet_p->next; if (e->shnet_p == NULL) break; - shnet_output_helper(e->state, &e->oh, e->shnet_p); - if (e->state->skip_ok && e->oh.status == STATUS_OK) + if (shnet_output_helper(e->state, &e->oh, e->shnet_p)) continue; else return 1; diff --git a/src/output.c b/src/output.c index 6448b75..a0d5946 100644 --- a/src/output.c +++ b/src/output.c @@ -60,7 +60,8 @@ #include "dhcpd-pools.h" /*! \brief Calculate range percentages and such. */ -void range_output_helper(struct conf_t *state, struct output_helper_t *oh, struct range_t *range_p) +int range_output_helper(struct conf_t *state, struct output_helper_t *oh, + struct range_t *range_p) { /* counts and calculations */ oh->range_size = get_range_size(range_p); @@ -83,11 +84,14 @@ void range_output_helper(struct conf_t *state, struct output_helper_t *oh, struc else if (state->snet_alarms && range_p->shared_net != state->shared_net_root) oh->status = STATUS_SUPPRESSED; } + if (state->skip_ok && oh->status == STATUS_OK) + return 1; + return 0; } /*! \brief Calculate shared network percentages and such. */ -void shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, - struct shared_network_t *shared_p) +int shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, + struct shared_network_t *shared_p) { /* counts and calculations */ oh->tc = shared_p->touched + shared_p->used; @@ -104,23 +108,20 @@ void shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, } } /* set status */ - if (oh->percent == NAN) { + if (oh->percent == NAN) oh->status = STATUS_SUPPRESSED; - return; - } - if (shared_p->available <= state->minsize) { + else if (shared_p->available <= state->minsize) oh->status = STATUS_IGNORED; - return; - } - if (state->critical < oh->percent && shared_p->used < state->crit_count) { + else if (state->critical < oh->percent && shared_p->used < state->crit_count) oh->status = STATUS_CRIT; - return; - } - if (state->warning < oh->percent && shared_p->used < state->warn_count) { + else if (state->warning < oh->percent && shared_p->used < state->warn_count) oh->status = STATUS_WARN; - return; - } - oh->status = STATUS_OK; + else + oh->status = STATUS_OK; + if (state->skip_ok && oh->status == STATUS_OK) + return 1; + return 0; + } static int start_color(struct output_helper_t *oh, FILE *outfile) @@ -206,8 +207,7 @@ static int output_txt(struct conf_t *state) for (i = 0; i < state->num_ranges; i++) { int color_set = 0; - range_output_helper(state, &oh, range_p); - if (state->skip_ok && oh.status == STATUS_OK) { + if (range_output_helper(state, &oh, range_p)) { range_p++; continue; } @@ -258,8 +258,7 @@ static int output_txt(struct conf_t *state) for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { int color_set = 0; - shnet_output_helper(state, &oh, shared_p); - if (state->skip_ok && oh.status == STATUS_OK) + if (shnet_output_helper(state, &oh, shared_p)) continue; if (state->color_mode == color_on) color_set = start_color(&oh, outfile); @@ -351,8 +350,7 @@ static int output_xml(struct conf_t *state, const int print_mac_addreses) if (state->number_limit & R_BIT) { for (i = 0; i < state->num_ranges; i++) { - range_output_helper(state, &oh, range_p); - if (state->skip_ok && oh.status == STATUS_OK) { + if (range_output_helper(state, &oh, range_p)) { range_p++; continue; } @@ -376,8 +374,7 @@ static int output_xml(struct conf_t *state, const int print_mac_addreses) if (state->number_limit & S_BIT) { for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { - shnet_output_helper(state, &oh, shared_p); - if (state->skip_ok && oh.status == STATUS_OK) + if (shnet_output_helper(state, &oh, shared_p)) continue; fprintf(outfile, "\n"); fprintf(outfile, "\t%s\n", shared_p->name); @@ -452,8 +449,7 @@ static int output_json(struct conf_t *state, const int print_mac_addreses) } fprintf(outfile, " \"subnets\": [\n"); for (i = 0; i < state->num_ranges; i++) { - range_output_helper(state, &oh, range_p); - if (state->skip_ok && oh.status == STATUS_OK) { + if (range_output_helper(state, &oh, range_p)) { range_p++; continue; } @@ -499,8 +495,7 @@ static int output_json(struct conf_t *state, const int print_mac_addreses) } fprintf(outfile, " \"shared-networks\": [\n"); for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { - shnet_output_helper(state, &oh, shared_p); - if (state->skip_ok && oh.status == STATUS_OK) + if (shnet_output_helper(state, &oh, shared_p)) continue; fprintf(outfile, " "); fprintf(outfile, "{ "); @@ -777,8 +772,7 @@ static int output_html(struct conf_t *state) if (state->number_limit & S_BIT) { start_tag(outfile, "tbody"); for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { - shnet_output_helper(state, &oh, shared_p); - if (state->skip_ok && oh.status == STATUS_OK) + if (shnet_output_helper(state, &oh, shared_p)) continue; start_tag(outfile, "tr"); output_line(outfile, "td", shared_p->name); @@ -821,8 +815,7 @@ static int output_html(struct conf_t *state) if (state->number_limit & R_BIT) { start_tag(outfile, "tbody"); for (i = 0; i < state->num_ranges; i++) { - range_output_helper(state, &oh, range_p); - if (state->skip_ok && oh.status == STATUS_OK) { + if (range_output_helper(state, &oh, range_p)) { range_p++; continue; } @@ -878,8 +871,7 @@ static int output_csv(struct conf_t *state) } if (state->number_limit & R_BIT) { for (i = 0; i < state->num_ranges; i++) { - range_output_helper(state, &oh, range_p); - if (state->skip_ok && oh.status == STATUS_OK) { + if (range_output_helper(state, &oh, range_p)) { range_p++; continue; } @@ -919,8 +911,7 @@ static int output_csv(struct conf_t *state) if (state->number_limit & S_BIT) { for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { - shnet_output_helper(state, &oh, shared_p); - if (state->skip_ok && oh.status == STATUS_OK) + if (shnet_output_helper(state, &oh, shared_p)) continue; fprintf(outfile, "\"%s\",\"%g\",\"%g\",\"%.3f\",\"%g\",\"%g\",\"%.3f\"", @@ -1063,8 +1054,7 @@ static int output_alarming(struct conf_t *state) if (state->perfdata == 1 && state->number_limit & R_BIT) { for (i = 0; i < state->num_ranges; i++) { range_p--; - range_output_helper(state, &oh, range_p); - if (state->skip_ok && oh.status == STATUS_OK) + if (range_output_helper(state, &oh, range_p)) continue; if (state->minsize < oh.range_size) { fprintf(outfile, " %s_r=", ntop_ipaddr(&range_p->first_ip)); @@ -1097,8 +1087,7 @@ static int output_alarming(struct conf_t *state) } if (state->perfdata == 1 && state->header_limit & R_BIT) { for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { - shnet_output_helper(state, &oh, shared_p); - if (state->skip_ok && oh.status == STATUS_OK) + if (shnet_output_helper(state, &oh, shared_p)) continue; if (state->minsize < shared_p->available) { fprintf(outfile, " '%s_s'=%g;%g;%g;0;%g", From c029c7581a2068ec3f1627c8145f9ac2e5e21014 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 12 Nov 2017 22:09:19 +0000 Subject: [PATCH 087/158] output: make warning and critical colors work in html output Users should combine this with --color=always to web pages to work correctly. Signed-off-by: Sami Kerola --- man/dhcpd-pools.1.in | 4 +-- src/dhcpd-pools.h | 57 +++++++++++++++++---------------- src/output.c | 75 +++++++++++++++++++++++++++++--------------- 3 files changed, 81 insertions(+), 55 deletions(-) diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index e5f014e..e0d50da 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -88,8 +88,8 @@ Text .RI ( t ). Full-html .RI ( H ) -page output. -The +page output. In html page critical and warning thresholds can be visualized +with \-\-color=always option. The .RI ( c ) stands for comma-separated values. Output format xml .RI ( x ) diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 170f099..258649a 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -108,6 +108,35 @@ enum prefix_t { NUM_OF_PREFIX }; +/*! \enum output_formats + * \brief Enumeration of output formats. Keep the text and html first, they + * are used color array selector. + */ +enum output_formats { + OUT_FORM_TEXT, + OUT_FORM_HTML, + NUM_OF_OUT_FORMS +}; + +/*! \enum count_status_t + * \brief Enumeration of possible range and shared net statuses. + */ +enum count_status_t { + STATUS_OK, + STATUS_WARN, + STATUS_CRIT, + STATUS_IGNORED, + STATUS_SUPPRESSED, + COLOR_RESET +}; + +enum color_mode { + color_unknown, + color_off, + color_on, + color_auto /* default */ +}; + /*! \struct shared_network_t * \brief Counters for an individual shared network. */ @@ -133,17 +162,6 @@ struct range_t { double backups; }; -/*! \enum count_status_t - * \brief Enumeration of possible range and shared net statuses. - */ -enum count_status_t { - STATUS_OK, - STATUS_WARN, - STATUS_CRIT, - STATUS_IGNORED, - STATUS_SUPPRESSED -}; - /*! \struct output_helper_t * \brief Various per range and shared net temporary calculation results. */ @@ -204,21 +222,6 @@ enum limbits { # define STATE_WARNING 1 # define STATE_CRITICAL 2 -/*! \def COLOR_BOLD_RED - * \brief Shell warning color. - */ -# define COLOR_BOLD_RED "\033[1;31m" -# define COLOR_BOLD_YELLOW "\033[1;33m" -# define COLOR_BOLD_GREEN "\033[1;32m" -# define COLOR_BOLD_BLUE "\033[1;34m" -# define COLOR_RESET "\033[0m" -enum color_mode { - color_unknown, - color_off, - color_on, - color_auto /* default */ -}; - /*! \var comparer_t * \brief Function pointer holding sort algorithm. */ @@ -246,7 +249,7 @@ struct conf_t { enum dhcp_version ip_version; const char *dhcpdconf_file; const char *dhcpdlease_file; - const int output_format; + int output_format; struct output_sort *sorts; const char *output_file; const char *mustach_template; diff --git a/src/output.c b/src/output.c index a0d5946..69689ec 100644 --- a/src/output.c +++ b/src/output.c @@ -59,6 +59,17 @@ #include "dhcpd-pools.h" +static const char *color_tags[][NUM_OF_OUT_FORMS] = { + [STATUS_OK] = { "", "" }, + [STATUS_WARN] = { "\033[1;33m", "" }, + [STATUS_CRIT] = { "\033[1;31m", "" }, + [STATUS_IGNORED] = { "\033[1;32m", "" }, + [STATUS_SUPPRESSED] = { "\033[1;34m", "" }, + [COLOR_RESET] = { "\033[0m", "" } +}; + + + /*! \brief Calculate range percentages and such. */ int range_output_helper(struct conf_t *state, struct output_helper_t *oh, struct range_t *range_p) @@ -124,25 +135,13 @@ int shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, } -static int start_color(struct output_helper_t *oh, FILE *outfile) +static int start_color(struct conf_t *state, struct output_helper_t *oh, FILE *outfile) { - if (oh->status == STATUS_CRIT) { - fputs(COLOR_BOLD_RED, outfile); - return 1; + if (oh->status == STATUS_OK) { + return 0; } - if (oh->status == STATUS_WARN) { - fputs(COLOR_BOLD_YELLOW, outfile); - return 1; - } - if (oh->status == STATUS_IGNORED) { - fputs(COLOR_BOLD_GREEN, outfile); - return 1; - } - if (oh->status == STATUS_SUPPRESSED) { - fputs(COLOR_BOLD_BLUE, outfile); - return 1; - } - return 0; + fputs(color_tags[oh->status][state->output_format], outfile); + return 1; } static FILE *open_outfile(struct conf_t *state) @@ -212,7 +211,7 @@ static int output_txt(struct conf_t *state) continue; } if (state->color_mode == color_on) - color_set = start_color(&oh, outfile); + color_set = start_color(state, &oh, outfile); if (range_p->shared_net) { fprintf(outfile, "%-20s", range_p->shared_net->name); } else { @@ -237,7 +236,7 @@ static int output_txt(struct conf_t *state) fprintf(outfile, "%7g %8.3f", range_p->backups, oh.bup); } if (color_set) - fputs(COLOR_RESET, outfile); + fputs(color_tags[COLOR_RESET][state->output_format], outfile); fprintf(outfile, "\n"); range_p++; } @@ -261,7 +260,7 @@ static int output_txt(struct conf_t *state) if (shnet_output_helper(state, &oh, shared_p)) continue; if (state->color_mode == color_on) - color_set = start_color(&oh, outfile); + color_set = start_color(state, &oh, outfile); fprintf(outfile, "%-20s %5g %5g %10.3f %7g %6g %9.3f", shared_p->name, @@ -275,7 +274,7 @@ static int output_txt(struct conf_t *state) fprintf(outfile, "%7g %8.3f", shared_p->backups, oh.bup); } if (color_set) - fputs(COLOR_RESET, outfile); + fputs(color_tags[COLOR_RESET][state->output_format], outfile); fprintf(outfile, "\n"); } } @@ -297,7 +296,7 @@ static int output_txt(struct conf_t *state) shnet_output_helper(state, &oh, state->shared_net_root); if (state->color_mode == color_on) - color_set = start_color(&oh, outfile); + color_set = start_color(state, &oh, outfile); fprintf(outfile, "%-20s %5g %5g %10.3f %7g %6g %9.3f", state->shared_net_root->name, state->shared_net_root->available, @@ -311,7 +310,7 @@ static int output_txt(struct conf_t *state) fprintf(outfile, "%7g %8.3f", state->shared_net_root->backups, oh.bup); } if (color_set) - fputs(COLOR_RESET, outfile); + fputs(color_tags[COLOR_RESET][state->output_format], outfile); fprintf(outfile, "\n"); } close_outfile(outfile); @@ -661,6 +660,28 @@ static void output_double(FILE *restrict f, char const *restrict type, double d) fprintf(f, "<%s>%g\n", type, d, type); } +/*! \brief Line with a potentially colored digit in html output format. + * + * \param state Runtime configuration state. + * \param f Output file descriptor. + * \param type HMTL tag name. + * \param d Actual payload of the printout. + */ +static void output_double_color(struct conf_t *state, + struct output_helper_t *oh, FILE *restrict f, + char const *restrict type) +{ + int color_set = 0; + + fprintf(f, "<%s>", type); + if (state->color_mode == color_on) + color_set = start_color(state, oh, f); + fprintf(f, "%g", oh->percent); + if (color_set) + fputs(color_tags[COLOR_RESET][state->output_format], f); + fprintf(f, "\n", type); +} + /*! \brief Line with float in html output format. * * \param f Output file descriptor. @@ -778,7 +799,7 @@ static int output_html(struct conf_t *state) output_line(outfile, "td", shared_p->name); output_double(outfile, "td", shared_p->available); output_double(outfile, "td", shared_p->used); - output_float(outfile, "td", oh.percent); + output_double_color(state, &oh, outfile, "td"); output_double(outfile, "td", shared_p->touched); output_double(outfile, "td", oh.tc); output_float(outfile, "td", oh.tcp); @@ -801,7 +822,7 @@ static int output_html(struct conf_t *state) output_line(outfile, "th", "last ip"); output_line(outfile, "th", "max"); output_line(outfile, "th", "cur"); - output_line(outfile, "th", "percent"); + output_double_color(state, &oh, outfile, "td"); output_line(outfile, "th", "touch"); output_line(outfile, "th", "t+c"); output_line(outfile, "th", "t+c perc"); @@ -829,7 +850,7 @@ static int output_html(struct conf_t *state) output_line(outfile, "td", ntop_ipaddr(&range_p->last_ip)); output_double(outfile, "td", oh.range_size); output_double(outfile, "td", range_p->count); - output_float(outfile, "td", oh.percent); + output_double_color(state, &oh, outfile, "td"); output_double(outfile, "td", range_p->touched); output_double(outfile, "td", oh.tc); output_float(outfile, "td", oh.tcp); @@ -1119,6 +1140,7 @@ int output_analysis(struct conf_t *state, const char output_format) switch (output_format) { case 't': + state->output_format = OUT_FORM_TEXT; ret = output_txt(state); break; case 'a': @@ -1128,6 +1150,7 @@ int output_analysis(struct conf_t *state, const char output_format) error(EXIT_FAILURE, 0, "html table only output format is deprecated"); break; case 'H': + state->output_format = OUT_FORM_HTML; ret = output_html(state); break; case 'x': From 242c58f45e7263c2771f3369a424c3443aa7793b Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 12 Nov 2017 23:14:23 +0000 Subject: [PATCH 088/158] output: display more entries in html table by default And add 'All' to 'Show number of entries' menu. Signed-off-by: Sami Kerola --- src/output.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/output.c b/src/output.c index 69689ec..6bdd4e5 100644 --- a/src/output.c +++ b/src/output.c @@ -612,8 +612,8 @@ static void html_footer(FILE *restrict f) fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); } From b2c764924bc22135322f7a6c241de8eb4ff5dff7 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 13 Nov 2017 09:51:40 +0000 Subject: [PATCH 089/158] output: shared net can be in suppressed state Avoid calling abort() when this very unlikely situation happens. Reference: 48962004b82d659893ecc2b552d28f355f8e3a2c Signed-off-by: Sami Kerola --- src/output.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/output.c b/src/output.c index 6bdd4e5..55853c9 100644 --- a/src/output.c +++ b/src/output.c @@ -1022,6 +1022,8 @@ static int output_alarming(struct conf_t *state) for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { shnet_output_helper(state, &oh, shared_p); switch (oh.status) { + case STATUS_SUPPRESSED: + break; case STATUS_IGNORED: si++; break; From 8ae5fbf489a60dd5b3c3f02c8529a34c15562a02 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 13 Nov 2017 10:10:20 +0000 Subject: [PATCH 090/158] output: improve html table Update DataTables and Bootstrap versions. Add free IP counts to table. Replace yellow as warning with magenta that is easier to read from white background. Use italic and bold to emphasis warning and critical. Remove strips. Use ascent percent sort by default. Signed-off-by: Sami Kerola --- TODO | 1 + src/output.c | 43 ++++++++++++++++++++++--------------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/TODO b/TODO index 7a7b5aa..a3fb5b3 100644 --- a/TODO +++ b/TODO @@ -19,6 +19,7 @@ o Add lease time histogram support. o Update gnulib o Update bootstrap +o Update DataTables, and bootstrap versions; see https://datatables.net/download/index o Update NEWS, webpages/index.html dateModified & version (remove old doxygen before uploading new). o Make annotated git tag diff --git a/src/output.c b/src/output.c index 55853c9..21d67f4 100644 --- a/src/output.c +++ b/src/output.c @@ -61,11 +61,11 @@ static const char *color_tags[][NUM_OF_OUT_FORMS] = { [STATUS_OK] = { "", "" }, - [STATUS_WARN] = { "\033[1;33m", "" }, - [STATUS_CRIT] = { "\033[1;31m", "" }, - [STATUS_IGNORED] = { "\033[1;32m", "" }, - [STATUS_SUPPRESSED] = { "\033[1;34m", "" }, - [COLOR_RESET] = { "\033[0m", "" } + [STATUS_WARN] = { "\033[1;33m", " style=\"color:magenta;font-style:italic\"" }, + [STATUS_CRIT] = { "\033[1;31m", " style=\"color:red;font-weight:bold\"" }, + [STATUS_IGNORED] = { "\033[1;32m", " style=\"color:green\"" }, + [STATUS_SUPPRESSED] = { "\033[1;34m", " style=\"color:blue\"" }, + [COLOR_RESET] = { "\033[0m", "" } }; @@ -586,8 +586,8 @@ static void html_header(struct conf_t *state, FILE *restrict f) fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); - fprintf(f, "\n"); - fprintf(f, ""); + fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); @@ -609,11 +609,10 @@ static void html_footer(FILE *restrict f) fprintf(f, "Generated using %s
\n", PACKAGE_STRING); fprintf(f, "More info at %s\n", PACKAGE_URL, PACKAGE_URL); fprintf(f, "
\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); } @@ -671,14 +670,10 @@ static void output_double_color(struct conf_t *state, struct output_helper_t *oh, FILE *restrict f, char const *restrict type) { - int color_set = 0; - - fprintf(f, "<%s>", type); + fprintf(f, "<%s", type); if (state->color_mode == color_on) - color_set = start_color(state, oh, f); - fprintf(f, "%g", oh->percent); - if (color_set) - fputs(color_tags[COLOR_RESET][state->output_format], f); + start_color(state, oh, f); + fprintf(f, ">%g", oh->percent); fprintf(f, "\n", type); } @@ -699,7 +694,7 @@ static void output_float(FILE *restrict f, char const *restrict type, float fl) */ static void table_start(FILE *restrict f, char const *restrict id, char const *restrict summary) { - fprintf(f, "\n", id, summary); + fprintf(f, "
\n", id, summary); } /*! \brief End table in html output format. @@ -741,6 +736,7 @@ static int output_html(struct conf_t *state) output_line(outfile, "th", "name"); output_line(outfile, "th", "max"); output_line(outfile, "th", "cur"); + output_line(outfile, "th", "free"); output_line(outfile, "th", "percent"); output_line(outfile, "th", "touch"); output_line(outfile, "th", "t+c"); @@ -759,6 +755,7 @@ static int output_html(struct conf_t *state) output_line(outfile, "td", state->shared_net_root->name); output_double(outfile, "td", state->shared_net_root->available); output_double(outfile, "td", state->shared_net_root->used); + output_double(outfile, "td", state->shared_net_root->available - state->shared_net_root->used); output_float(outfile, "td", oh.percent); output_double(outfile, "td", state->shared_net_root->touched); output_double(outfile, "td", oh.tc); @@ -779,6 +776,7 @@ static int output_html(struct conf_t *state) output_line(outfile, "th", "name"); output_line(outfile, "th", "max"); output_line(outfile, "th", "cur"); + output_line(outfile, "th", "free"); output_line(outfile, "th", "percent"); output_line(outfile, "th", "touch"); output_line(outfile, "th", "t+c"); @@ -799,6 +797,7 @@ static int output_html(struct conf_t *state) output_line(outfile, "td", shared_p->name); output_double(outfile, "td", shared_p->available); output_double(outfile, "td", shared_p->used); + output_double(outfile, "td", shared_p->available - shared_p->used); output_double_color(state, &oh, outfile, "td"); output_double(outfile, "td", shared_p->touched); output_double(outfile, "td", oh.tc); @@ -822,7 +821,8 @@ static int output_html(struct conf_t *state) output_line(outfile, "th", "last ip"); output_line(outfile, "th", "max"); output_line(outfile, "th", "cur"); - output_double_color(state, &oh, outfile, "td"); + output_line(outfile, "th", "free"); + output_line(outfile, "th", "percent"); output_line(outfile, "th", "touch"); output_line(outfile, "th", "t+c"); output_line(outfile, "th", "t+c perc"); @@ -850,6 +850,7 @@ static int output_html(struct conf_t *state) output_line(outfile, "td", ntop_ipaddr(&range_p->last_ip)); output_double(outfile, "td", oh.range_size); output_double(outfile, "td", range_p->count); + output_double(outfile, "td", oh.range_size - range_p->count); output_double_color(state, &oh, outfile, "td"); output_double(outfile, "td", range_p->touched); output_double(outfile, "td", oh.tc); From 88a3f1eb538e3cff2cc53402e34af13782c0c42a Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 13 Nov 2017 10:28:09 +0000 Subject: [PATCH 091/158] hash: include stdlib.h to avoid implicit declarations Reported-by: Frank Bulk Signed-off-by: Sami Kerola --- src/hash.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hash.c b/src/hash.c index 8bcdb30..77ecd79 100644 --- a/src/hash.c +++ b/src/hash.c @@ -40,6 +40,8 @@ #include +#include + #include "xalloc.h" #include "dhcpd-pools.h" @@ -127,7 +129,7 @@ void delete_all_leases(struct conf_t *state) #else void delete_all_leases(struct conf_t *state) { - while (leases) { + while (state->leases) { struct leases_t *l; l = state->leases; From 8fba5c5e6be1e490c68ad094ab5f06fe33854b24 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 13 Nov 2017 10:34:21 +0000 Subject: [PATCH 092/158] clean up: fix couple compiler warnings src/sort.c:255:5: warning: no previous prototype for 'merge' src/sort.c:290:2: warning: ISO C90 forbids mixed declarations and code src/mustach-dhcpd-pools.c:67:5: warning: no previous prototype for 'must_put_err' src/output.c:109:26: warning: comparing floating point with == or != is unsafe (x5) Signed-off-by: Sami Kerola --- configure.ac | 6 ++++++ src/Makemodule.am | 2 +- src/mustach-dhcpd-pools.c | 7 +++---- src/output.c | 29 ++++++++++++++--------------- src/sort.c | 7 +++---- 5 files changed, 27 insertions(+), 24 deletions(-) diff --git a/configure.ac b/configure.ac index 5b0ce95..92ff82c 100644 --- a/configure.ac +++ b/configure.ac @@ -74,6 +74,12 @@ AC_CHECK_FUNCS([\ ]) AC_CHECK_DECL([strndupa]) +AC_CHECK_FUNCS([fpclassify], [], + [AC_CHECK_LIB([m], [fpclassify], [MATH_LIBS="-lm"])] + [AC_CHECK_LIB([m], [__fpclassify], [MATH_LIBS="-lm"])] +) +AC_SUBST([MATH_LIBS]) + AS_IF([test "x$ac_cv_func_open_memstream" = "xyes" && test "x$ac_cv_have_decl_strndupa" == "xyes"], [ build_mustach=yes AC_DEFINE([BUILD_MUSTACH], [1], [build mustach support]) diff --git a/src/Makemodule.am b/src/Makemodule.am index c072af3..e1c75f5 100644 --- a/src/Makemodule.am +++ b/src/Makemodule.am @@ -4,7 +4,7 @@ bin_PROGRAMS = dhcpd-pools AC_PROG_RANLIB = resolv AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_builddir)/lib -dhcpd_pools_LDADD = $(top_builddir)/lib/libdhcpd_pools.la +dhcpd_pools_LDADD = $(top_builddir)/lib/libdhcpd_pools.la $(MATH_LIBS) dhcpd_pools_SOURCES = \ src/analyze.c \ diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 1019452..8fa1bec 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -64,10 +64,9 @@ static int must_enter(void *closure, const char *name); static int must_leave(void *closure); /* This can be called when template is invalid end put happens before enter. */ -int must_put_err(void *closure __attribute__ ((unused)), - const char *name __attribute__ ((unused)), - int escape __attribute__ ((unused)), - FILE *file __attribute__ ((unused))) +static int must_put_err(void *closure __attribute__ ((unused)), + const char *name __attribute__ ((unused)), + int escape __attribute__ ((unused)), FILE *file __attribute__ ((unused))) { return MUSTACH_ERROR_SYSTEM; } diff --git a/src/output.c b/src/output.c index 21d67f4..ebd841f 100644 --- a/src/output.c +++ b/src/output.c @@ -106,22 +106,21 @@ int shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, { /* counts and calculations */ oh->tc = shared_p->touched + shared_p->used; - if (shared_p->available == 0) { + if (fpclassify(shared_p->available) == FP_ZERO) { oh->percent = NAN; oh->tcp = NAN; oh->bup = NAN; - } else { - oh->percent = (double)(100 * shared_p->used) / shared_p->available; - oh->tcp = - (double)((100 * (shared_p->touched + shared_p->used)) / shared_p->available); - if (state->backups_found == 1) { - oh->bup = (double)(100 * shared_p->backups) / shared_p->available; - } - } - /* set status */ - if (oh->percent == NAN) oh->status = STATUS_SUPPRESSED; - else if (shared_p->available <= state->minsize) + return 0; + } + + oh->percent = (double)(100 * shared_p->used) / shared_p->available; + oh->tcp = (double)((100 * (shared_p->touched + shared_p->used)) / shared_p->available); + if (state->backups_found == 1) + oh->bup = (double)(100 * shared_p->backups) / shared_p->available; + + /* set status */ + if (shared_p->available <= state->minsize) oh->status = STATUS_IGNORED; else if (state->critical < oh->percent && shared_p->used < state->crit_count) oh->status = STATUS_CRIT; @@ -503,18 +502,18 @@ static int output_json(struct conf_t *state, const int print_mac_addreses) fprintf(outfile, "\"used\":%g, ", shared_p->used); fprintf(outfile, "\"touched\":%g, ", shared_p->touched); fprintf(outfile, "\"free\":%g, ", shared_p->available - shared_p->used); - if (shared_p->available == 0) + if (fpclassify(shared_p->available) == FP_ZERO) fprintf(outfile, "\"percent\":\"%g\", ", oh.percent); else fprintf(outfile, "\"percent\":%g, ", oh.percent); fprintf(outfile, "\"touch_count\":%g, ", oh.tc); - if (shared_p->available == 0) + if (fpclassify(shared_p->available) == FP_ZERO) fprintf(outfile, "\"touch_percent\":\"%g\", ", oh.tcp); else fprintf(outfile, "\"touch_percent\":%g, ", oh.tcp); if (state->backups_found == 1) { fprintf(outfile, "\"backup_count\":%g, ", shared_p->backups); - if (shared_p->available == 0) + if (fpclassify(shared_p->available) == FP_ZERO) fprintf(outfile, "\"backup_percent\":\"%g\", ", oh.bup); else fprintf(outfile, "\"backup_percent\":%g, ", oh.bup); diff --git a/src/sort.c b/src/sort.c index 5911a20..4fdb4e0 100644 --- a/src/sort.c +++ b/src/sort.c @@ -252,7 +252,7 @@ comparer_t field_selector(char c) * \param right The right side of the merge sort. * \return Relevant for merge sort decision. */ -int merge(struct conf_t *state, struct range_t *restrict left, struct range_t *restrict right) +static int merge(struct conf_t *state, struct range_t *restrict left, struct range_t *restrict right) { struct output_sort *p; int ret; @@ -282,13 +282,12 @@ void mergesort_ranges(struct conf_t *state, struct range_t *restrict orig, unsig unsigned int left, i, u_right; int s_right; struct range_t hold; + /* Merge sort split size */ + static const unsigned int MIN_MERGE_SIZE = 8; if (temp == NULL) temp = xmalloc(sizeof(struct range_t) * size); - /* Merge sort split size */ - static const unsigned int MIN_MERGE_SIZE = 8; - if (size < MIN_MERGE_SIZE) { for (left = 0; left < size; left++) { hold = *(orig + left); From eabaa8adc229a4e2cca2ae3954ebc7f16a79eb56 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 13 Nov 2017 11:45:56 +0000 Subject: [PATCH 093/158] thanks: add Troy D. Hanson to credits about uthash Signed-off-by: Sami Kerola --- THANKS | 1 + man/dhcpd-pools.1.in | 7 +++++-- src/other.c | 7 ++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/THANKS b/THANKS index 331a775..badafec 100644 --- a/THANKS +++ b/THANKS @@ -22,6 +22,7 @@ Adam Ciarcinski Rezso Gajdóczy Robert Viou Enno Gröper +Troy D. Hanson Ryan Malek Cheer Xiao Gilles Bouthenot diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index e0d50da..e6b1c86 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -289,14 +289,17 @@ ISC dhcpd lease file. .SH AUTHORS Original design by Sami Kerola. .br +uthash by Troy D. Hanson. +.br XML support by Dominic Germain, Sogetel inc. .br IPv6 support by Cheer Xiao. .br Mustache templating support by José Bollo. .SH LICENSE -The dhcpd-pools uses FreeBSD License, the mustache uses Apache License, and -the gnulib modules are Mostly, but not entirely, GPL. +The dhcpd-pools uses FreeBSD License, uthash uses BSD license, the mustache +uses Apache License, and the gnulib modules are mostly, but not entirely, +GPL. .SH "REPORTING BUGS" Report bugs to .MT @PACKAGE_BUGREPORT@ diff --git a/src/other.c b/src/other.c index 7660d65..3ffadc7 100644 --- a/src/other.c +++ b/src/other.c @@ -531,14 +531,19 @@ void clean_up(struct conf_t *state) /*! \brief A version printing. */ void __attribute__ ((__noreturn__)) print_version(void) { +#define stringify(s) #s +#define stringify_value(s) stringify(s) fprintf(stdout, "%s\n" "Original design and maintainer Sami Kerola.\n" + "uthash %s by Troy D. Hanson.\n" "XML support by Dominic Germain, Sogetel inc.\n" "IPv6 support by Cheer Xiao.\n" "Mustach templating support by Jose Bollo.\n" " The dhcpd-pools is FreeBSD Licensed,\n" + " uthash uses BSD license,\n" " gnulib parts are mostly GPL,\n" - " and mustache uses Apache License.\n", PACKAGE_STRING); + " and mustache uses Apache License.\n", PACKAGE_STRING, + stringify_value(UTHASH_VERSION)); exit(EXIT_SUCCESS); } From e4f7259cf6d561bd2fa9c3c4272c00dc37a4d3c8 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 13 Nov 2017 14:16:35 +0000 Subject: [PATCH 094/158] samples: add prometheus text file collector mustach template Because prometheus needs timestamp information add that to mustach, and update manual page what tags are available. Reference: https://prometheus.io/docs/instrumenting/exposition_formats/ Signed-off-by: Sami Kerola --- man/dhcpd-pools.1.in | 10 +++++++--- samples/Makemodule.am | 3 ++- samples/mustach.template | 6 ++++++ samples/prometheus.template | 30 ++++++++++++++++++++++++++++++ src/mustach-dhcpd-pools.c | 29 +++++++++++++++++++++++++++++ tests/mustach | 6 ++++-- 6 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 samples/prometheus.template diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index e6b1c86..753d6df 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -107,10 +107,11 @@ The default format is \fB\-\-mustach\fR=\fITEMPLATE\fR Output using mustach .I template -file. Mustache tags in the template are same as json output without IP -address information. When the native output formats controlled with +file. This is useful when the native output formats controlled with .B \-\-format -option do not provide what you need you should use mustach instead. +option do not provide what you need. See below example mustach template +that is using all available {{tags}} to demonstrate what can be displayed +and how. .IP @bindir@/dhcpd-pools --config @docdir@/dhcpd.conf --leases @docdir@/dhcpd.leases --mustach @docdir@/mustach.template @@ -286,6 +287,9 @@ ISC dhcpd configuration file. .TP @DHCPDLEASE_FILE@ ISC dhcpd lease file. +.TP +@docdir@/prometheus.template +Prometheus text file collector mustach template. .SH AUTHORS Original design by Sami Kerola. .br diff --git a/samples/Makemodule.am b/samples/Makemodule.am index 2d1bddd..054f001 100644 --- a/samples/Makemodule.am +++ b/samples/Makemodule.am @@ -1,4 +1,5 @@ dist_doc_DATA = \ samples/dhcpd.conf \ samples/dhcpd.leases \ - samples/mustach.template + samples/mustach.template \ + samples/prometheus.template diff --git a/samples/mustach.template b/samples/mustach.template index f8582c3..a569a15 100644 --- a/samples/mustach.template +++ b/samples/mustach.template @@ -13,6 +13,8 @@ Subnets:{{#subnets}} backup_count: {{backup_count}} backup_percent: {{backup_percent}} status: {{status}} + gettimeofday: {{gettimeofday}} + lease_file_mtime: {{lease_file_mtime}} {{/subnets}} Shared-networks:{{#shared-networks}} @@ -27,6 +29,8 @@ Shared-networks:{{#shared-networks}} backup_count: {{backup_count}} backup_percent: {{backup_percent}} status: {{status}} + gettimeofday: {{gettimeofday}} + lease_file_mtime: {{lease_file_mtime}} {{/shared-networks}} Summary:{{#summary}} @@ -41,4 +45,6 @@ Summary:{{#summary}} backup_count: {{backup_count}} backup_percent: {{backup_percent}} status: {{status}} + gettimeofday: {{gettimeofday}} + lease_file_mtime: {{lease_file_mtime}} {{/summary}} diff --git a/samples/prometheus.template b/samples/prometheus.template new file mode 100644 index 0000000..f8a5726 --- /dev/null +++ b/samples/prometheus.template @@ -0,0 +1,30 @@ +# This mustach template can be used as Prometheus text file. +# https://prometheus.io/ + +# HELP dhcpd_pools_ranges The range statistics. +# TYPE dhcpd_pools_ranges gauge +{{#subnets}}dhcpd_pools_ranges{range="{{first_ip}}",used="1"} {{used}} {{gettimeofday}}000 +dhcpd_pools_ranges{range="{{first_ip}}",touched="1"} {{touched}} {{gettimeofday}}000 +dhcpd_pools_ranges{range="{{first_ip}}",defined="1"} {{defined}} {{gettimeofday}}000 +dhcpd_pools_ranges{range="{{first_ip}}",free="1"} {{free}} {{gettimeofday}}000 +dhcpd_pools_ranges{range="{{first_ip}}",touch_count="1"} {{touch_count}} {{gettimeofday}}000 +dhcpd_pools_ranges{range="{{first_ip}}",status="1"} {{status}} {{gettimeofday}}000 +{{/subnets}} +# HELP dhcpd_pools_shared_nets The shared networks statistics. +# TYPE dhcpd_pools_shared_nets gauge +{{#shared-networks}}dhcpd_pools_shared_nets{location="{{location}}",defined="1"} {{defined}} {{gettimeofday}}000 +dhcpd_pools_shared_nets{location="{{location}}",used="1"} {{used}} {{gettimeofday}}000 +dhcpd_pools_shared_nets{location="{{location}}",touched="1"} {{touched}} {{gettimeofday}}000 +dhcpd_pools_shared_nets{location="{{location}}",free="1"} {{free}} {{gettimeofday}}000 +dhcpd_pools_shared_nets{location="{{location}}",touch_count="1"} {{touch_count}} {{gettimeofday}}000 +dhcpd_pools_shared_nets{location="{{location}}",status="1"} {{status}} {{gettimeofday}}000 +{{/shared-networks}} +# HELP dhcpd_pools_summary Statistics of the all networks. +# TYPE dhcpd_pools_summary gauge +{{#summary}}dhcpd_pools_summary{location="{{location}}",defined="1"} {{defined}} {{gettimeofday}}000 +dhcpd_pools_summary{location="{{location}}",used="1"} {{used}} {{gettimeofday}}000 +dhcpd_pools_summary{location="{{location}}",touched="1"} {{touched}} {{gettimeofday}}000 +dhcpd_pools_summary{location="{{location}}",free="1"} {{free}} {{gettimeofday}}000 +dhcpd_pools_summary{location="{{location}}",touch_count="1"} {{touch_count}} {{gettimeofday}}000 +dhcpd_pools_summary{location="{{location}}",status="1"} {{status}} {{gettimeofday}}000 +{{/summary}} diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 8fa1bec..652db0a 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -44,6 +44,7 @@ #include #include #include +#include #include #include "close-stream.h" @@ -144,6 +145,20 @@ static int must_put_range(void *closure, const char *name, int escape fprintf(file, "%d", e->oh.status); return 0; } + if (!strcmp(name, "gettimeofday")) { + struct timeval tp; + + gettimeofday(&tp, NULL); + fprintf(file, "%ld", tp.tv_sec); + return 0; + } + if (!strcmp(name, "lease_file_mtime")) { + struct stat st; + + stat(e->state->dhcpdlease_file, &st); + fprintf(file, "%ld", st.st_mtime); + return 0; + } return 0; } @@ -198,6 +213,20 @@ static int must_put_shnet(void *closure, const char *name, int escape fprintf(file, "%d", e->oh.status); return 0; } + if (!strcmp(name, "gettimeofday")) { + struct timeval tp; + + gettimeofday(&tp, NULL); + fprintf(file, "%ld", tp.tv_sec); + return 0; + } + if (!strcmp(name, "lease_file_mtime")) { + struct stat st; + + stat(e->state->dhcpdlease_file, &st); + fprintf(file, "%ld", st.st_mtime); + return 0; + } return 0; } diff --git a/tests/mustach b/tests/mustach index 4a282c6..af53900 100755 --- a/tests/mustach +++ b/tests/mustach @@ -9,11 +9,13 @@ if [ ! -d tests/outputs ]; then fi dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ - --mustach $top_srcdir/samples/mustach.template -o tests/outputs/$IAM + --mustach $top_srcdir/samples/mustach.template | + sed '/gettimeofday:/d; /lease_file_mtime:/d' >| tests/outputs/$IAM echo "--- skip ok ---" >> tests/outputs/$IAM dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ - --mustach $top_srcdir/samples/mustach.template --skip-ok --warning 44 >> tests/outputs/$IAM + --mustach $top_srcdir/samples/mustach.template --skip-ok --warning 44 | + sed '/gettimeofday:/d; /lease_file_mtime:/d' >> tests/outputs/$IAM diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM exit $? From 3369278fc02ff8765824e08fb3eb68dc544bdb2f Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 13 Nov 2017 20:23:12 +0000 Subject: [PATCH 095/158] output: make --skip to take arguments what will be skipped Accidental typo in usage() caused realisation making skipping to fully controllable is good idea. Signed-off-by: Sami Kerola --- man/dhcpd-pools.1.in | 17 +++++++--- src/dhcpd-pools.c | 51 +++++++++++++++++++++++++--- src/dhcpd-pools.h | 4 +++ src/other.c | 9 ++--- src/output.c | 34 ++++++++++++++----- tests/Makemodule.am | 1 + tests/expected/skip | 80 ++++++++++++++++++++++++++++++++++++++++++++ tests/mustach | 2 +- tests/skip | 41 +++++++++++++++++++++++ 9 files changed, 216 insertions(+), 23 deletions(-) create mode 100644 tests/expected/skip create mode 100755 tests/skip diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 753d6df..b56e883 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -156,7 +156,8 @@ printed. .TP \fB\-\-color\fR=\fIwhen\fR Use yellow for warning, red for critical, green for suppressed by \-\-minsize -and blue when \-\-snet\-alarms is the cause of supression. The +and blue when \-\-snet\-alarms is the cause of supression or shared network +does not have any ranges. The .I when string can be .BR always , @@ -172,11 +173,17 @@ coloring thresholds can be changed, but one must also use .B \-\-format=text to avoid turning on alarting mode. .TP -\fB\-\-skip\-ok -Do not print ranges that are within thresholds of -.B \-\-warning +\fB\-\-skip\fR=\fIwhen\fR +The +.I when +can be one of the following: +.IR ok , +.IR warning , +.IR critical , +.IR minsize , or -.BR \-\-critical . +.IR suppressed . +The skipping criterias are exact match with colors in \-\-color option. .TP \fB\-\-warning\fR=\fIpercent\fR Turn on alarm output format, and specify percentage number which will diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 681ec55..64c853f 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -85,6 +85,49 @@ static void prepare_memory(struct conf_t *state) state->shared_net_head = state->shared_net_root; } +/*! \brief The --skip option argument parser. */ +static void skip_arg_parse(struct conf_t *state, char *optarg) +{ + enum { + OPT_ARG_OK = 0, + OPT_ARG_WARNING, + OPT_ARG_CRITICAL, + OPT_ARG_MINSIZE, + OPT_ARG_SUPRESSED + }; + char *const tokens[] = { + [OPT_ARG_OK] = "ok", + [OPT_ARG_WARNING] = "warning", + [OPT_ARG_CRITICAL] = "critical", + [OPT_ARG_MINSIZE] = "minsize", + [OPT_ARG_SUPRESSED] = "suppressed", + NULL + }; + char *value; + + while (*optarg != '\0') { + switch(getsubopt(&optarg, tokens, &value)) { + case OPT_ARG_OK: + state->skip_ok = 1; + break; + case OPT_ARG_WARNING: + state->skip_warning = 1; + break; + case OPT_ARG_CRITICAL: + state->skip_critical = 1; + break; + case OPT_ARG_MINSIZE: + state->skip_minsize = 1; + break; + case OPT_ARG_SUPRESSED: + state->skip_suppressed = 1; + break; + default: + error(EXIT_FAILURE, 0, "unknown --skip specifier: %s", value); + } + } +} + /*! \brief Start of execution. Parse options, and call other other * functions one after another. At the moment adding threading support * would be difficult, but there does not seem to be valid reason to @@ -120,7 +163,7 @@ int main(int argc, char **argv) OPT_WARN_COUNT, OPT_CRIT_COUNT, OPT_COLOR, - OPT_SKIP_OK, + OPT_SKIP, OPT_SET_IPV, OPT_MUSTACH }; @@ -130,7 +173,7 @@ int main(int argc, char **argv) {"config", required_argument, NULL, 'c'}, {"leases", required_argument, NULL, 'l'}, {"color", required_argument, NULL, OPT_COLOR}, - {"skip-ok", no_argument, NULL, OPT_SKIP_OK}, + {"skip", required_argument, NULL, OPT_SKIP}, {"format", required_argument, NULL, 'f'}, {"sort", required_argument, NULL, 's'}, {"reverse", no_argument, NULL, 'r'}, @@ -223,8 +266,8 @@ int main(int argc, char **argv) if (state.color_mode == color_unknown) error(EXIT_FAILURE, errno, "unknown color mode: %s", quote(optarg)); break; - case OPT_SKIP_OK: - state.skip_ok = 1; + case OPT_SKIP: + skip_arg_parse(&state, optarg); break; case OPT_SNET_ALARMS: state.snet_alarms = 1; diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 258649a..183d3ae 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -267,6 +267,10 @@ struct conf_t { header_limit:4, number_limit:3, skip_ok:1, + skip_warning:1, + skip_critical:1, + skip_minsize:1, + skip_suppressed:1, color_mode:2; }; diff --git a/src/other.c b/src/other.c index 3ffadc7..8ebe627 100644 --- a/src/other.c +++ b/src/other.c @@ -567,7 +567,7 @@ void __attribute__ ((__noreturn__)) usage(int status) fputs( " J for json with active lease details\n", out); fputs( " c for comma separated values\n", out); #ifdef BUILD_MUSTACH - fputs( " --mustach=tmpl output using mustach template file\n", out); + fputs( " --mustach=FILE output using mustach template file\n", out); #endif fputs( " -s, --sort=[nimcptTe] sort ranges by\n", out); fputs( " n name\n", out); @@ -582,9 +582,10 @@ void __attribute__ ((__noreturn__)) usage(int status) fputs( " -o, --output=FILE output into a file\n", out); fputs( " -L, --limit=NR output limit mask 77 - 00\n", out); fputs( " --color=WHEN use colors 'always', 'never', or 'auto'\n", out); - fputs( " --skip=ok do not print items below alarm threshold\n", out); - fputs( " --warning=PERC set warning alarming limit\n", out); - fputs( " --critical=PERC set critical alarming limit\n", out); + fputs( " --warning=PERC set warning alarming threshold\n", out); + fputs( " --critical=PERC set critical alarming threshold\n", out); + fputs( " --skip=WHAT do not print threshold 'ok', 'warning', 'critical',\n", out); + fputs( " 'minsize', or 'ignored'\n", out); fputs( " --warn-count=NR a number of free leases before warning raised\n", out); fputs( " --crit-count=NR a number of free leases before critical raised\n", out); fputs( " --minsize=size disable alarms for small ranges and shared-nets\n", out); diff --git a/src/output.c b/src/output.c index ebd841f..e60aa97 100644 --- a/src/output.c +++ b/src/output.c @@ -90,12 +90,19 @@ int range_output_helper(struct conf_t *state, struct output_helper_t *oh, && (oh->range_size - range_p->count) < state->warn_count) oh->status = STATUS_WARN; if (oh->status != STATUS_OK) { - if (oh->range_size <= state->minsize) + if (oh->range_size <= state->minsize) { oh->status = STATUS_IGNORED; - else if (state->snet_alarms && range_p->shared_net != state->shared_net_root) + if (state->skip_minsize) + return 1; + } else if (state->snet_alarms && range_p->shared_net != state->shared_net_root) { oh->status = STATUS_SUPPRESSED; + if (state->skip_suppressed) + return 1; + } } - if (state->skip_ok && oh->status == STATUS_OK) + if ((state->skip_ok && oh->status == STATUS_OK) || + (state->skip_warning && oh->status == STATUS_WARN) || + (state->skip_critical && oh->status == STATUS_CRIT)) return 1; return 0; } @@ -111,6 +118,8 @@ int shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, oh->tcp = NAN; oh->bup = NAN; oh->status = STATUS_SUPPRESSED; + if (state->skip_suppressed) + return 1; return 0; } @@ -120,16 +129,23 @@ int shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, oh->bup = (double)(100 * shared_p->backups) / shared_p->available; /* set status */ - if (shared_p->available <= state->minsize) + if (shared_p->available <= state->minsize) { oh->status = STATUS_IGNORED; - else if (state->critical < oh->percent && shared_p->used < state->crit_count) + if (state->skip_minsize) + return 1; + } else if (state->critical < oh->percent && shared_p->used < state->crit_count) { oh->status = STATUS_CRIT; - else if (state->warning < oh->percent && shared_p->used < state->warn_count) + if (state->skip_critical) + return 1; + } else if (state->warning < oh->percent && shared_p->used < state->warn_count) { oh->status = STATUS_WARN; - else + if (state->skip_warning) + return 1; + } else { oh->status = STATUS_OK; - if (state->skip_ok && oh->status == STATUS_OK) - return 1; + if (state->skip_ok) + return 1; + } return 0; } diff --git a/tests/Makemodule.am b/tests/Makemodule.am index 4256ae1..1372324 100644 --- a/tests/Makemodule.am +++ b/tests/Makemodule.am @@ -24,6 +24,7 @@ TESTS = \ tests/range6 \ tests/same-twice \ tests/simple \ + tests/skip \ tests/sorts \ tests/v6 \ tests/v6-perfdata diff --git a/tests/expected/skip b/tests/expected/skip new file mode 100644 index 0000000..4553da8 --- /dev/null +++ b/tests/expected/skip @@ -0,0 +1,80 @@ +--- skip ok --- +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc bu bu perc +example1 10.0.0.1 - 10.0.0.20 20 11 55.000 0 11 55.000 1 5.000 +example1 10.1.0.1 - 10.1.0.20 20 10 50.000 0 10 50.000 0 0.000 +example2 10.3.0.1 - 10.3.0.20 20 9 45.000 0 9 45.000 0 0.000 + +Shared networks: +name max cur percent touch t+c t+c perc bu bu perc +example1 40 21 52.500 0 21 52.500 1 2.500 + +Sum of all ranges: +name max cur percent touch t+c t+c perc bu bu perc +All networks 100 43 43.000 0 43 43.000 2 2.000 +--- skip warning --- +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc bu bu perc +example1 10.0.0.1 - 10.0.0.20 20 11 55.000 0 11 55.000 1 5.000 +example2 10.2.0.1 - 10.2.0.20 20 8 40.000 0 8 40.000 0 0.000 +All networks 10.4.0.1 - 10.4.0.20 20 5 25.000 0 5 25.000 1 5.000 + +Shared networks: +name max cur percent touch t+c t+c perc bu bu perc +example1 40 21 52.500 0 21 52.500 1 2.500 +example2 40 17 42.500 0 17 42.500 0 0.000 + +Sum of all ranges: +name max cur percent touch t+c t+c perc bu bu perc +All networks 100 43 43.000 0 43 43.000 2 2.000 +--- skip critical ok --- +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc bu bu perc +example1 10.1.0.1 - 10.1.0.20 20 10 50.000 0 10 50.000 0 0.000 +example2 10.3.0.1 - 10.3.0.20 20 9 45.000 0 9 45.000 0 0.000 + +Shared networks: +name max cur percent touch t+c t+c perc bu bu perc + +Sum of all ranges: +name max cur percent touch t+c t+c perc bu bu perc +All networks 100 43 43.000 0 43 43.000 2 2.000 +--- skip suppressed --- +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc bu bu perc +All networks 10.4.0.1 - 10.4.0.20 20 5 25.000 0 5 25.000 1 5.000 + +Shared networks: +name max cur percent touch t+c t+c perc bu bu perc +example1 40 21 52.500 0 21 52.500 1 2.500 +example2 40 17 42.500 0 17 42.500 0 0.000 + +Sum of all ranges: +name max cur percent touch t+c t+c perc bu bu perc +All networks 100 43 43.000 0 43 43.000 2 2.000 +--- skip minsize --- +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc bu bu perc + +Shared networks: +name max cur percent touch t+c t+c perc bu bu perc +example1 40 21 52.500 0 21 52.500 1 2.500 +example2 40 17 42.500 0 17 42.500 0 0.000 + +Sum of all ranges: +name max cur percent touch t+c t+c perc bu bu perc +All networks 100 43 43.000 0 43 43.000 2 2.000 +--- skip count ok --- +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc bu bu perc +example1 10.0.0.1 - 10.0.0.20 20 11 55.000 0 11 55.000 1 5.000 +example1 10.1.0.1 - 10.1.0.20 20 10 50.000 0 10 50.000 0 0.000 +example2 10.2.0.1 - 10.2.0.20 20 8 40.000 0 8 40.000 0 0.000 +example2 10.3.0.1 - 10.3.0.20 20 9 45.000 0 9 45.000 0 0.000 + +Shared networks: +name max cur percent touch t+c t+c perc bu bu perc + +Sum of all ranges: +name max cur percent touch t+c t+c perc bu bu perc +All networks 100 43 43.000 0 43 43.000 2 2.000 diff --git a/tests/mustach b/tests/mustach index af53900..f99ef81 100755 --- a/tests/mustach +++ b/tests/mustach @@ -14,7 +14,7 @@ dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.lease echo "--- skip ok ---" >> tests/outputs/$IAM dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ - --mustach $top_srcdir/samples/mustach.template --skip-ok --warning 44 | + --mustach $top_srcdir/samples/mustach.template --skip=ok --warning 44 | sed '/gettimeofday:/d; /lease_file_mtime:/d' >> tests/outputs/$IAM diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM diff --git a/tests/skip b/tests/skip new file mode 100755 index 0000000..7578cf9 --- /dev/null +++ b/tests/skip @@ -0,0 +1,41 @@ +#!/bin/sh +# +# --skip option tests + +IAM=$(basename $0) + +if [ ! -d tests/outputs ]; then + mkdir tests/outputs +fi + +echo "--- skip ok ---" >| tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ + --color=always -ft --skip=ok --warning 44 >> tests/outputs/$IAM + +echo "--- skip warning ---" >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ + --color=always --format text --skip=warning --warning 44 --critical=50 \ + >> tests/outputs/$IAM + +echo "--- skip critical ok ---" >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ + --color=always --format text --skip=ok,critical --warning 44 --critical=50 \ + >> tests/outputs/$IAM + +echo "--- skip suppressed ---" >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ + --color=always --format text --critical 1 --snet-alarms --skip=suppressed \ + >> tests/outputs/$IAM + +echo "--- skip minsize ---" >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ + --color=always --format text --critical=1 --minsize 20 --skip=minsize \ + >> tests/outputs/$IAM + +echo "--- skip count ok ---" >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ + --color=always --format=t --skip=ok --critical=1 --crit-count=12 --warning=1 \ + --warn-count=15 >> tests/outputs/$IAM + +diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM +exit $? From 74b697321f8df1aaafb3bb62a1d914a217f20f9e Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 13 Nov 2017 21:12:50 +0000 Subject: [PATCH 096/158] misc: move command line option parsing to separate function Earlier main() had lots of temporary variables related to command line parsing. By moving these to separate function runtime can forget these variables when moving on. If nothing else this makes running gdb nicer when debugging crashes, but as said stack memory should also be spared for better purpose. Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 135 +++++++++++++++++++++++----------------------- 1 file changed, 69 insertions(+), 66 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 64c853f..7934cdc 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -95,6 +95,7 @@ static void skip_arg_parse(struct conf_t *state, char *optarg) OPT_ARG_MINSIZE, OPT_ARG_SUPRESSED }; + char *const tokens[] = { [OPT_ARG_OK] = "ok", [OPT_ARG_WARNING] = "warning", @@ -106,7 +107,7 @@ static void skip_arg_parse(struct conf_t *state, char *optarg) char *value; while (*optarg != '\0') { - switch(getsubopt(&optarg, tokens, &value)) { + switch (getsubopt(&optarg, tokens, &value)) { case OPT_ARG_OK: state->skip_ok = 1; break; @@ -128,33 +129,9 @@ static void skip_arg_parse(struct conf_t *state, char *optarg) } } -/*! \brief Start of execution. Parse options, and call other other - * functions one after another. At the moment adding threading support - * would be difficult, but there does not seem to be valid reason to - * consider that. Overall the analysis already quick enough even without - * making it parallel. - * - * \return Return value indicates success or fail or analysis, unless - * either --warning or --critical options are in use, which makes the - * return value in some cases to match with Nagios expectations about - * alarming. */ -int main(int argc, char **argv) +/*! \brief Command options parser. */ +static char parse_command_line_opts(struct conf_t *state, int argc, char **argv) { - struct conf_t state = { - .warning = ALARM_WARN, - .critical = ALARM_CRIT, - .warn_count = 0x100000000, /* == 2^32 that is the entire IPv4 space */ - .crit_count = 0x100000000, /* basically turns off the count criteria */ - .header_limit = 8, - .color_mode = color_auto, - .ranges_size = 64, - .ip_version = IPvUNKNOWN, - 0 - }; - - int option_index = 0; - char output_format = '\0'; - int alarming = 0; enum { OPT_SNET_ALARMS = CHAR_MAX + 1, OPT_WARN, @@ -167,7 +144,6 @@ int main(int argc, char **argv) OPT_SET_IPV, OPT_MUSTACH }; - int ret_val; static struct option const long_options[] = { {"config", required_argument, NULL, 'c'}, @@ -193,27 +169,23 @@ int main(int argc, char **argv) {"ip-version", required_argument, NULL, OPT_SET_IPV}, {NULL, 0, NULL, 0} }; + char output_format = '\0'; + int alarming = 0; - atexit(close_stdout); - set_program_name(argv[0]); - - prepare_memory(&state); - set_ipv_functions(&state, IPvUNKNOWN); - /* Parse command line options */ while (1) { int c; - c = getopt_long(argc, argv, "c:l:f:o:s:rL:pAvh", long_options, &option_index); + c = getopt_long(argc, argv, "c:l:f:o:s:rL:pAvh", long_options, NULL); if (c == EOF) break; switch (c) { case 'c': /* config file */ - state.dhcpdconf_file = optarg; + state->dhcpdconf_file = optarg; break; case 'l': /* lease file */ - state.dhcpdlease_file = optarg; + state->dhcpdlease_file = optarg; break; case 'f': /* Output format */ @@ -222,16 +194,16 @@ int main(int argc, char **argv) case 's': { /* Output sorting option */ - struct output_sort *p = state.sorts; + struct output_sort *p = state->sorts; size_t len; while (p && p->next) p = p->next; for (len = 0; len < strlen(optarg); len++) { - if (state.sorts == NULL) { - state.sorts = + if (state->sorts == NULL) { + state->sorts = xcalloc(1, sizeof(struct output_sort)); - p = state.sorts; + p = state->sorts; } else { p->next = xcalloc(1, sizeof(struct output_sort)); p = p->next; @@ -242,62 +214,62 @@ int main(int argc, char **argv) break; case 'r': /* What ever sort in reverse order */ - state.reverse_order = 1; + state->reverse_order = 1; break; case 'o': /* Output file */ - state.output_file = optarg; + state->output_file = optarg; break; case 'L': /* Specification what will be printed */ - state.header_limit = return_limit(optarg[0]); - state.number_limit = return_limit(optarg[1]); + state->header_limit = return_limit(optarg[0]); + state->number_limit = return_limit(optarg[1]); break; case OPT_MUSTACH: #ifdef BUILD_MUSTACH - state.mustach_template = optarg; + state->mustach_template = optarg; output_format = 'm'; #else error(EXIT_FAILURE, 0, "compiled without mustach support"); #endif break; case OPT_COLOR: - state.color_mode = parse_color_mode(optarg); - if (state.color_mode == color_unknown) + state->color_mode = parse_color_mode(optarg); + if (state->color_mode == color_unknown) error(EXIT_FAILURE, errno, "unknown color mode: %s", quote(optarg)); break; case OPT_SKIP: - skip_arg_parse(&state, optarg); + skip_arg_parse(state, optarg); break; case OPT_SNET_ALARMS: - state.snet_alarms = 1; + state->snet_alarms = 1; break; case OPT_WARN: alarming = 1; - state.warning = strtod_or_err(optarg, "illegal argument"); + state->warning = strtod_or_err(optarg, "illegal argument"); break; case OPT_CRIT: alarming = 1; - state.critical = strtod_or_err(optarg, "illegal argument"); + state->critical = strtod_or_err(optarg, "illegal argument"); break; case OPT_WARN_COUNT: alarming = 1; - state.warn_count = strtod_or_err(optarg, "illegal argument"); + state->warn_count = strtod_or_err(optarg, "illegal argument"); break; case OPT_CRIT_COUNT: alarming = 1; - state.crit_count = strtod_or_err(optarg, "illegal argument"); + state->crit_count = strtod_or_err(optarg, "illegal argument"); break; case OPT_MINSIZE: - state.minsize = strtod_or_err(optarg, "illegal argument"); + state->minsize = strtod_or_err(optarg, "illegal argument"); break; case OPT_SET_IPV: switch (optarg[0]) { case '4': - set_ipv_functions(&state, IPv4); + set_ipv_functions(state, IPv4); break; case '6': - set_ipv_functions(&state, IPv6); + set_ipv_functions(state, IPv6); break; default: error(EXIT_FAILURE, 0, "unknown --ip-version argument: %s", optarg); @@ -305,11 +277,11 @@ int main(int argc, char **argv) break; case 'p': /* Print additional performance data in alarming mode */ - state.perfdata = 1; + state->perfdata = 1; break; case 'A': /* Treat single networks as shared with network CIDR as name */ - state.all_as_shared = 1; + state->all_as_shared = 1; break; case 'v': /* Print version */ @@ -323,17 +295,17 @@ int main(int argc, char **argv) } /* Use default dhcpd.conf when user did not define anything. */ - if (state.dhcpdconf_file == NULL) - state.dhcpdconf_file = DHCPDCONF_FILE; + if (state->dhcpdconf_file == NULL) + state->dhcpdconf_file = DHCPDCONF_FILE; /* Use default dhcpd.leases when user did not define anything. */ - if (state.dhcpdlease_file == NULL) - state.dhcpdlease_file = DHCPDLEASE_FILE; + if (state->dhcpdlease_file == NULL) + state->dhcpdlease_file = DHCPDLEASE_FILE; /* Use default limits when user did not define anything. */ - if (state.header_limit == 8) { + if (state->header_limit == 8) { char const *default_limit = OUTPUT_LIMIT; - state.header_limit = return_limit(default_limit[0]); - state.number_limit = return_limit(default_limit[1]); + state->header_limit = return_limit(default_limit[0]); + state->number_limit = return_limit(default_limit[1]); } /* Output format is not defined, if alarm thresholds are then it's alarming, else use the * default. */ @@ -346,6 +318,37 @@ int main(int argc, char **argv) output_format = default_format[0]; } } + return output_format; +} + +/*!\brief Start of execution. This will mostly call other functions one + * after another. + * + * \return Return value indicates success or fail or analysis, unless + * either --warning or --critical options are in use, which makes the + * return value in some cases to match with Nagios expectations about + * alarming. */ +int main(int argc, char **argv) +{ + struct conf_t state = { + .warning = ALARM_WARN, + .critical = ALARM_CRIT, + .warn_count = 0x100000000, /* == 2^32 that is the entire IPv4 space */ + .crit_count = 0x100000000, /* basically turns off the count criteria */ + .header_limit = 8, + .color_mode = color_auto, + .ranges_size = 64, + .ip_version = IPvUNKNOWN, + 0 + }; + char output_format; + int ret_val; + + atexit(close_stdout); + set_program_name(argv[0]); + prepare_memory(&state); + set_ipv_functions(&state, IPvUNKNOWN); + output_format = parse_command_line_opts(&state, argc, argv); /* Do the job */ parse_config(&state, 1, state.dhcpdconf_file, state.shared_net_root); From 887845df2aba13fc3fb2a8f391b2d8b8939497eb Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 13 Nov 2017 21:43:37 +0000 Subject: [PATCH 097/158] misc: move couple enums from global scope to file scope Signed-off-by: Sami Kerola --- src/dhcpd-pools.h | 43 ------------------------------------------- src/getdata.c | 21 +++++++++++++++++++++ src/output.c | 24 ++++++++++++++++++++++-- 3 files changed, 43 insertions(+), 45 deletions(-) diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 183d3ae..879e5a1 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -75,14 +75,6 @@ union ipaddr_t { unsigned char v6[16]; }; -/*! \enum dhcpd_magic_numbers - * \brief MAXLEN is maximum expected line length in dhcpd.conf and - * dhcpd.leases. - */ -enum dhcpd_magic_numbers { - MAXLEN = 1024 -}; - /*! \enum dhcp_version * \brief The IP version, IPv4 or IPv6, served by the dhcpd. */ @@ -108,28 +100,6 @@ enum prefix_t { NUM_OF_PREFIX }; -/*! \enum output_formats - * \brief Enumeration of output formats. Keep the text and html first, they - * are used color array selector. - */ -enum output_formats { - OUT_FORM_TEXT, - OUT_FORM_HTML, - NUM_OF_OUT_FORMS -}; - -/*! \enum count_status_t - * \brief Enumeration of possible range and shared net statuses. - */ -enum count_status_t { - STATUS_OK, - STATUS_WARN, - STATUS_CRIT, - STATUS_IGNORED, - STATUS_SUPPRESSED, - COLOR_RESET -}; - enum color_mode { color_unknown, color_off, @@ -174,19 +144,6 @@ struct output_helper_t { double bup; }; -/*! \enum isc_conf_parser - * \brief Configuration file parsing state flags. - */ -enum isc_conf_parser { - ITS_NOTHING_INTERESTING, - ITS_A_RANGE_FIRST_IP, - ITS_A_RANGE_SECOND_IP, - ITS_A_SHAREDNET, - ITS_AN_INCLUDE, - ITS_A_SUBNET, - ITS_A_NETMASK -}; - /*! \enum ltype * \brief Lease state types. */ diff --git a/src/getdata.c b/src/getdata.c index d7b9bb2..850f48e 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -55,6 +55,27 @@ #include "dhcpd-pools.h" +/*! \enum dhcpd_magic_numbers + * \brief MAXLEN is maximum expected line length in dhcpd.conf and + * dhcpd.leases. + */ +enum dhcpd_magic_numbers { + MAXLEN = 1024 +}; + +/*! \enum isc_conf_parser + * \brief Configuration file parsing state flags. + */ +enum isc_conf_parser { + ITS_NOTHING_INTERESTING, + ITS_A_RANGE_FIRST_IP, + ITS_A_RANGE_SECOND_IP, + ITS_A_SHAREDNET, + ITS_AN_INCLUDE, + ITS_A_SUBNET, + ITS_A_NETMASK +}; + /*! \brief Lease file parser. The parser can only read ISC DHCPD * dhcpd.leases file format. */ int parse_leases(struct conf_t *state, const int print_mac_addreses) diff --git a/src/output.c b/src/output.c index e60aa97..9052854 100644 --- a/src/output.c +++ b/src/output.c @@ -59,6 +59,28 @@ #include "dhcpd-pools.h" +/*! \enum colored_formats + * \brief Enumeration of output formats. Keep the text and html first, they + * are used color array selector. + */ +enum colored_formats { + OUT_FORM_TEXT, + OUT_FORM_HTML, + NUM_OF_OUT_FORMS +}; + +/*! \enum count_status_t + * \brief Enumeration of possible range and shared net statuses. + */ +enum count_status_t { + STATUS_OK, + STATUS_WARN, + STATUS_CRIT, + STATUS_IGNORED, + STATUS_SUPPRESSED, + COLOR_RESET +}; + static const char *color_tags[][NUM_OF_OUT_FORMS] = { [STATUS_OK] = { "", "" }, [STATUS_WARN] = { "\033[1;33m", " style=\"color:magenta;font-style:italic\"" }, @@ -68,8 +90,6 @@ static const char *color_tags[][NUM_OF_OUT_FORMS] = { [COLOR_RESET] = { "\033[0m", "" } }; - - /*! \brief Calculate range percentages and such. */ int range_output_helper(struct conf_t *state, struct output_helper_t *oh, struct range_t *range_p) From c687f38ed631df8c9c4df52303aa13dfc325a624 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 13 Nov 2017 23:27:12 +0000 Subject: [PATCH 098/158] docs: improve doxygen documentation Signed-off-by: Sami Kerola --- src/analyze.c | 9 ++-- src/dhcpd-pools.c | 5 +- src/dhcpd-pools.h | 96 +++++++++++++++++++++------------------ src/getdata.c | 7 +-- src/mustach-dhcpd-pools.c | 21 +++++++-- src/other.c | 16 +++++++ src/output.c | 15 +++++- 7 files changed, 111 insertions(+), 58 deletions(-) diff --git a/src/analyze.c b/src/analyze.c index fb1084e..7d7ac72 100644 --- a/src/analyze.c +++ b/src/analyze.c @@ -55,7 +55,8 @@ void prepare_data(struct conf_t *state) qsort(state->ranges, state->num_ranges, sizeof(struct range_t), &rangecomp); } -/*! \brief Perform counting. Join leases with ranges, and update counters. */ +/*!\brief Perform counting. Join leases with ranges, and update range and + * shared network counters. */ void do_counting(struct conf_t *state) { struct range_t *restrict range_p = state->ranges; @@ -64,13 +65,13 @@ void do_counting(struct conf_t *state) double block_size; /* Walk through ranges */ - for (i = 0; i < state->num_ranges; i++) { + for (i = 0; i < state->num_ranges; i++, range_p++) { while (l != NULL && ipcomp(&range_p->first_ip, &l->ip) < 0) l = l->hh.prev; /* rewind */ if (l == NULL) l = state->leases; for (; l != NULL && ipcomp(&l->ip, &range_p->last_ip) <= 0; l = l->hh.next) { - if (ipcomp(&l->ip, &range_p->first_ip) < 0) + if (unlikely(ipcomp(&l->ip, &range_p->first_ip) < 0)) continue; /* cannot happen? */ /* IP in range */ switch (l->type) { @@ -99,7 +100,5 @@ void do_counting(struct conf_t *state) state->shared_net_root->touched += range_p->touched; state->shared_net_root->backups += range_p->backups; } - /* Next range. */ - range_p++; } } diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 7934cdc..79afc21 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -66,6 +66,9 @@ int (*leasecomp) (const struct leases_t *restrict a, const struct leases_t *rest void (*add_lease) (struct conf_t *state, union ipaddr_t *ip, enum ltype type); struct leases_t *(*find_lease) (struct conf_t *state, union ipaddr_t *ip); +/*! \brief An option argument parser to populate state header_limit and + * number_limit values. + */ static int return_limit(const char c) { if ('0' <= c && c < '8') @@ -129,7 +132,7 @@ static void skip_arg_parse(struct conf_t *state, char *optarg) } } -/*! \brief Command options parser. */ +/*! \brief Command line options parser. */ static char parse_command_line_opts(struct conf_t *state, int argc, char **argv) { enum { diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 879e5a1..42e6138 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -61,7 +61,11 @@ # define unlikely(x) (x) # endif -/* The attribute __hot__ was added in gcc 4.3. */ +/*! \def _DP_ATTRIBUTE_HOT + * \brief The function attribute __hot__ was added in gcc 4.3. See gnu + * documentation for further information. + * https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-hot-function-attribute + */ # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) # define _DP_ATTRIBUTE_HOT __attribute__ ((__hot__)) # else @@ -85,8 +89,9 @@ enum dhcp_version { }; /*! \enum prefix_t - * \brief Enumeration of interesting data in dhcpd.leases file, that has - * to be further examined, and saved. + * \brief Enumeration of interesting data in dhcpd.leases file, that has to + * be further examined, and saved. Functions xstrstr_v4() and xstrstr_v6() + * return one of these values to parse_leases(). */ enum prefix_t { PREFIX_LEASE, @@ -100,15 +105,19 @@ enum prefix_t { NUM_OF_PREFIX }; +/*! \enum color_mode + * \brief Enumeration whether to use or not color output. + */ enum color_mode { color_unknown, color_off, color_on, - color_auto /* default */ + color_auto /*!< Default, use colors when output terminal is interactive. */ }; /*! \struct shared_network_t - * \brief Counters for an individual shared network. + * \brief Counters for an individual shared network. This data entry is + * also used for 'all networks' counting. */ struct shared_network_t { char *name; @@ -145,7 +154,7 @@ struct output_helper_t { }; /*! \enum ltype - * \brief Lease state types. + * \brief Lease state types. These are the possible values in struct leases_t. */ enum ltype { ACTIVE, @@ -154,7 +163,7 @@ enum ltype { }; /*! \struct leases_t - * \brief An individual lease. The leaases are hashed. + * \brief An individual lease. These leaases are hashed. */ struct leases_t { union ipaddr_t ip; /* ip as key */ @@ -164,16 +173,16 @@ struct leases_t { }; /*! \enum limbits - * \brief Output limit bits: R_BIT ranges, S_BIT shared networks, A_BIT all. + * \brief Output limit bits. */ enum limbits { - R_BIT = (1 << 0), - S_BIT = (1 << 1), - A_BIT = (1 << 2) + R_BIT = (1 << 0), /*!< Range limit. */ + S_BIT = (1 << 1), /*!< Shared networks limit. */ + A_BIT = (1 << 2) /*!< All networks summary limit. */ }; /*! \def STATE_OK - * \brief Nagios alarm exit values. + * \brief Nagios alarm exit value. */ # define STATE_OK 0 # define STATE_WARNING 1 @@ -196,39 +205,38 @@ struct output_sort { * \brief Runtime configuration state. */ struct conf_t { - struct shared_network_t *shared_net_root; - struct shared_network_t *shared_net_head; - struct range_t *ranges; - unsigned int num_ranges; - size_t ranges_size; - struct leases_t *leases; - char dhcpv6; - enum dhcp_version ip_version; - const char *dhcpdconf_file; - const char *dhcpdlease_file; - int output_format; - struct output_sort *sorts; - const char *output_file; - const char *mustach_template; - double warning; - double critical; - double warn_count; - double crit_count; - double minsize; + struct shared_network_t *shared_net_root; /*!< First entry in shared network linked list, that is the 'all networks', */ + struct shared_network_t *shared_net_head; /*!< Last entry in shared network linked list. */ + struct range_t *ranges; /*!< Array of ranges. */ + unsigned int num_ranges; /*!< Number of ranges in the ranges array. */ + size_t ranges_size; /*!< Size of the ranges array. */ + struct leases_t *leases; /*!< An array of individual leases from dhcpd.leases file. */ + enum dhcp_version ip_version; /*!< Designator if the dhcpd is running in IPv4 or IPv6 mode. */ + const char *dhcpdconf_file; /*!< Path to dhcpd.conf file. */ + const char *dhcpdlease_file; /*!< Path to dhcpd.leases file. */ + int output_format; /*!< Column to use in color_tags array. */ + struct output_sort *sorts; /*!< Linked list how to sort ranges. */ + const char *output_file; /*!< Output file path. */ + const char *mustach_template; /*!< Mustach template file path. */ + double warning; /*!< Warning percent threshold. */ + double critical; /*!< Critical percent threshold. */ + double warn_count; /*!< Maximum number of free IP's before warning. */ + double crit_count; /*!< Maximum number of free IP's before critical. */ + double minsize; /*!< Minimum size of range or shared network to be considered exceeding threshold. */ unsigned int - reverse_order:1, - backups_found:1, - snet_alarms:1, - perfdata:1, - all_as_shared:1, - header_limit:4, - number_limit:3, - skip_ok:1, - skip_warning:1, - skip_critical:1, - skip_minsize:1, - skip_suppressed:1, - color_mode:2; + reverse_order:1, /*!< Reverse sort order. */ + backups_found:1, /*!< Indicator if dhcpd.leases file has leases in backup state. */ + snet_alarms:1, /*!< Suppress alarming thresholds for ranges that are part of a shared network. */ + perfdata:1, /*!< Include performance statistics when using Nagios alarm output format. */ + all_as_shared:1, /*!< Treat stand-alone subnets as a shared network. */ + header_limit:4, /*!< Bits to suppress header output. */ + number_limit:3, /*!< Bits to suppress value output. */ + skip_ok:1, /*!< Skip none-alarming values from output. */ + skip_warning:1, /*!< Skip warning values from output. */ + skip_critical:1, /*!< Skip critical values from output. */ + skip_minsize:1, /*!< Skip alarming values that are below minsize from output. */ + skip_suppressed:1, /*!< Skip alarming values that are suppressed with --snet-alarms option, or they are shared networks without IP availability. */ + color_mode:2; /*!< Indicator if colors should be used in output. */ }; /* Function prototypes */ diff --git a/src/getdata.c b/src/getdata.c index 850f48e..ca01384 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -64,7 +64,8 @@ enum dhcpd_magic_numbers { }; /*! \enum isc_conf_parser - * \brief Configuration file parsing state flags. + * \brief Configuration file parsing state flags. The + * is_interesting_config_clause() will return one of these to parse_config(). */ enum isc_conf_parser { ITS_NOTHING_INTERESTING, @@ -195,8 +196,8 @@ static void reorder_last_first(struct range_t *range_p) } /*! \brief The dhcpd.conf file parser. - * FIXME: This spaghetti monster function need to be rewrote at least - * ones. + * FIXME: This spaghetti monster function needs to be rewrote at least + * ones more. */ void parse_config(struct conf_t *state, const int is_include, const char *restrict config_file, struct shared_network_t *restrict shared_p) diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 652db0a..67260fd 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -53,6 +53,9 @@ #include "mustach.h" #include "xalloc.h" +/*! \struct expl + * \brief A structure that travels through mustach via closure void pointer. + */ struct expl { struct conf_t *state; struct range_t *range_p; @@ -64,7 +67,9 @@ struct expl { static int must_enter(void *closure, const char *name); static int must_leave(void *closure); -/* This can be called when template is invalid end put happens before enter. */ +/*! \brief This function can be called when mustach template is invalid. + * In such case either must_put_range or must_put_shnet is tried to call before + * must_enter. */ static int must_put_err(void *closure __attribute__ ((unused)), const char *name __attribute__ ((unused)), int escape __attribute__ ((unused)), FILE *file __attribute__ ((unused))) @@ -72,7 +77,8 @@ static int must_put_err(void *closure __attribute__ ((unused)), return MUSTACH_ERROR_SYSTEM; } -/* Set mustach function pointers. */ +/*! \struct mustach_itf + * \brief Mustach function pointers. */ static struct mustach_itf itf = { .start = NULL, .enter = must_enter, @@ -81,6 +87,7 @@ static struct mustach_itf itf = { .leave = must_leave }; +/*! \brief Mustach range aka {{#subnets}} tag parser and printer. */ static int must_put_range(void *closure, const char *name, int escape __attribute__ ((unused)), FILE *file) { @@ -162,6 +169,7 @@ static int must_put_range(void *closure, const char *name, int escape return 0; } +/*! \brief Mustach shared networks aka {{#shared-networks}} tag parser and printer. */ static int must_put_shnet(void *closure, const char *name, int escape __attribute__ ((unused)), FILE *file) { @@ -230,6 +238,7 @@ static int must_put_shnet(void *closure, const char *name, int escape return 0; } +/*! \brief A function to move to next range when {{/subnets}} is encountered. */ static int must_next_range(void *closure) { struct expl *e = closure; @@ -243,6 +252,8 @@ static int must_next_range(void *closure) return 1; } +/*! \brief A function to move to next shared network when {{/shared-networks}} + * is encountered. */ static int must_next_shnet(void *closure) { struct expl *e = closure; @@ -261,6 +272,8 @@ static int must_next_shnet(void *closure) return 0; } +/*! \brief Function that is called when mustach is searching output loops from + * template file. */ static int must_enter(void *closure, const char *name) { struct expl *e = closure; @@ -292,6 +305,7 @@ static int must_enter(void *closure, const char *name) return 0; } +/*! \brief Function that is called when all elements within a print loop are outputed. */ static int must_leave(void *closure __attribute__ ((unused))) { struct expl *e = closure; @@ -301,6 +315,7 @@ static int must_leave(void *closure __attribute__ ((unused))) return 0; } +/*! \brief Read mustach template to memory. */ static char *must_read_template(const char *filename) { int f; @@ -322,7 +337,7 @@ static char *must_read_template(const char *filename) return result; } - +/*! \brief Start mustach processing. */ int mustach_dhcpd_pools(struct conf_t *state) { struct expl e = { .state = state }; diff --git a/src/other.c b/src/other.c index 8ebe627..dc207bd 100644 --- a/src/other.c +++ b/src/other.c @@ -159,6 +159,10 @@ int parse_ipaddr_v6(struct conf_t *state return rv == 1; } +/*! \brief Convert string to a desimal format network marks. + * \param src Digit that should be a network mask. + * \return Network mask, or -1 when failing. + */ static int strtol_mask(const char *str) { long num; @@ -178,6 +182,10 @@ static int strtol_mask(const char *str) return -1; } +/*! \brief Find last address in IPv4 range by using cidr format. + * \param addr Pointer to memory where address needs to be stored. + * \return Allocated string format of the address. + */ static char *cidr_last_v4(union ipaddr_t *restrict addr, const int mask) { union ipaddr_t last_ip; @@ -194,6 +202,10 @@ static char *cidr_last_v4(union ipaddr_t *restrict addr, const int mask) return xstrdup(ip); } +/*! \brief Find last address in IPv6 range by using cidr format. + * \param addr Pointer to memory where address needs to be stored. + * \return Allocated string format of the address. + */ static char *cidr_last_v6(union ipaddr_t *restrict addr, const int mask) { union ipaddr_t bitmask; @@ -213,6 +225,10 @@ static char *cidr_last_v6(union ipaddr_t *restrict addr, const int mask) return xstrdup(ip); } +/*! \brief Convert a cidr notated address to a range. + * \param range_p Pointer to memory where addresses need to be stored. + * \param word A range as a cidr string. + */ void parse_cidr(struct conf_t *state, struct range_t *range_p, const char *word) { char *divider; diff --git a/src/output.c b/src/output.c index 9052854..9647f0c 100644 --- a/src/output.c +++ b/src/output.c @@ -81,6 +81,9 @@ enum count_status_t { COLOR_RESET }; +/*! \var color_tags + * \brief Array of stings that make colors to start and end in different + * schemas per array column. */ static const char *color_tags[][NUM_OF_OUT_FORMS] = { [STATUS_OK] = { "", "" }, [STATUS_WARN] = { "\033[1;33m", " style=\"color:magenta;font-style:italic\"" }, @@ -90,7 +93,8 @@ static const char *color_tags[][NUM_OF_OUT_FORMS] = { [COLOR_RESET] = { "\033[0m", "" } }; -/*! \brief Calculate range percentages and such. */ +/*! \brief Calculate range percentages and such. + * \return Indicator if the entry should be skipped from output. */ int range_output_helper(struct conf_t *state, struct output_helper_t *oh, struct range_t *range_p) { @@ -127,7 +131,8 @@ int range_output_helper(struct conf_t *state, struct output_helper_t *oh, return 0; } -/*! \brief Calculate shared network percentages and such. */ +/*! \brief Calculate shared network percentages and such. + * \return Indicator if the entry should be skipped from output. */ int shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, struct shared_network_t *shared_p) { @@ -170,6 +175,8 @@ int shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, } +/*! \brief Output a color based on output_helper_t status. + * \return Indicator whether coloring was started or not. */ static int start_color(struct conf_t *state, struct output_helper_t *oh, FILE *outfile) { if (oh->status == STATUS_OK) { @@ -179,6 +186,8 @@ static int start_color(struct conf_t *state, struct output_helper_t *oh, FILE *o return 1; } +/*! \brief Helper function to open a output file. + * \return The outfile in all of the output functions. */ static FILE *open_outfile(struct conf_t *state) { FILE *outfile; @@ -194,6 +203,8 @@ static FILE *open_outfile(struct conf_t *state) return outfile; } + +/*! \brief Helper function to close outfile. */ static void close_outfile(FILE *outfile) { if (outfile == stdout) { From d24313d25aeb3254d4d010f7f52051dbe4e8de8c Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 14 Nov 2017 00:17:56 +0000 Subject: [PATCH 099/158] output: remove unused variable attribute The closure is used. Signed-off-by: Sami Kerola --- src/mustach-dhcpd-pools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 67260fd..77b240b 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -306,7 +306,7 @@ static int must_enter(void *closure, const char *name) } /*! \brief Function that is called when all elements within a print loop are outputed. */ -static int must_leave(void *closure __attribute__ ((unused))) +static int must_leave(void *closure) { struct expl *e = closure; From ff3d9523e686ebf411efb3c7cfab0e1ee0136901 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 14 Nov 2017 10:46:48 +0000 Subject: [PATCH 100/158] output: add more items to mustach tags Base level printing; localstime, number of ranges and shared networks, project version, and file paths and time stamps. Also print error and stop template processing when unknown tag is encountered. Signed-off-by: Sami Kerola --- samples/mustach.template | 23 +++++- src/mustach-dhcpd-pools.c | 147 ++++++++++++++++++++++++++++++-------- tests/expected/mustach | 12 ++++ tests/mustach | 6 +- 4 files changed, 154 insertions(+), 34 deletions(-) diff --git a/samples/mustach.template b/samples/mustach.template index a569a15..3c0db39 100644 --- a/samples/mustach.template +++ b/samples/mustach.template @@ -14,7 +14,7 @@ Subnets:{{#subnets}} backup_percent: {{backup_percent}} status: {{status}} gettimeofday: {{gettimeofday}} - lease_file_mtime: {{lease_file_mtime}} + lease_file_epoch_mtime: {{lease_file_epoch_mtime}} {{/subnets}} Shared-networks:{{#shared-networks}} @@ -30,7 +30,7 @@ Shared-networks:{{#shared-networks}} backup_percent: {{backup_percent}} status: {{status}} gettimeofday: {{gettimeofday}} - lease_file_mtime: {{lease_file_mtime}} + lease_file_epoch_mtime: {{lease_file_epoch_mtime}} {{/shared-networks}} Summary:{{#summary}} @@ -46,5 +46,22 @@ Summary:{{#summary}} backup_percent: {{backup_percent}} status: {{status}} gettimeofday: {{gettimeofday}} - lease_file_mtime: {{lease_file_mtime}} + lease_file_epoch_mtime: {{lease_file_epoch_mtime}} {{/summary}} + +localtime: {{localtime}} +number_of_ranges: {{number_of_ranges}} +number_of_shared_networks: {{number_of_shared_networks}} +version: {{version}} + +conf_file_path: {{conf_file_path}} +conf_file_local_mtime: {{conf_file_local_mtime}} +conf_file_epoch_mtime: {{conf_file_epoch_mtime}} + +lease_file_path: {{lease_file_path}} +lease_file_local_mtime: {{lease_file_local_mtime}} +lease_file_epoch_mtime: {{lease_file_epoch_mtime}} + +template_file_path: {{template_file_path}} +template_file_local_mtime: {{template_file_local_mtime}} +template_file_epoch_mtime: {{template_file_epoch_mtime}} diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 77b240b..a3a7127 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -45,12 +45,14 @@ #include #include #include +#include #include #include "close-stream.h" #include "dhcpd-pools.h" #include "error.h" #include "mustach.h" +#include "strftime.h" #include "xalloc.h" /*! \struct expl @@ -67,14 +69,109 @@ struct expl { static int must_enter(void *closure, const char *name); static int must_leave(void *closure); -/*! \brief This function can be called when mustach template is invalid. - * In such case either must_put_range or must_put_shnet is tried to call before - * must_enter. */ -static int must_put_err(void *closure __attribute__ ((unused)), - const char *name __attribute__ ((unused)), - int escape __attribute__ ((unused)), FILE *file __attribute__ ((unused))) +static void dp_time_tool(FILE *file, const char *path, int epoch) { - return MUSTACH_ERROR_SYSTEM; + time_t t; + + /* a file or now */ + if (path) { + struct stat st; + + stat(path, &st); + t = st.st_mtime; + } else + t = time(NULL); + /* epoc or iso time stamp */ + if (epoch) + fprintf(file, "%ld", t); + else { + char time_stamp[64]; + struct tm tm; + int len; + + localtime_r(&t, &tm); + len = snprintf(time_stamp, sizeof(time_stamp), "%4d-%.2d-%.2dT%02d:%02d:%02d", + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec); + strftime(time_stamp + len, sizeof(time_stamp) - len, "%z", &tm); + fprintf(file, "%s", time_stamp); + } +} + +/*! \brief Template base level tag parser and printer. */ +static int must_put_base(void *closure, const char *name, int escape + __attribute__ ((unused)), FILE *file) +{ + struct expl *e = closure; + + if (!strcmp(name, "localtime")) { + dp_time_tool(file, NULL, 0); + return 0; + } + if (!strcmp(name, "number_of_ranges")) { + fprintf(file, "%u", e->state->num_ranges); + return 0; + } + if (!strcmp(name, "number_of_shared_networks")) { + static uint32_t num = 0xffffffff; + + if (num == 0xffffffff) { + /* Use of static num ensures this is done only once. */ + struct shared_network_t *shared_p; + + num = 0; + for (shared_p = e->state->shared_net_root->next; shared_p; + shared_p = shared_p->next) + num++; + } + fprintf(file, "%u", num); + return 0; + } + if (!strcmp(name, "version")) { + fprintf(file, "%s", PACKAGE_VERSION); + return 0; + } + /* lease file */ + if (!strcmp(name, "lease_file_path")) { + fprintf(file, "%s", e->state->dhcpdlease_file); + return 0; + } + if (!strcmp(name, "lease_file_local_mtime")) { + dp_time_tool(file, e->state->dhcpdlease_file, 0); + return 0; + } + if (!strcmp(name, "lease_file_epoch_mtime")) { + dp_time_tool(file, e->state->dhcpdlease_file, 1); + return 0; + } + /* conf file */ + if (!strcmp(name, "conf_file_path")) { + fprintf(file, "%s", e->state->dhcpdconf_file); + return 0; + } + if (!strcmp(name, "conf_file_local_mtime")) { + dp_time_tool(file, e->state->dhcpdconf_file, 0); + return 0; + } + if (!strcmp(name, "conf_file_epoch_mtime")) { + dp_time_tool(file, e->state->dhcpdconf_file, 1); + return 0; + } + /* template file */ + if (!strcmp(name, "template_file_path")) { + fprintf(file, "%s", e->state->mustach_template); + return 0; + } + if (!strcmp(name, "template_file_local_mtime")) { + dp_time_tool(file, e->state->mustach_template, 0); + return 0; + } + if (!strcmp(name, "template_file_epoch_mtime")) { + dp_time_tool(file, e->state->mustach_template, 1); + return 0; + } + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: unexpected tag: %s", name); + return 1; } /*! \struct mustach_itf @@ -82,7 +179,7 @@ static int must_put_err(void *closure __attribute__ ((unused)), static struct mustach_itf itf = { .start = NULL, .enter = must_enter, - .put = must_put_err, + .put = must_put_base, .next = NULL, .leave = must_leave }; @@ -153,20 +250,15 @@ static int must_put_range(void *closure, const char *name, int escape return 0; } if (!strcmp(name, "gettimeofday")) { - struct timeval tp; - - gettimeofday(&tp, NULL); - fprintf(file, "%ld", tp.tv_sec); + dp_time_tool(file, NULL, 1); return 0; } - if (!strcmp(name, "lease_file_mtime")) { - struct stat st; - - stat(e->state->dhcpdlease_file, &st); - fprintf(file, "%ld", st.st_mtime); + if (!strcmp(name, "lease_file_epoch_mtime")) { + dp_time_tool(file, e->state->dhcpdlease_file, 1); return 0; } - return 0; + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: unexpected tag: %s", name); + return 1; } /*! \brief Mustach shared networks aka {{#shared-networks}} tag parser and printer. */ @@ -222,20 +314,15 @@ static int must_put_shnet(void *closure, const char *name, int escape return 0; } if (!strcmp(name, "gettimeofday")) { - struct timeval tp; - - gettimeofday(&tp, NULL); - fprintf(file, "%ld", tp.tv_sec); + dp_time_tool(file, NULL, 1); return 0; } - if (!strcmp(name, "lease_file_mtime")) { - struct stat st; - - stat(e->state->dhcpdlease_file, &st); - fprintf(file, "%ld", st.st_mtime); + if (!strcmp(name, "lease_file_epoch_mtime")) { + dp_time_tool(file, e->state->dhcpdlease_file, 1); return 0; } - return 0; + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: unexpected tag: %s", name); + return 1; } /*! \brief A function to move to next range when {{/subnets}} is encountered. */ @@ -302,7 +389,8 @@ static int must_enter(void *closure, const char *name) shnet_output_helper(e->state, &e->oh, e->shnet_p); return 1; } - return 0; + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: unexpected tag: %s", name); + return 1; } /*! \brief Function that is called when all elements within a print loop are outputed. */ @@ -312,6 +400,7 @@ static int must_leave(void *closure) e->shnet_p = e->state->shared_net_root; e->range_p = e->state->ranges; + itf.put = must_put_base; return 0; } diff --git a/tests/expected/mustach b/tests/expected/mustach index 73358a8..dddecb0 100644 --- a/tests/expected/mustach +++ b/tests/expected/mustach @@ -114,6 +114,12 @@ Summary: backup_percent: 2 status: 0 + +number_of_ranges: 5 +number_of_shared_networks: 2 + + + --- skip ok --- Subnets: location: example1 @@ -189,3 +195,9 @@ Summary: backup_percent: 2 status: 0 + +number_of_ranges: 5 +number_of_shared_networks: 2 + + + diff --git a/tests/mustach b/tests/mustach index f99ef81..d893aae 100755 --- a/tests/mustach +++ b/tests/mustach @@ -8,14 +8,16 @@ if [ ! -d tests/outputs ]; then mkdir tests/outputs fi +remove='/gettimeofday:/d; /^localtime:/d; /^conf_file_/d; /lease_file_/d; /^template_file_/d; /^version:/d' + dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ --mustach $top_srcdir/samples/mustach.template | - sed '/gettimeofday:/d; /lease_file_mtime:/d' >| tests/outputs/$IAM + sed "$remove" >| tests/outputs/$IAM echo "--- skip ok ---" >> tests/outputs/$IAM dhcpd-pools -c $top_srcdir/samples/dhcpd.conf -l $top_srcdir/samples/dhcpd.leases \ --mustach $top_srcdir/samples/mustach.template --skip=ok --warning 44 | - sed '/gettimeofday:/d; /lease_file_mtime:/d' >> tests/outputs/$IAM + sed "$remove" >> tests/outputs/$IAM diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM exit $? From 6d737a7607ed7f779618117697e96308357fdfa4 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 14 Nov 2017 11:00:29 +0000 Subject: [PATCH 101/158] output: unify time stamp creations Use iso time stamp in both mustach and html outputs. Effectively this is a removal of libc langinfo D_T_FMT format, that pulled a lot of gnulib stuff to project almost unnecessarily. Signed-off-by: Sami Kerola --- bootstrap.conf | 2 -- lib/.gitignore | 16 ---------------- src/dhcpd-pools.h | 1 + src/mustach-dhcpd-pools.c | 31 ------------------------------- src/other.c | 32 ++++++++++++++++++++++++++++++++ src/output.c | 21 +++------------------ 6 files changed, 36 insertions(+), 67 deletions(-) diff --git a/bootstrap.conf b/bootstrap.conf index 7ab7e49..bc07e7f 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -29,9 +29,7 @@ gnulib_modules=" getopt-gnu inet_pton isnan - langinfo netinet_in - nl_langinfo nstrftime progname quote diff --git a/lib/.gitignore b/lib/.gitignore index e138fda..0de1e31 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1,11 +1,6 @@ /*.lo -/*.o -/.deps/ -/.gitignore~ /.libs/ -/Makefile /Makefile.am -/Makefile.in /_Noreturn.h /alloca.h /alloca.in.h @@ -71,7 +66,6 @@ /getprogname.c /getprogname.h /gettext.h -/gettimeofday.c /hard-locale.c /hard-locale.h /inet_pton.c @@ -81,16 +75,11 @@ /isnanf.c /isnanl.c /itold.c -/langinfo.h -/langinfo.in.h /libdhcpd_pools.la /limits.h /limits.in.h /localcharset.c /localcharset.h -/locale.h -/locale.in.h -/localeconv.c /localtime-buffer.c /localtime-buffer.h /lseek.c @@ -113,7 +102,6 @@ /msvc-nothrow.c /msvc-nothrow.h /netinet_in.in.h -/nl_langinfo.c /nstrftime.c /pathmax.h /progname.c @@ -133,7 +121,6 @@ /stdalign.in.h /stdbool.in.h /stddef.in.h -/stdint.h /stdint.in.h /stdio-impl.h /stdio.h @@ -147,7 +134,6 @@ /strerror-override.c /strerror-override.h /strerror.c -/strftime.c /strftime.h /string.h /string.in.h @@ -156,13 +142,11 @@ /strtod.c /sys/socket.h /sys/stat.h -/sys/time.h /sys/types.h /sys/uio.h /sys_socket.c /sys_socket.in.h /sys_stat.in.h -/sys_time.in.h /sys_types.in.h /sys_uio.in.h /time-internal.h diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 42e6138..a2715f3 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -277,6 +277,7 @@ extern int parse_color_mode(const char *restrict optarg); extern double strtod_or_err(const char *restrict str, const char *restrict errmesg); extern void __attribute__ ((noreturn)) print_version(void); extern void __attribute__ ((noreturn)) usage(int status); +extern void dp_time_tool(FILE *file, const char *path, int epoch); extern int (*parse_ipaddr) (struct conf_t *state, const char *restrict src, union ipaddr_t *restrict dst); diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index a3a7127..d152938 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -45,14 +45,12 @@ #include #include #include -#include #include #include "close-stream.h" #include "dhcpd-pools.h" #include "error.h" #include "mustach.h" -#include "strftime.h" #include "xalloc.h" /*! \struct expl @@ -69,35 +67,6 @@ struct expl { static int must_enter(void *closure, const char *name); static int must_leave(void *closure); -static void dp_time_tool(FILE *file, const char *path, int epoch) -{ - time_t t; - - /* a file or now */ - if (path) { - struct stat st; - - stat(path, &st); - t = st.st_mtime; - } else - t = time(NULL); - /* epoc or iso time stamp */ - if (epoch) - fprintf(file, "%ld", t); - else { - char time_stamp[64]; - struct tm tm; - int len; - - localtime_r(&t, &tm); - len = snprintf(time_stamp, sizeof(time_stamp), "%4d-%.2d-%.2dT%02d:%02d:%02d", - tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, - tm.tm_hour, tm.tm_min, tm.tm_sec); - strftime(time_stamp + len, sizeof(time_stamp) - len, "%z", &tm); - fprintf(file, "%s", time_stamp); - } -} - /*! \brief Template base level tag parser and printer. */ static int must_put_base(void *closure, const char *name, int escape __attribute__ ((unused)), FILE *file) diff --git a/src/other.c b/src/other.c index dc207bd..5467fb1 100644 --- a/src/other.c +++ b/src/other.c @@ -47,6 +47,8 @@ #include #include #include +#include +#include #include #include "error.h" @@ -544,6 +546,36 @@ void clean_up(struct conf_t *state) } } +/*! \brief Print a time stamp of a path or now to output file. */ +void dp_time_tool(FILE *file, const char *path, int epoch) +{ + time_t t; + + /* a file or now */ + if (path) { + struct stat st; + + stat(path, &st); + t = st.st_mtime; + } else + t = time(NULL); + /* epoc or iso time stamp */ + if (epoch) + fprintf(file, "%ld", t); + else { + char time_stamp[64]; + struct tm tm; + int len; + + localtime_r(&t, &tm); + len = snprintf(time_stamp, sizeof(time_stamp), "%4d-%.2d-%.2dT%02d:%02d:%02d", + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec); + strftime(time_stamp + len, sizeof(time_stamp) - len, "%z", &tm); + fprintf(file, "%s", time_stamp); + } +} + /*! \brief A version printing. */ void __attribute__ ((__noreturn__)) print_version(void) { diff --git a/src/output.c b/src/output.c index 9647f0c..9ee2475 100644 --- a/src/output.c +++ b/src/output.c @@ -609,22 +609,6 @@ static int output_json(struct conf_t *state, const int print_mac_addreses) */ static void html_header(struct conf_t *state, FILE *restrict f) { - char outstr[200]; - struct tm *tmp, result; - - struct stat statbuf; - - stat(state->dhcpdlease_file, &statbuf); - - tmp = localtime_r(&statbuf.st_mtime, &result); - if (tmp == NULL) { - error(EXIT_FAILURE, errno, "html_header: localtime"); - } - setlocale(LC_CTYPE, ""); - setlocale(LC_NUMERIC, ""); - if (strftime(outstr, sizeof(outstr), nl_langinfo(D_T_FMT), &result) == 0) { - error(EXIT_FAILURE, 0, "html_header: strftime returned 0"); - } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); @@ -641,8 +625,9 @@ static void html_header(struct conf_t *state, FILE *restrict f) fprintf(f, "\n"); fprintf(f, "
\n"); fprintf(f, "

ISC DHCPD status

\n"); - fprintf(f, "File %s was last modified at %s
\n", state->dhcpdlease_file, - outstr); + fprintf(f, "File %s was last modified at ", state->dhcpdlease_file); + dp_time_tool(f, state->dhcpdlease_file, 0); + fprintf(f, "
\n"); } /*! \brief Footer for full html output format. From 444815f964d6d61ca271b50246d88fed0e3d7bac Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 14 Nov 2017 18:58:11 +0000 Subject: [PATCH 102/158] orther: fix xstrstr_init() memcmp() return value usage This is a bug. The xstrstr_init initialized wrong IP version functions when this function was the first to run and set function pointers. Signed-off-by: Sami Kerola --- src/other.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/other.c b/src/other.c index 5467fb1..aea5aa8 100644 --- a/src/other.c +++ b/src/other.c @@ -354,11 +354,11 @@ double get_range_size_v6(const struct range_t *r) */ int xstrstr_init(struct conf_t *state, const char *restrict str) { - if (memcmp("lease ", str, 6)) { + if (!memcmp("lease ", str, 6)) { set_ipv_functions(state, IPv4); return PREFIX_LEASE; } - if (memcmp(" iaaddr ", str, 9)) { + if (!memcmp(" iaaddr ", str, 9)) { set_ipv_functions(state, IPv6); return PREFIX_LEASE; } From 46ec42182b6d192ec5c253876ca539dd92363d9f Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 14 Nov 2017 20:19:18 +0000 Subject: [PATCH 103/158] output: add some trivia data to json output These are software version, dhcpd conf and leases paths and mtime epoch timestamps. Signed-off-by: Sami Kerola --- src/output.c | 14 +++++++++++++- tests/expected/same-twice-json | 2 ++ tests/full-json | 5 +++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/output.c b/src/output.c index 9ee2475..a651ccb 100644 --- a/src/output.c +++ b/src/output.c @@ -596,7 +596,19 @@ static int output_json(struct conf_t *state, const int print_mac_addreses) fprintf(outfile, " \"backup_percent\":%g,\n", oh.bup); } fprintf(outfile, " \"status\":%d\n", oh.status); - fprintf(outfile, " }"); /* end of summary */ + fprintf(outfile, " },\n"); /* end of summary */ + fprintf(outfile, " \"trivia\": {\n"); + fprintf(outfile, " \"version\":\"%s\",\n", PACKAGE_VERSION); + fprintf(outfile, " \"conf_file_path\":\"%s\",\n", state->dhcpdconf_file); + fprintf(outfile, " \"conf_file_epoch_mtime\":"); + dp_time_tool(outfile, state->dhcpdconf_file, 1); + fprintf(outfile, ",\n"); + fprintf(outfile, " \"lease_file_path\":\"%s\",\n", state->dhcpdlease_file); + fprintf(outfile, " \"lease_file_epoch_mtime\":"); + dp_time_tool(outfile, state->dhcpdlease_file, 1); + fprintf(outfile, "\n"); + + fprintf(outfile, " }"); /* end of trivia */ } fprintf(outfile, "\n}\n"); close_outfile(outfile); diff --git a/tests/expected/same-twice-json b/tests/expected/same-twice-json index 43d431b..f572972 100644 --- a/tests/expected/same-twice-json +++ b/tests/expected/same-twice-json @@ -17,5 +17,7 @@ "touch_count":1, "touch_percent":10, "status":0 + }, + "trivia": { } } diff --git a/tests/full-json b/tests/full-json index 31b0c93..881b02d 100755 --- a/tests/full-json +++ b/tests/full-json @@ -7,7 +7,8 @@ if [ ! -d tests/outputs ]; then fi dhcpd-pools -f J -c $top_srcdir/tests/confs/same-twice \ - -l $top_srcdir/tests/leases/same-twice \ - -o tests/outputs/same-twice-json + -l $top_srcdir/tests/leases/same-twice | + sed '/"version":"/d; /"conf_file_.*":/d; /"lease_file_.*":/d' \ + >| tests/outputs/same-twice-json diff -u $top_srcdir/tests/expected/same-twice-json tests/outputs/same-twice-json exit $? From a1d2bd2cf758e8681678842d8f34151a93a50263 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 14 Nov 2017 22:30:07 +0000 Subject: [PATCH 104/158] usage: --skip=ignored is actually 'suppressed' When making --skip to take arguments ignored was for moment a work name for 'suppressed' state, and that was accidentally left to usage() output. Reference: 3369278fc02ff8765824e08fb3eb68dc544bdb2f Signed-off-by: Sami Kerola --- src/other.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/other.c b/src/other.c index aea5aa8..2b2cbf9 100644 --- a/src/other.c +++ b/src/other.c @@ -633,7 +633,7 @@ void __attribute__ ((__noreturn__)) usage(int status) fputs( " --warning=PERC set warning alarming threshold\n", out); fputs( " --critical=PERC set critical alarming threshold\n", out); fputs( " --skip=WHAT do not print threshold 'ok', 'warning', 'critical',\n", out); - fputs( " 'minsize', or 'ignored'\n", out); + fputs( " 'minsize', or 'suppressed'\n", out); fputs( " --warn-count=NR a number of free leases before warning raised\n", out); fputs( " --crit-count=NR a number of free leases before critical raised\n", out); fputs( " --minsize=size disable alarms for small ranges and shared-nets\n", out); From e6e90b4d62c4750a8671c9ba96ea6a8dc2e985a7 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Wed, 15 Nov 2017 13:29:46 +0000 Subject: [PATCH 105/158] release: 3.0 Signed-off-by: Sami Kerola --- NEWS | 59 + TODO | 10 +- man/dhcpd-pools.1.in | 2 +- webpages/index.html | 6 +- webpages/sitemap.txt | 4107 +++++++++++++++++++++--------------------- 5 files changed, 2144 insertions(+), 2040 deletions(-) diff --git a/NEWS b/NEWS index 2700f4b..7022464 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,65 @@ Please send dhcpd-pools bug reports to kerolasa@iki.fi. gpg: Signature is crated using RSA key ID 8ED396E37E38D471A00530D3A9553245FDE9B739. + +Version 3.0 +Sami Kerola (56): + release: update web page meta data + update sitemap + output: make output_analysis() to be regular function + getdata: fix typo + output: add output helper functions + output: add color support to text output + output: include earlier missing data to json output + output: add --skip-ok option + other: add --skip-ok to usage() output + output: json nan values need quoting + other: do not use 'else' after 'return' + getdata: do not use 'else' after 'continue' + include: use project specific header guard + output: use range_output_helper() value in output_xml() + output: add mustach templating support + output: add separate first_ip and last_ip to json and mustach outputs + docs: add mustach sample files + tests: add mustach check + output: make mustach processing more robust + output: avoid mixing ntop_ipaddr() output buffers + output: do not skip over first range in mustach output + output: save and reuse output helper results + output: add must_put_err() utility function + output: include stdlib.h to avoid compilation error + gnulib: use nstrftime instead of strftime + build-sys: omit mustach compilation when it cannot work + usage: add error message informing mustach support is not available + output: deduplicate file closing code + clean up: remove unused variable + all files: replace global variables with runtime config state structure + all files: re-indent + analyze: bug fix shared networks counts + other: add Jose Bollo to version output credits + output: improve mustach template parsing error + analysis: shared networks to be linked list + output: make --skip-ok to effect --perfdata + output: move shared net andn range status check to output_helper + output: make warning and critical colors work in html output + output: display more entries in html table by default + output: shared net can be in suppressed state + output: improve html table + hash: include stdlib.h to avoid implicit declarations + clean up: fix couple compiler warnings + thanks: add Troy D. Hanson to credits about uthash + samples: add prometheus text file collector mustach template + output: make --skip to take arguments what will be skipped + misc: move command line option parsing to separate function + misc: move couple enums from global scope to file scope + docs: improve doxygen documentation + output: remove unused variable attribute + output: add more items to mustach tags + output: unify time stamp creations + orther: fix xstrstr_init() memcmp() return value usage + output: add some trivia data to json output + usage: --skip=ignored is actually 'suppressed' + release: 3.0 Version 2.29 Boris Lytochkin (1): diff --git a/TODO b/TODO index a3fb5b3..15c3792 100644 --- a/TODO +++ b/TODO @@ -20,12 +20,14 @@ o Add lease time histogram support. o Update gnulib o Update bootstrap o Update DataTables, and bootstrap versions; see https://datatables.net/download/index -o Update NEWS, webpages/index.html dateModified & version (remove old - doxygen before uploading new). +o Update NEWS, webpages/index.html dateModified & version o Make annotated git tag o ./configure --enable-doxygen && make distcheck +o BROWSER=cat man -H ./man/dhcpd-pools.1 | tee ./webpages/man.html o gpg --armor --detach-sign dhcpd-pools*tar* +* Update sitemap o Upload files to sourceforge o mv doc/html webpages/doxygen -o PAGER=cat man -H ./man/dhcpd-pools.1 | tee ./webpages/man.html -o Send email to dhcpd-pools-announce@lists.sourceforge.net subject: Version 2.nn is released +o sftp index.html man.html doxygen/* -> sourceforge web + remove old doxygen before uploading new +o Send email to dhcpd-pools-announce@lists.sourceforge.net subject: Version 3.n is released diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index b56e883..91bc53a 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -1,4 +1,4 @@ -.TH DHCPD-POOLS "1" "2017-01-06" "@VERSION@" "User Commands" +.TH DHCPD-POOLS "1" "2017-11-15" "@VERSION@" "User Commands" .SH NAME dhcpd-pools \- ISC dhcpd pools usage analysis .SH SYNOPSIS diff --git a/webpages/index.html b/webpages/index.html index 82fe9a0..cd5bb7f 100644 --- a/webpages/index.html +++ b/webpages/index.html @@ -89,8 +89,8 @@ that is maintained by Trond Hasle Amundsen.

<kerolasa@iki.fi>

-Sat Sep 23 08:28:26 BST 2017 -2.29 +Wed Nov 15 12:47:30 GMT 2017 +3.0 FreeBSD License
@@ -99,7 +99,7 @@ that is maintained by Trond Hasle Amundsen.

5 ( -1 ratings ) +2 ratings )
diff --git a/webpages/sitemap.txt b/webpages/sitemap.txt index 7114d61..60a6df9 100644 --- a/webpages/sitemap.txt +++ b/webpages/sitemap.txt @@ -1,2052 +1,2095 @@ http://dhcpd-pools.sourceforge.net/ http://dhcpd-pools.sourceforge.net/dhcpd-pools.awk http://dhcpd-pools.sourceforge.net/man.html -http://dhcpd-pools.sourceforge.net/sampleoutput.txt -http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_a367dd14828b91673777c2c4223580349_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_a367dd14828b91673777c2c4223580349_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_a367dd14828b91673777c2c4223580349_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/annotated.html -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/bc_s.png -http://dhcpd-pools.sourceforge.net/doxygen/bdwn.png -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/classes.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/close_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/closed.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/config_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/defaults_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a136654209abbb18131b1fa16e6226bd6_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a136654209abbb18131b1fa16e6226bd6_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a136654209abbb18131b1fa16e6226bd6_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a136654209abbb18131b1fa16e6226bd6_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a136654209abbb18131b1fa16e6226bd6_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a136654209abbb18131b1fa16e6226bd6_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a19952e74e024d455578db51ddde0c889_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a19952e74e024d455578db51ddde0c889_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a19952e74e024d455578db51ddde0c889_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a25ca605983446a21da7359aa7fa243f9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a25ca605983446a21da7359aa7fa243f9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a25ca605983446a21da7359aa7fa243f9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3d9a782b263a4e3f07d9666628ff8e41_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3d9a782b263a4e3f07d9666628ff8e41_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3d9a782b263a4e3f07d9666628ff8e41_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a4e76c4237bbe96272bac63f591199eb2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a4e76c4237bbe96272bac63f591199eb2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a4e76c4237bbe96272bac63f591199eb2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a6ddedfa093b006537c291f1e6538bb9b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a6ddedfa093b006537c291f1e6538bb9b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a6ddedfa093b006537c291f1e6538bb9b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a7a4f150597a1a15704a4c77330cf376b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a7a4f150597a1a15704a4c77330cf376b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a7a4f150597a1a15704a4c77330cf376b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a97ef409fb9cabe07ea1faf83d6e98f36_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a97ef409fb9cabe07ea1faf83d6e98f36_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a97ef409fb9cabe07ea1faf83d6e98f36_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa7a92db4e2584e419af19ffb6e56ecd9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa7a92db4e2584e419af19ffb6e56ecd9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa7a92db4e2584e419af19ffb6e56ecd9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac486c5c99a86bde979068caedf66464c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac486c5c99a86bde979068caedf66464c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac486c5c99a86bde979068caedf66464c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac91da245635c0c189b64c64b5c083ec4_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac91da245635c0c189b64c64b5c083ec4_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac91da245635c0c189b64c64b5c083ec4_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af088ebe63395c5d93e2d025f9994816b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af088ebe63395c5d93e2d025f9994816b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af088ebe63395c5d93e2d025f9994816b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af82eaad913c94241ab70ee489a15fd22_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af82eaad913c94241ab70ee489a15fd22_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af82eaad913c94241ab70ee489a15fd22_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.map -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.png -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.map -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.png -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.map -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/doc.png -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/doxygen.css -http://dhcpd-pools.sourceforge.net/doxygen/doxygen.png -http://dhcpd-pools.sourceforge.net/doxygen/dynsections.js -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sampleoutput.txt http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a92db6afbd39d70dde0f830daaaa89be5_cgraph.md5 http://dhcpd-pools.sourceforge.net/doxygen/filename_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/files.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/folderclosed.png -http://dhcpd-pools.sourceforge.net/doxygen/folderopen.png -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/functions.html -http://dhcpd-pools.sourceforge.net/doxygen/functions_func.html -http://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a3a540d5475578f9cfc7c73bc8d9459c7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a4b988695a22a646e6482a7e7b4694cc7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a4b988695a22a646e6482a7e7b4694cc7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a4b988695a22a646e6482a7e7b4694cc7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5ca869af07888cb04c2194e50ba26bd4_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5ca869af07888cb04c2194e50ba26bd4_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5ca869af07888cb04c2194e50ba26bd4_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/globals.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_k.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_q.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_type.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_v.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_w.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_y.html -http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html -http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.md5 -http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.png -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a2cb0d12dca75a9ce45b0cdaf3e05d02b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a4e76c4237bbe96272bac63f591199eb2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a4e76c4237bbe96272bac63f591199eb2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a4e76c4237bbe96272bac63f591199eb2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_aa1e3fc53b4a69878b3041ebccf7a2446_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/index.html -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/jquery.js -http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/langinfo_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/locale_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/locale_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/locale_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/locale_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/locale_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/locale_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/locale_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/locale_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/localeconv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/localeconv_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/localeconv_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localeconv_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/math_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/menu.js -http://dhcpd-pools.sourceforge.net/doxygen/menudata.js -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/nav_f.png -http://dhcpd-pools.sourceforge.net/doxygen/nav_g.png -http://dhcpd-pools.sourceforge.net/doxygen/nav_h.png -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aea4e0ee59e46ba5b8970e2386302d997_cgraph.md5 http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_a3ddc67b70c406ca689a2dc5905cd3b66_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_a3ddc67b70c406ca689a2dc5905cd3b66_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_a3ddc67b70c406ca689a2dc5905cd3b66_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_abf836a27b312d6dd8a2fc87b0f2ba451_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_abf836a27b312d6dd8a2fc87b0f2ba451_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/nl__langinfo_8c_abf836a27b312d6dd8a2fc87b0f2ba451_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a656c0014bca06d6d9fd748a2f9dc4ab9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_b.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a8912a4a34bc9896f479a861fb2abf26c_cgraph.png http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a656c0014bca06d6d9fd748a2f9dc4ab9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a656c0014bca06d6d9fd748a2f9dc4ab9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/open.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a19952e74e024d455578db51ddde0c889_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a19952e74e024d455578db51ddde0c889_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a19952e74e024d455578db51ddde0c889_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a48a24a61e65de55452fbbbbcd7ea14b2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a54dbbe157750755e28f856b415ff16ec_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a54dbbe157750755e28f856b415ff16ec_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a54dbbe157750755e28f856b415ff16ec_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a8f7282d2917b2126d26add2d8ce57b9a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac486c5c99a86bde979068caedf66464c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac486c5c99a86bde979068caedf66464c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac486c5c99a86bde979068caedf66464c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adca513ff26c3cba2e7ea74c64bf59fd8_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adca513ff26c3cba2e7ea74c64bf59fd8_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adca513ff26c3cba2e7ea74c64bf59fd8_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af088ebe63395c5d93e2d025f9994816b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af088ebe63395c5d93e2d025f9994816b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af088ebe63395c5d93e2d025f9994816b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af82eaad913c94241ab70ee489a15fd22_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af82eaad913c94241ab70ee489a15fd22_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af82eaad913c94241ab70ee489a15fd22_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a25ca605983446a21da7359aa7fa243f9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a25ca605983446a21da7359aa7fa243f9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a25ca605983446a21da7359aa7fa243f9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a291834e7b08c27936c2ed4c61baef3a3_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a291834e7b08c27936c2ed4c61baef3a3_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a291834e7b08c27936c2ed4c61baef3a3_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42cc0b26b2e6e069d43065e2e330c1e9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6ddedfa093b006537c291f1e6538bb9b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6ddedfa093b006537c291f1e6538bb9b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6ddedfa093b006537c291f1e6538bb9b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a7a4f150597a1a15704a4c77330cf376b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a7a4f150597a1a15704a4c77330cf376b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a7a4f150597a1a15704a4c77330cf376b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a8f696d97d40cbc0d14f256e6678ac2ed_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ad8f12d99c42cc0a7cf0eb4f591d61b3b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a27e69f6fec7e64d52e1fdc49c8c813d0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3326aee231570141ab97e7f6b41248a2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.png http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a27e69f6fec7e64d52e1fdc49c8c813d0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a27e69f6fec7e64d52e1fdc49c8c813d0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a731587e35c47ecf04885633b03599652_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42ca40e01f90e40ebc5f81b046a8c3f9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/jquery.js +http://dhcpd-pools.sourceforge.net/doxygen/files.html +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5d6e2957d43a40a81ccf80939bc88417_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b95b4561242161bc9984852693ba646_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.md5 http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/tab_a.png +http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a5d6e2957d43a40a81ccf80939bc88417_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a795f2801e747615274e2386df5c2a2a7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_h.html +http://dhcpd-pools.sourceforge.net/doxygen/structconf__t__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/globals.html +http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_d.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/menu.js +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_ad34540a9deac940fc7ab265da606d484_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a41c1f91a38be989ef5e8fbb52444501f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/structconf__t__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_acac91d3fab9431e9feadfa8bee0d669c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d9e24bfed149261c782fcab4ce8692a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d9e24bfed149261c782fcab4ce8692a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d9e24bfed149261c782fcab4ce8692a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/folderclosed.png +http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a731587e35c47ecf04885633b03599652_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/structexpl__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_t.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dynsections.js +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa675337e02b12f20e5c7db26e55dbc15_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a3738c2bfd96d1421c8328fc59754def3_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_ac67c11f4ac65504980dd8ba708ed10c6_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adbb84b1b34e89af30525e680a4da749d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a656c0014bca06d6d9fd748a2f9dc4ab9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_m.html +http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af69f81b09ea8f7dda0047edd06c717ec_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af90ebdd5ec007dce3b05cdb440aca915_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aea4e0ee59e46ba5b8970e2386302d997_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a41c1f91a38be989ef5e8fbb52444501f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_acac91d3fab9431e9feadfa8bee0d669c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a02d48dd14871b22d59ec6d926585bbc8_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a4a72d4df9c2bd3f03842b7b017281ddb_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/structexpl__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a12d0dc2ac6cfcfb1856516a9f144d831_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a1b62af37280706bf7493743ff3f7b4aa_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a92db6afbd39d70dde0f830daaaa89be5_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/close_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_i.html +http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_ac370a831638bdd942e1624f9bc39f40f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af90ebdd5ec007dce3b05cdb440aca915_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_l.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/config_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a873f17992895bdebb3714d48407fd8ee_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/nav_g.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.png +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a967b15470f160c8fd28c1341724102f7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html +http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a8ded4a0c5645ded15779af1359945baa_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a4a72d4df9c2bd3f03842b7b017281ddb_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a795f2801e747615274e2386df5c2a2a7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_af90ebdd5ec007dce3b05cdb440aca915_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.md5 http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/nav_f.png +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a967b15470f160c8fd28c1341724102f7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/splitbar.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/math_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/structconf__t__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_acac91d3fab9431e9feadfa8bee0d669c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a20348831ccdaa3299eca89e4760d10f3_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_adf45b810e736753c178d8d354946bb34_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ade697840b3ffb9c2ee7d9cefbe58edd6_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html +http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1a92d0c7a5b5de1bd6ab225ae4afe60a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acd3044aba8bcf32ded0893f0ff7d43b3_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/search +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_f.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/search_r.png +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/close.png +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/mag_sel.png +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.js +http://dhcpd-pools.sourceforge.net/doxygen/search/search.css +http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.js +http://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/search.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/search_l.png +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/search_m.png +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.js +http://dhcpd-pools.sourceforge.net/doxygen/search/searchdata.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.js +http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_e.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.js +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.js +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.js +http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.js +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.js +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.js +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.js +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af53677934cc325455ae08fd8d7b63e73_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ade697840b3ffb9c2ee7d9cefbe58edd6_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a731587e35c47ecf04885633b03599652_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.png http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3326aee231570141ab97e7f6b41248a2_cgraph.map http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3326aee231570141ab97e7f6b41248a2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3326aee231570141ab97e7f6b41248a2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/search -http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/close.png -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.js -http://dhcpd-pools.sourceforge.net/doxygen/search/mag_sel.png -http://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html -http://dhcpd-pools.sourceforge.net/doxygen/search/search.css -http://dhcpd-pools.sourceforge.net/doxygen/search/search.js -http://dhcpd-pools.sourceforge.net/doxygen/search/search_l.png -http://dhcpd-pools.sourceforge.net/doxygen/search/search_m.png -http://dhcpd-pools.sourceforge.net/doxygen/search/search_r.png -http://dhcpd-pools.sourceforge.net/doxygen/search/searchdata.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.js -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a61fbbba1c5ed14bc82d9b4cefdde14f7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a61fbbba1c5ed14bc82d9b4cefdde14f7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a61fbbba1c5ed14bc82d9b4cefdde14f7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/splitbar.png -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html -http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html -http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structconfiguration__t__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/structiovec.html -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/structoption.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html -http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html -http://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/sync_off.png -http://dhcpd-pools.sourceforge.net/doxygen/sync_on.png -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/tab_a.png -http://dhcpd-pools.sourceforge.net/doxygen/tab_b.png -http://dhcpd-pools.sourceforge.net/doxygen/tab_h.png -http://dhcpd-pools.sourceforge.net/doxygen/tab_s.png -http://dhcpd-pools.sourceforge.net/doxygen/tabs.css -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/types_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__incl.map http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html -http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html -http://dhcpd-pools.sourceforge.net/doxygen/unionrpl__max__align__t.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.map http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_abb353ec32fd152026c853fea429fe857_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_abb353ec32fd152026c853fea429fe857_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6c41b841ecaf10025444de83ee2c8baa_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a92db6afbd39d70dde0f830daaaa89be5_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/index.html +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_aea4e0ee59e46ba5b8970e2386302d997_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a215b255f971df37ace7b513eb17fe1c5_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a1b62af37280706bf7493743ff3f7b4aa_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a795f2801e747615274e2386df5c2a2a7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.md5 http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_abb353ec32fd152026c853fea429fe857_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a731587e35c47ecf04885633b03599652_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/structexpl.html +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b225ff0b5eabfd0121833eada84bc90_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5d6e2957d43a40a81ccf80939bc88417_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b225ff0b5eabfd0121833eada84bc90_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa675337e02b12f20e5c7db26e55dbc15_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_add5e5c22a85f4544a1157876ac6bd561_cgraph.map http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a69334a531533dbafdeb52429a03a8db7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5d6e2957d43a40a81ccf80939bc88417_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html +http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/types_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h.html http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a69334a531533dbafdeb52429a03a8db7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a69334a531533dbafdeb52429a03a8db7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_adbb84b1b34e89af30525e680a4da749d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a873f17992895bdebb3714d48407fd8ee_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a5d6e2957d43a40a81ccf80939bc88417_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a4a72d4df9c2bd3f03842b7b017281ddb_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_add5e5c22a85f4544a1157876ac6bd561_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/unionrpl__max__align__t.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a5a8f2bad2fdbc52980d30b10a5ab33be_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d9e24bfed149261c782fcab4ce8692a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b225ff0b5eabfd0121833eada84bc90_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a479425784d9994068114922b90b31cb3_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/functions_func.html +http://dhcpd-pools.sourceforge.net/doxygen/menudata.js +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b95b4561242161bc9984852693ba646_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.map http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/filename_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/structoption.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a795f2801e747615274e2386df5c2a2a7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_abb353ec32fd152026c853fea429fe857_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/closed.png +http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_g.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af53677934cc325455ae08fd8d7b63e73_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af53677934cc325455ae08fd8d7b63e73_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/tab_b.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_o.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/classes.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_v.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_x.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a479425784d9994068114922b90b31cb3_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b95b4561242161bc9984852693ba646_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a27e69f6fec7e64d52e1fdc49c8c813d0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_n.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a215b255f971df37ace7b513eb17fe1c5_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af69f81b09ea8f7dda0047edd06c717ec_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1bc967d5ea7fe0eb36434dbd8d691363_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/float_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acf43aaf176da8efb115f944f5c0b3c97_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acf43aaf176da8efb115f944f5c0b3c97_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sync_off.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1a92d0c7a5b5de1bd6ab225ae4afe60a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af53677934cc325455ae08fd8d7b63e73_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_aa9630c1943de96498e73fd63cd3aeea9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1bc967d5ea7fe0eb36434dbd8d691363_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a8912a4a34bc9896f479a861fb2abf26c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a5a8f2bad2fdbc52980d30b10a5ab33be_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/structiovec.html +http://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_r.html +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html +http://dhcpd-pools.sourceforge.net/doxygen/structexpl__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a8ded4a0c5645ded15779af1359945baa_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a8ded4a0c5645ded15779af1359945baa_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_w.html +http://dhcpd-pools.sourceforge.net/doxygen/open.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af69f81b09ea8f7dda0047edd06c717ec_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a215b255f971df37ace7b513eb17fe1c5_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a731587e35c47ecf04885633b03599652_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/annotated.html +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a967b15470f160c8fd28c1341724102f7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a02d48dd14871b22d59ec6d926585bbc8_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_abc5552dd3521f63af288765527ac58dd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1bc967d5ea7fe0eb36434dbd8d691363_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a479425784d9994068114922b90b31cb3_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a8ded4a0c5645ded15779af1359945baa_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a8ded4a0c5645ded15779af1359945baa_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b95b4561242161bc9984852693ba646_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_ac370a831638bdd942e1624f9bc39f40f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a69334a531533dbafdeb52429a03a8db7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d9e24bfed149261c782fcab4ce8692a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_e.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_func.html +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/doxygen.css +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6c41b841ecaf10025444de83ee2c8baa_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_ac67c11f4ac65504980dd8ba708ed10c6_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/string_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6c41b841ecaf10025444de83ee2c8baa_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a1b62af37280706bf7493743ff3f7b4aa_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_f.html +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_aea4e0ee59e46ba5b8970e2386302d997_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_adf45b810e736753c178d8d354946bb34_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_s.html +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42ca40e01f90e40ebc5f81b046a8c3f9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a479425784d9994068114922b90b31cb3_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b95b4561242161bc9984852693ba646_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b225ff0b5eabfd0121833eada84bc90_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_aa9630c1943de96498e73fd63cd3aeea9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acd3044aba8bcf32ded0893f0ff7d43b3_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af69f81b09ea8f7dda0047edd06c717ec_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a873f17992895bdebb3714d48407fd8ee_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_ac370a831638bdd942e1624f9bc39f40f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html +http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a3738c2bfd96d1421c8328fc59754def3_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a8912a4a34bc9896f479a861fb2abf26c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af53677934cc325455ae08fd8d7b63e73_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a12d0dc2ac6cfcfb1856516a9f144d831_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac3e38df28a8ab7d155dc6a519678463e_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_adf45b810e736753c178d8d354946bb34_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adbb84b1b34e89af30525e680a4da749d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_y.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_abb353ec32fd152026c853fea429fe857_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b95b4561242161bc9984852693ba646_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_aa9630c1943de96498e73fd63cd3aeea9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a12d0dc2ac6cfcfb1856516a9f144d831_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_abc5552dd3521f63af288765527ac58dd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa675337e02b12f20e5c7db26e55dbc15_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_k.html +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sync_on.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a795f2801e747615274e2386df5c2a2a7_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a795f2801e747615274e2386df5c2a2a7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/tabs.css +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/doc.png +http://dhcpd-pools.sourceforge.net/doxygen/folderopen.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_u.html +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aea4e0ee59e46ba5b8970e2386302d997_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ade697840b3ffb9c2ee7d9cefbe58edd6_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/bc_s.png +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a92db6afbd39d70dde0f830daaaa89be5_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_abc5552dd3521f63af288765527ac58dd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/tab_s.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_adbb84b1b34e89af30525e680a4da749d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1a92d0c7a5b5de1bd6ab225ae4afe60a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b225ff0b5eabfd0121833eada84bc90_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_ad34540a9deac940fc7ab265da606d484_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.map +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__helper__t.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_a.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_af90ebdd5ec007dce3b05cdb440aca915_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_abc5552dd3521f63af288765527ac58dd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_aea4e0ee59e46ba5b8970e2386302d997_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acd3044aba8bcf32ded0893f0ff7d43b3_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af53677934cc325455ae08fd8d7b63e73_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/structmustach__itf.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a5d6e2957d43a40a81ccf80939bc88417_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_add5e5c22a85f4544a1157876ac6bd561_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a1b62af37280706bf7493743ff3f7b4aa_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_adbb84b1b34e89af30525e680a4da749d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b225ff0b5eabfd0121833eada84bc90_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_q.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acf43aaf176da8efb115f944f5c0b3c97_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a20348831ccdaa3299eca89e4760d10f3_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/doxygen.png +http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42ca40e01f90e40ebc5f81b046a8c3f9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a479425784d9994068114922b90b31cb3_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac3e38df28a8ab7d155dc6a519678463e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a873f17992895bdebb3714d48407fd8ee_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/math_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af90ebdd5ec007dce3b05cdb440aca915_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a1b62af37280706bf7493743ff3f7b4aa_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a69334a531533dbafdeb52429a03a8db7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_p.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af69f81b09ea8f7dda0047edd06c717ec_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a8ded4a0c5645ded15779af1359945baa_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/bdwn.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac3e38df28a8ab7d155dc6a519678463e_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_type.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_ad34540a9deac940fc7ab265da606d484_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a20348831ccdaa3299eca89e4760d10f3_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a02d48dd14871b22d59ec6d926585bbc8_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a873f17992895bdebb3714d48407fd8ee_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adbb84b1b34e89af30525e680a4da749d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af69f81b09ea8f7dda0047edd06c717ec_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/nav_h.png +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a479425784d9994068114922b90b31cb3_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a41c1f91a38be989ef5e8fbb52444501f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a5a8f2bad2fdbc52980d30b10a5ab33be_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a731587e35c47ecf04885633b03599652_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a92db6afbd39d70dde0f830daaaa89be5_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_abc5552dd3521f63af288765527ac58dd_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/tab_h.png +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a92db6afbd39d70dde0f830daaaa89be5_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_ac67c11f4ac65504980dd8ba708ed10c6_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a873f17992895bdebb3714d48407fd8ee_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_abc5552dd3521f63af288765527ac58dd_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.map +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a656c0014bca06d6d9fd748a2f9dc4ab9_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_b.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/functions.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.png +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/structconf__t.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a1b62af37280706bf7493743ff3f7b4aa_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_af90ebdd5ec007dce3b05cdb440aca915_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a3738c2bfd96d1421c8328fc59754def3_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.md5 +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.map +http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.png +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a27e69f6fec7e64d52e1fdc49c8c813d0_cgraph.png From 813e320b68dea6ada1124fac01fc6c40146dd50c Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Wed, 15 Nov 2017 20:09:52 +0000 Subject: [PATCH 106/158] webpage: add instructions how to get output you need Signed-off-by: Sami Kerola --- webpages/index.html | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/webpages/index.html b/webpages/index.html index cd5bb7f..76feeb1 100644 --- a/webpages/index.html +++ b/webpages/index.html @@ -66,6 +66,24 @@ file. manual page, and Doxygen software reference documentation are available online.

+

Getting the output you need

+
    +
  1. Start with:
    +dhcpd-pools --config=path +--leases=path --color=always --format=text
  2. +
  3. Play with options and see how output changes. Options to +try:
    +--all-as-shared --crit-count +--critical --minsize --snet-alarms --warn-count +--warning
  4. +
  5. Start filtering output. Options to try:
    +--skip --limit
  6. +
  7. Change --format +option to what you need, and maybe include --perfdata if you want nagios alarm +format.
  8. +
  9. Done.
  10. +

Reference information

From 2849dde21bf6c2f41880c9770f36454c2bf2ed2c Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 26 Nov 2017 11:47:23 +0000 Subject: [PATCH 107/158] build-sys: add coverage files to .gitignore Signed-off-by: Sami Kerola --- .gitignore | 3 +++ lib/.gitignore | 2 ++ 2 files changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 24f1410..d63edb6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ # Wildcard + in any subdir. *.o +*.gcno +*.gcda +*.[ch].gcov # Exact filename in any subdir. .deps diff --git a/lib/.gitignore b/lib/.gitignore index 0de1e31..8d9f964 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -115,6 +115,8 @@ /ref-del.sed /ref-del.sin /setenv.c +/stat-time.c +/stat-time.h /stat-w32.c /stat-w32.h /stat.c From 447241e6c3bd05cf186af0e1c701a7314e62bd9b Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 26 Nov 2017 15:14:49 +0000 Subject: [PATCH 108/158] tests: improve coverage Add error condition checks. Add lease file binding states. Check all output formats. Check leases file that is in mad order, cse all sorting methods when checking this. Use json output to check status classfications. Add cidr range checks. Add conf include and comment parsing input checks. Signed-off-by: Sami Kerola --- tests/Makemodule.am | 8 + tests/binding-states | 14 ++ tests/cidr-v4 | 1 + tests/cidr-v6 | 1 + tests/confs/binding-states | 1 + tests/confs/cidr-v4 | 31 ++++ tests/confs/cidr-v6 | 10 ++ tests/confs/formats | 1 + tests/confs/shnet-alarm | 32 +--- tests/confs/shufled | 1 + tests/confs/statuses | 1 + tests/errors | 48 ++++++ tests/expected/big-small | 11 +- tests/expected/binding-states | 16 ++ tests/expected/bootp | 11 +- tests/expected/cidr-v4 | 16 ++ tests/expected/cidr-v6 | 11 ++ tests/expected/errors | 18 +++ tests/expected/formats | 284 ++++++++++++++++++++++++++++++++++ tests/expected/parser | 1 + tests/expected/shufled | 16 ++ tests/expected/statuses | 29 ++++ tests/formats | 37 +++++ tests/leases/binding-states | 241 +++++++++++++++++++++++++++++ tests/leases/cidr-v4 | 1 + tests/leases/cidr-v6 | 1 + tests/leases/formats | 1 + tests/leases/parser | 1 + tests/leases/shufled | 198 ++++++++++++++++++++++++ tests/leases/statuses | 1 + tests/parser | 30 ++++ tests/shufled | 15 ++ tests/statuses | 22 +++ 33 files changed, 1059 insertions(+), 51 deletions(-) create mode 100755 tests/binding-states create mode 120000 tests/cidr-v4 create mode 120000 tests/cidr-v6 create mode 120000 tests/confs/binding-states create mode 100644 tests/confs/cidr-v4 create mode 100644 tests/confs/cidr-v6 create mode 120000 tests/confs/formats mode change 100644 => 120000 tests/confs/shnet-alarm create mode 120000 tests/confs/shufled create mode 120000 tests/confs/statuses create mode 100755 tests/errors mode change 100644 => 120000 tests/expected/big-small create mode 100644 tests/expected/binding-states mode change 100644 => 120000 tests/expected/bootp create mode 100644 tests/expected/cidr-v4 create mode 100644 tests/expected/cidr-v6 create mode 100644 tests/expected/errors create mode 100644 tests/expected/formats create mode 120000 tests/expected/parser create mode 100644 tests/expected/shufled create mode 100644 tests/expected/statuses create mode 100755 tests/formats create mode 100644 tests/leases/binding-states create mode 120000 tests/leases/cidr-v4 create mode 120000 tests/leases/cidr-v6 create mode 120000 tests/leases/formats create mode 120000 tests/leases/parser create mode 100644 tests/leases/shufled create mode 120000 tests/leases/statuses create mode 100755 tests/parser create mode 100755 tests/shufled create mode 100755 tests/statuses diff --git a/tests/Makemodule.am b/tests/Makemodule.am index 1372324..8e31e8e 100644 --- a/tests/Makemodule.am +++ b/tests/Makemodule.am @@ -11,21 +11,29 @@ TESTS = \ tests/alarm-warning-snets \ tests/shnet-alarm \ tests/big-small \ + tests/binding-states \ tests/bootp \ + tests/cidr-v4 \ + tests/cidr-v6 \ tests/complete \ tests/complete-perfdata \ tests/empty \ + tests/errors \ tests/full-json \ tests/full-xml \ + tests/formats \ tests/leading0 \ tests/one-ip \ tests/one-line \ + tests/parser \ tests/range4 \ tests/range6 \ tests/same-twice \ + tests/shufled \ tests/simple \ tests/skip \ tests/sorts \ + tests/statuses \ tests/v6 \ tests/v6-perfdata diff --git a/tests/binding-states b/tests/binding-states new file mode 100755 index 0000000..a5e98d0 --- /dev/null +++ b/tests/binding-states @@ -0,0 +1,14 @@ +#!/bin/sh +# +# Minimal regression test suite. + +IAM=$(basename $0) + +if [ ! -d tests/outputs ]; then + mkdir tests/outputs +fi + +dhcpd-pools -c $top_srcdir/tests/confs/$IAM --color=never \ + -l $top_srcdir/tests/leases/$IAM -o tests/outputs/$IAM +diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM +exit $? diff --git a/tests/cidr-v4 b/tests/cidr-v4 new file mode 120000 index 0000000..61a58b0 --- /dev/null +++ b/tests/cidr-v4 @@ -0,0 +1 @@ +test.sh \ No newline at end of file diff --git a/tests/cidr-v6 b/tests/cidr-v6 new file mode 120000 index 0000000..61a58b0 --- /dev/null +++ b/tests/cidr-v6 @@ -0,0 +1 @@ +test.sh \ No newline at end of file diff --git a/tests/confs/binding-states b/tests/confs/binding-states new file mode 120000 index 0000000..ceb7cbb --- /dev/null +++ b/tests/confs/binding-states @@ -0,0 +1 @@ +complete \ No newline at end of file diff --git a/tests/confs/cidr-v4 b/tests/confs/cidr-v4 new file mode 100644 index 0000000..18ba31c --- /dev/null +++ b/tests/confs/cidr-v4 @@ -0,0 +1,31 @@ +shared-network example1 { + subnet 10.0.0.0 netmask 255.255.255.0 { + pool { + range 10.0.0.1/27; + } + } + subnet 10.1.0.0 netmask 255.255.255.0 { + pool { + range 10.1.0.1/27; + } + } +} + +shared-network example2 { + subnet 10.2.0.0 netmask 255.255.255.0 { + pool { + range 10.2.0.1/27; + } + } + subnet 10.3.0.0 netmask 255.255.255.0 { + pool { + range 10.3.0.1/27; + } + } +} + +subnet 10.4.0.0 netmask 255.255.255.0 { + pool { + range 10.4.0.1/28; + } +} diff --git a/tests/confs/cidr-v6 b/tests/confs/cidr-v6 new file mode 100644 index 0000000..a57036c --- /dev/null +++ b/tests/confs/cidr-v6 @@ -0,0 +1,10 @@ +subnet6 dead:abba:1000::/56 { + range6 dead:abba:1000::2/120; + prefix6 dead:abba:1000:0100:: dead:abba:1000:ff00::/56; +} + +subnet6 dead:abba:40ff::/56 { + range6 dead:abba:4000::2/120; + prefix6 dead:abba:4000:0100:: dead:abba:4000:ff00::/56; +} + diff --git a/tests/confs/formats b/tests/confs/formats new file mode 120000 index 0000000..ceb7cbb --- /dev/null +++ b/tests/confs/formats @@ -0,0 +1 @@ +complete \ No newline at end of file diff --git a/tests/confs/shnet-alarm b/tests/confs/shnet-alarm deleted file mode 100644 index 0ef9eb0..0000000 --- a/tests/confs/shnet-alarm +++ /dev/null @@ -1,31 +0,0 @@ -shared-network example1 { - subnet 10.0.0.0 netmask 255.255.255.0 { - pool { - range 10.0.0.1 10.0.0.20; - } - } - subnet 10.1.0.0 netmask 255.255.255.0 { - pool { - range 10.1.0.1 10.1.0.20; - } - } -} - -shared-network example2 { - subnet 10.2.0.0 netmask 255.255.255.0 { - pool { - range 10.2.0.1 10.2.0.20; - } - } - subnet 10.3.0.0 netmask 255.255.255.0 { - pool { - range 10.3.0.1 10.3.0.20; - } - } -} - -subnet 10.4.0.0 netmask 255.255.255.0 { - pool { - range 10.4.0.1 10.4.0.20; - } -} diff --git a/tests/confs/shnet-alarm b/tests/confs/shnet-alarm new file mode 120000 index 0000000..ceb7cbb --- /dev/null +++ b/tests/confs/shnet-alarm @@ -0,0 +1 @@ +complete \ No newline at end of file diff --git a/tests/confs/shufled b/tests/confs/shufled new file mode 120000 index 0000000..ceb7cbb --- /dev/null +++ b/tests/confs/shufled @@ -0,0 +1 @@ +complete \ No newline at end of file diff --git a/tests/confs/statuses b/tests/confs/statuses new file mode 120000 index 0000000..ceb7cbb --- /dev/null +++ b/tests/confs/statuses @@ -0,0 +1 @@ +complete \ No newline at end of file diff --git a/tests/errors b/tests/errors new file mode 100755 index 0000000..49a4f11 --- /dev/null +++ b/tests/errors @@ -0,0 +1,48 @@ +#!/bin/sh +# +# Test error inputs. + +IAM=$(basename $0) + +if [ ! -d tests/outputs ]; then + mkdir tests/outputs +fi + +echo '=== output mask' >| tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/complete \ + -L 88 >> tests/outputs/$IAM 2>&1 + +echo '=== unknown specifier' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/complete \ + --skip=okish >> tests/outputs/$IAM 2>&1 + +echo '=== color mode' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/complete \ + --color=sometimes >> tests/outputs/$IAM 2>&1 + +echo '=== IPv5' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/complete \ + --ip-version=5 >> tests/outputs/$IAM 2>&1 + +echo '=== missing conf' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/complete_NXFILE -l $top_srcdir/tests/leases/complete 2>&1 | \ + sed 's/: ..\/..\/tests/: .\/tests/'>> tests/outputs/$IAM + +echo '=== missing leases' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/complete_NXFILE 2>&1 | \ + sed 's/: ..\/..\/tests/: .\/tests/' >> tests/outputs/$IAM + +echo '=== html table' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/complete \ + --format=html >> tests/outputs/$IAM 2>&1 + +echo '=== none existing format' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/complete \ + -fz >> tests/outputs/$IAM 2>&1 + +echo '=== broken percent input' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/complete \ + --warning=eighty >> tests/outputs/$IAM 2>&1 + +diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM +exit $? diff --git a/tests/expected/big-small b/tests/expected/big-small deleted file mode 100644 index da14b05..0000000 --- a/tests/expected/big-small +++ /dev/null @@ -1,10 +0,0 @@ -Ranges: -shared net name first ip last ip max cur percent touch t+c t+c perc -All networks 10.0.0.1 - 10.0.0.10 10 10 100.000 0 10 100.000 - -Shared networks: -name max cur percent touch t+c t+c perc - -Sum of all ranges: -name max cur percent touch t+c t+c perc -All networks 10 10 100.000 0 10 100.000 diff --git a/tests/expected/big-small b/tests/expected/big-small new file mode 120000 index 0000000..8fd3246 --- /dev/null +++ b/tests/expected/big-small @@ -0,0 +1 @@ +simple \ No newline at end of file diff --git a/tests/expected/binding-states b/tests/expected/binding-states new file mode 100644 index 0000000..840db2c --- /dev/null +++ b/tests/expected/binding-states @@ -0,0 +1,16 @@ +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc bu bu perc +example1 10.0.0.1 - 10.0.0.20 20 4 20.000 3 7 35.000 2 10.000 +example1 10.1.0.1 - 10.1.0.20 20 10 50.000 0 10 50.000 0 0.000 +example2 10.2.0.1 - 10.2.0.20 20 8 40.000 0 8 40.000 0 0.000 +example2 10.3.0.1 - 10.3.0.20 20 9 45.000 0 9 45.000 0 0.000 +All networks 10.4.0.1 - 10.4.0.20 20 5 25.000 0 5 25.000 0 0.000 + +Shared networks: +name max cur percent touch t+c t+c perc bu bu perc +example1 40 14 35.000 3 17 42.500 2 5.000 +example2 40 17 42.500 0 17 42.500 0 0.000 + +Sum of all ranges: +name max cur percent touch t+c t+c perc bu bu perc +All networks 100 36 36.000 3 39 39.000 2 2.000 diff --git a/tests/expected/bootp b/tests/expected/bootp deleted file mode 100644 index da14b05..0000000 --- a/tests/expected/bootp +++ /dev/null @@ -1,10 +0,0 @@ -Ranges: -shared net name first ip last ip max cur percent touch t+c t+c perc -All networks 10.0.0.1 - 10.0.0.10 10 10 100.000 0 10 100.000 - -Shared networks: -name max cur percent touch t+c t+c perc - -Sum of all ranges: -name max cur percent touch t+c t+c perc -All networks 10 10 100.000 0 10 100.000 diff --git a/tests/expected/bootp b/tests/expected/bootp new file mode 120000 index 0000000..8fd3246 --- /dev/null +++ b/tests/expected/bootp @@ -0,0 +1 @@ +simple \ No newline at end of file diff --git a/tests/expected/cidr-v4 b/tests/expected/cidr-v4 new file mode 100644 index 0000000..db0e50e --- /dev/null +++ b/tests/expected/cidr-v4 @@ -0,0 +1,16 @@ +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc +example1 10.0.0.1 - 10.0.0.31 31 11 35.484 0 11 35.484 +example1 10.1.0.1 - 10.1.0.31 31 10 32.258 0 10 32.258 +example2 10.2.0.1 - 10.2.0.31 31 8 25.806 0 8 25.806 +example2 10.3.0.1 - 10.3.0.31 31 9 29.032 0 9 29.032 +All networks 10.4.0.1 - 10.4.0.15 15 5 33.333 0 5 33.333 + +Shared networks: +name max cur percent touch t+c t+c perc +example1 62 21 33.871 0 21 33.871 +example2 62 17 27.419 0 17 27.419 + +Sum of all ranges: +name max cur percent touch t+c t+c perc +All networks 139 43 30.935 0 43 30.935 diff --git a/tests/expected/cidr-v6 b/tests/expected/cidr-v6 new file mode 100644 index 0000000..04a2462 --- /dev/null +++ b/tests/expected/cidr-v6 @@ -0,0 +1,11 @@ +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc +All networks dead:abba:1000::2 - dead:abba:1000::ff 254 0 0.000 0 0 0.000 +All networks dead:abba:4000::2 - dead:abba:4000::ff 254 1 0.394 0 1 0.394 + +Shared networks: +name max cur percent touch t+c t+c perc + +Sum of all ranges: +name max cur percent touch t+c t+c perc +All networks 508 1 0.197 0 1 0.197 diff --git a/tests/expected/errors b/tests/expected/errors new file mode 100644 index 0000000..b85e282 --- /dev/null +++ b/tests/expected/errors @@ -0,0 +1,18 @@ +=== output mask +dhcpd-pools: return_limit: output mask '88' is illegal +=== unknown specifier +dhcpd-pools: unknown --skip specifier: okish +=== color mode +dhcpd-pools: unknown color mode: 'sometimes' +=== IPv5 +dhcpd-pools: unknown --ip-version argument: 5 +=== missing conf +dhcpd-pools: parse_config: ./tests/confs/complete_NXFILE: No such file or directory +=== missing leases +dhcpd-pools: parse_leases: ./tests/leases/complete_NXFILE: No such file or directory +=== html table +dhcpd-pools: html table only output format is deprecated +=== none existing format +dhcpd-pools: unknown output format: 'z' +=== broken percent input +dhcpd-pools: illegal argument: 'eighty' diff --git a/tests/expected/formats b/tests/expected/formats new file mode 100644 index 0000000..6aa6432 --- /dev/null +++ b/tests/expected/formats @@ -0,0 +1,284 @@ +=== color text +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc +example1 10.0.0.1 - 10.0.0.20 20 11 55.000 0 11 55.000 +example1 10.1.0.1 - 10.1.0.20 20 10 50.000 0 10 50.000 +example2 10.2.0.1 - 10.2.0.20 20 8 40.000 0 8 40.000 +example2 10.3.0.1 - 10.3.0.20 20 9 45.000 0 9 45.000 +All networks 10.4.0.1 - 10.4.0.20 20 5 25.000 0 5 25.000 + +Shared networks: +name max cur percent touch t+c t+c perc +example1 40 21 52.500 0 21 52.500 +example2 40 17 42.500 0 17 42.500 + +Sum of all ranges: +name max cur percent touch t+c t+c perc +All networks 100 43 43.000 0 43 43.000 +=== html + + + +ISC dhcpd dhcpd-pools output + + + + + + + + +

+

ISC DHCPD status

+

Sum of all

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
namemaxcurfreepercenttoucht+ct+c perc
All networks100435743.00004343.000
+

Shared networks

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namemaxcurfreepercenttoucht+ct+c perc
example140211952.502152.500
example240172342.501742.500
+

Ranges

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
shared net namefirst iplast ipmaxcurfreepercenttoucht+ct+c perc
example110.0.0.110.0.0.20201195501155.000
example110.1.0.110.1.0.202010105001050.000
example210.2.0.110.2.0.2020812400840.000
example210.3.0.110.3.0.2020911450945.000
All networks10.4.0.110.4.0.2020515250525.000
+
+ + + + + +=== xml + + + example1 + 10.0.0.1 - 10.0.0.20 + 20 + 11 + 0 + 9 + + + example1 + 10.1.0.1 - 10.1.0.20 + 20 + 10 + 0 + 10 + + + example2 + 10.2.0.1 - 10.2.0.20 + 20 + 8 + 0 + 12 + + + example2 + 10.3.0.1 - 10.3.0.20 + 20 + 9 + 0 + 11 + + + All networks + 10.4.0.1 - 10.4.0.20 + 20 + 5 + 0 + 15 + + + example1 + 40 + 21 + 0 + 19 + + + example2 + 40 + 17 + 0 + 23 + + + All networks + 100 + 43 + 0 + 57 + + +=== csv +"Ranges:" +"shared net name","first ip","last ip","max","cur","percent","touch","t+c","t+c perc" +"example1","10.0.0.1","10.0.0.20","20","11","55.000","0","11","55.000" +"example1","10.1.0.1","10.1.0.20","20","10","50.000","0","10","50.000" +"example2","10.2.0.1","10.2.0.20","20","8","40.000","0","8","40.000" +"example2","10.3.0.1","10.3.0.20","20","9","45.000","0","9","45.000" +"All networks","10.4.0.1","10.4.0.20","20","5","25.000","0","5","25.000" + +"Shared networks:" +"name","max","cur","percent","touch","t+c","t+c perc" +"example1","40","21","52.500","0","21","52.500" +"example2","40","17","42.500","0","17","42.500" + +"Sum of all ranges:" +"name","max","cur","percent","touch","t+c","t+c perc" +"All networks","100","43","43.000","0","43","43.000" +=== json +{ + "subnets": [ + { "location":"example1", "range":"10.0.0.1 - 10.0.0.20", "first_ip":"10.0.0.1", "last_ip":"10.0.0.20", "defined":20, "used":11, "touched":0, "free":9, "percent":55, "touch_count":11, "touch_percent":55, "status":0 }, + { "location":"example1", "range":"10.1.0.1 - 10.1.0.20", "first_ip":"10.1.0.1", "last_ip":"10.1.0.20", "defined":20, "used":10, "touched":0, "free":10, "percent":50, "touch_count":10, "touch_percent":50, "status":0 }, + { "location":"example2", "range":"10.2.0.1 - 10.2.0.20", "first_ip":"10.2.0.1", "last_ip":"10.2.0.20", "defined":20, "used":8, "touched":0, "free":12, "percent":40, "touch_count":8, "touch_percent":40, "status":0 }, + { "location":"example2", "range":"10.3.0.1 - 10.3.0.20", "first_ip":"10.3.0.1", "last_ip":"10.3.0.20", "defined":20, "used":9, "touched":0, "free":11, "percent":45, "touch_count":9, "touch_percent":45, "status":0 }, + { "location":"All networks", "range":"10.4.0.1 - 10.4.0.20", "first_ip":"10.4.0.1", "last_ip":"10.4.0.20", "defined":20, "used":5, "touched":0, "free":15, "percent":25, "touch_count":5, "touch_percent":25, "status":0 } + ], + "shared-networks": [ + { "location":"example1", "defined":40, "used":21, "touched":0, "free":19, "percent":52.5, "touch_count":21, "touch_percent":52.5, "status":0 }, + { "location":"example2", "defined":40, "used":17, "touched":0, "free":23, "percent":42.5, "touch_count":17, "touch_percent":42.5, "status":0 } + ] +} +=== perfdata +CRITICAL: dhcpd-pools: Ranges - crit: 3 warn: 2 ok: 0; | range_crit=3 range_warn=2 range_ok=0 10.4.0.1_r=5;4;8;0;20 10.4.0.1_rt=0 10.3.0.1_r=9;4;8;0;20 10.3.0.1_rt=0 10.2.0.1_r=8;4;8;0;20 10.2.0.1_rt=0 10.1.0.1_r=10;4;8;0;20 10.1.0.1_rt=0 10.0.0.1_r=11;4;8;0;20 10.0.0.1_rt=0 +Shared nets - crit: 2 warn: 0 ok: 0; | snet_crit=2 snet_warn=0 snet_ok=0 'example1_s'=21;8;16;0;40 'example1_st'=0 'example2_s'=17;8;16;0;40 'example2_st'=0 + diff --git a/tests/expected/parser b/tests/expected/parser new file mode 120000 index 0000000..ceb7cbb --- /dev/null +++ b/tests/expected/parser @@ -0,0 +1 @@ +complete \ No newline at end of file diff --git a/tests/expected/shufled b/tests/expected/shufled new file mode 100644 index 0000000..ed34a85 --- /dev/null +++ b/tests/expected/shufled @@ -0,0 +1,16 @@ +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc +All networks 10.4.0.1 - 10.4.0.20 20 3 15.000 0 3 15.000 +example1 10.0.0.1 - 10.0.0.20 20 9 45.000 0 9 45.000 +example1 10.1.0.1 - 10.1.0.20 20 4 20.000 0 4 20.000 +example2 10.2.0.1 - 10.2.0.20 20 4 20.000 0 4 20.000 +example2 10.3.0.1 - 10.3.0.20 20 3 15.000 0 3 15.000 + +Shared networks: +name max cur percent touch t+c t+c perc +example1 40 13 32.500 0 13 32.500 +example2 40 7 17.500 0 7 17.500 + +Sum of all ranges: +name max cur percent touch t+c t+c perc +All networks 100 23 23.000 0 23 23.000 diff --git a/tests/expected/statuses b/tests/expected/statuses new file mode 100644 index 0000000..908b5a2 --- /dev/null +++ b/tests/expected/statuses @@ -0,0 +1,29 @@ +{ + "subnets": [ + { "location":"example1", "range":"10.0.0.1 - 10.0.0.20", "first_ip":"10.0.0.1", "last_ip":"10.0.0.20", "defined":20, "used":11, "touched":0, "free":9, "percent":55, "touch_count":11, "touch_percent":55, "status":4 }, + { "location":"example1", "range":"10.1.0.1 - 10.1.0.20", "first_ip":"10.1.0.1", "last_ip":"10.1.0.20", "defined":20, "used":10, "touched":0, "free":10, "percent":50, "touch_count":10, "touch_percent":50, "status":4 }, + { "location":"example2", "range":"10.2.0.1 - 10.2.0.20", "first_ip":"10.2.0.1", "last_ip":"10.2.0.20", "defined":20, "used":8, "touched":0, "free":12, "percent":40, "touch_count":8, "touch_percent":40, "status":4 }, + { "location":"example2", "range":"10.3.0.1 - 10.3.0.20", "first_ip":"10.3.0.1", "last_ip":"10.3.0.20", "defined":20, "used":9, "touched":0, "free":11, "percent":45, "touch_count":9, "touch_percent":45, "status":4 }, + { "location":"10.4.0.0/24", "range":"10.4.0.1 - 10.4.0.20", "first_ip":"10.4.0.1", "last_ip":"10.4.0.20", "defined":20, "used":5, "touched":0, "free":15, "percent":25, "touch_count":5, "touch_percent":25, "status":4 } + ], + "shared-networks": [ + { "location":"example1", "defined":40, "used":21, "touched":0, "free":19, "percent":52.5, "touch_count":21, "touch_percent":52.5, "status":2 }, + { "location":"example2", "defined":40, "used":17, "touched":0, "free":23, "percent":42.5, "touch_count":17, "touch_percent":42.5, "status":2 }, + { "location":"10.4.0.0/24", "defined":20, "used":5, "touched":0, "free":15, "percent":25, "touch_count":5, "touch_percent":25, "status":1 } + ] +} +== minsize +{ + "subnets": [ + { "location":"example1", "range":"10.0.0.1 - 10.0.0.20", "first_ip":"10.0.0.1", "last_ip":"10.0.0.20", "defined":20, "used":11, "touched":0, "free":9, "percent":55, "touch_count":11, "touch_percent":55, "status":3 }, + { "location":"example1", "range":"10.1.0.1 - 10.1.0.20", "first_ip":"10.1.0.1", "last_ip":"10.1.0.20", "defined":20, "used":10, "touched":0, "free":10, "percent":50, "touch_count":10, "touch_percent":50, "status":3 }, + { "location":"example2", "range":"10.2.0.1 - 10.2.0.20", "first_ip":"10.2.0.1", "last_ip":"10.2.0.20", "defined":20, "used":8, "touched":0, "free":12, "percent":40, "touch_count":8, "touch_percent":40, "status":3 }, + { "location":"example2", "range":"10.3.0.1 - 10.3.0.20", "first_ip":"10.3.0.1", "last_ip":"10.3.0.20", "defined":20, "used":9, "touched":0, "free":11, "percent":45, "touch_count":9, "touch_percent":45, "status":3 }, + { "location":"10.4.0.0/24", "range":"10.4.0.1 - 10.4.0.20", "first_ip":"10.4.0.1", "last_ip":"10.4.0.20", "defined":20, "used":5, "touched":0, "free":15, "percent":25, "touch_count":5, "touch_percent":25, "status":3 } + ], + "shared-networks": [ + { "location":"example1", "defined":40, "used":21, "touched":0, "free":19, "percent":52.5, "touch_count":21, "touch_percent":52.5, "status":2 }, + { "location":"example2", "defined":40, "used":17, "touched":0, "free":23, "percent":42.5, "touch_count":17, "touch_percent":42.5, "status":2 }, + { "location":"10.4.0.0/24", "defined":20, "used":5, "touched":0, "free":15, "percent":25, "touch_count":5, "touch_percent":25, "status":3 } + ] +} diff --git a/tests/formats b/tests/formats new file mode 100755 index 0000000..254a37b --- /dev/null +++ b/tests/formats @@ -0,0 +1,37 @@ +#!/bin/sh +# +# Minimal regression test suite. + +IAM=$(basename $0) + +if [ ! -d tests/outputs ]; then + mkdir tests/outputs +fi + +echo '=== color text' > tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/$IAM --color=always \ + -l $top_srcdir/tests/leases/$IAM >> tests/outputs/$IAM + +echo '=== html' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/$IAM --color=always --format=H \ + -l $top_srcdir/tests/leases/$IAM | + sed '/was last modified at/d; /Generated using/d' >> tests/outputs/$IAM + +echo '=== xml' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/$IAM -fx \ + -l $top_srcdir/tests/leases/$IAM >> tests/outputs/$IAM + +echo '=== csv' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/$IAM -fc \ + -l $top_srcdir/tests/leases/$IAM >> tests/outputs/$IAM + +echo '=== json' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/$IAM -fj --limit=33 \ + -l $top_srcdir/tests/leases/$IAM >> tests/outputs/$IAM + +echo '=== perfdata' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/$IAM --perfdata --warning=20 --critical=40 \ + -l $top_srcdir/tests/leases/$IAM >> tests/outputs/$IAM + +diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM +exit $? diff --git a/tests/leases/binding-states b/tests/leases/binding-states new file mode 100644 index 0000000..0d9929f --- /dev/null +++ b/tests/leases/binding-states @@ -0,0 +1,241 @@ +lease 10.0.0.0 { + binding state active; + hardware ethernet 00:00:00:00:00:00; +} + +lease 10.0.0.1 { + binding state free; + hardware ethernet 00:00:00:00:00:01; +} +lease 10.0.0.1 { + binding state active; + hardware ethernet 00:00:00:00:00:01; +} +lease 10.0.0.1 { + binding state abandoned; + hardware ethernet 00:00:00:00:00:01; +} +lease 10.0.0.1 { + binding state expired; + hardware ethernet 00:00:00:00:00:01; +} +lease 10.0.0.1 { + binding state released; + hardware ethernet 00:00:00:00:00:01; +} +lease 10.0.0.1 { + binding state backup; + hardware ethernet 00:00:00:00:00:01; +} + +lease 10.0.0.2 { + binding state free; + hardware ethernet 00:00:00:00:00:02; +} +lease 10.0.0.2 { + binding state abandoned; + hardware ethernet 00:00:00:00:00:02; +} +lease 10.0.0.2 { + binding state expired; + hardware ethernet 00:00:00:00:00:02; +} +lease 10.0.0.2 { + binding state released; + hardware ethernet 00:00:00:00:00:02; +} +lease 10.0.0.2 { + binding state backup; + hardware ethernet 00:00:00:00:00:02; +} +lease 10.0.0.2 { + binding state active; + hardware ethernet 00:00:00:00:00:02; +} + +lease 10.0.0.3 { + binding state free; + hardware ethernet 00:00:00:00:00:03; +} +lease 10.0.0.4 { + binding state active; + hardware ethernet 00:00:00:00:00:04; +} +lease 10.0.0.5 { + binding state expired; + hardware ethernet 00:00:00:00:00:05; +} +lease 10.0.0.6 { + binding state released; + hardware ethernet 00:00:00:00:00:06; +} +lease 10.0.0.7 { + binding state backup; + hardware ethernet 00:00:00:00:00:07; +} +lease 10.0.0.8 { + binding state none-existing-state; + hardware ethernet 00:00:00:00:00:08; +} +lease 10.0.0.9 { + binding state active; + hardware ethernet 00:00:00:00:00:09; +} +lease 10.0.0.20 { + binding state active; + hardware ethernet 00:00:00:00:00:10; +} +lease 10.0.0.21 { + binding state active; + hardware ethernet 00:00:00:00:00:11; +} + + +lease 10.1.0.0 { + binding state active; + hardware ethernet 00:00:00:00:00:00; +} +lease 10.1.0.1 { + binding state active; + hardware ethernet 00:00:00:00:00:01; +} +lease 10.1.0.2 { + binding state active; + hardware ethernet 00:00:00:00:00:02; +} +lease 10.1.0.3 { + binding state active; + hardware ethernet 00:00:00:00:00:03; +} +lease 10.1.0.4 { + binding state active; + hardware ethernet 00:00:00:00:00:04; +} +lease 10.1.0.5 { + binding state active; + hardware ethernet 00:00:00:00:00:05; +} +lease 10.1.0.6 { + binding state active; + hardware ethernet 00:00:00:00:00:06; +} +lease 10.1.0.7 { + binding state active; + hardware ethernet 00:00:00:00:00:07; +} +lease 10.1.0.8 { + binding state active; + hardware ethernet 00:00:00:00:00:08; +} +lease 10.1.0.9 { + binding state active; + hardware ethernet 00:00:00:00:00:09; +} +lease 10.1.0.10 { + binding state active; + hardware ethernet 00:00:00:00:00:10; +} + + +lease 10.2.0.0 { + binding state active; + hardware ethernet 00:00:00:00:00:00; +} +lease 10.2.0.1 { + binding state active; + hardware ethernet 00:00:00:00:00:01; +} +lease 10.2.0.2 { + binding state active; + hardware ethernet 00:00:00:00:00:02; +} +lease 10.2.0.3 { + binding state active; + hardware ethernet 00:00:00:00:00:03; +} +lease 10.2.0.4 { + binding state active; + hardware ethernet 00:00:00:00:00:04; +} +lease 10.2.0.5 { + binding state active; + hardware ethernet 00:00:00:00:00:05; +} +lease 10.2.0.6 { + binding state active; + hardware ethernet 00:00:00:00:00:06; +} +lease 10.2.0.7 { + binding state active; + hardware ethernet 00:00:00:00:00:07; +} +lease 10.2.0.8 { + binding state active; + hardware ethernet 00:00:00:00:00:08; +} + +lease 10.3.0.0 { + binding state active; + hardware ethernet 00:00:00:00:00:00; +} +lease 10.3.0.1 { + binding state active; + hardware ethernet 00:00:00:00:00:01; +} +lease 10.3.0.2 { + binding state active; + hardware ethernet 00:00:00:00:00:02; +} +lease 10.3.0.3 { + binding state active; + hardware ethernet 00:00:00:00:00:03; +} +lease 10.3.0.4 { + binding state active; + hardware ethernet 00:00:00:00:00:04; +} +lease 10.3.0.5 { + binding state active; + hardware ethernet 00:00:00:00:00:05; +} +lease 10.3.0.6 { + binding state active; + hardware ethernet 00:00:00:00:00:06; +} +lease 10.3.0.7 { + binding state active; + hardware ethernet 00:00:00:00:00:07; +} +lease 10.3.0.8 { + binding state active; + hardware ethernet 00:00:00:00:00:08; +} +lease 10.3.0.9 { + binding state active; + hardware ethernet 00:00:00:00:00:09; +} + +lease 10.4.0.0 { + binding state active; + hardware ethernet 00:00:00:00:00:00; +} +lease 10.4.0.1 { + binding state active; + hardware ethernet 00:00:00:00:00:01; +} +lease 10.4.0.2 { + binding state active; + hardware ethernet 00:00:00:00:00:02; +} +lease 10.4.0.3 { + binding state active; + hardware ethernet 00:00:00:00:00:03; +} +lease 10.4.0.4 { + binding state active; + hardware ethernet 00:00:00:00:00:04; +} +lease 10.4.0.5 { + binding state active; + hardware ethernet 00:00:00:00:00:05; +} diff --git a/tests/leases/cidr-v4 b/tests/leases/cidr-v4 new file mode 120000 index 0000000..ceb7cbb --- /dev/null +++ b/tests/leases/cidr-v4 @@ -0,0 +1 @@ +complete \ No newline at end of file diff --git a/tests/leases/cidr-v6 b/tests/leases/cidr-v6 new file mode 120000 index 0000000..82e3978 --- /dev/null +++ b/tests/leases/cidr-v6 @@ -0,0 +1 @@ +v6 \ No newline at end of file diff --git a/tests/leases/formats b/tests/leases/formats new file mode 120000 index 0000000..ceb7cbb --- /dev/null +++ b/tests/leases/formats @@ -0,0 +1 @@ +complete \ No newline at end of file diff --git a/tests/leases/parser b/tests/leases/parser new file mode 120000 index 0000000..ceb7cbb --- /dev/null +++ b/tests/leases/parser @@ -0,0 +1 @@ +complete \ No newline at end of file diff --git a/tests/leases/shufled b/tests/leases/shufled new file mode 100644 index 0000000..723c6ec --- /dev/null +++ b/tests/leases/shufled @@ -0,0 +1,198 @@ +lease 10.0.0.7 { +} + binding state active; + hardware ethernet 00:00:00:00:00:07; + hardware ethernet 00:00:00:00:00:10; +lease 10.2.0.4 { +lease 10.2.0.6 { +lease 10.0.0.11 { + binding state active; +} + hardware ethernet 00:00:00:00:00:03; +lease 10.3.0.9 { +} + hardware ethernet 00:00:00:00:00:04; +} + binding state active; +lease 10.1.0.7 { +} +} +lease 10.1.0.9 { + + hardware ethernet 00:00:00:00:00:07; + hardware ethernet 00:00:00:00:00:01; + binding state active; + binding state active; +} +} +} + binding state active; +lease 10.4.0.1 { +} +lease 10.0.0.0 { +} + hardware ethernet 00:00:00:00:00:10; +} +} + binding state active; + hardware ethernet 00:00:00:00:00:00; +} +} + binding state active; +} +lease 10.3.0.2 { + hardware ethernet 00:00:00:00:00:01; + binding state active; + hardware ethernet 00:00:00:00:00:02; + binding state active; +lease 10.1.0.3 { + binding state active; +} + binding state active; +} +lease 10.1.0.1 { +lease 10.3.0.8 { +lease 10.2.0.1 { + hardware ethernet 00:00:00:00:00:07; +} +} +lease 10.4.0.0 { + hardware ethernet 00:00:00:00:00:01; +} + binding state active; + hardware ethernet 00:00:00:00:00:02; +lease 10.0.0.10 { + binding state active; +} + hardware ethernet 00:00:00:00:00:04; + hardware ethernet 00:00:00:00:00:11; + hardware ethernet 00:00:00:00:00:08; + binding state active; + hardware ethernet 00:00:00:00:00:08; + binding state active; +lease 10.2.0.5 { + hardware ethernet 00:00:00:00:00:01; +lease 10.1.0.8 { + +lease 10.0.0.3 { + binding state active; + binding state active; +lease 10.0.0.1 { +lease 10.4.0.5 { + hardware ethernet 00:00:00:00:00:06; + + hardware ethernet 00:00:00:00:00:06; + hardware ethernet 00:00:00:00:00:02; +lease 10.2.0.3 { + binding state active; +lease 10.1.0.10 { + binding state active; +} +} + binding state active; + hardware ethernet 00:00:00:00:00:03; +} +} + hardware ethernet 00:00:00:00:00:05; +lease 10.0.0.2 { +} + binding state active; +} + hardware ethernet 00:00:00:00:00:06; +lease 10.3.0.6 { +lease 10.0.0.8 { + hardware ethernet 00:00:00:00:00:01; +lease 10.4.0.3 { +} +} +} + binding state active; + binding state active; +lease 10.1.0.6 { +lease 10.1.0.2 { + hardware ethernet 00:00:00:00:00:05; + binding state active; +} +} +lease 10.2.0.7 { +} +} + hardware ethernet 00:00:00:00:00:03; + binding state active; + +} + binding state active; + hardware ethernet 00:00:00:00:00:03; +} +lease 10.1.0.0 { + hardware ethernet 00:00:00:00:00:04; + binding state active; +} +lease 10.3.0.1 { +lease 10.2.0.2 { + binding state active; + hardware ethernet 00:00:00:00:00:09; +} + binding state active; + hardware ethernet 00:00:00:00:00:00; + binding state active; +lease 10.0.0.6 { + hardware ethernet 00:00:00:00:00:02; + binding state active; +} + binding state active; +} +lease 10.3.0.0 { +lease 10.0.0.9 { + binding state active; +lease 10.0.0.4 { + hardware ethernet 00:00:00:00:00:08; + binding state active; + hardware ethernet 00:00:00:00:00:07; + hardware ethernet 00:00:00:00:00:00; + binding state active; +lease 10.1.0.4 { +lease 10.4.0.2 { + binding state active; +} +} +lease 10.3.0.4 { + hardware ethernet 00:00:00:00:00:05; + hardware ethernet 00:00:00:00:00:05; + binding state active; + binding state active; +lease 10.0.0.5 { + hardware ethernet 00:00:00:00:00:04; + binding state active; + hardware ethernet 00:00:00:00:00:02; + binding state active; + hardware ethernet 00:00:00:00:00:09; + hardware ethernet 00:00:00:00:00:08; +lease 10.2.0.8 { +} + binding state active; + binding state active; + hardware ethernet 00:00:00:00:00:06; + hardware ethernet 00:00:00:00:00:00; +lease 10.3.0.7 { +lease 10.4.0.4 { +} + hardware ethernet 00:00:00:00:00:04; +} + binding state active; +lease 10.3.0.3 { + hardware ethernet 00:00:00:00:00:03; +lease 10.2.0.0 { + binding state active; + binding state active; + hardware ethernet 00:00:00:00:00:05; + + binding state active; +} + hardware ethernet 00:00:00:00:00:00; + binding state active; +lease 10.1.0.5 { + hardware ethernet 00:00:00:00:00:09; +lease 10.3.0.5 { +} + diff --git a/tests/leases/statuses b/tests/leases/statuses new file mode 120000 index 0000000..ceb7cbb --- /dev/null +++ b/tests/leases/statuses @@ -0,0 +1 @@ +complete \ No newline at end of file diff --git a/tests/parser b/tests/parser new file mode 100755 index 0000000..94b4e7d --- /dev/null +++ b/tests/parser @@ -0,0 +1,30 @@ +#!/bin/sh +# +# Minimal regression test suite. + +IAM=$(basename $0) + +if [ ! -d tests/outputs ]; then + mkdir tests/outputs +fi +cat <"./${IAM}-conf" +#shared-network "example3 " { +# subnet 10.0.6.0 netmask 255.255.255.0 { +# pool { +# range 10.0.6.1 10.0.6.20; +# } +# } +# subnet 10.1.7.0 netmask 255.255.255.0 { +# pool { +# range 10.1.7.1 10.1.7.20; +# } +# } +#} + +include "tests/confs/complete"; +EOF +dhcpd-pools -c "./${IAM}-conf" --color=never \ + -l $top_srcdir/tests/leases/$IAM -o tests/outputs/$IAM +diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM +rm -f "./${IAM}-conf" +exit $? diff --git a/tests/shufled b/tests/shufled new file mode 100755 index 0000000..4f38984 --- /dev/null +++ b/tests/shufled @@ -0,0 +1,15 @@ +#!/bin/sh +# +# Minimal regression test suite. + +IAM=$(basename $0) + +if [ ! -d tests/outputs ]; then + mkdir tests/outputs +fi + +dhcpd-pools -c $top_srcdir/tests/confs/$IAM --color=never \ + --sort nimcptTenimcptTe --sort nimcptTe \ + -l $top_srcdir/tests/leases/$IAM -o tests/outputs/$IAM +diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM +exit $? diff --git a/tests/statuses b/tests/statuses new file mode 100755 index 0000000..e603b8a --- /dev/null +++ b/tests/statuses @@ -0,0 +1,22 @@ +#!/bin/sh +# +# Test json status field values. + +IAM=$(basename $0) + +if [ ! -d tests/outputs ]; then + mkdir tests/outputs +fi + +dhcpd-pools -c $top_srcdir/tests/confs/$IAM --format=json -L33 \ + -l $top_srcdir/tests/leases/$IAM -o tests/outputs/$IAM \ + --warning=20 --critical=41 --all-as-shared --snet-alarms --all-as-shared + +echo '== minsize' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/$IAM --format=json --limit 33 \ + -l $top_srcdir/tests/leases/$IAM --minsize=20 \ + --warning=20 --critical=41 --all-as-shared --snet-alarms --all-as-shared \ + >> tests/outputs/$IAM + +diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM +exit $? From 0fe89808eeecea692c84117f6fa41d8f5018f315 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 14 Jan 2018 18:35:15 +0000 Subject: [PATCH 109/158] docs: fix peoples name in THANKS file to have correct characters Unicode fixes. Signed-off-by: Sami Kerola --- THANKS | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/THANKS b/THANKS index badafec..6e76373 100644 --- a/THANKS +++ b/THANKS @@ -5,23 +5,23 @@ Project is maintained by Sami Kerola People who reported problems, give improvement suggestions or even contributed code. -Otto J. Mäkelä +Otto J. Mäkelä Mika Paananen Frank Bulk Roar Pettersen Jeff Wieland Rusty -Fredrik Vöcks +Fredrik Vöcks Dan Thorson -Stian Øvrevåge +Stian ØvrevÃ¥ge Dominic Germain -Anders Låstad +Anders LÃ¥stad Thor Eivind Brantzeg Ahmed AL Dakhil Adam Ciarcinski -Rezso Gajdóczy +RezsÅ‘ Gajdóczy Robert Viou -Enno Gröper +Enno Gröper Troy D. Hanson Ryan Malek Cheer Xiao @@ -30,7 +30,7 @@ Helmut Grohne Joey D. Ryan Steinmetz Dan Pritts -Fredrik Lysén +Fredrik Lysén Conor McCarthy Wolfgang Steudel Aaron Paetznick @@ -44,4 +44,4 @@ Klaus Slott Boris Lytochkin Jeff Bailey José Bollo -Sebastián Cramatte +Sebastián Cramatte From 679d63dd9f29fcdf60c21642f6f4344e0f195653 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 24 Feb 2018 11:48:02 +0000 Subject: [PATCH 110/158] add .mailmap Signed-off-by: Sami Kerola --- .mailmap | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .mailmap diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000..7f7f47f --- /dev/null +++ b/.mailmap @@ -0,0 +1,2 @@ +Sami Kerola +Sami Kerola From a192f51545bbfd15d8bc8b053840138bb5a675c3 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 4 May 2018 21:45:36 +0100 Subject: [PATCH 111/158] output: fix implicit conversion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit src/output.c:731:38: warning: implicit conversion from ‘float’ to ‘double’ when passing argument to function [-Wdouble-promotion] Signed-off-by: Sami Kerola --- src/output.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/output.c b/src/output.c index a651ccb..9261bb1 100644 --- a/src/output.c +++ b/src/output.c @@ -726,7 +726,7 @@ static void output_double_color(struct conf_t *state, * \param type HTML tag name. * \param fl Actual payload of the printout. */ -static void output_float(FILE *restrict f, char const *restrict type, float fl) +static void output_float(FILE *restrict f, char const *restrict type, double fl) { fprintf(f, "<%s>%.3f\n", type, fl, type); } From b568725e7d0f8e49c48b1c62983daf0ca51b9f15 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 15 May 2018 21:16:38 +0100 Subject: [PATCH 112/158] main: simplify option parsing Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 79afc21..a5cb9d4 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -198,11 +198,11 @@ static char parse_command_line_opts(struct conf_t *state, int argc, char **argv) { /* Output sorting option */ struct output_sort *p = state->sorts; - size_t len; + char *ptr = optarg; while (p && p->next) p = p->next; - for (len = 0; len < strlen(optarg); len++) { + while (*ptr) { if (state->sorts == NULL) { state->sorts = xcalloc(1, sizeof(struct output_sort)); @@ -211,7 +211,7 @@ static char parse_command_line_opts(struct conf_t *state, int argc, char **argv) p->next = xcalloc(1, sizeof(struct output_sort)); p = p->next; } - p->func = field_selector(optarg[len]); + p->func = field_selector(*ptr++); } } break; From 4e7ab66fd4ba8feafa88b6bff53285761285f3e5 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 15 May 2018 21:31:52 +0100 Subject: [PATCH 113/158] fix typo Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index a5cb9d4..3883931 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -96,7 +96,7 @@ static void skip_arg_parse(struct conf_t *state, char *optarg) OPT_ARG_WARNING, OPT_ARG_CRITICAL, OPT_ARG_MINSIZE, - OPT_ARG_SUPRESSED + OPT_ARG_SUPPRESSED }; char *const tokens[] = { @@ -104,7 +104,7 @@ static void skip_arg_parse(struct conf_t *state, char *optarg) [OPT_ARG_WARNING] = "warning", [OPT_ARG_CRITICAL] = "critical", [OPT_ARG_MINSIZE] = "minsize", - [OPT_ARG_SUPRESSED] = "suppressed", + [OPT_ARG_SUPPRESSED] = "suppressed", NULL }; char *value; @@ -123,7 +123,7 @@ static void skip_arg_parse(struct conf_t *state, char *optarg) case OPT_ARG_MINSIZE: state->skip_minsize = 1; break; - case OPT_ARG_SUPRESSED: + case OPT_ARG_SUPPRESSED: state->skip_suppressed = 1; break; default: From e8e9d49ebba7bd621cade66d38c2c9b5da49c0fc Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 20 May 2018 11:46:23 +0100 Subject: [PATCH 114/158] main: move print_mac_addreses to state structure Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 8 ++++---- src/dhcpd-pools.h | 3 ++- src/getdata.c | 4 ++-- src/output.c | 18 ++++++++---------- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 3883931..9e1ced7 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -321,6 +321,9 @@ static char parse_command_line_opts(struct conf_t *state, int argc, char **argv) output_format = default_format[0]; } } + if (output_format == 'X' || output_format == 'J') { + state->print_mac_addreses = 1; + } return output_format; } @@ -355,10 +358,7 @@ int main(int argc, char **argv) /* Do the job */ parse_config(&state, 1, state.dhcpdconf_file, state.shared_net_root); - if (output_format == 'X' || output_format == 'J') - parse_leases(&state, 1); - else - parse_leases(&state, 0); + parse_leases(&state); prepare_data(&state); do_counting(&state); if (state.sorts != NULL) diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index a2715f3..1a77b1f 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -224,6 +224,7 @@ struct conf_t { double crit_count; /*!< Maximum number of free IP's before critical. */ double minsize; /*!< Minimum size of range or shared network to be considered exceeding threshold. */ unsigned int + print_mac_addreses:1, /*!< Print mac address in xml or json. */ reverse_order:1, /*!< Reverse sort order. */ backups_found:1, /*!< Indicator if dhcpd.leases file has leases in backup state. */ snet_alarms:1, /*!< Suppress alarming thresholds for ranges that are part of a shared network. */ @@ -246,7 +247,7 @@ extern void prepare_data(struct conf_t *state); extern void do_counting(struct conf_t *state); /* getdata.c */ -extern int parse_leases(struct conf_t *state, const int print_mac_addreses); +extern int parse_leases(struct conf_t *state); extern void parse_config(struct conf_t *state, const int is_include, const char *restrict config_file, struct shared_network_t *restrict shared_p); diff --git a/src/getdata.c b/src/getdata.c index ca01384..b513d5d 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -79,7 +79,7 @@ enum isc_conf_parser { /*! \brief Lease file parser. The parser can only read ISC DHCPD * dhcpd.leases file format. */ -int parse_leases(struct conf_t *state, const int print_mac_addreses) +int parse_leases(struct conf_t *state) { FILE *dhcpd_leases; char *line, *ipstring, macstring[20], *stop; @@ -144,7 +144,7 @@ int parse_leases(struct conf_t *state, const int print_mac_addreses) state->backups_found = 1; break; case PREFIX_HARDWARE_ETHERNET: - if (print_mac_addreses == 0) + if (state->print_mac_addreses == 0) break; memcpy(macstring, line + 20, 17); macstring[17] = '\0'; diff --git a/src/output.c b/src/output.c index 9261bb1..b723397 100644 --- a/src/output.c +++ b/src/output.c @@ -364,7 +364,7 @@ static int output_txt(struct conf_t *state) } /*! \brief The xml output formats. */ -static int output_xml(struct conf_t *state, const int print_mac_addreses) +static int output_xml(struct conf_t *state) { unsigned int i; struct range_t *range_p; @@ -377,7 +377,7 @@ static int output_xml(struct conf_t *state, const int print_mac_addreses) fprintf(outfile, "\n"); - if (print_mac_addreses == 1) { + if (state->print_mac_addreses) { struct leases_t *l; for (l = state->leases; l != NULL; l = l->hh.next) { @@ -449,7 +449,7 @@ static int output_xml(struct conf_t *state, const int print_mac_addreses) } /*! \brief The json output formats. */ -static int output_json(struct conf_t *state, const int print_mac_addreses) +static int output_json(struct conf_t *state) { unsigned int i = 0; struct range_t *range_p; @@ -464,7 +464,7 @@ static int output_json(struct conf_t *state, const int print_mac_addreses) fprintf(outfile, "{\n"); - if (print_mac_addreses == 1) { + if (state->print_mac_addreses) { struct leases_t *l; fprintf(outfile, " \"active_leases\": ["); @@ -1200,16 +1200,14 @@ int output_analysis(struct conf_t *state, const char output_format) ret = output_html(state); break; case 'x': - ret = output_xml(state, 0); - break; + /* fallthrough */ case 'X': - ret = output_xml(state, 1); + ret = output_xml(state); break; case 'j': - ret = output_json(state, 0); - break; + /* fallthrough */ case 'J': - ret = output_json(state, 1); + ret = output_json(state); break; case 'c': ret = output_csv(state); From 3f85360c644b79535360bf230638eabab3a2e685 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 20 May 2018 12:03:07 +0100 Subject: [PATCH 115/158] main: move output_format to state, and rename color_format Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 21 +++++++++------------ src/dhcpd-pools.h | 5 +++-- src/output.c | 18 +++++++++--------- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 9e1ced7..dd52fe9 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -133,7 +133,7 @@ static void skip_arg_parse(struct conf_t *state, char *optarg) } /*! \brief Command line options parser. */ -static char parse_command_line_opts(struct conf_t *state, int argc, char **argv) +static void parse_command_line_opts(struct conf_t *state, int argc, char **argv) { enum { OPT_SNET_ALARMS = CHAR_MAX + 1, @@ -172,7 +172,6 @@ static char parse_command_line_opts(struct conf_t *state, int argc, char **argv) {"ip-version", required_argument, NULL, OPT_SET_IPV}, {NULL, 0, NULL, 0} }; - char output_format = '\0'; int alarming = 0; while (1) { @@ -192,7 +191,7 @@ static char parse_command_line_opts(struct conf_t *state, int argc, char **argv) break; case 'f': /* Output format */ - output_format = optarg[0]; + state->output_format = optarg[0]; break; case 's': { @@ -231,7 +230,7 @@ static char parse_command_line_opts(struct conf_t *state, int argc, char **argv) case OPT_MUSTACH: #ifdef BUILD_MUSTACH state->mustach_template = optarg; - output_format = 'm'; + state->output_format = 'm'; #else error(EXIT_FAILURE, 0, "compiled without mustach support"); #endif @@ -312,19 +311,18 @@ static char parse_command_line_opts(struct conf_t *state, int argc, char **argv) } /* Output format is not defined, if alarm thresholds are then it's alarming, else use the * default. */ - if (output_format == '\0') { + if (state->output_format == '\0') { if (alarming == 1) - output_format = 'a'; + state->output_format = 'a'; else { const char *const default_format = OUTPUT_FORMAT; - output_format = default_format[0]; + state->output_format = default_format[0]; } } - if (output_format == 'X' || output_format == 'J') { + if (state->output_format == 'X' || state->output_format == 'J') { state->print_mac_addreses = 1; } - return output_format; } /*!\brief Start of execution. This will mostly call other functions one @@ -347,14 +345,13 @@ int main(int argc, char **argv) .ip_version = IPvUNKNOWN, 0 }; - char output_format; int ret_val; atexit(close_stdout); set_program_name(argv[0]); prepare_memory(&state); set_ipv_functions(&state, IPvUNKNOWN); - output_format = parse_command_line_opts(&state, argc, argv); + parse_command_line_opts(&state, argc, argv); /* Do the job */ parse_config(&state, 1, state.dhcpdconf_file, state.shared_net_root); @@ -365,7 +362,7 @@ int main(int argc, char **argv) mergesort_ranges(&state, state.ranges, state.num_ranges, NULL, 1); if (state.reverse_order == 1) flip_ranges(&state); - ret_val = output_analysis(&state, output_format); + ret_val = output_analysis(&state); clean_up(&state); return (ret_val); } diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 1a77b1f..4556e06 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -214,9 +214,10 @@ struct conf_t { enum dhcp_version ip_version; /*!< Designator if the dhcpd is running in IPv4 or IPv6 mode. */ const char *dhcpdconf_file; /*!< Path to dhcpd.conf file. */ const char *dhcpdlease_file; /*!< Path to dhcpd.leases file. */ - int output_format; /*!< Column to use in color_tags array. */ + int color_format; /*!< Column to use in color_tags array. */ struct output_sort *sorts; /*!< Linked list how to sort ranges. */ const char *output_file; /*!< Output file path. */ + char output_format; /*!< Output format, such as text, json, xml, .... */ const char *mustach_template; /*!< Mustach template file path. */ double warning; /*!< Warning percent threshold. */ double critical; /*!< Critical percent threshold. */ @@ -314,7 +315,7 @@ extern int range_output_helper(struct conf_t *state, struct output_helper_t *oh, struct range_t *range_p); extern int shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, struct shared_network_t *shared_p); -extern int output_analysis(struct conf_t *state, const char output_format); +extern int output_analysis(struct conf_t *state); /* sort.c */ extern void mergesort_ranges(struct conf_t *state, diff --git a/src/output.c b/src/output.c index b723397..264a970 100644 --- a/src/output.c +++ b/src/output.c @@ -182,7 +182,7 @@ static int start_color(struct conf_t *state, struct output_helper_t *oh, FILE *o if (oh->status == STATUS_OK) { return 0; } - fputs(color_tags[oh->status][state->output_format], outfile); + fputs(color_tags[oh->status][state->color_format], outfile); return 1; } @@ -282,7 +282,7 @@ static int output_txt(struct conf_t *state) fprintf(outfile, "%7g %8.3f", range_p->backups, oh.bup); } if (color_set) - fputs(color_tags[COLOR_RESET][state->output_format], outfile); + fputs(color_tags[COLOR_RESET][state->color_format], outfile); fprintf(outfile, "\n"); range_p++; } @@ -320,7 +320,7 @@ static int output_txt(struct conf_t *state) fprintf(outfile, "%7g %8.3f", shared_p->backups, oh.bup); } if (color_set) - fputs(color_tags[COLOR_RESET][state->output_format], outfile); + fputs(color_tags[COLOR_RESET][state->color_format], outfile); fprintf(outfile, "\n"); } } @@ -356,7 +356,7 @@ static int output_txt(struct conf_t *state) fprintf(outfile, "%7g %8.3f", state->shared_net_root->backups, oh.bup); } if (color_set) - fputs(color_tags[COLOR_RESET][state->output_format], outfile); + fputs(color_tags[COLOR_RESET][state->color_format], outfile); fprintf(outfile, "\n"); } close_outfile(outfile); @@ -1180,13 +1180,13 @@ static int output_alarming(struct conf_t *state) } /*! \brief Return output_format_names enum based on single char input. */ -int output_analysis(struct conf_t *state, const char output_format) +int output_analysis(struct conf_t *state) { int ret = 1; - switch (output_format) { + switch (state->output_format) { case 't': - state->output_format = OUT_FORM_TEXT; + state->color_format = OUT_FORM_TEXT; ret = output_txt(state); break; case 'a': @@ -1196,7 +1196,7 @@ int output_analysis(struct conf_t *state, const char output_format) error(EXIT_FAILURE, 0, "html table only output format is deprecated"); break; case 'H': - state->output_format = OUT_FORM_HTML; + state->color_format = OUT_FORM_HTML; ret = output_html(state); break; case 'x': @@ -1218,7 +1218,7 @@ int output_analysis(struct conf_t *state, const char output_format) break; #endif default: - error(EXIT_FAILURE, 0, "unknown output format: '%c'", output_format); + error(EXIT_FAILURE, 0, "unknown output format: '%c'", state->output_format); } return ret; } From 7fe686b4174488f70ab4f8799d6ab09e3520e4cb Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 20 May 2018 15:54:58 +0100 Subject: [PATCH 116/158] webpages: use html sample output Signed-off-by: Sami Kerola --- webpages/index.html | 7 +- webpages/sampleoutput.html | 191 +++++++ webpages/sampleoutput.txt | 985 ------------------------------------- webpages/sitemap.txt | 2 +- 4 files changed, 196 insertions(+), 989 deletions(-) create mode 100644 webpages/sampleoutput.html delete mode 100644 webpages/sampleoutput.txt diff --git a/webpages/index.html b/webpages/index.html index 76feeb1..088c546 100644 --- a/webpages/index.html +++ b/webpages/index.html @@ -46,9 +46,10 @@ there is lots of data. On cheap laptop the speed of analysis is more than any significant difference in getting analysis done.


-prompt> ./dhcpd-pools -c /etc/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases -o -./sampleoutput.txt
-prompt> cat ./sampleoutput.txt +prompt> ./dhcpd-pools --config=/etc/dhcpd.conf +--leases=/var/lib/dhcp/dhcpd.leases --format=H +--color=always --warning=40 --critical=50 --output=sampleoutput.html

Where I can get dhcpd-pools?

diff --git a/webpages/sampleoutput.html b/webpages/sampleoutput.html new file mode 100644 index 0000000..af4d3d8 --- /dev/null +++ b/webpages/sampleoutput.html @@ -0,0 +1,191 @@ + + + +ISC dhcpd dhcpd-pools output + + + + + + + + +
+

ISC DHCPD status

+File samples/dhcpd.leases was last modified at 2017-11-11T23:59:04+0000
+

Sum of all

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namemaxcurfreepercenttoucht+ct+c percbubu perc
All networks100435743.00004343.000243.000
+

Shared networks

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namemaxcurfreepercenttoucht+ct+c percbubu perc
example140211952.502152.50012.500
example240172342.501742.50000.000
+

Ranges

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
shared net namefirst iplast ipmaxcurfreepercenttoucht+ct+c percbubu perc
example110.0.0.110.0.0.20201195501155.00015.000
example110.1.0.110.1.0.202010105001050.00000.000
example210.2.0.110.2.0.2020812400840.00000.000
example210.3.0.110.3.0.2020911450945.00000.000
All networks10.4.0.110.4.0.2020515250525.00015.000
+
+Generated using dhcpd-pools 3.0
+More info at http://dhcpd-pools.sourceforge.net/ +
+ + + + + diff --git a/webpages/sampleoutput.txt b/webpages/sampleoutput.txt deleted file mode 100644 index 0271e76..0000000 --- a/webpages/sampleoutput.txt +++ /dev/null @@ -1,985 +0,0 @@ -Ranges: -shared net name first ip last ip max cur percent -Aatamila 12.34.567.127 - 12.34.567.254 128 11 8.594 -Aatamila 12.34.567.83 - 12.34.567.254 252 22 8.730 -Huohvanainen 12.34.567.3 - 12.34.567.254 252 39 15.476 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 41 16.142 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 40 15.748 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 38 14.961 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 37 14.567 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 55 21.654 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 36 14.173 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 50 19.685 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 35 13.780 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 53 20.866 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 56 22.047 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 44 17.323 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 43 16.929 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 29 11.417 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 45 17.717 -Huohvanainen 12.345.678.1 - 12.345.678.254 254 36 14.173 -Ilmovuori 12.345.678.3 - 12.345.678.254 252 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Honkanen 12.345.678.3 - 12.345.678.254 252 100 39.683 -Honkanen 12.345.678.1 - 12.345.678.254 254 92 36.220 -Huuskonen 12.345.678.3 - 12.345.678.254 252 146 57.937 -Huuskonen 12.345.678.1 - 12.345.678.254 254 139 54.724 -Huuskonen 12.345.678.1 - 12.345.678.254 254 137 53.937 -Huuskonen 12.345.678.1 - 12.345.678.254 254 147 57.874 -Huuskonen 12.345.678.1 - 12.345.678.254 254 132 51.969 -Huuskonen 12.345.678.1 - 12.345.678.254 254 132 51.969 -Huuskonen 12.345.678.1 - 12.345.678.254 254 149 58.661 -Huuskonen 12.345.678.1 - 12.345.678.254 254 140 55.118 -Huuskonen 12.345.678.1 - 12.345.678.254 254 140 55.118 -Huuskonen 12.345.678.1 - 12.345.678.254 254 139 54.724 -Huuskonen 12.345.678.1 - 12.345.678.254 254 135 53.150 -Huuskonen 12.345.678.1 - 12.345.678.1 1 0 0.000 -Huuskonen 12.345.678.1 - 12.345.678.254 254 152 59.843 -Huuskonen 12.345.678.1 - 12.345.678.254 254 132 51.969 -Huuskonen 12.345.678.1 - 12.345.678.254 254 131 51.575 -Huuskonen 12.345.678.1 - 12.345.678.254 254 147 57.874 -Halonen 12.345.678.3 - 12.345.678.254 252 114 45.238 -Halonen 12.345.678.1 - 12.345.678.254 254 107 42.126 -Halonen 12.345.678.1 - 12.345.678.254 254 106 41.732 -Halonen 12.345.678.1 - 12.345.678.254 254 121 47.638 -Halonen 12.345.678.1 - 12.345.678.254 254 119 46.850 -Halonen 12.345.678.1 - 12.345.678.254 254 102 40.157 -Halonen 12.345.678.1 - 12.345.678.254 254 111 43.701 -Halonen 12.345.678.1 - 12.345.678.254 254 122 48.031 -Halonen 12.345.678.1 - 12.345.678.254 254 119 46.850 -Halonen 12.345.678.1 - 12.345.678.254 254 109 42.913 -Halonen 12.345.678.1 - 12.345.678.254 254 106 41.732 -Halonen 12.345.678.1 - 12.345.678.254 254 120 47.244 -Halonen 12.345.678.1 - 12.345.678.254 254 117 46.063 -Halonen 12.345.678.1 - 12.345.678.254 254 111 43.701 -Halonen 12.345.678.1 - 12.345.678.254 254 117 46.063 -Halonen 12.345.678.1 - 12.345.678.254 254 120 47.244 -Halonen 12.345.678.1 - 12.345.678.254 254 102 40.157 -Halonen 12.345.678.1 - 12.345.678.254 254 130 51.181 -Halonen 12.345.678.1 - 12.345.678.254 254 117 46.063 -Halonen 12.345.678.1 - 12.345.678.254 254 120 47.244 -Halonen 12.345.678.1 - 12.345.678.254 254 111 43.701 -Halonen 12.345.678.1 - 12.345.678.254 254 118 46.457 -Halonen 12.345.678.1 - 12.345.678.254 254 114 44.882 -Halonen 12.345.678.1 - 12.345.678.254 254 112 44.094 -Halonen 12.345.678.1 - 12.345.678.254 254 120 47.244 -Halonen 12.345.678.1 - 12.345.678.254 254 118 46.457 -Halonen 12.345.678.1 - 12.345.678.254 254 105 41.339 -Halonen 12.345.678.1 - 12.345.678.254 254 110 43.307 -Halonen 12.345.678.1 - 12.345.678.254 254 117 46.063 -Halonen 12.345.678.1 - 12.345.678.254 254 103 40.551 -Halonen 12.345.678.1 - 12.345.678.254 254 107 42.126 -Halonen 12.345.678.1 - 12.345.678.254 254 109 42.913 -Hattunen 12.345.6.3 - 12.345.6.254 252 0 0.000 -Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Hattunen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Harkovski 12.345.6.3 - 12.345.6.254 252 197 78.175 -Harkovski 12.345.6.1 - 12.345.6.254 254 190 74.803 -Harkovski 12.345.67.1 - 12.345.67.254 254 193 75.984 -Harkovski 12.345.67.1 - 12.345.67.254 254 199 78.346 -Harkovski 12.345.67.3 - 12.345.67.254 252 196 77.778 -Harkovski 12.345.67.1 - 12.345.67.254 254 208 81.890 -Harkovski 12.345.67.1 - 12.345.67.254 254 195 76.772 -Harkovski 12.345.67.1 - 12.345.67.254 254 195 76.772 -Happo 12.345.67.3 - 12.345.67.254 252 169 67.063 -Happo 12.345.67.1 - 12.345.67.254 254 171 67.323 -Happo 12.345.67.1 - 12.345.67.254 254 158 62.205 -Happo 12.345.67.1 - 12.345.67.254 254 165 64.961 -Happonen 12.345.67.3 - 12.345.67.254 252 184 73.016 -Happonen 12.345.67.1 - 12.345.67.254 254 181 71.260 -Happonen 12.345.67.1 - 12.345.67.254 254 186 73.228 -Happonen 12.345.67.1 - 12.345.67.254 254 175 68.898 -Harakka 12.345.67.3 - 12.345.67.254 252 201 79.762 -Harakka 12.345.67.1 - 12.345.67.254 254 206 81.102 -Harakka 12.345.67.1 - 12.345.67.254 254 200 78.740 -Harakka 12.345.67.1 - 12.345.67.254 254 196 77.165 -Harjunen 12.345.67.3 - 12.345.67.254 252 208 82.540 -Harjunen 12.345.67.1 - 12.345.67.254 254 204 80.315 -Harjunen 12.345.67.1 - 12.345.67.254 254 207 81.496 -Harjunen 12.345.67.1 - 12.345.67.254 254 199 78.346 -Haukka 12.345.67.3 - 12.345.67.254 252 86 34.127 -Haukka 12.345.67.1 - 12.345.67.254 254 93 36.614 -Haukka 12.345.67.1 - 12.345.67.254 254 82 32.283 -Haukka 12.345.67.1 - 12.345.67.254 254 84 33.071 -Hautanen 12.345.67.3 - 12.345.67.254 252 109 43.254 -Hautanen 12.345.67.1 - 12.345.67.254 254 106 41.732 -Hautanen 12.345.67.1 - 12.345.67.254 254 89 35.039 -Hautanen 12.345.67.1 - 12.345.67.254 254 104 40.945 -Havu 12.345.67.3 - 12.345.67.254 252 109 43.254 -Havu 12.345.67.1 - 12.345.67.254 254 101 39.764 -Havu 12.345.67.1 - 12.345.67.254 254 96 37.795 -Havu 12.345.67.1 - 12.345.67.254 254 98 38.583 -Heiskanen 12.345.67.3 - 12.345.67.254 252 113 44.841 -Heiskanen 12.345.67.1 - 12.345.67.254 254 113 44.488 -Heiskanen 12.345.67.1 - 12.345.67.254 254 109 42.913 -Heiskanen 12.345.67.1 - 12.345.67.254 254 117 46.063 -Hietanen 12.345.67.3 - 12.345.67.254 252 96 38.095 -Hietanen 12.345.67.1 - 12.345.67.254 254 90 35.433 -Hietanen 12.345.67.1 - 12.345.67.254 254 101 39.764 -Hietanen 12.345.67.1 - 12.345.67.254 254 108 42.520 -Hiiliaho 12.345.67.3 - 12.345.67.254 252 100 39.683 -Hiiliaho 12.345.67.1 - 12.345.67.254 254 105 41.339 -Hiiliaho 12.345.67.1 - 12.345.67.254 254 98 38.583 -Hiiliaho 12.345.67.1 - 12.345.67.254 254 105 41.339 -Hilonen 12.345.67.3 - 12.345.67.254 252 80 31.746 -Hilonen 12.345.67.1 - 12.345.67.254 254 91 35.827 -Hilonen 12.345.67.1 - 12.345.67.254 254 76 29.921 -Hilonen 12.345.67.1 - 12.345.67.254 254 76 29.921 -Hirvonen 12.345.67.3 - 12.345.67.254 252 173 68.651 -Hirvonen 12.345.67.1 - 12.345.67.254 254 180 70.866 -Hirvonen 12.345.67.1 - 12.345.67.254 254 178 70.079 -Hirvonen 12.345.67.1 - 12.345.67.254 254 183 72.047 -Haavikko 12.345.678.3 - 12.345.678.254 252 99 39.286 -Haavikko 12.345.678.1 - 12.345.678.254 254 84 33.071 -Anttila 12.345.678.3 - 12.345.678.253 251 0 0.000 -Anttila 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hult 12.345.678.3 - 12.345.678.254 252 80 31.746 -Hult 12.345.678.1 - 12.345.678.254 254 106 41.732 -Hult 12.345.678.1 - 12.345.678.254 254 83 32.677 -Hult 12.345.678.1 - 12.345.678.1 1 1 100.000 -Jaskanen 12.345.678.3 - 12.345.678.254 252 150 59.524 -Jaskanen 12.345.678.1 - 12.345.678.254 254 144 56.693 -Jaskanen 12.345.678.1 - 12.345.678.254 254 169 66.535 -Jaskanen 12.345.678.1 - 12.345.678.254 254 161 63.386 -Jaskanen 12.345.678.1 - 12.345.678.254 254 166 65.354 -Jaskanen 12.345.678.1 - 12.345.678.254 254 168 66.142 -Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 -Jaskanen 12.345.678.1 - 12.345.678.254 254 164 64.567 -Itkonen 12.345.678.3 - 12.345.678.254 252 130 51.587 -Jaskanen 12.345.678.3 - 12.345.678.254 252 173 68.651 -Jaskanen 12.345.678.1 - 12.345.678.254 254 190 74.803 -Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 -Jaskanen 12.345.678.1 - 12.345.678.254 254 190 74.803 -Jaskanen 12.345.678.1 - 12.345.678.254 254 177 69.685 -Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 -Jaskanen 12.345.678.1 - 12.345.678.254 254 189 74.409 -Jaskanen 12.345.678.1 - 12.345.678.254 254 169 66.535 -Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 -Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 -Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 -Jaskanen 12.345.678.1 - 12.345.678.254 254 166 65.354 -Jaskanen 12.345.678.1 - 12.345.678.254 254 171 67.323 -Jaskanen 12.345.678.1 - 12.345.678.254 254 181 71.260 -Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 -Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 -Itkonen-temp 12.345.678.3 - 12.345.678.254 252 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.1 1 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.1 1 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Itkonen-temp 12.345.678.1 - 12.345.678.254 254 0 0.000 -Arviluoma 12.345.678.3 - 12.345.678.254 252 3 1.190 -Atjonen 12.345.678.3 - 12.345.678.254 252 1 0.397 -Ahtonen 12.345.678.3 - 12.345.678.254 252 70 27.778 -Ahtonen 12.345.678.1 - 12.345.678.254 254 57 22.441 -Ahtonen 12.345.678.1 - 12.345.678.254 254 74 29.134 -Ahtonen 12.345.678.1 - 12.345.678.254 254 65 25.591 -Itkonen 12.345.678.3 - 12.345.678.254 252 189 75.000 -Itkonen 12.345.678.1 - 12.345.678.254 254 152 59.843 -Itkonen 12.345.678.1 - 12.345.678.254 254 174 68.504 -Itkonen 12.345.678.1 - 12.345.678.254 254 165 64.961 -Itkonen 12.345.678.1 - 12.345.678.254 254 166 65.354 -Itkonen 12.345.678.1 - 12.345.678.254 254 165 64.961 -Itkonen 12.345.678.1 - 12.345.678.254 254 167 65.748 -Itkonen 12.345.678.1 - 12.345.678.254 254 178 70.079 -Jaskanen 12.345.678.3 - 12.345.678.254 252 185 73.413 -Jaskanen 12.345.678.1 - 12.345.678.254 254 191 75.197 -Jaskanen 12.345.678.1 - 12.345.678.254 254 179 70.472 -Jaskanen 12.345.678.1 - 12.345.678.254 254 180 70.866 -Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 -Jaskanen 12.345.678.1 - 12.345.678.254 254 188 74.016 -Jaskanen 12.345.678.1 - 12.345.678.254 254 177 69.685 -Jaskanen 12.345.678.1 - 12.345.678.1 1 0 0.000 -Hoivassilta 12.345.678.2 - 12.345.678.254 253 0 0.000 -Hoivassilta 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ikonen 12.345.6.3 - 12.345.6.254 252 0 0.000 -Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Ikonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Ikonen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Auvinen 12.345.67.3 - 12.345.67.254 252 102 40.476 -Auvinen 12.345.67.1 - 12.345.67.254 254 103 40.551 -Auvinen 12.345.67.1 - 12.345.67.254 254 97 38.189 -Auvinen 12.345.67.1 - 12.345.67.254 254 108 42.520 -Auvinen 12.345.67.1 - 12.345.67.254 254 95 37.402 -Auvinen 12.345.67.1 - 12.345.67.254 254 101 39.764 -Auvinen 12.345.67.1 - 12.345.67.254 254 103 40.551 -Auvinen 12.345.67.1 - 12.345.67.254 254 97 38.189 -Auvinen 12.345.67.1 - 12.345.67.254 254 100 39.370 -Auvinen 12.345.67.1 - 12.345.67.254 254 102 40.157 -Auvinen 12.345.67.1 - 12.345.67.254 254 110 43.307 -Auvinen 12.345.67.1 - 12.345.67.254 254 116 45.669 -Auvinen 12.345.67.1 - 12.345.67.254 254 102 40.157 -Auvinen 12.345.67.1 - 12.345.67.254 254 99 38.976 -Auvinen 12.345.67.1 - 12.345.67.254 254 94 37.008 -Auvinen 12.345.67.1 - 12.345.67.254 254 94 37.008 -Harakka 12.345.67.3 - 12.345.67.254 252 128 50.794 -Harakka 12.345.67.1 - 12.345.67.254 254 127 50.000 -Harakka 12.345.67.1 - 12.345.67.254 254 121 47.638 -Harakka 12.345.67.1 - 12.345.67.254 254 109 42.913 -Harakka 12.345.67.1 - 12.345.67.254 254 121 47.638 -Harakka 12.345.67.1 - 12.345.67.254 254 135 53.150 -Harakka 12.345.67.1 - 12.345.67.254 254 121 47.638 -Harakka 12.345.67.1 - 12.345.67.254 254 124 48.819 -Harakka 12.345.67.1 - 12.345.67.254 254 121 47.638 -Harakka 12.345.67.1 - 12.345.67.254 254 105 41.339 -Harakka 12.345.67.1 - 12.345.67.254 254 126 49.606 -Harakka 12.345.67.1 - 12.345.67.254 254 129 50.787 -Harakka 12.345.67.1 - 12.345.67.254 254 119 46.850 -Harakka 12.345.67.1 - 12.345.67.254 254 112 44.094 -Harakka 12.345.67.1 - 12.345.67.254 254 123 48.425 -Harakka 12.345.67.1 - 12.345.67.254 254 113 44.488 -Eronen 12.345.67.3 - 12.345.67.254 252 81 32.143 -Eronen 12.345.67.1 - 12.345.67.254 254 98 38.583 -Eronen 12.345.67.1 - 12.345.67.254 254 83 32.677 -Eronen 12.345.67.1 - 12.345.67.254 254 84 33.071 -Eronen 12.345.67.1 - 12.345.67.254 254 85 33.465 -Eronen 12.345.67.1 - 12.345.67.254 254 92 36.220 -Eronen 12.345.67.1 - 12.345.67.254 254 87 34.252 -Eronen 12.345.67.1 - 12.345.67.254 254 79 31.102 -Eronen 12.345.67.1 - 12.345.67.254 254 93 36.614 -Eronen 12.345.67.1 - 12.345.67.254 254 92 36.220 -Eronen 12.345.67.1 - 12.345.67.254 254 85 33.465 -Eronen 12.345.67.1 - 12.345.67.254 254 96 37.795 -Eronen 12.345.67.1 - 12.345.67.254 254 87 34.252 -Eronen 12.345.67.1 - 12.345.67.254 254 101 39.764 -Eronen 12.345.67.1 - 12.345.67.254 254 97 38.189 -Eronen 12.345.67.1 - 12.345.67.254 254 81 31.890 -Haavikko 12.345.67.3 - 12.345.67.254 252 89 35.317 -Haavikko 12.345.67.1 - 12.345.67.254 254 91 35.827 -Haavikko 12.345.67.1 - 12.345.67.254 254 91 35.827 -Haavikko 12.345.67.1 - 12.345.67.254 254 109 42.913 -Haavikko 12.345.67.1 - 12.345.67.254 254 89 35.039 -Haavikko 12.345.67.1 - 12.345.67.254 254 100 39.370 -Haavikko 12.345.67.1 - 12.345.67.254 254 87 34.252 -Haavikko 12.345.67.1 - 12.345.67.254 254 98 38.583 -Haavikko 12.345.67.1 - 12.345.67.254 254 87 34.252 -Haavikko 12.345.67.1 - 12.345.67.254 254 90 35.433 -Haavikko 12.345.67.1 - 12.345.67.254 254 95 37.402 -Haavikko 12.345.67.1 - 12.345.67.254 254 86 33.858 -Haavikko 12.345.67.1 - 12.345.67.254 254 83 32.677 -Haavikko 12.345.67.1 - 12.345.67.254 254 102 40.157 -Haavikko 12.345.67.1 - 12.345.67.254 254 104 40.945 -Haavikko 12.345.67.1 - 12.345.67.1 1 1 100.000 -Hakkarainen 12.345.67.3 - 12.345.67.254 252 25 9.921 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 37 14.567 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 37 14.567 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 36 14.173 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 33 12.992 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 38 14.961 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 33 12.992 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 38 14.961 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 29 11.417 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 28 11.024 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 31 12.205 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 37 14.567 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 30 11.811 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 29 11.417 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 35 13.780 -Hakkarainen 12.345.67.1 - 12.345.67.254 254 44 17.323 -Halonen 12.345.67.3 - 12.345.67.254 252 110 43.651 -Halonen 12.345.67.1 - 12.345.67.254 254 122 48.031 -Halonen 12.345.67.1 - 12.345.67.254 254 113 44.488 -Halonen 12.345.67.1 - 12.345.67.254 254 95 37.402 -Halonen 12.345.678.1 - 12.345.678.254 254 107 42.126 -Halonen 12.345.678.1 - 12.345.678.254 254 117 46.063 -Halonen 12.345.678.1 - 12.345.678.254 254 124 48.819 -Halonen 12.345.678.1 - 12.345.678.254 254 126 49.606 -Halonen 12.345.678.1 - 12.345.678.254 254 114 44.882 -Halonen 12.345.678.1 - 12.345.678.254 254 112 44.094 -Halonen 12.345.678.1 - 12.345.678.254 254 120 47.244 -Halonen 12.345.678.1 - 12.345.678.254 254 109 42.913 -Halonen 12.345.678.1 - 12.345.678.254 254 111 43.701 -Halonen 12.345.678.1 - 12.345.678.254 254 115 45.276 -Halonen 12.345.678.1 - 12.345.678.254 254 119 46.850 -Halonen 12.345.678.1 - 12.345.678.254 254 101 39.764 -Halttunen 12.345.678.3 - 12.345.678.254 252 214 84.921 -Halttunen 12.345.678.1 - 12.345.678.254 254 213 83.858 -Halttunen 12.345.678.1 - 12.345.678.254 254 211 83.071 -Halttunen 12.345.678.1 - 12.345.678.254 254 224 88.189 -Halttunen 12.345.678.1 - 12.345.678.254 254 209 82.283 -Halttunen 12.345.678.1 - 12.345.678.254 254 212 83.465 -Halttunen 12.345.678.1 - 12.345.678.254 254 204 80.315 -Halttunen 12.345.678.1 - 12.345.678.254 254 215 84.646 -Husso 12.345.678.3 - 12.345.678.254 252 177 70.238 -Husso 12.345.678.1 - 12.345.678.254 254 173 68.110 -Husso 12.345.678.1 - 12.345.678.254 254 169 66.535 -Husso 12.345.678.1 - 12.345.678.254 254 170 66.929 -Husso 12.345.678.1 - 12.345.678.254 254 173 68.110 -Husso 12.345.678.1 - 12.345.678.254 254 162 63.780 -Husso 12.345.678.1 - 12.345.678.254 254 169 66.535 -Husso 12.345.678.1 - 12.345.678.254 254 185 72.835 -Ilmovuori 12.345.678.3 - 12.345.678.254 252 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.1 1 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Ilmovuori 12.345.678.1 - 12.345.678.254 254 0 0.000 -Jaskanen 12.345.678.3 - 12.345.678.254 252 180 71.429 -Jaskanen 12.345.678.1 - 12.345.678.254 254 177 69.685 -Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 -Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 -Jaskanen 12.345.678.1 - 12.345.678.254 254 195 76.772 -Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 -Jaskanen 12.345.678.1 - 12.345.678.254 254 184 72.441 -Jaskanen 12.345.678.1 - 12.345.678.254 254 175 68.898 -Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 -Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 -Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 -Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 -Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 -Jaskanen 12.345.678.1 - 12.345.678.254 254 181 71.260 -Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 -Jaskanen 12.345.678.1 - 12.345.678.254 254 171 67.323 -Honkanen 12.345.678.3 - 12.345.678.254 252 105 41.667 -Honkanen 12.345.678.1 - 12.345.678.254 254 106 41.732 -Honkanen 12.345.678.1 - 12.345.678.254 254 117 46.063 -Honkanen 12.345.678.1 - 12.345.678.254 254 98 38.583 -Honkanen 12.345.678.1 - 12.345.678.254 254 103 40.551 -Honkanen 12.345.678.1 - 12.345.678.254 254 98 38.583 -Honkanen 12.345.678.1 - 12.345.678.254 254 106 41.732 -Honkanen 12.345.678.1 - 12.345.678.254 254 118 46.457 -Honkanen 12.345.678.1 - 12.345.678.254 254 109 42.913 -Honkanen 12.345.678.1 - 12.345.678.254 254 101 39.764 -Honkanen 12.345.678.1 - 12.345.678.254 254 107 42.126 -Honkanen 12.345.678.1 - 12.345.678.254 254 98 38.583 -Honkanen 12.345.678.1 - 12.345.678.254 254 105 41.339 -Honkanen 12.345.678.1 - 12.345.678.254 254 115 45.276 -Honkanen 12.345.678.1 - 12.345.678.254 254 113 44.488 -Honkanen 12.345.678.1 - 12.345.678.254 254 110 43.307 -Honkipuro 12.345.67.3 - 12.345.67.254 252 98 38.889 -Honkipuro 12.345.67.1 - 12.345.67.254 254 99 38.976 -Honkipuro 12.345.67.1 - 12.345.67.254 254 89 35.039 -Honkipuro 12.345.67.1 - 12.345.67.254 254 100 39.370 -Honkipuro 12.345.67.1 - 12.345.67.254 254 101 39.764 -Honkipuro 12.345.67.1 - 12.345.67.254 254 117 46.063 -Honkipuro 12.345.67.1 - 12.345.67.254 254 97 38.189 -Honkipuro 12.345.67.1 - 12.345.67.254 254 92 36.220 -Honkipuro 12.345.67.1 - 12.345.67.254 254 104 40.945 -Honkipuro 12.345.67.1 - 12.345.67.254 254 91 35.827 -Honkipuro 12.345.67.1 - 12.345.67.254 254 94 37.008 -Honkipuro 12.345.67.1 - 12.345.67.254 254 98 38.583 -Honkipuro 12.345.67.1 - 12.345.67.254 254 100 39.370 -Honkipuro 12.345.67.1 - 12.345.67.254 254 110 43.307 -Honkipuro 12.345.67.1 - 12.345.67.254 254 96 37.795 -Honkipuro 12.345.67.1 - 12.345.67.254 254 103 40.551 -Ilarionova 12.345.67.3 - 12.345.67.254 252 118 46.825 -Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 0 0.000 -Ilarionova 12.345.67.1 - 12.345.67.1 1 1 100.000 -Ilarionova 12.345.67.1 - 12.345.67.254 254 131 51.575 -Huhtala 12.345.67.3 - 12.345.67.254 252 105 41.667 -Huhtala 12.345.67.1 - 12.345.67.254 254 104 40.945 -Huhtala 12.345.67.1 - 12.345.67.254 254 104 40.945 -Huhtala 12.345.67.1 - 12.345.67.254 254 95 37.402 -Huhtala 12.345.67.1 - 12.345.67.254 254 97 38.189 -Huhtala 12.345.67.1 - 12.345.67.254 254 106 41.732 -Huhtala 12.345.67.1 - 12.345.67.254 254 110 43.307 -Huhtala 12.345.67.1 - 12.345.67.254 254 105 41.339 -Huhtala 12.345.67.1 - 12.345.67.254 254 88 34.646 -Huhtala 12.345.67.1 - 12.345.67.254 254 106 41.732 -Huhtala 12.345.67.1 - 12.345.67.254 254 93 36.614 -Huhtala 12.345.67.1 - 12.345.67.254 254 103 40.551 -Huhtala 12.345.67.1 - 12.345.67.254 254 103 40.551 -Huhtala 12.345.67.1 - 12.345.67.254 254 96 37.795 -Huhtala 12.345.67.1 - 12.345.67.254 254 103 40.551 -Huhtala 12.345.67.1 - 12.345.67.254 254 98 38.583 -Hult 12.345.67.3 - 12.345.67.254 252 86 34.127 -Hult 12.345.67.1 - 12.345.67.254 254 86 33.858 -Hult 12.345.67.1 - 12.345.67.254 254 80 31.496 -Hult 12.345.67.1 - 12.345.67.254 254 87 34.252 -Hult 12.345.678.1 - 12.345.678.254 254 89 35.039 -Hult 12.345.678.1 - 12.345.678.254 254 82 32.283 -Hult 12.345.678.1 - 12.345.678.254 254 94 37.008 -Hult 12.345.678.1 - 12.345.678.254 254 85 33.465 -Hult 12.345.678.1 - 12.345.678.254 254 93 36.614 -Hult 12.345.678.1 - 12.345.678.254 254 83 32.677 -Hult 12.345.678.1 - 12.345.678.254 254 89 35.039 -Hult 12.345.678.1 - 12.345.678.254 254 84 33.071 -Hult 12.345.678.1 - 12.345.678.254 254 89 35.039 -Hult 12.345.678.1 - 12.345.678.254 254 92 36.220 -Hult 12.345.678.1 - 12.345.678.254 254 83 32.677 -Hult 12.345.678.1 - 12.345.678.254 254 85 33.465 -Huusko 12.345.678.3 - 12.345.678.254 252 80 31.746 -Huusko 12.345.678.1 - 12.345.678.254 254 112 44.094 -Huusko 12.345.678.1 - 12.345.678.254 254 91 35.827 -Huusko 12.345.678.1 - 12.345.678.254 254 115 45.276 -Huusko 12.345.678.1 - 12.345.678.254 254 93 36.614 -Huusko 12.345.678.1 - 12.345.678.254 254 94 37.008 -Huusko 12.345.678.1 - 12.345.678.254 254 91 35.827 -Huusko 12.345.678.1 - 12.345.678.254 254 82 32.283 -Huusko 12.345.678.1 - 12.345.678.254 254 94 37.008 -Huusko 12.345.678.1 - 12.345.678.254 254 101 39.764 -Huusko 12.345.678.1 - 12.345.678.254 254 110 43.307 -Huusko 12.345.678.1 - 12.345.678.254 254 97 38.189 -Huusko 12.345.678.1 - 12.345.678.254 254 101 39.764 -Huusko 12.345.678.1 - 12.345.678.254 254 83 32.677 -Huusko 12.345.678.1 - 12.345.678.254 254 94 37.008 -Huusko 12.345.678.1 - 12.345.678.254 254 94 37.008 -Eronen 12.345.678.3 - 12.345.678.254 252 74 29.365 -Eronen 12.345.678.1 - 12.345.678.254 254 70 27.559 -Auvinen 12.345.678.3 - 12.345.678.254 252 102 40.476 -Auvinen 12.345.678.1 - 12.345.678.254 254 87 34.252 -Honkipuro 12.345.678.3 - 12.345.678.254 252 87 34.524 -Honkipuro 12.345.678.1 - 12.345.678.254 254 89 35.039 -Jaskanen 12.345.678.3 - 12.345.678.254 252 164 65.079 -Jaskanen 12.345.678.1 - 12.345.678.254 254 190 74.803 -Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 -Jaskanen 12.345.678.1 - 12.345.678.254 254 177 69.685 -Jaskanen 12.345.678.1 - 12.345.678.254 254 180 70.866 -Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 -Jaskanen 12.345.678.1 - 12.345.678.254 254 183 72.047 -Jaskanen 12.345.678.1 - 12.345.678.254 254 179 70.472 -Jaskanen 12.345.678.1 - 12.345.678.254 254 173 68.110 -Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 -Jaskanen 12.345.678.1 - 12.345.678.254 254 186 73.228 -Jaskanen 12.345.678.1 - 12.345.678.254 254 178 70.079 -Jaskanen 12.345.678.1 - 12.345.678.254 254 173 68.110 -Jaskanen 12.345.678.1 - 12.345.678.254 254 164 64.567 -Jaskanen 12.345.678.1 - 12.345.678.254 254 181 71.260 -Jaskanen 12.345.678.1 - 12.345.678.254 254 168 66.142 -Halttunen 12.345.6.3 - 12.345.6.254 252 139 55.159 -Halttunen 12.345.6.1 - 12.345.6.254 254 145 57.087 -Halttunen 12.345.6.1 - 12.345.6.254 254 138 54.331 -Halttunen 12.345.6.1 - 12.345.6.254 254 149 58.661 -Halttunen 12.345.6.1 - 12.345.6.254 254 142 55.906 -Halttunen 12.345.6.1 - 12.345.6.254 254 128 50.394 -Halttunen 12.345.6.1 - 12.345.6.254 254 155 61.024 -Halttunen 12.345.6.1 - 12.345.6.254 254 139 54.724 -Halttunen 12.345.6.1 - 12.345.6.254 254 137 53.937 -Halttunen 12.345.6.1 - 12.345.6.254 254 136 53.543 -Halttunen 12.345.67.1 - 12.345.67.254 254 136 53.543 -Halttunen 12.345.67.1 - 12.345.67.254 254 148 58.268 -Halttunen 12.345.67.1 - 12.345.67.254 254 146 57.480 -Halttunen 12.345.67.1 - 12.345.67.254 254 136 53.543 -Halttunen 12.345.67.1 - 12.345.67.254 254 135 53.150 -Halttunen 12.345.67.1 - 12.345.67.254 254 144 56.693 -Halttunen 12.345.67.1 - 12.345.67.254 254 146 57.480 -Halttunen 12.345.67.1 - 12.345.67.254 254 145 57.087 -Halttunen 12.345.67.1 - 12.345.67.254 254 132 51.969 -Halttunen 12.345.67.1 - 12.345.67.254 254 154 60.630 -Halttunen 12.345.67.1 - 12.345.67.254 254 144 56.693 -Halttunen 12.345.67.1 - 12.345.67.254 254 163 64.173 -Halttunen 12.345.67.1 - 12.345.67.254 254 139 54.724 -Halttunen 12.345.67.1 - 12.345.67.254 254 143 56.299 -Halttunen 12.345.67.1 - 12.345.67.254 254 141 55.512 -Halttunen 12.345.67.1 - 12.345.67.254 254 145 57.087 -Halttunen 12.345.67.1 - 12.345.67.254 254 141 55.512 -Halttunen 12.345.67.1 - 12.345.67.254 254 148 58.268 -Halttunen 12.345.67.1 - 12.345.67.254 254 146 57.480 -Halttunen 12.345.67.1 - 12.345.67.254 254 140 55.118 -Halttunen 12.345.67.1 - 12.345.67.254 254 145 57.087 -Halttunen 12.345.67.1 - 12.345.67.254 254 124 48.819 -Husso 12.345.67.3 - 12.345.67.254 252 102 40.476 -Husso 12.345.67.1 - 12.345.67.254 254 97 38.189 -Husso 12.345.67.1 - 12.345.67.254 254 115 45.276 -Husso 12.345.67.1 - 12.345.67.254 254 101 39.764 -Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 -Husso 12.345.67.1 - 12.345.67.254 254 103 40.551 -Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 -Husso 12.345.67.1 - 12.345.67.254 254 106 41.732 -Husso 12.345.67.1 - 12.345.67.254 254 100 39.370 -Husso 12.345.67.1 - 12.345.67.254 254 106 41.732 -Husso 12.345.67.1 - 12.345.67.254 254 100 39.370 -Husso 12.345.67.1 - 12.345.67.254 254 98 38.583 -Husso 12.345.67.1 - 12.345.67.254 254 100 39.370 -Husso 12.345.67.1 - 12.345.67.254 254 109 42.913 -Husso 12.345.67.1 - 12.345.67.254 254 117 46.063 -Husso 12.345.67.1 - 12.345.67.254 254 101 39.764 -Husso 12.345.67.1 - 12.345.67.254 254 109 42.913 -Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 -Husso 12.345.67.1 - 12.345.67.254 254 94 37.008 -Husso 12.345.67.1 - 12.345.67.254 254 101 39.764 -Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 -Husso 12.345.67.1 - 12.345.67.254 254 99 38.976 -Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 -Husso 12.345.67.1 - 12.345.67.254 254 103 40.551 -Husso 12.345.67.1 - 12.345.67.254 254 106 41.732 -Husso 12.345.67.1 - 12.345.67.254 254 119 46.850 -Husso 12.345.67.1 - 12.345.67.254 254 99 38.976 -Husso 12.345.67.1 - 12.345.67.254 254 96 37.795 -Husso 12.345.67.1 - 12.345.67.254 254 112 44.094 -Husso 12.345.67.1 - 12.345.67.254 254 102 40.157 -Husso 12.345.67.1 - 12.345.67.254 254 104 40.945 -Husso 12.345.67.1 - 12.345.67.254 254 106 41.732 -Jaskanen 12.345.678.3 - 12.345.678.254 252 180 71.429 -Jaskanen 12.345.678.1 - 12.345.678.254 254 192 75.591 -Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 -Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 -Jaskanen 12.345.678.1 - 12.345.678.254 254 178 70.079 -Jaskanen 12.345.678.1 - 12.345.678.254 254 192 75.591 -Jaskanen 12.345.678.1 - 12.345.678.254 254 182 71.654 -Jaskanen 12.345.678.1 - 12.345.678.254 254 180 70.866 -Jaskanen 12.345.678.1 - 12.345.678.254 254 172 67.717 -Jaskanen 12.345.678.1 - 12.345.678.254 254 182 71.654 -Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 -Jaskanen 12.345.678.1 - 12.345.678.254 254 188 74.016 -Jaskanen 12.345.678.1 - 12.345.678.254 254 171 67.323 -Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 -Jaskanen 12.345.678.1 - 12.345.678.254 254 161 63.386 -Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 -Jaskanen 12.345.678.1 - 12.345.678.254 254 182 71.654 -Jaskanen 12.345.678.1 - 12.345.678.254 254 178 70.079 -Jaskanen 12.345.678.1 - 12.345.678.254 254 180 70.866 -Jaskanen 12.345.678.1 - 12.345.678.254 254 177 69.685 -Jaskanen 12.345.678.1 - 12.345.678.254 254 173 68.110 -Jaskanen 12.345.678.1 - 12.345.678.254 254 185 72.835 -Jaskanen 12.345.678.1 - 12.345.678.254 254 178 70.079 -Jaskanen 12.345.678.1 - 12.345.678.254 254 176 69.291 -Jaskanen 12.345.678.1 - 12.345.678.254 254 162 63.780 -Jaskanen 12.345.678.1 - 12.345.678.254 254 193 75.984 -Jaskanen 12.345.678.1 - 12.345.678.254 254 184 72.441 -Jaskanen 12.345.678.1 - 12.345.678.254 254 187 73.622 -Jaskanen 12.345.678.1 - 12.345.678.254 254 188 74.016 -Jaskanen 12.345.678.1 - 12.345.678.254 254 165 64.961 -Jaskanen 12.345.678.1 - 12.345.678.254 254 171 67.323 -Jaskanen 12.345.678.1 - 12.345.678.254 254 174 68.504 -Halonen 12.345.6.3 - 12.345.6.254 252 214 12.345 -Halonen 12.345.6.1 - 12.345.6.254 254 219 86.220 -Halonen 12.345.6.1 - 12.345.6.254 254 225 88.583 -Halonen 12.345.6.1 - 12.345.6.254 254 228 89.764 -Halonen 12.345.6.1 - 12.345.6.254 254 226 88.976 -Halonen 12.345.6.1 - 12.345.6.254 254 212 83.465 -Halonen 12.345.6.1 - 12.345.6.254 254 217 85.433 -Halonen 12.345.6.1 - 12.345.6.254 254 216 85.039 -Halonen 12.345.6.1 - 12.345.6.254 254 218 85.827 -Halonen 12.345.6.1 - 12.345.6.254 254 218 85.827 -Halonen 12.345.67.1 - 12.345.67.254 254 223 87.795 -Halonen 12.345.67.1 - 12.345.67.254 254 228 89.764 -Halonen 12.345.67.1 - 12.345.67.254 254 221 87.008 -Halonen 12.345.67.1 - 12.345.67.254 254 217 85.433 -Halonen 12.345.67.1 - 12.345.67.254 254 218 85.827 -Halonen 12.345.67.1 - 12.345.67.254 254 227 89.370 -Halonen 12.345.67.1 - 12.345.67.254 254 212 83.465 -Halonen 12.345.67.1 - 12.345.67.254 254 215 12.345 -Halonen 12.345.67.1 - 12.345.67.254 254 232 91.339 -Halonen 12.345.67.1 - 12.345.67.254 254 217 85.433 -Halonen 12.345.67.1 - 12.345.67.254 254 227 89.370 -Halonen 12.345.67.1 - 12.345.67.254 254 218 85.827 -Halonen 12.345.67.1 - 12.345.67.254 254 223 87.795 -Halonen 12.345.67.1 - 12.345.67.254 254 222 87.402 -Halonen 12.345.67.1 - 12.345.67.254 254 218 85.827 -Halonen 12.345.67.1 - 12.345.67.254 254 225 88.583 -Halonen 12.345.67.1 - 12.345.67.254 254 210 82.677 -Halonen 12.345.67.1 - 12.345.67.254 254 224 88.189 -Halonen 12.345.67.1 - 12.345.67.254 254 220 86.614 -Halonen 12.345.67.1 - 12.345.67.254 254 227 89.370 -Halonen 12.345.67.1 - 12.345.67.254 254 228 89.764 -Halonen 12.345.67.1 - 12.345.67.254 254 220 86.614 -Asikainen 12.345.67.4 - 12.345.67.254 251 13 5.179 -Asikainen 12.345.67.1 - 12.345.67.254 254 17 6.693 -Asikainen 12.345.67.1 - 12.345.67.254 254 14 5.512 -Asikainen 12.345.67.1 - 12.345.67.254 254 19 7.480 -Asikainen 12.345.67.1 - 12.345.67.254 254 23 9.055 -Asikainen 12.345.67.1 - 12.345.67.254 254 19 7.480 -Asikainen 12.345.67.1 - 12.345.67.254 254 18 7.087 -Asikainen 12.345.67.1 - 12.345.67.254 254 16 6.299 -Asikainen 12.345.67.1 - 12.345.67.254 254 24 9.449 -Asikainen 12.345.67.1 - 12.345.67.254 254 24 9.449 -Asikainen 12.345.67.1 - 12.345.67.254 254 24 9.449 -Asikainen 12.345.67.1 - 12.345.67.254 254 26 10.236 -Asikainen 12.345.67.1 - 12.345.67.254 254 24 9.449 -Asikainen 12.345.67.1 - 12.345.67.254 254 33 12.992 -Asikainen 12.345.67.1 - 12.345.67.254 254 29 11.417 -Asikainen 12.345.67.1 - 12.345.67.254 254 25 9.843 -Asikainen 12.345.67.1 - 12.345.67.254 254 34 13.386 -Asikainen 12.345.67.1 - 12.345.67.254 254 31 12.205 -Asikainen 12.345.67.1 - 12.345.67.254 254 28 11.024 -Asikainen 12.345.67.1 - 12.345.67.254 254 32 12.598 -Asikainen 12.345.67.1 - 12.345.67.254 254 35 13.780 -Asikainen 12.345.67.1 - 12.345.67.254 254 36 14.173 -Asikainen 12.345.67.1 - 12.345.67.254 254 41 16.142 -Asikainen 12.345.67.1 - 12.345.67.254 254 35 13.780 -Asikainen 12.345.67.1 - 12.345.67.254 254 32 12.598 -Asikainen 12.345.67.1 - 12.345.67.254 254 33 12.992 -Asikainen 12.345.67.1 - 12.345.67.254 254 44 17.323 -Asikainen 12.345.67.1 - 12.345.67.254 254 27 10.630 -Asikainen 12.345.67.1 - 12.345.67.254 254 35 13.780 -Asikainen 12.345.67.1 - 12.345.67.254 254 32 12.598 -Asikainen 12.345.67.1 - 12.345.67.254 254 40 15.748 -Asikainen 12.345.67.1 - 12.345.67.254 254 37 14.567 -Hyle 12.345.678.3 - 12.345.678.254 252 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 1 0.394 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Hyle 12.345.678.1 - 12.345.678.254 254 0 0.000 -Halttunen 12.345.678.3 - 12.345.678.254 252 198 78.571 -Halttunen 12.345.678.1 - 12.345.678.254 254 193 75.984 -Halttunen 12.345.678.1 - 12.345.678.254 254 207 81.496 -Halttunen 12.345.678.1 - 12.345.678.254 254 191 75.197 -Husso 12.345.678.3 - 12.345.678.254 252 156 61.905 -Husso 12.345.678.1 - 12.345.678.254 254 154 60.630 -Husso 12.345.678.1 - 12.345.678.254 254 168 66.142 -Husso 12.345.678.1 - 12.345.678.254 254 169 66.535 -Husso 12.345.678.1 - 12.345.678.254 254 171 67.323 -Husso 12.345.678.1 - 12.345.678.254 254 184 72.441 -Husso 12.345.678.1 - 12.345.678.254 254 173 68.110 -Husso 12.345.678.1 - 12.345.678.254 254 166 65.354 -Halttunen 12.345.678.3 - 12.345.678.254 252 209 82.937 -Halttunen 12.345.678.1 - 12.345.678.254 254 209 82.283 -Halttunen 12.345.678.1 - 12.345.678.254 254 212 83.465 -Halttunen 12.345.678.1 - 12.345.678.254 254 205 80.709 -Halttunen 12.345.678.1 - 12.345.678.254 254 202 79.528 -Halttunen 12.345.678.1 - 12.345.678.254 254 210 82.677 -Halttunen 12.345.678.1 - 12.345.678.254 254 194 76.378 -Halttunen 12.345.678.1 - 12.345.678.254 254 193 75.984 -Husso 12.345.678.3 - 12.345.678.254 252 173 68.651 -Husso 12.345.678.1 - 12.345.678.254 254 175 68.898 -Husso 12.345.678.1 - 12.345.678.254 254 162 63.780 -Husso 12.345.678.1 - 12.345.678.254 254 166 65.354 -Husso 12.345.678.1 - 12.345.678.254 254 183 72.047 -Husso 12.345.678.1 - 12.345.678.254 254 166 65.354 -Husso 12.345.678.1 - 12.345.678.254 254 162 63.780 -Husso 12.345.678.1 - 12.345.678.254 254 163 64.173 -Halttunen 12.345.678.3 - 12.345.678.254 252 208 82.540 -Halttunen 12.345.678.1 - 12.345.678.254 254 196 77.165 -Halttunen 12.345.678.1 - 12.345.678.254 254 196 77.165 -Halttunen 12.345.678.1 - 12.345.678.254 254 205 80.709 -Halttunen 12.345.678.1 - 12.345.678.254 254 216 85.039 -Halttunen 12.345.678.1 - 12.345.678.254 254 211 83.071 -Halttunen 12.345.678.1 - 12.345.678.254 254 200 78.740 -Halttunen 12.345.678.1 - 12.345.678.254 254 208 81.890 -Halttunen 12.345.678.3 - 12.345.678.254 252 189 75.000 -Halttunen 12.345.678.1 - 12.345.678.254 254 216 85.039 -Halttunen 12.345.678.1 - 12.345.678.254 254 201 79.134 -Halttunen 12.345.678.1 - 12.345.678.254 254 205 80.709 -Ahosvaara 12.345.678.3 - 12.345.678.254 252 107 42.460 -Ahosvaara 12.345.678.1 - 12.345.678.254 254 97 38.189 -Ahosvaara 12.345.678.1 - 12.345.678.254 254 103 40.551 -Ahosvaara 12.345.678.1 - 12.345.678.254 254 113 44.488 -Janhonen 12.345.6.4 - 12.345.6.254 251 0 0.000 -Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Janhonen 12.345.6.1 - 12.345.6.254 254 0 0.000 -Janhonen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Janhonen 12.345.67.1 - 12.345.67.254 254 1 0.394 -Janhonen 12.345.67.1 - 12.345.67.254 254 1 0.394 -Janhonen 12.345.67.1 - 12.345.67.254 254 2 0.787 -Janhonen 12.345.67.1 - 12.345.67.254 254 5 1.969 -Janhonen 12.345.67.1 - 12.345.67.254 254 6 2.362 -Janhonen 12.345.67.1 - 12.345.67.254 254 9 3.543 -Janhonen 12.345.67.1 - 12.345.67.254 254 4 1.575 -Janhonen 12.345.67.1 - 12.345.67.254 254 5 1.969 -Janhonen 12.345.67.1 - 12.345.67.254 254 10 3.937 -Janhonen 12.345.67.1 - 12.345.67.254 254 7 2.756 -Janhonen 12.345.67.1 - 12.345.67.254 254 8 3.150 -Janhonen 12.345.67.1 - 12.345.67.254 254 12 4.724 -Janhonen 12.345.67.1 - 12.345.67.254 254 11 4.331 -Janhonen 12.345.67.1 - 12.345.67.254 254 12 4.724 -Janhonen 12.345.67.1 - 12.345.67.254 254 15 5.906 -Janhonen 12.345.67.1 - 12.345.67.254 254 16 6.299 -Janhonen 12.345.67.1 - 12.345.67.254 254 10 3.937 -Janhonen 12.345.67.1 - 12.345.67.254 254 6 2.362 -Janhonen 12.345.67.1 - 12.345.67.254 254 15 5.906 -Janhonen 12.345.67.1 - 12.345.67.254 254 12 4.724 -Janhonen 12.345.67.1 - 12.345.67.254 254 17 6.693 -Janhonen 12.345.67.1 - 12.345.67.254 254 20 7.874 -Janhonen 12.345.67.1 - 12.345.67.254 254 12 4.724 -Janhonen 12.345.67.1 - 12.345.67.254 254 15 5.906 -Janhonen 12.345.67.1 - 12.345.67.254 254 23 9.055 -Janhonen 12.345.67.1 - 12.345.67.254 254 19 7.480 -Janhonen 12.345.67.1 - 12.345.67.254 254 19 7.480 -Janhonen 12.345.67.1 - 12.345.67.254 254 25 9.843 -Janhonen 12.345.67.1 - 12.345.67.254 254 25 9.843 -Janhonen 12.345.67.1 - 12.345.67.254 254 30 11.811 -Janhonen 12.345.67.1 - 12.345.67.254 254 30 11.811 -Janhonen 12.345.67.1 - 12.345.67.254 254 31 12.205 -Janhonen 12.345.67.1 - 12.345.67.254 254 31 12.205 -Janhonen 12.345.67.1 - 12.345.67.254 254 33 12.992 -Janhonen 12.345.67.1 - 12.345.67.254 254 31 12.205 -Janhonen 12.345.67.1 - 12.345.67.254 254 35 13.780 -Janhonen 12.345.67.1 - 12.345.67.254 254 40 15.748 -Janhonen 12.345.67.1 - 12.345.67.254 254 35 13.780 -Janhonen 12.345.67.1 - 12.345.67.254 254 43 16.929 -Janhonen 12.345.67.1 - 12.345.67.254 254 44 17.323 -Janhonen 12.345.67.1 - 12.345.67.254 254 33 12.992 -Janhonen 12.345.67.1 - 12.345.67.254 254 44 17.323 -Janhonen 12.345.67.1 - 12.345.67.254 254 35 13.780 -Janhonen 12.345.67.1 - 12.345.67.254 254 48 18.898 -Janhonen 12.345.67.1 - 12.345.67.254 254 45 17.717 -Janhonen 12.345.67.1 - 12.345.67.254 254 43 16.929 -Janhonen 12.345.67.1 - 12.345.67.254 254 46 18.110 -Janhonen 12.345.67.1 - 12.345.67.254 254 51 20.079 -Janhonen 12.345.67.1 - 12.345.67.254 254 52 20.472 -Janhonen 12.345.67.1 - 12.345.67.254 254 55 21.654 -Janhonen 12.345.67.1 - 12.345.67.254 254 56 22.047 -Janhonen 12.345.67.1 - 12.345.67.254 254 51 20.079 -Janhonen 12.345.67.1 - 12.345.67.254 254 60 23.622 -Jehkinen 12.345.67.4 - 12.345.67.254 251 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 0 0.000 -Jehkinen 12.345.67.1 - 12.345.67.254 254 1 0.394 -Jehkinen 12.345.67.1 - 12.345.67.254 254 3 1.181 -Jehkinen 12.345.67.1 - 12.345.67.254 254 3 1.181 -Jehkinen 12.345.67.1 - 12.345.67.254 254 7 2.756 -Jehkinen 12.345.67.1 - 12.345.67.254 254 5 1.969 -Jehkinen 12.345.67.1 - 12.345.67.254 254 4 1.575 -Jehkinen 12.345.67.1 - 12.345.67.254 254 6 2.362 -Jehkinen 12.345.67.1 - 12.345.67.254 254 10 3.937 -Jehkinen 12.345.67.1 - 12.345.67.254 254 7 2.756 -Jehkinen 12.345.67.1 - 12.345.67.254 254 11 4.331 -Jehkinen 12.345.67.1 - 12.345.67.254 254 13 5.118 -Jehkinen 12.345.67.1 - 12.345.67.254 254 14 5.512 -Jehkinen 12.345.67.1 - 12.345.67.254 254 15 5.906 -Jehkinen 12.345.67.1 - 12.345.67.254 254 18 7.087 -Jehkinen 12.345.67.1 - 12.345.67.254 254 18 7.087 -Jehkinen 12.345.67.1 - 12.345.67.254 254 19 7.480 -Jehkinen 12.345.67.1 - 12.345.67.254 254 17 6.693 -Jehkinen 12.345.67.1 - 12.345.67.254 254 17 6.693 -Jehkinen 12.345.67.1 - 12.345.67.254 254 19 7.480 -Hokkanen 12.345.67.3 - 12.345.67.254 252 55 21.825 -Hokkanen 12.345.67.1 - 12.345.67.254 254 64 25.197 -Hokkanen 12.345.67.1 - 12.345.67.254 254 70 27.559 -Hokkanen 12.345.67.1 - 12.345.67.254 254 72 28.346 -Hokkanen 12.345.678.1 - 12.345.678.254 254 82 32.283 -Hokkanen 12.345.678.1 - 12.345.678.254 254 68 26.772 -Hokkanen 12.345.678.1 - 12.345.678.254 254 65 25.591 -Hokkanen 12.345.678.1 - 12.345.678.254 254 70 27.559 -Hokkanen 12.345.678.1 - 12.345.678.254 254 83 32.677 -Hokkanen 12.345.678.1 - 12.345.678.254 254 73 28.740 -Hokkanen 12.345.678.1 - 12.345.678.254 254 89 35.039 -Hokkanen 12.345.678.1 - 12.345.678.254 254 92 36.220 -Hokkanen 12.345.678.1 - 12.345.678.254 254 74 29.134 -Hokkanen 12.345.678.1 - 12.345.678.254 254 68 26.772 -Hokkanen 12.345.678.1 - 12.345.678.254 254 73 28.740 -Hokkanen 12.345.678.1 - 12.345.678.254 254 88 34.646 -Husso 12.345.678.3 - 12.345.678.254 252 142 56.349 -Husso 12.345.678.1 - 12.345.678.254 254 155 61.024 -Husso 12.345.678.1 - 12.345.678.254 254 160 62.992 -Husso 12.345.678.1 - 12.345.678.254 254 148 58.268 -Husso 12.345.678.1 - 12.345.678.254 254 148 58.268 -Husso 12.345.678.1 - 12.345.678.254 254 157 61.811 -Husso 12.345.678.1 - 12.345.678.254 254 149 58.661 -Husso 12.345.678.1 - 12.345.678.254 254 163 64.173 -Husso 12.345.678.3 - 12.345.678.254 252 135 53.571 -Husso 12.345.678.1 - 12.345.678.254 254 141 55.512 -Husso 12.345.678.1 - 12.345.678.254 254 140 55.118 -Husso 12.345.678.1 - 12.345.678.254 254 141 55.512 -Husso 12.345.678.1 - 12.345.678.254 254 136 53.543 -Husso 12.345.678.1 - 12.345.678.254 254 125 49.213 -Husso 12.345.678.1 - 12.345.678.254 254 145 57.087 -Husso 12.345.678.1 - 12.345.678.254 254 139 54.724 -Husso 12.345.678.3 - 12.345.678.254 252 148 58.730 -Husso 12.345.678.1 - 12.345.678.254 254 159 62.598 -Husso 12.345.678.1 - 12.345.678.254 254 157 61.811 -Husso 12.345.678.1 - 12.345.678.254 254 157 61.811 -Husso 12.345.678.1 - 12.345.678.254 254 168 66.142 -Husso 12.345.678.1 - 12.345.678.254 254 153 60.236 -Husso 12.345.678.1 - 12.345.678.254 254 162 63.780 -Husso 12.345.678.1 - 12.345.678.254 254 159 62.598 -Halttunen 12.345.678.3 - 12.345.678.254 252 184 73.016 -Halttunen 12.345.678.1 - 12.345.678.254 254 185 72.835 -Halttunen 12.345.678.1 - 12.345.678.254 254 181 71.260 -Halttunen 12.345.678.1 - 12.345.678.254 254 184 72.441 -Halttunen 12.345.678.1 - 12.345.678.254 254 175 68.898 -Halttunen 12.345.678.1 - 12.345.678.254 254 192 75.591 -Halttunen 12.345.678.1 - 12.345.678.254 254 173 68.110 -Halttunen 12.345.678.1 - 12.345.678.254 254 185 72.835 -Halttunen 12.345.678.3 - 12.345.678.254 252 116 46.032 -Halttunen 12.345.678.1 - 12.345.678.254 254 130 51.181 -Halttunen 12.345.678.1 - 12.345.678.254 254 130 51.181 -Halttunen 12.345.678.1 - 12.345.678.254 254 138 54.331 -Halttunen 12.345.678.1 - 12.345.678.254 254 143 56.299 -Halttunen 12.345.678.1 - 12.345.678.254 254 131 51.575 -Halttunen 12.345.678.1 - 12.345.678.254 254 121 47.638 -Halttunen 12.345.678.1 - 12.345.678.254 254 126 49.606 -Jelonen 12.345.6.3 - 12.345.6.254 252 57 22.619 -Jelonen 12.345.6.1 - 12.345.6.254 254 47 18.504 -Jelonen 12.345.6.1 - 12.345.6.254 254 52 20.472 -Jelonen 12.345.6.1 - 12.345.6.254 254 52 20.472 -Jelonen 12.345.6.1 - 12.345.6.254 254 58 22.835 -Jelonen 12.345.6.1 - 12.345.6.254 254 59 23.228 -Jelonen 12.345.6.1 - 12.345.6.254 254 55 21.654 -Jelonen 12.345.6.1 - 12.345.6.254 254 52 20.472 -Jelonen 12.345.6.1 - 12.345.6.254 254 55 21.654 -Jelonen 12.345.6.1 - 12.345.6.254 254 67 26.378 -Jelonen 12.345.67.1 - 12.345.67.254 254 62 24.409 -Jelonen 12.345.67.1 - 12.345.67.254 254 60 23.622 -Jelonen 12.345.67.1 - 12.345.67.254 254 60 23.622 -Jelonen 12.345.67.1 - 12.345.67.254 254 61 24.016 -Jelonen 12.345.67.1 - 12.345.67.254 254 64 25.197 -Jelonen 12.345.67.1 - 12.345.67.254 254 70 27.559 -Jaskanen 12.345.67.3 - 12.345.67.254 252 146 57.937 -Jaskanen 12.345.67.1 - 12.345.67.254 254 143 56.299 -Jaskanen 12.345.67.1 - 12.345.67.254 254 142 55.906 -Jaskanen 12.345.67.1 - 12.345.67.254 254 161 63.386 -Jaskanen 12.345.67.1 - 12.345.67.254 254 150 59.055 -Jaskanen 12.345.67.1 - 12.345.67.254 254 155 61.024 -Jaskanen 12.345.67.1 - 12.345.67.254 254 153 60.236 -Jaskanen 12.345.67.1 - 12.345.67.254 254 161 63.386 -Jaskanen 12.345.67.1 - 12.345.67.254 254 150 59.055 -Jaskanen 12.345.67.1 - 12.345.67.254 254 156 61.417 -Jaskanen 12.345.67.1 - 12.345.67.254 254 150 59.055 -Jaskanen 12.345.67.1 - 12.345.67.254 254 147 57.874 -Jaskanen 12.345.67.1 - 12.345.67.254 254 148 58.268 -Jaskanen 12.345.67.1 - 12.345.67.254 254 150 59.055 -Jaskanen 12.345.67.1 - 12.345.67.254 254 143 56.299 -Jaskanen 12.345.67.1 - 12.345.67.254 254 145 57.087 -Itkonen 12.345.67.3 - 12.345.67.254 252 165 65.476 -Itkonen 12.345.67.1 - 12.345.67.254 254 153 60.236 -Itkonen 12.345.67.1 - 12.345.67.254 254 142 55.906 -Itkonen 12.345.67.1 - 12.345.67.254 254 178 70.079 -Itkonen 12.345.67.1 - 12.345.67.254 254 163 64.173 -Itkonen 12.345.67.1 - 12.345.67.254 254 165 64.961 -Itkonen 12.345.67.1 - 12.345.67.254 254 175 68.898 -Itkonen 12.345.67.1 - 12.345.67.254 254 161 63.386 -Huttunen 12.345.678.3 - 12.345.678.254 252 39 15.476 -Huttunen 12.345.678.1 - 12.345.678.254 254 44 17.323 -Huttunen 12.345.678.1 - 12.345.678.254 254 43 16.929 -Huttunen 12.345.678.1 - 12.345.678.254 254 45 17.717 -Huttunen 12.345.678.1 - 12.345.678.254 254 49 19.291 -Huttunen 12.345.678.1 - 12.345.678.254 254 50 19.685 -Huttunen 12.345.678.1 - 12.345.678.254 254 48 18.898 -Huttunen 12.345.678.1 - 12.345.678.254 254 53 20.866 -Holappa 12.345.678.3 - 12.345.678.254 252 179 71.032 -Holappa 12.345.678.1 - 12.345.678.254 254 156 61.417 -Holappa 12.345.678.1 - 12.345.678.254 254 172 67.717 -Holappa 12.345.678.1 - 12.345.678.254 254 166 65.354 -Holappa 12.345.678.1 - 12.345.678.254 254 156 61.417 -Holappa 12.345.678.1 - 12.345.678.254 254 162 63.780 -Holappa 12.345.678.1 - 12.345.678.254 254 162 63.780 -Holappa 12.345.678.1 - 12.345.678.254 254 159 62.598 -Holappa 12.345.678.1 - 12.345.678.254 254 179 70.472 -Holappa 12.345.678.1 - 12.345.678.254 254 164 64.567 -Holappa 12.345.678.1 - 12.345.678.254 254 165 64.961 -Holappa 12.345.678.1 - 12.345.678.254 254 162 63.780 -Holappa 12.345.678.1 - 12.345.678.254 254 171 67.323 -Holappa 12.345.678.1 - 12.345.678.254 254 171 67.323 -Holappa 12.345.678.1 - 12.345.678.254 254 163 64.173 -Holappa 12.345.678.1 - 12.345.678.254 254 156 61.417 -Holopainen 123.45.198.2 - 124.56.198.254 253 2 0.791 - -Shared networks: -name max cur percent -Hynninen 0 0 nan -Hyttinen 0 0 nan -Hyytinen 0 0 nan -Atjonen 252 1 0.397 -Auvinen 4568 1812 39.667 -Harakka 4062 1934 47.612 -Eronen 4568 1565 34.260 -Haavikko 4315 1585 36.732 -Hakkarainen 4062 540 13.294 -Halonen 20314 12514 61.603 -Halttunen 20304 13619 67.075 -Hokkanen 4062 1186 29.197 -Huttunen 2030 371 18.276 -Honkipuro 4568 1765 38.638 -Huhtala 4062 1616 39.783 -Hult 4823 1657 34.356 -Huohvanainen 4062 677 16.667 -Husso 20306 10971 54.028 -Holappa 4062 2643 65.066 -Jelonen 4062 931 22.920 -Honkanen 4568 1901 41.616 -Huusko 4062 1532 37.715 -Huuskonen 3809 2098 55.080 -Ilarionova 520 255 49.038 -Ikonen 4062 0 0.000 -Ilmovuori 4315 0 0.000 -Hyle 4062 1 0.025 -Aatamila 252 33 13.095 -Hattunen 2030 0 0.000 -Harkovski 2028 1573 77.564 -Happo 1014 663 65.385 -Happonen 1014 726 71.598 -Harakka 1014 803 79.191 -Harjunen 1014 818 80.671 -Haukka 1014 345 34.024 -Hautanen 1014 408 40.237 -Havu 1014 404 39.842 -Heiskanen 1014 452 44.576 -Hietanen 1014 395 38.955 -Hiiliaho 1014 408 40.237 -Hilonen 1014 323 31.854 -Hirvonen 1014 714 70.414 -Hoivassilta 507 0 0.000 -Jaskanen 28181 19262 68.351 -Itkonen-temp 3556 0 0.000 -Itkonen 4312 2788 64.657 -Ahtonen 1014 266 26.233 -Arviluoma 252 3 1.190 -Ahosvaara 1014 420 41.420 -Holopainen 253 2 0.791 -Anttila 505 0 0.000 -Janhonen 16253 1344 8.269 -Asikainen 8125 900 11.077 -Jehkinen 8125 207 2.548 - -Sum of all: -name max cur percent -All networks 228455 94431 41.335 diff --git a/webpages/sitemap.txt b/webpages/sitemap.txt index 60a6df9..5fbac09 100644 --- a/webpages/sitemap.txt +++ b/webpages/sitemap.txt @@ -1,7 +1,7 @@ http://dhcpd-pools.sourceforge.net/ http://dhcpd-pools.sourceforge.net/dhcpd-pools.awk http://dhcpd-pools.sourceforge.net/man.html -http://dhcpd-pools.sourceforge.net/doxygen/sampleoutput.txt +http://dhcpd-pools.sourceforge.net/doxygen/sampleoutput.html http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.md5 http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.md5 http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html From 27c70a0efed51039ed94fe6537ad7c736e18403a Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 23 Jul 2018 21:33:25 +0100 Subject: [PATCH 117/158] fix switch missing default case warnings src/other.c:387:3: warning: switch missing default case [-Wswitch-default] The one in do_counting() should be unreachable, so add abort() call to it. Signed-off-by: Sami Kerola --- src/analyze.c | 3 +++ src/other.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/analyze.c b/src/analyze.c index 7d7ac72..0dcd8e7 100644 --- a/src/analyze.c +++ b/src/analyze.c @@ -84,6 +84,9 @@ void do_counting(struct conf_t *state) case BACKUP: range_p->backups++; break; + default: + abort(); + break; } } /* Size of range size. */ diff --git a/src/other.c b/src/other.c index 2b2cbf9..63d094b 100644 --- a/src/other.c +++ b/src/other.c @@ -411,6 +411,8 @@ int if (!memcmp(" hardware ethernet", str, 19)) return PREFIX_HARDWARE_ETHERNET; break; + default: + break; } } if (!memcmp("lease ", str, 6)) @@ -464,6 +466,8 @@ int if (!memcmp(" hardware ethernet", str, 19)) return PREFIX_HARDWARE_ETHERNET; break; + default: + break; } } if (!memcmp(" iaaddr ", str, 9)) From 5027b50adee47c3cbd99c6cc67ddb23340dbf2cd Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 23 Jul 2018 21:41:59 +0100 Subject: [PATCH 118/158] sort: ensure NaN will not trip over comp_double() In unlikely event of NaN being compared avoid exception. If NaN appears in input data it will be evaluated as equal with any value. Signed-off-by: Sami Kerola --- src/sort.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/sort.c b/src/sort.c index 4fdb4e0..2c3a05f 100644 --- a/src/sort.c +++ b/src/sort.c @@ -40,6 +40,7 @@ #include +#include #include #include #include @@ -118,9 +119,14 @@ int rangecomp(const void *restrict r1, const void *restrict r2) */ int comp_double(double f1, double f2) { - return f1 < f2 ? -1 : f1 > f2 ? 1 : 0; + if (isless(f1, f2)) + return -1; + else if (isless(f2, f1)) + return 1; + return 0; } + /*! \brief Compare two range_t by their first_ip. * \param r1,r2 Pointers to data to compare. * \return Like strcmp. From 9727bb28b92b307aa9cb235f6ad8b80c6db048ee Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 26 Aug 2018 09:32:15 +0100 Subject: [PATCH 119/158] drop images, java scripts, and such from web sitemap file Signed-off-by: Sami Kerola --- webpages/sitemap.txt | 2619 +++++++++--------------------------------- 1 file changed, 535 insertions(+), 2084 deletions(-) diff --git a/webpages/sitemap.txt b/webpages/sitemap.txt index 5fbac09..f1f9fb4 100644 --- a/webpages/sitemap.txt +++ b/webpages/sitemap.txt @@ -1,2095 +1,546 @@ http://dhcpd-pools.sourceforge.net/ http://dhcpd-pools.sourceforge.net/dhcpd-pools.awk http://dhcpd-pools.sourceforge.net/man.html -http://dhcpd-pools.sourceforge.net/doxygen/sampleoutput.html -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a92db6afbd39d70dde0f830daaaa89be5_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aea4e0ee59e46ba5b8970e2386302d997_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_b.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a8912a4a34bc9896f479a861fb2abf26c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a656c0014bca06d6d9fd748a2f9dc4ab9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3326aee231570141ab97e7f6b41248a2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a27e69f6fec7e64d52e1fdc49c8c813d0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a731587e35c47ecf04885633b03599652_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42ca40e01f90e40ebc5f81b046a8c3f9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/jquery.js -http://dhcpd-pools.sourceforge.net/doxygen/files.html -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5d6e2957d43a40a81ccf80939bc88417_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b95b4561242161bc9984852693ba646_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/tab_a.png -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a5d6e2957d43a40a81ccf80939bc88417_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a795f2801e747615274e2386df5c2a2a7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_h.html -http://dhcpd-pools.sourceforge.net/doxygen/structconf__t__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/globals.html -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_d.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/menu.js -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_ad34540a9deac940fc7ab265da606d484_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a41c1f91a38be989ef5e8fbb52444501f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/structconf__t__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_acac91d3fab9431e9feadfa8bee0d669c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d9e24bfed149261c782fcab4ce8692a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/folderclosed.png -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a731587e35c47ecf04885633b03599652_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/structexpl__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_t.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dynsections.js -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa675337e02b12f20e5c7db26e55dbc15_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a3738c2bfd96d1421c8328fc59754def3_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_ac67c11f4ac65504980dd8ba708ed10c6_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adbb84b1b34e89af30525e680a4da749d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a656c0014bca06d6d9fd748a2f9dc4ab9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_m.html -http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af69f81b09ea8f7dda0047edd06c717ec_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af90ebdd5ec007dce3b05cdb440aca915_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aea4e0ee59e46ba5b8970e2386302d997_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a41c1f91a38be989ef5e8fbb52444501f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_acac91d3fab9431e9feadfa8bee0d669c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a02d48dd14871b22d59ec6d926585bbc8_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a4a72d4df9c2bd3f03842b7b017281ddb_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/structexpl__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a12d0dc2ac6cfcfb1856516a9f144d831_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a1b62af37280706bf7493743ff3f7b4aa_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a92db6afbd39d70dde0f830daaaa89be5_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/close_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_i.html -http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_ac370a831638bdd942e1624f9bc39f40f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af90ebdd5ec007dce3b05cdb440aca915_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_l.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/config_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a873f17992895bdebb3714d48407fd8ee_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/nav_g.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.png -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c_ad7e2b66799fbd125c246f6342990194c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a967b15470f160c8fd28c1341724102f7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a8ded4a0c5645ded15779af1359945baa_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a4a72d4df9c2bd3f03842b7b017281ddb_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a795f2801e747615274e2386df5c2a2a7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_af90ebdd5ec007dce3b05cdb440aca915_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/nav_f.png -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a967b15470f160c8fd28c1341724102f7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/splitbar.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/math_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/structconf__t__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_acac91d3fab9431e9feadfa8bee0d669c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a20348831ccdaa3299eca89e4760d10f3_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_adf45b810e736753c178d8d354946bb34_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ade697840b3ffb9c2ee7d9cefbe58edd6_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1a92d0c7a5b5de1bd6ab225ae4afe60a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af74bd088df09d457cf83a3d42ac29e3b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acd3044aba8bcf32ded0893f0ff7d43b3_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/search -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_f.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/search_r.png -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/close.png -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/mag_sel.png -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.js -http://dhcpd-pools.sourceforge.net/doxygen/search/search.css -http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.js -http://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/search.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/search_l.png -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/search_m.png -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.js -http://dhcpd-pools.sourceforge.net/doxygen/search/searchdata.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.js -http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_e.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.js -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.js -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.js -http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.js -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.js -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.js -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.js -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af53677934cc325455ae08fd8d7b63e73_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ade697840b3ffb9c2ee7d9cefbe58edd6_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a731587e35c47ecf04885633b03599652_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3326aee231570141ab97e7f6b41248a2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3326aee231570141ab97e7f6b41248a2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9_dep.map -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6c41b841ecaf10025444de83ee2c8baa_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a92db6afbd39d70dde0f830daaaa89be5_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/index.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_aea4e0ee59e46ba5b8970e2386302d997_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a215b255f971df37ace7b513eb17fe1c5_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a1b62af37280706bf7493743ff3f7b4aa_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a795f2801e747615274e2386df5c2a2a7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aa97592674ee46a81121ee904ded69db2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_abb353ec32fd152026c853fea429fe857_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a731587e35c47ecf04885633b03599652_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/structexpl.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b225ff0b5eabfd0121833eada84bc90_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5d6e2957d43a40a81ccf80939bc88417_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b225ff0b5eabfd0121833eada84bc90_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa675337e02b12f20e5c7db26e55dbc15_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_add5e5c22a85f4544a1157876ac6bd561_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a5d6e2957d43a40a81ccf80939bc88417_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_af106eda28a6b6a87e46539163466cad9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html -http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/types_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a69334a531533dbafdeb52429a03a8db7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ab2204a6c14ad7ce72a7e1c3a3c77fd06_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_adbb84b1b34e89af30525e680a4da749d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a9ab94edcc74b781cabd8dc1f99e931e3_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a85a3b1ee67d77fe6bbaf272856d09875_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a873f17992895bdebb3714d48407fd8ee_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a5d6e2957d43a40a81ccf80939bc88417_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a4a72d4df9c2bd3f03842b7b017281ddb_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_af465e1e5bdfb04b64ac6a66a49294efb_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aba0174c597c07f99509871850bd91540_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_add5e5c22a85f4544a1157876ac6bd561_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a45d904cf0131976ce46045fd06edba81_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/unionrpl__max__align__t.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a5a8f2bad2fdbc52980d30b10a5ab33be_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a50e26cb469c276b6d8be436982f6eddd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d9e24bfed149261c782fcab4ce8692a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b225ff0b5eabfd0121833eada84bc90_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a479425784d9994068114922b90b31cb3_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/functions_func.html -http://dhcpd-pools.sourceforge.net/doxygen/menudata.js -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b95b4561242161bc9984852693ba646_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/structoption.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d914d8e43d80a7682f1e8d283bc098c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a795f2801e747615274e2386df5c2a2a7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_abb353ec32fd152026c853fea429fe857_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/closed.png -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_g.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af53677934cc325455ae08fd8d7b63e73_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af53677934cc325455ae08fd8d7b63e73_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/tab_b.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_o.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/classes.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_v.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_x.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a479425784d9994068114922b90b31cb3_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac_dep.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a0e9add19c779ddf55db924975784bb9a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a44286f6558114fb227424af5af02f3bd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b95b4561242161bc9984852693ba646_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/math_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a27e69f6fec7e64d52e1fdc49c8c813d0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_n.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a215b255f971df37ace7b513eb17fe1c5_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_addbac86d87d540f7e0eae5dbfac62c74_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af69f81b09ea8f7dda0047edd06c717ec_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1bc967d5ea7fe0eb36434dbd8d691363_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a72c8d2fcdbf2e7ab207d35a1f4d5d21c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/float_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acf43aaf176da8efb115f944f5c0b3c97_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acf43aaf176da8efb115f944f5c0b3c97_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sync_off.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a17de1b2b624a2ffc25dff9fabd2aab87_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1a92d0c7a5b5de1bd6ab225ae4afe60a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af53677934cc325455ae08fd8d7b63e73_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_aa9630c1943de96498e73fd63cd3aeea9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ad70ef2af443d8846d200a4d3f2228be1_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a98437aeff705113eeee679fadd0659f5_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af9d8c46bd7f7597671518cd88751edf8_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1bc967d5ea7fe0eb36434dbd8d691363_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a8912a4a34bc9896f479a861fb2abf26c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a5a8f2bad2fdbc52980d30b10a5ab33be_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/structiovec.html -http://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_r.html -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html -http://dhcpd-pools.sourceforge.net/doxygen/structexpl__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a8ded4a0c5645ded15779af1359945baa_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a8ded4a0c5645ded15779af1359945baa_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af79cc26a51f94400dad990aa12ee9cc9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a80b2536bb2d5ebe8dba11661cc041a6b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_w.html -http://dhcpd-pools.sourceforge.net/doxygen/open.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af69f81b09ea8f7dda0047edd06c717ec_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a215b255f971df37ace7b513eb17fe1c5_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a731587e35c47ecf04885633b03599652_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/annotated.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a967b15470f160c8fd28c1341724102f7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a1b070d7bdd59b4657266dbc7211bb637_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a02d48dd14871b22d59ec6d926585bbc8_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_abc5552dd3521f63af288765527ac58dd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c_a69d9fadc7a8a192c18a135bfd9fcd477_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1bc967d5ea7fe0eb36434dbd8d691363_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a479425784d9994068114922b90b31cb3_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_af26c9be673bce92b08b2360f243fe82b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a8ded4a0c5645ded15779af1359945baa_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8da7481eade065aeac55ce7888d89f4e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a8ded4a0c5645ded15779af1359945baa_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a8f4657ffdde1bf309ad71aa33db18607_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b95b4561242161bc9984852693ba646_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_ac370a831638bdd942e1624f9bc39f40f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a69334a531533dbafdeb52429a03a8db7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2d9e24bfed149261c782fcab4ce8692a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a72a13ff831bb5a94d321d64b60e6414f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c_a40ba0199e64322af4bb99c03bb1c1f82_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a3326aee231570141ab97e7f6b41248a2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_e.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_func.html -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/doxygen.css -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6c41b841ecaf10025444de83ee2c8baa_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_ac67c11f4ac65504980dd8ba708ed10c6_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/string_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a6c41b841ecaf10025444de83ee2c8baa_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a33dd4780047eb59063b6b353d6b08111_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a1b62af37280706bf7493743ff3f7b4aa_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/math_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_f.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_aea4e0ee59e46ba5b8970e2386302d997_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_adf45b810e736753c178d8d354946bb34_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_s.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42ca40e01f90e40ebc5f81b046a8c3f9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a479425784d9994068114922b90b31cb3_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b95b4561242161bc9984852693ba646_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b225ff0b5eabfd0121833eada84bc90_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_aa9630c1943de96498e73fd63cd3aeea9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acd3044aba8bcf32ded0893f0ff7d43b3_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_ab098119eda4ff6b9e9a2688d236fd087_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aee6e269dac533178d61f95b6e40bca68_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_af69f81b09ea8f7dda0047edd06c717ec_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af79cc26a51f94400dad990aa12ee9cc9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a873f17992895bdebb3714d48407fd8ee_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_ac3f4051200261d4de4d7ae14499f7552_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_ac370a831638bdd942e1624f9bc39f40f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a3738c2bfd96d1421c8328fc59754def3_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a8912a4a34bc9896f479a861fb2abf26c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_aea890aa67c0b03876f74fe7c5d9b3a21_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a0bbc1c19c9c5d102bee9dc35629ddb68_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af53677934cc325455ae08fd8d7b63e73_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a12d0dc2ac6cfcfb1856516a9f144d831_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac3e38df28a8ab7d155dc6a519678463e_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a3f2949cd831a86aa5c94637f731dbabb_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_adf45b810e736753c178d8d354946bb34_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adbb84b1b34e89af30525e680a4da749d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a0e9add19c779ddf55db924975784bb9a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_y.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_abb353ec32fd152026c853fea429fe857_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b95b4561242161bc9984852693ba646_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ac769cb753ff117e3d678a5eca0014920_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_aa9630c1943de96498e73fd63cd3aeea9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a12d0dc2ac6cfcfb1856516a9f144d831_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ad24097c0e33982e7feba6d944de6c79b_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_abea862091e8ea669bdb0f61d796cf883_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_adf3e6cacc74ba08a64f7dcf71e5e713b_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_abc5552dd3521f63af288765527ac58dd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a8f31a939021567d81aecc876a322f2cd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa675337e02b12f20e5c7db26e55dbc15_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_k.html -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c_aec069b4e8b397362f89086c53b93fd6a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a6b7d00933208bc409f540a94c2bf037e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sync_on.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c_a5d6ffddd86bd0d0ead58247b1a80e486_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a795f2801e747615274e2386df5c2a2a7_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a795f2801e747615274e2386df5c2a2a7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/tabs.css -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a1605d5d50f449eb8424526003277e547_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ad2fa1bc4e69b1dc43ebfd8d3267ed503_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ab0c2382566dfdc1ca0533662069707fc_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/doc.png -http://dhcpd-pools.sourceforge.net/doxygen/folderopen.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_acfa9c56b79e068f7c66f14e92de9621f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a9003c507b2b2aa94774d12dc792c4644_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c_aece5d6e00c239ffd0847d8d2ef65bd57_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_u.html -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a5de8be832ce3447e5017d3015083e514_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a28038203c46fba44ad2199db0c4f0f0a_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2682e4efd0b883d164311ca95d0ae4a0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aea4e0ee59e46ba5b8970e2386302d997_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_ade697840b3ffb9c2ee7d9cefbe58edd6_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/bc_s.png -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a92db6afbd39d70dde0f830daaaa89be5_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_aed830468f4d74daedeef23fbf3b9ff94_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_abc5552dd3521f63af288765527ac58dd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a2d9e24bfed149261c782fcab4ce8692a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/tab_s.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_ac18804b8270ca7e5842c347ea81ba1c3_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_adbb84b1b34e89af30525e680a4da749d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a1a92d0c7a5b5de1bd6ab225ae4afe60a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_a2fe5b0b4f6e117319dd79f867d0b0d71_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9a202967000c0f6626da60dfc0820151_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a0b225ff0b5eabfd0121833eada84bc90_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_ad34540a9deac940fc7ab265da606d484_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/types_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a7833a96194cc3bbd0d700eee41ced554_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.map -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__helper__t.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a10d3215fb947c2b6546716333fa88c45_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_addbac86d87d540f7e0eae5dbfac62c74_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_abac51f489527192d5f26f40f22b9bca9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ad37d1cbb778ea31fcf392d01168e4582_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_a.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_af90ebdd5ec007dce3b05cdb440aca915_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c_af106eda28a6b6a87e46539163466cad9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_acfa9c56b79e068f7c66f14e92de9621f_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a3f2949cd831a86aa5c94637f731dbabb_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c_ade80c9f68ef6d6aa778ae83a8ffa505f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c_a5d2c0879045afdfa6c14fab0ef874190_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_abc5552dd3521f63af288765527ac58dd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_aea4e0ee59e46ba5b8970e2386302d997_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acd3044aba8bcf32ded0893f0ff7d43b3_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af53677934cc325455ae08fd8d7b63e73_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/structmustach__itf.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a5d6e2957d43a40a81ccf80939bc88417_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_add5e5c22a85f4544a1157876ac6bd561_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a8f20e7eee29fd0718ff7ccf4488a123e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.md5 http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a1b62af37280706bf7493743ff3f7b4aa_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_adbb84b1b34e89af30525e680a4da749d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_a0b225ff0b5eabfd0121833eada84bc90_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a50e26cb469c276b6d8be436982f6eddd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_q.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_acf43aaf176da8efb115f944f5c0b3c97_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a06bd8ee5bc9f5675f98e84908c0822e0_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8da7481eade065aeac55ce7888d89f4e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a6c59fc7c009709f28ae4ac9d4eb03337_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a1b9e84bfc438c0a91dfec1f5610564ff_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9a202967000c0f6626da60dfc0820151_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a914cc22e26f85a8e7f1f1e0183981817_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a20348831ccdaa3299eca89e4760d10f3_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a7833a96194cc3bbd0d700eee41ced554_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/doxygen.png -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a42ca40e01f90e40ebc5f81b046a8c3f9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a10d3215fb947c2b6546716333fa88c45_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c_a479425784d9994068114922b90b31cb3_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a13a5debfccee08fbf18b13489836d223_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_aaa60fcb235125d2c98c600796d09aa64_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a0bb0a1acabaea7c747a7c91faa7021b9_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c_a5bfd13c5fa75b56081afbca8926ef270_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a7be120852e24cbfe79867e585061e6b1_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_a64fec4fca560e8ba4cd06562eb3e638d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c_ae0637f730cb7e22a3fc395f915de4c4c_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a8d477cdb5babb71198db76942cf221ba_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac3e38df28a8ab7d155dc6a519678463e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a873f17992895bdebb3714d48407fd8ee_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a3f6712cd433c2b58096f88d7a4e4c962_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone__coll__graph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c_a65d4f9aeaba39f65092c351c6dfdd509_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aba0174c597c07f99509871850bd91540_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519_dep.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/math_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c_a7d205fd04850ed90bf8bc835ea126c30_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_acd1779a64a391e86585be63f19e02b84_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af90ebdd5ec007dce3b05cdb440aca915_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a1b62af37280706bf7493743ff3f7b4aa_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c_abea862091e8ea669bdb0f61d796cf883_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_af74bd088df09d457cf83a3d42ac29e3b_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_a5d2c0879045afdfa6c14fab0ef874190_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a69334a531533dbafdeb52429a03a8db7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_p.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c_a91f60ad5697278e44ceb08d1270de3c0_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_a6ff7f501e817a6d5708dd08021c2e421_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af69f81b09ea8f7dda0047edd06c717ec_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_a8d4943c8a1e25200292b4ef049634914_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a40233e26691ff7d661683d61fda5ab38_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a8ded4a0c5645ded15779af1359945baa_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_a70c83b9ed7b98f15659fcc495c0c33e7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/bdwn.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_ac55e14bbdafa3785df1c60c6d247eb61_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_ac3e38df28a8ab7d155dc6a519678463e_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a0452a2ed54f78a15653afbf6332392eb_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/annotated.html +http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a9b5c96cfa1dddfcf68c0e4efce1c3ff1_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_ac4e38cd69abc98687080df02690b0a13_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a13a5debfccee08fbf18b13489836d223_cgraph.map +http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/classes.html +http://dhcpd-pools.sourceforge.net/doxygen/close_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/config_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html +http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html +http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h.html http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab44c3ee94dab0397f09be71dbaa822e1_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_aa352612502255860e778bbcbabaf9ffa_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a326c24d8ac30f57dc1093a8d892a63f2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_type.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a29b6cc93a084b0c7dc561f08d55354d6_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/error_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_ad34540a9deac940fc7ab265da606d484_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c_a8492be59e0766089d64d6e3ccbb0a1dd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/other_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a20348831ccdaa3299eca89e4760d10f3_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c_a02d48dd14871b22d59ec6d926585bbc8_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a2a7fec798c8ed14d05e54b7263ee5a2c_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/error_8c_a59193ccd2c0f374087081ef2fd2b08ed_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_a31358cb0cac4ad5800d2a7c1bdb0aa40_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a716fdc0e8e9f8eb875ae2eb3843ecc6d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a447fa12ac876b90a916a3c3c9ca2ae38_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a9a0561234d71d331325249e4433c2236_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/float_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_af9d8c46bd7f7597671518cd88751edf8_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a873f17992895bdebb3714d48407fd8ee_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c_abb7b88116dfb59ee81e338cc78863ba2_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_adbb84b1b34e89af30525e680a4da749d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_af69f81b09ea8f7dda0047edd06c717ec_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_acad466143bdf98a55f3b27dc2b106a67_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a02757b15583c2226e307a507fda96d43_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/nav_h.png -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c_a64f71c9ec9854b427c74ba77e614343a_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_aae4b54f2efc61bb94ad2c47303d624ad_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a479425784d9994068114922b90b31cb3_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a9f53f329ff6ddd0dcfb9327733ddda26_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a41c1f91a38be989ef5e8fbb52444501f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a5a8f2bad2fdbc52980d30b10a5ab33be_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ac2aea1f150dd3ed22f0e3b18e32a113e_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a731587e35c47ecf04885633b03599652_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a92db6afbd39d70dde0f830daaaa89be5_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_abc5552dd3521f63af288765527ac58dd_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_a9a0561234d71d331325249e4433c2236_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a626f2d98b1663b423eda295eb3aa2b5d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/tab_h.png -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h__dep__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c_a92db6afbd39d70dde0f830daaaa89be5_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_a45866115a49b918fa6bbd5c32a5afe4f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c_ae4a0e5747966cb33e459ccd1039d1761_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_ac67c11f4ac65504980dd8ba708ed10c6_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_ae7bcd169e2b0ff19a30e39f399aa3256_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_a8f6a5574ee6b32ba0f8c4d5479f0be57_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h__dep__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/doxygen.css +http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_ab150a3babfe529a34363379756778161_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c_a0076f520c787a3e5bf7f93f8fed92b2d_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c__incl.md5 +http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c_a873f17992895bdebb3714d48407fd8ee_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c_abc5552dd3521f63af288765527ac58dd_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_aeca9b417e9fd54335f9f505a322dfdf9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_a8077600735c5be8a8eb6a1bc629d913d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c_a57b5e6142bca46d9c0c6cfaeac9c7d72_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort__coll__graph.map -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c_a656c0014bca06d6d9fd748a2f9dc4ab9_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_aa9c700b9dc1b7a0ef866f39c53bb597f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab9ea58385c07f1cc5b25c984f3863d09_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h__dep__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_b.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_a7ccc330a5672b0630e731e31d7f90cf0_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c_a3c20039c03aa27eb189d2f616c7e4ea7_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c_a86399f38d27baaa31f48be22a403b94f_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_a2f3ce877a460c8045e5ff1c0fc972ae9_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_ab19a868b6a6e09347b26d089a2cc85fd_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a005ad8f66c61b37e97cb88265a1ed9e8_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/functions.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c_a8a497ca6c728daf89446401e2bdda8a8_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_ad37d1cbb778ea31fcf392d01168e4582_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c_a0c17a0b44f572941d9f73518f99ea7ed_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.png -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c_aae4231ac8066eb54ea1d9d12d551605c_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/time_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/structconf__t.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/output_8c_a1b62af37280706bf7493743ff3f7b4aa_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c_af90ebdd5ec007dce3b05cdb440aca915_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_ac965ebad2452d2e0a6a0167730dbb39f_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c__incl.md5 -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c_a3738c2bfd96d1421c8328fc59754def3_cgraph.map -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a8077600735c5be8a8eb6a1bc629d913d_cgraph.png -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c_a163324639129ef5e99aa4590d2c3c9a4_cgraph.md5 -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c__incl.map -http://dhcpd-pools.sourceforge.net/doxygen/string_8h__dep__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_a71fcb729570934d0d3449417ceafcc36_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/filename_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/filename_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/files.html +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/float_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html http://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c__incl.png -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c_a27e69f6fec7e64d52e1fdc49c8c813d0_cgraph.png +http://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/functions_func.html +http://dhcpd-pools.sourceforge.net/doxygen/functions.html +http://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html +http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_a.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_b.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_d.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_e.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_f.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_b.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_g.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_h.html +http://dhcpd-pools.sourceforge.net/doxygen/globals.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_i.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_k.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_l.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_m.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_n.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_o.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_p.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_q.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_r.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_s.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_t.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_type.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_u.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_v.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_w.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_x.html +http://dhcpd-pools.sourceforge.net/doxygen/globals_y.html +http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/index.html +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html +http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/limits_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/other_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/output_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/sampleoutput.html +http://dhcpd-pools.sourceforge.net/doxygen/search +http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/classes_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enums_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html +http://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html +http://dhcpd-pools.sourceforge.net/doxygen/search/search.css +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html +http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html +http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/structconf__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structexpl.html +http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html +http://dhcpd-pools.sourceforge.net/doxygen/structiovec.html +http://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html +http://dhcpd-pools.sourceforge.net/doxygen/structmustach__itf.html +http://dhcpd-pools.sourceforge.net/doxygen/structoption.html +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__helper__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html +http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html +http://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html +http://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html +http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html +http://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html +http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html +http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/tabs.css +http://dhcpd-pools.sourceforge.net/doxygen/time_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/types_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html +http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html +http://dhcpd-pools.sourceforge.net/doxygen/unionrpl__max__align__t.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html +http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html +http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html From 4befdeeb47aac3d8f69f9be88b05a79345572545 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 26 Oct 2018 22:01:26 +0100 Subject: [PATCH 120/158] getdata: remote dead code These few lines has been part of code without any point in releases 2.17 to 3.0 and six and half years. Oops. Reference: ae7747db876a6c2aaaaa2f1815d9f41b89c28826 Signed-off-by: Sami Kerola --- src/getdata.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/getdata.c b/src/getdata.c index b513d5d..36a9c9e 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -84,7 +84,6 @@ int parse_leases(struct conf_t *state) FILE *dhcpd_leases; char *line, *ipstring, macstring[20], *stop; union ipaddr_t addr; - struct stat lease_file_stats; struct leases_t *lease; dhcpd_leases = fopen(state->dhcpdlease_file, "r"); @@ -96,12 +95,6 @@ int parse_leases(struct conf_t *state) error(EXIT_FAILURE, errno, "parse_leases: fadvise %s", state->dhcpdlease_file); # endif /* POSIX_FADV_SEQUENTIAL */ #endif /* HAVE_POSIX_FADVISE */ - /* I found out that there's one lease address per 300 bytes in - * dhcpd.leases file. Malloc is little bit pessimistic and uses 250. - * If someone has higher density in lease file I'm interested to - * hear about that. */ - if (stat(state->dhcpdlease_file, &lease_file_stats)) - error(EXIT_FAILURE, errno, "parse_leases: %s", state->dhcpdlease_file); line = xmalloc(sizeof(char) * MAXLEN); line[0] = '\0'; ipstring = xmalloc(sizeof(char) * MAXLEN); From 48e46e8698545ef61b57a7e5dacd10a167820d9b Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 4 Jan 2019 22:18:53 +0000 Subject: [PATCH 121/158] other: use strftime() to generate date-time string It is better to use library function to create date-time string than sprintf various struct tm members. In same go retire time() call that is obsoleted by clock_gettime(). Signed-off-by: Sami Kerola --- src/other.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/other.c b/src/other.c index 63d094b..50f2380 100644 --- a/src/other.c +++ b/src/other.c @@ -551,31 +551,23 @@ void clean_up(struct conf_t *state) } /*! \brief Print a time stamp of a path or now to output file. */ -void dp_time_tool(FILE *file, const char *path, int epoch) +void dp_time_tool(FILE *file, const char *path, const int epoch) { - time_t t; - - /* a file or now */ - if (path) { - struct stat st; + struct stat st; + if (path) stat(path, &st); - t = st.st_mtime; - } else - t = time(NULL); - /* epoc or iso time stamp */ + else + clock_gettime(CLOCK_REALTIME, &st.st_mtim); if (epoch) - fprintf(file, "%ld", t); + fprintf(file, "%ld", st.st_mtim.tv_sec); else { char time_stamp[64]; + const time_t mtime = st.st_mtim.tv_sec; struct tm tm; - int len; - localtime_r(&t, &tm); - len = snprintf(time_stamp, sizeof(time_stamp), "%4d-%.2d-%.2dT%02d:%02d:%02d", - tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, - tm.tm_hour, tm.tm_min, tm.tm_sec); - strftime(time_stamp + len, sizeof(time_stamp) - len, "%z", &tm); + localtime_r(&mtime, &tm); + strftime(time_stamp, sizeof(time_stamp), "%FT%T%z", &tm); fprintf(file, "%s", time_stamp); } } From d29b498cae07ff4a169b3f561b83b27cd7c4f8f3 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 4 Jan 2019 22:39:19 +0000 Subject: [PATCH 122/158] lib: update .gitignore Signed-off-by: Sami Kerola --- lib/.gitignore | 62 +++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/lib/.gitignore b/lib/.gitignore index 8d9f964..521a078 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1,30 +1,26 @@ /*.lo /.libs/ -/Makefile.am -/_Noreturn.h /alloca.h /alloca.in.h /arg-nonnull.h /arpa/inet.h /arpa_inet.in.h /basename-lgpl.c -/c++defs.h /c-ctype.c /c-ctype.h -/c-strcase.h -/c-strcasecmp.c -/c-strcaseeq.h -/c-strncasecmp.c -/charset.alias -/close-stream.c -/close-stream.h +/c++defs.h +/cdefs.h /close.c /closeout.c /closeout.h -/config.charset -/configmake.h -/dirname-lgpl.c +/close-stream.c +/close-stream.h +/c-strcasecmp.c +/c-strcaseeq.h +/c-strcase.h +/c-strncasecmp.c /dirname.h +/dirname-lgpl.c /dosname.h /errno.in.h /error.c @@ -40,8 +36,8 @@ /fflush.c /filename.h /flexmember.h -/float+.h /float.c +/float+.h /float.in.h /fopen.c /fpending.c @@ -54,15 +50,15 @@ /fstat.c /ftell.c /ftello.c +/getopt1.c +/getopt.c /getopt-cdefs.in.h /getopt-core.h /getopt-ext.h +/getopt.in.h +/getopt_int.h /getopt-pfx-core.h /getopt-pfx-ext.h -/getopt.c -/getopt.in.h -/getopt1.c -/getopt_int.h /getprogname.c /getprogname.h /gettext.h @@ -75,6 +71,7 @@ /isnanf.c /isnanl.c /itold.c +/libc-config.h /libdhcpd_pools.la /limits.h /limits.in.h @@ -83,10 +80,10 @@ /localtime-buffer.c /localtime-buffer.h /lseek.c -/malloc.c +/Makefile.am /malloca.c /malloca.h -/malloca.valgrind +/malloc.c /math.c /math.h /math.in.h @@ -95,53 +92,50 @@ /memchr.c /memchr.valgrind /minmax.h -/mktime-internal.h /mktime.c +/mktime-internal.h /msvc-inval.c /msvc-inval.h /msvc-nothrow.c /msvc-nothrow.h /netinet_in.in.h +/_Noreturn.h /nstrftime.c /pathmax.h /progname.c /progname.h -/quote.h /quotearg.c /quotearg.h +/quote.h /realloc.c -/ref-add.sed -/ref-add.sin -/ref-del.sed -/ref-del.sin /setenv.c +/stat.c /stat-time.c /stat-time.h /stat-w32.c /stat-w32.h -/stat.c /stdalign.in.h /stdbool.in.h /stddef.in.h /stdint.in.h -/stdio-impl.h /stdio.h +/stdio-impl.h /stdio.in.h /stdlib.h /stdlib.in.h /stpncpy.c -/str-two-way.h /strdup.c /streq.h +/strerror.c /strerror-override.c /strerror-override.h -/strerror.c /strftime.h /string.h /string.in.h /stripslash.c /strstr.c /strtod.c +/str-two-way.h /sys/socket.h /sys/stat.h /sys/types.h @@ -151,12 +145,12 @@ /sys_stat.in.h /sys_types.in.h /sys_uio.in.h -/time-internal.h +/timegm.c /time.h /time.in.h +/time-internal.h /time_r.c /time_rz.c -/timegm.c /tzset.c /unistd.c /unistd.h @@ -167,10 +161,10 @@ /warn-on-use.h /wchar.h /wchar.in.h -/wctype-h.c /wctype.h +/wctype-h.c /wctype.in.h /xalloc-die.c -/xalloc-oversized.h /xalloc.h +/xalloc-oversized.h /xmalloc.c From 8731c6a11fa24560fd17c780f290642bf67c5391 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 14 Jan 2019 22:59:13 +0000 Subject: [PATCH 123/158] fix typos Signed-off-by: Sami Kerola --- src/getdata.c | 2 +- src/mustach-dhcpd-pools.c | 2 +- src/mustach.h | 6 +++--- src/output.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/getdata.c b/src/getdata.c index 36a9c9e..9d4e288 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -377,7 +377,7 @@ void parse_config(struct conf_t *state, const int is_include, const char *restri newclause = 1; break; case ITS_A_RANGE_FIRST_IP: - /* printf ("range 1nd ip: %s\n", word); */ + /* printf ("range 1st ip: %s\n", word); */ range_p = state->ranges + state->num_ranges; if (!(parse_ipaddr(state, word, &addr))) /* word was not ip, try again */ diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index d152938..9a8ec37 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -362,7 +362,7 @@ static int must_enter(void *closure, const char *name) return 1; } -/*! \brief Function that is called when all elements within a print loop are outputed. */ +/*! \brief Function that is called when all elements within a print loop are outputted. */ static int must_leave(void *closure) { struct expl *e = closure; diff --git a/src/mustach.h b/src/mustach.h index 8196679..716d7e3 100644 --- a/src/mustach.h +++ b/src/mustach.h @@ -71,7 +71,7 @@ struct mustach_itf { /** * fmustach - Renders the mustache 'template' in 'file' for 'itf' and 'closure'. * - * @template: the template string to instanciate + * @template: the template string to instantiate * @itf: the interface to the functions that mustach calls * @closure: the closure to pass to functions called * @file: the file where to write the result @@ -84,7 +84,7 @@ extern int fmustach(const char *template, struct mustach_itf *itf, void *closure /** * fmustach - Renders the mustache 'template' in 'fd' for 'itf' and 'closure'. * - * @template: the template string to instanciate + * @template: the template string to instantiate * @itf: the interface to the functions that mustach calls * @closure: the closure to pass to functions called * @fd: the file descriptor number where to write the result @@ -97,7 +97,7 @@ extern int fdmustach(const char *template, struct mustach_itf *itf, void *closur /** * fmustach - Renders the mustache 'template' in 'result' for 'itf' and 'closure'. * - * @template: the template string to instanciate + * @template: the template string to instantiate * @itf: the interface to the functions that mustach calls * @closure: the closure to pass to functions called * @result: the pointer receiving the result when 0 is returned diff --git a/src/output.c b/src/output.c index 264a970..c99eba2 100644 --- a/src/output.c +++ b/src/output.c @@ -82,7 +82,7 @@ enum count_status_t { }; /*! \var color_tags - * \brief Array of stings that make colors to start and end in different + * \brief Array of strings that make colors to start and end in different * schemas per array column. */ static const char *color_tags[][NUM_OF_OUT_FORMS] = { [STATUS_OK] = { "", "" }, From 6f6369f517b19a65ea332ae762d33f310e0185a3 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 9 Feb 2019 17:41:39 +0000 Subject: [PATCH 124/158] various: fix few warnings -Wmissing-variable-declarations -Wunreachable-code-break and -Wshadow. Signed-off-by: Sami Kerola --- src/analyze.c | 1 - src/dhcpd-pools.c | 6 +++--- src/getdata.c | 7 +++++-- src/other.c | 10 +++++----- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/analyze.c b/src/analyze.c index 0dcd8e7..6721761 100644 --- a/src/analyze.c +++ b/src/analyze.c @@ -86,7 +86,6 @@ void do_counting(struct conf_t *state) break; default: abort(); - break; } } /* Size of range size. */ diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index dd52fe9..8e12750 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -89,7 +89,7 @@ static void prepare_memory(struct conf_t *state) } /*! \brief The --skip option argument parser. */ -static void skip_arg_parse(struct conf_t *state, char *optarg) +static void skip_arg_parse(struct conf_t *state, char *arg) { enum { OPT_ARG_OK = 0, @@ -109,8 +109,8 @@ static void skip_arg_parse(struct conf_t *state, char *optarg) }; char *value; - while (*optarg != '\0') { - switch (getsubopt(&optarg, tokens, &value)) { + while (*arg != '\0') { + switch (getsubopt(&arg, tokens, &value)) { case OPT_ARG_OK: state->skip_ok = 1; break; diff --git a/src/getdata.c b/src/getdata.c index 9d4e288..7863a6b 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -220,9 +221,11 @@ void parse_config(struct conf_t *state, const int is_include, const char *restri #endif /* HAVE_POSIX_FADVISE */ /* Very hairy stuff begins. */ while (unlikely(!feof(dhcpd_config))) { - char c; + int c; c = fgetc(dhcpd_config); + if (CHAR_MAX < c) + continue; /* Certain characters are magical */ switch (c) { /* Handle comments if they are not quoted */ @@ -317,7 +320,7 @@ void parse_config(struct conf_t *state, const int is_include, const char *restri /* Save to word which clause this is. */ if ((newclause == 1 || argument != ITS_NOTHING_INTERESTING) && (!isspace(c) || 0 < quote)) { - word[i] = c; + word[i] = (char) c; i++; /* Long word which is almost causing overflow. None * of words are this long which the program is diff --git a/src/other.c b/src/other.c index 50f2380..f9df885 100644 --- a/src/other.c +++ b/src/other.c @@ -58,7 +58,7 @@ #include "dhcpd-pools.h" -char *(*cidr_last) (union ipaddr_t *restrict addr, const int mask); +static char *(*cidr_last) (union ipaddr_t *restrict addr, const int mask); static char *cidr_last_v4(union ipaddr_t *restrict addr, const int mask); static char *cidr_last_v6(union ipaddr_t *restrict addr, const int mask); @@ -480,13 +480,13 @@ int * \param Color mode string. * \return color mode enum. */ -int parse_color_mode(const char *restrict optarg) +int parse_color_mode(const char *restrict arg) { - if (!strcmp(optarg, "always")) + if (!strcmp(arg, "always")) return color_on; - if (!strcmp(optarg, "auto")) + if (!strcmp(arg, "auto")) return color_auto; - if (!strcmp(optarg, "never")) + if (!strcmp(arg, "never")) return color_off; return color_unknown; } From 71714a0993f7e2d7738378a32f3368eb3537ba4e Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 17 Feb 2019 11:25:09 +0000 Subject: [PATCH 125/158] warnings: ensure optimal packing in structures Add padding where needed and order structure when it makes alignment fall naturally to better order, with a single padding at the end of structure. Reference: http://www.catb.org/esr/structure-packing/ Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 2 +- src/dhcpd-pools.h | 20 ++++++++++++-------- src/mustach-dhcpd-pools.c | 1 + 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 8e12750..4bea2ee 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -340,9 +340,9 @@ int main(int argc, char **argv) .warn_count = 0x100000000, /* == 2^32 that is the entire IPv4 space */ .crit_count = 0x100000000, /* basically turns off the count criteria */ .header_limit = 8, - .color_mode = color_auto, .ranges_size = 64, .ip_version = IPvUNKNOWN, + .color_mode = color_auto, 0 }; int ret_val; diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 4556e06..80e422d 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -125,8 +125,9 @@ struct shared_network_t { double used; double touched; double backups; - int netmask; struct shared_network_t *next; + int netmask; + uint32_t pad; }; /*! \struct range_t @@ -145,12 +146,13 @@ struct range_t { * \brief Various per range and shared net temporary calculation results. */ struct output_helper_t { - int status; double range_size; double percent; double tc; double tcp; double bup; + int status; + uint32_t pad; }; /*! \enum ltype @@ -167,9 +169,10 @@ enum ltype { */ struct leases_t { union ipaddr_t ip; /* ip as key */ - enum ltype type; char *ethernet; UT_hash_handle hh; + enum ltype type; + uint32_t pad; }; /*! \enum limbits @@ -209,22 +212,22 @@ struct conf_t { struct shared_network_t *shared_net_head; /*!< Last entry in shared network linked list. */ struct range_t *ranges; /*!< Array of ranges. */ unsigned int num_ranges; /*!< Number of ranges in the ranges array. */ + enum dhcp_version ip_version; /*!< Designator if the dhcpd is running in IPv4 or IPv6 mode. */ size_t ranges_size; /*!< Size of the ranges array. */ struct leases_t *leases; /*!< An array of individual leases from dhcpd.leases file. */ - enum dhcp_version ip_version; /*!< Designator if the dhcpd is running in IPv4 or IPv6 mode. */ const char *dhcpdconf_file; /*!< Path to dhcpd.conf file. */ const char *dhcpdlease_file; /*!< Path to dhcpd.leases file. */ - int color_format; /*!< Column to use in color_tags array. */ struct output_sort *sorts; /*!< Linked list how to sort ranges. */ const char *output_file; /*!< Output file path. */ - char output_format; /*!< Output format, such as text, json, xml, .... */ const char *mustach_template; /*!< Mustach template file path. */ double warning; /*!< Warning percent threshold. */ double critical; /*!< Critical percent threshold. */ double warn_count; /*!< Maximum number of free IP's before warning. */ double crit_count; /*!< Maximum number of free IP's before critical. */ double minsize; /*!< Minimum size of range or shared network to be considered exceeding threshold. */ - unsigned int + int color_format; /*!< Column to use in color_tags array. */ + char output_format; /*!< Output format, such as text, json, xml, .... */ + uint32_t print_mac_addreses:1, /*!< Print mac address in xml or json. */ reverse_order:1, /*!< Reverse sort order. */ backups_found:1, /*!< Indicator if dhcpd.leases file has leases in backup state. */ @@ -238,7 +241,8 @@ struct conf_t { skip_critical:1, /*!< Skip critical values from output. */ skip_minsize:1, /*!< Skip alarming values that are below minsize from output. */ skip_suppressed:1, /*!< Skip alarming values that are suppressed with --snet-alarms option, or they are shared networks without IP availability. */ - color_mode:2; /*!< Indicator if colors should be used in output. */ + color_mode:2, /*!< Indicator if colors should be used in output. */ + pad_bits:4; }; /* Function prototypes */ diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 9a8ec37..8aa412a 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -62,6 +62,7 @@ struct expl { struct shared_network_t *shnet_p; struct output_helper_t oh; int current; + uint32_t pad; }; static int must_enter(void *closure, const char *name); From 008e9f17c1ce9433134a592e8179e4976185f68c Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 23 Mar 2019 22:19:13 +0000 Subject: [PATCH 126/158] other: use IP string lengths from netinet/in.h Signed-off-by: Sami Kerola --- src/other.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/other.c b/src/other.c index f9df885..21a19f4 100644 --- a/src/other.c +++ b/src/other.c @@ -298,7 +298,7 @@ const char *ntop_ipaddr_init(const union ipaddr_t *ip __attribute__ ((unused))) const char *ntop_ipaddr_v4(const union ipaddr_t *ip) { - static char buffer[sizeof("255.255.255.255")]; + static char buffer[INET_ADDRSTRLEN]; struct in_addr addr; addr.s_addr = htonl(ip->v4); @@ -307,7 +307,7 @@ const char *ntop_ipaddr_v4(const union ipaddr_t *ip) const char *ntop_ipaddr_v6(const union ipaddr_t *ip) { - static char buffer[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; + static char buffer[INET6_ADDRSTRLEN]; struct in6_addr addr; memcpy(addr.s6_addr, ip->v6, sizeof(addr.s6_addr)); From 4f64902a9e66a7356c4772b064e3bd1c2936db40 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 26 Mar 2019 21:00:40 +0000 Subject: [PATCH 127/158] mustach: sync with most recent mustach upstream changes Git: https://gitlab.com/jobol/mustach.git Commit: 3a694bdc6cdd374358a30949206e315ed3428cf9 Signed-off-by: Sami Kerola --- src/mustach-dhcpd-pools.c | 2 +- src/mustach.c | 127 ++++++++++++++++++++++++++++---------- src/mustach.h | 18 ++++-- 3 files changed, 110 insertions(+), 37 deletions(-) diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 8aa412a..00e1b8b 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -441,7 +441,7 @@ int mustach_dhcpd_pools(struct conf_t *state) case MUSTACH_ERROR_BAD_SEPARATORS: error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: bad separator"); break; - case MUSTACH_ERROR_TOO_DEPTH: + case MUSTACH_ERROR_TOO_DEEP: error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: too deep"); break; case MUSTACH_ERROR_CLOSING: diff --git a/src/mustach.c b/src/mustach.c index 9868cff..45eb7a4 100644 --- a/src/mustach.c +++ b/src/mustach.c @@ -30,6 +30,76 @@ #define NAME_LENGTH_MAX 1024 #define DEPTH_MAX 256 +#if !defined(NO_OPEN_MEMSTREAM) +static FILE *memfile_open(char **buffer, size_t *size) +{ + return open_memstream(buffer, size); +} +static void memfile_abort(FILE *file, char **buffer, size_t *size) +{ + fclose(file); + free(*buffer); + *buffer = NULL; + *size = 0; +} +static int memfile_close(FILE *file, char **buffer, size_t *size) +{ + int rc; + + /* adds terminating null */ + rc = fputc(0, file) ? MUSTACH_ERROR_SYSTEM : 0; + fclose(file); + if (rc == 0) + /* removes terminating null of the length */ + (*size)--; + else { + free(*buffer); + *buffer = NULL; + *size = 0; + } + return rc; +} +#else +static FILE *memfile_open(char **buffer, size_t *size) +{ + return tmpfile(); +} +static void memfile_abort(FILE *file, char **buffer, size_t *size) +{ + fclose(file); + *buffer = NULL; + *size = 0; +} +static int memfile_close(FILE *file, char **buffer, size_t *size) +{ + int rc; + size_t s; + char *b; + + s = (size_t)ftell(file); + b = malloc(s + 1); + if (b == NULL) { + rc = MUSTACH_ERROR_SYSTEM; + errno = ENOMEM; + s = 0; + } else { + rewind(file); + if (1 == fread(b, s, 1, file)) { + rc = 0; + b[s] = 0; + } else { + rc = MUSTACH_ERROR_SYSTEM; + free(b); + b = NULL; + s = 0; + } + } + *buffer = b; + *size = s; + return rc; +} +#endif + static int getpartial(struct mustach_itf *itf, void *closure, const char *name, char **result) { int rc; @@ -37,26 +107,22 @@ static int getpartial(struct mustach_itf *itf, void *closure, const char *name, size_t size; *result = NULL; - file = open_memstream(result, &size); + file = memfile_open(result, &size); if (file == NULL) rc = MUSTACH_ERROR_SYSTEM; else { rc = itf->put(closure, name, 0, file); - if (rc == 0) - /* adds terminating null */ - rc = fputc(0, file) ? MUSTACH_ERROR_SYSTEM : 0; - fclose(file); - if (rc < 0) { - free(*result); - *result = NULL; - } + if (rc < 0) + memfile_abort(file, result, &size); + else + rc = memfile_close(file, result, &size); } return rc; } static int process(const char *template, struct mustach_itf *itf, void *closure, FILE *file, const char *opstr, const char *clstr) { - char name[NAME_LENGTH_MAX + 1], *partial, c; + char name[NAME_LENGTH_MAX + 1], *partial, c, *tmp; const char *beg, *term; struct { const char *name, *again; size_t length; int emit, entered; } stack[DEPTH_MAX]; size_t oplen, cllen, len, l; @@ -112,8 +178,10 @@ static int process(const char *template, struct mustach_itf *itf, void *closure, default: while (len && isspace(beg[0])) { beg++; len--; } while (len && isspace(beg[len-1])) len--; +#if defined(NO_EXTENSION_FOR_MUSTACH) || defined(NO_ALLOW_EMPTY_TAG) if (len == 0) return MUSTACH_ERROR_EMPTY_TAG; +#endif if (len > NAME_LENGTH_MAX) return MUSTACH_ERROR_TAG_TOO_LONG; memcpy(name, beg, len); @@ -134,19 +202,25 @@ static int process(const char *template, struct mustach_itf *itf, void *closure, for (l = 0; l < len && !isspace(beg[l]) ; l++); if (l == len) return MUSTACH_ERROR_BAD_SEPARATORS; - opstr = strndupa(beg, l); + oplen = l; + tmp = alloca(oplen + 1); + memcpy(tmp, beg, oplen); + tmp[oplen] = 0; + opstr = tmp; while (l < len && isspace(beg[l])) l++; if (l == len) return MUSTACH_ERROR_BAD_SEPARATORS; - clstr = strndupa(beg + l, len - l); - oplen = strlen(opstr); - cllen = strlen(clstr); + cllen = len - l; + tmp = alloca(cllen + 1); + memcpy(tmp, beg + l, cllen); + tmp[cllen] = 0; + clstr = tmp; break; case '^': case '#': /* begin section */ if (depth == DEPTH_MAX) - return MUSTACH_ERROR_TOO_DEPTH; + return MUSTACH_ERROR_TOO_DEEP; rc = emit; if (rc) { rc = itf->enter(closure, name); @@ -234,24 +308,15 @@ int mustach(const char *template, struct mustach_itf *itf, void *closure, char * *result = NULL; if (size == NULL) size = &s; - file = open_memstream(result, size); - if (file == NULL) { + file = memfile_open(result, size); + if (file == NULL) rc = MUSTACH_ERROR_SYSTEM; - errno = ENOMEM; - } else { + else { rc = fmustach(template, itf, closure, file); - if (rc == 0) - /* adds terminating null */ - rc = fputc(0, file) ? MUSTACH_ERROR_SYSTEM : 0; - fclose(file); - if (rc >= 0) - /* removes terminating null of the length */ - (*size)--; - else { - free(*result); - *result = NULL; - *size = 0; - } + if (rc < 0) + memfile_abort(file, result, size); + else + rc = memfile_close(file, result, size); } return rc; } diff --git a/src/mustach.h b/src/mustach.h index 716d7e3..32288a1 100644 --- a/src/mustach.h +++ b/src/mustach.h @@ -29,12 +29,17 @@ * * The functions enter and next should return 0 or 1. * - * All other functions should normally return 0. + * All other functions should normally return 0. If it returns + * a negative value, it means an error that stop the process + * and that is reported to the caller. * * @start: Starts the mustach processing of the closure * 'start' is optional (can be NULL) * * @put: Writes the value of 'name' to 'file' with 'escape' or not + * As an extension (see NO_ALLOW_EMPTY_TAG), the 'name' can be + * the empty string. In that later case an implemntation can + * return MUSTACH_ERROR_EMPTY_TAG to refuse empty names. * * @enter: Enters the section of 'name' if possible. * Musts return 1 if entered or 0 if not entered. @@ -64,14 +69,17 @@ struct mustach_itf { #define MUSTACH_ERROR_EMPTY_TAG -3 #define MUSTACH_ERROR_TAG_TOO_LONG -4 #define MUSTACH_ERROR_BAD_SEPARATORS -5 -#define MUSTACH_ERROR_TOO_DEPTH -6 +#define MUSTACH_ERROR_TOO_DEEP -6 #define MUSTACH_ERROR_CLOSING -7 #define MUSTACH_ERROR_BAD_UNESCAPE_TAG -8 +/* compatibility with older bad name */ +#define MUSTACH_ERROR_TOO_DEPTH MUSTACH_ERROR_TOO_DEEP + /** * fmustach - Renders the mustache 'template' in 'file' for 'itf' and 'closure'. * - * @template: the template string to instantiate + * @template: the template string to instanciate * @itf: the interface to the functions that mustach calls * @closure: the closure to pass to functions called * @file: the file where to write the result @@ -84,7 +92,7 @@ extern int fmustach(const char *template, struct mustach_itf *itf, void *closure /** * fmustach - Renders the mustache 'template' in 'fd' for 'itf' and 'closure'. * - * @template: the template string to instantiate + * @template: the template string to instanciate * @itf: the interface to the functions that mustach calls * @closure: the closure to pass to functions called * @fd: the file descriptor number where to write the result @@ -97,7 +105,7 @@ extern int fdmustach(const char *template, struct mustach_itf *itf, void *closur /** * fmustach - Renders the mustache 'template' in 'result' for 'itf' and 'closure'. * - * @template: the template string to instantiate + * @template: the template string to instanciate * @itf: the interface to the functions that mustach calls * @closure: the closure to pass to functions called * @result: the pointer receiving the result when 0 is returned From 17d68b7e3e09977a4b3e726dc27888acef3a7756 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 26 Mar 2019 21:26:51 +0000 Subject: [PATCH 128/158] various: tidy up variable scopes, and one name mismatch Signed-off-by: Sami Kerola --- src/dhcpd-pools.h | 2 +- src/output.c | 8 ++++---- src/sort.c | 3 ++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 80e422d..2bb365c 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -279,7 +279,7 @@ extern void set_ipv_functions(struct conf_t *state, int version); extern void flip_ranges(struct conf_t *state); extern void clean_up(struct conf_t *state); extern void parse_cidr(struct conf_t *state, struct range_t *range_p, const char *word); -extern int parse_color_mode(const char *restrict optarg); +extern int parse_color_mode(const char *restrict arg); extern double strtod_or_err(const char *restrict str, const char *restrict errmesg); extern void __attribute__ ((noreturn)) print_version(void); extern void __attribute__ ((noreturn)) usage(int status); diff --git a/src/output.c b/src/output.c index c99eba2..a2f0c29 100644 --- a/src/output.c +++ b/src/output.c @@ -219,7 +219,6 @@ static void close_outfile(FILE *outfile) /*! \brief Text output format, which is the default. */ static int output_txt(struct conf_t *state) { - unsigned int i; struct range_t *range_p; struct shared_network_t *shared_p; struct output_helper_t oh; @@ -249,6 +248,7 @@ static int output_txt(struct conf_t *state) fprintf(outfile, "\n"); } if (state->number_limit & R_BIT) { + unsigned int i; for (i = 0; i < state->num_ranges; i++) { int color_set = 0; @@ -366,7 +366,6 @@ static int output_txt(struct conf_t *state) /*! \brief The xml output formats. */ static int output_xml(struct conf_t *state) { - unsigned int i; struct range_t *range_p; struct shared_network_t *shared_p; struct output_helper_t oh; @@ -394,6 +393,7 @@ static int output_xml(struct conf_t *state) } if (state->number_limit & R_BIT) { + unsigned int i; for (i = 0; i < state->num_ranges; i++) { if (range_output_helper(state, &oh, range_p)) { range_p++; @@ -762,7 +762,6 @@ static void newsection(FILE *restrict f, char const *restrict title) /*! \brief Output html format. */ static int output_html(struct conf_t *state) { - unsigned int i; struct range_t *range_p; struct shared_network_t *shared_p; struct output_helper_t oh; @@ -877,6 +876,7 @@ static int output_html(struct conf_t *state) end_tag(outfile, "thead"); } if (state->number_limit & R_BIT) { + unsigned int i; start_tag(outfile, "tbody"); for (i = 0; i < state->num_ranges; i++) { if (range_output_helper(state, &oh, range_p)) { @@ -916,7 +916,6 @@ static int output_html(struct conf_t *state) /*! \brief Output cvs format. */ static int output_csv(struct conf_t *state) { - unsigned int i; struct range_t *range_p; struct shared_network_t *shared_p; struct output_helper_t oh; @@ -935,6 +934,7 @@ static int output_csv(struct conf_t *state) fprintf(outfile, "\n"); } if (state->number_limit & R_BIT) { + unsigned int i; for (i = 0; i < state->num_ranges; i++) { if (range_output_helper(state, &oh, range_p)) { range_p++; diff --git a/src/sort.c b/src/sort.c index 2c3a05f..ab252c0 100644 --- a/src/sort.c +++ b/src/sort.c @@ -286,7 +286,6 @@ void mergesort_ranges(struct conf_t *state, struct range_t *restrict orig, unsig struct range_t *restrict temp, const int root_call) { unsigned int left, i, u_right; - int s_right; struct range_t hold; /* Merge sort split size */ static const unsigned int MIN_MERGE_SIZE = 8; @@ -296,6 +295,8 @@ void mergesort_ranges(struct conf_t *state, struct range_t *restrict orig, unsig if (size < MIN_MERGE_SIZE) { for (left = 0; left < size; left++) { + int s_right; + hold = *(orig + left); for (s_right = left - 1; 0 <= s_right; s_right--) { if (merge(state, (orig + s_right), &hold)) From 07b4eaa480ad4c6b37387ba0fc44105c8f99e7d7 Mon Sep 17 00:00:00 2001 From: Mark Sangster Date: Mon, 15 Apr 2019 15:15:58 +0100 Subject: [PATCH 129/158] output: fix warn and crit counts on shared networks The crit/warn_count is tested against used rather than free. It is only for shared networks, the range correctly subtracts count from size to get its free. Signed-off-by: Sami Kerola --- THANKS | 1 + src/output.c | 4 ++-- tests/alarm-count-option | 7 +++++++ tests/expected/alarm-count-option | 18 ++++++++++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/THANKS b/THANKS index 6e76373..a1ba2bc 100644 --- a/THANKS +++ b/THANKS @@ -45,3 +45,4 @@ Boris Lytochkin Jeff Bailey José Bollo Sebastián Cramatte +Mark Sangster diff --git a/src/output.c b/src/output.c index a2f0c29..275e431 100644 --- a/src/output.c +++ b/src/output.c @@ -158,11 +158,11 @@ int shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, oh->status = STATUS_IGNORED; if (state->skip_minsize) return 1; - } else if (state->critical < oh->percent && shared_p->used < state->crit_count) { + } else if (state->critical < oh->percent && (shared_p->available - shared_p->used) < state->crit_count) { oh->status = STATUS_CRIT; if (state->skip_critical) return 1; - } else if (state->warning < oh->percent && shared_p->used < state->warn_count) { + } else if (state->warning < oh->percent && (shared_p->available - shared_p->used) < state->warn_count) { oh->status = STATUS_WARN; if (state->skip_warning) return 1; diff --git a/tests/alarm-count-option b/tests/alarm-count-option index 763af1b..37d894d 100755 --- a/tests/alarm-count-option +++ b/tests/alarm-count-option @@ -32,6 +32,13 @@ dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/comp echo $? >> tests/outputs/$IAM-too cat tests/outputs/$IAM-too >> tests/outputs/$IAM +echo '== shared net count alarms ==' >> tests/outputs/$IAM +dhcpd-pools -c $top_srcdir/tests/confs/complete -l $top_srcdir/tests/leases/complete \ + --color=always --format t --crit-count=20 --critical=0 --warning=0 --warn-count=24 \ + --output=tests/outputs/$IAM-too +echo $? >> tests/outputs/$IAM-too +cat tests/outputs/$IAM-too >> tests/outputs/$IAM + rm -f tests/outputs/$IAM-too diff -u $top_srcdir/tests/expected/$IAM tests/outputs/$IAM exit $? diff --git a/tests/expected/alarm-count-option b/tests/expected/alarm-count-option index 3e9b76d..c2f466e 100644 --- a/tests/expected/alarm-count-option +++ b/tests/expected/alarm-count-option @@ -14,3 +14,21 @@ Shared nets - crit: 0 warn: 0 ok: 0 ignored: 2; | snet_crit=0 snet_warn=0 snet_o WARNING: dhcpd-pools: Ranges - crit: 0 warn: 0 ok: 2; | range_crit=0 range_warn=0 range_ok=2 Shared nets - crit: 0 warn: 2 ok: 0; | snet_crit=0 snet_warn=2 snet_ok=0 1 +== shared net count alarms == +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc +example1 10.0.0.1 - 10.0.0.20 20 11 55.000 0 11 55.000 +example1 10.1.0.1 - 10.1.0.20 20 10 50.000 0 10 50.000 +example2 10.2.0.1 - 10.2.0.20 20 8 40.000 0 8 40.000 +example2 10.3.0.1 - 10.3.0.20 20 9 45.000 0 9 45.000 +All networks 10.4.0.1 - 10.4.0.20 20 5 25.000 0 5 25.000 + +Shared networks: +name max cur percent touch t+c t+c perc +example1 40 21 52.500 0 21 52.500 +example2 40 17 42.500 0 17 42.500 + +Sum of all ranges: +name max cur percent touch t+c t+c perc +All networks 100 43 43.000 0 43 43.000 +0 From 707eafa67040659da363d3a8060c4b737eb21801 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 27 Jul 2019 21:17:45 +0100 Subject: [PATCH 130/158] build-sys: update .gitignore files Signed-off-by: Sami Kerola --- build-aux/.gitignore | 1 + lib/.gitignore | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/build-aux/.gitignore b/build-aux/.gitignore index a85ce13..1d51c02 100644 --- a/build-aux/.gitignore +++ b/build-aux/.gitignore @@ -1,6 +1,7 @@ /ar-lib /compile /config.guess +/config.rpath /config.sub /depcomp /install-sh diff --git a/lib/.gitignore b/lib/.gitignore index 521a078..0dd8aa6 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1,5 +1,3 @@ -/*.lo -/.libs/ /alloca.h /alloca.in.h /arg-nonnull.h @@ -62,6 +60,7 @@ /getprogname.c /getprogname.h /gettext.h +/glthread/* /hard-locale.c /hard-locale.h /inet_pton.c @@ -73,8 +72,10 @@ /itold.c /libc-config.h /libdhcpd_pools.la +/.libs/ /limits.h /limits.in.h +/*.lo /localcharset.c /localcharset.h /localtime-buffer.c @@ -136,14 +137,14 @@ /strstr.c /strtod.c /str-two-way.h -/sys/socket.h -/sys/stat.h -/sys/types.h -/sys/uio.h /sys_socket.c +/sys/socket.h /sys_socket.in.h +/sys/stat.h /sys_stat.in.h +/sys/types.h /sys_types.in.h +/sys/uio.h /sys_uio.in.h /timegm.c /time.h @@ -164,6 +165,15 @@ /wctype.h /wctype-h.c /wctype.in.h +/windows-initguard.h +/windows-mutex.c +/windows-mutex.h +/windows-once.c +/windows-once.h +/windows-recmutex.c +/windows-recmutex.h +/windows-rwlock.c +/windows-rwlock.h /xalloc-die.c /xalloc.h /xalloc-oversized.h From fb518b7a19ba397ccaad500a4bb9964e05d8cd4a Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 27 Jul 2019 21:02:10 +0100 Subject: [PATCH 131/158] output: add warning and critical threshold counts to mustach Signed-off-by: Sami Kerola --- samples/mustach.template | 6 +++ src/dhcpd-pools.h | 12 +++++ src/mustach-dhcpd-pools.c | 42 ++++++++++++---- src/output.c | 100 +++++++++++++++++++++++--------------- tests/expected/mustach | 12 +++++ 5 files changed, 125 insertions(+), 47 deletions(-) diff --git a/samples/mustach.template b/samples/mustach.template index 3c0db39..669910d 100644 --- a/samples/mustach.template +++ b/samples/mustach.template @@ -65,3 +65,9 @@ lease_file_epoch_mtime: {{lease_file_epoch_mtime}} template_file_path: {{template_file_path}} template_file_local_mtime: {{template_file_local_mtime}} template_file_epoch_mtime: {{template_file_epoch_mtime}} + +number_of_ranges_warning: {{number_of_ranges_warning}} +number_of_ranges_critical: {{number_of_ranges_critical}} +number_of_shared_networks: {{number_of_shared_networks}} +number_of_shared_networks_warning: {{number_of_shared_networks_warning}} +number_of_shared_networks_critical: {{number_of_shared_networks_critical}} diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 2bb365c..36ec255 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -155,6 +155,16 @@ struct output_helper_t { uint32_t pad; }; +/*! \struct status_counts_t + * \brief Range and shared network alarming status counts. + */ +struct status_counts_t { + unsigned int warning; + unsigned int critical; + unsigned int ok; + unsigned int ignored; +}; + /*! \enum ltype * \brief Lease state types. These are the possible values in struct leases_t. */ @@ -320,6 +330,8 @@ extern int range_output_helper(struct conf_t *state, struct output_helper_t *oh, extern int shnet_output_helper(struct conf_t *state, struct output_helper_t *oh, struct shared_network_t *shared_p); extern int output_analysis(struct conf_t *state); +extern void range_alarms(struct conf_t *state, struct status_counts_t *rangstat); +extern void shared_net_alarms(struct conf_t *state, struct status_counts_t *sharstat); /* sort.c */ extern void mergesort_ranges(struct conf_t *state, diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 00e1b8b..4e25346 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -82,21 +82,45 @@ static int must_put_base(void *closure, const char *name, int escape fprintf(file, "%u", e->state->num_ranges); return 0; } + if (!strcmp(name, "number_of_ranges_warning")) { + struct status_counts_t stat = { 0 }; + + range_alarms(e->state, &stat); + fprintf(file, "%u", stat.warning); + return 0; + } + if (!strcmp(name, "number_of_ranges_critical")) { + struct status_counts_t stat = { 0 }; + + range_alarms(e->state, &stat); + fprintf(file, "%u", stat.critical); + return 0; + } if (!strcmp(name, "number_of_shared_networks")) { - static uint32_t num = 0xffffffff; + uint32_t num = 0; + struct shared_network_t *shared_p; - if (num == 0xffffffff) { - /* Use of static num ensures this is done only once. */ - struct shared_network_t *shared_p; - - num = 0; - for (shared_p = e->state->shared_net_root->next; shared_p; - shared_p = shared_p->next) - num++; + for (shared_p = e->state->shared_net_root->next; shared_p; + shared_p = shared_p->next) { + num++; } fprintf(file, "%u", num); return 0; } + if (!strcmp(name, "number_of_shared_networks_warning")) { + struct status_counts_t stat = { 0 }; + + shared_net_alarms(e->state, &stat); + fprintf(file, "%u", stat.warning); + return 0; + } + if (!strcmp(name, "number_of_shared_networks_critical")) { + struct status_counts_t stat = { 0 }; + + shared_net_alarms(e->state, &stat); + fprintf(file, "%u", stat.critical); + return 0; + } if (!strcmp(name, "version")) { fprintf(file, "%s", PACKAGE_VERSION); return 0; diff --git a/src/output.c b/src/output.c index 275e431..bc20d18 100644 --- a/src/output.c +++ b/src/output.c @@ -1024,19 +1024,11 @@ static int output_csv(struct conf_t *state) return 0; } -/*! \brief Output alarm text, and return program exit value. */ -static int output_alarming(struct conf_t *state) +void range_alarms(struct conf_t *state, struct status_counts_t *rangstat) { - FILE *outfile; - struct range_t *range_p; - struct shared_network_t *shared_p; struct output_helper_t oh; + struct range_t *range_p = state->ranges; unsigned int i; - int rw = 0, rc = 0, ro = 0, ri = 0, sw = 0, sc = 0, so = 0, si = 0; - int ret_val; - - outfile = open_outfile(state); - range_p = state->ranges; if (state->number_limit & R_BIT) { for (i = 0; i < state->num_ranges; i++) { @@ -1045,16 +1037,16 @@ static int output_alarming(struct conf_t *state) case STATUS_SUPPRESSED: break; case STATUS_IGNORED: - ri++; + rangstat->ignored++; break; case STATUS_CRIT: - rc++; + rangstat->critical++; break; case STATUS_WARN: - rw++; + rangstat->warning++; break; case STATUS_OK: - ro++; + rangstat->ok++; break; default: abort(); @@ -1062,6 +1054,13 @@ static int output_alarming(struct conf_t *state) range_p++; } } +} + +void shared_net_alarms(struct conf_t *state, struct status_counts_t *sharstat) +{ + struct output_helper_t oh; + struct shared_network_t *shared_p; + if (state->number_limit & S_BIT) { for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { shnet_output_helper(state, &oh, shared_p); @@ -1069,35 +1068,51 @@ static int output_alarming(struct conf_t *state) case STATUS_SUPPRESSED: break; case STATUS_IGNORED: - si++; + sharstat->ignored++; break; case STATUS_CRIT: - sc++; + sharstat->critical++; break; case STATUS_WARN: - sw++; + sharstat->warning++; break; case STATUS_OK: - so++; + sharstat->ok++; break; default: abort(); } } } +} - if (sc || rc) + +/*! \brief Output alarm text, and return program exit value. */ +static int output_alarming(struct conf_t *state) +{ + FILE *outfile; + unsigned int i; + int ret_val; + struct status_counts_t rangstat = { 0 }; + struct status_counts_t sharstat = { 0 }; + + outfile = open_outfile(state); + + range_alarms(state, &rangstat); + shared_net_alarms(state, &sharstat); + + if (rangstat.critical || sharstat.critical) ret_val = STATE_CRITICAL; - else if (sw || rw) + else if (rangstat.warning || sharstat.warning) ret_val = STATE_WARNING; else ret_val = STATE_OK; - if ((0 < rc && state->number_limit & R_BIT) - || (0 < sc && state->number_limit & S_BIT)) { + if ((0 < rangstat.critical && state->number_limit & R_BIT) + || (0 < sharstat.critical && state->number_limit & S_BIT)) { fprintf(outfile, "CRITICAL: %s:", program_name); - } else if ((0 < rw && state->number_limit & R_BIT) - || (0 < sw && state->number_limit & S_BIT)) { + } else if ((0 < rangstat.warning && state->number_limit & R_BIT) + || (0 < sharstat.warning && state->number_limit & S_BIT)) { fprintf(outfile, "WARNING: %s:", program_name); } else { if (state->number_limit & A_BIT) @@ -1110,17 +1125,21 @@ static int output_alarming(struct conf_t *state) } } if (state->header_limit & R_BIT) { - fprintf(outfile, " Ranges - crit: %d warn: %d ok: %d", rc, rw, ro); - if (ri != 0) { - fprintf(outfile, " ignored: %d", ri); + fprintf(outfile, " Ranges - crit: %d warn: %d ok: %d", rangstat.critical, rangstat.warning, rangstat.ok); + if (rangstat.ignored != 0) { + fprintf(outfile, " ignored: %d", rangstat.ignored); } - fprintf(outfile, "; | range_crit=%d range_warn=%d range_ok=%d", rc, rw, ro); - if (ri != 0) { - fprintf(outfile, " range_ignored=%d", ri); + fprintf(outfile, "; | range_crit=%d range_warn=%d range_ok=%d", rangstat.critical, rangstat.warning, rangstat.ok); + if (rangstat.ignored != 0) { + fprintf(outfile, " range_ignored=%d", rangstat.ignored); } if (state->perfdata == 1 && state->number_limit & R_BIT) { - for (i = 0; i < state->num_ranges; i++) { - range_p--; + /* last to first order. too late to fix this after so many years */ + struct range_t *range_p = state->ranges + state->num_ranges - 1; + + for (i = state->num_ranges; i; i--) { + struct output_helper_t oh; + if (range_output_helper(state, &oh, range_p)) continue; if (state->minsize < oh.range_size) { @@ -1137,6 +1156,7 @@ static int output_alarming(struct conf_t *state) range_p->backups); } } + range_p--; } } fprintf(outfile, "\n"); @@ -1144,16 +1164,20 @@ static int output_alarming(struct conf_t *state) fprintf(outfile, " "); } if (state->header_limit & S_BIT) { - fprintf(outfile, "Shared nets - crit: %d warn: %d ok: %d", sc, sw, so); - if (si != 0) { - fprintf(outfile, " ignored: %d", si); + fprintf(outfile, "Shared nets - crit: %d warn: %d ok: %d", sharstat.critical, sharstat.warning, sharstat.ok); + if (sharstat.ignored != 0) { + fprintf(outfile, " ignored: %d", sharstat.ignored); } - fprintf(outfile, "; | snet_crit=%d snet_warn=%d snet_ok=%d", sc, sw, so); - if (si != 0) { - fprintf(outfile, " snet_ignored=%d", si); + fprintf(outfile, "; | snet_crit=%d snet_warn=%d snet_ok=%d", sharstat.critical, sharstat.warning, sharstat.ok); + if (sharstat.ignored != 0) { + fprintf(outfile, " snet_ignored=%d", sharstat.ignored); } if (state->perfdata == 1 && state->header_limit & R_BIT) { + struct shared_network_t *shared_p; + for (shared_p = state->shared_net_root->next; shared_p; shared_p = shared_p->next) { + struct output_helper_t oh; + if (shnet_output_helper(state, &oh, shared_p)) continue; if (state->minsize < shared_p->available) { diff --git a/tests/expected/mustach b/tests/expected/mustach index dddecb0..a8942c6 100644 --- a/tests/expected/mustach +++ b/tests/expected/mustach @@ -120,6 +120,12 @@ number_of_shared_networks: 2 + +number_of_ranges_warning: 0 +number_of_ranges_critical: 0 +number_of_shared_networks: 2 +number_of_shared_networks_warning: 0 +number_of_shared_networks_critical: 0 --- skip ok --- Subnets: location: example1 @@ -201,3 +207,9 @@ number_of_shared_networks: 2 + +number_of_ranges_warning: 3 +number_of_ranges_critical: 0 +number_of_shared_networks: 2 +number_of_shared_networks_warning: 1 +number_of_shared_networks_critical: 0 From 21194d2e4aa62aabc0bb50f4040422b4426c2761 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 27 Jul 2019 22:53:42 +0100 Subject: [PATCH 132/158] samples: make prometheus template less klunky This should work nicer when displaying various statistics from prometheus with grafana. Signed-off-by: Sami Kerola --- samples/prometheus.template | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/samples/prometheus.template b/samples/prometheus.template index f8a5726..d48f959 100644 --- a/samples/prometheus.template +++ b/samples/prometheus.template @@ -1,30 +1,11 @@ # This mustach template can be used as Prometheus text file. # https://prometheus.io/ - -# HELP dhcpd_pools_ranges The range statistics. -# TYPE dhcpd_pools_ranges gauge -{{#subnets}}dhcpd_pools_ranges{range="{{first_ip}}",used="1"} {{used}} {{gettimeofday}}000 -dhcpd_pools_ranges{range="{{first_ip}}",touched="1"} {{touched}} {{gettimeofday}}000 -dhcpd_pools_ranges{range="{{first_ip}}",defined="1"} {{defined}} {{gettimeofday}}000 -dhcpd_pools_ranges{range="{{first_ip}}",free="1"} {{free}} {{gettimeofday}}000 -dhcpd_pools_ranges{range="{{first_ip}}",touch_count="1"} {{touch_count}} {{gettimeofday}}000 -dhcpd_pools_ranges{range="{{first_ip}}",status="1"} {{status}} {{gettimeofday}}000 +# HELP dhcpd_pools ISC dhcpd statistics +# TYPE dhcpd_pools gauge +{{#subnets}}dhcpd_pools{location="{{location}}",range="{{first_ip}}",used="1"} {{used}} {{gettimeofday}}000 +dhcpd_pools{location="{{location}}",range="{{first_ip}}",touched="1"} {{touched}} {{gettimeofday}}000 +dhcpd_pools{location="{{location}}",range="{{first_ip}}",defined="1"} {{defined}} {{gettimeofday}}000 +dhcpd_pools{location="{{location}}",range="{{first_ip}}",free="1"} {{free}} {{gettimeofday}}000 +dhcpd_pools{location="{{location}}",range="{{first_ip}}",touch_count="1"} {{touch_count}} {{gettimeofday}}000 +dhcpd_pools{location="{{location}}",range="{{first_ip}}",status="1"} {{status}} {{gettimeofday}}000 {{/subnets}} -# HELP dhcpd_pools_shared_nets The shared networks statistics. -# TYPE dhcpd_pools_shared_nets gauge -{{#shared-networks}}dhcpd_pools_shared_nets{location="{{location}}",defined="1"} {{defined}} {{gettimeofday}}000 -dhcpd_pools_shared_nets{location="{{location}}",used="1"} {{used}} {{gettimeofday}}000 -dhcpd_pools_shared_nets{location="{{location}}",touched="1"} {{touched}} {{gettimeofday}}000 -dhcpd_pools_shared_nets{location="{{location}}",free="1"} {{free}} {{gettimeofday}}000 -dhcpd_pools_shared_nets{location="{{location}}",touch_count="1"} {{touch_count}} {{gettimeofday}}000 -dhcpd_pools_shared_nets{location="{{location}}",status="1"} {{status}} {{gettimeofday}}000 -{{/shared-networks}} -# HELP dhcpd_pools_summary Statistics of the all networks. -# TYPE dhcpd_pools_summary gauge -{{#summary}}dhcpd_pools_summary{location="{{location}}",defined="1"} {{defined}} {{gettimeofday}}000 -dhcpd_pools_summary{location="{{location}}",used="1"} {{used}} {{gettimeofday}}000 -dhcpd_pools_summary{location="{{location}}",touched="1"} {{touched}} {{gettimeofday}}000 -dhcpd_pools_summary{location="{{location}}",free="1"} {{free}} {{gettimeofday}}000 -dhcpd_pools_summary{location="{{location}}",touch_count="1"} {{touch_count}} {{gettimeofday}}000 -dhcpd_pools_summary{location="{{location}}",status="1"} {{status}} {{gettimeofday}}000 -{{/summary}} From b96c6c14d2f31c6ec0530ffad568b94de2bce363 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Thu, 12 Sep 2019 22:27:58 +0100 Subject: [PATCH 133/158] misc: fix spelling issues Signed-off-by: Sami Kerola --- man/dhcpd-pools.1.in | 4 ++-- tests/expected/sorts | 2 +- tests/sorts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 91bc53a..2179163 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -156,7 +156,7 @@ printed. .TP \fB\-\-color\fR=\fIwhen\fR Use yellow for warning, red for critical, green for suppressed by \-\-minsize -and blue when \-\-snet\-alarms is the cause of supression or shared network +and blue when \-\-snet\-alarms is the cause of suppression or shared network does not have any ranges. The .I when string can be @@ -183,7 +183,7 @@ can be one of the following: .IR minsize , or .IR suppressed . -The skipping criterias are exact match with colors in \-\-color option. +The skipping criteria is exact match with colors in \-\-color option. .TP \fB\-\-warning\fR=\fIpercent\fR Turn on alarm output format, and specify percentage number which will diff --git a/tests/expected/sorts b/tests/expected/sorts index c6a6f21..b5f1dc7 100644 --- a/tests/expected/sorts +++ b/tests/expected/sorts @@ -34,7 +34,7 @@ Sum of all ranges: name max cur percent touch t+c t+c perc All networks 100 43 43.000 0 43 43.000 0 -== maxium == +== maximum == Ranges: shared net name first ip last ip max cur percent touch t+c t+c perc All networks 10.4.0.1 - 10.4.0.20 20 5 25.000 0 5 25.000 diff --git a/tests/sorts b/tests/sorts index 74185cb..bc6b9be 100755 --- a/tests/sorts +++ b/tests/sorts @@ -20,7 +20,7 @@ dhcpd-pools --config $top_srcdir/tests/confs/complete --leases $top_srcdir/tests echo $? >> tests/outputs/$IAM-too cat tests/outputs/$IAM-too >> tests/outputs/$IAM -echo '== maxium ==' >> tests/outputs/$IAM +echo '== maximum ==' >> tests/outputs/$IAM dhcpd-pools --config $top_srcdir/tests/confs/complete --leases $top_srcdir/tests/leases/complete \ --sort=m --output=tests/outputs/$IAM-too echo $? >> tests/outputs/$IAM-too From 544e7ec0a594c4cfe56d647d532f105895d3b3d9 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 26 Oct 2019 21:50:48 +0100 Subject: [PATCH 134/158] output: add ethernet address priting support to --mustach Signed-off-by: Sami Kerola --- samples/mustach.template | 3 ++ src/dhcpd-pools.c | 1 + src/mustach-dhcpd-pools.c | 38 ++++++++++++++ tests/expected/mustach | 102 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 144 insertions(+) diff --git a/samples/mustach.template b/samples/mustach.template index 669910d..ed4561e 100644 --- a/samples/mustach.template +++ b/samples/mustach.template @@ -1,3 +1,6 @@ +Ethernets:{{#active_lease}} + macaddress: {{macaddress}} ip: {{ip}}{{/active_lease}} + Subnets:{{#subnets}} location: {{location}} range: {{range}} diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 4bea2ee..1488541 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -231,6 +231,7 @@ static void parse_command_line_opts(struct conf_t *state, int argc, char **argv) #ifdef BUILD_MUSTACH state->mustach_template = optarg; state->output_format = 'm'; + state->print_mac_addreses = 1; #else error(EXIT_FAILURE, 0, "compiled without mustach support"); #endif diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 4e25346..625588e 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -58,6 +58,7 @@ */ struct expl { struct conf_t *state; + struct leases_t *lease_p; struct range_t *range_p; struct shared_network_t *shnet_p; struct output_helper_t oh; @@ -178,6 +179,36 @@ static struct mustach_itf itf = { .leave = must_leave }; +/*! \brief Mustach active lease aka {{#active_lease}} tag parser and printer. */ +static int must_put_active_lease(void *closure, const char *name, int escape + __attribute__((unused)), FILE *file) +{ + struct expl *e = closure; + + if (!strcmp(name, "ip")) { + fprintf(file, "%s", ntop_ipaddr(&e->lease_p->ip)); + return 0; + } + if (!strcmp(name, "macaddress")) { + fprintf(file, "%s", e->lease_p->ethernet); + return 0; + } + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: unexpected tag: %s", name); + return 1; +} + +/*! \brief A function to move to next lease when {{/active_lease}} is encountered. */ +static int must_next_active_lease(void *closure) +{ + struct expl *e = closure; + + e->lease_p = e->lease_p->hh.next; + if (e->lease_p == NULL) + return 0; + return 1; +} + + /*! \brief Mustach range aka {{#subnets}} tag parser and printer. */ static int must_put_range(void *closure, const char *name, int escape __attribute__ ((unused)), FILE *file) @@ -359,6 +390,13 @@ static int must_enter(void *closure, const char *name) { struct expl *e = closure; + if (!strcmp(name, "active_lease")) { + itf.put = must_put_active_lease; + itf.next = must_next_active_lease; + e->current = 0; + e->lease_p = e->state->leases; + return must_next_active_lease(closure); + } if (!strcmp(name, "subnets")) { itf.put = must_put_range; itf.next = must_next_range; diff --git a/tests/expected/mustach b/tests/expected/mustach index a8942c6..f4df432 100644 --- a/tests/expected/mustach +++ b/tests/expected/mustach @@ -1,3 +1,54 @@ +Ethernets: + macaddress: 00:00:00:00:00:01 ip: 10.0.0.1 + macaddress: 00:00:00:00:00:02 ip: 10.0.0.2 + macaddress: 00:00:00:00:00:03 ip: 10.0.0.3 + macaddress: 00:00:00:00:00:04 ip: 10.0.0.4 + macaddress: 00:00:00:00:00:05 ip: 10.0.0.5 + macaddress: 00:00:00:00:00:06 ip: 10.0.0.6 + macaddress: 00:00:00:00:00:07 ip: 10.0.0.7 + macaddress: 00:00:00:00:00:08 ip: 10.0.0.8 + macaddress: 00:00:00:00:00:09 ip: 10.0.0.9 + macaddress: 00:00:00:00:00:10 ip: 10.0.0.10 + macaddress: 00:00:00:00:00:11 ip: 10.0.0.11 + macaddress: 00:00:00:00:00:12 ip: 10.0.0.12 + macaddress: 00:00:00:00:01:00 ip: 10.1.0.0 + macaddress: 00:00:00:00:01:01 ip: 10.1.0.1 + macaddress: 00:00:00:00:01:02 ip: 10.1.0.2 + macaddress: 00:00:00:00:01:03 ip: 10.1.0.3 + macaddress: 00:00:00:00:01:04 ip: 10.1.0.4 + macaddress: 00:00:00:00:01:05 ip: 10.1.0.5 + macaddress: 00:00:00:00:01:06 ip: 10.1.0.6 + macaddress: 00:00:00:00:01:07 ip: 10.1.0.7 + macaddress: 00:00:00:00:01:08 ip: 10.1.0.8 + macaddress: 00:00:00:00:01:09 ip: 10.1.0.9 + macaddress: 00:00:00:00:01:10 ip: 10.1.0.10 + macaddress: 00:00:00:00:02:00 ip: 10.2.0.0 + macaddress: 00:00:00:00:02:01 ip: 10.2.0.1 + macaddress: 00:00:00:00:02:02 ip: 10.2.0.2 + macaddress: 00:00:00:00:02:03 ip: 10.2.0.3 + macaddress: 00:00:00:00:02:04 ip: 10.2.0.4 + macaddress: 00:00:00:00:02:05 ip: 10.2.0.5 + macaddress: 00:00:00:00:02:06 ip: 10.2.0.6 + macaddress: 00:00:00:00:02:07 ip: 10.2.0.7 + macaddress: 00:00:00:00:02:08 ip: 10.2.0.8 + macaddress: 00:00:00:00:03:00 ip: 10.3.0.0 + macaddress: 00:00:00:00:03:01 ip: 10.3.0.1 + macaddress: 00:00:00:00:03:02 ip: 10.3.0.2 + macaddress: 00:00:00:00:03:03 ip: 10.3.0.3 + macaddress: 00:00:00:00:03:04 ip: 10.3.0.4 + macaddress: 00:00:00:00:03:05 ip: 10.3.0.5 + macaddress: 00:00:00:00:03:06 ip: 10.3.0.6 + macaddress: 00:00:00:00:03:07 ip: 10.3.0.7 + macaddress: 00:00:00:00:03:08 ip: 10.3.0.8 + macaddress: 00:00:00:00:03:09 ip: 10.3.0.9 + macaddress: 00:00:00:00:04:00 ip: 10.4.0.0 + macaddress: 00:00:00:00:04:01 ip: 10.4.0.1 + macaddress: 00:00:00:00:04:02 ip: 10.4.0.2 + macaddress: 00:00:00:00:04:03 ip: 10.4.0.3 + macaddress: 00:00:00:00:04:04 ip: 10.4.0.4 + macaddress: 00:00:00:00:04:05 ip: 10.4.0.5 + macaddress: 00:00:00:00:04:06 ip: 10.4.0.6 + Subnets: location: example1 range: 10.0.0.1 - 10.0.0.20 @@ -127,6 +178,57 @@ number_of_shared_networks: 2 number_of_shared_networks_warning: 0 number_of_shared_networks_critical: 0 --- skip ok --- +Ethernets: + macaddress: 00:00:00:00:00:01 ip: 10.0.0.1 + macaddress: 00:00:00:00:00:02 ip: 10.0.0.2 + macaddress: 00:00:00:00:00:03 ip: 10.0.0.3 + macaddress: 00:00:00:00:00:04 ip: 10.0.0.4 + macaddress: 00:00:00:00:00:05 ip: 10.0.0.5 + macaddress: 00:00:00:00:00:06 ip: 10.0.0.6 + macaddress: 00:00:00:00:00:07 ip: 10.0.0.7 + macaddress: 00:00:00:00:00:08 ip: 10.0.0.8 + macaddress: 00:00:00:00:00:09 ip: 10.0.0.9 + macaddress: 00:00:00:00:00:10 ip: 10.0.0.10 + macaddress: 00:00:00:00:00:11 ip: 10.0.0.11 + macaddress: 00:00:00:00:00:12 ip: 10.0.0.12 + macaddress: 00:00:00:00:01:00 ip: 10.1.0.0 + macaddress: 00:00:00:00:01:01 ip: 10.1.0.1 + macaddress: 00:00:00:00:01:02 ip: 10.1.0.2 + macaddress: 00:00:00:00:01:03 ip: 10.1.0.3 + macaddress: 00:00:00:00:01:04 ip: 10.1.0.4 + macaddress: 00:00:00:00:01:05 ip: 10.1.0.5 + macaddress: 00:00:00:00:01:06 ip: 10.1.0.6 + macaddress: 00:00:00:00:01:07 ip: 10.1.0.7 + macaddress: 00:00:00:00:01:08 ip: 10.1.0.8 + macaddress: 00:00:00:00:01:09 ip: 10.1.0.9 + macaddress: 00:00:00:00:01:10 ip: 10.1.0.10 + macaddress: 00:00:00:00:02:00 ip: 10.2.0.0 + macaddress: 00:00:00:00:02:01 ip: 10.2.0.1 + macaddress: 00:00:00:00:02:02 ip: 10.2.0.2 + macaddress: 00:00:00:00:02:03 ip: 10.2.0.3 + macaddress: 00:00:00:00:02:04 ip: 10.2.0.4 + macaddress: 00:00:00:00:02:05 ip: 10.2.0.5 + macaddress: 00:00:00:00:02:06 ip: 10.2.0.6 + macaddress: 00:00:00:00:02:07 ip: 10.2.0.7 + macaddress: 00:00:00:00:02:08 ip: 10.2.0.8 + macaddress: 00:00:00:00:03:00 ip: 10.3.0.0 + macaddress: 00:00:00:00:03:01 ip: 10.3.0.1 + macaddress: 00:00:00:00:03:02 ip: 10.3.0.2 + macaddress: 00:00:00:00:03:03 ip: 10.3.0.3 + macaddress: 00:00:00:00:03:04 ip: 10.3.0.4 + macaddress: 00:00:00:00:03:05 ip: 10.3.0.5 + macaddress: 00:00:00:00:03:06 ip: 10.3.0.6 + macaddress: 00:00:00:00:03:07 ip: 10.3.0.7 + macaddress: 00:00:00:00:03:08 ip: 10.3.0.8 + macaddress: 00:00:00:00:03:09 ip: 10.3.0.9 + macaddress: 00:00:00:00:04:00 ip: 10.4.0.0 + macaddress: 00:00:00:00:04:01 ip: 10.4.0.1 + macaddress: 00:00:00:00:04:02 ip: 10.4.0.2 + macaddress: 00:00:00:00:04:03 ip: 10.4.0.3 + macaddress: 00:00:00:00:04:04 ip: 10.4.0.4 + macaddress: 00:00:00:00:04:05 ip: 10.4.0.5 + macaddress: 00:00:00:00:04:06 ip: 10.4.0.6 + Subnets: location: example1 range: 10.0.0.1 - 10.0.0.20 From e48768b041a117a6794d5da0602042cc5ed4d903 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 31 Mar 2020 19:55:33 +0100 Subject: [PATCH 135/158] build-sys: update bootstrap from gnulib Signed-off-by: Sami Kerola --- THANKS | 1 + bootstrap | 299 ++++++++++++++++++++++++++++--------------------- bootstrap.conf | 4 +- lib/.gitignore | 13 +++ 4 files changed, 188 insertions(+), 129 deletions(-) diff --git a/THANKS b/THANKS index a1ba2bc..e91502a 100644 --- a/THANKS +++ b/THANKS @@ -46,3 +46,4 @@ Jeff Bailey José Bollo Sebastián Cramatte Mark Sangster +Brent Swingle diff --git a/bootstrap b/bootstrap index 43c8545..3d1bc08 100755 --- a/bootstrap +++ b/bootstrap @@ -1,10 +1,10 @@ #! /bin/sh # Print a version string. -scriptversion=2017-09-13.06; # UTC +scriptversion=2019-01-04.17; # UTC # Bootstrap this package from checked-out sources. -# Copyright (C) 2003-2017 Free Software Foundation, Inc. +# Copyright (C) 2003-2020 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -47,6 +47,8 @@ PERL="${PERL-perl}" me=$0 +default_gnulib_url=git://git.sv.gnu.org/gnulib + usage() { cat </dev/null; then - echo "$0: getting gnulib files..." - git submodule init -- "$gnulib_path" || exit $? - git submodule update -- "$gnulib_path" || exit $? - - elif [ ! -d "$gnulib_path" ]; then - echo "$0: getting gnulib files..." - - trap cleanup_gnulib 1 2 13 15 - - shallow= - git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' - git clone $shallow git://git.sv.gnu.org/gnulib "$gnulib_path" || - cleanup_gnulib - - trap - 1 2 13 15 +if $use_gnulib; then + if $use_git; then + gnulib_path=$(git_modules_config submodule.gnulib.path) + test -z "$gnulib_path" && gnulib_path=gnulib fi - GNULIB_SRCDIR=$gnulib_path - ;; -*) - # Use GNULIB_SRCDIR directly or as a reference. - if $use_git && test -d "$GNULIB_SRCDIR"/.git && \ - git_modules_config submodule.gnulib.url >/dev/null; then - echo "$0: getting gnulib files..." - if git submodule -h|grep -- --reference > /dev/null; then - # Prefer the one-liner available in git 1.6.4 or newer. - git submodule update --init --reference "$GNULIB_SRCDIR" \ - "$gnulib_path" || exit $? - else - # This fallback allows at least git 1.5.5. - if test -f "$gnulib_path"/gnulib-tool; then - # Since file already exists, assume submodule init already complete. - git submodule update -- "$gnulib_path" || exit $? - else - # Older git can't clone into an empty directory. - rmdir "$gnulib_path" 2>/dev/null - git clone --reference "$GNULIB_SRCDIR" \ - "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \ - && git submodule init -- "$gnulib_path" \ - && git submodule update -- "$gnulib_path" \ - || exit $? + + # Get gnulib files. Populate $GNULIB_SRCDIR, possibly updating a + # submodule, for use in the rest of the script. + + case ${GNULIB_SRCDIR--} in + -) + # Note that $use_git is necessarily true in this case. + if git_modules_config submodule.gnulib.url >/dev/null; then + echo "$0: getting gnulib files..." + git submodule init -- "$gnulib_path" || exit $? + git submodule update -- "$gnulib_path" || exit $? + + elif [ ! -d "$gnulib_path" ]; then + echo "$0: getting gnulib files..." + + trap cleanup_gnulib 1 2 13 15 + + shallow= + if test -z "$GNULIB_REVISION"; then + git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' fi + git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \ + || cleanup_gnulib + + trap - 1 2 13 15 fi GNULIB_SRCDIR=$gnulib_path + ;; + *) + # Use GNULIB_SRCDIR directly or as a reference. + if $use_git && test -d "$GNULIB_SRCDIR"/.git && \ + git_modules_config submodule.gnulib.url >/dev/null; then + echo "$0: getting gnulib files..." + if git submodule -h|grep -- --reference > /dev/null; then + # Prefer the one-liner available in git 1.6.4 or newer. + git submodule update --init --reference "$GNULIB_SRCDIR" \ + "$gnulib_path" || exit $? + else + # This fallback allows at least git 1.5.5. + if test -f "$gnulib_path"/gnulib-tool; then + # Since file already exists, assume submodule init already complete. + git submodule update -- "$gnulib_path" || exit $? + else + # Older git can't clone into an empty directory. + rmdir "$gnulib_path" 2>/dev/null + git clone --reference "$GNULIB_SRCDIR" \ + "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \ + && git submodule init -- "$gnulib_path" \ + && git submodule update -- "$gnulib_path" \ + || exit $? + fi + fi + GNULIB_SRCDIR=$gnulib_path + fi + ;; + esac + + if test -d "$GNULIB_SRCDIR"/.git && test -n "$GNULIB_REVISION" \ + && ! git_modules_config submodule.gnulib.url >/dev/null; then + (cd "$GNULIB_SRCDIR" && git checkout "$GNULIB_REVISION") || cleanup_gnulib fi - ;; -esac -# $GNULIB_SRCDIR now points to the version of gnulib to use, and -# we no longer need to use git or $gnulib_path below here. + # $GNULIB_SRCDIR now points to the version of gnulib to use, and + # we no longer need to use git or $gnulib_path below here. -if $bootstrap_sync; then - cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || { - echo "$0: updating bootstrap and restarting..." - case $(sh -c 'echo "$1"' -- a) in - a) ignored=--;; - *) ignored=ignored;; - esac - exec sh -c \ - 'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ - $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \ - "$0" "$@" --no-bootstrap-sync - } + if $bootstrap_sync; then + cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || { + echo "$0: updating bootstrap and restarting..." + case $(sh -c 'echo "$1"' -- a) in + a) ignored=--;; + *) ignored=ignored;; + esac + exec sh -c \ + 'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ + $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \ + "$0" "$@" --no-bootstrap-sync + } + fi + + gnulib_tool=$GNULIB_SRCDIR/gnulib-tool + <$gnulib_tool || exit $? fi -gnulib_tool=$GNULIB_SRCDIR/gnulib-tool -<$gnulib_tool || exit $? - # Get translations. download_po_files() { subdir=$1 domain=$2 echo "$me: getting translations into $subdir for $domain..." - cmd=$(printf "$po_download_command_format" "$domain" "$subdir") - eval "$cmd" && return - # Fallback to HTTP. - cmd=$(printf "$po_download_command_format2" "$subdir" "$domain") + cmd=$(printf "$po_download_command_format" "$subdir" "$domain") eval "$cmd" } @@ -793,7 +827,7 @@ symlink_to_dir() # aren't confused into doing unnecessary builds. Conversely, if the # existing symlink's timestamp is older than the source, make it afresh, # so that broken tools aren't confused into skipping needed builds. See - # . + # . test -h "$dst" && src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 && dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 && @@ -899,36 +933,47 @@ fi # Import from gnulib. -gnulib_tool_options="\ - --import\ - --no-changelog\ - --aux-dir $build_aux\ - --doc-base $doc_base\ - --lib $gnulib_name\ - --m4-base $m4_base/\ - --source-base $source_base/\ - --tests-base $tests_base\ - --local-dir $local_gl_dir\ - $gnulib_tool_option_extras\ -" -if test $use_libtool = 1; then - case "$gnulib_tool_options " in - *' --libtool '*) ;; - *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; - esac -fi -echo "$0: $gnulib_tool $gnulib_tool_options --import ..." -$gnulib_tool $gnulib_tool_options --import $gnulib_modules \ - || die "gnulib-tool failed" +if $use_gnulib; then + gnulib_tool_options="\ + --no-changelog\ + --aux-dir=$build_aux\ + --doc-base=$doc_base\ + --lib=$gnulib_name\ + --m4-base=$m4_base/\ + --source-base=$source_base/\ + --tests-base=$tests_base\ + --local-dir=$local_gl_dir\ + $gnulib_tool_option_extras\ + " + if test $use_libtool = 1; then + case "$gnulib_tool_options " in + *' --libtool '*) ;; + *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; + esac + fi + echo "$0: $gnulib_tool $gnulib_tool_options --import ..." + $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ + || die "gnulib-tool failed" -for file in $gnulib_files; do - symlink_to_dir "$GNULIB_SRCDIR" $file \ - || die "failed to symlink $file" -done + for file in $gnulib_files; do + symlink_to_dir "$GNULIB_SRCDIR" $file \ + || die "failed to symlink $file" + done +fi bootstrap_post_import_hook \ || die "bootstrap_post_import_hook failed" +# Don't proceed if there are uninitialized submodules. In particular, +# the next step will remove dangling links, which might be links into +# uninitialized submodules. +# +# Uninitialized submodules are listed with an initial dash. +if $use_git && git submodule | grep '^-' >/dev/null; then + die "some git submodules are not initialized. " \ + "Run 'git submodule init' and bootstrap again." +fi + # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some # gnulib-populated directories. Such .m4 files would cause aclocal to fail. # The following requires GNU find 4.2.3 or newer. Considering the usual @@ -1021,7 +1066,7 @@ bootstrap_epilogue echo "$0: done. Now you can run './configure'." # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" diff --git a/bootstrap.conf b/bootstrap.conf index bc07e7f..321ed00 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -1,6 +1,6 @@ # Bootstrap configuration. -# Copyright (C) 2006-2017 Free Software Foundation, Inc. +# Copyright (C) 2006-2020 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # gnulib modules used by this package. diff --git a/lib/.gitignore b/lib/.gitignore index 0dd8aa6..03b1c1f 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -65,11 +65,15 @@ /hard-locale.h /inet_pton.c /intprops.h +/inttypes.h +/inttypes.in.h /isnan.c /isnand.c /isnanf.c /isnanl.c /itold.c +/lc-charset-dispatch.c +/lc-charset-dispatch.h /libc-config.h /libdhcpd_pools.la /.libs/ @@ -78,6 +82,8 @@ /*.lo /localcharset.c /localcharset.h +/locale.h +/locale.in.h /localtime-buffer.c /localtime-buffer.h /lseek.c @@ -89,7 +95,11 @@ /math.h /math.in.h /mbrtowc.c +/mbrtowc-impl.h +/mbrtowc-impl-utf8.h /mbsinit.c +/mbtowc-lock.c +/mbtowc-lock.h /memchr.c /memchr.valgrind /minmax.h @@ -110,6 +120,9 @@ /quote.h /realloc.c /setenv.c +/setlocale-lock.c +/setlocale_null.c +/setlocale_null.h /stat.c /stat-time.c /stat-time.h From ec613f762d3bcf299e8a83d3af83c5a48a68d78c Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 31 Mar 2020 20:11:48 +0100 Subject: [PATCH 136/158] output: update javascripts Signed-off-by: Sami Kerola --- src/output.c | 6 +++--- tests/expected/formats | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/output.c b/src/output.c index bc20d18..2d7f28d 100644 --- a/src/output.c +++ b/src/output.c @@ -628,8 +628,8 @@ static void html_header(struct conf_t *state, FILE *restrict f) fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); @@ -652,7 +652,7 @@ static void html_footer(FILE *restrict f) fprintf(f, "Generated using %s
\n", PACKAGE_STRING); fprintf(f, "More info at %s\n", PACKAGE_URL, PACKAGE_URL); fprintf(f, "
\n"); - fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); diff --git a/tests/expected/formats b/tests/expected/formats index 6aa6432..9008b93 100644 --- a/tests/expected/formats +++ b/tests/expected/formats @@ -23,8 +23,8 @@ All networks 100 43 43.000 0 43 43.000 - - + + @@ -178,7 +178,7 @@ table.dhcpd-pools th { text-transform: capitalize }
- + From 45f7fc15142a3e85596e077872e2b049ae08557b Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Tue, 31 Mar 2020 20:19:12 +0100 Subject: [PATCH 137/158] release: 3.1 Signed-off-by: Sami Kerola --- NEWS | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/NEWS b/NEWS index 7022464..7e9a424 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,43 @@ Please send dhcpd-pools bug reports to kerolasa@iki.fi. gpg: Signature is crated using RSA key ID 8ED396E37E38D471A00530D3A9553245FDE9B739. + +Version 3.1 +Mark Sangster (1): + output: fix warn and crit counts on shared networks + +Sami Kerola (31): + webpage: add instructions how to get output you need + build-sys: add coverage files to .gitignore + tests: improve coverage + docs: fix peoples name in THANKS file to have correct characters + add .mailmap + output: fix implicit conversion + main: simplify option parsing + fix typo + main: move print_mac_addreses to state structure + main: move output_format to state, and rename color_format + webpages: use html sample output + fix switch missing default case warnings + sort: ensure NaN will not trip over comp_double() + drop images, java scripts, and such from web sitemap file + getdata: remote dead code + other: use strftime() to generate date-time string + lib: update .gitignore + fix typos + various: fix few warnings + warnings: ensure optimal packing in structures + other: use IP string lengths from netinet/in.h + mustach: sync with most recent mustach upstream changes + various: tidy up variable scopes, and one name mismatch + build-sys: update .gitignore files + output: add warning and critical threshold counts to mustach + samples: make prometheus template less klunky + misc: fix spelling issues + output: add ethernet address priting support to --mustach + build-sys: update bootstrap from gnulib + output: update javascripts + release: 3.1 Version 3.0 Sami Kerola (56): From b005ce9a2572cc0b1b2d9b9082bfd88c9baa68ec Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 29 Aug 2020 09:46:21 +0100 Subject: [PATCH 138/158] contrib: point out where one can find zabbix template Thanks to Mathieu Morier for adding a Zabbix support. Signed-off-by: Sami Kerola --- THANKS | 1 + contrib/zabbix.txt | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 contrib/zabbix.txt diff --git a/THANKS b/THANKS index e91502a..f5fd050 100644 --- a/THANKS +++ b/THANKS @@ -47,3 +47,4 @@ José Bollo Sebastián Cramatte Mark Sangster Brent Swingle +Mathieu Morier diff --git a/contrib/zabbix.txt b/contrib/zabbix.txt new file mode 100644 index 0000000..9ea279a --- /dev/null +++ b/contrib/zabbix.txt @@ -0,0 +1,4 @@ +Zabbix 5 template, and instructions how to use it, can be found from +Mathieu's repository. + +https://github.com/mmorier86/dhcpd-pools-zabbix-template From 0f19d44c1d03f9db0a68b8a3c3220706dd682ce0 Mon Sep 17 00:00:00 2001 From: Jean Benoit Date: Fri, 4 Sep 2020 19:30:21 +0100 Subject: [PATCH 139/158] contrib: snmptest.pl SNMPwalk can't access to all variables/wrong sort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Large quantity of data will be missing when snmptest.pl is used. The reason is a sort in lexicographic order: $ snmpwalk -v2c -c public localhost .1.3.6.1.4.1.2021.250.255 |head iso.3.6.1.4.1.2021.250.255.2.1 = STRING:  "10.4.52.1" iso.3.6.1.4.1.2021.250.255.2.10 = STRING: "192.168.35.64" iso.3.6.1.4.1.2021.250.255.2.100 = STRING: "192.168.196.1" iso.3.6.1.4.1.2021.250.255.2.101 = STRING: "192.168.198.1" iso.3.6.1.4.1.2021.250.255.2.102 = STRING: "192.168.209.225" iso.3.6.1.4.1.2021.250.255.2.103 = STRING: "192.168.209.241" SNMPGetNext after "root.2.1" should give "root.2.2". Thus, lots of variables are missing. The function is now dependant on a CPAN module NetSNMP::OID, (debian/ubuntu package is called libsnmp-perl). This is probably not the most efficient way to do it: walking the whole tree will be much slower. Signed-off-by: Jean Benoit --- THANKS | 1 + contrib/snmptest.pl | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/THANKS b/THANKS index f5fd050..4bb123d 100644 --- a/THANKS +++ b/THANKS @@ -48,3 +48,4 @@ Sebastián Cramatte Mark Sangster Brent Swingle Mathieu Morier +Jean Benoit diff --git a/contrib/snmptest.pl b/contrib/snmptest.pl index c77b882..54093c7 100644 --- a/contrib/snmptest.pl +++ b/contrib/snmptest.pl @@ -23,9 +23,10 @@ # you set $dbg to 1 then output will be generated in /tmp. use strict; +use NetSNMP::OID; # Version info: -my $SNMPver = "snmp1.0"; +my $SNMPver = "snmp1.1"; my $DHCPver = "dhcp1.0"; my $VERSION = "$SNMPver/$DHCPver"; # @@ -193,7 +194,7 @@ sub ParseDataFile () { } close IN; if ($dbg) { - foreach (sort @validoidlist) { print DBG "ValidOID: $_\n"; } + foreach (sort Oidcmp @validoidlist) { print DBG "ValidOID: $_\n"; } } if ($dbg) { @@ -370,7 +371,7 @@ sub GetData ($) { @userquery = split (/\./, $userqueryoid); my $found = 0; - foreach (sort @validoidlist) { + foreach (sort Oidcmp @validoidlist) { $next = $_; print DBG "Comparing $userqueryoid vs. $_\n" if $dbg; @validoid = split (/\./, $_); @@ -432,6 +433,12 @@ sub Pong { $line = 0; } +sub Oidcmp { + my $oida = new NetSNMP::OID($a); + my $oidb = new NetSNMP::OID($b); + snmp_oid_compare($oida, $oidb); +} + ################################## START ################################## # # Main From 2ecfc86a06eede846e24942bdbb1d85762b0685c Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Wed, 9 Sep 2020 20:22:37 +0100 Subject: [PATCH 140/158] build-sys: update .gitignore files Signed-off-by: Sami Kerola --- lib/.gitignore | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/.gitignore b/lib/.gitignore index 03b1c1f..382c06d 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -3,11 +3,15 @@ /arg-nonnull.h /arpa/inet.h /arpa_inet.in.h +/attribute.h /basename-lgpl.c +/basename-lgpl.h /c-ctype.c /c-ctype.h /c++defs.h /cdefs.h +/cloexec.c +/cloexec.h /close.c /closeout.c /closeout.h @@ -20,12 +24,14 @@ /dirname.h /dirname-lgpl.c /dosname.h +/dup2.c /errno.in.h /error.c /error.h /exitfail.c /exitfail.h /fclose.c +/fcntl.c /fcntl.h /fcntl.in.h /fd-hook.c @@ -48,6 +54,7 @@ /fstat.c /ftell.c /ftello.c +/getdtablesize.c /getopt1.c /getopt.c /getopt-cdefs.in.h @@ -60,6 +67,7 @@ /getprogname.c /getprogname.h /gettext.h +/.gitignore~ /glthread/* /hard-locale.c /hard-locale.h @@ -112,6 +120,7 @@ /netinet_in.in.h /_Noreturn.h /nstrftime.c +/open.c /pathmax.h /progname.c /progname.h From c7e005899413a22b4e0a241e26b49039e55963ee Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 5 Sep 2021 15:51:29 +0100 Subject: [PATCH 141/158] config: remove unnecessary padding Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 3 +-- src/dhcpd-pools.h | 6 +----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 1488541..1373053 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -343,8 +343,7 @@ int main(int argc, char **argv) .header_limit = 8, .ranges_size = 64, .ip_version = IPvUNKNOWN, - .color_mode = color_auto, - 0 + .color_mode = color_auto }; int ret_val; diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 36ec255..0f93b80 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -127,7 +127,6 @@ struct shared_network_t { double backups; struct shared_network_t *next; int netmask; - uint32_t pad; }; /*! \struct range_t @@ -152,7 +151,6 @@ struct output_helper_t { double tcp; double bup; int status; - uint32_t pad; }; /*! \struct status_counts_t @@ -182,7 +180,6 @@ struct leases_t { char *ethernet; UT_hash_handle hh; enum ltype type; - uint32_t pad; }; /*! \enum limbits @@ -251,8 +248,7 @@ struct conf_t { skip_critical:1, /*!< Skip critical values from output. */ skip_minsize:1, /*!< Skip alarming values that are below minsize from output. */ skip_suppressed:1, /*!< Skip alarming values that are suppressed with --snet-alarms option, or they are shared networks without IP availability. */ - color_mode:2, /*!< Indicator if colors should be used in output. */ - pad_bits:4; + color_mode:2; /*!< Indicator if colors should be used in output. */ }; /* Function prototypes */ From 5126e636651605bcc008fdcb1f438dc8de76247a Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 5 Sep 2021 15:52:07 +0100 Subject: [PATCH 142/158] build-sys: autotools and gnulib related updates Signed-off-by: Sami Kerola --- Makefile.am | 2 +- lib/.gitignore | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index b1f14be..735e5d9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -40,7 +40,7 @@ edit_cmd = sed \ $(PATHFILES): Makefile @ rm -f $@ $@.tmp - $(AM_V_at) test -d $(dir $@) || mkdir -p $(dir $@) + $(AM_V_at) mkdir -p $(dir $@) $(AM_V_GEN) srcdir=''; \ test -f ./$@.in || srcdir=$(srcdir)/; \ $(edit_cmd) $${srcdir}$@.in >$@.tmp diff --git a/lib/.gitignore b/lib/.gitignore index 382c06d..a066476 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -6,6 +6,7 @@ /attribute.h /basename-lgpl.c /basename-lgpl.h +/calloc.c /c-ctype.c /c-ctype.h /c++defs.h @@ -49,6 +50,7 @@ /fpurge.c /freading.c /freading.h +/free.c /fseek.c /fseeko.c /fstat.c @@ -71,6 +73,9 @@ /glthread/* /hard-locale.c /hard-locale.h +/ialloc.c +/ialloc.h +/idx.h /inet_pton.c /intprops.h /inttypes.h @@ -127,6 +132,7 @@ /quotearg.c /quotearg.h /quote.h +/reallocarray.c /realloc.c /setenv.c /setlocale-lock.c From 1d20604519ccc1e5c4f2686da49ce1c72b7eb9c2 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 4 Jun 2022 12:40:39 +0100 Subject: [PATCH 143/158] build-sys: routine update Signed-off-by: Sami Kerola --- Makefile.am | 1 - bootstrap | 322 ++++++++++++++++++++++---------------- bootstrap.conf | 6 +- build-aux/git-version-gen | 58 +++---- configure.ac | 2 +- lib/.gitignore | 2 + src/output.c | 4 +- tests/expected/formats | 4 +- 8 files changed, 224 insertions(+), 175 deletions(-) diff --git a/Makefile.am b/Makefile.am index 735e5d9..c135236 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,6 @@ ## Makefile.am -- Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = gnu -ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = \ .version \ diff --git a/bootstrap b/bootstrap index 3d1bc08..864856a 100755 --- a/bootstrap +++ b/bootstrap @@ -1,10 +1,10 @@ #! /bin/sh # Print a version string. -scriptversion=2019-01-04.17; # UTC +scriptversion=2022-06-04.00; # UTC # Bootstrap this package from checked-out sources. -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2022 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -47,7 +47,7 @@ PERL="${PERL-perl}" me=$0 -default_gnulib_url=git://git.sv.gnu.org/gnulib +default_gnulib_url=https://git.savannah.gnu.org/git/gnulib.git usage() { cat </dev/null) +if test -z "$package"; then + package=$(sed -n "$extract_package_name" configure.ac) \ + || die 'cannot find package name in configure.ac' +fi gnulib_name=lib$package build_aux=build-aux @@ -229,7 +252,7 @@ excluded_files= # File that should exist in the top directory of a checked out hierarchy, # but not in a distribution tarball. -checkout_only_file=TODO +checkout_only_file=src/dhcpd-pools.c # Whether to use copies instead of symlinks. copy=false @@ -291,62 +314,6 @@ find_tool () eval "export $find_tool_envvar" } -# Override the default configuration, if necessary. -# Make sure that bootstrap.conf is sourced from the current directory -# if we were invoked as "sh bootstrap". -case "$0" in - */*) test -r "$0.conf" && . "$0.conf" ;; - *) test -r "$0.conf" && . ./"$0.conf" ;; -esac - -if test "$vc_ignore" = auto; then - vc_ignore= - test -d .git && vc_ignore=.gitignore - test -d CVS && vc_ignore="$vc_ignore .cvsignore" -fi - -if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then - use_gnulib=false -else - use_gnulib=true -fi - -# Translate configuration into internal form. - -# Parse options. - -for option -do - case $option in - --help) - usage - exit;; - --gnulib-srcdir=*) - GNULIB_SRCDIR=${option#--gnulib-srcdir=};; - --skip-po) - SKIP_PO=t;; - --force) - checkout_only_file=;; - --copy) - copy=true;; - --bootstrap-sync) - bootstrap_sync=true;; - --no-bootstrap-sync) - bootstrap_sync=false;; - --no-git) - use_git=false;; - *) - die "$option: unknown option";; - esac -done - -$use_git || test -d "$GNULIB_SRCDIR" \ - || die "Error: --no-git requires --gnulib-srcdir" - -if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then - die "Bootstrapping from a non-checked-out distribution is risky." -fi - # Strip blank and comment lines to leave significant entries. gitignore_entries() { sed '/^#/d; /^$/d' "$@" @@ -388,9 +355,140 @@ insert_vc_ignore() { insert_if_absent "$vc_ignore_file" "$pattern" } +symlink_to_dir() +{ + src=$1/$2 + dst=${3-$2} + + test -f "$src" && { + + # If the destination directory doesn't exist, create it. + # This is required at least for "lib/uniwidth/cjk.h". + dst_dir=$(dirname "$dst") + if ! test -d "$dst_dir"; then + mkdir -p "$dst_dir" + + # If we've just created a directory like lib/uniwidth, + # tell version control system(s) it's ignorable. + # FIXME: for now, this does only one level + parent=$(dirname "$dst_dir") + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + ig=$parent/$dot_ig + insert_vc_ignore $ig "${dst_dir##*/}" + done + fi + + if $copy; then + { + test ! -h "$dst" || { + echo "$me: rm -f $dst" && + rm -f "$dst" + } + } && + test -f "$dst" && + cmp -s "$src" "$dst" || { + echo "$me: cp -fp $src $dst" && + cp -fp "$src" "$dst" + } + else + # Leave any existing symlink alone, if it already points to the source, + # so that broken build tools that care about symlink times + # aren't confused into doing unnecessary builds. Conversely, if the + # existing symlink's timestamp is older than the source, make it afresh, + # so that broken tools aren't confused into skipping needed builds. See + # . + test -h "$dst" && + src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 && + dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 && + test "$src_i" = "$dst_i" && + both_ls=$(ls -dt "$src" "$dst") && + test "X$both_ls" = "X$dst$nl$src" || { + dot_dots= + case $src in + /*) ;; + *) + case /$dst/ in + *//* | */../* | */./* | /*/*/*/*/*/) + die "invalid symlink calculation: $src -> $dst";; + /*/*/*/*/) dot_dots=../../../;; + /*/*/*/) dot_dots=../../;; + /*/*/) dot_dots=../;; + esac;; + esac + + echo "$me: ln -fs $dot_dots$src $dst" && + ln -fs "$dot_dots$src" "$dst" + } + fi + } +} + +# Override the default configuration, if necessary. +# Make sure that bootstrap.conf is sourced from the current directory +# if we were invoked as "sh bootstrap". +case "$0" in + */*) test -r "$0.conf" && . "$0.conf" ;; + *) test -r "$0.conf" && . ./"$0.conf" ;; +esac + +if test "$vc_ignore" = auto; then + vc_ignore= + test -d .git && vc_ignore=.gitignore + test -d CVS && vc_ignore="$vc_ignore .cvsignore" +fi + +if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then + use_gnulib=false +else + use_gnulib=true +fi + +# Translate configuration into internal form. + +# Parse options. + +for option +do + case $option in + --help) + usage + exit;; + --version) + set -e + echo "bootstrap $scriptversion" + echo "$copyright" + exit 0 + ;; + --gnulib-srcdir=*) + GNULIB_SRCDIR=${option#--gnulib-srcdir=};; + --skip-po) + SKIP_PO=t;; + --force) + checkout_only_file=;; + --copy) + copy=true;; + --bootstrap-sync) + bootstrap_sync=true;; + --no-bootstrap-sync) + bootstrap_sync=false;; + --no-git) + use_git=false;; + *) + bootstrap_option_hook $option || die "$option: unknown option";; + esac +done + +$use_git || test -d "$GNULIB_SRCDIR" \ + || die "Error: --no-git requires --gnulib-srcdir" + +if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then + die "Bootstrapping from a non-checked-out distribution is risky." +fi + # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. found_aux_dir=no -grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \ +grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'])' configure.ac \ >/dev/null && found_aux_dir=yes grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ >/dev/null && found_aux_dir=yes @@ -666,9 +764,26 @@ if $use_gnulib; then shallow= if test -z "$GNULIB_REVISION"; then git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' + git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \ + || cleanup_gnulib + else + git fetch -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' + mkdir -p "$gnulib_path" + # Only want a shallow checkout of $GNULIB_REVISION, but git does not + # support cloning by commit hash. So attempt a shallow fetch by commit + # hash to minimize the amount of data downloaded and changes needed to + # be processed, which can drastically reduce download and processing + # time for checkout. If the fetch by commit fails, a shallow fetch can + # not be performed because we do not know what the depth of the commit + # is without fetching all commits. So fallback to fetching all commits. + git -C "$gnulib_path" init + git -C "$gnulib_path" remote add origin \ + ${GNULIB_URL:-$default_gnulib_url} + git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" \ + || git -C "$gnulib_path" fetch origin \ + || cleanup_gnulib + git -C "$gnulib_path" reset --hard FETCH_HEAD fi - git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \ - || cleanup_gnulib trap - 1 2 13 15 fi @@ -785,75 +900,6 @@ case $SKIP_PO in fi;; esac -symlink_to_dir() -{ - src=$1/$2 - dst=${3-$2} - - test -f "$src" && { - - # If the destination directory doesn't exist, create it. - # This is required at least for "lib/uniwidth/cjk.h". - dst_dir=$(dirname "$dst") - if ! test -d "$dst_dir"; then - mkdir -p "$dst_dir" - - # If we've just created a directory like lib/uniwidth, - # tell version control system(s) it's ignorable. - # FIXME: for now, this does only one level - parent=$(dirname "$dst_dir") - for dot_ig in x $vc_ignore; do - test $dot_ig = x && continue - ig=$parent/$dot_ig - insert_vc_ignore $ig "${dst_dir##*/}" - done - fi - - if $copy; then - { - test ! -h "$dst" || { - echo "$me: rm -f $dst" && - rm -f "$dst" - } - } && - test -f "$dst" && - cmp -s "$src" "$dst" || { - echo "$me: cp -fp $src $dst" && - cp -fp "$src" "$dst" - } - else - # Leave any existing symlink alone, if it already points to the source, - # so that broken build tools that care about symlink times - # aren't confused into doing unnecessary builds. Conversely, if the - # existing symlink's timestamp is older than the source, make it afresh, - # so that broken tools aren't confused into skipping needed builds. See - # . - test -h "$dst" && - src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 && - dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 && - test "$src_i" = "$dst_i" && - both_ls=$(ls -dt "$src" "$dst") && - test "X$both_ls" = "X$dst$nl$src" || { - dot_dots= - case $src in - /*) ;; - *) - case /$dst/ in - *//* | */../* | */./* | /*/*/*/*/*/) - die "invalid symlink calculation: $src -> $dst";; - /*/*/*/*/) dot_dots=../../../;; - /*/*/*/) dot_dots=../../;; - /*/*/) dot_dots=../;; - esac;; - esac - - echo "$me: ln -fs $dot_dots$src $dst" && - ln -fs "$dot_dots$src" "$dst" - } - fi - } -} - version_controlled_file() { parent=$1 file=$2 @@ -971,7 +1017,7 @@ bootstrap_post_import_hook \ # Uninitialized submodules are listed with an initial dash. if $use_git && git submodule | grep '^-' >/dev/null; then die "some git submodules are not initialized. " \ - "Run 'git submodule init' and bootstrap again." + "Run 'git submodule update --init' and bootstrap again." fi # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some @@ -1065,7 +1111,7 @@ bootstrap_epilogue echo "$0: done. Now you can run './configure'." -# Local variables: +# Local Variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" diff --git a/bootstrap.conf b/bootstrap.conf index 321ed00..98d0e1c 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -1,10 +1,10 @@ # Bootstrap configuration. -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2022 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, @@ -64,7 +64,7 @@ XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\ gettext_external=0 grep '^[ ]*AM_GNU_GETTEXT(external\>' configure.ac > /dev/null && gettext_external=1 -grep '^[ ]*AM_GNU_GETTEXT(\[external\]' configure.ac > /dev/null && +grep '^[ ]*AM_GNU_GETTEXT(\[external]' configure.ac > /dev/null && gettext_external=1 if test $gettext_external = 1; then diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen index 3468247..a44f5d5 100755 --- a/build-aux/git-version-gen +++ b/build-aux/git-version-gen @@ -1,12 +1,12 @@ #!/bin/sh # Print a version string. -scriptversion=2012-12-31.23; # UTC +scriptversion=2022-01-27.18; # UTC -# Copyright (C) 2007-2013 Free Software Foundation, Inc. +# Copyright (C) 2007-2022 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, @@ -15,9 +15,9 @@ scriptversion=2012-12-31.23; # UTC # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . -# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/. +# This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/. # It may be run two ways: # - from a git repository in which the "git describe" command below # produces useful output (thus requiring at least one signed tag) @@ -65,19 +65,21 @@ scriptversion=2012-12-31.23; # UTC # EXTRA_DIST = $(top_srcdir)/.version # BUILT_SOURCES = $(top_srcdir)/.version # $(top_srcdir)/.version: -# echo $(VERSION) > $@-t && mv $@-t $@ +# echo '$(VERSION)' > $@-t +# mv $@-t $@ # dist-hook: -# echo $(VERSION) > $(distdir)/.tarball-version +# echo '$(VERSION)' > $(distdir)/.tarball-version me=$0 +year=`expr "$scriptversion" : '\([^-]*\)'` version="git-version-gen $scriptversion -Copyright 2011 Free Software Foundation, Inc. -There is NO warranty. You may redistribute this software -under the terms of the GNU General Public License. -For more information about these matters, see the files named COPYING." +Copyright (C) ${year} Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later . +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law." usage="\ Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT] @@ -85,8 +87,9 @@ Print a version string. Options: - --prefix prefix of git tags (default 'v') - --fallback fallback version to use if \"git --version\" fails + --prefix PREFIX prefix of git tags (default 'v') + --fallback VERSION + fallback version to use if \"git --version\" fails --help display this help and exit --version output version information and exit @@ -100,8 +103,8 @@ while test $# -gt 0; do case $1 in --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; - --prefix) shift; prefix="$1";; - --fallback) shift; fallback="$1";; + --prefix) shift; prefix=${1?};; + --fallback) shift; fallback=${1?};; -*) echo "$0: Unknown option '$1'." >&2 echo "$0: Try '--help' for more information." >&2 @@ -140,11 +143,9 @@ then v=`cat $tarball_version_file` || v= case $v in *$nl*) v= ;; # reject multi-line output - [0-9]*) ;; - *) v= ;; esac test "x$v" = x \ - && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2 + && echo "$0: WARNING: $tarball_version_file is damaged" 1>&2 fi if test "x$v" != x @@ -166,9 +167,10 @@ then # tag or the previous older version that did not? # Newer: v6.10-77-g0f8faeb # Older: v6.10-g0f8faeb - case $v in - *-*-*) : git describe is okay three part flavor ;; - *-*) + vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v + case $vprefix in + *-*) : git describe is probably okay three part flavor ;; + *) : git describe is older two part flavor # Recreate the number of commits and rewrite such that the # result is the same as if we were using the newer version @@ -183,9 +185,9 @@ then ;; esac - # Change the first '-' to a '.', so version-comparing tools work properly. - # Remove the "g" in git describe's output string, to save a byte. - v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`; + # Change the penultimate "-" to ".", for version-comparing tools. + # Remove the "g" to save a byte. + v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`; v_from_git=1 elif test "x$fallback" = x || git --version >/dev/null 2>&1; then v=UNKNOWN @@ -199,7 +201,7 @@ v=`echo "$v" |sed "s/^$prefix//"` # string we're using came from git. I.e., skip the test if it's "UNKNOWN" # or if it came from .tarball-version. if test "x$v_from_git" != x; then - # Don't declare a version "dirty" merely because a time stamp has changed. + # Don't declare a version "dirty" merely because a timestamp has changed. git update-index --refresh > /dev/null 2>&1 dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty= @@ -214,12 +216,12 @@ if test "x$v_from_git" != x; then fi # Omit the trailing newline, so that m4_esyscmd can use the result directly. -echo "$v" | tr -d "$nl" +printf %s "$v" # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff --git a/configure.ac b/configure.ac index 92ff82c..8e4eba6 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) -AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_MACRO_DIRS([m4]) AC_INIT([dhcpd-pools], [m4_esyscmd([build-aux/git-version-gen .tarball-version])], [kerolasa@iki.fi],[], diff --git a/lib/.gitignore b/lib/.gitignore index a066476..daef416 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -150,6 +150,8 @@ /stdio.h /stdio-impl.h /stdio.in.h +/stdio-read.c +/stdio-write.c /stdlib.h /stdlib.in.h /stpncpy.c diff --git a/src/output.c b/src/output.c index 2d7f28d..4cd0226 100644 --- a/src/output.c +++ b/src/output.c @@ -628,8 +628,8 @@ static void html_header(struct conf_t *state, FILE *restrict f) fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); diff --git a/tests/expected/formats b/tests/expected/formats index 9008b93..9948c70 100644 --- a/tests/expected/formats +++ b/tests/expected/formats @@ -23,8 +23,8 @@ All networks 100 43 43.000 0 43 43.000 - - + + From 0c5b8301ddb88b6fbfbd5b556d81e28fd15b7f07 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 4 Jun 2022 12:42:00 +0100 Subject: [PATCH 144/158] release: 3.2 Signed-off-by: Sami Kerola --- NEWS | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/NEWS b/NEWS index 7e9a424..ec50e67 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,18 @@ Please send dhcpd-pools bug reports to kerolasa@iki.fi. gpg: Signature is crated using RSA key ID 8ED396E37E38D471A00530D3A9553245FDE9B739. + +Version 3.2 +Jean Benoit (1): + contrib: snmptest.pl SNMPwalk can't access to all variables/wrong sort + +Sami Kerola (5): + contrib: point out where one can find zabbix template + build-sys: update .gitignore files + config: remove unnecessary padding + build-sys: autotools and gnulib related updates + build-sys: routine update + release: 3.2 Version 3.1 Mark Sangster (1): From 501bc15b43ab398b97c65994cefc33055aa90fb9 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 26 Nov 2022 10:00:53 +0000 Subject: [PATCH 145/158] update project web page Signed-off-by: Sami Kerola --- webpages/dhcpd-pools.awk | 1 - webpages/index.html | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/webpages/dhcpd-pools.awk b/webpages/dhcpd-pools.awk index 38d5f18..ac23431 100644 --- a/webpages/dhcpd-pools.awk +++ b/webpages/dhcpd-pools.awk @@ -9,7 +9,6 @@ # # Sami Kerola # -# Latest version is available from http://www.iki.fi/kerolasa/dhcp/ # This is version 1.4 BEGIN { diff --git a/webpages/index.html b/webpages/index.html index 088c546..446dcf2 100644 --- a/webpages/index.html +++ b/webpages/index.html @@ -80,8 +80,8 @@ try:
  • Start filtering output. Options to try:
    --skip --limit
  • Change --format -option to what you need, and maybe include --perfdata if you want nagios alarm +option to what you need, and maybe include +--perfdata if you want nagios alarm format.
  • Done.
  • @@ -104,11 +104,11 @@ that is maintained by Trond Hasle Amundsen.

    Just for laugh, obsolete awk proof of concept (version 1.4) dhcpd-pools.awk

    Where to send questions, bug reports, code contributions...

    -

    Sami Kerola +

    Sami Kerola <kerolasa@iki.fi>

    -Wed Nov 15 12:47:30 GMT 2017 +Sat Nov 26 09:58:28 GMT 2022 3.0 FreeBSD License From 102d017ed53222600d2a4e6fc376f98dc9f295cb Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 26 Mar 2023 11:12:11 +0100 Subject: [PATCH 146/158] website: use https Signed-off-by: Sami Kerola --- webpages/index.html | 30 +- webpages/robots.txt | 2 +- webpages/sampleoutput.html | 2 +- webpages/sitemap.txt | 1092 ++++++++++++++++++------------------ 4 files changed, 563 insertions(+), 563 deletions(-) diff --git a/webpages/index.html b/webpages/index.html index 446dcf2..839ba82 100644 --- a/webpages/index.html +++ b/webpages/index.html @@ -30,7 +30,7 @@ font-variant: normal; -
    +

    ISC dhcpd lease analysis and reporting

    This is dhcpd-pools ISC dhcp @@ -49,7 +49,7 @@ any significant difference in getting analysis done.

    prompt> ./dhcpd-pools --config=/etc/dhcpd.conf --leases=/var/lib/dhcp/dhcpd.leases --format=H --color=always --warning=40 --critical=50 --output=sampleoutput.html +href="https://dhcpd-pools.sourceforge.net/sampleoutput.html">sampleoutput.html

    Where I can get dhcpd-pools?

    @@ -61,11 +61,11 @@ file.

    git clone git://git.code.sf.net/p/dhcpd-pools/code dhcpd-pools

    See also -SourceForge project page.

    +SourceForge project page.

    Documentation

    The dhcpd-pools -manual page, and -Doxygen software +manual page, and +Doxygen software reference documentation are available online.

    Getting the output you need

      @@ -90,19 +90,19 @@ format.

      The program was written because -DHCPStatus, -DHCP Usage Statistics, -reportdhcp.pl, -lease_analyzer and -dhcpd-snmp +DHCPStatus, +DHCP Usage Statistics, +reportdhcp.pl, +lease_analyzer and +dhcpd-snmp where too slow to handle huge number of leases. There is also difference in printed details. The dhcpd-pools does not print quite as much information as some other tools.

      Notice that this utility is not the same as -dhcpd-pool +dhcpd-pool that is maintained by Trond Hasle Amundsen.

      Just for laugh, obsolete awk proof of concept (version 1.4) -dhcpd-pools.awk

      +dhcpd-pools.awk

      Where to send questions, bug reports, code contributions...

      Sami Kerola <kerolasa@iki.fi>

      @@ -111,12 +111,12 @@ that is maintained by Trond Hasle Amundsen.

      Sat Nov 26 09:58:28 GMT 2022 3.0 FreeBSD License - -
      + +
      0
      -
      +
      5 ( 2 ratings )
      diff --git a/webpages/robots.txt b/webpages/robots.txt index 25e6762..c9eedb4 100644 --- a/webpages/robots.txt +++ b/webpages/robots.txt @@ -1,3 +1,3 @@ -Sitemap: http://dhcpd-pools.sourceforge.net/sitemap.txt +Sitemap: https://dhcpd-pools.sourceforge.net/sitemap.txt User-agent: * Disallow: diff --git a/webpages/sampleoutput.html b/webpages/sampleoutput.html index af4d3d8..521b086 100644 --- a/webpages/sampleoutput.html +++ b/webpages/sampleoutput.html @@ -182,7 +182,7 @@ table.dhcpd-pools th { text-transform: capitalize }
      Generated using dhcpd-pools 3.0
      -More info at http://dhcpd-pools.sourceforge.net/ +More info at https://dhcpd-pools.sourceforge.net/
      diff --git a/webpages/sitemap.txt b/webpages/sitemap.txt index f1f9fb4..28f6306 100644 --- a/webpages/sitemap.txt +++ b/webpages/sitemap.txt @@ -1,546 +1,546 @@ -http://dhcpd-pools.sourceforge.net/ -http://dhcpd-pools.sourceforge.net/dhcpd-pools.awk -http://dhcpd-pools.sourceforge.net/man.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/annotated.html -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/classes.html -http://dhcpd-pools.sourceforge.net/doxygen/close_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/config_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/doxygen.css -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/files.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/functions_func.html -http://dhcpd-pools.sourceforge.net/doxygen/functions.html -http://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_k.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_q.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_type.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_v.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_w.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_y.html -http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/index.html -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/sampleoutput.html -http://dhcpd-pools.sourceforge.net/doxygen/search -http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html -http://dhcpd-pools.sourceforge.net/doxygen/search/search.css -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/structconf__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structexpl.html -http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html -http://dhcpd-pools.sourceforge.net/doxygen/structiovec.html -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html -http://dhcpd-pools.sourceforge.net/doxygen/structmustach__itf.html -http://dhcpd-pools.sourceforge.net/doxygen/structoption.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__helper__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html -http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html -http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html -http://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html -http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/tabs.css -http://dhcpd-pools.sourceforge.net/doxygen/time_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/types_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html -http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html -http://dhcpd-pools.sourceforge.net/doxygen/unionrpl__max__align__t.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html +https://dhcpd-pools.sourceforge.net/ +https://dhcpd-pools.sourceforge.net/dhcpd-pools.awk +https://dhcpd-pools.sourceforge.net/man.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/annotated.html +https://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/classes.html +https://dhcpd-pools.sourceforge.net/doxygen/close_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/config_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html +https://dhcpd-pools.sourceforge.net/doxygen/dirname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/doxygen.css +https://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/error_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/error_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/filename_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/filename_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/files.html +https://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/float_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/functions_func.html +https://dhcpd-pools.sourceforge.net/doxygen/functions.html +https://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html +https://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_a.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_b.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_c.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_d.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_e.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_f.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_b.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_g.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_h.html +https://dhcpd-pools.sourceforge.net/doxygen/globals.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_i.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_k.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_l.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_m.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_n.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_o.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_p.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_q.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_r.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_s.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_t.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_type.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_u.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_v.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_w.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_x.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_y.html +https://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html +https://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/index.html +https://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html +https://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/minmax_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/minmax_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/other_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/output_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/sampleoutput.html +https://dhcpd-pools.sourceforge.net/doxygen/search +https://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html +https://dhcpd-pools.sourceforge.net/doxygen/search/search.css +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html +https://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strtod_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/structconf__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structexpl.html +https://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html +https://dhcpd-pools.sourceforge.net/doxygen/structiovec.html +https://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html +https://dhcpd-pools.sourceforge.net/doxygen/structmustach__itf.html +https://dhcpd-pools.sourceforge.net/doxygen/structoption.html +https://dhcpd-pools.sourceforge.net/doxygen/structoutput__helper__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html +https://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html +https://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html +https://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html +https://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html +https://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html +https://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/tabs.css +https://dhcpd-pools.sourceforge.net/doxygen/time_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/types_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/tzset_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html +https://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html +https://dhcpd-pools.sourceforge.net/doxygen/unionrpl__max__align__t.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html From 3d37ac0a2dc93d102613736b56620cbccf89cfea Mon Sep 17 00:00:00 2001 From: Belkacem Daheb Date: Wed, 26 Jul 2023 09:20:32 +0100 Subject: [PATCH 147/158] add start, end and hostname printing support for xml and json In short it gets these parameters and prints them in json and xml formats. Signed-off-by: Sami Kerola --- THANKS | 1 + src/dhcpd-pools.h | 6 ++++++ src/getdata.c | 31 +++++++++++++++++++++++++++++-- src/hash.c | 15 +++++++++++++++ src/other.c | 12 ++++++++++++ src/output.c | 26 +++++++++++++++++++++++++- tests/expected/same-twice-json | 2 +- tests/expected/same-twice-xml | 3 +++ 8 files changed, 92 insertions(+), 4 deletions(-) diff --git a/THANKS b/THANKS index 4bb123d..8fe47e0 100644 --- a/THANKS +++ b/THANKS @@ -49,3 +49,4 @@ Mark Sangster Brent Swingle Mathieu Morier Jean Benoit +Belkacem Daheb diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 0f93b80..aff6b6a 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -102,6 +102,9 @@ enum prefix_t { PREFIX_BINDING_STATE_ACTIVE, PREFIX_BINDING_STATE_BACKUP, PREFIX_HARDWARE_ETHERNET, + PREFIX_STARTS, + PREFIX_ENDS, + PREFIX_HOSTNAME, NUM_OF_PREFIX }; @@ -180,6 +183,9 @@ struct leases_t { char *ethernet; UT_hash_handle hh; enum ltype type; + char *ends; + char *starts; + char *hostname; }; /*! \enum limbits diff --git a/src/getdata.c b/src/getdata.c index 7863a6b..966fe5d 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -83,7 +83,7 @@ enum isc_conf_parser { int parse_leases(struct conf_t *state) { FILE *dhcpd_leases; - char *line, *ipstring, macstring[20], *stop; + char *line, *ipstring, macstring[20], *stop, endsstr[30], startsstr[30], hostnamestr[MAXLEN]; union ipaddr_t addr; struct leases_t *lease; @@ -100,6 +100,9 @@ int parse_leases(struct conf_t *state) line[0] = '\0'; ipstring = xmalloc(sizeof(char) * MAXLEN); ipstring[0] = '\0'; + endsstr[0] = '\0'; + startsstr[0] = '\0'; + hostnamestr[0] = '\0'; while (!feof(dhcpd_leases)) { if (!fgets(line, MAXLEN, dhcpd_leases) && ferror(dhcpd_leases)) error(EXIT_FAILURE, errno, "parse_leases: %s", state->dhcpdlease_file); @@ -142,8 +145,32 @@ int parse_leases(struct conf_t *state) break; memcpy(macstring, line + 20, 17); macstring[17] = '\0'; - if ((lease = find_lease(state, &addr)) != NULL) + if ((lease = find_lease(state, &addr)) != NULL) { lease->ethernet = xstrdup(macstring); + lease->starts = xstrdup(startsstr); + lease->ends = xstrdup(endsstr); + } + break; + case PREFIX_ENDS: + if (state->print_mac_addreses == 0) + break; + strncpy(endsstr, line + 7, sizeof(endsstr)-1); + endsstr[strlen(endsstr)-2] = '\0'; + break; + case PREFIX_STARTS: + if (state->print_mac_addreses == 0) + break; + strncpy(startsstr, line + 9, sizeof(startsstr)-1); + startsstr[strlen(startsstr)-2] = '\0'; + break; + case PREFIX_HOSTNAME: + if (state->print_mac_addreses == 0) + break; + strncpy(hostnamestr, line + 19, sizeof(hostnamestr)-1); + hostnamestr[strlen(hostnamestr)-3] = '\0'; + if ((lease = find_lease(state, &addr)) != NULL) { + lease->hostname = xstrdup(hostnamestr); + } break; default: /* do nothing */ ; diff --git a/src/hash.c b/src/hash.c index 77ecd79..eb434df 100644 --- a/src/hash.c +++ b/src/hash.c @@ -66,6 +66,9 @@ void add_lease_v4(struct conf_t *state, union ipaddr_t *addr, enum ltype type) l->type = type; HASH_ADD_INT(state->leases, ip.v4, l); l->ethernet = NULL; + l->ends = NULL; + l->starts = NULL; + l->hostname = NULL; } void add_lease_v6(struct conf_t *state, union ipaddr_t *addr, enum ltype type) @@ -77,6 +80,9 @@ void add_lease_v6(struct conf_t *state, union ipaddr_t *addr, enum ltype type) l->type = type; HASH_ADD_V6(state->leases, ip.v6, l); l->ethernet = NULL; + l->ends = NULL; + l->starts = NULL; + l->hostname = NULL; } /*! \brief Find pointer to lease from hash array. @@ -110,6 +116,9 @@ struct leases_t *find_lease_v6(struct conf_t *state, union ipaddr_t *addr) void delete_lease(struct conf_t *state, struct leases_t *lease) { free(lease->ethernet); + free(lease->ends); + free(lease->starts); + free(lease->hostname); HASH_DEL(state->leases, lease); free(lease); } @@ -122,6 +131,9 @@ void delete_all_leases(struct conf_t *state) HASH_ITER(hh, state->leases, l, tmp) { free(l->ethernet); + free(l->ends); + free(l->starts); + free(l->hostname); HASH_DEL(state->leases, l); free(l); } @@ -134,6 +146,9 @@ void delete_all_leases(struct conf_t *state) l = state->leases; free(l->ethernet); + free(l->ends); + free(l->starts); + free(l->hostname); HASH_DEL(state->leases, l); /* leases advances to next on delete */ free(l); } diff --git a/src/other.c b/src/other.c index 21a19f4..b319a2d 100644 --- a/src/other.c +++ b/src/other.c @@ -417,6 +417,12 @@ int } if (!memcmp("lease ", str, 6)) return PREFIX_LEASE; + else if (!memcmp(" starts ", str, 9)) + return PREFIX_STARTS; + else if (!memcmp(" ends ", str, 7)) + return PREFIX_ENDS; + else if (!memcmp(" client-hostname ", str, 18)) + return PREFIX_HOSTNAME; return NUM_OF_PREFIX; } @@ -472,6 +478,12 @@ int } if (!memcmp(" iaaddr ", str, 9)) return PREFIX_LEASE; + else if (!memcmp(" starts ", str, 9)) + return PREFIX_STARTS; + else if (!memcmp(" ends ", str, 7)) + return PREFIX_ENDS; + else if (!memcmp(" client-hostname ", str, 18)) + return PREFIX_HOSTNAME; return NUM_OF_PREFIX; } diff --git a/src/output.c b/src/output.c index 4cd0226..17745d4 100644 --- a/src/output.c +++ b/src/output.c @@ -387,7 +387,19 @@ static int output_xml(struct conf_t *state) if (l->ethernet != NULL) { fputs(l->ethernet, outfile); } - fputs("\n\n", outfile); + fputs("\n\t", outfile); + if (l->starts != NULL) { + fputs(l->starts, outfile); + } + fputs("\n\t", outfile); + if (l->ends != NULL) { + fputs(l->ends, outfile); + } + fputs("\n\t", outfile); + if (l->hostname != NULL) { + fputs(l->hostname, outfile); + } + fputs("\n\n", outfile); } } } @@ -481,6 +493,18 @@ static int output_json(struct conf_t *state) if (l->ethernet != NULL) { fputs(l->ethernet, outfile); } + fputs("\", \"starts\":\"", outfile); + if (l->starts != NULL) { + fputs(l->starts, outfile); + } + fputs("\", \"ends\":\"", outfile); + if (l->ends != NULL) { + fputs(l->ends, outfile); + } + fputs("\", \"hostname\":\"", outfile); + if (l->hostname != NULL) { + fputs(l->hostname, outfile); + } fputs("\" }", outfile); } } diff --git a/tests/expected/same-twice-json b/tests/expected/same-twice-json index f572972..f23d1b0 100644 --- a/tests/expected/same-twice-json +++ b/tests/expected/same-twice-json @@ -1,6 +1,6 @@ { "active_leases": [ - { "ip":"10.0.0.5", "macaddress":"00:00:00:00:00:00" } + { "ip":"10.0.0.5", "macaddress":"00:00:00:00:00:00", "starts":"", "ends":"", "hostname":"" } ], "subnets": [ { "location":"All networks", "range":"10.0.0.1 - 10.0.0.10", "first_ip":"10.0.0.1", "last_ip":"10.0.0.10", "defined":10, "used":1, "touched":0, "free":9, "percent":10, "touch_count":1, "touch_percent":10, "status":0 } diff --git a/tests/expected/same-twice-xml b/tests/expected/same-twice-xml index 93612d6..7897f7f 100644 --- a/tests/expected/same-twice-xml +++ b/tests/expected/same-twice-xml @@ -2,6 +2,9 @@ 10.0.0.5 00:00:00:00:00:00 + + + All networks From dc1f0b9b7625a4b50f8ae8c3fddbefe999c6ad64 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 2 Sep 2023 11:45:27 +0100 Subject: [PATCH 148/158] chore: update web links Signed-off-by: Sami Kerola --- README | 4 ++-- configure.ac | 2 +- contrib/PKGBUILD | 2 +- project.doap | 4 ++-- src/mustach.c | 2 +- src/mustach.h | 2 +- tests/expected/formats | 2 +- webpages/dhcpd-pools.awk | 4 ++-- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README b/README index 6a9ae41..5953fba 100644 --- a/README +++ b/README @@ -28,7 +28,7 @@ Quick start. Dependencies to other projects. - http://www.gnu.org/software/gnulib/ + https://www.gnu.org/software/gnulib/ You can avoid repeated gnulib downloads by setting GNULIB_SRCDIR environment variable. For example: @@ -39,7 +39,7 @@ Dependencies to other projects. Assumign detached gnulib please remember to git pull the latest updates before building dhcpd-pools. - http://uthash.sourceforge.net/ + https://troydhanson.github.io/uthash/ See quick start. diff --git a/configure.ac b/configure.ac index 8e4eba6..818bee9 100644 --- a/configure.ac +++ b/configure.ac @@ -6,7 +6,7 @@ AC_CONFIG_MACRO_DIRS([m4]) AC_INIT([dhcpd-pools], [m4_esyscmd([build-aux/git-version-gen .tarball-version])], [kerolasa@iki.fi],[], - [http://dhcpd-pools.sourceforge.net/]) + [https://dhcpd-pools.sourceforge.net/]) PACKAGE_MAINTAINER="Sami Kerola" AC_SUBST([PACKAGE_MAINTAINER]) AC_CONFIG_AUX_DIR([build-aux]) diff --git a/contrib/PKGBUILD b/contrib/PKGBUILD index 6fbb5cf..08770a4 100644 --- a/contrib/PKGBUILD +++ b/contrib/PKGBUILD @@ -7,7 +7,7 @@ pkgver=0 pkgrel=1 pkgdesc="ISC dhcpd lease status utility" arch=('i686' 'x86_64') -url=http://dhcpd-pools.sourceforge.net/ +url=https://dhcpd-pools.sourceforge.net/ license=('BSD') depends=('pacman') makedepends=('uthash' 'git') diff --git a/project.doap b/project.doap index e3cf0f6..b9f0a8a 100644 --- a/project.doap +++ b/project.doap @@ -3,9 +3,9 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> - + dhcpd-pools - + This is dhcpd-pools ISC dhcp shared network and pool range usage analysis tool. Purpose of command is to count usage ratio of each diff --git a/src/mustach.c b/src/mustach.c index 45eb7a4..2af9672 100644 --- a/src/mustach.c +++ b/src/mustach.c @@ -8,7 +8,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/mustach.h b/src/mustach.h index 32288a1..0ceba16 100644 --- a/src/mustach.h +++ b/src/mustach.h @@ -8,7 +8,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/tests/expected/formats b/tests/expected/formats index 9948c70..c619ccb 100644 --- a/tests/expected/formats +++ b/tests/expected/formats @@ -176,7 +176,7 @@ table.dhcpd-pools th { text-transform: capitalize }
      diff --git a/webpages/dhcpd-pools.awk b/webpages/dhcpd-pools.awk index ac23431..9c1f299 100644 --- a/webpages/dhcpd-pools.awk +++ b/webpages/dhcpd-pools.awk @@ -4,8 +4,8 @@ # analysis algorithm is sane. This script is no longer # maintained, and can be considered as historic reference. # -# Licensed under the Open Software License version 1.1 -# http://opensource.org/licenses/osl.php +# Licensed under the Open Software License version 1.0 +# https://opensource.org/license/osl-1-0/ # # Sami Kerola # From d94654e1007524604e8b7d36c91083dccc175495 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 28 Jan 2024 16:04:29 +0000 Subject: [PATCH 149/158] getdata: only emit warning when config include file cannot be read MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Not being able to open primary config file will cause fatal error, where as include files will only warn. This is useful for setups that want to publish some of the dhcp lease data, but not all. Such setup obviously required dhcpd server to have differnt account than dhcpd-pools, with carefully managed read permissions. Requested-by: Björn Lässig Signed-off-by: Sami Kerola --- THANKS | 1 + src/getdata.c | 8 +++++++- tests/expected/errors | 11 ++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/THANKS b/THANKS index 8fe47e0..2639556 100644 --- a/THANKS +++ b/THANKS @@ -50,3 +50,4 @@ Brent Swingle Mathieu Morier Jean Benoit Belkacem Daheb +Björn Lässig diff --git a/src/getdata.c b/src/getdata.c index 966fe5d..ff05804 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -238,8 +238,14 @@ void parse_config(struct conf_t *state, const int is_include, const char *restri shared_p->name = state->shared_net_root->name; /* Open configuration file */ dhcpd_config = fopen(config_file, "r"); - if (dhcpd_config == NULL) + if (dhcpd_config == NULL) { + if (is_include) { + error(0, errno, "cannot open inlude: %s", config_file); + return; + } + /* config if from command line, just exit with error */ error(EXIT_FAILURE, errno, "parse_config: %s", config_file); + } #ifdef HAVE_POSIX_FADVISE # ifdef POSIX_FADV_SEQUENTIAL if (posix_fadvise(fileno(dhcpd_config), 0, 0, POSIX_FADV_SEQUENTIAL) != 0) diff --git a/tests/expected/errors b/tests/expected/errors index b85e282..6903ac6 100644 --- a/tests/expected/errors +++ b/tests/expected/errors @@ -7,7 +7,16 @@ dhcpd-pools: unknown color mode: 'sometimes' === IPv5 dhcpd-pools: unknown --ip-version argument: 5 === missing conf -dhcpd-pools: parse_config: ./tests/confs/complete_NXFILE: No such file or directory +dhcpd-pools: cannot open inlude: ./tests/confs/complete_NXFILE: No such file or directory +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc + +Shared networks: +name max cur percent touch t+c t+c perc + +Sum of all ranges: +name max cur percent touch t+c t+c perc +All networks 0 0 nan 0 0 nan === missing leases dhcpd-pools: parse_leases: ./tests/leases/complete_NXFILE: No such file or directory === html table From 9c6336e5b6307eb5237b3be05e61ace29dfc81d8 Mon Sep 17 00:00:00 2001 From: "M. van Brummelen" Date: Fri, 9 Aug 2024 10:57:58 +0100 Subject: [PATCH 150/158] docs: fix manual page groff warning The only thing the change does is the way the manpage gets parsed, and fixes follwing warning. "W: dhcpd-pools: groff-message an.tmac::147: warning: tbl preprocessor failed, or it or soelim was not run; table(s) likely not rendered (TE macro called with TW register undefined) [usr/share/man/man1/dhcpd-pools.1.gz:1]" Reference: https://www.mail-archive.com/debian-devel@lists.debian.org/msg377263.html Signed-off-by: M. van Brummelen Reviewed-by: Sami Kerola --- man/dhcpd-pools.1.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 2179163..5001e24 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -1,4 +1,5 @@ -.TH DHCPD-POOLS "1" "2017-11-15" "@VERSION@" "User Commands" +'\" t +.TH DHCPD-POOLS "1" "2024-08-09" "@VERSION@" "User Commands" .SH NAME dhcpd-pools \- ISC dhcpd pools usage analysis .SH SYNOPSIS From 5ed6e7688f858ee19094b55f98d3cdeca3eadd74 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Fri, 9 Aug 2024 11:25:31 +0100 Subject: [PATCH 151/158] gnulib: update bootstrap and gitignore files And it turns out mustach.c will not compile without config.h being explicitly included before other headers, so let me do that. Signed-off-by: Sami Kerola --- bootstrap | 1935 ++++++++++++++++++++++++++++++------------------ bootstrap.conf | 4 +- lib/.gitignore | 60 +- src/mustach.c | 2 + 4 files changed, 1223 insertions(+), 778 deletions(-) diff --git a/bootstrap b/bootstrap index 864856a..2e3f036 100755 --- a/bootstrap +++ b/bootstrap @@ -1,34 +1,67 @@ #! /bin/sh -# Print a version string. -scriptversion=2022-06-04.00; # UTC +# DO NOT EDIT! GENERATED AUTOMATICALLY! # Bootstrap this package from checked-out sources. -# Copyright (C) 2003-2022 Free Software Foundation, Inc. +scriptversion=2024-07-04.10; # UTC +# Copyright (C) 2003-2024 Free Software Foundation, Inc. +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. - +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. - +# # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Originally written by Paul Eggert. The canonical version of this -# script is maintained as build-aux/bootstrap in gnulib, however, to -# be useful to your project, you should place a copy of it under -# version control in the top-level directory of your project. The +# script is maintained as top/bootstrap in gnulib. However, to be +# useful to your package, you should place a copy of it under version +# control in the top-level directory of your package. The intent is +# that all customization can be done with a bootstrap.conf file also +# maintained in your version control; gnulib comes with a template +# build-aux/bootstrap.conf to get you started. + +# Please report bugs or propose patches to bug-gnulib@gnu.org. + +me="$0" +medir=`dirname "$me"` + +# Read the function library and the configuration. + +# A library of shell functions for autopull.sh, autogen.sh, and bootstrap. + +scriptlibversion=2024-07-21.12; # UTC + +# Copyright (C) 2003-2024 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Originally written by Paul Eggert. The canonical version of this +# script is maintained as top/bootstrap-funclib.sh in gnulib. However, +# to be useful to your package, you should place a copy of it under +# version control in the top-level directory of your package. The # intent is that all customization can be done with a bootstrap.conf # file also maintained in your version control; gnulib comes with a # template build-aux/bootstrap.conf to get you started. -# Please report bugs or propose patches to bug-gnulib@gnu.org. - nl=' ' @@ -36,86 +69,13 @@ nl=' LC_ALL=C export LC_ALL -# Ensure that CDPATH is not set. Otherwise, the output from cd -# would cause trouble in at least one use below. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -local_gl_dir=gl - # Honor $PERL, but work even if there is none. PERL="${PERL-perl}" -me=$0 - default_gnulib_url=https://git.savannah.gnu.org/git/gnulib.git -usage() { - cat </dev/null; then # numeric comparison + echo "$2 $1" + elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison + echo "$1 $2" + else # numeric, then lexicographic comparison + lp=$(printf "%s\n%s\n" "$p1" "$p2" | LANG=C sort -n | tail -n1) + if [ "$lp" = "$p2" ]; then + echo "$1 $2" + else + echo "$2 $1" + fi + fi + break + fi + i=$(($i+1)) + done +} + +get_version_sed=' +# Move version to start of line. +s/.*[v ]\([0-9]\)/\1/ + +# Skip lines that do not start with version. +/^[0-9]/!d + +# Remove characters after the version. +s/[^.a-z0-9-].*// + +# The first component must be digits only. +s/^\([0-9]*\)[a-z-].*/\1/ + +#the following essentially does s/5.005/5.5/ +s/\.0*\([1-9]\)/.\1/g +p +q' + +get_version() { + app=$1 + + $app --version >/dev/null 2>&1 || { $app --version; return 1; } + + $app --version 2>&1 | sed -n "$get_version_sed" +} + +check_versions() { + ret=0 + + while read app req_ver; do + # We only need libtoolize from the libtool package. + if test "$app" = libtool; then + app=libtoolize + fi + # Exempt git if git is not needed. + if test "$app" = git; then + $check_git || continue + fi + # Honor $APP variables ($TAR, $AUTOCONF, etc.) + appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_') + test "$appvar" = TAR && appvar=AMTAR + case $appvar in + GZIP) ;; # Do not use $GZIP: it contains gzip options. + PERL::*) ;; # Keep perl modules as-is + *) eval "app=\${$appvar-$app}" ;; + esac + + # Handle the still-experimental Automake-NG programs specially. + # They remain named as the mainstream Automake programs ("automake", + # and "aclocal") to avoid gratuitous incompatibilities with + # preexisting usages (by, say, autoreconf, or custom autogen.sh + # scripts), but correctly identify themselves (as being part of + # "GNU automake-ng") when asked their version. + case $app in + automake-ng|aclocal-ng) + app=${app%-ng} + ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || { + warn_ "Error: '$app' not found or not from Automake-NG" + ret=1 + continue + } ;; + # Another check is for perl modules. These can be written as + # e.g. perl::XML::XPath in case of XML::XPath module, etc. + perl::*) + # Extract module name + app="${app#perl::}" + if ! $PERL -m"$app" -e 'exit 0' >/dev/null 2>&1; then + warn_ "Error: perl module '$app' not found" + ret=1 + fi + continue + ;; + esac + if [ "$req_ver" = "-" ]; then + # Merely require app to exist; not all prereq apps are well-behaved + # so we have to rely on $? rather than get_version. + if ! check_exists --verbose $app; then + warn_ "Error: '$app' not found" + ret=1 + fi + else + # Require app to produce a new enough version string. + inst_ver=$(get_version $app) + if [ ! "$inst_ver" ]; then + warn_ "Error: '$app' not found" + ret=1 + else + latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) + if [ ! "$latest_ver" = "$inst_ver" ]; then + warnf_ '%s\n' \ + "Error: '$app' version == $inst_ver is too old" \ + " '$app' version >= $req_ver is required" + ret=1 + fi + fi + fi + done + + return $ret +} + +print_versions() { + echo "Program Min_version" + echo "----------------------" + printf %s "$buildreq" + echo "----------------------" + # can't depend on column -t +} + +# check_build_prerequisites check_git +check_build_prerequisites() +{ + check_git="$1" + + # gnulib-tool requires at least automake and autoconf. + # If either is not listed, add it (with minimum version) as a prerequisite. + case $buildreq in + *automake*) ;; + *) buildreq="automake 1.9 +$buildreq" ;; + esac + case $buildreq in + *autoconf*) ;; + *) buildreq="autoconf 2.59 +$buildreq" ;; + esac + + # When we can deduce that gnulib-tool will require patch, + # and when patch is not already listed as a prerequisite, add it, too. + if test -d "$local_gl_dir" \ + && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then + case $buildreq in + *patch*) ;; + *) buildreq="patch - +$buildreq" ;; + esac + fi + + if ! printf '%s' "$buildreq" | check_versions; then + echo >&2 + if test -f README-prereq; then + die "See README-prereq for how to get the prerequisite programs" + else + die "Please install the prerequisite programs" + fi + fi + + # Warn the user if autom4te appears to be broken; this causes known + # issues with at least gettext 0.18.3. + probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -) + if test "x$probe" != xhi; then + warn_ "WARNING: your autom4te wrapper eats stdin;" + warn_ "if bootstrap fails, consider upgrading your autotools" + fi +} + # find_tool ENVVAR NAMES... # ------------------------- # Search for a required program. Use the value of ENVVAR, if set, @@ -314,6 +476,489 @@ find_tool () eval "export $find_tool_envvar" } +# --------------------- Preparing GNULIB_SRCDIR for use. --------------------- +# This is part of autopull.sh, but bootstrap needs it too, for self-upgrading. + +# cleanup_gnulib fails, removing the directory $gnulib_path first. +cleanup_gnulib() { + status=$? + rm -fr "$gnulib_path" + exit $status +} + +git_modules_config () { + test -f .gitmodules && git config --file .gitmodules "$@" +} + +prepare_GNULIB_SRCDIR () +{ + if test -n "$GNULIB_SRCDIR"; then + # Use GNULIB_SRCDIR directly. + # We already checked that $GNULIB_SRCDIR references a directory. + # Verify that it contains a gnulib checkout. + test -f "$GNULIB_SRCDIR/gnulib-tool" \ + || die "Error: --gnulib-srcdir or \$GNULIB_SRCDIR is specified," \ + "but does not contain gnulib-tool" + if test -n "$GNULIB_REVISION" && $use_git; then + # The 'git checkout "$GNULIB_REVISION"' command succeeds if the + # GNULIB_REVISION is a commit hash that exists locally, or if it is + # branch name that can be fetched from origin. It fails, however, + # if the GNULIB_REVISION is a commit hash that only exists in + # origin. In this case, we need a 'git fetch' and then retry + # 'git checkout "$GNULIB_REVISION"'. + (cd "$GNULIB_SRCDIR" \ + && { git checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git fetch origin && git checkout "$GNULIB_REVISION"; } + } + ) || exit $? + fi + else + if ! $use_git; then + die "Error: --no-git is specified," \ + "but neither --gnulib-srcdir nor \$GNULIB_SRCDIR is specified" + fi + if git submodule -h | grep -- --reference > /dev/null; then + : + else + die "git version is too old, git >= 1.6.4 is required" + fi + gnulib_path=$(git_modules_config submodule.gnulib.path) + if test -n "$gnulib_path"; then + # A submodule 'gnulib' is configured. + # Get gnulib files. Populate $gnulib_path, updating the submodule. + if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then + # Use GNULIB_REFDIR as a reference. + echo "$0: getting gnulib files..." + git submodule update --init --reference "$GNULIB_REFDIR" "$gnulib_path"\ + || exit $? + else + # GNULIB_REFDIR is not set or not usable. Ignore it. + if git_modules_config submodule.gnulib.url >/dev/null; then + echo "$0: getting gnulib files..." + git submodule init -- "$gnulib_path" || exit $? + git submodule update -- "$gnulib_path" || exit $? + else + die "Error: submodule 'gnulib' has no configured url" + fi + fi + else + gnulib_path='gnulib' + if test ! -d "$gnulib_path"; then + # The subdirectory 'gnulib' does not yet exist. Clone into it. + echo "$0: getting gnulib files..." + trap cleanup_gnulib HUP INT PIPE TERM + gnulib_url=${GNULIB_URL:-$default_gnulib_url} + shallow= + if test -z "$GNULIB_REVISION"; then + if git clone -h 2>&1 | grep -- --depth > /dev/null; then + shallow='--depth 2' + fi + git clone $shallow "$gnulib_url" "$gnulib_path" \ + || cleanup_gnulib + else + if git fetch -h 2>&1 | grep -- --depth > /dev/null; then + shallow='--depth 2' + fi + mkdir -p "$gnulib_path" + # Only want a shallow checkout of $GNULIB_REVISION, but git does not + # support cloning by commit hash. So attempt a shallow fetch by commit + # hash to minimize the amount of data downloaded and changes needed to + # be processed, which can drastically reduce download and processing + # time for checkout. If the fetch by commit fails, a shallow fetch can + # not be performed because we do not know what the depth of the commit + # is without fetching all commits. So fall back to fetching all + # commits. + git -C "$gnulib_path" init + git -C "$gnulib_path" remote add origin "$gnulib_url" + git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" \ + || git -C "$gnulib_path" fetch origin \ + || cleanup_gnulib + git -C "$gnulib_path" reset --hard FETCH_HEAD + (cd "$gnulib_path" && git checkout "$GNULIB_REVISION") \ + || cleanup_gnulib + fi + trap - HUP INT PIPE TERM + else + # The subdirectory 'gnulib' already exists. + if test -n "$GNULIB_REVISION"; then + if test -d "$gnulib_path/.git"; then + # The 'git checkout "$GNULIB_REVISION"' command succeeds if the + # GNULIB_REVISION is a commit hash that exists locally, or if it is + # branch name that can be fetched from origin. It fails, however, + # if the GNULIB_REVISION is a commit hash that only exists in + # origin. In this case, we need a 'git fetch' and then retry + # 'git checkout "$GNULIB_REVISION"'. + (cd "$gnulib_path" \ + && { git checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git fetch origin && git checkout "$GNULIB_REVISION"; } + } + ) || exit $? + else + die "Error: GNULIB_REVISION is specified in bootstrap.conf," \ + "but '$gnulib_path' contains no git history" + fi + fi + fi + fi + # Verify that $gnulib_path contains a gnulib checkout. + test -f "$gnulib_path/gnulib-tool" \ + || die "Error: '$gnulib_path' is supposed to contain a gnulib checkout," \ + "but does not contain gnulib-tool" + GNULIB_SRCDIR=$gnulib_path + fi + # $GNULIB_SRCDIR now points to the version of gnulib to use, and + # we no longer need to use git or $gnulib_path below here. +} + +# -------- Upgrading bootstrap to the version found in GNULIB_SRCDIR. -------- + +upgrade_bootstrap () +{ + if test -f "$medir"/bootstrap-funclib.sh; then + update_lib=true + { cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/top/bootstrap" \ + && cmp -s "$medir"/bootstrap-funclib.sh \ + "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" \ + && cmp -s "$medir"/autopull.sh "$GNULIB_SRCDIR/top/autopull.sh" \ + && cmp -s "$medir"/autogen.sh "$GNULIB_SRCDIR/top/autogen.sh"; \ + } + else + update_lib=false + cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/build-aux/bootstrap" + fi || { + if $update_lib; then + echo "$0: updating bootstrap & companions and restarting..." + else + echo "$0: updating bootstrap and restarting..." + fi + case $(sh -c 'echo "$1"' -- a) in + a) ignored=--;; + *) ignored=ignored;; + esac + u=$update_lib + exec sh -c \ + '{ if '$u' && test -f "$1"; then cp "$1" "$3"; else cp "$2" "$3"; fi; } && + { if '$u' && test -f "$4"; then cp "$4" "$5"; else rm -f "$5"; fi; } && + { if '$u' && test -f "$6"; then cp "$6" "$7"; else rm -f "$7"; fi; } && + { if '$u' && test -f "$8"; then cp "$8" "$9"; else rm -f "$9"; fi; } && + shift && shift && shift && shift && shift && + shift && shift && shift && shift && + exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ + $ignored \ + "$GNULIB_SRCDIR/top/bootstrap" "$GNULIB_SRCDIR/build-aux/bootstrap" \ + "$medir/bootstrap" \ + "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" "$medir/bootstrap-funclib.sh" \ + "$GNULIB_SRCDIR/top/autopull.sh" "$medir/autopull.sh" \ + "$GNULIB_SRCDIR/top/autogen.sh" "$medir/autogen.sh" \ + "$0" "$@" --no-bootstrap-sync + } +} + +# ---------------------------------------------------------------------------- + +if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then + use_gnulib=false +else + use_gnulib=true +fi + +# -------- Fetch auxiliary files from the network. -------------------------- + +autopull_usage() { + cat </dev/null 2>&1 && unset CDPATH + + # Parse options. + + # Use git to update gnulib sources + use_git=true + + for option + do + case $option in + --help) + autopull_usage + return;; + --version) + set -e + echo "autopull.sh $scriptlibversion" + echo "$copyright" + return 0 + ;; + --skip-po) + SKIP_PO=t;; + --force) + checkout_only_file=;; + --bootstrap-sync) + bootstrap_sync=true;; + --no-bootstrap-sync) + bootstrap_sync=false;; + --no-git) + use_git=false;; + *) + bootstrap_option_hook $option || die "$option: unknown option";; + esac + done + + $use_git || test -n "$GNULIB_SRCDIR" \ + || die "Error: --no-git requires \$GNULIB_SRCDIR environment variable" \ + "or --gnulib-srcdir option" + test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \ + || die "Error: \$GNULIB_SRCDIR environment variable" \ + "or --gnulib-srcdir option is specified," \ + "but does not denote a directory" + + if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then + die "Running this script from a non-checked-out distribution is risky." + fi + + check_build_prerequisites $use_git + + if $use_gnulib || $bootstrap_sync; then + prepare_GNULIB_SRCDIR + if $bootstrap_sync; then + upgrade_bootstrap "$@" + fi + fi + + # Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6. + # Also find the compatible sha1 utility on the BSDs + if test x"$SKIP_PO" = x; then + find_tool SHA1SUM sha1sum gsha1sum shasum sha1 + fi + + # See if we can use gnulib's git-merge-changelog merge driver. + if $use_git && test -d .git && check_exists git; then + if git config merge.merge-changelog.driver >/dev/null ; then + : + elif check_exists git-merge-changelog; then + echo "$0: initializing git-merge-changelog driver" + git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' + git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' + else + echo "$0: consider installing git-merge-changelog from gnulib" + fi + fi + + case $SKIP_PO in + '') + if test -d po; then + update_po_files po $package || return + fi + + if test -d runtime-po; then + update_po_files runtime-po $package-runtime || return + fi;; + esac + + # --------------------------------------------------------------------------- + + bootstrap_post_pull_hook \ + || die "bootstrap_post_pull_hook failed" + + # Don't proceed if there are uninitialized submodules. In particular, + # autogen.sh will remove dangling links, which might be links into + # uninitialized submodules. + # But it's OK if the 'gnulib' submodule is uninitialized, as long as + # GNULIB_SRCDIR is set. + if $use_git; then + # Uninitialized submodules are listed with an initial dash. + uninitialized=`git submodule | grep '^-' | awk '{ print $2 }'` + if test -n "$GNULIB_SRCDIR"; then + uninitialized=`echo "$uninitialized" | grep -v '^gnulib$'` + fi + if test -n "$uninitialized"; then + uninit_comma=`echo "$uninitialized" | tr '\n' ',' | sed -e 's|,$|.|'` + die "Some git submodules are not initialized: "$uninit_comma \ + "Either use option '--no-git'," \ + "or run 'git submodule update --init' and bootstrap again." + fi + fi + + if test -f "$medir"/autogen.sh; then + echo "$0: done. Now you can run '$medir/autogen.sh'." + fi +} + +# ----------------------------- Get translations. ----------------------------- + +download_po_files() { + subdir=$1 + domain=$2 + echo "$me: getting translations into $subdir for $domain..." + cmd=$(printf "$po_download_command_format" "$subdir" "$domain") + eval "$cmd" +} + +# Mirror .po files to $po_dir/.reference and copy only the new +# or modified ones into $po_dir. Also update $po_dir/LINGUAS. +# Note po files that exist locally only are left in $po_dir but will +# not be included in LINGUAS and hence will not be distributed. +update_po_files() { + # Directory containing primary .po files. + # Overwrite them only when we're sure a .po file is new. + po_dir=$1 + domain=$2 + + # Mirror *.po files into this dir. + # Usually contains *.s1 checksum files. + ref_po_dir="$po_dir/.reference" + + test -d $ref_po_dir || mkdir $ref_po_dir || return + download_po_files $ref_po_dir $domain \ + && ls "$ref_po_dir"/*.po 2>/dev/null | + sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return + + langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g') + test "$langs" = '*' && langs=x + for po in $langs; do + case $po in x) continue;; esac + new_po="$ref_po_dir/$po.po" + cksum_file="$ref_po_dir/$po.s1" + if ! test -f "$cksum_file" || + ! test -f "$po_dir/$po.po" || + ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then + echo "$me: updated $po_dir/$po.po..." + cp "$new_po" "$po_dir/$po.po" \ + && $SHA1SUM < "$new_po" > "$cksum_file" || return + fi + done +} + +# -------- Generate files automatically from existing sources. -------------- + +autogen_usage() { + cat < /dev/null 2>&1 + elif test -d .svn; then + svn log -r HEAD "$file" > /dev/null 2>&1 + elif test -d CVS; then + grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null | + grep '^/[^/]*/[0-9]' > /dev/null + else + warn_ "no version control for $file?" + false + fi +} + # Strip blank and comment lines to leave significant entries. gitignore_entries() { sed '/^#/d; /^$/d' "$@" @@ -375,7 +1020,7 @@ symlink_to_dir() for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$parent/$dot_ig - insert_vc_ignore $ig "${dst_dir##*/}" + insert_vc_ignore $ig "${dst_dir##*/}/" done fi @@ -424,30 +1069,425 @@ symlink_to_dir() } } -# Override the default configuration, if necessary. -# Make sure that bootstrap.conf is sourced from the current directory -# if we were invoked as "sh bootstrap". -case "$0" in - */*) test -r "$0.conf" && . "$0.conf" ;; - *) test -r "$0.conf" && . ./"$0.conf" ;; -esac +# Regenerate all autogeneratable files that are omitted from the +# version control repository. In particular, regenerate all +# aclocal.m4, config.h.in, Makefile.in, configure files with new +# versions of autoconf or automake. +autogen() +{ + # Ensure that CDPATH is not set. Otherwise, the output from cd + # would cause trouble in at least one use below. + (unset CDPATH) >/dev/null 2>&1 && unset CDPATH -if test "$vc_ignore" = auto; then - vc_ignore= - test -d .git && vc_ignore=.gitignore - test -d CVS && vc_ignore="$vc_ignore .cvsignore" -fi + # Environment variables that may be set by the user. + : "${AUTOPOINT=autopoint}" + : "${AUTORECONF=autoreconf}" -if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then - use_gnulib=false -else - use_gnulib=true -fi + if test "$vc_ignore" = auto; then + vc_ignore= + test -d .git && vc_ignore=.gitignore + test -d CVS && vc_ignore="$vc_ignore .cvsignore" + fi -# Translate configuration into internal form. + + # Parse options. + + # Whether to use copies instead of symlinks. + copy=false + + for option + do + case $option in + --help) + autogen_usage + return;; + --version) + set -e + echo "autogen.sh $scriptlibversion" + echo "$copyright" + return 0 + ;; + --force) + checkout_only_file=;; + --copy) + copy=true;; + *) + bootstrap_option_hook $option || die "$option: unknown option";; + esac + done + + test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \ + || die "Error: \$GNULIB_SRCDIR environment variable or --gnulib-srcdir" \ + "option is specified, but does not denote a directory" + + if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then + die "Running this script from a non-checked-out distribution is risky." + fi + + if $use_gnulib; then + if test -z "$GNULIB_SRCDIR"; then + gnulib_path=$(test -f .gitmodules && + git config --file .gitmodules submodule.gnulib.path) + test -z "$gnulib_path" && gnulib_path=gnulib + GNULIB_SRCDIR=$gnulib_path + fi + fi + + # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. + found_aux_dir=no + grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'])' configure.ac \ + >/dev/null && found_aux_dir=yes + grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ + >/dev/null && found_aux_dir=yes + test $found_aux_dir = yes \ + || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it" + + # If $build_aux doesn't exist, create it now, otherwise some bits + # below will malfunction. If creating it, also mark it as ignored. + if test ! -d $build_aux; then + mkdir $build_aux + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + insert_vc_ignore $dot_ig $build_aux/ + done + fi + + check_build_prerequisites false + + use_libtool=0 + # We'd like to use grep -E, to see if any of LT_INIT, + # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, + # but that's not portable enough (e.g., for Solaris). + grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ + && use_libtool=1 + grep '^[ ]*LT_INIT' configure.ac >/dev/null \ + && use_libtool=1 + if test $use_libtool = 1; then + find_tool LIBTOOLIZE glibtoolize libtoolize + fi + + if $use_gnulib; then + gnulib_tool=$GNULIB_SRCDIR/gnulib-tool + <$gnulib_tool || return + fi + + # NOTE: we have to be careful to run both autopoint and libtoolize + # before gnulib-tool, since gnulib-tool is likely to provide newer + # versions of files "installed" by these two programs. + # Then, *after* gnulib-tool (see below), we have to be careful to + # run autoreconf in such a way that it does not run either of these + # two just-pre-run programs. + + # Import from gettext. + with_gettext=yes + grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ + with_gettext=no + + if test $with_gettext = yes || test $use_libtool = 1; then + + tempbase=.bootstrap$$ + trap "rm -f $tempbase.0 $tempbase.1" HUP INT PIPE TERM + + > $tempbase.0 > $tempbase.1 && + find . ! -type d -print | sort > $tempbase.0 || return + + if test $with_gettext = yes; then + # Released autopoint has the tendency to install macros that have been + # obsoleted in current gnulib, so run this before gnulib-tool. + echo "$0: $AUTOPOINT --force" + $AUTOPOINT --force || return + fi + + # Autoreconf runs aclocal before libtoolize, which causes spurious + # warnings if the initial aclocal is confused by the libtoolized + # (or worse out-of-date) macro directory. + # libtoolize 1.9b added the --install option; but we support back + # to libtoolize 1.5.22, where the install action was default. + if test $use_libtool = 1; then + install= + case $($LIBTOOLIZE --help) in + *--install*) install=--install ;; + esac + echo "running: $LIBTOOLIZE $install --copy" + $LIBTOOLIZE $install --copy + fi + + find . ! -type d -print | sort >$tempbase.1 + old_IFS=$IFS + IFS=$nl + for file in $(comm -13 $tempbase.0 $tempbase.1); do + IFS=$old_IFS + parent=${file%/*} + version_controlled_file "$parent" "$file" || { + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + ig=$parent/$dot_ig + insert_vc_ignore "$ig" "${file##*/}" + done + } + done + IFS=$old_IFS + + rm -f $tempbase.0 $tempbase.1 + trap - HUP INT PIPE TERM + fi + + # Import from gnulib. + + if $use_gnulib; then + gnulib_tool_options="\ + --no-changelog\ + --aux-dir=$build_aux\ + --doc-base=$doc_base\ + --lib=$gnulib_name\ + --m4-base=$m4_base/\ + --source-base=$source_base/\ + --tests-base=$tests_base\ + --local-dir=$local_gl_dir\ + $gnulib_tool_option_extras\ + " + if test $use_libtool = 1; then + case "$gnulib_tool_options " in + *' --libtool '*) ;; + *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; + esac + fi + echo "$0: $gnulib_tool $gnulib_tool_options --import ..." + $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ + || die "gnulib-tool failed" + + if test $with_gettext = yes && test ! -f $m4_base/gettext.m4; then + # The gnulib-tool invocation has removed $m4_base/gettext.m4, that the + # AUTOPOINT invocation had installed. This can occur when the gnulib + # module 'gettext' was previously present but is now not present any more. + # Repeat the AUTOPOINT invocation and the gnulib-tool invocation. + + echo "$0: $AUTOPOINT --force" + $AUTOPOINT --force || return + + echo "$0: $gnulib_tool $gnulib_tool_options --import ..." + $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ + || die "gnulib-tool failed" + fi + + for file in $gnulib_files; do + symlink_to_dir "$GNULIB_SRCDIR" $file \ + || die "failed to symlink $file" + done + fi + + bootstrap_post_import_hook \ + || die "bootstrap_post_import_hook failed" + + # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some + # gnulib-populated directories. Such .m4 files would cause aclocal to fail. + # The following requires GNU find 4.2.3 or newer. Considering the usual + # portability constraints of this script, that may seem a very demanding + # requirement, but it should be ok. Ignore any failure, which is fine, + # since this is only a convenience to help developers avoid the relatively + # unusual case in which a symlinked-to .m4 file is git-removed from gnulib + # between successive runs of this script. + find "$m4_base" "$source_base" \ + -depth \( -name '*.m4' -o -name '*.[ch]' \) \ + -type l -xtype l -delete > /dev/null 2>&1 + + # Invoke autoreconf with --force --install to ensure upgrades of tools + # such as ylwrap. + AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS" + AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive" + + # Tell autoreconf not to invoke autopoint or libtoolize; they were run above. + echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS" + AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \ + || die "autoreconf failed" + + # Get some extra files from gnulib, overriding existing files. + for file in $gnulib_extra_files; do + case $file in + */INSTALL) dst=INSTALL;; + build-aux/*) dst=$build_aux/${file#build-aux/};; + *) dst=$file;; + esac + symlink_to_dir "$GNULIB_SRCDIR" $file $dst \ + || die "failed to symlink $file" + done + + if test $with_gettext = yes; then + # Create gettext configuration. + echo "$0: Creating po/Makevars from po/Makevars.template ..." + rm -f po/Makevars + sed ' + /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ + /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ + /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| + /^XGETTEXT_OPTIONS *=/{ + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} + } + ' po/Makevars.template >po/Makevars \ + || die 'cannot generate po/Makevars' + + # If the 'gettext' module is in use, grab the latest Makefile.in.in. + # If only the 'gettext-h' module is in use, assume autopoint already + # put the correct version of this file into place. + case $gnulib_modules in + *gettext-h*) ;; + *gettext*) + cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \ + || die "cannot create po/Makefile.in.in" + ;; + esac + + if test -d runtime-po; then + # Similarly for runtime-po/Makevars, but not quite the same. + rm -f runtime-po/Makevars + sed ' + /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ + /^subdir *=.*/s/=.*/= runtime-po/ + /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ + /^XGETTEXT_OPTIONS *=/{ + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} + } + ' po/Makevars.template >runtime-po/Makevars \ + || die 'cannot generate runtime-po/Makevars' + + # Copy identical files from po to runtime-po. + (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) + fi + fi + + bootstrap_epilogue + + echo "$0: done. Now you can run './configure'." +} + +# ---------------------------------------------------------------------------- + +# Local Variables: +# eval: (add-hook 'before-save-hook 'time-stamp nil t) +# time-stamp-start: "scriptlibversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: + +usage() { + cat </dev/null && found_aux_dir=yes -grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ - >/dev/null && found_aux_dir=yes -test $found_aux_dir = yes \ - || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it" +check_build_prerequisites $use_git -# If $build_aux doesn't exist, create it now, otherwise some bits -# below will malfunction. If creating it, also mark it as ignored. -if test ! -d $build_aux; then - mkdir $build_aux - for dot_ig in x $vc_ignore; do - test $dot_ig = x && continue - insert_vc_ignore $dot_ig $build_aux - done -fi - -# Note this deviates from the version comparison in automake -# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a -# but this should suffice as we won't be specifying old -# version formats or redundant trailing .0 in bootstrap.conf. -# If we did want full compatibility then we should probably -# use m4_version_compare from autoconf. -sort_ver() { # sort -V is not generally available - ver1="$1" - ver2="$2" - - # split on '.' and compare each component - i=1 - while : ; do - p1=$(echo "$ver1" | cut -d. -f$i) - p2=$(echo "$ver2" | cut -d. -f$i) - if [ ! "$p1" ]; then - echo "$1 $2" - break - elif [ ! "$p2" ]; then - echo "$2 $1" - break - elif [ ! "$p1" = "$p2" ]; then - if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison - echo "$2 $1" - elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison - echo "$1 $2" - else # numeric, then lexicographic comparison - lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1) - if [ "$lp" = "$p2" ]; then - echo "$1 $2" - else - echo "$2 $1" - fi - fi - break - fi - i=$(($i+1)) - done -} - -get_version_sed=' -# Move version to start of line. -s/.*[v ]\([0-9]\)/\1/ - -# Skip lines that do not start with version. -/^[0-9]/!d - -# Remove characters after the version. -s/[^.a-z0-9-].*// - -# The first component must be digits only. -s/^\([0-9]*\)[a-z-].*/\1/ - -#the following essentially does s/5.005/5.5/ -s/\.0*\([1-9]\)/.\1/g -p -q' - -get_version() { - app=$1 - - $app --version >/dev/null 2>&1 || { $app --version; return 1; } - - $app --version 2>&1 | sed -n "$get_version_sed" -} - -check_versions() { - ret=0 - - while read app req_ver; do - # We only need libtoolize from the libtool package. - if test "$app" = libtool; then - app=libtoolize - fi - # Exempt git if --no-git is in effect. - if test "$app" = git; then - $use_git || continue - fi - # Honor $APP variables ($TAR, $AUTOCONF, etc.) - appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_') - test "$appvar" = TAR && appvar=AMTAR - case $appvar in - GZIP) ;; # Do not use $GZIP: it contains gzip options. - PERL::*) ;; # Keep perl modules as-is - *) eval "app=\${$appvar-$app}" ;; - esac - - # Handle the still-experimental Automake-NG programs specially. - # They remain named as the mainstream Automake programs ("automake", - # and "aclocal") to avoid gratuitous incompatibilities with - # pre-existing usages (by, say, autoreconf, or custom autogen.sh - # scripts), but correctly identify themselves (as being part of - # "GNU automake-ng") when asked their version. - case $app in - automake-ng|aclocal-ng) - app=${app%-ng} - ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || { - warn_ "Error: '$app' not found or not from Automake-NG" - ret=1 - continue - } ;; - # Another check is for perl modules. These can be written as - # e.g. perl::XML::XPath in case of XML::XPath module, etc. - perl::*) - # Extract module name - app="${app#perl::}" - if ! $PERL -m"$app" -e 'exit 0' >/dev/null 2>&1; then - warn_ "Error: perl module '$app' not found" - ret=1 - fi - continue - ;; - esac - if [ "$req_ver" = "-" ]; then - # Merely require app to exist; not all prereq apps are well-behaved - # so we have to rely on $? rather than get_version. - if ! check_exists --verbose $app; then - warn_ "Error: '$app' not found" - ret=1 - fi - else - # Require app to produce a new enough version string. - inst_ver=$(get_version $app) - if [ ! "$inst_ver" ]; then - warn_ "Error: '$app' not found" - ret=1 - else - latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) - if [ ! "$latest_ver" = "$inst_ver" ]; then - warnf_ '%s\n' \ - "Error: '$app' version == $inst_ver is too old" \ - " '$app' version >= $req_ver is required" - ret=1 - fi - fi - fi - done - - return $ret -} - -print_versions() { - echo "Program Min_version" - echo "----------------------" - printf %s "$buildreq" - echo "----------------------" - # can't depend on column -t -} - -# Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6. -# Also find the compatible sha1 utility on the BSDs -if test x"$SKIP_PO" = x; then - find_tool SHA1SUM sha1sum gsha1sum shasum sha1 -fi - -use_libtool=0 -# We'd like to use grep -E, to see if any of LT_INIT, -# AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, -# but that's not portable enough (e.g., for Solaris). -grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ - && use_libtool=1 -grep '^[ ]*LT_INIT' configure.ac >/dev/null \ - && use_libtool=1 -if test $use_libtool = 1; then - find_tool LIBTOOLIZE glibtoolize libtoolize -fi - -# gnulib-tool requires at least automake and autoconf. -# If either is not listed, add it (with minimum version) as a prerequisite. -case $buildreq in - *automake*) ;; - *) buildreq="automake 1.9 -$buildreq" ;; -esac -case $buildreq in - *autoconf*) ;; - *) buildreq="autoconf 2.59 -$buildreq" ;; -esac - -# When we can deduce that gnulib-tool will require patch, -# and when patch is not already listed as a prerequisite, add it, too. -if test -d "$local_gl_dir" \ - && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then - case $buildreq in - *patch*) ;; - *) buildreq="patch - -$buildreq" ;; - esac -fi - -if ! printf "$buildreq" | check_versions; then - echo >&2 - if test -f README-prereq; then - die "See README-prereq for how to get the prerequisite programs" - else - die "Please install the prerequisite programs" - fi -fi - -# Warn the user if autom4te appears to be broken; this causes known -# issues with at least gettext 0.18.3. -probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -) -if test "x$probe" != xhi; then - warn_ "WARNING: your autom4te wrapper eats stdin;" - warn_ "if bootstrap fails, consider upgrading your autotools" +if $bootstrap_sync; then + prepare_GNULIB_SRCDIR + upgrade_bootstrap "$@" + # Since we have now upgraded if needed, no need to try it a second time below. + bootstrap_sync=false fi echo "$0: Bootstrapping from checked-out $package sources..." -# See if we can use gnulib's git-merge-changelog merge driver. -if $use_git && test -d .git && check_exists git; then - if git config merge.merge-changelog.driver >/dev/null ; then - : - elif check_exists git-merge-changelog; then - echo "$0: initializing git-merge-changelog driver" - git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' - git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' - else - echo "$0: consider installing git-merge-changelog from gnulib" - fi +# Pass GNULIB_SRCDIR and GNULIB_REFDIR to any subsidiary commands that care. +export GNULIB_SRCDIR +export GNULIB_REFDIR + +if $pull && { $use_git || test -z "$SKIP_PO"; }; then + autopull \ + `if $bootstrap_sync; then + echo ' --bootstrap-sync' + else + echo ' --no-bootstrap-sync' + fi` \ + `if test -z "$checkout_only_file"; then echo ' --force'; fi` \ + `if ! $use_git; then echo ' --no-git'; fi` \ + `if test -n "$SKIP_PO"; then echo ' --skip-po'; fi` \ + || die "could not fetch auxiliary files" fi - -cleanup_gnulib() { - status=$? - rm -fr "$gnulib_path" - exit $status -} - -git_modules_config () { - test -f .gitmodules && git config --file .gitmodules "$@" -} - -if $use_gnulib; then - if $use_git; then - gnulib_path=$(git_modules_config submodule.gnulib.path) - test -z "$gnulib_path" && gnulib_path=gnulib - fi - - # Get gnulib files. Populate $GNULIB_SRCDIR, possibly updating a - # submodule, for use in the rest of the script. - - case ${GNULIB_SRCDIR--} in - -) - # Note that $use_git is necessarily true in this case. - if git_modules_config submodule.gnulib.url >/dev/null; then - echo "$0: getting gnulib files..." - git submodule init -- "$gnulib_path" || exit $? - git submodule update -- "$gnulib_path" || exit $? - - elif [ ! -d "$gnulib_path" ]; then - echo "$0: getting gnulib files..." - - trap cleanup_gnulib 1 2 13 15 - - shallow= - if test -z "$GNULIB_REVISION"; then - git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' - git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \ - || cleanup_gnulib - else - git fetch -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' - mkdir -p "$gnulib_path" - # Only want a shallow checkout of $GNULIB_REVISION, but git does not - # support cloning by commit hash. So attempt a shallow fetch by commit - # hash to minimize the amount of data downloaded and changes needed to - # be processed, which can drastically reduce download and processing - # time for checkout. If the fetch by commit fails, a shallow fetch can - # not be performed because we do not know what the depth of the commit - # is without fetching all commits. So fallback to fetching all commits. - git -C "$gnulib_path" init - git -C "$gnulib_path" remote add origin \ - ${GNULIB_URL:-$default_gnulib_url} - git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" \ - || git -C "$gnulib_path" fetch origin \ - || cleanup_gnulib - git -C "$gnulib_path" reset --hard FETCH_HEAD - fi - - trap - 1 2 13 15 - fi - GNULIB_SRCDIR=$gnulib_path - ;; - *) - # Use GNULIB_SRCDIR directly or as a reference. - if $use_git && test -d "$GNULIB_SRCDIR"/.git && \ - git_modules_config submodule.gnulib.url >/dev/null; then - echo "$0: getting gnulib files..." - if git submodule -h|grep -- --reference > /dev/null; then - # Prefer the one-liner available in git 1.6.4 or newer. - git submodule update --init --reference "$GNULIB_SRCDIR" \ - "$gnulib_path" || exit $? - else - # This fallback allows at least git 1.5.5. - if test -f "$gnulib_path"/gnulib-tool; then - # Since file already exists, assume submodule init already complete. - git submodule update -- "$gnulib_path" || exit $? - else - # Older git can't clone into an empty directory. - rmdir "$gnulib_path" 2>/dev/null - git clone --reference "$GNULIB_SRCDIR" \ - "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \ - && git submodule init -- "$gnulib_path" \ - && git submodule update -- "$gnulib_path" \ - || exit $? - fi - fi - GNULIB_SRCDIR=$gnulib_path - fi - ;; - esac - - if test -d "$GNULIB_SRCDIR"/.git && test -n "$GNULIB_REVISION" \ - && ! git_modules_config submodule.gnulib.url >/dev/null; then - (cd "$GNULIB_SRCDIR" && git checkout "$GNULIB_REVISION") || cleanup_gnulib - fi - - # $GNULIB_SRCDIR now points to the version of gnulib to use, and - # we no longer need to use git or $gnulib_path below here. - - if $bootstrap_sync; then - cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || { - echo "$0: updating bootstrap and restarting..." - case $(sh -c 'echo "$1"' -- a) in - a) ignored=--;; - *) ignored=ignored;; - esac - exec sh -c \ - 'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ - $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \ - "$0" "$@" --no-bootstrap-sync - } - fi - - gnulib_tool=$GNULIB_SRCDIR/gnulib-tool - <$gnulib_tool || exit $? +if $gen; then + autogen \ + `if $copy; then echo ' --copy'; fi` \ + `if test -z "$checkout_only_file"; then echo ' --force'; fi` \ + || die "could not generate auxiliary files" fi -# Get translations. - -download_po_files() { - subdir=$1 - domain=$2 - echo "$me: getting translations into $subdir for $domain..." - cmd=$(printf "$po_download_command_format" "$subdir" "$domain") - eval "$cmd" -} - -# Mirror .po files to $po_dir/.reference and copy only the new -# or modified ones into $po_dir. Also update $po_dir/LINGUAS. -# Note po files that exist locally only are left in $po_dir but will -# not be included in LINGUAS and hence will not be distributed. -update_po_files() { - # Directory containing primary .po files. - # Overwrite them only when we're sure a .po file is new. - po_dir=$1 - domain=$2 - - # Mirror *.po files into this dir. - # Usually contains *.s1 checksum files. - ref_po_dir="$po_dir/.reference" - - test -d $ref_po_dir || mkdir $ref_po_dir || return - download_po_files $ref_po_dir $domain \ - && ls "$ref_po_dir"/*.po 2>/dev/null | - sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return - - langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g') - test "$langs" = '*' && langs=x - for po in $langs; do - case $po in x) continue;; esac - new_po="$ref_po_dir/$po.po" - cksum_file="$ref_po_dir/$po.s1" - if ! test -f "$cksum_file" || - ! test -f "$po_dir/$po.po" || - ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then - echo "$me: updated $po_dir/$po.po..." - cp "$new_po" "$po_dir/$po.po" \ - && $SHA1SUM < "$new_po" > "$cksum_file" || return - fi - done -} - -case $SKIP_PO in -'') - if test -d po; then - update_po_files po $package || exit - fi - - if test -d runtime-po; then - update_po_files runtime-po $package-runtime || exit - fi;; -esac - -version_controlled_file() { - parent=$1 - file=$2 - if test -d .git; then - git rm -n "$file" > /dev/null 2>&1 - elif test -d .svn; then - svn log -r HEAD "$file" > /dev/null 2>&1 - elif test -d CVS; then - grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null | - grep '^/[^/]*/[0-9]' > /dev/null - else - warn_ "no version control for $file?" - false - fi -} - -# NOTE: we have to be careful to run both autopoint and libtoolize -# before gnulib-tool, since gnulib-tool is likely to provide newer -# versions of files "installed" by these two programs. -# Then, *after* gnulib-tool (see below), we have to be careful to -# run autoreconf in such a way that it does not run either of these -# two just-pre-run programs. - -# Import from gettext. -with_gettext=yes -grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ - with_gettext=no - -if test $with_gettext = yes || test $use_libtool = 1; then - - tempbase=.bootstrap$$ - trap "rm -f $tempbase.0 $tempbase.1" 1 2 13 15 - - > $tempbase.0 > $tempbase.1 && - find . ! -type d -print | sort > $tempbase.0 || exit - - if test $with_gettext = yes; then - # Released autopoint has the tendency to install macros that have been - # obsoleted in current gnulib, so run this before gnulib-tool. - echo "$0: $AUTOPOINT --force" - $AUTOPOINT --force || exit - fi - - # Autoreconf runs aclocal before libtoolize, which causes spurious - # warnings if the initial aclocal is confused by the libtoolized - # (or worse out-of-date) macro directory. - # libtoolize 1.9b added the --install option; but we support back - # to libtoolize 1.5.22, where the install action was default. - if test $use_libtool = 1; then - install= - case $($LIBTOOLIZE --help) in - *--install*) install=--install ;; - esac - echo "running: $LIBTOOLIZE $install --copy" - $LIBTOOLIZE $install --copy - fi - - find . ! -type d -print | sort >$tempbase.1 - old_IFS=$IFS - IFS=$nl - for file in $(comm -13 $tempbase.0 $tempbase.1); do - IFS=$old_IFS - parent=${file%/*} - version_controlled_file "$parent" "$file" || { - for dot_ig in x $vc_ignore; do - test $dot_ig = x && continue - ig=$parent/$dot_ig - insert_vc_ignore "$ig" "${file##*/}" - done - } - done - IFS=$old_IFS - - rm -f $tempbase.0 $tempbase.1 - trap - 1 2 13 15 -fi - -# Import from gnulib. - -if $use_gnulib; then - gnulib_tool_options="\ - --no-changelog\ - --aux-dir=$build_aux\ - --doc-base=$doc_base\ - --lib=$gnulib_name\ - --m4-base=$m4_base/\ - --source-base=$source_base/\ - --tests-base=$tests_base\ - --local-dir=$local_gl_dir\ - $gnulib_tool_option_extras\ - " - if test $use_libtool = 1; then - case "$gnulib_tool_options " in - *' --libtool '*) ;; - *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; - esac - fi - echo "$0: $gnulib_tool $gnulib_tool_options --import ..." - $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ - || die "gnulib-tool failed" - - for file in $gnulib_files; do - symlink_to_dir "$GNULIB_SRCDIR" $file \ - || die "failed to symlink $file" - done -fi - -bootstrap_post_import_hook \ - || die "bootstrap_post_import_hook failed" - -# Don't proceed if there are uninitialized submodules. In particular, -# the next step will remove dangling links, which might be links into -# uninitialized submodules. -# -# Uninitialized submodules are listed with an initial dash. -if $use_git && git submodule | grep '^-' >/dev/null; then - die "some git submodules are not initialized. " \ - "Run 'git submodule update --init' and bootstrap again." -fi - -# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some -# gnulib-populated directories. Such .m4 files would cause aclocal to fail. -# The following requires GNU find 4.2.3 or newer. Considering the usual -# portability constraints of this script, that may seem a very demanding -# requirement, but it should be ok. Ignore any failure, which is fine, -# since this is only a convenience to help developers avoid the relatively -# unusual case in which a symlinked-to .m4 file is git-removed from gnulib -# between successive runs of this script. -find "$m4_base" "$source_base" \ - -depth \( -name '*.m4' -o -name '*.[ch]' \) \ - -type l -xtype l -delete > /dev/null 2>&1 - -# Invoke autoreconf with --force --install to ensure upgrades of tools -# such as ylwrap. -AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS" - -# Some systems (RHEL 5) are using ancient autotools, for which the -# --no-recursive option had not been invented. Detect that lack and -# omit the option when it's not supported. FIXME in 2017: remove this -# hack when RHEL 5 autotools are updated, or when they become irrelevant. -case $($AUTORECONF --help) in - *--no-recursive*) AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive";; -esac - -# Tell autoreconf not to invoke autopoint or libtoolize; they were run above. -echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS" -AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \ - || die "autoreconf failed" - -# Get some extra files from gnulib, overriding existing files. -for file in $gnulib_extra_files; do - case $file in - */INSTALL) dst=INSTALL;; - build-aux/*) dst=$build_aux/${file#build-aux/};; - *) dst=$file;; - esac - symlink_to_dir "$GNULIB_SRCDIR" $file $dst \ - || die "failed to symlink $file" -done - -if test $with_gettext = yes; then - # Create gettext configuration. - echo "$0: Creating po/Makevars from po/Makevars.template ..." - rm -f po/Makevars - sed ' - /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ - /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ - /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| - /^XGETTEXT_OPTIONS *=/{ - s/$/ \\/ - a\ - '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} - } - ' po/Makevars.template >po/Makevars \ - || die 'cannot generate po/Makevars' - - # If the 'gettext' module is in use, grab the latest Makefile.in.in. - # If only the 'gettext-h' module is in use, assume autopoint already - # put the correct version of this file into place. - case $gnulib_modules in - *gettext-h*) ;; - *gettext*) - cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \ - || die "cannot create po/Makefile.in.in" - ;; - esac - - if test -d runtime-po; then - # Similarly for runtime-po/Makevars, but not quite the same. - rm -f runtime-po/Makevars - sed ' - /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ - /^subdir *=.*/s/=.*/= runtime-po/ - /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ - /^XGETTEXT_OPTIONS *=/{ - s/$/ \\/ - a\ - '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} - } - ' po/Makevars.template >runtime-po/Makevars \ - || die 'cannot generate runtime-po/Makevars' - - # Copy identical files from po to runtime-po. - (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) - fi -fi - -bootstrap_epilogue - -echo "$0: done. Now you can run './configure'." +# ---------------------------------------------------------------------------- # Local Variables: -# eval: (add-hook 'before-save-hook 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" diff --git a/bootstrap.conf b/bootstrap.conf index 98d0e1c..4f6242a 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -1,6 +1,6 @@ -# Bootstrap configuration. +# Bootstrap configuration. -*- sh -*- -# Copyright (C) 2006-2022 Free Software Foundation, Inc. +# Copyright (C) 2006-2024 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/lib/.gitignore b/lib/.gitignore index daef416..958dc92 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1,11 +1,12 @@ -/alloca.h /alloca.in.h /arg-nonnull.h -/arpa/inet.h /arpa_inet.in.h +/assert.in.h /attribute.h /basename-lgpl.c /basename-lgpl.h +/c32is-impl.h +/c32isprint.c /calloc.c /c-ctype.c /c-ctype.h @@ -22,18 +23,14 @@ /c-strcaseeq.h /c-strcase.h /c-strncasecmp.c -/dirname.h -/dirname-lgpl.c -/dosname.h /dup2.c /errno.in.h /error.c -/error.h +/error.in.h /exitfail.c /exitfail.h /fclose.c /fcntl.c -/fcntl.h /fcntl.in.h /fd-hook.c /fd-hook.h @@ -69,8 +66,6 @@ /getprogname.c /getprogname.h /gettext.h -/.gitignore~ -/glthread/* /hard-locale.c /hard-locale.h /ialloc.c @@ -78,7 +73,7 @@ /idx.h /inet_pton.c /intprops.h -/inttypes.h +/intprops-internal.h /inttypes.in.h /isnan.c /isnand.c @@ -88,29 +83,25 @@ /lc-charset-dispatch.c /lc-charset-dispatch.h /libc-config.h -/libdhcpd_pools.la -/.libs/ -/limits.h /limits.in.h -/*.lo /localcharset.c /localcharset.h -/locale.h /locale.in.h -/localtime-buffer.c -/localtime-buffer.h +/localename.h +/localename-unsafe.c /lseek.c /Makefile.am /malloca.c /malloca.h /malloc.c /math.c -/math.h /math.in.h +/mbrtoc32.c /mbrtowc.c /mbrtowc-impl.h /mbrtowc-impl-utf8.h /mbsinit.c +/mbszero.c /mbtowc-lock.c /mbtowc-lock.h /memchr.c @@ -138,21 +129,19 @@ /setlocale-lock.c /setlocale_null.c /setlocale_null.h +/setlocale_null-unlocked.c /stat.c /stat-time.c /stat-time.h /stat-w32.c /stat-w32.h -/stdalign.in.h -/stdbool.in.h +/stdckdint.in.h /stddef.in.h /stdint.in.h -/stdio.h /stdio-impl.h /stdio.in.h /stdio-read.c /stdio-write.c -/stdlib.h /stdlib.in.h /stpncpy.c /strdup.c @@ -160,50 +149,39 @@ /strerror.c /strerror-override.c /strerror-override.h +/strftime.c /strftime.h -/string.h /string.in.h -/stripslash.c /strstr.c /strtod.c /str-two-way.h /sys_socket.c -/sys/socket.h /sys_socket.in.h -/sys/stat.h /sys_stat.in.h -/sys/types.h /sys_types.in.h -/sys/uio.h /sys_uio.in.h /timegm.c -/time.h /time.in.h /time-internal.h /time_r.c /time_rz.c /tzset.c +/uchar.in.h +/unictype/bitmap.h +/unictype/ctype_print.c +/unictype/ctype_print.h +/unictype/.gitignore +/unictype.in.h /unistd.c -/unistd.h /unistd.in.h +/unitypes.in.h /unsetenv.c -/unused-parameter.h /verify.h /warn-on-use.h -/wchar.h /wchar.in.h -/wctype.h /wctype-h.c /wctype.in.h /windows-initguard.h -/windows-mutex.c -/windows-mutex.h -/windows-once.c -/windows-once.h -/windows-recmutex.c -/windows-recmutex.h -/windows-rwlock.c -/windows-rwlock.h /xalloc-die.c /xalloc.h /xalloc-oversized.h diff --git a/src/mustach.c b/src/mustach.c index 2af9672..b197a83 100644 --- a/src/mustach.c +++ b/src/mustach.c @@ -19,6 +19,8 @@ #define _GNU_SOURCE +#include "config.h" + #include #include #include From 7fc13c60e021afedcd9790f2e7d291ec61bb675d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?luis=CE=B4=CE=BC?= Date: Thu, 6 May 2021 15:20:26 +0200 Subject: [PATCH 152/158] fix: avoid generation of unvalid JSON in summary This can happen when there are no available shared networks. A division by zero throws 'nan', which is non JSON-valid unless it's surrounded by double quotes. --- THANKS | 1 + src/output.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/THANKS b/THANKS index 2639556..2aec631 100644 --- a/THANKS +++ b/THANKS @@ -51,3 +51,4 @@ Mathieu Morier Jean Benoit Belkacem Daheb Björn Lässig +Luisδμ diff --git a/src/output.c b/src/output.c index 17745d4..2967688 100644 --- a/src/output.c +++ b/src/output.c @@ -611,9 +611,15 @@ static int output_json(struct conf_t *state) fprintf(outfile, " \"touched\":%g,\n", state->shared_net_root->touched); fprintf(outfile, " \"free\":%g,\n", state->shared_net_root->available - state->shared_net_root->used); - fprintf(outfile, " \"percent\":%g,\n", oh.percent); + if (fpclassify(state->shared_net_root->available) == FP_ZERO) + fprintf(outfile, " \"percent\":\"%g\",\n", oh.percent); + else + fprintf(outfile, " \"percent\":%g,\n", oh.percent); fprintf(outfile, " \"touch_count\":%g,\n", oh.tc); - fprintf(outfile, " \"touch_percent\":%g,\n", oh.tcp); + if (fpclassify(state->shared_net_root->available) == FP_ZERO) + fprintf(outfile, " \"touch_percent\":\"%g\",\n", oh.tcp); + else + fprintf(outfile, " \"touch_percent\":%g,\n", oh.tcp); if (state->backups_found == 1) { fprintf(outfile, " \"backup_count\":%g,\n", state->shared_net_root->backups); From dc649e27cdd7ced97a499e7877d726ec072de2b1 Mon Sep 17 00:00:00 2001 From: Belkacem Daheb Date: Wed, 26 Jul 2023 17:17:24 +0200 Subject: [PATCH 153/158] getdata output: add start, end and hostname printing support for xml and json Ensure strings are always null terminated. --- src/getdata.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/getdata.c b/src/getdata.c index ff05804..31734de 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -148,7 +148,9 @@ int parse_leases(struct conf_t *state) if ((lease = find_lease(state, &addr)) != NULL) { lease->ethernet = xstrdup(macstring); lease->starts = xstrdup(startsstr); + startsstr[0] = '\0'; lease->ends = xstrdup(endsstr); + endsstr[0] = '\0'; } break; case PREFIX_ENDS: @@ -171,6 +173,7 @@ int parse_leases(struct conf_t *state) if ((lease = find_lease(state, &addr)) != NULL) { lease->hostname = xstrdup(hostnamestr); } + hostnamestr[0] = '\0'; break; default: /* do nothing */ ; From 5b7ab283148ac6edcd2bdb52d9c9605925d5135a Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 28 Apr 2025 14:22:56 +0100 Subject: [PATCH 154/158] build-sys: quote subshell execution in the autotools file Ryan discovered a typo/issue while handling the man targets. This change fixes the issue. Reported-by: Ryan Steinmetz Signed-off-by: Sami Kerola --- Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index c135236..65b6ba2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -39,7 +39,7 @@ edit_cmd = sed \ $(PATHFILES): Makefile @ rm -f $@ $@.tmp - $(AM_V_at) mkdir -p $(dir $@) + $(AM_V_at) mkdir -p $$(dirname $@) $(AM_V_GEN) srcdir=''; \ test -f ./$@.in || srcdir=$(srcdir)/; \ $(edit_cmd) $${srcdir}$@.in >$@.tmp From f917d5b223766f783d22ef23ca079d0073f87de7 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 28 Apr 2025 14:00:35 +0100 Subject: [PATCH 155/158] build-sys: update bootstrap from gnulib Signed-off-by: Sami Kerola --- bootstrap | 156 ++++++++++++++++++++++++++++++++----------------- bootstrap.conf | 2 +- lib/.gitignore | 74 +++++++++++++++++++++++ 3 files changed, 176 insertions(+), 56 deletions(-) diff --git a/bootstrap b/bootstrap index 2e3f036..6f289d7 100755 --- a/bootstrap +++ b/bootstrap @@ -5,7 +5,7 @@ scriptversion=2024-07-04.10; # UTC -# Copyright (C) 2003-2024 Free Software Foundation, Inc. +# Copyright (C) 2003-2025 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -37,9 +37,9 @@ medir=`dirname "$me"` # A library of shell functions for autopull.sh, autogen.sh, and bootstrap. -scriptlibversion=2024-07-21.12; # UTC +scriptlibversion=2025-02-16.12; # UTC -# Copyright (C) 2003-2024 Free Software Foundation, Inc. +# Copyright (C) 2003-2025 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -152,7 +152,8 @@ po_download_command_format=\ "wget --mirror --level=1 -nd -nv -A.po -P '%s' \ https://translationproject.org/latest/%s/" -# Prefer a non-empty tarname (4th argument of AC_INIT if given), else +# When extracting the package name from an AC_INIT invocation, +# prefer a non-empty tarname (4th argument of AC_INIT if given), else # fall back to the package name (1st argument with munging). extract_package_name=' /^AC_INIT(\[*/{ @@ -164,18 +165,21 @@ extract_package_name=' q } s/[],)].*// - s/^GNU // s/-/_/g - y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ - s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g p } ' -package=$(${AUTOCONF:-autoconf} --trace AC_INIT:\$4 configure.ac 2>/dev/null) +normalize_package_name=' + s/^GNU // + y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g +' +package=$(${AUTOCONF:-autoconf} --trace 'AC_INIT:$4' configure.ac 2>/dev/null) if test -z "$package"; then package=$(sed -n "$extract_package_name" configure.ac) \ || die 'cannot find package name in configure.ac' fi +package=$(echo "$package" | sed "$normalize_package_name") gnulib_name=lib$package build_aux=build-aux @@ -506,11 +510,10 @@ prepare_GNULIB_SRCDIR () # if the GNULIB_REVISION is a commit hash that only exists in # origin. In this case, we need a 'git fetch' and then retry # 'git checkout "$GNULIB_REVISION"'. - (cd "$GNULIB_SRCDIR" \ - && { git checkout "$GNULIB_REVISION" 2>/dev/null \ - || { git fetch origin && git checkout "$GNULIB_REVISION"; } - } - ) || exit $? + git -C "$GNULIB_SRCDIR" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$GNULIB_SRCDIR" fetch origin \ + && git -C "$GNULIB_SRCDIR" checkout "$GNULIB_REVISION"; } \ + || exit $? fi else if ! $use_git; then @@ -548,34 +551,78 @@ prepare_GNULIB_SRCDIR () echo "$0: getting gnulib files..." trap cleanup_gnulib HUP INT PIPE TERM gnulib_url=${GNULIB_URL:-$default_gnulib_url} - shallow= - if test -z "$GNULIB_REVISION"; then - if git clone -h 2>&1 | grep -- --depth > /dev/null; then - shallow='--depth 2' - fi - git clone $shallow "$gnulib_url" "$gnulib_path" \ - || cleanup_gnulib + if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then + # Use GNULIB_REFDIR as a reference. + git clone "$GNULIB_REFDIR" "$gnulib_path" \ + && git -C "$gnulib_path" remote set-url origin "$gnulib_url" \ + && if test -z "$GNULIB_REVISION"; then + git -C "$gnulib_path" pull origin \ + && { + # We want the default branch of "$gnulib_url" (since that's + # the behaviour if GNULIB_REFDIR is not specified), not the + # current branch of "$GNULIB_REFDIR". + default_branch=`LC_ALL=C git -C "$gnulib_path" \ + remote show origin \ + | sed -n -e 's/^ *HEAD branch: //p'` + test -n "$default_branch" || default_branch='master' + git -C "$gnulib_path" checkout "$default_branch" + } + else + # The 'git checkout "$GNULIB_REVISION"' command succeeds if the + # GNULIB_REVISION is a commit hash that exists locally, or if it + # is a branch name that can be fetched from origin. It fails, + # however, if the GNULIB_REVISION is a commit hash that only + # exists in origin. In this case, we need a 'git fetch' and then + # retry 'git checkout "$GNULIB_REVISION"'. + git -C "$gnulib_path" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$gnulib_path" fetch origin \ + && git -C "$gnulib_path" checkout "$GNULIB_REVISION"; } + fi \ + || cleanup_gnulib else - if git fetch -h 2>&1 | grep -- --depth > /dev/null; then - shallow='--depth 2' + # GNULIB_REFDIR is not set or not usable. Ignore it. + shallow='--depth 2' + if test -z "$GNULIB_REVISION"; then + git clone $shallow "$gnulib_url" "$gnulib_path" \ + || cleanup_gnulib + else + # Only want a shallow checkout of $GNULIB_REVISION, but git does not + # support cloning by commit hash. So attempt a shallow fetch by + # commit hash to minimize the amount of data downloaded and changes + # needed to be processed, which can drastically reduce download and + # processing time for checkout. If the fetch by commit fails, a + # shallow fetch cannot be performed because we do not know what the + # depth of the commit is without fetching all commits. So fall back + # to fetching all commits. + # $GNULIB_REVISION can be a commit id, a tag name, or a branch name. + mkdir -p "$gnulib_path" + # Use a -c option to silence an annoying message + # "hint: Using 'master' as the name for the initial branch." + # (cf. ). + git -C "$gnulib_path" -c init.defaultBranch=master init + git -C "$gnulib_path" remote add origin "$gnulib_url" + if git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" + then + # "git fetch" of the specific commit succeeded. + git -C "$gnulib_path" reset --hard FETCH_HEAD \ + || cleanup_gnulib + # "git fetch" does not fetch tags (at least in git version 2.43). + # If $GNULIB_REVISION is a tag (not a commit id or branch name), + # add the tag explicitly. + revision=`git -C "$gnulib_path" log -1 --pretty=format:%H` + branch=`LC_ALL=C git -C "$gnulib_path" remote show origin \ + | sed -n -e 's/^ \([^ ]*\) * tracked$/\1/p'` + test "$revision" = "$GNULIB_REVISION" \ + || test "$branch" = "$GNULIB_REVISION" \ + || git -C "$gnulib_path" tag "$GNULIB_REVISION" + else + # Fetch the entire repository. + git -C "$gnulib_path" fetch origin \ + || cleanup_gnulib + git -C "$gnulib_path" checkout "$GNULIB_REVISION" \ + || cleanup_gnulib + fi fi - mkdir -p "$gnulib_path" - # Only want a shallow checkout of $GNULIB_REVISION, but git does not - # support cloning by commit hash. So attempt a shallow fetch by commit - # hash to minimize the amount of data downloaded and changes needed to - # be processed, which can drastically reduce download and processing - # time for checkout. If the fetch by commit fails, a shallow fetch can - # not be performed because we do not know what the depth of the commit - # is without fetching all commits. So fall back to fetching all - # commits. - git -C "$gnulib_path" init - git -C "$gnulib_path" remote add origin "$gnulib_url" - git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" \ - || git -C "$gnulib_path" fetch origin \ - || cleanup_gnulib - git -C "$gnulib_path" reset --hard FETCH_HEAD - (cd "$gnulib_path" && git checkout "$GNULIB_REVISION") \ - || cleanup_gnulib fi trap - HUP INT PIPE TERM else @@ -583,16 +630,15 @@ prepare_GNULIB_SRCDIR () if test -n "$GNULIB_REVISION"; then if test -d "$gnulib_path/.git"; then # The 'git checkout "$GNULIB_REVISION"' command succeeds if the - # GNULIB_REVISION is a commit hash that exists locally, or if it is - # branch name that can be fetched from origin. It fails, however, - # if the GNULIB_REVISION is a commit hash that only exists in - # origin. In this case, we need a 'git fetch' and then retry - # 'git checkout "$GNULIB_REVISION"'. - (cd "$gnulib_path" \ - && { git checkout "$GNULIB_REVISION" 2>/dev/null \ - || { git fetch origin && git checkout "$GNULIB_REVISION"; } - } - ) || exit $? + # GNULIB_REVISION is a commit hash that exists locally, or if it + # is a branch name that can be fetched from origin. It fails, + # however, if the GNULIB_REVISION is a commit hash that only + # exists in origin. In this case, we need a 'git fetch' and then + # retry 'git checkout "$GNULIB_REVISION"'. + git -C "$gnulib_path" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$gnulib_path" fetch origin \ + && git -C "$gnulib_path" checkout "$GNULIB_REVISION"; } \ + || exit $? else die "Error: GNULIB_REVISION is specified in bootstrap.conf," \ "but '$gnulib_path' contains no git history" @@ -722,7 +768,8 @@ Gnulib sources can be fetched in various ways: * Otherwise, if the 'gnulib' directory does not exist, Gnulib sources are cloned into that directory using git from \$GNULIB_URL, defaulting - to $default_gnulib_url. + to $default_gnulib_url; if GNULIB_REFDIR is set and is a git repository + its contents may be used to accelerate the process. If the configuration variable GNULIB_REVISION is set in bootstrap.conf, then that revision is checked out. @@ -890,9 +937,7 @@ update_po_files() { && ls "$ref_po_dir"/*.po 2>/dev/null | sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return - langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g') - test "$langs" = '*' && langs=x - for po in $langs; do + for po in x $(ls $ref_po_dir | sed -n 's/\.po$//p'); do case $po in x) continue;; esac new_po="$ref_po_dir/$po.po" cksum_file="$ref_po_dir/$po.s1" @@ -1355,7 +1400,7 @@ autogen() || die 'cannot generate runtime-po/Makevars' # Copy identical files from po to runtime-po. - (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) + cp -p po/Makefile.in.in po/*-quot po/*.header po/*.sed po/*.sin runtime-po fi fi @@ -1457,7 +1502,8 @@ Gnulib sources can be fetched in various ways: * Otherwise, if the 'gnulib' directory does not exist, Gnulib sources are cloned into that directory using git from \$GNULIB_URL, defaulting - to $default_gnulib_url. + to $default_gnulib_url; if GNULIB_REFDIR is set and is a git repository + its contents may be used to accelerate the process. If the configuration variable GNULIB_REVISION is set in bootstrap.conf, then that revision is checked out. diff --git a/bootstrap.conf b/bootstrap.conf index 4f6242a..c9038c9 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -1,6 +1,6 @@ # Bootstrap configuration. -*- sh -*- -# Copyright (C) 2006-2024 Free Software Foundation, Inc. +# Copyright (C) 2006-2025 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/lib/.gitignore b/lib/.gitignore index 958dc92..e2e741c 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1,5 +1,8 @@ +/alloca.h /alloca.in.h /arg-nonnull.h +/arpa/ +/arpa_inet.c /arpa_inet.in.h /assert.in.h /attribute.h @@ -26,11 +29,13 @@ /dup2.c /errno.in.h /error.c +/error.h /error.in.h /exitfail.c /exitfail.h /fclose.c /fcntl.c +/fcntl.h /fcntl.in.h /fd-hook.c /fd-hook.h @@ -40,6 +45,7 @@ /flexmember.h /float.c /float+.h +/float.h /float.in.h /fopen.c /fpending.c @@ -54,6 +60,8 @@ /ftell.c /ftello.c /getdtablesize.c +/getlocalename_l-unsafe.c +/getlocalename_l-unsafe.h /getopt1.c /getopt.c /getopt-cdefs.in.h @@ -74,6 +82,7 @@ /inet_pton.c /intprops.h /intprops-internal.h +/inttypes.h /inttypes.in.h /isnan.c /isnand.c @@ -83,9 +92,58 @@ /lc-charset-dispatch.c /lc-charset-dispatch.h /libc-config.h +/libdhcpd_pools.la +/libdhcpd_pools_la-arpa_inet.lo +/libdhcpd_pools_la-basename-lgpl.lo +/libdhcpd_pools_la-c32isprint.lo +/libdhcpd_pools_la-c-ctype.lo +/libdhcpd_pools_la-cloexec.lo +/libdhcpd_pools_la-closeout.lo +/libdhcpd_pools_la-close-stream.lo +/libdhcpd_pools_la-c-strcasecmp.lo +/libdhcpd_pools_la-exitfail.lo +/libdhcpd_pools_la-fclose.lo +/libdhcpd_pools_la-fcntl.lo +/libdhcpd_pools_la-fd-hook.lo +/libdhcpd_pools_la-fflush.lo +/libdhcpd_pools_la-float.lo +/libdhcpd_pools_la-fopen.lo +/libdhcpd_pools_la-fpurge.lo +/libdhcpd_pools_la-freading.lo +/libdhcpd_pools_la-fseek.lo +/libdhcpd_pools_la-fseeko.lo +/libdhcpd_pools_la-getprogname.lo +/libdhcpd_pools_la-hard-locale.lo +/libdhcpd_pools_la-ialloc.lo +/libdhcpd_pools_la-localcharset.lo +/libdhcpd_pools_la-malloca.lo +/libdhcpd_pools_la-math.lo +/libdhcpd_pools_la-mbrtoc32.lo +/libdhcpd_pools_la-mbrtowc.lo +/libdhcpd_pools_la-mbszero.lo +/libdhcpd_pools_la-mktime.lo +/libdhcpd_pools_la-nstrftime.lo +/libdhcpd_pools_la-progname.lo +/libdhcpd_pools_la-quotearg.lo +/libdhcpd_pools_la-reallocarray.lo +/libdhcpd_pools_la-realloc.lo +/libdhcpd_pools_la-setlocale_null.lo +/libdhcpd_pools_la-setlocale_null-unlocked.lo +/libdhcpd_pools_la-stat-time.lo +/libdhcpd_pools_la-stdlib.lo +/libdhcpd_pools_la-sys_socket.lo +/libdhcpd_pools_la-timegm.lo +/libdhcpd_pools_la-time_rz.lo +/libdhcpd_pools_la-unistd.lo +/libdhcpd_pools_la-wctype-h.lo +/libdhcpd_pools_la-xalloc-die.lo +/libdhcpd_pools_la-xmalloc.lo +/.libs/ +/limits.h /limits.in.h /localcharset.c /localcharset.h +/locale.h /locale.in.h /localename.h /localename-unsafe.c @@ -95,6 +153,7 @@ /malloca.h /malloc.c /math.c +/math.h /math.in.h /mbrtoc32.c /mbrtowc.c @@ -135,13 +194,18 @@ /stat-time.h /stat-w32.c /stat-w32.h +/stdckdint.h /stdckdint.in.h +/stddef.h /stddef.in.h /stdint.in.h +/stdio.h /stdio-impl.h /stdio.in.h /stdio-read.c /stdio-write.c +/stdlib.c +/stdlib.h /stdlib.in.h /stpncpy.c /strdup.c @@ -151,34 +215,44 @@ /strerror-override.h /strftime.c /strftime.h +/string.h /string.in.h /strstr.c /strtod.c /str-two-way.h +/sys/ /sys_socket.c /sys_socket.in.h /sys_stat.in.h /sys_types.in.h /sys_uio.in.h /timegm.c +/time.h /time.in.h /time-internal.h /time_r.c /time_rz.c /tzset.c +/uchar.h /uchar.in.h +/unictype/ /unictype/bitmap.h /unictype/ctype_print.c /unictype/ctype_print.h /unictype/.gitignore +/unictype.h /unictype.in.h /unistd.c +/unistd.h /unistd.in.h +/unitypes.h /unitypes.in.h /unsetenv.c /verify.h /warn-on-use.h +/wchar.h /wchar.in.h +/wctype.h /wctype-h.c /wctype.in.h /windows-initguard.h From d020e4d09f9a85d93d716d32f881a66092a32fa7 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 28 Apr 2025 14:15:40 +0100 Subject: [PATCH 156/158] output: update html javascripts Signed-off-by: Sami Kerola --- src/output.c | 8 ++++---- tests/expected/formats | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/output.c b/src/output.c index 2967688..4ff0a90 100644 --- a/src/output.c +++ b/src/output.c @@ -658,8 +658,8 @@ static void html_header(struct conf_t *state, FILE *restrict f) fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); @@ -682,8 +682,8 @@ static void html_footer(FILE *restrict f) fprintf(f, "Generated using %s
      \n", PACKAGE_STRING); fprintf(f, "More info at %s\n", PACKAGE_URL, PACKAGE_URL); fprintf(f, "
    \n"); - fprintf(f, "\n"); - fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); diff --git a/tests/expected/formats b/tests/expected/formats index c619ccb..4023f89 100644 --- a/tests/expected/formats +++ b/tests/expected/formats @@ -23,8 +23,8 @@ All networks 100 43 43.000 0 43 43.000 - - + + @@ -178,8 +178,8 @@ table.dhcpd-pools th { text-transform: capitalize }
    - - + + From 1c413b065301f3d843b44f144d09844330fa2296 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 28 Apr 2025 14:35:05 +0100 Subject: [PATCH 157/158] release: 3.3 Signed-off-by: Sami Kerola --- NEWS | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/NEWS b/NEWS index ec50e67..624e0f2 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,28 @@ Please send dhcpd-pools bug reports to kerolasa@iki.fi. gpg: Signature is crated using RSA key ID 8ED396E37E38D471A00530D3A9553245FDE9B739. + +Version 3.3 +Belkacem Daheb (2): + add start, end and hostname printing support for xml and json + getdata output: add start, end and hostname printing support for xml and json + +M. van Brummelen (1): + docs: fix manual page groff warning + +Sami Kerola (9): + update project web page + website: use https + chore: update web links + getdata: only emit warning when config include file cannot be read + gnulib: update bootstrap and gitignore files + build-sys: quote subshell execution in the autotools file + build-sys: update bootstrap from gnulib + output: update html javascripts + release: 3.3 + +luisδμ (1): + fix: avoid generation of unvalid JSON in summary Version 3.2 Jean Benoit (1): From 1722d541034744ca3b21c4921b29e59a37e93b80 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Mon, 28 Apr 2025 15:32:04 +0100 Subject: [PATCH 158/158] chore: update web pages Signed-off-by: Sami Kerola --- webpages/index.html | 9 +++++++++ webpages/sampleoutput.html | 34 ++++++---------------------------- 2 files changed, 15 insertions(+), 28 deletions(-) diff --git a/webpages/index.html b/webpages/index.html index 839ba82..7d5b748 100644 --- a/webpages/index.html +++ b/webpages/index.html @@ -52,6 +52,15 @@ prompt> ./dhcpd-pools --config=/etc/dhcpd.conf href="https://dhcpd-pools.sourceforge.net/sampleoutput.html">sampleoutput.html
    +

    Is dhcpd-pools still developed?

    +

    In short no, it is not.

    +

    +ISC DHCPD has reached +EOL. Users are Kea DHCP server instead. Kea has native +statistics, so it does not require this tool and therefore the +dhcpd-pools is obsolte. +

    Where I can get dhcpd-pools?

    Download release package diff --git a/webpages/sampleoutput.html b/webpages/sampleoutput.html index 521b086..d27d3b6 100644 --- a/webpages/sampleoutput.html +++ b/webpages/sampleoutput.html @@ -5,8 +5,8 @@ - - + + @@ -14,7 +14,7 @@ table.dhcpd-pools th { text-transform: capitalize }

    ISC DHCPD status

    -File samples/dhcpd.leases was last modified at 2017-11-11T23:59:04+0000
    +File tests/leases/formats was last modified at 2025-04-15T14:32:48+0100

    Sum of all

    @@ -27,8 +27,6 @@ table.dhcpd-pools th { text-transform: capitalize } - - @@ -41,8 +39,6 @@ table.dhcpd-pools th { text-transform: capitalize } - -
    touch t+c t+c percbubu perc
    0 43 43.000243.000
    @@ -58,8 +54,6 @@ table.dhcpd-pools th { text-transform: capitalize } touch t+c t+c perc -bu -bu perc @@ -72,8 +66,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 21 52.500 -1 -2.500 example2 @@ -84,8 +76,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 17 42.500 -0 -0.000 @@ -103,8 +93,6 @@ table.dhcpd-pools th { text-transform: capitalize } touch t+c t+c perc -bu -bu perc @@ -119,8 +107,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 11 55.000 -1 -5.000 example1 @@ -133,8 +119,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 10 50.000 -0 -0.000 example2 @@ -147,8 +131,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 8 40.000 -0 -0.000 example2 @@ -161,8 +143,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 9 45.000 -0 -0.000 All networks @@ -175,17 +155,15 @@ table.dhcpd-pools th { text-transform: capitalize } 0 5 25.000 -1 -5.000
    -Generated using dhcpd-pools 3.0
    +Generated using dhcpd-pools 3.3
    More info at https://dhcpd-pools.sourceforge.net/
    - - + +