mirror of
git://git.code.sf.net/p/dhcpd-pools/code
synced 2025-12-16 15:57:00 +00:00
Version 2.8
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
parent
625cde6b9c
commit
40edcd2aba
16 changed files with 303 additions and 76 deletions
|
|
@ -1,3 +1,10 @@
|
|||
2008-06-21 Sami Kerola <kerolasa@iki.fi>
|
||||
* dhcpd-pools.c: Default will skip merge sorting.
|
||||
* getdata.c: Interpretation of range wrote without spaces fixed.
|
||||
* getdata.c: Shared network name ending to brace fixed.
|
||||
* Failover backup IP counting.
|
||||
* CSV output bug fixed.
|
||||
|
||||
2008-05-18 Sami Kerola <kerolasa@iki.fi>
|
||||
* Some automake files to help make install pass without complains.
|
||||
* Function names to error messages where they where missing.
|
||||
|
|
|
|||
7
NEWS
7
NEWS
|
|
@ -5,6 +5,13 @@ See the end for copying conditions.
|
|||
|
||||
Please send dhcpd-pools bug reports to kerolasa@iki.fi.
|
||||
|
||||
|
||||
Version 2.8
|
||||
* dhcpd-pools.c: Default will skip merge sorting.
|
||||
* getdata.c: Interpretation of range wrote without spaces fixed.
|
||||
* getdata.c: Shared network name ending to brace fixed.
|
||||
* Failover backup IP counting.
|
||||
* CSV output bug fixed.
|
||||
|
||||
Version 2.7
|
||||
* Some automake files to help make install pass without complains.
|
||||
|
|
|
|||
11
THANKS
11
THANKS
|
|
@ -1,12 +1,13 @@
|
|||
dhcpd-pools THANKS file
|
||||
|
||||
dhcpd-pools has originally been written by Sami Kerola. Many
|
||||
people have further contributed to dhcpd-pools by reporting
|
||||
problems, suggesting various improvements, or submitting actual
|
||||
code. Here is a list of these people. Help me keep it complete
|
||||
and exempt of errors.
|
||||
Project is originated by Sami Kerola.
|
||||
|
||||
Many have reported problems, give improvement suggestions and
|
||||
have some even contributed code. Here is a list of these people.
|
||||
|
||||
Otto J. Mäkelä
|
||||
Mika Paananen
|
||||
Frank Bulk
|
||||
Roar Pettersen
|
||||
Jeff Wieland
|
||||
Rusty
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
@%:@! /bin/sh
|
||||
@%:@ Guess values for system-dependent variables and create Makefiles.
|
||||
@%:@ Generated by GNU Autoconf 2.59 for dhcpd-pools 2.7.
|
||||
@%:@ Generated by GNU Autoconf 2.59 for dhcpd-pools 2.8.
|
||||
@%:@
|
||||
@%:@ Report bugs to <kerolasa@iki.fi>.
|
||||
@%:@
|
||||
|
|
@ -269,8 +269,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='dhcpd-pools'
|
||||
PACKAGE_TARNAME='dhcpd-pools'
|
||||
PACKAGE_VERSION='2.7'
|
||||
PACKAGE_STRING='dhcpd-pools 2.7'
|
||||
PACKAGE_VERSION='2.8'
|
||||
PACKAGE_STRING='dhcpd-pools 2.8'
|
||||
PACKAGE_BUGREPORT='kerolasa@iki.fi'
|
||||
|
||||
# Factoring default headers for most tests.
|
||||
|
|
@ -779,7 +779,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures dhcpd-pools 2.7 to adapt to many kinds of systems.
|
||||
\`configure' configures dhcpd-pools 2.8 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
|
@ -841,7 +841,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of dhcpd-pools 2.7:";;
|
||||
short | recursive ) echo "Configuration of dhcpd-pools 2.8:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
|
@ -967,7 +967,7 @@ fi
|
|||
test -n "$ac_init_help" && exit 0
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
dhcpd-pools configure 2.7
|
||||
dhcpd-pools configure 2.8
|
||||
generated by GNU Autoconf 2.59
|
||||
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
|
|
@ -981,7 +981,7 @@ cat >&5 <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by dhcpd-pools $as_me 2.7, which was
|
||||
It was created by dhcpd-pools $as_me 2.8, which was
|
||||
generated by GNU Autoconf 2.59. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
|
@ -1574,7 +1574,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE=dhcpd-pools
|
||||
VERSION=2.7
|
||||
VERSION=2.8
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
|
|
@ -4712,7 +4712,7 @@ _ASBOX
|
|||
} >&5
|
||||
cat >&5 <<_CSEOF
|
||||
|
||||
This file was extended by dhcpd-pools $as_me 2.7, which was
|
||||
This file was extended by dhcpd-pools $as_me 2.8, which was
|
||||
generated by GNU Autoconf 2.59. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
|
@ -4775,7 +4775,7 @@ _ACEOF
|
|||
|
||||
cat >>$CONFIG_STATUS <<_ACEOF
|
||||
ac_cs_version="\\
|
||||
dhcpd-pools config.status 2.7
|
||||
dhcpd-pools config.status 2.8
|
||||
configured by $0, generated by GNU Autoconf 2.59,
|
||||
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
m4trace:aclocal.m4:50: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
|
||||
m4trace:configure.in:5: -1- AC_INIT([dhcpd-pools], [2.7], [kerolasa@iki.fi])
|
||||
m4trace:configure.in:5: -1- AC_INIT([dhcpd-pools], [2.8], [kerolasa@iki.fi])
|
||||
m4trace:configure.in:5: -1- m4_pattern_forbid([^_?A[CHUM]_])
|
||||
m4trace:configure.in:5: -1- m4_pattern_forbid([_AC_])
|
||||
m4trace:configure.in:5: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
|
||||
|
|
|
|||
4
bind.state.backup
Normal file
4
bind.state.backup
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
No, 'backup' means that the secondary server in a failover pair can
|
||||
allocate this address. The lease states should *always* be the same on both
|
||||
servers
|
||||
|
||||
20
configure
vendored
20
configure
vendored
|
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.59 for dhcpd-pools 2.7.
|
||||
# Generated by GNU Autoconf 2.59 for dhcpd-pools 2.8.
|
||||
#
|
||||
# Report bugs to <kerolasa@iki.fi>.
|
||||
#
|
||||
|
|
@ -269,8 +269,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='dhcpd-pools'
|
||||
PACKAGE_TARNAME='dhcpd-pools'
|
||||
PACKAGE_VERSION='2.7'
|
||||
PACKAGE_STRING='dhcpd-pools 2.7'
|
||||
PACKAGE_VERSION='2.8'
|
||||
PACKAGE_STRING='dhcpd-pools 2.8'
|
||||
PACKAGE_BUGREPORT='kerolasa@iki.fi'
|
||||
|
||||
# Factoring default headers for most tests.
|
||||
|
|
@ -779,7 +779,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures dhcpd-pools 2.7 to adapt to many kinds of systems.
|
||||
\`configure' configures dhcpd-pools 2.8 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
|
@ -841,7 +841,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of dhcpd-pools 2.7:";;
|
||||
short | recursive ) echo "Configuration of dhcpd-pools 2.8:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
|
@ -967,7 +967,7 @@ fi
|
|||
test -n "$ac_init_help" && exit 0
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
dhcpd-pools configure 2.7
|
||||
dhcpd-pools configure 2.8
|
||||
generated by GNU Autoconf 2.59
|
||||
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
|
|
@ -981,7 +981,7 @@ cat >&5 <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by dhcpd-pools $as_me 2.7, which was
|
||||
It was created by dhcpd-pools $as_me 2.8, which was
|
||||
generated by GNU Autoconf 2.59. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
|
@ -1574,7 +1574,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE=dhcpd-pools
|
||||
VERSION=2.7
|
||||
VERSION=2.8
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
|
|
@ -4712,7 +4712,7 @@ _ASBOX
|
|||
} >&5
|
||||
cat >&5 <<_CSEOF
|
||||
|
||||
This file was extended by dhcpd-pools $as_me 2.7, which was
|
||||
This file was extended by dhcpd-pools $as_me 2.8, which was
|
||||
generated by GNU Autoconf 2.59. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
|
@ -4775,7 +4775,7 @@ _ACEOF
|
|||
|
||||
cat >>$CONFIG_STATUS <<_ACEOF
|
||||
ac_cs_version="\\
|
||||
dhcpd-pools config.status 2.7
|
||||
dhcpd-pools config.status 2.8
|
||||
configured by $0, generated by GNU Autoconf 2.59,
|
||||
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
|
|||
|
||||
AC_PREREQ(2.59)
|
||||
|
||||
AC_INIT([dhcpd-pools], [2.7], [kerolasa@iki.fi])
|
||||
AC_INIT([dhcpd-pools], [2.8], [kerolasa@iki.fi])
|
||||
|
||||
AM_INIT_AUTOMAKE([1.6 foreign])
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
.\" http://www.iki.fi/kerolasa/
|
||||
.\" kerolasa@iki.fi
|
||||
.\"
|
||||
.TH DHCPD-POOLS 1 "May 18 2008 - version 2.7"
|
||||
.TH DHCPD-POOLS 1 "May 18 2008 - version 2.8"
|
||||
.SH NAME
|
||||
dhcpd-pools \- ISC dhcp pools usage analysis
|
||||
.SH SYNOPSIS
|
||||
|
|
@ -40,6 +40,10 @@ Touched leases and currently in use together.
|
|||
.TP
|
||||
.I "t+c perc"
|
||||
Percent of touched and currently in use together compared to max.
|
||||
.I "bu"
|
||||
Failover pair can allocate these addresses. The count appears only if there is failover configuration.
|
||||
.I "bu perc"
|
||||
Percent of addresses that failover pair can allocate. The percent appears only if there is failover configuration.
|
||||
.SH ARGUMENTS
|
||||
.TP
|
||||
.I "\-c, \-\-config"
|
||||
|
|
|
|||
|
|
@ -64,6 +64,12 @@ prepare_data (void)
|
|||
/* Sort ranges */
|
||||
qsort (ranges, (size_t) num_ranges, sizeof (struct range_t), &rangecomp);
|
||||
|
||||
/* Sort backups */
|
||||
if (num_backups > 0)
|
||||
{
|
||||
qsort (backups, (size_t) num_backups, sizeof (long int), &intcomp);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -72,9 +78,9 @@ int
|
|||
do_counting (void)
|
||||
{
|
||||
struct range_t *range_p;
|
||||
unsigned int i, j, k, block_size;
|
||||
unsigned int i, j, k, m, block_size;
|
||||
|
||||
i = j = 0;
|
||||
i = j = m = 0;
|
||||
range_p = ranges;
|
||||
|
||||
/* Walk through ranges */
|
||||
|
|
@ -112,6 +118,26 @@ do_counting (void)
|
|||
}
|
||||
}
|
||||
|
||||
/* Count backup IPs */
|
||||
if (num_backups > 0)
|
||||
{
|
||||
for (;
|
||||
range_p->last_ip > backups[m]
|
||||
&& (unsigned long) m < num_touches; m++)
|
||||
{
|
||||
if (range_p->first_ip > touches[m])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
/* IP with in range */
|
||||
range_p->backups++;
|
||||
if (range_p->shared_net)
|
||||
{
|
||||
range_p->shared_net->backups++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Size of range, shared net & all networks */
|
||||
block_size = (unsigned int) (range_p->last_ip - range_p->first_ip - 1);
|
||||
if (range_p->shared_net)
|
||||
|
|
@ -139,8 +165,11 @@ do_counting (void)
|
|||
shared_networks->available += range_p->last_ip - range_p->first_ip - 1;
|
||||
shared_networks->used += range_p->count;
|
||||
shared_networks->touched += range_p->touched;
|
||||
shared_networks->backups += range_p->backups;
|
||||
range_p++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,9 +32,6 @@
|
|||
#ifndef OUTPUT_FORMAT
|
||||
# define OUTPUT_FORMAT "text"
|
||||
#endif
|
||||
#ifndef OUTPUT_ORDER
|
||||
# define OUTPUT_ORDER 'i'
|
||||
#endif
|
||||
#ifndef OUTPUT_LIMIT
|
||||
# define OUTPUT_LIMIT "77"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ extern char *malloc ();
|
|||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int c, i, sorts = 1;
|
||||
int c, i, sorts = 0;
|
||||
int option_index = 0;
|
||||
char *tmp;
|
||||
struct range_t *tmp_ranges;
|
||||
|
|
@ -86,7 +86,6 @@ main (int argc, char **argv)
|
|||
strncpy (config.output_format, OUTPUT_FORMAT, (size_t) 1);
|
||||
|
||||
/* Default sort order is by IPs small to big */
|
||||
config.sort[0] = OUTPUT_ORDER;
|
||||
config.reverse_order = false;
|
||||
|
||||
/* Parse command line options */
|
||||
|
|
@ -260,10 +259,14 @@ main (int argc, char **argv)
|
|||
prepare_data ();
|
||||
do_counting ();
|
||||
tmp_ranges = safe_malloc (sizeof (struct range_t) * num_ranges);
|
||||
mergesort_ranges (ranges, num_ranges, tmp_ranges);
|
||||
if (config.reverse_order == true) {
|
||||
flip_ranges(ranges, tmp_ranges);
|
||||
}
|
||||
if (sorts != 0)
|
||||
{
|
||||
mergesort_ranges (ranges, num_ranges, tmp_ranges);
|
||||
}
|
||||
if (config.reverse_order == true)
|
||||
{
|
||||
flip_ranges (ranges, tmp_ranges);
|
||||
}
|
||||
free (tmp_ranges);
|
||||
output_analysis ();
|
||||
clean_up ();
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ struct shared_network_t
|
|||
unsigned long int available;
|
||||
unsigned long int used;
|
||||
unsigned long int touched;
|
||||
unsigned long int backups;
|
||||
};
|
||||
struct range_t
|
||||
{
|
||||
|
|
@ -55,6 +56,7 @@ struct range_t
|
|||
unsigned long int last_ip;
|
||||
unsigned long int count;
|
||||
unsigned long int touched;
|
||||
unsigned long int backups;
|
||||
};
|
||||
/* Global variables */
|
||||
static int true = 1;
|
||||
|
|
@ -80,6 +82,9 @@ unsigned long int num_leases;
|
|||
unsigned long int *touches;
|
||||
unsigned long int num_touches;
|
||||
|
||||
unsigned long int *backups;
|
||||
unsigned long int num_backups;
|
||||
|
||||
/* Function prototypes */
|
||||
int prepare_memory (void);
|
||||
int parse_leases (void);
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ parse_leases (void)
|
|||
struct in_addr inp;
|
||||
struct stat lease_file_stats;
|
||||
|
||||
num_touches = num_leases = 0;
|
||||
num_touches = num_leases = num_backups = 0;
|
||||
|
||||
dhcpd_leases = fopen (config.dhcpdlease_file, "r");
|
||||
if (dhcpd_leases == NULL)
|
||||
|
|
@ -69,10 +69,9 @@ parse_leases (void)
|
|||
}
|
||||
|
||||
/* I found out that there's one lease address per 300 bytes in
|
||||
* dhcpd.leases file. Malloc is little bit pessimistic, but I
|
||||
* think that this way program crashes slightly less frequetly.
|
||||
* If someone has higher density in lease file I'm interested
|
||||
* to hear about that. */
|
||||
* 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))
|
||||
{
|
||||
eprintf ("parse_leases: %s:", config.dhcpdlease_file);
|
||||
|
|
@ -97,20 +96,33 @@ parse_leases (void)
|
|||
strncpy (ipstring, line, (size_t) MAXLEN - 1);
|
||||
}
|
||||
/* And this is lease state which we are interested about */
|
||||
if (strstr (line, "binding state active"))
|
||||
else if (strstr (line, "binding state active"))
|
||||
{
|
||||
nth_field (2, ipstring, ipstring);
|
||||
inet_aton (ipstring, &inp);
|
||||
leases[num_leases] = htonl (inp.s_addr);
|
||||
num_leases++;
|
||||
}
|
||||
if (strstr (line, " binding state free"))
|
||||
else if (strstr (line, " binding state free"))
|
||||
{
|
||||
nth_field (2, ipstring, ipstring);
|
||||
inet_aton (ipstring, &inp);
|
||||
touches[num_touches] = htonl (inp.s_addr);
|
||||
num_touches++;
|
||||
}
|
||||
else if (strstr (line, " binding state backup"))
|
||||
{
|
||||
nth_field (2, ipstring, ipstring);
|
||||
inet_aton (ipstring, &inp);
|
||||
if (num_backups == 0)
|
||||
{
|
||||
backups =
|
||||
safe_malloc ((size_t) sizeof (long int) *
|
||||
((lease_file_stats.st_size / 250) + MAXLEN));
|
||||
}
|
||||
backups[num_backups] = htonl (inp.s_addr);
|
||||
num_backups++;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -121,7 +133,6 @@ parse_leases (void)
|
|||
* have. Question of semantics, send mail to author if this
|
||||
* annoys. All performance boosts for this function are well
|
||||
* come. */
|
||||
|
||||
int
|
||||
nth_field (int n, char *dest, const char *src)
|
||||
{
|
||||
|
|
@ -176,13 +187,15 @@ is_interesting_config_clause (char *s)
|
|||
}
|
||||
}
|
||||
|
||||
/* This function is far too long. */
|
||||
/* TODO: This spagetti monster function need to be rewrote at
|
||||
* least ones. */
|
||||
int
|
||||
parse_config (char *config_file, char *current_shared_name,
|
||||
char *next_free_shared_name, struct shared_network_t *shared_p)
|
||||
{
|
||||
FILE *dhcpd_config;
|
||||
int i = 0, newclause = 1, argument = 0, comment = 0, braces = 0, quote = 0;
|
||||
int i = 0, newclause = true, argument = false, comment = false, braces =
|
||||
0, quote = false;
|
||||
char word[MAXLEN], c;
|
||||
int braces_shared = 1000;
|
||||
struct in_addr inp;
|
||||
|
|
@ -203,7 +216,7 @@ parse_config (char *config_file, char *current_shared_name,
|
|||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Hairy stuff begins. */
|
||||
/* Very hairy stuff begins. */
|
||||
while (!feof (dhcpd_config))
|
||||
{
|
||||
c = fgetc (dhcpd_config);
|
||||
|
|
@ -243,6 +256,16 @@ parse_config (char *config_file, char *current_shared_name,
|
|||
newclause = true;
|
||||
i = 0;
|
||||
}
|
||||
else if (argument == 2)
|
||||
{
|
||||
/* Range ends to ; and this hair in code make two
|
||||
* ranges wrote to gether like...
|
||||
*
|
||||
* range 10.20.30.40 10.20.30.41;range 10.20.30.42 10.20.30.43;
|
||||
*
|
||||
* ...to be interpreted correctly. */
|
||||
c = ' ';
|
||||
}
|
||||
continue;
|
||||
case '{':
|
||||
if (quote == true)
|
||||
|
|
@ -252,6 +275,12 @@ parse_config (char *config_file, char *current_shared_name,
|
|||
if (comment == false)
|
||||
{
|
||||
braces++;
|
||||
}
|
||||
/* i == 0 detects word that ends to brace like:
|
||||
*
|
||||
* shared-network DSL{ ... */
|
||||
if (i == 0)
|
||||
{
|
||||
newclause = true;
|
||||
}
|
||||
continue;
|
||||
|
|
@ -285,7 +314,7 @@ parse_config (char *config_file, char *current_shared_name,
|
|||
continue;
|
||||
}
|
||||
/* Strip white spaces before new clause word. */
|
||||
if ((newclause == true || argument != 0) && isspace (c) && i == false)
|
||||
if ((newclause == true || argument != 0) && isspace (c) && i == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
@ -337,6 +366,7 @@ parse_config (char *config_file, char *current_shared_name,
|
|||
shared_p->available = 0;
|
||||
shared_p->used = 0;
|
||||
shared_p->touched = 0;
|
||||
shared_p->backups = 0;
|
||||
/* Temporary abuse of argument variable */
|
||||
argument = strlen (next_free_shared_name) + 1;
|
||||
if (last_shared_name > next_free_shared_name + argument)
|
||||
|
|
@ -359,6 +389,7 @@ parse_config (char *config_file, char *current_shared_name,
|
|||
range_p->last_ip = htonl (inp.s_addr) + 1;
|
||||
range_p->count = 0;
|
||||
range_p->touched = 0;
|
||||
range_p->backups = 0;
|
||||
range_p->shared_net = shared_p;
|
||||
num_ranges++;
|
||||
if (num_ranges > RANGES)
|
||||
|
|
|
|||
16
src/other.c
16
src/other.c
|
|
@ -72,15 +72,17 @@ eprintf (char *fmt, ...)
|
|||
fprintf (stderr, "\n");
|
||||
}
|
||||
|
||||
void flip_ranges(struct range_t *ranges, struct range_t *tmp_ranges)
|
||||
void
|
||||
flip_ranges (struct range_t *ranges, struct range_t *tmp_ranges)
|
||||
{
|
||||
int i = num_ranges - 1, j;
|
||||
|
||||
for (j = 0; j < num_ranges; j++) {
|
||||
*(tmp_ranges + j) = *(ranges + i);
|
||||
i--;
|
||||
}
|
||||
|
||||
for (j = 0; j < num_ranges; j++)
|
||||
{
|
||||
*(tmp_ranges + j) = *(ranges + i);
|
||||
i--;
|
||||
}
|
||||
|
||||
memcpy (ranges, tmp_ranges, num_ranges * sizeof (struct range_t));
|
||||
}
|
||||
|
||||
|
|
@ -114,7 +116,7 @@ clean_up (void)
|
|||
void
|
||||
print_version (void)
|
||||
{
|
||||
fprintf (stdout, "%s version 2.7\n", program_name);
|
||||
fprintf (stdout, "%s version 2.8\n", program_name);
|
||||
fprintf (stdout,
|
||||
"Program may be copied only under the terms of GNU General Public\n");
|
||||
fprintf (stdout,
|
||||
|
|
|
|||
173
src/output.c
173
src/output.c
|
|
@ -59,7 +59,12 @@ output_txt (void)
|
|||
fprintf (outfile, "Ranges:\n");
|
||||
fprintf
|
||||
(outfile,
|
||||
"shared net name first ip last ip max cur percent touch t+c t+c perc\n");
|
||||
"shared net name first ip last ip max cur percent touch t+c t+c perc");
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, " bu bu perc");
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
}
|
||||
if (config.output_limit[1] & output_limit_bit_1)
|
||||
{
|
||||
|
|
@ -77,7 +82,7 @@ output_txt (void)
|
|||
fprintf (outfile, "not_defined ");
|
||||
}
|
||||
fprintf (outfile, "%-16s", inet_ntoa (first));
|
||||
fprintf (outfile, " - %-16s %5lu %5lu %10.3f %5lu %5lu %9.3f\n",
|
||||
fprintf (outfile, " - %-16s %5lu %5lu %10.3f %5lu %5lu %9.3f",
|
||||
inet_ntoa (last),
|
||||
range_p->last_ip - range_p->first_ip - 1,
|
||||
range_p->count,
|
||||
|
|
@ -87,6 +92,14 @@ output_txt (void)
|
|||
range_p->touched + range_p->count,
|
||||
(float) (100 * (range_p->touched + range_p->count)) /
|
||||
(range_p->last_ip - range_p->first_ip - 1));
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, "%7lu %8.3f", range_p->backups,
|
||||
(float) (100 * range_p->backups) / (range_p->last_ip -
|
||||
range_p->first_ip -
|
||||
1));
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
range_p++;
|
||||
}
|
||||
}
|
||||
|
|
@ -99,14 +112,19 @@ output_txt (void)
|
|||
{
|
||||
fprintf (outfile, "Shared networks:\n");
|
||||
fprintf (outfile,
|
||||
"name max cur percent touch t+c t+c perc\n");
|
||||
"name max cur percent touch t+c t+c perc");
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, " bu bu perc");
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
}
|
||||
if (config.output_limit[1] & output_limit_bit_2)
|
||||
{
|
||||
for (i = 0; i < num_shared_networks; i++)
|
||||
{
|
||||
shared_p++;
|
||||
fprintf (outfile, "%-20s %5lu %5lu %10.3f %7lu %6lu %9.3f\n",
|
||||
fprintf (outfile, "%-20s %5lu %5lu %10.3f %7lu %6lu %9.3f",
|
||||
shared_p->name,
|
||||
shared_p->available,
|
||||
shared_p->used,
|
||||
|
|
@ -115,6 +133,14 @@ output_txt (void)
|
|||
shared_p->touched + shared_p->used,
|
||||
(float) (100 * (shared_p->touched + shared_p->used)) /
|
||||
shared_p->available);
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, "%7lu %8.3f", shared_p->backups,
|
||||
(float) (100 * shared_p->backups) /
|
||||
shared_p->available);
|
||||
}
|
||||
|
||||
fprintf (outfile, "\n");
|
||||
}
|
||||
}
|
||||
if (config.output_limit[1] & output_limit_bit_2
|
||||
|
|
@ -126,11 +152,17 @@ output_txt (void)
|
|||
{
|
||||
fprintf (outfile, "Sum of all ranges:\n");
|
||||
fprintf (outfile,
|
||||
"name max cur percent touch t+c t+c perc\n");
|
||||
"name max cur percent touch t+c t+c perc");
|
||||
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, " bu bu perc");
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
}
|
||||
if (config.output_limit[1] & output_limit_bit_3)
|
||||
{
|
||||
fprintf (outfile, "%-20s %5lu %5lu %10.3f %7lu %6lu %9.3f\n",
|
||||
fprintf (outfile, "%-20s %5lu %5lu %10.3f %7lu %6lu %9.3f",
|
||||
shared_networks->name,
|
||||
shared_networks->available,
|
||||
shared_networks->used,
|
||||
|
|
@ -142,6 +174,14 @@ output_txt (void)
|
|||
(shared_networks->touched +
|
||||
shared_networks->used)) /
|
||||
shared_networks->available);
|
||||
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, "%7lu %8.3f", shared_networks->backups,
|
||||
(float) (100 * shared_networks->backups) /
|
||||
shared_networks->available);
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
}
|
||||
if (outfile == stdout)
|
||||
{
|
||||
|
|
@ -197,7 +237,14 @@ output_html (void)
|
|||
fprintf (outfile, "<tr><th>Ranges:</th></tr>\n");
|
||||
fprintf
|
||||
(outfile,
|
||||
"<tr><th>shared net name</th><th>first ip</th><th>last ip</th><th align=\"right\">max</th><th align=\"right\">cur</th><th align=\"right\">percent</th><th align=\"right\">touch</th><th align=\"right\">t+c</th><th align=\"right\">t+c perc</th></tr>\n");
|
||||
"<tr><th>shared net name</th><th>first ip</th><th>last ip</th><th align=\"right\">max</th><th align=\"right\">cur</th><th align=\"right\">percent</th><th align=\"right\">touch</th><th align=\"right\">t+c</th><th align=\"right\">t+c perc</th>");
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile,
|
||||
"<th align=\"right\">bu</th><th align=\"right\">bu perc</th>");
|
||||
}
|
||||
|
||||
fprintf (outfile, "</tr>\n");
|
||||
}
|
||||
if (config.output_limit[1] & output_limit_bit_1)
|
||||
{
|
||||
|
|
@ -216,7 +263,7 @@ output_html (void)
|
|||
}
|
||||
fprintf (outfile, "<td>%s</td>", inet_ntoa (first));
|
||||
fprintf (outfile,
|
||||
"<td>%s</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td></tr>\n",
|
||||
"<td>%s</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td>",
|
||||
inet_ntoa (last), range_p->last_ip - range_p->first_ip - 1,
|
||||
range_p->count,
|
||||
(float) (100 * range_p->count) / (range_p->last_ip -
|
||||
|
|
@ -225,6 +272,17 @@ output_html (void)
|
|||
range_p->touched + range_p->count,
|
||||
(float) (100 * (range_p->touched + range_p->count)) /
|
||||
(range_p->last_ip - range_p->first_ip - 1));
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile,
|
||||
"<td align=\"right\">%lu</td><td align=\"right\">%.3f</td>",
|
||||
range_p->backups,
|
||||
(float) (100 * range_p->backups) / (range_p->last_ip -
|
||||
range_p->first_ip -
|
||||
1));
|
||||
}
|
||||
|
||||
fprintf (outfile, "</tr>\n");
|
||||
range_p++;
|
||||
}
|
||||
}
|
||||
|
|
@ -232,7 +290,14 @@ output_html (void)
|
|||
{
|
||||
fprintf (outfile, "\n<tr><th>Shared networks:</th></tr>\n");
|
||||
fprintf (outfile,
|
||||
"<tr><th>name</td><th align=\"right\">max</th><th align=\"right\">cur</th><th align=\"right\">percent</th><th align=\"right\">touch</th><th align=\"right\">t+c</th><th align=\"right\">t+c perc</th></tr>\n");
|
||||
"<tr><th>name</td><th align=\"right\">max</th><th align=\"right\">cur</th><th align=\"right\">percent</th><th align=\"right\">touch</th><th align=\"right\">t+c</th><th align=\"right\">t+c perc</th>");
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile,
|
||||
"<th align=\"right\">bu</th><th align=\"right\">bu perc</th>");
|
||||
}
|
||||
|
||||
fprintf (outfile, "</tr>\n");
|
||||
}
|
||||
if (config.output_limit[1] & output_limit_bit_2)
|
||||
{
|
||||
|
|
@ -240,25 +305,42 @@ output_html (void)
|
|||
{
|
||||
shared_p++;
|
||||
fprintf (outfile,
|
||||
"<tr><td>%s</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td></tr>\n",
|
||||
"<tr><td>%s</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td>",
|
||||
shared_p->name, shared_p->available, shared_p->used,
|
||||
(float) (100 * shared_p->used) / shared_p->available,
|
||||
shared_p->touched,
|
||||
shared_p->touched + shared_p->used,
|
||||
(float) (100 * (shared_p->touched + shared_p->used)) /
|
||||
shared_p->available);
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile,
|
||||
"<td align=\"right\">%lu</td><td align=\"right\">%.3f</td>",
|
||||
shared_p->backups,
|
||||
(float) (100 * shared_p->backups) /
|
||||
shared_p->available);
|
||||
}
|
||||
|
||||
fprintf (outfile, "</tr>\n");
|
||||
}
|
||||
}
|
||||
if (config.output_limit[0] & output_limit_bit_3)
|
||||
{
|
||||
fprintf (outfile, "\n<tr><th>Sum of all ranges:</th></tr>\n");
|
||||
fprintf (outfile,
|
||||
"<tr><th>name</th><th align=\"right\">max</th><th align=\"right\">cur</th><th align=\"right\">percent</th><th align=\"right\">touch</th><th align=\"right\">t+c</th><th align=\"right\">t+c perc</th></tr>\n");
|
||||
"<tr><th>name</th><th align=\"right\">max</th><th align=\"right\">cur</th><th align=\"right\">percent</th><th align=\"right\">touch</th><th align=\"right\">t+c</th><th align=\"right\">t+c perc</th>");
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile,
|
||||
"<th align=\"right\">bu</th><th align=\"right\">bu perc</th>");
|
||||
}
|
||||
|
||||
fprintf (outfile, "</tr>\n");
|
||||
}
|
||||
if (config.output_limit[1] & output_limit_bit_3)
|
||||
{
|
||||
fprintf (outfile,
|
||||
"<tr><td>%s</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td>\n",
|
||||
"<tr><td>%s</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td><td align=\"right\">%lu</td><td align=\"right\">%lu</td><td align=\"right\">%.3f</td>",
|
||||
shared_networks->name, shared_networks->available,
|
||||
shared_networks->used,
|
||||
(float) (100 * shared_networks->used) /
|
||||
|
|
@ -269,6 +351,16 @@ output_html (void)
|
|||
(shared_networks->touched +
|
||||
shared_networks->used)) /
|
||||
shared_networks->available);
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile,
|
||||
"<td align=\"right\">%lu</td><td align=\"right\">%.3f</td>",
|
||||
shared_networks->backups,
|
||||
(float) (100 * shared_networks->backups) /
|
||||
shared_networks->available);
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
fprintf (outfile, "</tr>\n");
|
||||
}
|
||||
fprintf (outfile, "</table>\n");
|
||||
if (outfile == stdout)
|
||||
|
|
@ -323,7 +415,13 @@ output_csv (void)
|
|||
fprintf (outfile, "\"Ranges:\"\n");
|
||||
fprintf
|
||||
(outfile,
|
||||
"\"shared net name\",\"first ip\",\"last ip\",\"max\",\"cur\",\"percent\",\"touch\",\"t+c\",\"t+c perc\"\n");
|
||||
"\"shared net name\",\"first ip\",\"last ip\",\"max\",\"cur\",\"percent\",\"touch\",\"t+c\",\"t+c perc\"");
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, ",\"bu\",\"bu perc\"");
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
|
||||
}
|
||||
if (config.output_limit[1] & output_limit_bit_1)
|
||||
{
|
||||
|
|
@ -342,7 +440,7 @@ output_csv (void)
|
|||
}
|
||||
fprintf (outfile, "\"%s\",", inet_ntoa (first));
|
||||
fprintf (outfile,
|
||||
"\"%s\",\"%lu\",\"%lu\",\"%.3f\",\"%lu\",\"%lu\",\"%.3f\"\n",
|
||||
"\"%s\",\"%lu\",\"%lu\",\"%.3f\",\"%lu\",\"%lu\",\"%.3f\"",
|
||||
inet_ntoa (last), range_p->last_ip - range_p->first_ip - 1,
|
||||
range_p->count,
|
||||
(float) (100 * range_p->count) / (range_p->last_ip -
|
||||
|
|
@ -350,6 +448,16 @@ output_csv (void)
|
|||
range_p->touched, range_p->touched + range_p->count,
|
||||
(float) (100 * (range_p->touched + range_p->count)) /
|
||||
(range_p->last_ip - range_p->first_ip - 1));
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, ",\"%lu\",\"%.3f\"", range_p->backups,
|
||||
(float) (100 * range_p->backups) / (range_p->last_ip -
|
||||
range_p->first_ip -
|
||||
1));
|
||||
}
|
||||
|
||||
|
||||
fprintf (outfile, "\n");
|
||||
range_p++;
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
|
|
@ -358,7 +466,12 @@ output_csv (void)
|
|||
{
|
||||
fprintf (outfile, "\"Shared networks:\"\n");
|
||||
fprintf (outfile,
|
||||
"\"name\",\"max\",\"cur\",\"percent\",\"touch\",\"t+c\",\"t+c perc\"\n");
|
||||
"\"name\",\"max\",\"cur\",\"percent\",\"touch\",\"t+c\",\"t+c perc\"");
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, ",\"bu\",\"bu perc\"");
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
}
|
||||
if (config.output_limit[1] & output_limit_bit_2)
|
||||
{
|
||||
|
|
@ -367,12 +480,23 @@ output_csv (void)
|
|||
{
|
||||
shared_p++;
|
||||
fprintf (outfile,
|
||||
"\"%s\",\"%lu\",\"%lu\",\"%.3f\",\"%lu\",\"%lu\",\"%.3f\"\n",
|
||||
"\"%s\",\"%lu\",\"%lu\",\"%.3f\",\"%lu\",\"%lu\",\"%.3f\"",
|
||||
shared_p->name, shared_p->available, shared_p->used,
|
||||
(float) (100 * shared_p->used) / shared_p->available,
|
||||
shared_p->touched,
|
||||
shared_p->touched + shared_p->used,
|
||||
(float) (100 * (shared_p->touched + shared_p->used)) /
|
||||
shared_p->available);
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, ",\"%lu\",\"%.3f\"", shared_p->backups,
|
||||
(float) (100 * shared_p->backups) /
|
||||
shared_p->available);
|
||||
}
|
||||
|
||||
fprintf (outfile, "\n");
|
||||
|
||||
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
}
|
||||
|
|
@ -380,13 +504,18 @@ output_csv (void)
|
|||
{
|
||||
fprintf (outfile, "\"Sum of all ranges:\"\n");
|
||||
fprintf (outfile,
|
||||
"\"name\",\"max\",\"cur\",\"percent\",\"touch\",\"t+c\",\"t+c perc\"\n");
|
||||
"\"name\",\"max\",\"cur\",\"percent\",\"touch\",\"t+c\",\"t+c perc\"");
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, ",\"bu\",\"bu perc\"");
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
}
|
||||
if (config.output_limit[1] & output_limit_bit_3)
|
||||
{
|
||||
|
||||
fprintf (outfile,
|
||||
"\"%s\",\"%lu\",\"%lu\",\"%.3f\",\"%lu\",\"%lu\",\"%.3f\"\n",
|
||||
"\"%s\",\"%lu\",\"%lu\",\"%.3f\",\"%lu\",\"%lu\",\"%.3f\"",
|
||||
shared_networks->name, shared_networks->available,
|
||||
shared_networks->used,
|
||||
(float) (100 * shared_networks->used) /
|
||||
|
|
@ -396,6 +525,14 @@ output_csv (void)
|
|||
(shared_networks->touched +
|
||||
shared_networks->used)) /
|
||||
shared_networks->available);
|
||||
if (num_backups > 0)
|
||||
{
|
||||
fprintf (outfile, "%7lu %8.3f", shared_networks->backups,
|
||||
(float) (100 * shared_networks->backups) /
|
||||
shared_networks->available);
|
||||
}
|
||||
fprintf (outfile, "\n");
|
||||
|
||||
}
|
||||
if (outfile == stdout)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue