Commit graph

96 commits

Author SHA1 Message Date
Cheer Xiao
6642335c8a counting & output: Convert all counters to double 2013-01-08 22:47:50 +08:00
Cheer Xiao
39e1fb9e5a sort: Get rid of global comparer 2013-01-08 22:41:41 +08:00
Cheer Xiao
137c1d37c2 sort: Use a comparer instead of returner
This resolves the FIXME of sorting ranges according to first_ip in IPv6 mode.
2013-01-08 22:41:36 +08:00
Sami Kerola
4051a953bd smatch scan: fix few warnings
dhcpd-pools.h:79:17: warning: comma at end of enumerator list [-pedantic]
hash.c:85 delete_lease() info: redundant null check on lease->ethernet calling free()

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-12-20 20:04:06 +00:00
Sami Kerola
82df7c98d4 clean up: rename get_order() to merge() and mark static
No other function than mergesort_ranges() can use the merge(), so calling
it with rather generic name and making it static seems right to me.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-12-09 23:26:03 +00:00
Sami Kerola
bd5ee58a3f clean up: convert parsing magic numbers to symbolic values
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-12-09 23:26:03 +00:00
Sami Kerola
4b014eba1c clean up: use enum as symbolic bit masks
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-12-09 23:25:57 +00:00
Sami Kerola
d3ee104a59 clean up: move global variables to config structure
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-12-09 22:56:07 +00:00
Sami Kerola
b59e980cab hash: make delete to use HASH_ITER if it is available
This commit also makes the functions ansi C compliant by adding void to
function argument list.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-12-09 22:43:32 +00:00
Sami Kerola
a9d2d9c82f clean up: move code to more proper location
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-12-09 22:40:00 +00:00
Sami Kerola
2008e1a047 clean up: remove unused functions
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-12-09 22:27:58 +00:00
Sami Kerola
f1411858cb backup counting: fix output regression
The backup count was not printed at all.  This bug was introduced in
version 2.17 (May 2012) when the uthash was taken in use.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-12-09 22:15:14 +00:00
Sami Kerola
3471c91796 docs: add doxygen tags, configuration file, and autotooling
When ./configure --enable-doxygen is used one can browse internal api
documentation from docs/html directory.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-12-09 21:06:32 +00:00
Sami Kerola
fdc560bab9 ouput format: fix active lease printing
Earlier ethernet address collection did not remove duplicated.  Basically
the problem was the same as in problem fixed in commit
ae7747db87, but this time affecting only
the ethernet addresses.  The fix is, as one can see, to make ethernet
collection to share structure with the lease, so that if one is wrong
both are wrong the same way.

Reported-by: Gilles Bouthenot <gilles.bouthenot@univ-fcomte.fr>
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-12-07 21:55:06 +00:00
Gilles Bouthenot
a302bc6829 output: add json format support
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Gilles Bouthenot <gilles.bouthenot@univ-fcomte.fr>
2012-12-04 21:30:09 +00:00
Cheer Xiao
a57d399643 IPv6: add DHCPv6 support
The DHCP version is determined according to the first IP address that
appears in the configuration file.  Caveat; counters are of native long
type.  Since IPv6 address space has 2^128 addresses, they are subject to
overflow.

[Sami Kerola:  This commit also fixed a percent sorting bug, which has
been broken always.  See changes ret_percent() for the fix.]

CC: LI Zimu <lzm@cernet.edu.cn>
CC: Xing Li <xing@cernet.edu.cn>
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Cheer Xiao <xiaqqaix@gmail.com>
2012-12-02 20:35:54 +00:00
Sami Kerola
6684772550 tools: add indent command configuration file
And reindent all files.

