dhcpd-pools  2.28
ISC dhcpd lease usage analyser
dhcpd-pools.h
Go to the documentation of this file.
1 /*
2  * The dhcpd-pools has BSD 2-clause license which also known as "Simplified
3  * BSD License" or "FreeBSD License".
4  *
5  * Copyright 2006- Sami Kerola. All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are
9  * met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the
17  * distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR AND CONTRIBUTORS OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  *
31  * The views and conclusions contained in the software and documentation are
32  * those of the authors and should not be interpreted as representing
33  * official policies, either expressed or implied, of Sami Kerola.
34  */
35 
42 #ifndef DHCPD_POOLS_H
43 # define DHCPD_POOLS_H 1
44 
45 # include <config.h>
46 # include <arpa/inet.h>
47 # include <stddef.h>
48 # include <stdio.h>
49 # include <string.h>
50 # include <uthash.h>
51 
58 # ifdef HAVE_BUILTIN_EXPECT
59 # define likely(x) __builtin_expect(!!(x), 1)
60 # define unlikely(x) __builtin_expect(!!(x), 0)
61 # else
62 # define likely(x) (x)
63 # define unlikely(x) (x)
64 # endif
65 
66 /* The __attribute__ feature is available in gcc versions 2.5 and later.
67  * The attribute __pure__ was added in gcc 2.96. */
68 # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
69 # define _DP_ATTRIBUTE_PURE __attribute__ ((__pure__))
70 # else
71 # define _DP_ATTRIBUTE_PURE /* empty */
72 # endif
73 
74 /* The __const__ attribute was added in gcc 2.95. */
75 # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
76 # define _DP_ATTRIBUTE_CONST __attribute__ ((__const__))
77 # else
78 # define _DP_ATTRIBUTE_CONST /* empty */
79 # endif
80 
81 /* The attribute __hot__ was added in gcc 4.3. */
82 # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
83 # define _DP_ATTRIBUTE_HOT __attribute__ ((__hot__))
84 # else
85 # define _DP_ATTRIBUTE_HOT /* empty */
86 # endif
87 
90 union ipaddr_t {
92  unsigned char v6[16];
93 };
101 };
106 enum prefix_t {
116 };
121  char *name;
122  double available;
123  double used;
124  double touched;
125  double backups;
126 };
130 struct range_t {
134  double count;
135  double touched;
136  double backups;
137 };
147 };
151 enum ltype {
155 };
159 struct leases_t {
160  union ipaddr_t ip; /* ip as key */
161  enum ltype type;
162  char *ethernet;
163  UT_hash_handle hh;
164 };
168 enum limbits {
169  R_BIT = (1 << 0),
170  S_BIT = (1 << 1),
171  A_BIT = (1 << 2)
172 };
173 
177 # define STATE_OK 0
178 # define STATE_WARNING 1
179 # define STATE_CRITICAL 2
180 
184 typedef int (*comparer_t) (struct range_t *r1, struct range_t *r2);
185 
189 struct output_sort {
191  struct output_sort *next;
192 };
197  char dhcpv6;
202  char *output_file;
203  double warning;
204  double critical;
205  double warn_count;
206  double crit_count;
207  double minsize;
208  unsigned int
210  backups_found:1,
211  snet_alarms:1,
213  header_limit:3,
214  number_limit:3;
215 };
216 /* Global variables */
217 /* \var prefix_length Length of each prefix. */
218 extern int prefix_length[2][NUM_OF_PREFIX];
219 /* \var config Runtime configuration. */
220 extern struct configuration_t config;
221 /* \var shared_networks Pointer holding shared network count results. */
222 extern struct shared_network_t *shared_networks;
223 /* \var num_shared_networks Number of shared networks found. */
224 extern unsigned int num_shared_networks;
225 /* \var ranges Pointer holding range count results. */
226 extern struct range_t *ranges;
227 /* \var num_ranges Number of ranges found. */
228 extern unsigned int num_ranges;
229 /* \var leases Pointer holding all leases. */
230 extern struct leases_t *leases;
232 extern unsigned int RANGES;
233 
234 /* Function prototypes */
235 extern void prepare_memory(void);
236 extern void set_ipv_functions(int version);
237 extern int parse_leases(void);
238 extern void parse_config(int, const char *__restrict, struct shared_network_t *__restrict)
239  __attribute__ ((nonnull(2, 3)));
240 extern void prepare_data(void);
241 extern void do_counting(void);
242 extern void flip_ranges(struct range_t *__restrict ranges, struct range_t *__restrict tmp_ranges)
243  __attribute__ ((nonnull(1, 2)));
244 /* support functions */
245 extern int (*parse_ipaddr) (const char *restrict src, union ipaddr_t *restrict dst);
246 extern int parse_ipaddr_init(const char *restrict src,
248 extern int parse_ipaddr_v4(const char *restrict src, union ipaddr_t *restrict dst);
249 extern int parse_ipaddr_v6(const char *restrict src, union ipaddr_t *restrict dst);
250 
251 extern void (*copy_ipaddr) (union ipaddr_t *restrict dst, const union ipaddr_t *restrict src);
252 extern void copy_ipaddr_init(union ipaddr_t *restrict dst,
253  const union ipaddr_t *restrict src) _DP_ATTRIBUTE_CONST;
254 extern void copy_ipaddr_v4(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src);
255 extern void copy_ipaddr_v6(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src);
256 
257 extern const char *(*ntop_ipaddr) (const union ipaddr_t *ip);
258 extern const char *ntop_ipaddr_init(const union ipaddr_t *ip) _DP_ATTRIBUTE_CONST;
259 extern const char *ntop_ipaddr_v4(const union ipaddr_t *ip);
260 extern const char *ntop_ipaddr_v6(const union ipaddr_t *ip);
261 
262 extern double (*get_range_size) (const struct range_t *r);
263 extern double get_range_size_init(const struct range_t *r) _DP_ATTRIBUTE_CONST;
264 extern double get_range_size_v4(const struct range_t *r) _DP_ATTRIBUTE_PURE;
265 extern double get_range_size_v6(const struct range_t *r) _DP_ATTRIBUTE_PURE;
266 
267 extern int (*xstrstr) (const char *__restrict str);
268 extern int xstrstr_init(const char *__restrict str) _DP_ATTRIBUTE_CONST;
269 extern int xstrstr_v4(const char *__restrict str)
271 extern int xstrstr_v6(const char *__restrict str)
273 
274 extern double strtod_or_err(const char *__restrict str, const char *__restrict errmesg);
275 extern void print_version(void) __attribute__ ((noreturn));
276 extern void usage(int status) __attribute__ ((noreturn));
277 /* qsort required functions... */
278 /* ...for ranges and... */
279 extern int (*ipcomp) (const union ipaddr_t *restrict a, const union ipaddr_t *restrict b);
280 extern int ipcomp_init(const union ipaddr_t *restrict a,
281  const union ipaddr_t *restrict b) _DP_ATTRIBUTE_CONST;
282 extern int ipcomp_v4(const union ipaddr_t *restrict a,
283  const union ipaddr_t *restrict b) _DP_ATTRIBUTE_PURE;
284 extern int ipcomp_v6(const union ipaddr_t *restrict a,
285  const union ipaddr_t *restrict b) _DP_ATTRIBUTE_PURE;
286 
287 extern int (*leasecomp) (const struct leases_t *restrict a, const struct leases_t *restrict b);
288 extern int leasecomp_init(const struct leases_t *restrict a
289  __attribute__ ((unused)),
290  const struct leases_t *restrict b __attribute__ ((unused)));
291 extern int leasecomp_v4(const struct leases_t *restrict a, const struct leases_t *restrict b);
292 extern int leasecomp_v6(const struct leases_t *restrict a, const struct leases_t *restrict b);
293 
294 extern int comp_cur(struct range_t *r1, struct range_t *r2) _DP_ATTRIBUTE_PURE;
295 extern int comp_double(double f1, double f2) _DP_ATTRIBUTE_CONST;
296 extern int comp_ip(struct range_t *r1, struct range_t *r2);
297 extern int comp_max(struct range_t *r1, struct range_t *r2);
298 extern int comp_percent(struct range_t *r1, struct range_t *r2);
299 extern int comp_tc(struct range_t *r1, struct range_t *r2) _DP_ATTRIBUTE_PURE;
300 extern int comp_tcperc(struct range_t *r1, struct range_t *r2);
301 extern int comp_touched(struct range_t *r1, struct range_t *r2) _DP_ATTRIBUTE_PURE;
302 extern int rangecomp(const void *__restrict r1, const void *__restrict r2)
303  __attribute__ ((nonnull(1, 2)));
304 /* sort function pointer and functions */
305 extern comparer_t field_selector(char c);
306 extern double ret_percent(struct range_t r);
307 extern double ret_tc(struct range_t r) _DP_ATTRIBUTE_CONST;
308 extern double ret_tcperc(struct range_t r);
309 extern void mergesort_ranges(struct range_t *__restrict orig, int size,
310  struct range_t *__restrict temp)
311  __attribute__ ((nonnull(1, 3)));
312 /* output function pointer and functions */
313 extern int (*output_analysis) (void);
314 extern int output_txt(void);
315 extern int output_html(void);
316 extern int output_xml(void);
317 extern int output_json(void);
318 extern int output_csv(void);
319 extern int output_alarming(void);
320 /* Memory release, file closing etc */
321 extern void clean_up(void);
322 /* Hash functions */
323 extern void (*add_lease) (union ipaddr_t *ip, enum ltype type);
324 extern void add_lease_init(union ipaddr_t *ip, enum ltype type) _DP_ATTRIBUTE_CONST;
325 extern void add_lease_v4(union ipaddr_t *ip, enum ltype type);
326 extern void add_lease_v6(union ipaddr_t *ip, enum ltype type);
327 
328 extern struct leases_t *(*find_lease) (union ipaddr_t *ip);
329 extern struct leases_t *find_lease_init(union ipaddr_t *ip) _DP_ATTRIBUTE_CONST;
330 extern struct leases_t *find_lease_v4(union ipaddr_t *ip) _DP_ATTRIBUTE_PURE;
331 extern struct leases_t *find_lease_v6(union ipaddr_t *ip) _DP_ATTRIBUTE_PURE;
332 
333 extern void delete_lease(struct leases_t *lease);
334 extern void delete_all_leases(void);
335 
336 #endif /* DHCPD_POOLS_H */
void prepare_memory(void)
Run time initialization.
Definition: dhcpd-pools.c:309
const char * ntop_ipaddr_v6(const union ipaddr_t *ip)
Definition: other.c:194
Definition: dhcpd-pools.h:145
int xstrstr_v4(const char *__restrict str) _DP_ATTRIBUTE_HOT _DP_ATTRIBUTE_PURE
int output_alarming(void)
Output alarm text, and return program exit value.
Definition: output.c:926
void __attribute__((__noreturn__))
A version printing.
Definition: other.c:430
prefix_t
Enumeration of interesting data in dhcpd.leases file, that has to be further examined, and saved.
Definition: dhcpd-pools.h:106
Definition: dhcpd-pools.h:169
union ipaddr_t first_ip
Definition: dhcpd-pools.h:132
double warn_count
Definition: dhcpd-pools.h:205
int comp_tcperc(struct range_t *r1, struct range_t *r2)
Compare two range_t by their touched and in use percentage.
Definition: sort.c:181
void do_counting(void)
Perform counting.
Definition: analyze.c:59
Definition: dhcpd-pools.h:170
double strtod_or_err(const char *__restrict str, const char *__restrict errmesg)
enum dhcp_version ip_version
Definition: dhcpd-pools.h:198
int comp_ip(struct range_t *r1, struct range_t *r2)
Compare two range_t by their first_ip.
Definition: sort.c:127
struct leases_t * leases
Definition: dhcpd-pools.c:65
double ret_percent(struct range_t r)
Percentage in use in range.
Definition: sort.c:190
double used
Definition: dhcpd-pools.h:123
char * name
Definition: dhcpd-pools.h:121
struct configuration_t config
Definition: dhcpd-pools.c:60
unsigned int reverse_order
Definition: dhcpd-pools.h:209
unsigned int backups_found
Definition: dhcpd-pools.h:209
#define _DP_ATTRIBUTE_PURE
Definition: dhcpd-pools.h:71
void copy_ipaddr_v6(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src)
Definition: other.c:165
int rangecomp(const void *__restrict r1, const void *__restrict r2) __attribute__((nonnull(1
int parse_ipaddr_v4(const char *restrict src, union ipaddr_t *restrict dst)
Definition: other.c:131
double warning
Definition: dhcpd-pools.h:203
unsigned char v6[16]
Definition: dhcpd-pools.h:92
Definition: dhcpd-pools.h:113
Definition: dhcpd-pools.h:98
An individual lease.
Definition: dhcpd-pools.h:159
#define _DP_ATTRIBUTE_HOT
Definition: dhcpd-pools.h:85
struct shared_network_t * shared_net
Definition: dhcpd-pools.h:131
Definition: dhcpd-pools.h:112
void mergesort_ranges(struct range_t *__restrict orig, int size, struct range_t *__restrict temp) __attribute__((nonnull(1
double touched
Definition: dhcpd-pools.h:135
#define _DP_ATTRIBUTE_CONST
Definition: dhcpd-pools.h:78
double backups
Definition: dhcpd-pools.h:125
void set_ipv_functions(int version)
Set function pointers depending on IP version.
Definition: other.c:62
double count
Definition: dhcpd-pools.h:134
void int(* output_analysis)(void)
Definition: dhcpd-pools.c:76
char * dhcpdlease_file
Definition: dhcpd-pools.h:200
int ipcomp_v4(const union ipaddr_t *restrict a, const union ipaddr_t *restrict b) _DP_ATTRIBUTE_PURE
Definition: sort.c:64
int(* comparer_t)(struct range_t *r1, struct range_t *r2)
Function pointer holding sort algorithm.
Definition: dhcpd-pools.h:184
int leasecomp_v6(const struct leases_t *restrict a, const struct leases_t *restrict b)
Definition: sort.c:98
double get_range_size_init(const struct range_t *r) _DP_ATTRIBUTE_CONST
unsigned int RANGES
Definition: dhcpd-pools.c:66
Linked list of sort functions.
Definition: dhcpd-pools.h:189
int comp_double(double f1, double f2) _DP_ATTRIBUTE_CONST
Compare two doubles.
Definition: sort.c:118
Memory space for a binary IP address saving.
Definition: dhcpd-pools.h:90
int xstrstr_v6(const char *__restrict str) _DP_ATTRIBUTE_HOT _DP_ATTRIBUTE_PURE
int leasecomp_v4(const struct leases_t *restrict a, const struct leases_t *restrict b)
Definition: sort.c:89
int output_txt(void)
Text output format, which is the default.
Definition: output.c:61
void int(* parse_ipaddr)(const char *restrict src, union ipaddr_t *restrict dst)
Definition: dhcpd-pools.c:69
unsigned int num_shared_networks
Definition: dhcpd-pools.c:62
int parse_leases(void)
Lease file parser.
Definition: getdata.c:62
double crit_count
Definition: dhcpd-pools.h:206
Definition: dhcpd-pools.h:111
void delete_lease(struct leases_t *lease)
Delete a lease from hash array.
Definition: hash.c:107
int output_csv(void)
Output cvs format.
Definition: output.c:784
const char * ntop_ipaddr_v4(const union ipaddr_t *ip)
Definition: other.c:185
Definition: dhcpd-pools.h:107
int comp_cur(struct range_t *r1, struct range_t *r2) _DP_ATTRIBUTE_PURE
Compare two range_t by their current usage.
Definition: sort.c:145
Definition: dhcpd-pools.h:153
uint32_t v4
Definition: dhcpd-pools.h:91
double touched
Definition: dhcpd-pools.h:124
struct shared_network_t * shared_networks
Definition: dhcpd-pools.c:61
char * dhcpdconf_file
Definition: dhcpd-pools.h:199
Definition: dhcpd-pools.h:109
Definition: dhcpd-pools.h:100
enum ltype type
Definition: dhcpd-pools.h:161
unsigned int print_mac_addreses
Definition: dhcpd-pools.h:209
int comparer_t field_selector(char c)
Sort field selector.
Definition: sort.c:220
void add_lease_v6(union ipaddr_t *ip, enum ltype type)
Definition: hash.c:69
limbits
Output limit bits: R_BIT ranges, S_BIT shared networks, A_BIT all.
Definition: dhcpd-pools.h:168
double backups
Definition: dhcpd-pools.h:136
void usage(int status) __attribute__((noreturn))
int(* ipcomp)(const union ipaddr_t *restrict a, const union ipaddr_t *restrict b)
Definition: dhcpd-pools.c:74
int(* leasecomp)(const struct leases_t *restrict a, const struct leases_t *restrict b)
Definition: dhcpd-pools.c:75
double(* get_range_size)(const struct range_t *r)
Definition: dhcpd-pools.c:72
Definition: dhcpd-pools.h:171
Counters for an individual range.
Definition: dhcpd-pools.h:130
double get_range_size_v6(const struct range_t *r) _DP_ATTRIBUTE_PURE
Definition: other.c:219
int comp_touched(struct range_t *r1, struct range_t *r2) _DP_ATTRIBUTE_PURE
Compare two range_t by their touched addresses.
Definition: sort.c:163
double minsize
Definition: dhcpd-pools.h:207
int parse_ipaddr_init(const char *restrict src, union ipaddr_t *restrict dst) _DP_ATTRIBUTE_CONST
Convert text string IP address from either IPv4 or IPv6 to an integer.
Definition: other.c:117
isc_conf_parser
Configuration file parsing state flags.
Definition: dhcpd-pools.h:141
int output_json(void)
The json output formats.
Definition: output.c:319
void add_lease_init(union ipaddr_t *ip, enum ltype type) _DP_ATTRIBUTE_CONST
int xstrstr_init(const char *__restrict str) _DP_ATTRIBUTE_CONST
void delete_all_leases(void)
Delete all leases from hash array.
Definition: hash.c:127
void clean_up(void)
Free memory, flush buffers etc.
Definition: other.c:403
char * ethernet
Definition: dhcpd-pools.h:162
int comp_tc(struct range_t *r1, struct range_t *r2) _DP_ATTRIBUTE_PURE
Compare two range_t by their touched and in use addresses.
Definition: sort.c:172
void void prepare_data(void)
Prepare data for analysis.
Definition: analyze.c:50
int ipcomp_init(const union ipaddr_t *restrict a, const union ipaddr_t *restrict b) _DP_ATTRIBUTE_CONST
int comp_max(struct range_t *r1, struct range_t *r2)
Compare two range_t by their capacity.
Definition: sort.c:136
void copy_ipaddr_init(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src) _DP_ATTRIBUTE_CONST
struct leases_t *(* find_lease)(union ipaddr_t *ip)
Definition: dhcpd-pools.c:78
struct leases_t * find_lease_v4(union ipaddr_t *ip) _DP_ATTRIBUTE_PURE
Definition: hash.c:89
void print_version(void) __attribute__((noreturn))
int ipcomp_v6(const union ipaddr_t *restrict a, const union ipaddr_t *restrict b) _DP_ATTRIBUTE_PURE
Definition: sort.c:73
int output_html(void)
Output html format.
Definition: output.c:596
double ret_tcperc(struct range_t r)
Return percentage of addresses touched and in use in range.
Definition: sort.c:208
Definition: dhcpd-pools.h:146
Definition: dhcpd-pools.h:99
Definition: dhcpd-pools.h:154
UT_hash_handle hh
Definition: dhcpd-pools.h:163
Definition: dhcpd-pools.h:114
unsigned int snet_alarms
Definition: dhcpd-pools.h:209
const char * ntop_ipaddr_init(const union ipaddr_t *ip) _DP_ATTRIBUTE_CONST
Definition: dhcpd-pools.h:115
Runtime configuration.
Definition: dhcpd-pools.h:196
Counters for an individual shared network.
Definition: dhcpd-pools.h:120
union ipaddr_t last_ip
Definition: dhcpd-pools.h:133
Definition: dhcpd-pools.h:143
unsigned int number_limit
Definition: dhcpd-pools.h:209
double available
Definition: dhcpd-pools.h:122
Definition: dhcpd-pools.h:144
Definition: dhcpd-pools.h:110
int prefix_length[2][NUM_OF_PREFIX]
Definition: dhcpd-pools.c:59
int output_xml(void)
The xml output formats.
Definition: output.c:216
double get_range_size_v4(const struct range_t *r) _DP_ATTRIBUTE_PURE
Definition: other.c:214
struct leases_t * find_lease_init(union ipaddr_t *ip) _DP_ATTRIBUTE_CONST
double critical
Definition: dhcpd-pools.h:204
ltype
Lease state types.
Definition: dhcpd-pools.h:151
void flip_ranges(struct range_t *__restrict ranges, struct range_t *__restrict tmp_ranges) __attribute__((nonnull(1
unsigned int num_ranges
Definition: dhcpd-pools.c:64
#define uint32_t
Definition: stdint.in.h:157
char * output_file
Definition: dhcpd-pools.h:202
struct range_t * ranges
Definition: dhcpd-pools.c:63
unsigned int header_limit
Definition: dhcpd-pools.h:209
comparer_t func
Definition: dhcpd-pools.h:190
int leasecomp_init(const struct leases_t *restrict a __attribute__((unused)), const struct leases_t *restrict b __attribute__((unused)))
Compare IP address in leases_t structure, with IPv4/v6 determination.
Definition: sort.c:83
struct leases_t * find_lease_v6(union ipaddr_t *ip) _DP_ATTRIBUTE_PURE
Definition: hash.c:97
Definition: dhcpd-pools.h:142
void copy_ipaddr_v4(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src)
Definition: other.c:160
union ipaddr_t ip
Definition: dhcpd-pools.h:160
int parse_ipaddr_v6(const char *restrict src, union ipaddr_t *restrict dst)
Definition: other.c:141
int(* xstrstr)(const char *__restrict str)
Definition: dhcpd-pools.c:73
#define restrict
Definition: config.h:1761
double ret_tc(struct range_t r) _DP_ATTRIBUTE_CONST
Touched and in use in range.
Definition: sort.c:199
int comp_percent(struct range_t *r1, struct range_t *r2)
Compare two range_t by their current usage percentage.
Definition: sort.c:154
dhcp_version
The IP version, IPv4 or IPv6, served by the dhcpd.
Definition: dhcpd-pools.h:97
void(* add_lease)(union ipaddr_t *ip, enum ltype type)
Definition: dhcpd-pools.c:77
void add_lease_v4(union ipaddr_t *ip, enum ltype type)
Definition: hash.c:58
struct output_sort * next
Definition: dhcpd-pools.h:191
struct output_sort * sorts
Definition: dhcpd-pools.h:201
void(* copy_ipaddr)(union ipaddr_t *restrict dst, const union ipaddr_t *restrict src)
Definition: dhcpd-pools.c:70
char dhcpv6
Definition: dhcpd-pools.h:197
void parse_config(int, const char *__restrict, struct shared_network_t *__restrict) __attribute__((nonnull(2
Definition: dhcpd-pools.h:108
Definition: dhcpd-pools.h:152