Arithmetic comparisons to be same way around
[debian/dhcpd-pools.git] / src / dhcpd-pools.h
1 /*
2 ** Copyright (C) 2006- Sami Kerola <kerolasa@iki.fi>
3 **  
4 ** This program is free software; you can redistribute it and/or modify
5 ** it under the terms of the GNU General Public License as published by
6 ** the Free Software Foundation; either version 2 of the License, or
7 ** (at your option) any later version.
8 ** 
9 ** This program is distributed in the hope that it will be useful,
10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 ** GNU General Public License for more details.
13 ** 
14 ** You should have received a copy of the GNU General Public License
15 ** along with this program; if not, write to the Free Software 
16 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19 #ifndef DHCPD_POOLS_H
20 # define DHCPD_POOLS_H 1
21
22 #include <config.h>
23
24 /* Feature test switches */
25 #define _POSIX_SOURCE 1
26 #define POSIXLY_CORRECT 1
27
28 #ifdef  HAVE_STDLIB_H
29 #include <stdlib.h>
30 #else /* Not STDC_HEADERS */
31 extern void exit ();
32 extern char *malloc ();
33 #endif /* STDC_HEADERS */
34
35 /* Structures and unions */
36 struct configuration_t
37 {
38   char *dhcpdconf_file;
39   char *dhcpdlease_file;
40   char output_format[2];
41   char sort[6];
42   int reverse_order;
43   char *output_file;
44   int output_limit[2];
45 };
46 struct shared_network_t
47 {
48   char *name;
49   unsigned long int available;
50   unsigned long int used;
51   unsigned long int touched;
52   unsigned long int backups;
53 };
54 struct range_t
55 {
56   struct shared_network_t *shared_net;
57   unsigned long int first_ip;
58   unsigned long int last_ip;
59   unsigned long int count;
60   unsigned long int touched;
61   unsigned long int backups;
62 };
63 /* Global variables */
64 static int true = 1;
65 static int false = 0;
66
67 char *program_name;
68 struct configuration_t config;
69
70 static int output_limit_bit_1 = 1;
71 static int output_limit_bit_2 = 2;
72 static int output_limit_bit_3 = 4;
73 unsigned int fullhtml;
74
75 struct shared_network_t *shared_networks;
76 char *shared_net_names;
77 unsigned int num_shared_networks;
78
79 struct range_t *ranges;
80 unsigned int num_ranges;
81
82 unsigned long int *leases;
83 unsigned long int num_leases;
84
85 unsigned long int *touches;
86 unsigned long int num_touches;
87
88 unsigned long int *backups;
89 unsigned long int num_backups;
90
91 /* Function prototypes */
92 int prepare_memory (void);
93 int parse_leases (void);
94 char * parse_config (int, char *, char *, char *, struct shared_network_t *);
95 int nth_field (int n, char *dest, const char *src);
96 int prepare_data (void);
97 int do_counting (void);
98 void flip_ranges(struct range_t *ranges, struct range_t *tmp_ranges);
99 /* General support functions */
100 void *safe_malloc (size_t size);
101 void eprintf (char *, ...);
102 void print_version (void);
103 void usage (int status);
104 /* qsort required functions... */
105 /* ...for ranges and... */
106 int intcomp (const void *x, const void *y);
107 int rangecomp (const void *r1, const void *r2);
108 /* sort function pointer and functions */
109 int sort_name (void);
110 unsigned long int (*returner) (struct range_t r);
111 unsigned long int ret_ip(struct range_t r);
112 unsigned long int ret_cur(struct range_t r);
113 unsigned long int ret_max(struct range_t r);
114 unsigned long int ret_percent(struct range_t r);
115 unsigned long int ret_touched(struct range_t r);
116 unsigned long int ret_tc(struct range_t r);
117 unsigned long int ret_tcperc(struct range_t r);
118 void field_selector(char c);
119 int get_order(struct range_t *left, struct range_t *right);
120 void mergesort_ranges (struct range_t *orig, int size, struct range_t *temp);
121 /* output function pointer and functions */
122 int (*output_analysis) (void);
123 int output_txt (void);
124 int output_html (void);
125 int output_xml (void);
126 int output_csv (void);
127 /* Memory release, file closing etc */
128 void clean_up (void);
129
130 #endif /* DHCPD_POOLS_H */