Reference: http://www.gnu.org/software/indent/
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-11-28 19:57:19 +00:00
Sami Kerola
0a0fea05ad xstrstr: add function attributes
The pointers arguments are never null, and the function should be
optimized as much as possible.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-11-12 19:19:18 +00:00
Sami Kerola
34f99d2f08 header: let gnulib do what it is best of
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-11-12 19:19:17 +00:00
Sami Kerola
acba2e265e (un)likely: use __builtin_expect to inform expected path
Remove also unnecessary comparison in getdata nth_field().

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-11-12 19:19:01 +00:00
Sami Kerola
4341d92d41 getdata: skip strings before nth_field analysis
This will allow nth_field function to begin from first field, and stop
immediately when it ends, which makes function much more simple and quite
a bit quicker.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-11-10 00:07:09 +00:00
Sami Kerola
b61c93b7a1 performance: add few restict and const key words
This should make the run to be couple percentages quicker.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-11-05 21:05:42 +00:00
Sami Kerola
ab699e71ad build-sys: add gnulib
This will mean better portability, and a good reason to get rid of
various portability autotools directives which where part of this
project.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-11-05 00:03:03 +00:00
Sami Kerola
b3e02ce0ba all: fix compiler warninings
Use compiler warnings from coreutils to check nothing complains, and
fix everything that did.

CFLAGS='-Wall -W -Wformat-y2k -Wformat-security -Winit-self
-Wmissing-include-dirs -Wunused -Wunknown-pragmas -Wstrict-aliasing
-Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align
-Wwrite-strings -Wmissing-declarations -Wmissing-noreturn -Wpacked
-Winvalid-pch -Wvolatile-register-var -Wdisabled-optimization
-Woverlength-strings -Wbuiltin-macro-redefined -Wmudflap
-Wpacked-bitfield-compat -Wsync-nand -Wattributes -Wcoverage-mismatch
-Wabi -Wcpp -Wdeprecated -Wdeprecated-declarations -Wdiv-by-zero
-Wendif-labels -Wextra -Wformat-contains-nul -Wformat-extra-args
-Wformat-zero-length -Wformat=2 -Wmultichar -Wnormalized=nfc -Woverflow
-Wpointer-to-int-cast -Wpragmas -Wsuggest-attribute=noreturn
-Wtrampolines -Wno-sign-compare -Wno-unused-parameter
-Wsuggest-attribute=noreturn -Wno-format-nonliteral -Wno-logical-op
-fdiagnostics-show-option -funit-at-a-time'

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-07-17 17:59:39 +02:00
Sami Kerola
42dd80aeac alarming: make native nagios support to dhcpd-pools
This commit makes integrating the command with nagios much easier.

$ dhcpd-pools -c dhcpd.conf -l dhcpd.leases --critical 80 --warning 75
CRITICAL: dhcpd-pools: Ranges; crit: 14 warn: 22 ok: 220 Shared nets; crit: 1 warn: 0 ok: 4

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-06-24 16:40:25 +02:00
Enno Grper
ae7747db87 analyse: critical bug in the counting code
The problem is, that you simply count all lease occurrences in
dhcpd.leases, but only the last ones for each ip address are
valid.  The lease file is more like a logfile of what has been
done, than a real database.  To fix the counting issue, I'm using
a single hash (from uthash.h [1]) for the counting.  This way
only the last lease entry for each IP gets into my counting
structure.

When you remove the duplicates in prepare_data(), you don't have
the information anymore, if the active lease entry or the free
lease entry came last.  Simply deleting each ip from the touches
array, that is already in the leases array, gives you a big
chance to count wrong.  Another way of fixing this would be to
not only store the ips in your arrays, but a structure containing
the ip and a global lease entry counter.  Then you could delete
all entries except for the latest.

[1] http://uthash.sourceforge.net/

Reported-by: Huangy
Signed-off-by: Enno Grper <groepeen@cms.hu-berlin.de>
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-05-02 19:57:45 +02:00
Sami Kerola
3ef5d6c07f output: verify stream status when closing files
Includes also closing stdout and stderr at the end of execution.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2012-03-22 21:35:25 +01:00
Sami Kerola
5ea17c9754 build-sys: C99 has true and false
It is pointless to define true and false when standard headers can do
that.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-11-13 22:09:10 +01:00
Sami Kerola
6b47d9ffaf all files: use restrict key word for all pointer arguments
Limit the effects of pointer aliasing and aiding caching
optimizations.

http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-10-23 22:40:10 +02:00
Sami Kerola
f2d86d9a83 dhcpd-pools.h: move string.h to include
Version 2.16 needs the patche to compile correctly and without
warnings (tested on NetBSD, Mac OS X and Debian/Ubuntu).

Signed-off-by: Adam Ciarcinski <adam@netbsd.org>
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-07-20 09:21:47 +02:00
Sami Kerola
b1cd84e804 getdata: new xstrstr function for performance
The strstr is changed to xstrstr, which short cuts to points in
string where first differences are expected to found. This made
the tool tiny bit quicker.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-07-11 00:38:35 +02:00
Sami Kerola
f51f2e9fe1 licensing: set placeholder properly
I should have done this at commit a31fd0d97a

sed -i 's/<COPYRIGHT HOLDER>/THE AUTHOR AND CONTRIBUTORS/'

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-07-09 10:18:53 +02:00
Sami Kerola
76915512b2 maint: coding style fixes
Remove unnecessary type casting, move .gitignore file contents to
right location, reindent to use Linux coding style, fix few type
mismatches, clean up to help & version output and hint compiler
call to these functions will end program.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-07-08 21:41:35 +02:00
Sami Kerola
1e82461875 bug: use uint32_t for IP numbers
There where long and unsigned long used for IPs in use which
caused occasional off by one errors. The word occasional should
be read: pretty much every one with large enough configuration
has been affected.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-07-08 16:28:22 +02:00
Sami Kerola
a31fd0d97a licensing: use FreeBSD license (was GNUv3)
This change will also remove getopt source code and headers,
which has GNU license that I cannot change.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-06-21 22:54:03 +02:00
Sami Kerola
e299e7fce2 headers: include-what-you-use fixes
Usage of includes are set up the way found to be in use, with a help of
magnificent utility.

http://code.google.com/p/include-what-you-use/

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-06-08 20:59:56 +02:00
Sami Kerola
c81af2df45 shared network names to be dynamically allocated
This patch is a step a head to make data all structures
completely dynamic. After this the next obvious thing to do is to
make shared networks struct a linked list instead of a list.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-04-11 20:52:40 +02:00
Sami Kerola
b492802dfa make range allocation dynamic
This is a test fix after commit

5cbe8d07fb

to see what can be done. Truth is that not much. I could fix how
ranges are allocated, but the fact there is pointers to shared
networks and network names reallocating the memory spaces is not
really going to work. The only way to truly fix this issue is to
create better data structures. As you can expect that is a major
change, and will take some time to implement.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-04-10 19:12:29 +02:00
Sami Kerola
d54721b3a4 dhcpd-pools.h: portable program_invocation_short_name
The program_invocation_short_name portability code is copied
from util-linux project almost as is.

Reported-by: Roar Pettersen <rope1968@gmail.com>
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-03-23 22:26:57 +01:00
Sami Kerola
e219f3f722 dhcpd-pools.h: indentation fix
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-03-19 11:52:30 +01:00
Sami Kerola
93bcd305c4 dhcpd-pools.h: function attributes declarations
Advice compiler about functions to generate better optimization
and argument checks.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-03-19 11:48:48 +01:00
Sami Kerola
ed2266424d fix to safe_strdup prototype.
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-02-12 23:07:57 +01:00
Sami Kerola
171ff1d704 Allow xml output with leases to use output file
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-02-08 22:11:49 +01:00
Sami Kerola
17429ef85b Copyright notice change to GNU license 3
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-02-08 20:33:09 +01:00
Sami Kerola
849c8f5e73 Use what libc will provide
The eprintf removed and replaced with err & warn. Option parsing
no longer tries to find missing optargs, which are getopts should
notice. Few complier warnings got to be removed as well. Finally
the commments will no longer exceed standard terminal width.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-01-22 20:53:15 +01:00
Sami Kerola
74aef1c34e Import from release candidate 2.13.
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
2011-01-21 18:15:50 +01:00