ISC DHCP  4.3.0
A reference DHCPv4 and DHCPv6 implementation
dhcpd.h
Go to the documentation of this file.
1 /* dhcpd.h
2 
3  Definitions for dhcpd... */
4 
5 /*
6  * Copyright (c) 2004-2014 by Internet Systems Consortium, Inc. ("ISC")
7  * Copyright (c) 1996-2003 by Internet Software Consortium
8  *
9  * Permission to use, copy, modify, and distribute this software for any
10  * purpose with or without fee is hereby granted, provided that the above
11  * copyright notice and this permission notice appear in all copies.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
14  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
16  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
19  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20  *
21  * Internet Systems Consortium, Inc.
22  * 950 Charter Street
23  * Redwood City, CA 94063
24  * <info@isc.org>
25  * https://www.isc.org/
26  *
27  */
28 
31 #include "config.h"
32 
33 #ifndef __CYGWIN32__
34 #include <sys/types.h>
35 #include <netinet/in.h>
36 #include <sys/socket.h>
37 #include <sys/un.h>
38 #include <arpa/inet.h>
39 #include <errno.h>
40 
41 #include <netdb.h>
42 #else
43 #define fd_set cygwin_fd_set
44 #include <sys/types.h>
45 #endif
46 #include <stddef.h>
47 #include <fcntl.h>
48 #include <stdio.h>
49 #include <unistd.h>
50 #include <string.h>
51 #include <stdlib.h>
52 #include <sys/stat.h>
53 #include <sys/mman.h>
54 #include <ctype.h>
55 #include <time.h>
56 
57 #include <net/if.h>
58 #undef FDDI
59 #include <net/route.h>
60 #include <net/if_arp.h>
61 #if HAVE_NET_IF_DL_H
62 # include <net/if_dl.h>
63 #endif
64 
65 #include <setjmp.h>
66 
67 #include "cdefs.h"
68 #include "osdep.h"
69 
70 #include "arpa/nameser.h"
71 
72 #include "minires.h"
73 
74 struct hash_table;
75 typedef struct hash_table group_hash_t;
76 typedef struct hash_table universe_hash_t;
79 typedef struct hash_table dns_zone_hash_t;
80 typedef struct hash_table lease_ip_hash_t;
81 typedef struct hash_table lease_id_hash_t;
82 typedef struct hash_table host_hash_t;
83 typedef struct hash_table class_hash_t;
84 
85 typedef time_t TIME;
86 
87 #ifndef EOL
88 #define EOL '\n'
89 #endif
90 
91 #include <omapip/isclib.h>
92 #include <omapip/result.h>
93 
94 #include "dhcp.h"
95 #include "dhcp6.h"
96 #include "statement.h"
97 #include "tree.h"
98 #include "inet.h"
99 #include "dhctoken.h"
100 
101 #include <omapip/omapip_p.h>
102 
103 #if defined(LDAP_CONFIGURATION)
104 # include <ldap.h>
105 # include <sys/utsname.h> /* for uname() */
106 #endif
107 
108 #if !defined (BYTE_NAME_HASH_SIZE)
109 # define BYTE_NAME_HASH_SIZE 401 /* Default would be ridiculous. */
110 #endif
111 #if !defined (BYTE_CODE_HASH_SIZE)
112 # define BYTE_CODE_HASH_SIZE 254 /* Default would be ridiculous. */
113 #endif
114 
115 /* Although it is highly improbable that a 16-bit option space might
116  * actually use 2^16 actual defined options, it is the worst case
117  * scenario we must prepare for. Having 4 options per bucket in this
118  * case is pretty reasonable.
119  */
120 #if !defined (WORD_NAME_HASH_SIZE)
121 # define WORD_NAME_HASH_SIZE 20479
122 #endif
123 #if !defined (WORD_CODE_HASH_SIZE)
124 # define WORD_CODE_HASH_SIZE 16384
125 #endif
126 
127 /* Not only is it improbable that the 32-bit spaces might actually use 2^32
128  * defined options, it is infeasible. It would be best for this kind of
129  * space to be dynamically sized. Instead we size it at the word hash's
130  * level.
131  */
132 #if !defined (QUAD_NAME_HASH_SIZE)
133 # define QUAD_NAME_HASH_SIZE WORD_NAME_HASH_SIZE
134 #endif
135 #if !defined (QUAD_CODE_HASH_SIZE)
136 # define QUAD_CODE_HASH_SIZE WORD_CODE_HASH_SIZE
137 #endif
138 
139 #if !defined (DNS_HASH_SIZE)
140 # define DNS_HASH_SIZE 0 /* Default. */
141 #endif
142 
143 /* Default size to use for name/code hashes on user-defined option spaces. */
144 #if !defined (DEFAULT_SPACE_HASH_SIZE)
145 # define DEFAULT_SPACE_HASH_SIZE 11
146 #endif
147 
148 #if !defined (NWIP_HASH_SIZE)
149 # define NWIP_HASH_SIZE 17 /* A really small table. */
150 #endif
151 
152 #if !defined (FQDN_HASH_SIZE)
153 # define FQDN_HASH_SIZE 13 /* A ridiculously small table. */
154 #endif
155 
156 /* I really doubt a given installation is going to have more than a few
157  * hundred vendors involved.
158  */
159 #if !defined (VIVCO_HASH_SIZE)
160 # define VIVCO_HASH_SIZE 127
161 #endif
162 
163 #if !defined (VIVSO_HASH_SIZE)
164 # define VIVSO_HASH_SIZE VIVCO_HASH_SIZE
165 #endif
166 
167 #if !defined (VSIO_HASH_SIZE)
168 # define VSIO_HASH_SIZE VIVCO_HASH_SIZE
169 #endif
170 
171 #if !defined (VIV_ISC_HASH_SIZE)
172 # define VIV_ISC_HASH_SIZE 3 /* An incredulously small table. */
173 #endif
174 
175 #if !defined (UNIVERSE_HASH_SIZE)
176 # define UNIVERSE_HASH_SIZE 13 /* A really small table. */
177 #endif
178 
179 #if !defined (GROUP_HASH_SIZE)
180 # define GROUP_HASH_SIZE 0 /* Default. */
181 #endif
182 
183 /* At least one person has indicated they use ~20k host records.
184  */
185 #if !defined (HOST_HASH_SIZE)
186 # define HOST_HASH_SIZE 22501
187 #endif
188 
189 /* We have user reports of use of ISC DHCP numbering leases in the 200k's.
190  *
191  * We also have reports of folks using 10.0/8 as a dynamic range. The
192  * following is something of a compromise between the two. At the ~2-3
193  * hundred thousand leases, there's ~2-3 leases to search in each bucket.
194  */
195 #if !defined (LEASE_HASH_SIZE)
196 # define LEASE_HASH_SIZE 100003
197 #endif
198 
199 /* It is not known what the worst case subclass hash size is. We estimate
200  * high, I think.
201  */
202 #if !defined (SCLASS_HASH_SIZE)
203 # define SCLASS_HASH_SIZE 12007
204 #endif
205 
206 #if !defined (AGENT_HASH_SIZE)
207 # define AGENT_HASH_SIZE 11 /* A really small table. */
208 #endif
209 
210 /* The server hash size is used for both names and codes. There aren't
211  * many (roughly 50 at the moment), so we use a smaller table. If we
212  * use a 1:1 table size, then we get name collisions due to poor name
213  * hashing. So we use double the space we need, which drastically
214  * reduces collisions.
215  */
216 #if !defined (SERVER_HASH_SIZE)
217 # define SERVER_HASH_SIZE (2*(sizeof(server_options) / sizeof(struct option)))
218 #endif
219 
220 
221 /* How many options are likely to appear in a single packet? */
222 #if !defined (OPTION_HASH_SIZE)
223 # define OPTION_HASH_SIZE 17
224 # define OPTION_HASH_PTWO 32 /* Next power of two above option hash. */
225 # define OPTION_HASH_EXP 5 /* The exponent for that power of two. */
226 #endif
227 
228 #define compute_option_hash(x) \
229  (((x) & (OPTION_HASH_PTWO - 1)) + \
230  (((x) >> OPTION_HASH_EXP) & \
231  (OPTION_HASH_PTWO - 1))) % OPTION_HASH_SIZE;
232 
239 };
240 
241 /* Client FQDN option, failover FQDN option, etc. */
242 typedef struct {
243  u_int8_t codes [2];
244  unsigned length;
245  u_int8_t *data;
246 } ddns_fqdn_t;
247 
248 #include "failover.h"
249 
250 /* A parsing context. */
251 
252 struct parse {
253  int lexline;
254  int lexchar;
255  char *token_line;
256  char *prev_line;
257  char *cur_line;
258  const char *tlname;
260 
261  /*
262  * In order to give nice output when we have a parsing error
263  * in our file, we keep track of where we are in the line so
264  * that we can show the user.
265  *
266  * We need to keep track of two lines, because we can look
267  * ahead, via the "peek" function, to the next line sometimes.
268  *
269  * The "line1" and "line2" variables act as buffers for this
270  * information. The "lpos" variable tells us where we are in the
271  * line.
272  *
273  * When we "put back" a character from the parsing context, we
274  * do not want to have the character appear twice in the error
275  * output. So, we set a flag, the "ugflag", which the
276  * get_char() function uses to check for this condition.
277  */
278  char line1 [81];
279  char line2 [81];
280  int lpos;
281  int line;
282  int tlpos;
283  int tline;
284  enum dhcp_token token;
285  int ugflag;
286  char *tval;
287  int tlen;
288  char tokbuf [1500];
289 
291  int file;
292  char *inbuf;
293  size_t bufix, buflen;
294  size_t bufsiz;
295 
297 
298 #if defined(LDAP_CONFIGURATION)
299  /*
300  * LDAP configuration uses a call-back to iteratively read config
301  * off of the LDAP repository.
302  * XXX: The token stream can not be rewound reliably, so this must
303  * be addressed for DHCPv6 support.
304  */
305  int (*read_function)(struct parse *);
306 #endif
307 };
308 
309 /* Variable-length array of data. */
310 
311 struct string_list {
312  struct string_list *next;
313  char string [1];
314 };
315 
316 /* A name server, from /etc/resolv.conf. */
317 struct name_server {
318  struct name_server *next;
319  struct sockaddr_in addr;
321 };
322 
323 /* A domain search list element. */
326  char *domain;
328 };
329 
330 /* Option tag structures are used to build chains of option tags, for
331  when we're sure we're not going to have enough of them to justify
332  maintaining an array. */
333 
334 struct option_tag {
335  struct option_tag *next;
336  u_int8_t data [1];
337 };
338 
339 /* An agent option structure. We need a special structure for the
340  Relay Agent Information option because if more than one appears in
341  a message, we have to keep them separate. */
342 
345  int length;
346  struct option_tag *first;
347 };
348 
349 struct option_cache {
350  int refcnt;
353  struct option *option;
355 
356  #define OPTION_HAD_NULLS 0x00000001
357  u_int32_t flags;
358 };
359 
360 struct option_state {
361  int refcnt;
365  void *universes [1];
366 };
367 
368 /* A dhcp packet and the pointers to its option values. */
369 struct packet {
370  struct dhcp_packet *raw;
371  int refcnt;
372  unsigned packet_length;
374 
375  unsigned char dhcpv6_msg_type; /* DHCPv6 message type */
376 
377  /* DHCPv6 transaction ID */
378  unsigned char dhcpv6_transaction_id[3];
379 
380  /* DHCPv6 relay information */
381  unsigned char dhcpv6_hop_count;
382  struct in6_addr dhcpv6_link_address;
383  struct in6_addr dhcpv6_peer_address;
384 
385  /* DHCPv6 packet containing this one, or NULL if none */
387 
390  struct iaddr client_addr;
391  struct interface_info *interface; /* Interface on which packet
392  was received. */
393  struct hardware *haddr; /* Physical link address
394  of local sender (maybe gateway). */
395 
396  /* Information for relay agent options (see
397  draft-ietf-dhc-agent-options-xx.txt). */
398  u_int8_t *circuit_id; /* Circuit ID of client connection. */
400  u_int8_t *remote_id; /* Remote ID of client. */
402 
403  int got_requested_address; /* True if client sent the
404  dhcp-requested-address option. */
405 
408 
409 #if !defined (PACKET_MAX_CLASSES)
410 # define PACKET_MAX_CLASSES 5
411 #endif
413  struct class *classes [PACKET_MAX_CLASSES];
414 
415  int known;
417 
418  /* If we stash agent options onto the packet option state, to pretend
419  * options we got in a previous exchange were still there, we need
420  * to signal this in a reliable way.
421  */
422  isc_boolean_t agent_options_stashed;
423 
424  /*
425  * ISC_TRUE if packet received unicast (as opposed to multicast).
426  * Only used in DHCPv6.
427  */
428  isc_boolean_t unicast;
429 };
430 
431 /*
432  * A network interface's MAC address.
433  * 20 bytes for the hardware address
434  * and 1 byte for the type tag
435  */
436 
437 #define HARDWARE_ADDR_LEN 20
438 
439 struct hardware {
440  u_int8_t hlen;
441  u_int8_t hbuf[HARDWARE_ADDR_LEN + 1];
442 };
443 
444 #if defined(LDAP_CONFIGURATION)
445 # define LDAP_BUFFER_SIZE 8192
446 # define LDAP_METHOD_STATIC 0
447 # define LDAP_METHOD_DYNAMIC 1
448 #if defined (LDAP_USE_SSL)
449 # define LDAP_SSL_OFF 0
450 # define LDAP_SSL_ON 1
451 # define LDAP_SSL_TLS 2
452 # define LDAP_SSL_LDAPS 3
453 #endif
454 
455 /* This is a tree of the current configuration we are building from LDAP */
456 struct ldap_config_stack {
457  LDAPMessage * res; /* Pointer returned from ldap_search */
458  LDAPMessage * ldent; /* Current item in LDAP that we're processing.
459  in res */
460  int close_brace; /* Put a closing } after we're through with
461  this item */
462  int processed; /* We set this flag if this base item has been
463  processed. After this base item is processed,
464  we can start processing the children */
465  struct ldap_config_stack *children;
466  struct ldap_config_stack *next;
467 };
468 #endif
469 
470 typedef enum {
477 
478 typedef struct {
482 
483 /* Lease states: */
484 #define FTS_FREE 1
485 #define FTS_ACTIVE 2
486 #define FTS_EXPIRED 3
487 #define FTS_RELEASED 4
488 #define FTS_ABANDONED 5
489 #define FTS_RESET 6
490 #define FTS_BACKUP 7
491 typedef u_int8_t binding_state_t;
492 
493 /* FTS_LAST is the highest value that is valid for a lease binding state. */
494 #define FTS_LAST FTS_BACKUP
495 
496 /*
497  * A block for the on statements so we can share the structure
498  * between v4 and v6
499  */
500 struct on_star {
504 };
505 
506 /* A dhcp lease declaration structure. */
507 struct lease {
509  struct lease *next;
510  struct lease *n_uid, *n_hw;
511 
512  struct iaddr ip_addr;
513  TIME starts, ends, sort_time;
516  struct host_decl *host;
517  struct subnet *subnet;
518  struct pool *pool;
521 
522  /* insert the structure directly */
523  struct on_star on_star;
524 
525  unsigned char *uid;
526  unsigned short uid_len;
527  unsigned short uid_max;
528  unsigned char uid_buf [7];
529  struct hardware hardware_addr;
530 
531  u_int8_t flags;
532 # define STATIC_LEASE 1
533 # define BOOTP_LEASE 2
534 # define RESERVED_LEASE 4
535 # define MS_NULL_TERMINATION 8
536 # define ON_UPDATE_QUEUE 16
537 # define ON_ACK_QUEUE 32
538 # define ON_QUEUE (ON_UPDATE_QUEUE | ON_ACK_QUEUE)
539 # define UNICAST_BROADCAST_HACK 64
540 # define ON_DEFERRED_QUEUE 128
541 
542 /* Persistent flags are to be preserved on a given lease structure. */
543 # define PERSISTENT_FLAGS (ON_ACK_QUEUE | ON_UPDATE_QUEUE)
544 /* Ephemeral flags are to be preserved on a given lease (copied etc). */
545 # define EPHEMERAL_FLAGS (MS_NULL_TERMINATION | \
546  UNICAST_BROADCAST_HACK | \
547  RESERVED_LEASE | \
548  BOOTP_LEASE)
549 
550  /*
551  * The lease's binding state is its current state. The next binding
552  * state is the next state this lease will move into by expiration,
553  * or timers in general. The desired binding state is used on lease
554  * updates; the caller is attempting to move the lease to the desired
555  * binding state (and this may either succeed or fail, so the binding
556  * state must be preserved).
557  *
558  * The 'rewind' binding state is used in failover processing. It
559  * is used for an optimization when out of communications; it allows
560  * the server to "rewind" a lease to the previous state acknowledged
561  * by the peer, and progress forward from that point.
562  */
567 
569 
570  /*
571  * 'tsfp' is more of an 'effective' tsfp. It may be calculated from
572  * stos+mclt for example if it's an expired lease and the server is
573  * in partner-down state. 'atsfp' is zeroed whenever a lease is
574  * updated - and only set when the peer acknowledges it. This
575  * ensures every state change is transmitted.
576  */
577  TIME tstp; /* Time sent to partner. */
578  TIME tsfp; /* Time sent from partner. */
579  TIME atsfp; /* Actual time sent from partner. */
580  TIME cltt; /* Client last transaction time. */
581  u_int32_t last_xid; /* XID we sent in this lease's BNDUPD */
583 
584  /*
585  * A pointer to the state of the ddns update for this lease.
586  * It should be set while the update is in progress and cleared
587  * when the update finishes. It can be used to cancel the
588  * update if we want to do a different update.
589  */
591 };
592 
593 struct lease_state {
594  struct lease_state *next;
595 
597 
598  struct packet *packet; /* The incoming packet. */
599 
601 
603  struct data_string parameter_request_list;
605  unsigned char expiry[4], renewal[4], rebind[4];
606  struct data_string filename, server_name;
609  struct shared_network *shared_network; /* Shared network of interface
610  on which request arrived. */
611 
612  u_int32_t xid;
613  u_int16_t secs;
614  u_int16_t bootp_flags;
615  struct in_addr ciaddr;
616  struct in_addr siaddr;
617  struct in_addr giaddr;
618  u_int8_t hops;
619  u_int8_t offer;
620  struct iaddr from;
621 };
622 
623 #define ROOT_GROUP 0
624 #define HOST_DECL 1
625 #define SHARED_NET_DECL 2
626 #define SUBNET_DECL 3
627 #define CLASS_DECL 4
628 #define GROUP_DECL 5
629 #define POOL_DECL 6
630 
631 /* Possible modes in which discover_interfaces can run. */
632 
633 #define DISCOVER_RUNNING 0
634 #define DISCOVER_SERVER 1
635 #define DISCOVER_UNCONFIGURED 2
636 #define DISCOVER_RELAY 3
637 #define DISCOVER_REQUESTED 4
638 
639 /* DDNS_UPDATE_STYLE enumerations. */
640 #define DDNS_UPDATE_STYLE_NONE 0
641 #define DDNS_UPDATE_STYLE_AD_HOC 1
642 #define DDNS_UPDATE_STYLE_INTERIM 2
643 #define DDNS_UPDATE_STYLE_STANDARD 3
644 
645 /* Server option names. */
646 
647 #define SV_DEFAULT_LEASE_TIME 1
648 #define SV_MAX_LEASE_TIME 2
649 #define SV_MIN_LEASE_TIME 3
650 #define SV_BOOTP_LEASE_CUTOFF 4
651 #define SV_BOOTP_LEASE_LENGTH 5
652 #define SV_BOOT_UNKNOWN_CLIENTS 6
653 #define SV_DYNAMIC_BOOTP 7
654 #define SV_ALLOW_BOOTP 8
655 #define SV_ALLOW_BOOTING 9
656 #define SV_ONE_LEASE_PER_CLIENT 10
657 #define SV_GET_LEASE_HOSTNAMES 11
658 #define SV_USE_HOST_DECL_NAMES 12
659 #define SV_USE_LEASE_ADDR_FOR_DEFAULT_ROUTE 13
660 #define SV_MIN_SECS 14
661 #define SV_FILENAME 15
662 #define SV_SERVER_NAME 16
663 #define SV_NEXT_SERVER 17
664 #define SV_AUTHORITATIVE 18
665 #define SV_VENDOR_OPTION_SPACE 19
666 #define SV_ALWAYS_REPLY_RFC1048 20
667 #define SV_SITE_OPTION_SPACE 21
668 #define SV_ALWAYS_BROADCAST 22
669 #define SV_DDNS_DOMAIN_NAME 23
670 #define SV_DDNS_HOST_NAME 24
671 #define SV_DDNS_REV_DOMAIN_NAME 25
672 #define SV_LEASE_FILE_NAME 26
673 #define SV_PID_FILE_NAME 27
674 #define SV_DUPLICATES 28
675 #define SV_DECLINES 29
676 #define SV_DDNS_UPDATES 30
677 #define SV_OMAPI_PORT 31
678 #define SV_LOCAL_PORT 32
679 #define SV_LIMITED_BROADCAST_ADDRESS 33
680 #define SV_REMOTE_PORT 34
681 #define SV_LOCAL_ADDRESS 35
682 #define SV_OMAPI_KEY 36
683 #define SV_STASH_AGENT_OPTIONS 37
684 #define SV_DDNS_TTL 38
685 #define SV_DDNS_UPDATE_STYLE 39
686 #define SV_CLIENT_UPDATES 40
687 #define SV_UPDATE_OPTIMIZATION 41
688 #define SV_PING_CHECKS 42
689 #define SV_UPDATE_STATIC_LEASES 43
690 #define SV_LOG_FACILITY 44
691 #define SV_DO_FORWARD_UPDATES 45
692 #define SV_PING_TIMEOUT 46
693 #define SV_RESERVE_INFINITE 47
694 #define SV_DDNS_CONFLICT_DETECT 48
695 #define SV_LEASEQUERY 49
696 #define SV_ADAPTIVE_LEASE_TIME_THRESHOLD 50
697 #define SV_DO_REVERSE_UPDATES 51
698 #define SV_FQDN_REPLY 52
699 #define SV_PREFER_LIFETIME 53
700 #define SV_DHCPV6_LEASE_FILE_NAME 54
701 #define SV_DHCPV6_PID_FILE_NAME 55
702 #define SV_LIMIT_ADDRS_PER_IA 56
703 #define SV_LIMIT_PREFS_PER_IA 57
704 #define SV_DELAYED_ACK 58
705 #define SV_MAX_ACK_DELAY 59
706 #if defined(LDAP_CONFIGURATION)
707 # define SV_LDAP_SERVER 60
708 # define SV_LDAP_PORT 61
709 # define SV_LDAP_USERNAME 62
710 # define SV_LDAP_PASSWORD 63
711 # define SV_LDAP_BASE_DN 64
712 # define SV_LDAP_METHOD 65
713 # define SV_LDAP_DEBUG_FILE 66
714 # define SV_LDAP_DHCP_SERVER_CN 67
715 # define SV_LDAP_REFERRALS 68
716 #if defined (LDAP_USE_SSL)
717 # define SV_LDAP_SSL 69
718 # define SV_LDAP_TLS_REQCERT 70
719 # define SV_LDAP_TLS_CA_FILE 71
720 # define SV_LDAP_TLS_CA_DIR 72
721 # define SV_LDAP_TLS_CERT 73
722 # define SV_LDAP_TLS_KEY 74
723 # define SV_LDAP_TLS_CRLCHECK 75
724 # define SV_LDAP_TLS_CIPHERS 76
725 # define SV_LDAP_TLS_RANDFILE 77
726 #endif
727 #endif
728 #define SV_CACHE_THRESHOLD 78
729 #define SV_DONT_USE_FSYNC 79
730 #define SV_DDNS_LOCAL_ADDRESS4 80
731 #define SV_DDNS_LOCAL_ADDRESS6 81
732 #define SV_IGNORE_CLIENT_UIDS 82
733 
734 #if !defined (DEFAULT_PING_TIMEOUT)
735 # define DEFAULT_PING_TIMEOUT 1
736 #endif
737 
738 #if !defined (DEFAULT_DELAYED_ACK)
739 # define DEFAULT_DELAYED_ACK 28 /* default SO_SNDBUF size / 576 bytes */
740 #endif
741 
742 #if !defined (DEFAULT_ACK_DELAY_SECS)
743 # define DEFAULT_ACK_DELAY_SECS 0
744 #endif
745 
746 #if !defined (DEFAULT_ACK_DELAY_USECS)
747 # define DEFAULT_ACK_DELAY_USECS 250000 /* 1/4 of a second */
748 #endif
749 
750 #if !defined (DEFAULT_MIN_ACK_DELAY_USECS)
751 # define DEFAULT_MIN_ACK_DELAY_USECS 10000 /* 1/100 second */
752 #endif
753 
754 #if !defined (DEFAULT_CACHE_THRESHOLD)
755 # define DEFAULT_CACHE_THRESHOLD 25
756 #endif
757 
758 #if !defined (DEFAULT_DEFAULT_LEASE_TIME)
759 # define DEFAULT_DEFAULT_LEASE_TIME 43200
760 #endif
761 
762 #if !defined (DEFAULT_MIN_LEASE_TIME)
763 # define DEFAULT_MIN_LEASE_TIME 300
764 #endif
765 
766 #if !defined (DEFAULT_MAX_LEASE_TIME)
767 # define DEFAULT_MAX_LEASE_TIME 86400
768 #endif
769 
770 #if !defined (DEFAULT_DDNS_TTL)
771 # define DEFAULT_DDNS_TTL 3600
772 #endif
773 #if !defined (MAX_DEFAULT_DDNS_TTL)
774 # define MAX_DEFAULT_DDNS_TTL 3600
775 #endif
776 
777 #if !defined (MIN_LEASE_WRITE)
778 # define MIN_LEASE_WRITE 15
779 #endif
780 
781 /* Client option names */
782 
783 #define CL_TIMEOUT 1
784 #define CL_SELECT_INTERVAL 2
785 #define CL_REBOOT_TIMEOUT 3
786 #define CL_RETRY_INTERVAL 4
787 #define CL_BACKOFF_CUTOFF 5
788 #define CL_INITIAL_INTERVAL 6
789 #define CL_BOOTP_POLICY 7
790 #define CL_SCRIPT_NAME 8
791 #define CL_REQUESTED_OPTIONS 9
792 #define CL_REQUESTED_LEASE_TIME 10
793 #define CL_SEND_OPTIONS 11
794 #define CL_MEDIA 12
795 #define CL_REJECT_LIST 13
796 
797 #ifndef CL_DEFAULT_TIMEOUT
798 # define CL_DEFAULT_TIMEOUT 60
799 #endif
800 
801 #ifndef CL_DEFAULT_SELECT_INTERVAL
802 # define CL_DEFAULT_SELECT_INTERVAL 0
803 #endif
804 
805 #ifndef CL_DEFAULT_REBOOT_TIMEOUT
806 # define CL_DEFAULT_REBOOT_TIMEOUT 10
807 #endif
808 
809 #ifndef CL_DEFAULT_RETRY_INTERVAL
810 # define CL_DEFAULT_RETRY_INTERVAL 300
811 #endif
812 
813 #ifndef CL_DEFAULT_BACKOFF_CUTOFF
814 # define CL_DEFAULT_BACKOFF_CUTOFF 120
815 #endif
816 
817 #ifndef CL_DEFAULT_INITIAL_INTERVAL
818 # define CL_DEFAULT_INITIAL_INTERVAL 10
819 #endif
820 
821 #ifndef CL_DEFAULT_BOOTP_POLICY
822 # define CL_DEFAULT_BOOTP_POLICY P_ACCEPT
823 #endif
824 
825 #ifndef CL_DEFAULT_REQUESTED_OPTIONS
826 # define CL_DEFAULT_REQUESTED_OPTIONS \
827  { DHO_SUBNET_MASK, \
828  DHO_BROADCAST_ADDRESS, \
829  DHO_TIME_OFFSET, \
830  DHO_ROUTERS, \
831  DHO_DOMAIN_NAME, \
832  DHO_DOMAIN_NAME_SERVERS, \
833  DHO_HOST_NAME }
834 #endif
835 
836 struct group_object {
838 
840  struct group *group;
841  char *name;
842  int flags;
843 #define GROUP_OBJECT_DELETED 1
844 #define GROUP_OBJECT_DYNAMIC 2
845 #define GROUP_OBJECT_STATIC 4
846 };
847 
848 /* Group of declarations that share common parameters. */
849 struct group {
850  struct group *next;
851 
852  int refcnt;
854  struct subnet *subnet;
858 };
859 
860 /* A dhcp host declaration structure. */
861 struct host_decl {
865  char *name;
866  struct hardware interface;
867  struct data_string client_identifier;
869  struct data_string host_id;
870  /* XXXSK: fixed_addr should be an array of iaddr values,
871  not an option_cache, but it's referenced in a lot of
872  places, so we'll leave it for now. */
875  struct group *group;
877  struct data_string auth_key_id;
878  int flags;
879 #define HOST_DECL_DELETED 1
880 #define HOST_DECL_DYNAMIC 2
881 #define HOST_DECL_STATIC 4
882  /* For v6 the host-identifer option can specify which relay
883  to use when trying to look up an option. We store the
884  value here. */
885  int relays;
886 };
887 
888 struct permit {
889  struct permit *next;
890  enum {
899  } type;
900  struct class *class;
901  TIME after; /* date after which this clause applies */
902 };
903 
904 struct pool {
906  struct pool *next;
907  struct group *group;
911  struct lease *active;
912  struct lease *expired;
913  struct lease *free;
914  struct lease *backup;
915  struct lease *abandoned;
916  struct lease *reserved;
921  int index;
922  TIME valid_from; /* deny pool use before this date */
923  TIME valid_until; /* deny pool use after this date */
924 
925 #if defined (FAILOVER_PROTOCOL)
926  dhcp_failover_state_t *failover_peer;
927 #endif
928 };
929 
933  char *name;
934 
935 #define SHARED_IMPLICIT 1 /* This network was synthesized. */
936  int flags;
937 
938  struct subnet *subnets;
940  struct pool *pools;
942  struct group *group;
943 #if defined (FAILOVER_PROTOCOL)
944  dhcp_failover_state_t *failover_peer;
945 #endif
946 };
947 
948 struct subnet {
954  struct iaddr interface_address;
955  struct iaddr net;
956  struct iaddr netmask;
957  int prefix_len; /* XXX: currently for IPv6 only */
958  struct group *group;
959 };
960 
961 struct collection {
962  struct collection *next;
963 
964  const char *name;
965  struct class *classes;
966 };
967 
968 /* Used as an argument to parse_clasS_decl() */
969 #define CLASS_TYPE_VENDOR 0
970 #define CLASS_TYPE_USER 1
971 #define CLASS_TYPE_CLASS 2
972 #define CLASS_TYPE_SUBCLASS 3
973 
974 /* XXX classes must be reference-counted. */
975 struct class {
977  struct class *nic; /* Next in collection. */
978  struct class *superclass; /* Set for spawned classes only. */
979  char *name; /* Not set for spawned classes. */
980 
981  /* A class may be configured to permit a limited number of leases. */
985 
986  /* If nonzero, class has not been saved since it was last
987  modified. */
988  int dirty;
989 
990  /* Hash table containing subclasses. */
992  struct data_string hash_string;
993 
994  /* Expression used to match class. */
995  struct expression *expr;
996 
997  /* Expression used to compute subclass identifiers for spawning
998  and to do subclass matching. */
1001 
1002  struct group *group;
1003 
1004  /* Statements to execute if class matches. */
1006 
1007 #define CLASS_DECL_DELETED 1
1008 #define CLASS_DECL_DYNAMIC 2
1009 #define CLASS_DECL_STATIC 4
1010 #define CLASS_DECL_SUBCLASS 8
1011 
1012  int flags;
1013 };
1014 
1015 /* DHCP client lease structure... */
1017  struct client_lease *next; /* Next lease in list. */
1018  TIME expiry, renewal, rebind; /* Lease timeouts. */
1019  struct iaddr address; /* Address being leased. */
1020  char *server_name; /* Name of boot server. */
1021  char *filename; /* Name of file we're supposed to boot. */
1022  struct string_list *medium; /* Network medium. */
1023  struct auth_key *key; /* Key used in basic DHCP authentication. */
1024 
1025  unsigned int is_static : 1; /* If set, lease is from config file. */
1026  unsigned int is_bootp: 1; /* If set, lease was acquired with BOOTP. */
1027 
1028  struct option_state *options; /* Options supplied with lease. */
1029 };
1030 
1031 /* DHCPv6 lease structures */
1032 struct dhc6_addr {
1033  struct dhc6_addr *next;
1034  struct iaddr address;
1035  u_int8_t plen;
1036 
1037  /* Address state flags. */
1038  #define DHC6_ADDR_DEPREFFED 0x01
1039  #define DHC6_ADDR_EXPIRED 0x02
1040  u_int8_t flags;
1041 
1043  u_int32_t preferred_life;
1044  u_int32_t max_life;
1045 
1047 };
1048 
1049 struct dhc6_ia {
1050  struct dhc6_ia *next;
1051  unsigned char iaid[4];
1052  u_int16_t ia_type;
1053 
1055  u_int32_t renew;
1056  u_int32_t rebind;
1057  struct dhc6_addr *addrs;
1058 
1060 };
1061 
1062 struct dhc6_lease {
1063  struct dhc6_lease *next;
1064  struct data_string server_id;
1065 
1066  isc_boolean_t released;
1067  int score;
1068  u_int8_t pref;
1069 
1070  unsigned char dhcpv6_transaction_id[3];
1072 
1074 };
1075 
1076 /* Possible states in which the client can be. */
1079  S_INIT = 2,
1082  S_BOUND = 5,
1087 };
1088 
1089 /* Authentication and BOOTP policy possibilities (not all values work
1090  for each). */
1092 
1093 /* Configuration information from the config file... */
1095  /*
1096  * When a message has been received, run these statements
1097  * over it.
1098  */
1100 
1101  /*
1102  * When a message is sent, run these statements.
1103  */
1105 
1106  struct option **required_options; /* Options that MUST be present. */
1107  struct option **requested_options; /* Options to request (ORO/PRL). */
1108 
1109  TIME timeout; /* Start to panic if we don't get a
1110  lease in this time period when
1111  SELECTING. */
1112  TIME initial_delay; /* Set initial delay before first
1113  transmission. */
1114  TIME initial_interval; /* All exponential backoff intervals
1115  start here. */
1116  TIME retry_interval; /* If the protocol failed to produce
1117  an address before the timeout,
1118  try the protocol again after this
1119  many seconds. */
1120  TIME select_interval; /* Wait this many seconds from the
1121  first DHCPDISCOVER before
1122  picking an offered lease. */
1123  TIME reboot_timeout; /* When in INIT-REBOOT, wait this
1124  long before giving up and going
1125  to INIT. */
1126  TIME backoff_cutoff; /* When doing exponential backoff,
1127  never back off to an interval
1128  longer than this amount. */
1129  u_int32_t requested_lease; /* Requested lease time, if user
1130  doesn't configure one. */
1131  struct string_list *media; /* Possible network media values. */
1132  char *script_name; /* Name of config script. */
1133  char *vendor_space_name; /* Name of config script. */
1134  enum policy bootp_policy;
1135  /* Ignore, accept or prefer BOOTP
1136  responses. */
1137  enum policy auth_policy;
1138  /* Require authentication, prefer
1139  authentication, or don't try to
1140  authenticate. */
1141  struct string_list *medium; /* Current network medium. */
1142 
1143  struct iaddrmatchlist *reject_list; /* Servers to reject. */
1144 
1145  int omapi_port; /* port on which to accept OMAPI
1146  connections, or -1 for no
1147  listener. */
1148  int do_forward_update; /* If nonzero, and if we have the
1149  information we need, update the
1150  A record for the address we get. */
1151 
1152  int bootp_broadcast_always; /* If nonzero, always set the BOOTP_BROADCAST
1153  flag in requests */
1154 };
1155 
1156 /* Per-interface state used in the dhcp client... */
1157 /* XXX: consider union {}'ing this for v4/v6. */
1161  char *name;
1162 
1163  /* Common values. */
1164  struct client_config *config; /* Client configuration. */
1165  struct string_list *env; /* Client script environment. */
1166  int envc; /* Number of entries in environment. */
1167  struct option_state *sent_options; /* Options we sent. */
1168  enum dhcp_state state; /* Current state for this interface. */
1169  TIME last_write; /* Last time this state was written. */
1170 
1171  /* DHCPv4 values. */
1172  struct client_lease *active; /* Currently active lease. */
1173  struct client_lease *new; /* New lease. */
1174  struct client_lease *offered_leases; /* Leases offered to us. */
1175  struct client_lease *leases; /* Leases we currently hold. */
1176  struct client_lease *alias; /* Alias lease. */
1177 
1178  struct iaddr destination; /* Where to send packet. */
1179  u_int32_t xid; /* Transaction ID. */
1180  u_int16_t secs; /* secs value from DHCPDISCOVER. */
1181  TIME first_sending; /* When was first copy sent? */
1182  TIME interval; /* What's the current resend interval? */
1183  struct string_list *medium; /* Last media type tried. */
1184  struct dhcp_packet packet; /* Outgoing DHCP packet. */
1185  unsigned packet_length; /* Actual length of generated packet. */
1186 
1187  struct iaddr requested_address; /* Address we would like to get. */
1188 
1189  /* DHCPv6 values. */
1190  unsigned char dhcpv6_transaction_id[3];
1191  u_int8_t refresh_type;
1192 
1198 
1199  struct timeval start_time;
1200  u_int16_t elapsed;
1201  int txcount;
1202 
1203  /* See RFC3315 section 14. */
1204  TIME RT; /* In hundredths of seconds. */
1205  TIME IRT; /* In hundredths of seconds. */
1206  TIME MRC; /* Count. */
1207  TIME MRT; /* In hundredths of seconds. */
1208  TIME MRD; /* In seconds, relative. */
1209  TIME next_MRD; /* In seconds, absolute. */
1210 
1211  /* Rather than a state, we use a function that shifts around
1212  * depending what stage of life the v6 state machine is in.
1213  * This is where incoming packets are dispatched to (sometimes
1214  * a no-op).
1215  */
1216  void (*v6_handler)(struct packet *, struct client_state *);
1217 
1218  /*
1219  * A pointer to the state of the ddns update for this lease.
1220  * It should be set while the update is in progress and cleared
1221  * when the update finishes. It can be used to cancel the
1222  * update if we want to do a different update.
1223  */
1225 };
1226 
1229  const char *prefix;
1230 };
1231 
1234  struct iaddr address;
1236 };
1237 
1238 /* Information about each network interface. */
1239 
1242  struct interface_info *next; /* Next interface in list... */
1244  /* Networks connected to this interface. */
1245  struct hardware hw_address; /* Its physical address. */
1246  u_int8_t bcast_addr[20]; /* Infiniband broadcast address */
1247  struct in_addr *addresses; /* Addresses associated with this
1248  * interface.
1249  */
1250  int address_count; /* Number of addresses stored. */
1251  int address_max; /* Size of addresses buffer. */
1252  struct in6_addr *v6addresses; /* IPv6 addresses associated with
1253  this interface. */
1254  int v6address_count; /* Number of IPv6 addresses associated
1255  with this interface. */
1256  int v6address_max; /* Maximum number of IPv6 addresses
1257  we can store in current buffer. */
1258 
1259  u_int8_t *circuit_id; /* Circuit ID associated with this
1260  interface. */
1261  unsigned circuit_id_len; /* Length of Circuit ID, if there
1262  is one. */
1263  u_int8_t *remote_id; /* Remote ID associated with this
1264  interface (if any). */
1265  unsigned remote_id_len; /* Length of Remote ID. */
1266 
1267  char name [IFNAMSIZ]; /* Its name... */
1268  int index; /* Its if_nametoindex(). */
1269  int rfdesc; /* Its read file descriptor. */
1270  int wfdesc; /* Its write file descriptor, if
1271  different. */
1272  unsigned char *rbuf; /* Read buffer, if required. */
1273  unsigned int rbuf_max; /* Size of read buffer. */
1274  size_t rbuf_offset; /* Current offset into buffer. */
1275  size_t rbuf_len; /* Length of data in buffer. */
1276 
1277  struct ifreq *ifp; /* Pointer to ifreq struct. */
1278  int configured; /* If set to 1, interface has at least
1279  * one valid IP address.
1280  */
1281  u_int32_t flags; /* Control flags... */
1282 #define INTERFACE_REQUESTED 1
1283 #define INTERFACE_AUTOMATIC 2
1284 #define INTERFACE_RUNNING 4
1285 #define INTERFACE_DOWNSTREAM 8
1286 #define INTERFACE_UPSTREAM 16
1287 #define INTERFACE_STREAMS (INTERFACE_DOWNSTREAM | INTERFACE_UPSTREAM)
1288 
1289  /* Only used by DHCP client code. */
1291 # if defined(USE_DLPI_SEND) || defined(USE_DLPI_RECEIVE) || \
1292  defined(USE_DLPI_HWADDR)
1293  int dlpi_sap_length;
1294  struct hardware dlpi_broadcast_addr;
1295 # endif /* DLPI_SEND || DLPI_RECEIVE */
1296  struct hardware anycast_mac_addr;
1297 };
1298 
1301  char name [IFNAMSIZ];
1302  struct hardware address;
1303 };
1304 
1305 struct leasequeue {
1306  struct leasequeue *prev;
1307  struct leasequeue *next;
1308  struct lease *lease;
1309 };
1310 
1311 typedef void (*tvref_t)(void *, void *, const char *, int);
1312 typedef void (*tvunref_t)(void *, const char *, int);
1313 struct timeout {
1314  struct timeout *next;
1315  struct timeval when;
1316  void (*func) (void *);
1317  void *what;
1320  isc_timer_t *isc_timeout;
1321 };
1322 
1323 struct eventqueue {
1324  struct eventqueue *next;
1325  void (*handler)(void *);
1326 };
1327 
1328 struct protocol {
1329  struct protocol *next;
1330  int fd;
1331  void (*handler) (struct protocol *);
1332  void *local;
1333 };
1334 
1335 struct dns_query; /* forward */
1336 
1337 struct dns_wakeup {
1338  struct dns_wakeup *next; /* Next wakeup in chain. */
1339  void (*func) (struct dns_query *);
1340 };
1341 
1343  u_int16_t type; /* Type of query. */
1344  u_int16_t class; /* Class of query. */
1345  unsigned char data [1]; /* Query data. */
1346 };
1347 
1348 struct dns_answer {
1349  u_int16_t type; /* Type of answer. */
1350  u_int16_t class; /* Class of answer. */
1351  int count; /* Number of answers. */
1352  unsigned char *answers[1]; /* Pointers to answers. */
1353 };
1354 
1355 struct dns_query {
1356  struct dns_query *next; /* Next query in hash bucket. */
1357  u_int32_t hash; /* Hash bucket index. */
1358  TIME expiry; /* Query expiry time (zero if not yet
1359  answered. */
1360  u_int16_t id; /* Query ID (also hash table index) */
1361  caddr_t waiters; /* Pointer to list of things waiting
1362  on this query. */
1363 
1364  struct dns_question *question; /* Question, internal format. */
1365  struct dns_answer *answer; /* Answer, internal format. */
1366 
1367  unsigned char *query; /* Query formatted for DNS server. */
1368  unsigned len; /* Length of entire query. */
1369  int sent; /* The query has been sent. */
1370  struct dns_wakeup *wakeups; /* Wakeups to call if this query is
1371  answered. */
1372  struct name_server *next_server; /* Next server to try. */
1373  int backoff; /* Current backoff, in seconds. */
1374 };
1375 
1376 #define DNS_ZONE_ACTIVE 0
1377 #define DNS_ZONE_INACTIVE 1
1378 struct dns_zone {
1379  int refcnt;
1381  char *name;
1386  struct auth_key *key;
1387  u_int16_t flags;
1388 };
1389 
1390 struct icmp_state {
1392  int socket;
1393  void (*icmp_handler) (struct iaddr, u_int8_t *, int);
1394 };
1395 
1396 #include "ctrace.h"
1397 
1398 /* Bitmask of dhcp option codes. */
1399 typedef unsigned char option_mask [16];
1400 
1401 /* DHCP Option mask manipulation macros... */
1402 #define OPTION_ZERO(mask) (memset (mask, 0, 16))
1403 #define OPTION_SET(mask, bit) (mask [bit >> 8] |= (1 << (bit & 7)))
1404 #define OPTION_CLR(mask, bit) (mask [bit >> 8] &= ~(1 << (bit & 7)))
1405 #define OPTION_ISSET(mask, bit) (mask [bit >> 8] & (1 << (bit & 7)))
1406 #define OPTION_ISCLR(mask, bit) (!OPTION_ISSET (mask, bit))
1407 
1408 /* An option occupies its length plus two header bytes (code and
1409  length) for every 255 bytes that must be stored. */
1410 #define OPTION_SPACE(x) ((x) + 2 * ((x) / 255 + 1))
1411 
1412 /* Default path to dhcpd config file. */
1413 #ifdef DEBUG
1414 #undef _PATH_DHCPD_CONF
1415 #define _PATH_DHCPD_CONF "dhcpd.conf"
1416 #undef _PATH_DHCPD_DB
1417 #define _PATH_DHCPD_DB "dhcpd.leases"
1418 #undef _PATH_DHCPD6_DB
1419 #define _PATH_DHCPD6_DB "dhcpd6.leases"
1420 #undef _PATH_DHCPD_PID
1421 #define _PATH_DHCPD_PID "dhcpd.pid"
1422 #undef _PATH_DHCPD6_PID
1423 #define _PATH_DHCPD6_PID "dhcpd6.pid"
1424 #else /* !DEBUG */
1425 
1426 #ifndef _PATH_DHCPD_CONF
1427 #define _PATH_DHCPD_CONF "/etc/dhcp/dhcpd.conf"
1428 #endif /* DEBUG */
1429 
1430 #ifndef _PATH_DHCPD_DB
1431 #define _PATH_DHCPD_DB LOCALSTATEDIR"/db/dhcpd.leases"
1432 #endif
1433 
1434 #ifndef _PATH_DHCPD6_DB
1435 #define _PATH_DHCPD6_DB LOCALSTATEDIR"/db/dhcpd6.leases"
1436 #endif
1437 
1438 #ifndef _PATH_DHCPD_PID
1439 #define _PATH_DHCPD_PID LOCALSTATEDIR"/run/dhcpd.pid"
1440 #endif
1441 
1442 #ifndef _PATH_DHCPD6_PID
1443 #define _PATH_DHCPD6_PID LOCALSTATEDIR"/run/dhcpd6.pid"
1444 #endif
1445 
1446 #endif /* DEBUG */
1447 
1448 #ifndef _PATH_DHCLIENT_CONF
1449 #define _PATH_DHCLIENT_CONF "/etc/dhcp/dhclient.conf"
1450 #endif
1451 
1452 #ifndef _PATH_DHCLIENT_SCRIPT
1453 #define _PATH_DHCLIENT_SCRIPT "/usr/sbin/dhclient-script"
1454 #endif
1455 
1456 #ifndef _PATH_DHCLIENT_PID
1457 #define _PATH_DHCLIENT_PID LOCALSTATEDIR"/run/dhclient.pid"
1458 #endif
1459 
1460 #ifndef _PATH_DHCLIENT6_PID
1461 #define _PATH_DHCLIENT6_PID LOCALSTATEDIR"/run/dhclient6.pid"
1462 #endif
1463 
1464 #ifndef _PATH_DHCLIENT_DB
1465 #define _PATH_DHCLIENT_DB LOCALSTATEDIR"/db/dhclient.leases"
1466 #endif
1467 
1468 #ifndef _PATH_DHCLIENT6_DB
1469 #define _PATH_DHCLIENT6_DB LOCALSTATEDIR"/db/dhclient6.leases"
1470 #endif
1471 
1472 #ifndef _PATH_RESOLV_CONF
1473 #define _PATH_RESOLV_CONF "/etc/resolv.conf"
1474 #endif
1475 
1476 #ifndef _PATH_DHCRELAY_PID
1477 #define _PATH_DHCRELAY_PID LOCALSTATEDIR"/run/dhcrelay.pid"
1478 #endif
1479 
1480 #ifndef _PATH_DHCRELAY6_PID
1481 #define _PATH_DHCRELAY6_PID LOCALSTATEDIR"/run/dhcrelay6.pid"
1482 #endif
1483 
1484 #ifndef DHCPD_LOG_FACILITY
1485 #define DHCPD_LOG_FACILITY LOG_DAEMON
1486 #endif
1487 
1488 #define MAX_TIME 0x7fffffff
1489 #define MIN_TIME 0
1490 
1491  /* these are referenced */
1492 typedef struct hash_table ia_hash_t;
1494 
1495  /* IAADDR/IAPREFIX lease */
1496 
1497 struct iasubopt {
1498  int refcnt; /* reference count */
1499  struct in6_addr addr; /* IPv6 address/prefix */
1500  u_int8_t plen; /* iaprefix prefix length */
1501  binding_state_t state; /* state */
1502  struct binding_scope *scope; /* "set var = value;" */
1503  time_t hard_lifetime_end_time; /* time address expires */
1504  time_t soft_lifetime_end_time; /* time ephemeral expires */
1505  u_int32_t prefer; /* cached preferred lifetime */
1506  u_int32_t valid; /* cached valid lifetime */
1507  struct ia_xx *ia; /* IA for this lease */
1508  struct ipv6_pool *ipv6_pool; /* pool for this lease */
1509 /*
1510  * For now, just pick an arbitrary time to keep old hard leases
1511  * around (value in seconds).
1512  */
1513 #define EXPIRED_IPV6_CLEANUP_TIME (60*60)
1514 
1515  int heap_index; /* index into heap, or -1
1516  (internal use only) */
1517 
1518  /*
1519  * A pointer to the state of the ddns update for this lease.
1520  * It should be set while the update is in progress and cleared
1521  * when the update finishes. It can be used to cancel the
1522  * update if we want to do a different update.
1523  */
1525 
1526  /* space for the on * executable statements */
1528 };
1529 
1530 struct ia_xx {
1531  int refcnt; /* reference count */
1532  struct data_string iaid_duid; /* from the client */
1533  u_int16_t ia_type; /* IA_XX */
1534  int num_iasubopt; /* number of IAADDR/PREFIX */
1535  int max_iasubopt; /* space available for IAADDR/PREFIX */
1536  time_t cltt; /* client last transaction time */
1537  struct iasubopt **iasubopt; /* pointers to the IAADDR/IAPREFIXs */
1538 };
1539 
1540 extern ia_hash_t *ia_na_active;
1541 extern ia_hash_t *ia_ta_active;
1542 extern ia_hash_t *ia_pd_active;
1543 
1564 struct ipv6_pool {
1565  int refcnt; /* reference count */
1566  u_int16_t pool_type; /* IA_xx */
1567  struct in6_addr start_addr; /* first IPv6 address */
1568  int bits; /* number of bits, CIDR style */
1569  int units; /* allocation unit in bits */
1570  iasubopt_hash_t *leases; /* non-free leases */
1571  int num_active; /* count of active leases */
1572  isc_heap_t *active_timeouts; /* timeouts for active leases */
1573  int num_inactive; /* count of inactive leases */
1574  isc_heap_t *inactive_timeouts; /* timeouts for expired or
1575  released leases */
1576  struct shared_network *shared_network; /* shared_network for
1577  this pool */
1578  struct subnet *subnet; /* subnet for this pool */
1579  struct ipv6_pond *ipv6_pond; /* pond for this pool */
1580 };
1581 
1593 struct ipv6_pond {
1594  int refcnt;
1595  struct ipv6_pond *next;
1596  struct group *group;
1597  struct shared_network *shared_network; /* backpointer to the enclosing
1598  shared network */
1599  struct permit *permit_list; /* allow clients from this list */
1600  struct permit *prohibit_list; /* deny clients from this list */
1601  TIME valid_from; /* deny pool use before this date */
1602  TIME valid_until; /* deny pool use after this date */
1603 
1604  struct ipv6_pool **ipv6_pools; /* NULL-terminated array */
1605  int last_ipv6_pool; /* offset of last IPv6 pool
1606  used to issue a lease */
1607 };
1608 
1609 /* Flags and state for dhcp_ddns_cb_t */
1610 #define DDNS_UPDATE_ADDR 0x01
1611 #define DDNS_UPDATE_PTR 0x02
1612 #define DDNS_INCLUDE_RRSET 0x04
1613 #define DDNS_CONFLICT_OVERRIDE 0x08
1614 #define DDNS_CLIENT_DID_UPDATE 0x10
1615 #define DDNS_EXECUTE_NEXT 0x20
1616 #define DDNS_ABORT 0x40
1617 #define DDNS_STATIC_LEASE 0x80
1618 #define DDNS_ACTIVE_LEASE 0x100
1619 /*
1620  * The following two groups are separate and we could reuse
1621  * values but not reusing them may be useful in the future.
1622  */
1623 #define DDNS_STATE_CLEANUP 0 // The previous step failed, cleanup
1624 
1625 #define DDNS_STATE_ADD_FW_NXDOMAIN 1
1626 #define DDNS_STATE_ADD_FW_YXDHCID 2
1627 #define DDNS_STATE_ADD_PTR 3
1628 
1629 #define DDNS_STATE_REM_FW_YXDHCID 17
1630 #define DDNS_STATE_REM_FW_NXRR 18
1631 #define DDNS_STATE_REM_PTR 19
1632 
1633 /*
1634  * Flags for the dns print function
1635  */
1636 #define DDNS_PRINT_INBOUND 1
1637 #define DDNS_PRINT_OUTBOUND 0
1638 
1639 struct dhcp_ddns_cb;
1640 
1641 typedef void (*ddns_action_t)(struct dhcp_ddns_cb *ddns_cb,
1642  isc_result_t result);
1643 
1644 typedef struct dhcp_ddns_cb {
1645  struct data_string fwd_name;
1646  struct data_string rev_name;
1647  struct data_string dhcid;
1648  struct iaddr address;
1650 
1651  unsigned long ttl;
1652 
1653  unsigned char zone_name[DHCP_MAXDNS_WIRE];
1654  isc_sockaddrlist_t zone_server_list;
1655  isc_sockaddr_t zone_addrs[DHCP_MAXNS];
1657  struct dns_zone *zone;
1658 
1659  u_int16_t flags;
1661  int state;
1663 
1665 
1666  /* Lease or client state that triggered the ddns operation */
1667  void *lease;
1669 
1671  void *dataspace;
1672 
1673  dns_rdataclass_t dhcid_class;
1674  char *lease_tag;
1675 } dhcp_ddns_cb_t;
1676 
1677 extern struct ipv6_pool **pools;
1678 extern int num_pools;
1679 
1680 /* External definitions... */
1681 
1682 HASH_FUNCTIONS_DECL (group, const char *, struct group_object, group_hash_t)
1683 HASH_FUNCTIONS_DECL (universe, const char *, struct universe, universe_hash_t)
1684 HASH_FUNCTIONS_DECL (option_name, const char *, struct option,
1686 HASH_FUNCTIONS_DECL (option_code, const unsigned *, struct option,
1688 HASH_FUNCTIONS_DECL (dns_zone, const char *, struct dns_zone, dns_zone_hash_t)
1689 HASH_FUNCTIONS_DECL(lease_ip, const unsigned char *, struct lease,
1691 HASH_FUNCTIONS_DECL(lease_id, const unsigned char *, struct lease,
1693 HASH_FUNCTIONS_DECL (host, const unsigned char *, struct host_decl, host_hash_t)
1694 HASH_FUNCTIONS_DECL (class, const char *, struct class, class_hash_t)
1695 
1696 /* options.c */
1697 
1698 extern struct option *vendor_cfg_option;
1699 int parse_options (struct packet *);
1700 int parse_option_buffer (struct option_state *, const unsigned char *,
1701  unsigned, struct universe *);
1702 struct universe *find_option_universe (struct option *, const char *);
1703 int parse_encapsulated_suboptions (struct option_state *, struct option *,
1704  const unsigned char *, unsigned,
1705  struct universe *, const char *);
1706 int cons_options (struct packet *, struct dhcp_packet *, struct lease *,
1707  struct client_state *,
1708  int, struct option_state *, struct option_state *,
1709  struct binding_scope **,
1710  int, int, int, struct data_string *, const char *);
1711 int fqdn_universe_decode (struct option_state *,
1712  const unsigned char *, unsigned, struct universe *);
1713 struct option_cache *
1714 lookup_fqdn6_option(struct universe *universe, struct option_state *options,
1715  unsigned code);
1716 void
1717 save_fqdn6_option(struct universe *universe, struct option_state *options,
1718  struct option_cache *oc, isc_boolean_t appendp);
1719 void
1720 delete_fqdn6_option(struct universe *universe, struct option_state *options,
1721  int code);
1722 void
1723 fqdn6_option_space_foreach(struct packet *packet, struct lease *lease,
1724  struct client_state *client_state,
1725  struct option_state *in_options,
1726  struct option_state *cfg_options,
1727  struct binding_scope **scope,
1728  struct universe *u, void *stuff,
1729  void (*func)(struct option_cache *,
1730  struct packet *,
1731  struct lease *,
1732  struct client_state *,
1733  struct option_state *,
1734  struct option_state *,
1735  struct binding_scope **,
1736  struct universe *, void *));
1737 int
1738 fqdn6_option_space_encapsulate(struct data_string *result,
1739  struct packet *packet, struct lease *lease,
1740  struct client_state *client_state,
1741  struct option_state *in_options,
1742  struct option_state *cfg_options,
1743  struct binding_scope **scope,
1744  struct universe *universe);
1745 int
1746 fqdn6_universe_decode(struct option_state *options,
1747  const unsigned char *buffer, unsigned length,
1748  struct universe *u);
1749 int append_option(struct data_string *dst, struct universe *universe,
1750  struct option *option, struct data_string *src);
1751 int
1752 store_options(int *ocount,
1753  unsigned char *buffer, unsigned buflen, unsigned index,
1754  struct packet *packet, struct lease *lease,
1755  struct client_state *client_state,
1756  struct option_state *in_options,
1757  struct option_state *cfg_options,
1758  struct binding_scope **scope,
1759  unsigned *priority_list, int priority_len,
1760  unsigned first_cutoff, int second_cutoff, int terminate,
1761  const char *vuname);
1762 int store_options6(char *, int, struct option_state *, struct packet *,
1763  const int *, struct data_string *);
1764 int format_has_text(const char *);
1765 int format_min_length(const char *, struct option_cache *);
1766 const char *pretty_print_option (struct option *, const unsigned char *,
1767  unsigned, int, int);
1768 int pretty_escape(char **, char *, const unsigned char **,
1769  const unsigned char *);
1770 int get_option (struct data_string *, struct universe *,
1771  struct packet *, struct lease *, struct client_state *,
1772  struct option_state *, struct option_state *,
1773  struct option_state *, struct binding_scope **, unsigned,
1774  const char *, int);
1775 void set_option (struct universe *, struct option_state *,
1776  struct option_cache *, enum statement_op);
1777 struct option_cache *lookup_option (struct universe *,
1778  struct option_state *, unsigned);
1779 struct option_cache *lookup_hashed_option (struct universe *,
1780  struct option_state *,
1781  unsigned);
1782 struct option_cache *next_hashed_option(struct universe *,
1783  struct option_state *,
1784  struct option_cache *);
1785 int save_option_buffer (struct universe *, struct option_state *,
1786  struct buffer *, unsigned char *, unsigned,
1787  unsigned, int);
1788 int append_option_buffer(struct universe *, struct option_state *,
1789  struct buffer *, unsigned char *, unsigned,
1790  unsigned, int);
1791 void build_server_oro(struct data_string *, struct option_state *,
1792  const char *, int);
1793 void save_option(struct universe *, struct option_state *,
1794  struct option_cache *);
1795 void also_save_option(struct universe *, struct option_state *,
1796  struct option_cache *);
1797 void save_hashed_option(struct universe *, struct option_state *,
1798  struct option_cache *, isc_boolean_t appendp);
1799 void delete_option (struct universe *, struct option_state *, int);
1800 void delete_hashed_option (struct universe *,
1801  struct option_state *, int);
1802 int option_cache_dereference (struct option_cache **,
1803  const char *, int);
1804 int hashed_option_state_dereference (struct universe *,
1805  struct option_state *,
1806  const char *, int);
1807 int store_option (struct data_string *,
1808  struct universe *, struct packet *, struct lease *,
1809  struct client_state *,
1810  struct option_state *, struct option_state *,
1811  struct binding_scope **, struct option_cache *);
1812 int option_space_encapsulate (struct data_string *,
1813  struct packet *, struct lease *,
1814  struct client_state *,
1815  struct option_state *,
1816  struct option_state *,
1817  struct binding_scope **,
1818  struct data_string *);
1819 int hashed_option_space_encapsulate (struct data_string *,
1820  struct packet *, struct lease *,
1821  struct client_state *,
1822  struct option_state *,
1823  struct option_state *,
1824  struct binding_scope **,
1825  struct universe *);
1826 int nwip_option_space_encapsulate (struct data_string *,
1827  struct packet *, struct lease *,
1828  struct client_state *,
1829  struct option_state *,
1830  struct option_state *,
1831  struct binding_scope **,
1832  struct universe *);
1833 int fqdn_option_space_encapsulate (struct data_string *,
1834  struct packet *, struct lease *,
1835  struct client_state *,
1836  struct option_state *,
1837  struct option_state *,
1838  struct binding_scope **,
1839  struct universe *);
1840 void suboption_foreach (struct packet *, struct lease *, struct client_state *,
1841  struct option_state *, struct option_state *,
1842  struct binding_scope **, struct universe *, void *,
1843  void (*) (struct option_cache *, struct packet *,
1844  struct lease *, struct client_state *,
1845  struct option_state *, struct option_state *,
1846  struct binding_scope **,
1847  struct universe *, void *),
1848  struct option_cache *, const char *);
1849 void option_space_foreach (struct packet *, struct lease *,
1850  struct client_state *,
1851  struct option_state *,
1852  struct option_state *,
1853  struct binding_scope **,
1854  struct universe *, void *,
1855  void (*) (struct option_cache *,
1856  struct packet *,
1857  struct lease *, struct client_state *,
1858  struct option_state *,
1859  struct option_state *,
1860  struct binding_scope **,
1861  struct universe *, void *));
1862 void hashed_option_space_foreach (struct packet *, struct lease *,
1863  struct client_state *,
1864  struct option_state *,
1865  struct option_state *,
1866  struct binding_scope **,
1867  struct universe *, void *,
1868  void (*) (struct option_cache *,
1869  struct packet *,
1870  struct lease *,
1871  struct client_state *,
1872  struct option_state *,
1873  struct option_state *,
1874  struct binding_scope **,
1875  struct universe *, void *));
1876 int linked_option_get (struct data_string *, struct universe *,
1877  struct packet *, struct lease *,
1878  struct client_state *,
1879  struct option_state *, struct option_state *,
1880  struct option_state *, struct binding_scope **,
1881  unsigned);
1882 int linked_option_state_dereference (struct universe *,
1883  struct option_state *,
1884  const char *, int);
1885 void save_linked_option(struct universe *, struct option_state *,
1886  struct option_cache *, isc_boolean_t appendp);
1887 void linked_option_space_foreach (struct packet *, struct lease *,
1888  struct client_state *,
1889  struct option_state *,
1890  struct option_state *,
1891  struct binding_scope **,
1892  struct universe *, void *,
1893  void (*) (struct option_cache *,
1894  struct packet *,
1895  struct lease *,
1896  struct client_state *,
1897  struct option_state *,
1898  struct option_state *,
1899  struct binding_scope **,
1900  struct universe *, void *));
1901 int linked_option_space_encapsulate (struct data_string *, struct packet *,
1902  struct lease *, struct client_state *,
1903  struct option_state *,
1904  struct option_state *,
1905  struct binding_scope **,
1906  struct universe *);
1907 void delete_linked_option (struct universe *, struct option_state *, int);
1908 struct option_cache *lookup_linked_option (struct universe *,
1909  struct option_state *, unsigned);
1910 void do_packet (struct interface_info *,
1911  struct dhcp_packet *, unsigned,
1912  unsigned int, struct iaddr, struct hardware *);
1913 void do_packet6(struct interface_info *, const char *,
1914  int, int, const struct iaddr *, isc_boolean_t);
1915 int packet6_len_okay(const char *, int);
1916 
1917 int validate_packet(struct packet *);
1918 
1919 int add_option(struct option_state *options,
1920  unsigned int option_num,
1921  void *data,
1922  unsigned int data_len);
1923 
1924 /* dhcpd.c */
1925 extern struct timeval cur_tv;
1926 #define cur_time cur_tv.tv_sec
1927 
1928 extern int ddns_update_style;
1929 extern int dont_use_fsync;
1930 
1931 extern const char *path_dhcpd_conf;
1932 extern const char *path_dhcpd_db;
1933 extern const char *path_dhcpd_pid;
1934 
1936 extern struct eventqueue *rw_queue_empty;
1937 
1938 int main(int, char **);
1939 void postconf_initialization(int);
1940 void postdb_startup(void);
1941 void cleanup (void);
1942 void lease_pinged (struct iaddr, u_int8_t *, int);
1943 void lease_ping_timeout (void *);
1944 int dhcpd_interface_setup_hook (struct interface_info *ip, struct iaddr *ia);
1946 isc_result_t dhcp_io_shutdown (omapi_object_t *, void *);
1947 isc_result_t dhcp_set_control_state (control_object_state_t oldstate,
1948  control_object_state_t newstate);
1949 #if defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
1950 void relinquish_ackqueue(void);
1951 #endif
1952 
1953 /* conflex.c */
1954 isc_result_t new_parse (struct parse **, int,
1955  char *, unsigned, const char *, int);
1956 isc_result_t end_parse (struct parse **);
1957 isc_result_t save_parse_state(struct parse *cfile);
1958 isc_result_t restore_parse_state(struct parse *cfile);
1959 enum dhcp_token next_token (const char **, unsigned *, struct parse *);
1960 enum dhcp_token peek_token (const char **, unsigned *, struct parse *);
1961 enum dhcp_token next_raw_token(const char **rval, unsigned *rlen,
1962  struct parse *cfile);
1963 enum dhcp_token peek_raw_token(const char **rval, unsigned *rlen,
1964  struct parse *cfile);
1965 /*
1966  * Use skip_token when we are skipping a token we have previously
1967  * used peek_token on as we know what the result will be in this case.
1968  */
1969 #define skip_token(a,b,c) ((void) next_token((a),(b),(c)))
1970 
1971 
1972 /* confpars.c */
1973 void parse_trace_setup (void);
1974 isc_result_t readconf (void);
1975 isc_result_t read_conf_file (const char *, struct group *, int, int);
1976 #if defined (TRACING)
1977 void trace_conf_input (trace_type_t *, unsigned, char *);
1978 void trace_conf_stop (trace_type_t *ttype);
1979 #endif
1980 isc_result_t conf_file_subparse (struct parse *, struct group *, int);
1981 isc_result_t lease_file_subparse (struct parse *);
1982 int parse_statement (struct parse *, struct group *, int,
1983  struct host_decl *, int);
1984 #if defined (FAILOVER_PROTOCOL)
1985 void parse_failover_peer (struct parse *, struct group *, int);
1987  dhcp_failover_state_t *);
1988 void parse_failover_state (struct parse *,
1989  enum failover_state *, TIME *);
1990 #endif
1991 int permit_list_match (struct permit *, struct permit *);
1992 void parse_pool_statement (struct parse *, struct group *, int);
1993 int parse_lbrace (struct parse *);
1994 void parse_host_declaration (struct parse *, struct group *);
1995 int parse_class_declaration (struct class **, struct parse *,
1996  struct group *, int);
1997 void parse_shared_net_declaration (struct parse *, struct group *);
1998 void parse_subnet_declaration (struct parse *,
1999  struct shared_network *);
2000 void parse_subnet6_declaration (struct parse *,
2001  struct shared_network *);
2002 void parse_group_declaration (struct parse *, struct group *);
2003 int parse_fixed_addr_param (struct option_cache **,
2004  struct parse *, enum dhcp_token);
2005 int parse_lease_declaration (struct lease **, struct parse *);
2006 int parse_ip6_addr(struct parse *, struct iaddr *);
2007 int parse_ip6_addr_expr(struct expression **, struct parse *);
2008 int parse_ip6_prefix(struct parse *, struct iaddr *, u_int8_t *);
2009 void parse_address_range (struct parse *, struct group *, int,
2010  struct pool *, struct lease **);
2011 void parse_address_range6(struct parse *cfile, struct group *group,
2012  struct ipv6_pond *);
2013 void parse_prefix6(struct parse *cfile, struct group *group,
2014  struct ipv6_pond *);
2015 void parse_fixed_prefix6(struct parse *cfile, struct host_decl *host_decl);
2016 void parse_ia_na_declaration(struct parse *);
2017 void parse_ia_ta_declaration(struct parse *);
2018 void parse_ia_pd_declaration(struct parse *);
2019 void parse_server_duid(struct parse *cfile);
2020 void parse_server_duid_conf(struct parse *cfile);
2021 void parse_pool6_statement (struct parse *, struct group *, int);
2022 
2023 /* ddns.c */
2024 int ddns_updates(struct packet *, struct lease *, struct lease *,
2025  struct iasubopt *, struct iasubopt *, struct option_state *);
2026 isc_result_t ddns_removals(struct lease *, struct iasubopt *,
2027  struct dhcp_ddns_cb *, isc_boolean_t);
2028 #if defined (TRACING)
2029 void trace_ddns_init(void);
2030 #endif
2031 
2032 /* parse.c */
2033 void add_enumeration (struct enumeration *);
2034 struct enumeration *find_enumeration (const char *, int);
2035 struct enumeration_value *find_enumeration_value (const char *, int,
2036  unsigned *,
2037  const char *);
2038 void skip_to_semi (struct parse *);
2039 void skip_to_rbrace (struct parse *, int);
2040 int parse_semi (struct parse *);
2041 int parse_string (struct parse *, char **, unsigned *);
2042 char *parse_host_name (struct parse *);
2043 int parse_ip_addr_or_hostname (struct expression **,
2044  struct parse *, int);
2045 void parse_hardware_param (struct parse *, struct hardware *);
2046 void parse_lease_time (struct parse *, TIME *);
2047 unsigned char *parse_numeric_aggregate (struct parse *,
2048  unsigned char *, unsigned *,
2049  int, int, unsigned);
2050 void convert_num (struct parse *, unsigned char *, const char *,
2051  int, unsigned);
2052 TIME parse_date (struct parse *);
2053 TIME parse_date_core(struct parse *);
2054 isc_result_t parse_option_name (struct parse *, int, int *,
2055  struct option **);
2056 void parse_option_space_decl (struct parse *);
2057 int parse_option_code_definition (struct parse *, struct option *);
2058 int parse_base64 (struct data_string *, struct parse *);
2059 int parse_cshl (struct data_string *, struct parse *);
2061  struct parse *, int *,
2062  enum expression_context);
2064  struct parse *, int *,
2065  enum expression_context);
2066 int parse_zone (struct dns_zone *, struct parse *);
2067 int parse_key (struct parse *);
2069  struct parse *, int *);
2071  struct parse *, int *);
2073  struct parse *, int *,
2074  enum expression_context);
2076  struct parse *, int *);
2077 int parse_boolean_expression (struct expression **,
2078  struct parse *, int *);
2079 int parse_boolean (struct parse *);
2080 int parse_data_expression (struct expression **,
2081  struct parse *, int *);
2082 int parse_numeric_expression (struct expression **,
2083  struct parse *, int *);
2084 int parse_dns_expression (struct expression **, struct parse *, int *);
2085 int parse_non_binary (struct expression **, struct parse *, int *,
2086  enum expression_context);
2087 int parse_expression (struct expression **, struct parse *, int *,
2088  enum expression_context,
2089  struct expression **, enum expr_op);
2090 int parse_option_data(struct expression **expr, struct parse *cfile,
2091  int lookups, struct option *option);
2093  struct parse *, int,
2094  struct option *, enum statement_op);
2095 int parse_option_token (struct expression **, struct parse *,
2096  const char **, struct expression *, int, int);
2097 int parse_allow_deny (struct option_cache **, struct parse *, int);
2098 int parse_auth_key (struct data_string *, struct parse *);
2099 int parse_warn (struct parse *, const char *, ...)
2100  __attribute__((__format__(__printf__,2,3)));
2101 struct expression *parse_domain_list(struct parse *cfile, int);
2102 
2103 
2104 /* tree.c */
2105 extern struct binding_scope *global_scope;
2106 pair cons (caddr_t, pair);
2107 int make_const_option_cache (struct option_cache **, struct buffer **,
2108  u_int8_t *, unsigned, struct option *,
2109  const char *, int);
2110 int make_host_lookup (struct expression **, const char *);
2111 int enter_dns_host (struct dns_host_entry **, const char *);
2112 int make_const_data (struct expression **,
2113  const unsigned char *, unsigned, int, int,
2114  const char *, int);
2115 int make_const_int (struct expression **, unsigned long);
2116 int make_concat (struct expression **,
2117  struct expression *, struct expression *);
2118 int make_encapsulation (struct expression **, struct data_string *);
2119 int make_substring (struct expression **, struct expression *,
2120  struct expression *, struct expression *);
2121 int make_limit (struct expression **, struct expression *, int);
2122 int make_let (struct executable_statement **, const char *);
2123 int option_cache (struct option_cache **, struct data_string *,
2124  struct expression *, struct option *,
2125  const char *, int);
2126 int evaluate_expression (struct binding_value **, struct packet *,
2127  struct lease *, struct client_state *,
2128  struct option_state *, struct option_state *,
2129  struct binding_scope **, struct expression *,
2130  const char *, int);
2131 int binding_value_dereference (struct binding_value **, const char *, int);
2132 int evaluate_boolean_expression (int *,
2133  struct packet *, struct lease *,
2134  struct client_state *,
2135  struct option_state *,
2136  struct option_state *,
2137  struct binding_scope **,
2138  struct expression *);
2139 int evaluate_data_expression (struct data_string *,
2140  struct packet *, struct lease *,
2141  struct client_state *,
2142  struct option_state *,
2143  struct option_state *,
2144  struct binding_scope **,
2145  struct expression *,
2146  const char *, int);
2147 int evaluate_numeric_expression (unsigned long *, struct packet *,
2148  struct lease *, struct client_state *,
2149  struct option_state *, struct option_state *,
2150  struct binding_scope **,
2151  struct expression *);
2152 int evaluate_option_cache (struct data_string *,
2153  struct packet *, struct lease *,
2154  struct client_state *,
2155  struct option_state *, struct option_state *,
2156  struct binding_scope **,
2157  struct option_cache *,
2158  const char *, int);
2160  struct packet *, struct lease *,
2161  struct client_state *,
2162  struct option_state *,
2163  struct option_state *,
2164  struct binding_scope **,
2165  struct option_cache *,
2166  const char *, int);
2168  struct packet *, struct lease *,
2169  struct client_state *,
2170  struct option_state *,
2171  struct option_state *,
2172  struct binding_scope **,
2173  struct expression *);
2174 void expression_dereference (struct expression **, const char *, int);
2175 int is_dns_expression (struct expression *);
2176 int is_boolean_expression (struct expression *);
2177 int is_data_expression (struct expression *);
2178 int is_numeric_expression (struct expression *);
2179 int is_compound_expression (struct expression *);
2180 int op_precedence (enum expr_op, enum expr_op);
2181 enum expression_context expression_context (struct expression *);
2182 enum expression_context op_context (enum expr_op);
2183 int write_expression (FILE *, struct expression *, int, int, int);
2184 struct binding *find_binding (struct binding_scope *, const char *);
2185 int free_bindings (struct binding_scope *, const char *, int);
2186 int binding_scope_dereference (struct binding_scope **,
2187  const char *, int);
2188 int fundef_dereference (struct fundef **, const char *, int);
2189 int data_subexpression_length (int *, struct expression *);
2190 int expr_valid_for_context (struct expression *, enum expression_context);
2191 struct binding *create_binding (struct binding_scope **, const char *);
2192 int bind_ds_value (struct binding_scope **,
2193  const char *, struct data_string *);
2194 int find_bound_string (struct data_string *,
2195  struct binding_scope *, const char *);
2196 int unset (struct binding_scope *, const char *);
2197 int data_string_sprintfa(struct data_string *ds, const char *fmt, ...);
2198 
2199 /* dhcp.c */
2200 extern int outstanding_pings;
2201 extern int max_outstanding_acks;
2202 extern int max_ack_delay_secs;
2203 extern int max_ack_delay_usecs;
2204 
2205 void dhcp (struct packet *);
2206 void dhcpdiscover (struct packet *, int);
2207 void dhcprequest (struct packet *, int, struct lease *);
2208 void dhcprelease (struct packet *, int);
2209 void dhcpdecline (struct packet *, int);
2210 void dhcpinform (struct packet *, int);
2211 void nak_lease (struct packet *, struct iaddr *cip);
2212 void ack_lease (struct packet *, struct lease *,
2213  unsigned int, TIME, char *, int, struct host_decl *);
2214 void delayed_ack_enqueue(struct lease *);
2215 void commit_leases_readerdry(void *);
2216 void flush_ackqueue(void *);
2217 void dhcp_reply (struct lease *);
2218 int find_lease (struct lease **, struct packet *,
2219  struct shared_network *, int *, int *, struct lease *,
2220  const char *, int);
2221 int mockup_lease (struct lease **, struct packet *,
2222  struct shared_network *,
2223  struct host_decl *);
2224 void static_lease_dereference (struct lease *, const char *, int);
2225 
2226 int allocate_lease (struct lease **, struct packet *,
2227  struct pool *, int *);
2228 int permitted (struct packet *, struct permit *);
2229 int locate_network (struct packet *);
2230 int parse_agent_information_option (struct packet *, int, u_int8_t *);
2231 unsigned cons_agent_information_options (struct option_state *,
2232  struct dhcp_packet *,
2233  unsigned, unsigned);
2234 void get_server_source_address(struct in_addr *from,
2235  struct option_state *options,
2236  struct option_state *out_options,
2237  struct packet *packet);
2238 void setup_server_source_address(struct in_addr *from,
2239  struct option_state *options,
2240  struct packet *packet);
2241 
2242 /* dhcpleasequery.c */
2243 void dhcpleasequery (struct packet *, int);
2244 void dhcpv6_leasequery (struct data_string *, struct packet *);
2245 
2246 /* dhcpv6.c */
2247 isc_boolean_t server_duid_isset(void);
2248 void copy_server_duid(struct data_string *ds, const char *file, int line);
2249 void set_server_duid(struct data_string *new_duid);
2250 isc_result_t set_server_duid_from_option(void);
2251 void set_server_duid_type(int type);
2252 isc_result_t generate_new_server_duid(void);
2253 isc_result_t get_client_id(struct packet *, struct data_string *);
2254 void dhcpv6(struct packet *);
2255 
2256 /* bootp.c */
2257 void bootp (struct packet *);
2258 
2259 /* memory.c */
2260 extern int (*group_write_hook) (struct group_object *);
2261 extern struct group *root_group;
2263 isc_result_t delete_group (struct group_object *, int);
2264 isc_result_t supersede_group (struct group_object *, int);
2265 int clone_group (struct group **, struct group *, const char *, int);
2266 int write_group (struct group_object *);
2267 
2268 /* salloc.c */
2269 void relinquish_lease_hunks (void);
2270 struct lease *new_leases (unsigned, const char *, int);
2271 #if defined (DEBUG_MEMORY_LEAKAGE) || \
2272  defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
2273 void relinquish_free_lease_states (void);
2274 #endif
2275 OMAPI_OBJECT_ALLOC_DECL (lease, struct lease, dhcp_type_lease)
2276 OMAPI_OBJECT_ALLOC_DECL (class, struct class, dhcp_type_class)
2277 OMAPI_OBJECT_ALLOC_DECL (subclass, struct class, dhcp_type_subclass)
2278 OMAPI_OBJECT_ALLOC_DECL (pool, struct pool, dhcp_type_pool)
2279 OMAPI_OBJECT_ALLOC_DECL (host, struct host_decl, dhcp_type_host)
2280 
2281 /* alloc.c */
2283 OMAPI_OBJECT_ALLOC_DECL (shared_network, struct shared_network,
2285 OMAPI_OBJECT_ALLOC_DECL (group_object, struct group_object, dhcp_type_group)
2286 OMAPI_OBJECT_ALLOC_DECL (dhcp_control,
2288 
2289 #if defined (DEBUG_MEMORY_LEAKAGE) || \
2290  defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
2291 void relinquish_free_pairs (void);
2292 void relinquish_free_expressions (void);
2293 void relinquish_free_binding_values (void);
2294 void relinquish_free_option_caches (void);
2295 void relinquish_free_packets (void);
2296 #endif
2297 
2299  const char *, int);
2301  struct option_chain_head *,
2302  const char *, int);
2304  const char *, int);
2305 int group_allocate (struct group **, const char *, int);
2306 int group_reference (struct group **, struct group *, const char *, int);
2307 int group_dereference (struct group **, const char *, int);
2308 struct dhcp_packet *new_dhcp_packet (const char *, int);
2309 struct protocol *new_protocol (const char *, int);
2310 struct lease_state *new_lease_state (const char *, int);
2311 struct domain_search_list *new_domain_search_list (const char *, int);
2312 struct name_server *new_name_server (const char *, int);
2313 void free_name_server (struct name_server *, const char *, int);
2314 struct option *new_option (const char *, const char *, int);
2315 int option_reference(struct option **dest, struct option *src,
2316  const char * file, int line);
2317 int option_dereference(struct option **dest, const char *file, int line);
2318 struct universe *new_universe (const char *, int);
2319 void free_universe (struct universe *, const char *, int);
2321  const char *, int);
2322 void free_lease_state (struct lease_state *, const char *, int);
2323 void free_protocol (struct protocol *, const char *, int);
2324 void free_dhcp_packet (struct dhcp_packet *, const char *, int);
2325 struct client_lease *new_client_lease (const char *, int);
2326 void free_client_lease (struct client_lease *, const char *, int);
2327 struct permit *new_permit (const char *, int);
2328 void free_permit (struct permit *, const char *, int);
2329 pair new_pair (const char *, int);
2330 void free_pair (pair, const char *, int);
2331 int expression_allocate (struct expression **, const char *, int);
2332 int expression_reference (struct expression **,
2333  struct expression *, const char *, int);
2334 void free_expression (struct expression *, const char *, int);
2335 int binding_value_allocate (struct binding_value **,
2336  const char *, int);
2337 int binding_value_reference (struct binding_value **,
2338  struct binding_value *,
2339  const char *, int);
2340 void free_binding_value (struct binding_value *, const char *, int);
2341 int fundef_allocate (struct fundef **, const char *, int);
2342 int fundef_reference (struct fundef **,
2343  struct fundef *, const char *, int);
2344 int option_cache_allocate (struct option_cache **, const char *, int);
2345 int option_cache_reference (struct option_cache **,
2346  struct option_cache *, const char *, int);
2347 int buffer_allocate (struct buffer **, unsigned, const char *, int);
2348 int buffer_reference (struct buffer **, struct buffer *,
2349  const char *, int);
2350 int buffer_dereference (struct buffer **, const char *, int);
2351 int dns_host_entry_allocate (struct dns_host_entry **,
2352  const char *, const char *, int);
2353 int dns_host_entry_reference (struct dns_host_entry **,
2354  struct dns_host_entry *,
2355  const char *, int);
2356 int dns_host_entry_dereference (struct dns_host_entry **,
2357  const char *, int);
2358 int option_state_allocate (struct option_state **, const char *, int);
2359 int option_state_reference (struct option_state **,
2360  struct option_state *, const char *, int);
2361 int option_state_dereference (struct option_state **,
2362  const char *, int);
2363 void data_string_copy(struct data_string *, const struct data_string *,
2364  const char *, int);
2365 void data_string_forget (struct data_string *, const char *, int);
2366 void data_string_truncate (struct data_string *, int);
2367 int executable_statement_allocate (struct executable_statement **,
2368  const char *, int);
2369 int executable_statement_reference (struct executable_statement **,
2370  struct executable_statement *,
2371  const char *, int);
2372 int packet_allocate (struct packet **, const char *, int);
2373 int packet_reference (struct packet **,
2374  struct packet *, const char *, int);
2375 int packet_dereference (struct packet **, const char *, int);
2376 int binding_scope_allocate (struct binding_scope **,
2377  const char *, int);
2378 int binding_scope_reference (struct binding_scope **,
2379  struct binding_scope *,
2380  const char *, int);
2381 int dns_zone_allocate (struct dns_zone **, const char *, int);
2382 int dns_zone_reference (struct dns_zone **,
2383  struct dns_zone *, const char *, int);
2384 
2385 /* print.c */
2386 #define DEFAULT_TIME_FORMAT 0
2387 #define LOCAL_TIME_FORMAT 1
2388 extern int db_time_format;
2389 char *quotify_string (const char *, const char *, int);
2390 char *quotify_buf (const unsigned char *, unsigned, const char *, int);
2391 char *print_base64 (const unsigned char *, unsigned, const char *, int);
2392 char *print_hw_addr (const int, const int, const unsigned char *);
2393 void print_lease (struct lease *);
2394 void dump_raw (const unsigned char *, unsigned);
2395 void dump_packet_option (struct option_cache *, struct packet *,
2396  struct lease *, struct client_state *,
2397  struct option_state *, struct option_state *,
2398  struct binding_scope **, struct universe *, void *);
2399 void dump_packet (struct packet *);
2400 void hash_dump (struct hash_table *);
2401 char *print_hex (unsigned, const u_int8_t *, unsigned, unsigned);
2402 void print_hex_only (unsigned, const u_int8_t *, unsigned, char *);
2403 void print_hex_or_string (unsigned, const u_int8_t *, unsigned, char *);
2404 #define print_hex_1(len, data, limit) print_hex(len, data, limit, 0)
2405 #define print_hex_2(len, data, limit) print_hex(len, data, limit, 1)
2406 #define print_hex_3(len, data, limit) print_hex(len, data, limit, 2)
2407 char *print_dotted_quads (unsigned, const u_int8_t *);
2408 char *print_dec_1 (unsigned long);
2409 char *print_dec_2 (unsigned long);
2410 void print_expression (const char *, struct expression *);
2411 int token_print_indent_concat (FILE *, int, int,
2412  const char *, const char *, ...);
2413 int token_indent_data_string (FILE *, int, int, const char *, const char *,
2414  struct data_string *);
2415 int token_print_indent (FILE *, int, int,
2416  const char *, const char *, const char *);
2417 void indent_spaces (FILE *, int);
2418 #if defined (NSUPDATE)
2419 void print_dns_status (int, struct dhcp_ddns_cb *, isc_result_t);
2420 #endif
2421 const char *print_time(TIME);
2422 
2423 void get_hw_addr(struct interface_info *info);
2424 
2425 /* socket.c */
2426 #if defined (USE_SOCKET_SEND) || defined (USE_SOCKET_RECEIVE) \
2427  || defined (USE_SOCKET_FALLBACK)
2428 int if_register_socket(struct interface_info *, int, int *, struct in6_addr *);
2429 #endif
2430 
2431 #if defined (USE_SOCKET_FALLBACK) && !defined (USE_SOCKET_SEND)
2432 void if_reinitialize_fallback (struct interface_info *);
2433 void if_register_fallback (struct interface_info *);
2434 ssize_t send_fallback (struct interface_info *,
2435  struct packet *, struct dhcp_packet *, size_t,
2436  struct in_addr,
2437  struct sockaddr_in *, struct hardware *);
2438 ssize_t send_fallback6(struct interface_info *, struct packet *,
2439  struct dhcp_packet *, size_t, struct in6_addr *,
2440  struct sockaddr_in6 *, struct hardware *);
2441 #endif
2442 
2443 #ifdef USE_SOCKET_SEND
2444 void if_reinitialize_send (struct interface_info *);
2445 void if_register_send (struct interface_info *);
2446 void if_deregister_send (struct interface_info *);
2447 ssize_t send_packet (struct interface_info *,
2448  struct packet *, struct dhcp_packet *, size_t,
2449  struct in_addr,
2450  struct sockaddr_in *, struct hardware *);
2451 #endif
2452 ssize_t send_packet6(struct interface_info *, const unsigned char *, size_t,
2453  struct sockaddr_in6 *);
2454 #ifdef USE_SOCKET_RECEIVE
2455 void if_reinitialize_receive (struct interface_info *);
2456 void if_register_receive (struct interface_info *);
2457 void if_deregister_receive (struct interface_info *);
2458 ssize_t receive_packet (struct interface_info *,
2459  unsigned char *, size_t,
2460  struct sockaddr_in *, struct hardware *);
2461 #endif
2462 
2463 #if defined (USE_SOCKET_FALLBACK)
2464 isc_result_t fallback_discard (omapi_object_t *);
2465 #endif
2466 
2467 #if defined (USE_SOCKET_SEND)
2468 int can_unicast_without_arp (struct interface_info *);
2469 int can_receive_unicast_unconfigured (struct interface_info *);
2470 int supports_multiple_interfaces (struct interface_info *);
2471 void maybe_setup_fallback (void);
2472 #endif
2473 
2474 void if_register6(struct interface_info *info, int do_multicast);
2475 void if_register_linklocal6(struct interface_info *info);
2476 ssize_t receive_packet6(struct interface_info *interface,
2477  unsigned char *buf, size_t len,
2478  struct sockaddr_in6 *from, struct in6_addr *to_addr,
2479  unsigned int *if_index);
2480 void if_deregister6(struct interface_info *info);
2481 
2482 
2483 /* bpf.c */
2484 #if defined (USE_BPF_SEND) || defined (USE_BPF_RECEIVE)
2485 int if_register_bpf (struct interface_info *);
2486 #endif
2487 #ifdef USE_BPF_SEND
2488 void if_reinitialize_send (struct interface_info *);
2489 void if_register_send (struct interface_info *);
2490 void if_deregister_send (struct interface_info *);
2491 ssize_t send_packet (struct interface_info *,
2492  struct packet *, struct dhcp_packet *, size_t,
2493  struct in_addr,
2494  struct sockaddr_in *, struct hardware *);
2495 #endif
2496 #ifdef USE_BPF_RECEIVE
2497 void if_reinitialize_receive (struct interface_info *);
2498 void if_register_receive (struct interface_info *);
2499 void if_deregister_receive (struct interface_info *);
2500 ssize_t receive_packet (struct interface_info *,
2501  unsigned char *, size_t,
2502  struct sockaddr_in *, struct hardware *);
2503 #endif
2504 #if defined (USE_BPF_SEND)
2505 int can_unicast_without_arp (struct interface_info *);
2506 int can_receive_unicast_unconfigured (struct interface_info *);
2507 int supports_multiple_interfaces (struct interface_info *);
2508 void maybe_setup_fallback (void);
2509 #endif
2510 
2511 /* lpf.c */
2512 #if defined (USE_LPF_SEND) || defined (USE_LPF_RECEIVE)
2513 int if_register_lpf (struct interface_info *);
2514 #endif
2515 #ifdef USE_LPF_SEND
2516 void if_reinitialize_send (struct interface_info *);
2517 void if_register_send (struct interface_info *);
2518 void if_deregister_send (struct interface_info *);
2519 ssize_t send_packet (struct interface_info *,
2520  struct packet *, struct dhcp_packet *, size_t,
2521  struct in_addr,
2522  struct sockaddr_in *, struct hardware *);
2523 #endif
2524 #ifdef USE_LPF_RECEIVE
2525 void if_reinitialize_receive (struct interface_info *);
2526 void if_register_receive (struct interface_info *);
2527 void if_deregister_receive (struct interface_info *);
2528 ssize_t receive_packet (struct interface_info *,
2529  unsigned char *, size_t,
2530  struct sockaddr_in *, struct hardware *);
2531 #endif
2532 #if defined (USE_LPF_SEND)
2533 int can_unicast_without_arp (struct interface_info *);
2534 int can_receive_unicast_unconfigured (struct interface_info *);
2535 int supports_multiple_interfaces (struct interface_info *);
2536 void maybe_setup_fallback (void);
2537 #endif
2538 
2539 /* nit.c */
2540 #if defined (USE_NIT_SEND) || defined (USE_NIT_RECEIVE)
2541 int if_register_nit (struct interface_info *);
2542 #endif
2543 
2544 #ifdef USE_NIT_SEND
2545 void if_reinitialize_send (struct interface_info *);
2546 void if_register_send (struct interface_info *);
2547 void if_deregister_send (struct interface_info *);
2548 ssize_t send_packet (struct interface_info *,
2549  struct packet *, struct dhcp_packet *, size_t,
2550  struct in_addr,
2551  struct sockaddr_in *, struct hardware *);
2552 #endif
2553 #ifdef USE_NIT_RECEIVE
2554 void if_reinitialize_receive (struct interface_info *);
2555 void if_register_receive (struct interface_info *);
2556 void if_deregister_receive (struct interface_info *);
2557 ssize_t receive_packet (struct interface_info *,
2558  unsigned char *, size_t,
2559  struct sockaddr_in *, struct hardware *);
2560 #endif
2561 #if defined (USE_NIT_SEND)
2562 int can_unicast_without_arp (struct interface_info *);
2563 int can_receive_unicast_unconfigured (struct interface_info *);
2564 int supports_multiple_interfaces (struct interface_info *);
2565 void maybe_setup_fallback (void);
2566 #endif
2567 
2568 /* dlpi.c */
2569 #if defined (USE_DLPI_SEND) || defined (USE_DLPI_RECEIVE)
2570 int if_register_dlpi (struct interface_info *);
2571 #endif
2572 
2573 #ifdef USE_DLPI_SEND
2574 int can_unicast_without_arp (struct interface_info *);
2575 int can_receive_unicast_unconfigured (struct interface_info *);
2576 void if_reinitialize_send (struct interface_info *);
2577 void if_register_send (struct interface_info *);
2578 void if_deregister_send (struct interface_info *);
2579 ssize_t send_packet (struct interface_info *,
2580  struct packet *, struct dhcp_packet *, size_t,
2581  struct in_addr,
2582  struct sockaddr_in *, struct hardware *);
2583 int supports_multiple_interfaces (struct interface_info *);
2584 void maybe_setup_fallback (void);
2585 #endif
2586 #ifdef USE_DLPI_RECEIVE
2587 void if_reinitialize_receive (struct interface_info *);
2588 void if_register_receive (struct interface_info *);
2589 void if_deregister_receive (struct interface_info *);
2590 ssize_t receive_packet (struct interface_info *,
2591  unsigned char *, size_t,
2592  struct sockaddr_in *, struct hardware *);
2593 #endif
2594 
2595 
2596 /* raw.c */
2597 #ifdef USE_RAW_SEND
2598 void if_reinitialize_send (struct interface_info *);
2599 void if_register_send (struct interface_info *);
2600 void if_deregister_send (struct interface_info *);
2601 ssize_t send_packet (struct interface_info *, struct packet *,
2602  struct dhcp_packet *, size_t, struct in_addr,
2603  struct sockaddr_in *, struct hardware *);
2604 int can_unicast_without_arp (struct interface_info *);
2605 int can_receive_unicast_unconfigured (struct interface_info *);
2606 int supports_multiple_interfaces (struct interface_info *);
2607 void maybe_setup_fallback (void);
2608 #endif
2609 
2610 /* discover.c */
2611 extern struct interface_info *interfaces,
2613 extern struct protocol *protocols;
2614 extern int quiet_interface_discovery;
2615 isc_result_t interface_setup (void);
2616 void interface_trace_setup (void);
2617 
2618 extern struct in_addr limited_broadcast;
2619 extern int local_family;
2620 extern struct in_addr local_address;
2621 
2622 extern u_int16_t local_port;
2623 extern u_int16_t remote_port;
2624 extern int (*dhcp_interface_setup_hook) (struct interface_info *,
2625  struct iaddr *);
2626 extern int (*dhcp_interface_discovery_hook) (struct interface_info *);
2627 extern isc_result_t (*dhcp_interface_startup_hook) (struct interface_info *);
2628 
2629 extern void (*bootp_packet_handler) (struct interface_info *,
2630  struct dhcp_packet *, unsigned,
2631  unsigned int,
2632  struct iaddr, struct hardware *);
2633 extern void (*dhcpv6_packet_handler)(struct interface_info *,
2634  const char *, int,
2635  int, const struct iaddr *, isc_boolean_t);
2636 extern struct timeout *timeouts;
2638 #if defined (TRACING)
2642 #endif
2643 extern struct interface_info **interface_vector;
2644 extern int interface_count;
2645 extern int interface_max;
2646 isc_result_t interface_initialize(omapi_object_t *, const char *, int);
2647 void discover_interfaces(int);
2648 int setup_fallback (struct interface_info **, const char *, int);
2650 void reinitialize_interfaces (void);
2651 
2652 /* dispatch.c */
2653 void set_time(TIME);
2654 struct timeval *process_outstanding_timeouts (struct timeval *);
2655 void dispatch (void);
2656 isc_result_t got_one(omapi_object_t *);
2657 isc_result_t got_one_v6(omapi_object_t *);
2662 isc_result_t interface_destroy (omapi_object_t *, const char *, int);
2664  const char *, va_list);
2665 isc_result_t interface_stuff_values (omapi_object_t *,
2666  omapi_object_t *,
2667  omapi_object_t *);
2668 
2669 void add_timeout (struct timeval *, void (*) (void *), void *,
2670  tvref_t, tvunref_t);
2671 void cancel_timeout (void (*) (void *), void *);
2672 void cancel_all_timeouts (void);
2673 void relinquish_timeouts (void);
2674 
2675 OMAPI_OBJECT_ALLOC_DECL (interface,
2676  struct interface_info, dhcp_type_interface)
2677 
2678 /* tables.c */
2679 extern char *default_option_format;
2680 extern struct universe dhcp_universe;
2681 extern struct universe dhcpv6_universe;
2682 extern struct universe nwip_universe;
2683 extern struct universe fqdn_universe;
2684 extern struct universe vsio_universe;
2685 extern int dhcp_option_default_priority_list [];
2687 extern const char *hardware_types [256];
2688 extern int universe_count, universe_max;
2689 extern struct universe **universes;
2692 extern struct universe *config_universe;
2693 
2694 /* stables.c */
2695 #if defined (FAILOVER_PROTOCOL)
2696 extern failover_option_t null_failover_option;
2697 extern failover_option_t skip_failover_option;
2698 extern struct failover_option_info ft_options [];
2699 extern u_int32_t fto_allowed [];
2700 extern int ft_sizes [];
2701 extern const char *dhcp_flink_state_names [];
2702 #endif
2703 extern const char *binding_state_names [];
2704 
2705 extern struct universe agent_universe;
2706 extern struct universe server_universe;
2707 
2708 extern struct enumeration ddns_styles;
2709 extern struct enumeration syslog_enum;
2711 
2712 /* inet.c */
2713 struct iaddr subnet_number (struct iaddr, struct iaddr);
2714 struct iaddr ip_addr (struct iaddr, struct iaddr, u_int32_t);
2715 struct iaddr broadcast_addr (struct iaddr, struct iaddr);
2716 u_int32_t host_addr (struct iaddr, struct iaddr);
2717 int addr_eq (struct iaddr, struct iaddr);
2718 int addr_match(struct iaddr *, struct iaddrmatch *);
2719 int addr_cmp(const struct iaddr *a1, const struct iaddr *a2);
2720 int addr_or(struct iaddr *result,
2721  const struct iaddr *a1, const struct iaddr *a2);
2722 int addr_and(struct iaddr *result,
2723  const struct iaddr *a1, const struct iaddr *a2);
2724 isc_boolean_t is_cidr_mask_valid(const struct iaddr *addr, int bits);
2725 isc_result_t range2cidr(struct iaddrcidrnetlist **result,
2726  const struct iaddr *lo, const struct iaddr *hi);
2727 isc_result_t free_iaddrcidrnetlist(struct iaddrcidrnetlist **result);
2728 const char *piaddr (struct iaddr);
2729 const char *pdestdesc (struct iaddr);
2730 char *piaddrmask(struct iaddr *, struct iaddr *);
2731 char *piaddrcidr(const struct iaddr *, unsigned int);
2732 u_int16_t validate_port(char *);
2733 
2734 /* dhclient.c */
2735 extern int nowait;
2736 
2737 extern int wanted_ia_na;
2738 extern int wanted_ia_ta;
2739 extern int wanted_ia_pd;
2740 
2741 extern const char *path_dhclient_conf;
2742 extern const char *path_dhclient_db;
2743 extern const char *path_dhclient_pid;
2744 extern char *path_dhclient_script;
2745 extern int interfaces_requested;
2746 extern struct data_string default_duid;
2747 extern int duid_type;
2748 
2749 extern struct client_config top_level_config;
2750 
2751 void dhcpoffer (struct packet *);
2752 void dhcpack (struct packet *);
2753 void dhcpnak (struct packet *);
2754 
2755 void send_discover (void *);
2756 void send_request (void *);
2757 void send_release (void *);
2758 void send_decline (void *);
2759 
2760 void state_reboot (void *);
2761 void state_init (void *);
2762 void state_selecting (void *);
2763 void state_requesting (void *);
2764 void state_bound (void *);
2765 void state_stop (void *);
2766 void state_panic (void *);
2767 
2768 void bind_lease (struct client_state *, struct in_addr *);
2769 
2770 void make_client_options (struct client_state *,
2771  struct client_lease *, u_int8_t *,
2772  struct option_cache *, struct iaddr *,
2773  struct option **, struct option_state **);
2774 void make_discover (struct client_state *, struct client_lease *);
2775 void make_request (struct client_state *, struct client_lease *);
2776 void make_decline (struct client_state *, struct client_lease *);
2777 void make_release (struct client_state *, struct client_lease *);
2778 
2779 void destroy_client_lease (struct client_lease *);
2780 void rewrite_client_leases (void);
2781 void write_lease_option (struct option_cache *, struct packet *,
2782  struct lease *, struct client_state *,
2783  struct option_state *, struct option_state *,
2784  struct binding_scope **, struct universe *, void *);
2785 int write_client_lease (struct client_state *, struct client_lease *, int, int);
2786 isc_result_t write_client6_lease(struct client_state *client,
2787  struct dhc6_lease *lease,
2788  int rewrite, int sync);
2789 int dhcp_option_ev_name (char *, size_t, struct option *);
2790 
2791 void script_init (struct client_state *, const char *,
2792  struct string_list *);
2793 void client_option_envadd (struct option_cache *, struct packet *,
2794  struct lease *, struct client_state *,
2795  struct option_state *, struct option_state *,
2796  struct binding_scope **, struct universe *, void *);
2797 void script_write_params (struct client_state *, const char *,
2798  struct client_lease *);
2799 void script_write_requested (struct client_state *);
2800 int script_go (struct client_state *);
2801 void client_envadd (struct client_state *,
2802  const char *, const char *, const char *, ...)
2803  __attribute__((__format__(__printf__,4,5)));
2804 
2805 struct client_lease *packet_to_lease (struct packet *, struct client_state *);
2806 void go_daemon (void);
2807 void write_client_pid_file (void);
2808 void client_location_changed (void);
2809 void do_release (struct client_state *);
2810 int dhclient_interface_shutdown_hook (struct interface_info *);
2811 int dhclient_interface_discovery_hook (struct interface_info *);
2812 isc_result_t dhclient_interface_startup_hook (struct interface_info *);
2813 void dhclient_schedule_updates(struct client_state *client,
2814  struct iaddr *addr, int offset);
2815 void client_dns_update_timeout (void *cp);
2816 isc_result_t client_dns_update(struct client_state *client,
2817  dhcp_ddns_cb_t *ddns_cb);
2818 void client_dns_remove(struct client_state *client, struct iaddr *addr);
2819 
2820 void dhcpv4_client_assignments(void);
2821 void dhcpv6_client_assignments(void);
2822 isc_result_t form_duid(struct data_string *duid, const char *file, int line);
2823 
2824 /* dhc6.c */
2825 void dhc6_lease_destroy(struct dhc6_lease **src, const char *file, int line);
2826 void start_init6(struct client_state *client);
2827 void start_info_request6(struct client_state *client);
2828 void start_confirm6(struct client_state *client);
2829 void start_release6(struct client_state *client);
2830 void start_selecting6(struct client_state *client);
2831 void unconfigure6(struct client_state *client, const char *reason);
2832 
2833 /* db.c */
2834 int write_lease (struct lease *);
2835 int write_host (struct host_decl *);
2836 int write_server_duid(void);
2837 #if defined (FAILOVER_PROTOCOL)
2838 int write_failover_state (dhcp_failover_state_t *);
2839 #endif
2840 int db_printable (const unsigned char *);
2841 int db_printable_len (const unsigned char *, unsigned);
2842 isc_result_t write_named_billing_class(const void *, unsigned, void *);
2843 void write_billing_classes (void);
2844 int write_billing_class (struct class *);
2845 void commit_leases_timeout (void *);
2846 void commit_leases_readerdry(void *);
2847 int commit_leases (void);
2848 int commit_leases_timed (void);
2849 #if defined (PARANOIA)
2850 void db_startup (int, uid_t, gid_t);
2851 #else
2852 void db_startup (int);
2853 #endif /* PARANOIA */
2854 int new_lease_file (void);
2855 int group_writer (struct group_object *);
2856 int write_ia(const struct ia_xx *);
2857 
2858 /* packet.c */
2859 u_int32_t checksum (unsigned char *, unsigned, u_int32_t);
2860 u_int32_t wrapsum (u_int32_t);
2861 void assemble_hw_header (struct interface_info *, unsigned char *,
2862  unsigned *, struct hardware *);
2863 void assemble_udp_ip_header (struct interface_info *, unsigned char *,
2864  unsigned *, u_int32_t, u_int32_t,
2865  u_int32_t, unsigned char *, unsigned);
2866 ssize_t decode_hw_header (struct interface_info *, unsigned char *,
2867  unsigned, struct hardware *);
2868 ssize_t decode_udp_ip_header (struct interface_info *, unsigned char *,
2869  unsigned, struct sockaddr_in *,
2870  unsigned, unsigned *, int);
2871 
2872 /* ethernet.c */
2873 void assemble_ethernet_header (struct interface_info *, unsigned char *,
2874  unsigned *, struct hardware *);
2875 ssize_t decode_ethernet_header (struct interface_info *,
2876  unsigned char *,
2877  unsigned, struct hardware *);
2878 
2879 /* tr.c */
2880 void assemble_tr_header (struct interface_info *, unsigned char *,
2881  unsigned *, struct hardware *);
2882 ssize_t decode_tr_header (struct interface_info *,
2883  unsigned char *,
2884  unsigned, struct hardware *);
2885 
2886 /* dhxpxlt.c */
2887 void convert_statement (struct parse *);
2888 void convert_host_statement (struct parse *, jrefproto);
2889 void convert_host_name (struct parse *, jrefproto);
2890 void convert_class_statement (struct parse *, jrefproto, int);
2891 void convert_class_decl (struct parse *, jrefproto);
2892 void convert_lease_time (struct parse *, jrefproto, char *);
2894 void convert_subnet_statement (struct parse *, jrefproto);
2895 void convert_subnet_decl (struct parse *, jrefproto);
2896 void convert_host_decl (struct parse *, jrefproto);
2897 void convert_hardware_decl (struct parse *, jrefproto);
2898 void convert_hardware_addr (struct parse *, jrefproto);
2899 void convert_filename_decl (struct parse *, jrefproto);
2900 void convert_servername_decl (struct parse *, jrefproto);
2901 void convert_ip_addr_or_hostname (struct parse *, jrefproto, int);
2902 void convert_fixed_addr_decl (struct parse *, jrefproto);
2903 void convert_option_decl (struct parse *, jrefproto);
2904 void convert_lease_statement (struct parse *, jrefproto);
2905 void convert_address_range (struct parse *, jrefproto);
2906 void convert_date (struct parse *, jrefproto, char *);
2907 void convert_numeric_aggregate (struct parse *, jrefproto, int, int, int, int);
2908 void indent (int);
2909 
2910 /* route.c */
2911 void add_route_direct (struct interface_info *, struct in_addr);
2912 void add_route_net (struct interface_info *, struct in_addr, struct in_addr);
2913 void add_route_default_gateway (struct interface_info *, struct in_addr);
2914 void remove_routes (struct in_addr);
2915 void remove_if_route (struct interface_info *, struct in_addr);
2916 void remove_all_if_routes (struct interface_info *);
2917 void set_netmask (struct interface_info *, struct in_addr);
2918 void set_broadcast_addr (struct interface_info *, struct in_addr);
2919 void set_ip_address (struct interface_info *, struct in_addr);
2920 
2921 /* clparse.c */
2922 isc_result_t read_client_conf (void);
2923 int read_client_conf_file (const char *,
2924  struct interface_info *, struct client_config *);
2925 void read_client_leases (void);
2926 void parse_client_statement (struct parse *, struct interface_info *,
2927  struct client_config *);
2928 int parse_X (struct parse *, u_int8_t *, unsigned);
2929 int parse_option_list (struct parse *, struct option ***);
2930 void parse_interface_declaration (struct parse *,
2931  struct client_config *, char *);
2932 int interface_or_dummy (struct interface_info **, const char *);
2933 void make_client_state (struct client_state **);
2934 void make_client_config (struct client_state *, struct client_config *);
2935 void parse_client_lease_statement (struct parse *, int);
2936 void parse_client_lease_declaration (struct parse *,
2937  struct client_lease *,
2938  struct interface_info **,
2939  struct client_state **);
2940 int parse_option_decl (struct option_cache **, struct parse *);
2941 void parse_string_list (struct parse *, struct string_list **, int);
2942 int parse_ip_addr (struct parse *, struct iaddr *);
2943 int parse_destination_descriptor (struct parse *, struct iaddr *);
2944 int parse_ip_addr_with_subnet(struct parse *, struct iaddrmatch *);
2945 void parse_reject_statement (struct parse *, struct client_config *);
2946 
2947 /* icmp.c */
2948 OMAPI_OBJECT_ALLOC_DECL (icmp_state, struct icmp_state, dhcp_type_icmp)
2949 extern struct icmp_state *icmp_state;
2950 void icmp_startup (int, void (*) (struct iaddr, u_int8_t *, int));
2952 int icmp_echorequest (struct iaddr *);
2953 isc_result_t icmp_echoreply (omapi_object_t *);
2954 
2955 /* dns.c */
2956 isc_result_t enter_dns_zone (struct dns_zone *);
2957 isc_result_t dns_zone_lookup (struct dns_zone **, const char *);
2958 int dns_zone_dereference (struct dns_zone **, const char *, int);
2959 #if defined (NSUPDATE)
2960 #define FIND_FORWARD 0
2961 #define FIND_REVERSE 1
2962 isc_result_t find_tsig_key (ns_tsig_key **, const char *, struct dns_zone *);
2963 void tkey_free (ns_tsig_key **);
2964 isc_result_t find_cached_zone (dhcp_ddns_cb_t *, int);
2965 void forget_zone (struct dns_zone **);
2966 void repudiate_zone (struct dns_zone **);
2967 int get_dhcid (dhcp_ddns_cb_t *, int, const u_int8_t *, unsigned);
2968 void dhcid_tolease (struct data_string *, struct data_string *);
2969 isc_result_t dhcid_fromlease (struct data_string *, struct data_string *);
2970 isc_result_t ddns_update_fwd(struct data_string *, struct iaddr,
2971  struct data_string *, unsigned long, unsigned,
2972  unsigned);
2973 isc_result_t ddns_remove_fwd(struct data_string *,
2974  struct iaddr, struct data_string *);
2975 #endif /* NSUPDATE */
2976 
2977 dhcp_ddns_cb_t *ddns_cb_alloc(const char *file, int line);
2978 void ddns_cb_free (dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
2979 void ddns_cb_forget_zone (dhcp_ddns_cb_t *ddns_cb);
2980 isc_result_t
2981 ddns_modify_fwd(dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
2982 isc_result_t
2983 ddns_modify_ptr(dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
2984 void
2985 ddns_cancel(dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
2986 
2987 /* resolv.c */
2988 extern char path_resolv_conf [];
2989 extern struct name_server *name_servers;
2990 extern struct domain_search_list *domains;
2991 
2992 void read_resolv_conf (TIME);
2993 struct name_server *first_name_server (void);
2994 
2995 /* inet_addr.c */
2996 #ifdef NEED_INET_ATON
2997 int inet_aton (const char *, struct in_addr *);
2998 #endif
2999 
3000 /* class.c */
3001 extern int have_billing_classes;
3006 extern struct executable_statement *default_classification_rules;
3007 
3008 void classification_setup (void);
3009 void classify_client (struct packet *);
3010 int check_collection (struct packet *, struct lease *, struct collection *);
3011 void classify (struct packet *, struct class *);
3012 isc_result_t unlink_class (struct class **class);
3013 isc_result_t find_class (struct class **, const char *,
3014  const char *, int);
3015 int unbill_class (struct lease *, struct class *);
3016 int bill_class (struct lease *, struct class *);
3017 
3018 /* execute.c */
3019 int execute_statements (struct binding_value **result,
3020  struct packet *, struct lease *,
3021  struct client_state *,
3022  struct option_state *, struct option_state *,
3023  struct binding_scope **,
3024  struct executable_statement *,
3025  struct on_star *);
3026 void execute_statements_in_scope (struct binding_value **result,
3027  struct packet *, struct lease *,
3028  struct client_state *,
3029  struct option_state *,
3030  struct option_state *,
3031  struct binding_scope **,
3032  struct group *, struct group *,
3033  struct on_star *);
3034 int executable_statement_dereference (struct executable_statement **,
3035  const char *, int);
3036 void write_statements (FILE *, struct executable_statement *, int);
3037 int find_matching_case (struct executable_statement **,
3038  struct packet *, struct lease *, struct client_state *,
3039  struct option_state *, struct option_state *,
3040  struct binding_scope **,
3041  struct expression *, struct executable_statement *);
3042 int executable_statement_foreach (struct executable_statement *,
3043  int (*) (struct executable_statement *,
3044  void *, int), void *, int);
3045 
3046 /* comapi.c */
3052 
3053 void dhcp_common_objects_setup (void);
3054 
3057  omapi_typed_data_t *);
3060  omapi_value_t **);
3061 isc_result_t dhcp_group_destroy (omapi_object_t *, const char *, int);
3063  const char *, va_list);
3064 isc_result_t dhcp_group_stuff_values (omapi_object_t *,
3065  omapi_object_t *,
3066  omapi_object_t *);
3067 isc_result_t dhcp_group_lookup (omapi_object_t **,
3069 isc_result_t dhcp_group_create (omapi_object_t **,
3070  omapi_object_t *);
3071 isc_result_t dhcp_group_remove (omapi_object_t *,
3072  omapi_object_t *);
3073 
3076  omapi_typed_data_t *);
3079  omapi_value_t **);
3080 isc_result_t dhcp_control_destroy (omapi_object_t *, const char *, int);
3082  const char *, va_list);
3084  omapi_object_t *,
3085  omapi_object_t *);
3086 isc_result_t dhcp_control_lookup (omapi_object_t **,
3088 isc_result_t dhcp_control_create (omapi_object_t **,
3089  omapi_object_t *);
3090 isc_result_t dhcp_control_remove (omapi_object_t *,
3091  omapi_object_t *);
3092 
3095  omapi_typed_data_t *);
3098  omapi_value_t **);
3099 isc_result_t dhcp_subnet_destroy (omapi_object_t *, const char *, int);
3101  const char *, va_list);
3103  omapi_object_t *,
3104  omapi_object_t *);
3105 isc_result_t dhcp_subnet_lookup (omapi_object_t **,
3107 isc_result_t dhcp_subnet_create (omapi_object_t **,
3108  omapi_object_t *);
3109 isc_result_t dhcp_subnet_remove (omapi_object_t *,
3110  omapi_object_t *);
3111 
3113  omapi_object_t *,
3115  omapi_typed_data_t *);
3117  omapi_object_t *,
3119  omapi_value_t **);
3120 isc_result_t dhcp_shared_network_destroy (omapi_object_t *, const char *, int);
3122  const char *, va_list);
3124  omapi_object_t *,
3125  omapi_object_t *);
3129  omapi_object_t *);
3131  omapi_object_t *);
3132 
3133 /* omapi.c */
3134 extern int (*dhcp_interface_shutdown_hook) (struct interface_info *);
3135 
3140 
3141 #if defined (FAILOVER_PROTOCOL)
3145 #endif
3146 
3147 void dhcp_db_objects_setup (void);
3148 
3151  omapi_typed_data_t *);
3154  omapi_value_t **);
3155 isc_result_t dhcp_lease_destroy (omapi_object_t *, const char *, int);
3157  const char *, va_list);
3158 isc_result_t dhcp_lease_stuff_values (omapi_object_t *,
3159  omapi_object_t *,
3160  omapi_object_t *);
3161 isc_result_t dhcp_lease_lookup (omapi_object_t **,
3163 isc_result_t dhcp_lease_create (omapi_object_t **,
3164  omapi_object_t *);
3165 isc_result_t dhcp_lease_remove (omapi_object_t *,
3166  omapi_object_t *);
3169  omapi_typed_data_t *);
3172  omapi_value_t **);
3173 isc_result_t dhcp_host_destroy (omapi_object_t *, const char *, int);
3175  const char *, va_list);
3176 isc_result_t dhcp_host_stuff_values (omapi_object_t *,
3177  omapi_object_t *,
3178  omapi_object_t *);
3179 isc_result_t dhcp_host_lookup (omapi_object_t **,
3181 isc_result_t dhcp_host_create (omapi_object_t **,
3182  omapi_object_t *);
3183 isc_result_t dhcp_host_remove (omapi_object_t *,
3184  omapi_object_t *);
3187  omapi_typed_data_t *);
3190  omapi_value_t **);
3191 isc_result_t dhcp_pool_destroy (omapi_object_t *, const char *, int);
3193  const char *, va_list);
3194 isc_result_t dhcp_pool_stuff_values (omapi_object_t *,
3195  omapi_object_t *,
3196  omapi_object_t *);
3197 isc_result_t dhcp_pool_lookup (omapi_object_t **,
3199 isc_result_t dhcp_pool_create (omapi_object_t **,
3200  omapi_object_t *);
3201 isc_result_t dhcp_pool_remove (omapi_object_t *,
3202  omapi_object_t *);
3205  omapi_typed_data_t *);
3208  omapi_value_t **);
3209 isc_result_t dhcp_class_destroy (omapi_object_t *, const char *, int);
3211  const char *, va_list);
3212 isc_result_t dhcp_class_stuff_values (omapi_object_t *,
3213  omapi_object_t *,
3214  omapi_object_t *);
3215 isc_result_t dhcp_class_lookup (omapi_object_t **,
3217 isc_result_t dhcp_class_create (omapi_object_t **,
3218  omapi_object_t *);
3219 isc_result_t dhcp_class_remove (omapi_object_t *,
3220  omapi_object_t *);
3223  omapi_typed_data_t *);
3226  omapi_value_t **);
3227 isc_result_t dhcp_subclass_destroy (omapi_object_t *, const char *, int);
3229  const char *, va_list);
3231  omapi_object_t *,
3232  omapi_object_t *);
3233 isc_result_t dhcp_subclass_lookup (omapi_object_t **,
3235 isc_result_t dhcp_subclass_create (omapi_object_t **,
3236  omapi_object_t *);
3237 isc_result_t dhcp_subclass_remove (omapi_object_t *,
3238  omapi_object_t *);
3240  omapi_object_t *,
3242  omapi_typed_data_t *);
3244  omapi_object_t *,
3246  omapi_value_t **);
3247 isc_result_t dhcp_interface_destroy (omapi_object_t *,
3248  const char *, int);
3250  const char *,
3251  va_list ap);
3253  omapi_object_t *,
3254  omapi_object_t *);
3255 isc_result_t dhcp_interface_lookup (omapi_object_t **,
3256  omapi_object_t *,
3257  omapi_object_t *);
3258 isc_result_t dhcp_interface_create (omapi_object_t **,
3259  omapi_object_t *);
3260 isc_result_t dhcp_interface_remove (omapi_object_t *,
3261  omapi_object_t *);
3262 void interface_stash (struct interface_info *);
3263 void interface_snorf (struct interface_info *, int);
3264 
3265 isc_result_t binding_scope_set_value (struct binding_scope *, int,
3267  omapi_typed_data_t *);
3268 isc_result_t binding_scope_get_value (omapi_value_t **,
3269  struct binding_scope *,
3272  struct binding_scope *);
3273 
3274 void register_eventhandler(struct eventqueue **, void (*handler)(void *));
3275 void unregister_eventhandler(struct eventqueue **, void (*handler)(void *));
3276 void trigger_event(struct eventqueue **);
3277 
3278 /* mdb.c */
3279 
3280 extern struct subnet *subnets;
3281 extern struct shared_network *shared_networks;
3283 extern host_hash_t *host_uid_hash;
3284 extern host_hash_t *host_name_hash;
3288 
3290 
3291 extern int numclasseswritten;
3292 
3293 
3294 isc_result_t enter_class (struct class *, int, int);
3295 isc_result_t delete_class (struct class *, int);
3296 isc_result_t enter_host (struct host_decl *, int, int);
3297 isc_result_t delete_host (struct host_decl *, int);
3298 void change_host_uid(struct host_decl *host, const char *data, int len);
3299 int find_hosts_by_haddr (struct host_decl **, int,
3300  const unsigned char *, unsigned,
3301  const char *, int);
3302 int find_hosts_by_uid (struct host_decl **, const unsigned char *,
3303  unsigned, const char *, int);
3304 int find_hosts_by_option(struct host_decl **, struct packet *,
3305  struct option_state *, const char *, int);
3306 int find_host_for_network (struct subnet **, struct host_decl **,
3307  struct iaddr *, struct shared_network *);
3308 void new_address_range (struct parse *, struct iaddr, struct iaddr,
3309  struct subnet *, struct pool *,
3310  struct lease **);
3311 isc_result_t dhcp_lease_free (omapi_object_t *, const char *, int);
3312 isc_result_t dhcp_lease_get (omapi_object_t **, const char *, int);
3313 int find_grouped_subnet (struct subnet **, struct shared_network *,
3314  struct iaddr, const char *, int);
3315 int find_subnet(struct subnet **, struct iaddr, const char *, int);
3316 void enter_shared_network (struct shared_network *);
3317 void new_shared_network_interface (struct parse *,
3318  struct shared_network *,
3319  const char *);
3320 int subnet_inner_than(const struct subnet *, const struct subnet *, int);
3321 void enter_subnet (struct subnet *);
3322 void enter_lease (struct lease *);
3323 int supersede_lease (struct lease *, struct lease *, int, int, int);
3324 void make_binding_state_transition (struct lease *);
3325 int lease_copy (struct lease **, struct lease *, const char *, int);
3326 void release_lease (struct lease *, struct packet *);
3327 void abandon_lease (struct lease *, const char *);
3328 #if 0
3329 /* this appears to be unused and I plan to remove it SAR */
3330 void dissociate_lease (struct lease *);
3331 #endif
3332 void pool_timer (void *);
3333 int find_lease_by_uid (struct lease **, const unsigned char *,
3334  unsigned, const char *, int);
3335 int find_lease_by_hw_addr (struct lease **, const unsigned char *,
3336  unsigned, const char *, int);
3337 int find_lease_by_ip_addr (struct lease **, struct iaddr,
3338  const char *, int);
3339 void uid_hash_add (struct lease *);
3340 void uid_hash_delete (struct lease *);
3341 void hw_hash_add (struct lease *);
3342 void hw_hash_delete (struct lease *);
3343 int write_leases (void);
3344 int write_leases6(void);
3345 int lease_enqueue (struct lease *);
3346 isc_result_t lease_instantiate(const void *, unsigned, void *);
3347 void expire_all_pools (void);
3348 void dump_subnets (void);
3349 #if defined (DEBUG_MEMORY_LEAKAGE) || \
3350  defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
3351 void free_everything (void);
3352 #endif
3353 
3354 /* failover.c */
3355 #if defined (FAILOVER_PROTOCOL)
3356 extern dhcp_failover_state_t *failover_states;
3357 void dhcp_failover_startup (void);
3359 isc_result_t enter_failover_peer (dhcp_failover_state_t *);
3360 isc_result_t find_failover_peer (dhcp_failover_state_t **,
3361  const char *, const char *, int);
3364  const char *, va_list);
3366  omapi_object_t *,
3368  omapi_typed_data_t *);
3370  omapi_object_t *,
3372  omapi_value_t **);
3374  const char *, int);
3376  omapi_object_t *,
3377  omapi_object_t *);
3378 isc_result_t dhcp_failover_listen (omapi_object_t *);
3379 
3381  const char *,
3382  va_list);
3384  omapi_object_t *,
3386  omapi_typed_data_t *);
3388  omapi_object_t *,
3390  omapi_value_t **);
3392  const char *, int);
3394  omapi_object_t *,
3395  omapi_object_t *);
3396 isc_result_t dhcp_failover_register (omapi_object_t *);
3398  const char *, va_list);
3399 isc_result_t dhcp_failover_state_transition (dhcp_failover_state_t *,
3400  const char *);
3401 isc_result_t dhcp_failover_set_service_state (dhcp_failover_state_t *state);
3402 isc_result_t dhcp_failover_set_state (dhcp_failover_state_t *,
3403  enum failover_state);
3404 isc_result_t dhcp_failover_peer_state_changed (dhcp_failover_state_t *,
3405  failover_message_t *);
3406 void dhcp_failover_pool_rebalance (void *);
3407 void dhcp_failover_pool_check (struct pool *);
3408 int dhcp_failover_state_pool_check (dhcp_failover_state_t *);
3409 void dhcp_failover_timeout (void *);
3410 void dhcp_failover_send_contact (void *);
3411 isc_result_t dhcp_failover_send_state (dhcp_failover_state_t *);
3412 isc_result_t dhcp_failover_send_updates (dhcp_failover_state_t *);
3413 int dhcp_failover_queue_update (struct lease *, int);
3414 int dhcp_failover_send_acks (dhcp_failover_state_t *);
3415 void dhcp_failover_toack_queue_timeout (void *);
3416 int dhcp_failover_queue_ack (dhcp_failover_state_t *, failover_message_t *msg);
3417 void dhcp_failover_ack_queue_remove (dhcp_failover_state_t *, struct lease *);
3419  omapi_object_t *,
3421  omapi_typed_data_t *);
3422 void dhcp_failover_keepalive (void *);
3423 void dhcp_failover_reconnect (void *);
3424 void dhcp_failover_startup_timeout (void *);
3426 void dhcp_failover_listener_restart (void *);
3427 void dhcp_failover_auto_partner_down(void *vs);
3429  omapi_object_t *,
3431  omapi_value_t **);
3433  const char *, int);
3435  omapi_object_t *,
3436  omapi_object_t *);
3438  omapi_object_t *,
3439  omapi_object_t *);
3441  omapi_object_t *);
3443  omapi_object_t *);
3444 int dhcp_failover_state_match (dhcp_failover_state_t *, u_int8_t *, unsigned);
3445 int dhcp_failover_state_match_by_name(dhcp_failover_state_t *,
3446  failover_option_t *);
3447 const char *dhcp_failover_reject_reason_print (int);
3449 const char *dhcp_failover_message_name (unsigned);
3450 const char *dhcp_failover_option_name (unsigned);
3451 failover_option_t *dhcp_failover_option_printf (unsigned, char *,
3452  unsigned *,
3453  unsigned,
3454  const char *, ...)
3455  __attribute__((__format__(__printf__,5,6)));
3456 failover_option_t *dhcp_failover_make_option (unsigned, char *,
3457  unsigned *, unsigned, ...);
3458 isc_result_t dhcp_failover_put_message (dhcp_failover_link_t *,
3459  omapi_object_t *, int, u_int32_t, ...);
3460 isc_result_t dhcp_failover_send_connect (omapi_object_t *);
3461 isc_result_t dhcp_failover_send_connectack (omapi_object_t *,
3462  dhcp_failover_state_t *,
3463  int, const char *);
3464 isc_result_t dhcp_failover_send_disconnect (omapi_object_t *,
3465  int, const char *);
3466 isc_result_t dhcp_failover_send_bind_update (dhcp_failover_state_t *,
3467  struct lease *);
3468 isc_result_t dhcp_failover_send_bind_ack (dhcp_failover_state_t *,
3469  failover_message_t *,
3470  int, const char *);
3471 isc_result_t dhcp_failover_send_poolreq (dhcp_failover_state_t *);
3472 isc_result_t dhcp_failover_send_poolresp (dhcp_failover_state_t *, int);
3473 isc_result_t dhcp_failover_send_update_request (dhcp_failover_state_t *);
3474 isc_result_t dhcp_failover_send_update_request_all (dhcp_failover_state_t *);
3475 isc_result_t dhcp_failover_send_update_done (dhcp_failover_state_t *);
3476 isc_result_t dhcp_failover_process_bind_update (dhcp_failover_state_t *,
3477  failover_message_t *);
3478 isc_result_t dhcp_failover_process_bind_ack (dhcp_failover_state_t *,
3479  failover_message_t *);
3480 isc_result_t dhcp_failover_generate_update_queue (dhcp_failover_state_t *,
3481  int);
3482 isc_result_t dhcp_failover_process_update_request (dhcp_failover_state_t *,
3483  failover_message_t *);
3484 isc_result_t dhcp_failover_process_update_request_all (dhcp_failover_state_t *,
3485  failover_message_t *);
3486 isc_result_t dhcp_failover_process_update_done (dhcp_failover_state_t *,
3487  failover_message_t *);
3488 void ia_remove_all_lease(struct ia_xx *ia, const char *file, int line);
3489 void dhcp_failover_recover_done (void *);
3490 void failover_print (char *, unsigned *, unsigned, const char *);
3491 void update_partner (struct lease *);
3492 int load_balance_mine (struct packet *, dhcp_failover_state_t *);
3493 int peer_wants_lease (struct lease *);
3495  dhcp_failover_state_t *,
3497  u_int32_t);
3498 binding_state_t
3500  dhcp_failover_state_t *,
3501  binding_state_t, u_int32_t);
3502 int lease_mine_to_reallocate (struct lease *);
3503 
3504 OMAPI_OBJECT_ALLOC_DECL (dhcp_failover_state, dhcp_failover_state_t,
3505  dhcp_type_failover_state)
3507  dhcp_type_failover_listener)
3508 OMAPI_OBJECT_ALLOC_DECL (dhcp_failover_link, dhcp_failover_link_t,
3509  dhcp_type_failover_link)
3510 #endif /* FAILOVER_PROTOCOL */
3511 
3512 const char *binding_state_print (enum failover_state);
3513 
3514 /* ldap.c */
3515 #if defined(LDAP_CONFIGURATION)
3516 extern struct enumeration ldap_methods;
3517 #if defined (LDAP_USE_SSL)
3518 extern struct enumeration ldap_ssl_usage_enum;
3519 extern struct enumeration ldap_tls_reqcert_enum;
3520 extern struct enumeration ldap_tls_crlcheck_enum;
3521 #endif
3522 isc_result_t ldap_read_config (void);
3523 int find_haddr_in_ldap (struct host_decl **, int, unsigned,
3524  const unsigned char *, const char *, int);
3525 int find_subclass_in_ldap (struct class *, struct class **,
3526  struct data_string *);
3527 #endif
3528 
3529 /* mdb6.c */
3530 HASH_FUNCTIONS_DECL(ia, unsigned char *, struct ia_xx, ia_hash_t)
3531 HASH_FUNCTIONS_DECL(iasubopt, struct in6_addr *, struct iasubopt,
3533 
3534 isc_result_t iasubopt_allocate(struct iasubopt **iasubopt,
3535  const char *file, int line);
3536 isc_result_t iasubopt_reference(struct iasubopt **iasubopt,
3537  struct iasubopt *src,
3538  const char *file, int line);
3539 isc_result_t iasubopt_dereference(struct iasubopt **iasubopt,
3540  const char *file, int line);
3541 
3542 isc_result_t ia_make_key(struct data_string *key, u_int32_t iaid,
3543  const char *duid, unsigned int duid_len,
3544  const char *file, int line);
3545 isc_result_t ia_allocate(struct ia_xx **ia, u_int32_t iaid,
3546  const char *duid, unsigned int duid_len,
3547  const char *file, int line);
3548 isc_result_t ia_reference(struct ia_xx **ia, struct ia_xx *src,
3549  const char *file, int line);
3550 isc_result_t ia_dereference(struct ia_xx **ia,
3551  const char *file, int line);
3552 isc_result_t ia_add_iasubopt(struct ia_xx *ia, struct iasubopt *iasubopt,
3553  const char *file, int line);
3554 void ia_remove_iasubopt(struct ia_xx *ia, struct iasubopt *iasubopt,
3555  const char *file, int line);
3556 isc_boolean_t ia_equal(const struct ia_xx *a, const struct ia_xx *b);
3557 
3558 isc_result_t ipv6_pool_allocate(struct ipv6_pool **pool, u_int16_t type,
3559  const struct in6_addr *start_addr,
3560  int bits, int units,
3561  const char *file, int line);
3562 isc_result_t ipv6_pool_reference(struct ipv6_pool **pool,
3563  struct ipv6_pool *src,
3564  const char *file, int line);
3565 isc_result_t ipv6_pool_dereference(struct ipv6_pool **pool,
3566  const char *file, int line);
3567 isc_result_t create_lease6(struct ipv6_pool *pool,
3568  struct iasubopt **addr,
3569  unsigned int *attempts,
3570  const struct data_string *uid,
3571  time_t soft_lifetime_end_time);
3572 isc_result_t add_lease6(struct ipv6_pool *pool,
3573  struct iasubopt *lease,
3574  time_t valid_lifetime_end_time);
3575 isc_result_t renew_lease6(struct ipv6_pool *pool, struct iasubopt *lease);
3576 isc_result_t expire_lease6(struct iasubopt **leasep,
3577  struct ipv6_pool *pool, time_t now);
3578 isc_result_t release_lease6(struct ipv6_pool *pool, struct iasubopt *lease);
3579 isc_result_t decline_lease6(struct ipv6_pool *pool, struct iasubopt *lease);
3580 isc_boolean_t lease6_exists(const struct ipv6_pool *pool,
3581  const struct in6_addr *addr);
3582 isc_boolean_t lease6_usable(struct iasubopt *lease);
3583 isc_result_t cleanup_lease6(ia_hash_t *ia_table,
3584  struct ipv6_pool *pool,
3585  struct iasubopt *lease,
3586  struct ia_xx *ia);
3587 isc_result_t mark_lease_unavailble(struct ipv6_pool *pool,
3588  const struct in6_addr *addr);
3589 isc_result_t create_prefix6(struct ipv6_pool *pool,
3590  struct iasubopt **pref,
3591  unsigned int *attempts,
3592  const struct data_string *uid,
3593  time_t soft_lifetime_end_time);
3594 isc_boolean_t prefix6_exists(const struct ipv6_pool *pool,
3595  const struct in6_addr *pref, u_int8_t plen);
3596 
3597 isc_result_t add_ipv6_pool(struct ipv6_pool *pool);
3598 isc_result_t find_ipv6_pool(struct ipv6_pool **pool, u_int16_t type,
3599  const struct in6_addr *addr);
3600 isc_boolean_t ipv6_in_pool(const struct in6_addr *addr,
3601  const struct ipv6_pool *pool);
3602 isc_result_t ipv6_pond_allocate(struct ipv6_pond **pond,
3603  const char *file, int line);
3604 isc_result_t ipv6_pond_reference(struct ipv6_pond **pond,
3605  struct ipv6_pond *src,
3606  const char *file, int line);
3607 isc_result_t ipv6_pond_dereference(struct ipv6_pond **pond,
3608  const char *file, int line);
3609 
3610 isc_result_t renew_leases(struct ia_xx *ia);
3611 isc_result_t release_leases(struct ia_xx *ia);
3612 isc_result_t decline_leases(struct ia_xx *ia);
3613 void schedule_lease_timeout(struct ipv6_pool *pool);
3615 
3616 void mark_hosts_unavailable(void);
3617 void mark_phosts_unavailable(void);
3618 void mark_interfaces_unavailable(void);
3619 
3620 #define MAX_ADDRESS_STRING_LEN \
3621  (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"))
void parse_subnet6_declaration(struct parse *, struct shared_network *)
Definition: confpars.c:2698
isc_result_t dhcp_failover_state_signal(omapi_object_t *, const char *, va_list)
int txcount
Definition: dhcpd.h:1201
void convert_subnet_decl(struct parse *, jrefproto)
void do_packet6(struct interface_info *, const char *, int, int, const struct iaddr *, isc_boolean_t)
void tkey_free(ns_tsig_key **)
struct lease_state * next
Definition: dhcpd.h:594
isc_result_t end_parse(struct parse **)
Definition: conflex.c:103
isc_result_t dhcp_group_create(omapi_object_t **, omapi_object_t *)
Definition: comapi.c:400
ia_hash_t * ia_ta_active
void if_register_send(struct interface_info *)
void hash_dump(struct hash_table *)
Definition: print.c:333
int backoff
Definition: dhcpd.h:1373
void initialize_server_option_spaces(void)
Definition: stables.c:411
struct in_addr limited_broadcast
Definition: discover.c:50
isc_result_t dhcp_failover_send_poolreq(dhcp_failover_state_t *)
TIME IRT
Definition: dhcpd.h:1205
isc_result_t renew_lease6(struct ipv6_pool *pool, struct iasubopt *lease)
Renew a lease in the pool.
Definition: mdb6.c:1415
struct ipv6_pond * next
Definition: dhcpd.h:1595
void(* dhcpv6_packet_handler)(struct interface_info *, const char *, int, int, const struct iaddr *, isc_boolean_t)
int find_grouped_subnet(struct subnet **, struct shared_network *, struct iaddr, const char *, int)
Definition: mdb.c:900
int mockup_lease(struct lease **, struct packet *, struct shared_network *, struct host_decl *)
Definition: dhcp.c:4403
struct class * nic
Definition: dhcpd.h:977
Definition: tree.h:31
int expression_allocate(struct expression **, const char *, int)
Definition: alloc.c:427
int line
Definition: dhcpd.h:281
TIME valid_from
Definition: dhcpd.h:1601
int group_dereference(struct group **, const char *, int)
Definition: alloc.c:206
struct client_lease * alias
Definition: dhcpd.h:1176
int parse_ip6_addr_expr(struct expression **, struct parse *)
Definition: parse.c:454
struct lease * new_leases(unsigned, const char *, int)
isc_result_t dhcp_subnet_create(omapi_object_t **, omapi_object_t *)
Definition: comapi.c:743
isc_result_t dhcp_host_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
Definition: omapi.c:1293
int find_lease(struct lease **, struct packet *, struct shared_network *, int *, int *, struct lease *, const char *, int)
Definition: dhcp.c:3649
void mark_hosts_unavailable(void)
Definition: mdb6.c:2245
TIME RT
Definition: dhcpd.h:1204
struct group * root_group
Definition: memory.c:31
void bind_lease(struct client_state *, struct in_addr *)
Definition: dhclient.c:1638
void(* bootp_packet_handler)(struct interface_info *, struct dhcp_packet *, unsigned, unsigned int, struct iaddr, struct hardware *)
Definition: discover.c:55
TIME interval
Definition: dhcpd.h:1182
isc_result_t dhcp_failover_state_stuff(omapi_object_t *, omapi_object_t *, omapi_object_t *)
lease_id_hash_t * lease_uid_hash
Definition: mdb.c:38
const char int line
Definition: dhcpd.h:3535
struct class known_class
Definition: dhcpd.h:3003
void make_client_options(struct client_state *, struct client_lease *, u_int8_t *, struct option_cache *, struct iaddr *, struct option **, struct option_state **)
Definition: dhclient.c:2750
void parse_server_duid_conf(struct parse *cfile)
void start_selecting6(struct client_state *client)
int quiet_interface_discovery
Definition: discover.c:42
isc_result_t dhcp_host_signal_handler(omapi_object_t *, const char *, va_list)
Definition: omapi.c:1152
int score
Definition: dhcpd.h:1067
int data_string_sprintfa(struct data_string *ds, const char *fmt,...)
Definition: tree.c:57
isc_result_t dhcp_failover_send_connectack(omapi_object_t *, dhcp_failover_state_t *, int, const char *)
isc_result_t dhcp_failover_link_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
u_int32_t flags
Definition: dhcpd.h:357
void assemble_ethernet_header(struct interface_info *, unsigned char *, unsigned *, struct hardware *)
u_int8_t plen
Definition: dhcpd.h:1035
void parse_trace_setup(void)
struct agent_options * next
Definition: dhcpd.h:344
u_int32_t checksum(unsigned char *, unsigned, u_int32_t)
Definition: packet.c:45
struct dns_zone * zone
Definition: dhcpd.h:1657
void parse_host_declaration(struct parse *, struct group *)
Definition: confpars.c:1817
void trace_conf_input(trace_type_t *, unsigned, char *)
u_int32_t xid
Definition: dhcpd.h:612
isc_result_t interface_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
void state_bound(void *)
Definition: dhclient.c:1723
isc_result_t find_tsig_key(ns_tsig_key **, const char *, struct dns_zone *)
isc_result_t ddns_remove_fwd(struct data_string *, struct iaddr, struct data_string *)
int write_failover_state(dhcp_failover_state_t *)
int dhcp_failover_state_match_by_name(dhcp_failover_state_t *, failover_option_t *)
isc_result_t dhcp_failover_listener_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
void dhcprequest(struct packet *, int, struct lease *)
Definition: dhcp.c:434
int parse_executable_statement(struct executable_statement **, struct parse *, int *, enum expression_context)
Definition: parse.c:2115
failover_option_t failover_option_t * dhcp_failover_make_option(unsigned, char *, unsigned *, unsigned,...)
void client_option_envadd(struct option_cache *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *)
Definition: dhclient.c:3720
struct dns_question * question
Definition: dhcpd.h:1364
int op_precedence(enum expr_op, enum expr_op)
Definition: tree.c:3137
isc_result_t dhcp_set_control_state(control_object_state_t oldstate, control_object_state_t newstate)
Definition: dhclient.c:4410
struct enumeration * find_enumeration(const char *, int)
Definition: parse.c:43
int struct expression * parse_domain_list(struct parse *cfile, int)
Definition: parse.c:5647
char * parse_host_name(struct parse *)
Definition: parse.c:186
struct eventqueue * rw_queue_empty
Definition: dispatch.c:37
isc_result_t dhcp_failover_send_connect(omapi_object_t *)
int dhcp_max_agent_option_packet_length
Definition: dhclient.c:64
omapi_object_type_t * dhcp_type_shared_network
struct subnet * subnets
Definition: dhcpd.h:938
void read_resolv_conf(TIME)
Definition: resolv.c:36
void assemble_udp_ip_header(struct interface_info *, unsigned char *, unsigned *, u_int32_t, u_int32_t, u_int32_t, unsigned char *, unsigned)
int icmp_echorequest(struct iaddr *)
Definition: icmp.c:129
struct group * on_receipt
Definition: dhcpd.h:1099
void dhcpleasequery(struct packet *, int)
int parse_non_binary(struct expression **, struct parse *, int *, enum expression_context)
Definition: parse.c:3557
isc_result_t add_lease6(struct ipv6_pool *pool, struct iasubopt *lease, time_t valid_lifetime_end_time)
Definition: mdb6.c:1226
Definition: dhcpd.h:507
isc_result_t ia_make_key(struct data_string *key, u_int32_t iaid, const char *duid, unsigned int duid_len, const char *file, int line)
Definition: mdb6.c:310
const char * hardware_types[256]
Definition: tables.c:658
isc_result_t dhcp_subnet_signal_handler(omapi_object_t *, const char *, va_list)
Definition: comapi.c:683
int find_host_for_network(struct subnet **, struct host_decl **, struct iaddr *, struct shared_network *)
Definition: mdb.c:709
Definition: tree.h:94
struct shared_network * shared_network
Definition: dhcpd.h:1243
int parse_on_statement(struct executable_statement **, struct parse *, int *)
Definition: parse.c:3109
struct group * group
Definition: dhcpd.h:907
u_int8_t hlen
Definition: dhcpd.h:440
omapi_object_type_t * dhcp_type_failover_link
omapi_object_type_t * dhcp_type_pool
Definition: omapi.c:45
int evaluate_numeric_expression(unsigned long *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct expression *)
Definition: tree.c:2173
struct shared_network * shared_networks
Definition: mdb.c:34
int do_forward_update
Definition: dhcpd.h:1148
struct dhcp_ddns_cb * ddns_cb
Definition: dhcpd.h:590
int parse_option_code_definition(struct parse *, struct option *)
Definition: parse.c:1554
Definition: dhcpd.h:1530
isc_result_t dhcp_group_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: comapi.c:129
dhcp_state
Definition: dhcpd.h:1077
unsigned char * uid
Definition: dhcpd.h:525
isc_result_t dhcp_subnet_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: comapi.c:605
void parse_fixed_prefix6(struct parse *cfile, struct host_decl *host_decl)
struct name_server * name_servers
Definition: resolv.c:32
u_int16_t id
Definition: dhcpd.h:1360
void discover_interfaces(int)
Definition: discover.c:552
struct permit * new_permit(const char *, int)
int got_requested_address
Definition: dhcpd.h:607
u_int32_t renew
Definition: dhcpd.h:1055
struct binding_scope * global_scope
Definition: tree.c:39
void expire_all_pools(void)
Definition: mdb.c:2666
isc_boolean_t server_duid_isset(void)
struct in_addr local_address
Definition: discover.c:53
struct executable_statement * default_classification_rules
Definition: class.c:39
Definition: dhcpd.h:1091
void if_reinitialize_send(struct interface_info *)
int get_dhcid(dhcp_ddns_cb_t *, int, const u_int8_t *, unsigned)
void parse_interface_declaration(struct parse *, struct client_config *, char *)
Definition: clparse.c:900
u_int8_t pref
Definition: dhcpd.h:1068
isc_result_t dhcp_host_destroy(omapi_object_t *, const char *, int)
Definition: omapi.c:1124
int parse_ip_addr(struct parse *, struct iaddr *)
Definition: parse.c:326
void setup_server_source_address(struct in_addr *from, struct option_state *options, struct packet *packet)
Definition: dhcp.c:4862
struct group_object * n_dynamic
Definition: dhcpd.h:839
struct isc_heap isc_heap_t
Definition: heap.h:47
int outstanding_pings
Definition: dhcp.c:38
tvunref_t unref
Definition: dhcpd.h:1319
u_int16_t secs
Definition: dhcpd.h:613
int units
Definition: dhcpd.h:1569
int max_iasubopt
Definition: dhcpd.h:1535
void icmp_startup(int, void(*)(struct iaddr, u_int8_t *, int))
enum dhcp_token peek_raw_token(const char **rval, unsigned *rlen, struct parse *cfile)
Definition: conflex.c:440
void start_release6(struct client_state *client)
void dhcpv6_leasequery(struct data_string *, struct packet *)
u_int16_t type
Definition: dhcpd.h:1343
unsigned len
Definition: dhcpd.h:1368
isc_result_t ia_dereference(struct ia_xx **ia, const char *file, int line)
Definition: mdb6.c:402
struct lease_state * state
Definition: dhcpd.h:568
struct class * superclass
Definition: dhcpd.h:978
void start_info_request6(struct client_state *client)
void parse_pool6_statement(struct parse *, struct group *, int)
void state_init(void *)
Definition: dhclient.c:1347
void dhcpack(struct packet *)
Definition: dhclient.c:1469
int leases_consumed
Definition: dhcpd.h:983
int evaluate_option_cache(struct data_string *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct option_cache *, const char *, int)
Definition: tree.c:2643
int permit_list_match(struct permit *, struct permit *)
Definition: confpars.c:1554
int fd
Definition: dhcpd.h:1330
Definition: dhcpd.h:948
struct universe server_universe
Definition: stables.c:175
void convert_numeric_aggregate(struct parse *, jrefproto, int, int, int, int)
isc_result_t interface_signal_handler(omapi_object_t *, const char *, va_list)
isc_result_t supersede_group(struct group_object *, int)
Definition: memory.c:74
char * domain
Definition: dhcpd.h:326
int write_billing_class(struct class *)
Definition: db.c:970
void dhcp_failover_pool_check(struct pool *)
int binding_scope_allocate(struct binding_scope **, const char *, int)
Definition: alloc.c:1195
TIME first_sending
Definition: dhcpd.h:1181
void script_init(struct client_state *, const char *, struct string_list *)
Definition: dhclient.c:3689
isc_result_t unlink_class(struct class **class)
Definition: class.c:217
ssize_t decode_udp_ip_header(struct interface_info *, unsigned char *, unsigned, struct sockaddr_in *, unsigned, unsigned *, int)
isc_result_t dhcp_subclass_signal_handler(omapi_object_t *, const char *, va_list)
Definition: omapi.c:2258
universe_hash_t * universe_hash
Definition: tables.c:916
void interface_snorf(struct interface_info *, int)
Definition: discover.c:1482
int pretty_escape(char **, char *, const unsigned char **, const unsigned char *)
Definition: options.c:4002
control_object_state_t state
Definition: dhcpd.h:480
ssize_t decode_tr_header(struct interface_info *, unsigned char *, unsigned, struct hardware *)
int write_client_lease(struct client_state *, struct client_lease *, int, int)
Definition: dhclient.c:3545
void bootp(struct packet *)
Definition: dhclient.c:1804
int write_lease(struct lease *)
Definition: dhclient.c:1792
void do_packet(struct interface_info *, struct dhcp_packet *, unsigned, unsigned int, struct iaddr, struct hardware *)
Definition: options.c:3789
int max_outstanding_acks
Definition: dhcp.c:45
trace_type_t * interface_trace
size_t buflen
Definition: dhcpd.h:293
const char * pretty_print_option(struct option *, const unsigned char *, unsigned, int, int)
Definition: options.c:1670
void classify(struct packet *, struct class *)
Definition: dhclient.c:1234
void client_dns_update_timeout(void *cp)
struct ipv6_pond * ipv6_pond
Definition: dhcpd.h:941
struct lease * reserved
Definition: dhcpd.h:916
void set_option(struct universe *, struct option_state *, struct option_cache *, enum statement_op)
Definition: options.c:2173
isc_boolean_t lease6_usable(struct iasubopt *lease)
Check if address is available to a lease.
Definition: mdb6.c:1346
isc_result_t ddns_modify_ptr(dhcp_ddns_cb_t *ddns_cb, const char *file, int line)
int heap_index
Definition: dhcpd.h:1515
isc_result_t dhcp_failover_register(omapi_object_t *)
int find_hosts_by_option(struct host_decl **, struct packet *, struct option_state *, const char *, int)
Definition: mdb.c:638
struct client_config top_level_config
Definition: clparse.c:32
char * vendor_space_name
Definition: dhcpd.h:1133
isc_result_t dhcp_failover_link_initiate(omapi_object_t *)
struct timeout * timeouts
Definition: dispatch.c:33
isc_result_t dhcp_lease_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: omapi.c:325
Definition: dhcpd.h:1079
isc_result_t got_one(omapi_object_t *)
Definition: discover.c:1006
int option_state_reference(struct option_state **, struct option_state *, const char *, int)
Definition: alloc.c:884
struct client_state * client
Definition: dhcpd.h:1233
int write_host(struct host_decl *)
Definition: dhclient.c:1798
int bind_ds_value(struct binding_scope **, const char *, struct data_string *)
Definition: tree.c:4016
int check_collection(struct packet *, struct lease *, struct collection *)
Definition: dhclient.c:1226
omapi_object_type_t * dhcp_type_interface
Definition: discover.c:68
isc_result_t dhcp_class_create(omapi_object_t **, omapi_object_t *)
Definition: omapi.c:2188
int refcnt
Definition: dhcpd.h:371
int parse_boolean(struct parse *)
Definition: parse.c:3463
isc_result_t dhcp_interface_signal_handler(omapi_object_t *, const char *, va_list ap)
Definition: discover.c:1212
failover_state
Definition: failover.h:286
OMAPI_OBJECT_PREAMBLE
Definition: dhcpd.h:837
class_hash_t * hash
Definition: dhcpd.h:991
isc_result_t delete_group(struct group_object *, int)
Definition: memory.c:35
int tlpos
Definition: dhcpd.h:282
struct universe nwip_universe
Definition: tables.c:267
isc_result_t dhcp_host_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: omapi.c:1200
u_int32_t wrapsum(u_int32_t)
Definition: packet.c:84
int parse_ip6_addr(struct parse *, struct iaddr *)
Definition: parse.c:395
struct group * on_transmission
Definition: dhcpd.h:1104
int parse_option_token(struct expression **, struct parse *, const char **, struct expression *, int, int)
Definition: parse.c:4951
int interface_or_dummy(struct interface_info **, const char *)
Definition: clparse.c:963
int packet_dereference(struct packet **, const char *, int)
Definition: alloc.c:1082
struct dhcp_ddns_cb * ddns_cb
Definition: dhcpd.h:1524
host_hash_t * host_uid_hash
Definition: mdb.c:36
u_int16_t type
Definition: dhcpd.h:1349
void dhcpinform(struct packet *, int)
Definition: dhcp.c:1006
struct lease * next_pending
Definition: dhcpd.h:582
omapi_object_type_t * dhcp_type_lease
Definition: omapi.c:44
TIME select_interval
Definition: dhcpd.h:1120
isc_result_t ddns_update_fwd(struct data_string *, struct iaddr, struct data_string *, unsigned long, unsigned, unsigned)
struct client_state * client
Definition: dhcpd.h:1290
int option_space_encapsulate(struct data_string *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct data_string *)
Definition: options.c:2907
void assemble_tr_header(struct interface_info *, unsigned char *, unsigned *, struct hardware *)
int can_receive_unicast_unconfigured(struct interface_info *)
struct dns_wakeup * next
Definition: dhcpd.h:1338
int icmp_readsocket(omapi_object_t *)
Definition: icmp.c:120
isc_result_t dhcp_failover_state_create(omapi_object_t **, omapi_object_t *)
isc_result_t dhcp_shared_network_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: comapi.c:755
void db_startup(int, uid_t, gid_t)
char * piaddrmask(struct iaddr *, struct iaddr *)
Definition: inet.c:608
void print_lease(struct lease *)
Definition: print.c:183
int last_ipv6_pool
Definition: dhcpd.h:1605
int is_numeric_expression(struct expression *)
Definition: tree.c:3016
int is_data_expression(struct expression *)
Definition: tree.c:2986
struct executable_statement * on_release
Definition: dhcpd.h:503
void lease_ping_timeout(void *)
Definition: dhcpd.c:1186
struct client_state * next
Definition: dhcpd.h:1159
void lease_pinged(struct iaddr, u_int8_t *, int)
Definition: dhcpd.c:1137
isc_result_t dhcp_failover_listener_stuff(omapi_object_t *, omapi_object_t *, omapi_object_t *)
isc_result_t dhcp_host_create(omapi_object_t **, omapi_object_t *)
Definition: omapi.c:1500
struct string_list * env
Definition: dhcpd.h:1165
void nak_lease(struct packet *, struct iaddr *cip)
Definition: dhcp.c:1609
void uid_hash_add(struct lease *)
Definition: mdb.c:2073
struct lease * abandoned
Definition: dhcpd.h:915
struct group * group
Definition: dhcpd.h:942
struct in_addr * addresses
Definition: dhcpd.h:1247
u_int16_t elapsed
Definition: dhcpd.h:1200
struct name_server * next_server
Definition: dhcpd.h:1372
struct binding * find_binding(struct binding_scope *, const char *)
Definition: tree.c:3691
char * print_dotted_quads(unsigned, const u_int8_t *)
Definition: print.c:470
struct binding * create_binding(struct binding_scope **, const char *)
Definition: tree.c:3985
int wanted_ia_ta
Definition: dhclient.c:97
int dhclient_interface_shutdown_hook(struct interface_info *)
Definition: dhclient.c:4214
int local_family
Definition: discover.c:52
void free_client_lease(struct client_lease *, const char *, int)
Definition: alloc.c:370
struct universe dhcp_universe
const char * path_dhclient_db
Definition: dhclient.c:56
struct interface_info * ip
Definition: dhcpd.h:596
struct option_state * options
Definition: dhcpd.h:1046
dhcp_ddns_cb_t * ddns_cb_alloc(const char *file, int line)
void read_client_leases(void)
Definition: clparse.c:286
void dhcp_failover_keepalive(void *)
struct option_cache * next
Definition: dhcpd.h:351
struct protocol * new_protocol(const char *, int)
int unbill_class(struct lease *, struct class *)
Definition: dhclient.c:1240
isc_result_t lease_file_subparse(struct parse *)
Definition: confpars.c:266
struct option_cache * next_hashed_option(struct universe *, struct option_state *, struct option_cache *)
struct shared_network * shared_network
Definition: dhcpd.h:1597
isc_result_t dhcp_failover_send_update_request(dhcp_failover_state_t *)
isc_result_t ipv6_pond_reference(struct ipv6_pond **pond, struct ipv6_pond *src, const char *file, int line)
reference an IPv6 pond structure.
Definition: mdb6.c:2387
int parse_zone(struct dns_zone *, struct parse *)
Definition: parse.c:2782
int lpos
Definition: dhcpd.h:280
void expression_dereference(struct expression **, const char *, int)
Definition: tree.c:2751
omapi_object_type_t * dhcp_type_failover_state
void dhcpdecline(struct packet *, int)
Definition: dhcp.c:879
void cancel_timeout(void(*)(void *), void *)
Definition: dispatch.c:390
int wanted_ia_pd
Definition: dhclient.c:98
isc_result_t dhcp_interface_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: discover.c:1248
int parse_auth_key(struct data_string *, struct parse *)
void free_binding_value(struct binding_value *, const char *, int)
Definition: alloc.c:549
isc_result_t dhcp_class_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
Definition: omapi.c:2182
void hw_hash_delete(struct lease *)
Definition: mdb.c:2270
int append_option(struct data_string *dst, struct universe *universe, struct option *option, struct data_string *src)
Definition: options.c:2787
struct option_cache * fixed_addr
Definition: dhcpd.h:873
struct class * billing_class
Definition: dhcpd.h:519
const char * dhcp_failover_option_name(unsigned)
void parse_address_range(struct parse *, struct group *, int, struct pool *, struct lease **)
Definition: confpars.c:3611
void client_location_changed(void)
Definition: dhclient.c:4116
int site_universe
Definition: dhcpd.h:363
struct dhc6_ia * next
Definition: dhcpd.h:1050
void print_dns_status(int, struct dhcp_ddns_cb *, isc_result_t)
char * lease_tag
Definition: dhcpd.h:1674
char * print_base64(const unsigned char *, unsigned, const char *, int)
Definition: print.c:110
isc_result_t dhcp_control_destroy(omapi_object_t *, const char *, int)
Definition: comapi.c:496
struct class unknown_class
Definition: dhcpd.h:3002
int parse_lease_declaration(struct lease **, struct parse *)
Definition: confpars.c:2974
const char * path_dhcpd_db
Definition: dhcpd.c:84
TIME last_write
Definition: dhcpd.h:1169
u_int32_t valid
Definition: dhcpd.h:1506
void if_reinitialize_fallback(struct interface_info *)
isc_result_t dhcp_shared_network_signal_handler(omapi_object_t *, const char *, va_list)
Definition: comapi.c:849
struct collection * collections
Definition: dhcpd.h:3005
isc_result_t dhcp_host_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: omapi.c:1055
isc_result_t find_class(struct class **, const char *, const char *, int)
Definition: dhclient.c:1220
lease_id_hash_t * lease_hw_addr_hash
Definition: mdb.c:40
int find_bound_string(struct data_string *, struct binding_scope *, const char *)
Definition: tree.c:4039
time_t cltt
Definition: dhcpd.h:1536
void cancel_all_timeouts(void)
int num_inactive
Definition: dhcpd.h:1573
void free_permit(struct permit *, const char *, int)
Definition: salloc.c:243
int dhcp_option_ev_name(char *, size_t, struct option *)
Definition: dhclient.c:4007
int known
Definition: dhcpd.h:415
struct binding_scope * scope
Definition: dhcpd.h:1502
dhcp_failover_state_t * failover_peer
Definition: dhcpd.h:944
isc_result_t dhcp_interface_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
Definition: discover.c:1282
void * local
Definition: dhcpd.h:1332
isc_result_t dhcp_class_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: omapi.c:2084
struct ipv6_pond * ipv6_pond
Definition: dhcpd.h:1579
failover_option_t * dhcp_failover_option_printf(unsigned, char *, unsigned *, unsigned, const char *,...) __attribute__((__format__(__printf__
void copy_server_duid(struct data_string *ds, const char *file, int line)
void dump_packet(struct packet *)
unsigned short uid_max
Definition: dhcpd.h:527
const char * print_time(TIME)
Definition: print.c:1474
void(* tvunref_t)(void *, const char *, int)
Definition: dhcpd.h:1312
struct subnet * subnets
Definition: mdb.c:33
TIME initial_delay
Definition: dhcpd.h:1112
struct option_cache * secondary6
Definition: dhcpd.h:1385
void fqdn6_option_space_foreach(struct packet *packet, struct lease *lease, struct client_state *client_state, struct option_state *in_options, struct option_state *cfg_options, struct binding_scope **scope, struct universe *u, void *stuff, void(*func)(struct option_cache *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *))
Definition: options.c:3316
int executable_statement_reference(struct executable_statement **, struct executable_statement *, const char *, int)
Definition: alloc.c:973
const char * tlname
Definition: dhcpd.h:258
struct protocol * protocols
int site_code_min
Definition: dhcpd.h:364
void relinquish_lease_hunks(void)
int allocate_lease(struct lease **, struct packet *, struct pool *, int *)
Definition: dhcp.c:4453
isc_result_t dhcp_control_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: comapi.c:436
struct option_cache * lookup_linked_option(struct universe *, struct option_state *, unsigned)
Definition: options.c:3722
dhcp_failover_state_t * failover_peer
Definition: dhcpd.h:926
int parse_fixed_addr_param(struct option_cache **, struct parse *, enum dhcp_token)
Definition: confpars.c:2903
void release_lease(struct lease *, struct packet *)
Definition: mdb.c:1714
int dhclient_interface_discovery_hook(struct interface_info *)
Definition: dhclient.c:4221
TIME backoff_cutoff
Definition: dhcpd.h:1126
struct option_cache * lookup_option(struct universe *, struct option_state *, unsigned)
Definition: options.c:2249
OMAPI_OBJECT_ALLOC_DECL(shared_network, struct shared_network, dhcp_type_shared_network) OMAPI_OBJECT_ALLOC_DECL(dhcp_control
isc_result_t dhcp_shared_network_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
Definition: comapi.c:897
int find_hosts_by_haddr(struct host_decl **, int, const unsigned char *, unsigned, const char *, int)
Definition: mdb.c:610
int wanted_ia_na
Definition: dhclient.c:96
int parse_lbrace(struct parse *)
Definition: confpars.c:1799
int refcnt
Definition: dhcpd.h:1594
void state_reboot(void *)
Definition: dhclient.c:1305
#define jrefproto
Definition: osdep.h:200
void make_decline(struct client_state *, struct client_lease *)
Definition: dhclient.c:3051
struct dhc6_ia * bindings
Definition: dhcpd.h:1071
TIME next_MRD
Definition: dhcpd.h:1209
int(* dhcp_interface_discovery_hook)(struct interface_info *)
Definition: discover.c:46
void if_deregister_receive(struct interface_info *)
void convert_host_name(struct parse *, jrefproto)
char * piaddrcidr(const struct iaddr *, unsigned int)
Definition: inet.c:639
int option_cache_reference(struct option_cache **, struct option_cache *, const char *, int)
Definition: alloc.c:652
int evaluate_boolean_expression(int *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct expression *)
Definition: tree.c:695
int packet_reference(struct packet **, struct packet *, const char *, int)
Definition: alloc.c:1054
void state_selecting(void *)
Definition: dhclient.c:1384
void dhcp_failover_recover_done(void *)
u_int8_t flags
Definition: dhcpd.h:1040
isc_result_t write_client6_lease(struct client_state *client, struct dhc6_lease *lease, int rewrite, int sync)
Definition: dhclient.c:3418
isc_result_t restore_parse_state(struct parse *cfile)
Definition: conflex.c:155
isc_result_t(* dhcp_interface_startup_hook)(struct interface_info *)
Definition: discover.c:47
struct expression * expression
Definition: dhcpd.h:352
struct permit * prohibit_list
Definition: dhcpd.h:1600
int is_compound_expression(struct expression *)
Definition: tree.c:3035
Definition: dhcpd.h:500
u_int8_t refresh_type
Definition: dhcpd.h:1191
void free_expression(struct expression *, const char *, int)
Definition: alloc.c:475
void parse_client_lease_statement(struct parse *, int)
Definition: clparse.c:1051
int addr_eq(struct iaddr, struct iaddr)
Definition: inet.c:168
struct parse * saved_state
Definition: dhcpd.h:296
void save_hashed_option(struct universe *, struct option_state *, struct option_cache *, isc_boolean_t appendp)
Definition: options.c:2585
void forget_zone(struct dns_zone **)
void script_write_params(struct client_state *, const char *, struct client_lease *)
Definition: dhclient.c:3761
failover_option_t null_failover_option
void reinitialize_interfaces(void)
Definition: discover.c:991
int evaluate_data_expression(struct data_string *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct expression *, const char *, int)
Definition: tree.c:1114
isc_result_t decline_leases(struct ia_xx *ia)
Definition: mdb6.c:2142
void get_hw_addr(struct interface_info *info)
caddr_t waiters
Definition: dhcpd.h:1361
char * filename
Definition: dhcpd.h:1021
void(* tvref_t)(void *, void *, const char *, int)
Definition: dhcpd.h:1311
const char * binding_state_print(enum failover_state state)
Definition: failover.c:6386
void mark_interfaces_unavailable(void)
Definition: mdb6.c:2300
struct option_state * options
Definition: dhcpd.h:407
void parse_client_statement(struct parse *, struct interface_info *, struct client_config *)
Definition: clparse.c:355
isc_result_t enter_class(struct class *, int, int)
Definition: mdb.c:73
int hashed_option_state_dereference(struct universe *, struct option_state *, const char *, int)
Definition: options.c:2749
Definition: dhcpd.h:252
void ddns_cb_free(dhcp_ddns_cb_t *ddns_cb, const char *file, int line)
isc_boolean_t ia_equal(const struct ia_xx *a, const struct ia_xx *b)
Definition: mdb6.c:517
unsigned long ttl
Definition: dhcpd.h:1651
Definition: tree.h:301
int db_printable_len(const unsigned char *, unsigned)
unsigned length
Definition: dhcpd.h:244
unsigned char dhcpv6_hop_count
Definition: dhcpd.h:381
char * name
Definition: dhcpd.h:979
void parse_failover_state_declaration(struct parse *, dhcp_failover_state_t *)
isc_result_t dhcp_failover_send_bind_ack(dhcp_failover_state_t *, failover_message_t *, int, const char *)
struct client_lease * new_client_lease(const char *, int)
struct name_server * next
Definition: dhcpd.h:318
void * lease
Definition: dhcpd.h:1667
void maybe_setup_fallback(void)
struct dhc6_lease * held_leases
Definition: dhcpd.h:1197
unsigned char dhcpv6_msg_type
Definition: dhcpd.h:375
int locate_network(struct packet *)
Definition: dhcp.c:4669
void free_name_server(struct name_server *, const char *, int)
Definition: alloc.c:293
isc_boolean_t lease6_exists(const struct ipv6_pool *pool, const struct in6_addr *addr)
Definition: mdb6.c:1318
unsigned char iaid[4]
Definition: dhcpd.h:1051
tvref_t ref
Definition: dhcpd.h:1318
TIME MRT
Definition: dhcpd.h:1207
int write_leases6(void)
struct lease * backup
Definition: dhcpd.h:914
struct interface_info * fallback_interface
Definition: discover.c:40
int eol_token
Definition: dhcpd.h:259
int binding_value_dereference(struct binding_value **, const char *, int)
Definition: tree.c:653
void if_deregister_send(struct interface_info *)
size_t rbuf_len
Definition: dhcpd.h:1275
isc_result_t dhcp_failover_send_poolresp(dhcp_failover_state_t *, int)
void option_space_foreach(struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *, void(*)(struct option_cache *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *))
Definition: options.c:3533
isc_boolean_t is_cidr_mask_valid(const struct iaddr *addr, int bits)
Definition: inet.c:305
int group_allocate(struct group **, const char *, int)
Definition: alloc.c:146
#define DHCP_MAXNS
Definition: isclib.h:107
const char * dhcp_flink_state_names[]
isc_result_t dhcp_failover_link_destroy(omapi_object_t *, const char *, int)
int save_option_buffer(struct universe *, struct option_state *, struct buffer *, unsigned char *, unsigned, unsigned, int)
Definition: options.c:2291
int parse_option_buffer(struct option_state *, const unsigned char *, unsigned, struct universe *)
Definition: options.c:123
int client_port
Definition: dhcpd.h:389
void convert_subnet_statement(struct parse *, jrefproto)
int binding_scope_dereference(struct binding_scope **, const char *, int)
Definition: tree.c:3722
int parse_semi(struct parse *)
Definition: parse.c:129
void indent_spaces(FILE *, int)
Definition: print.c:1277
int option_state_dereference(struct option_state **, const char *, int)
Definition: alloc.c:912
int enter_dns_host(struct dns_host_entry **, const char *)
Definition: tree.c:205
void dhcprelease(struct packet *, int)
Definition: dhcp.c:743
void send_discover(void *)
Definition: dhclient.c:2276
int remote_id_len
Definition: dhcpd.h:401
void dhcp(struct packet *)
Definition: dhclient.c:1837
isc_result_t icmp_echoreply(omapi_object_t *)
Definition: icmp.c:205
void parse_ia_ta_declaration(struct parse *)
Definition: confpars.c:4929
int parse_if_statement(struct executable_statement **, struct parse *, int *)
Definition: parse.c:3304
struct executable_statement * statements
Definition: dhcpd.h:857
void convert_num(struct parse *, unsigned char *, const char *, int, unsigned)
Definition: parse.c:829
struct option_state * options
Definition: dhcpd.h:602
OMAPI_OBJECT_PREAMBLE
Definition: dhcpd.h:508
void convert_ip_addr_or_hostname(struct parse *, jrefproto, int)
isc_result_t binding_scope_stuff_values(omapi_object_t *, struct binding_scope *)
Definition: omapi.c:2475
void dhcid_tolease(struct data_string *, struct data_string *)
void get_server_source_address(struct in_addr *from, struct option_state *options, struct option_state *out_options, struct packet *packet)
Definition: dhcp.c:4784
void flush_ackqueue(void *)
Definition: dhcp.c:3364
int executable_statement_allocate(struct executable_statement **, const char *, int)
Definition: alloc.c:959
int dns_zone_allocate(struct dns_zone **, const char *, int)
Definition: alloc.c:1135
int buffer_dereference(struct buffer **, const char *, int)
Definition: alloc.c:727
const char * dhcp_failover_message_name(unsigned)
void interface_trace_setup(void)
isc_result_t dhcp_failover_state_transition(dhcp_failover_state_t *, const char *)
void convert_statement(struct parse *)
u_int32_t fto_allowed[]
void parse_string_list(struct parse *, struct string_list **, int)
Definition: clparse.c:2155
int fqdn6_option_space_encapsulate(struct data_string *result, struct packet *packet, struct lease *lease, struct client_state *client_state, struct option_state *in_options, struct option_state *cfg_options, struct binding_scope **scope, struct universe *universe)
Definition: options.c:3338
struct dhcp_packet * raw
Definition: dhcpd.h:370
isc_result_t dhcp_failover_state_destroy(omapi_object_t *, const char *, int)
isc_result_t decline_lease6(struct ipv6_pool *pool, struct iasubopt *lease)
Definition: mdb6.c:1555
void dump_subnets(void)
Definition: mdb.c:2738
size_t rbuf_offset
Definition: dhcpd.h:1274
int parse_executable_statements(struct executable_statement **, struct parse *, int *, enum expression_context)
Definition: parse.c:2099
enum dhcp_token next_raw_token(const char **rval, unsigned *rlen, struct parse *cfile)
Definition: conflex.c:366
isc_result_t interface_destroy(omapi_object_t *, const char *, int)
isc_result_t dhcp_group_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
Definition: comapi.c:335
struct iaddr subnet_number(struct iaddr, struct iaddr)
Definition: inet.c:36
isc_result_t dhcp_shared_network_create(omapi_object_t **, omapi_object_t *)
Definition: comapi.c:910
void pool_timer(void *)
Definition: mdb.c:1863
int binding_value_reference(struct binding_value **, struct binding_value *, const char *, int)
Definition: alloc.c:521
int fundef_allocate(struct fundef **, const char *, int)
Definition: alloc.c:573
void free_lease_state(struct lease_state *, const char *, int)
Definition: salloc.c:196
unsigned cons_agent_information_options(struct option_state *, struct dhcp_packet *, unsigned, unsigned)
Definition: dhclient.c:4326
isc_result_t dhcp_subnet_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: comapi.c:706
int make_substring(struct expression **, struct expression *, struct expression *, struct expression *)
Definition: tree.c:314
int parse_ip6_prefix(struct parse *, struct iaddr *, u_int8_t *)
Definition: parse.c:468
group_hash_t * group_name_hash
Definition: memory.c:32
struct option_state * options
Definition: dhcpd.h:1073
int fundef_reference(struct fundef **, struct fundef *, const char *, int)
Definition: alloc.c:587
int parse_option_data(struct expression **expr, struct parse *cfile, int lookups, struct option *option)
Definition: parse.c:4785
void postdb_startup(void)
Definition: dhcpd.c:1092
int setup_fallback(struct interface_info **, const char *, int)
Definition: discover.c:972
int evaluate_expression(struct binding_value **, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct expression *, const char *, int)
Definition: tree.c:501
isc_result_t mark_lease_unavailble(struct ipv6_pool *pool, const struct in6_addr *addr)
isc_result_t dhcp_interface_destroy(omapi_object_t *, const char *, int)
Definition: discover.c:1183
isc_result_t dhcp_subclass_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
Definition: omapi.c:2285
isc_result_t ipv6_pool_allocate(struct ipv6_pool **pool, u_int16_t type, const struct in6_addr *start_addr, int bits, int units, const char *file, int line)
Create a new IPv6 lease pool structure.
Definition: mdb6.c:635
int linked_option_get(struct data_string *, struct universe *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct option_state *, struct binding_scope **, unsigned)
omapi_object_type_t * dhcp_type_failover_listener
int(* dhcp_interface_shutdown_hook)(struct interface_info *)
Definition: discover.c:48
int get_option(struct data_string *, struct universe *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct option_state *, struct binding_scope **, unsigned, const char *, int)
Definition: options.c:2144
void relinquish_timeouts(void)
failover_option_t skip_failover_option
void change_host_uid(struct host_decl *host, const char *data, int len)
Definition: mdb.c:184
isc_result_t readconf(void)
Definition: confpars.c:57
int dhcp_option_default_priority_list_count
void if_deregister6(struct interface_info *info)
struct string_list * medium
Definition: dhcpd.h:1141
isc_result_t release_lease6(struct ipv6_pool *pool, struct iasubopt *lease)
Definition: mdb6.c:1575
int subnet_inner_than(const struct subnet *, const struct subnet *, int)
Definition: mdb.c:919
void skip_to_semi(struct parse *)
Definition: parse.c:88
void schedule_lease_timeout(struct ipv6_pool *pool)
Definition: mdb6.c:1939
struct enumeration_value * find_enumeration_value(const char *, int, unsigned *, const char *)
Definition: parse.c:54
char * name
Definition: dhcpd.h:1161
isc_result_t dhcp_failover_listen(omapi_object_t *)
isc_result_t dhcp_lease_signal_handler(omapi_object_t *, const char *, va_list)
Definition: omapi.c:475
struct universe ** universes
Definition: tables.c:917
isc_result_t dhcp_host_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: omapi.c:860
unsigned packet_length
Definition: dhcpd.h:1185
isc_result_t dhcp_group_signal_handler(omapi_object_t *, const char *, va_list)
Definition: comapi.c:258
void suboption_foreach(struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *, void(*)(struct option_cache *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *), struct option_cache *, const char *)
Definition: options.c:3552
void destroy_client_lease(struct client_lease *)
Definition: dhclient.c:3166
void dispatch(void)
Definition: dispatch.c:109
char * print_hex(unsigned, const u_int8_t *, unsigned, unsigned)
Definition: print.c:433
time_t hard_lifetime_end_time
Definition: dhcpd.h:1503
int refcnt
Definition: dhcpd.h:350
struct universe fqdn_universe
Definition: tables.c:295
void save_option(struct universe *, struct option_state *, struct option_cache *)
Definition: options.c:2564
void make_release(struct client_state *, struct client_lease *)
Definition: dhclient.c:3110
int store_options(int *ocount, unsigned char *buffer, unsigned buflen, unsigned index, struct packet *packet, struct lease *lease, struct client_state *client_state, struct option_state *in_options, struct option_state *cfg_options, struct binding_scope **scope, unsigned *priority_list, int priority_len, unsigned first_cutoff, int second_cutoff, int terminate, const char *vuname)
Definition: options.c:1117
void set_time(TIME)
Definition: dispatch.c:36
isc_result_t dhcp_failover_state_remove(omapi_object_t *, omapi_object_t *)
isc_result_t dhcp_lease_remove(omapi_object_t *, omapi_object_t *)
Definition: omapi.c:854
isc_result_t dhcp_failover_set_state(dhcp_failover_state_t *, enum failover_state)
struct permit * prohibit_list
Definition: dhcpd.h:910
struct lease * lease
Definition: dhcpd.h:1308
TIME expiry
Definition: dhcpd.h:1018
void if_register_linklocal6(struct interface_info *info)
Definition: tree.h:345
void build_server_oro(struct data_string *, struct option_state *, const char *, int)
Definition: options.c:2499
isc_result_t dhcp_failover_process_bind_ack(dhcp_failover_state_t *, failover_message_t *)
int parse_option_list(struct parse *, struct option ***)
Definition: clparse.c:826
lease_id_hash_t extern struct option * vendor_cfg_option
Definition: dhcpd.h:1698
int parse_option_statement(struct executable_statement **, struct parse *, int, struct option *, enum statement_op)
Definition: parse.c:4892
isc_result_t dhcp_control_create(omapi_object_t **, omapi_object_t *)
Definition: comapi.c:590
struct option_state * options
Definition: dhcpd.h:1028
void static_lease_dereference(struct lease *, const char *, int)
void parse_subnet_declaration(struct parse *, struct shared_network *)
Definition: confpars.c:2616
void free_domain_search_list(struct domain_search_list *, const char *, int)
Definition: alloc.c:338
void dhc6_lease_destroy(struct dhc6_lease **src, const char *file, int line)
host_hash_t * host_name_hash
Definition: mdb.c:37
void ia_remove_all_lease(struct ia_xx *ia, const char *file, int line)
Definition: mdb6.c:503
void hashed_option_space_foreach(struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *, void(*)(struct option_cache *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *))
Definition: options.c:3576
struct option ** requested_options
Definition: dhcpd.h:1107
char * name
Definition: dhcpd.h:1381
struct lease * active
Definition: dhcpd.h:911
TIME after
Definition: dhcpd.h:901
void mark_phosts_unavailable(void)
Definition: mdb6.c:2295
isc_result_t dhcp_failover_state_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
void convert_class_decl(struct parse *, jrefproto)
void set_netmask(struct interface_info *, struct in_addr)
u_int16_t bootp_flags
Definition: dhcpd.h:614
struct leasequeue * prev
Definition: dhcpd.h:1306
int circuit_id_len
Definition: dhcpd.h:399
int parse_cshl(struct data_string *, struct parse *)
Definition: parse.c:2022
void write_billing_classes(void)
Definition: db.c:954
char * quotify_string(const char *, const char *, int)
Definition: print.c:34
int max_ack_delay_secs
Definition: dhcp.c:46
isc_result_t new_parse(struct parse **, int, char *, unsigned, const char *, int)
Definition: conflex.c:41
ssize_t send_fallback6(struct interface_info *, struct packet *, struct dhcp_packet *, size_t, struct in6_addr *, struct sockaddr_in6 *, struct hardware *)
isc_result_t delete_host(struct host_decl *, int)
Definition: mdb.c:468
void send_request(void *)
Definition: dhclient.c:2499
void enter_shared_network(struct shared_network *)
Definition: mdb.c:994
void dhcp_failover_pool_rebalance(void *)
isc_result_t dhcp_failover_generate_update_queue(dhcp_failover_state_t *, int)
void state_requesting(void *)
isc_result_t dhcp_shared_network_remove(omapi_object_t *, omapi_object_t *)
Definition: comapi.c:916
Definition: dhcpd.h:904
int dns_zone_dereference(struct dns_zone **, const char *, int)
Definition: dns.c:736
isc_result_t cleanup_lease6(ia_hash_t *ia_table, struct ipv6_pool *pool, struct iasubopt *lease, struct ia_xx *ia)
Cleans up leases when reading from a lease file.
Definition: mdb6.c:1124
int execute_statements(struct binding_value **result, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct executable_statement *, struct on_star *)
Definition: execute.c:35
void abandon_lease(struct lease *, const char *)
Definition: mdb.c:1789
int addr_and(struct iaddr *result, const struct iaddr *a1, const struct iaddr *a2)
Definition: inet.c:269
int universe_max
Definition: tables.c:918
struct dns_answer * answer
Definition: dhcpd.h:1365
binding_state_t binding_state
Definition: dhcpd.h:563
isc_timer_t * isc_timeout
Definition: dhcpd.h:1320
int parse_key(struct parse *)
Definition: parse.c:2961
u_int8_t offer
Definition: dhcpd.h:619
int options_valid
Definition: dhcpd.h:388
int parse_string(struct parse *, char **, unsigned *)
Definition: parse.c:146
dns_rdataclass_t dhcid_class
Definition: dhcpd.h:1673
struct dns_query * next
Definition: dhcpd.h:1356
int option_reference(struct option **dest, struct option *src, const char *file, int line)
Definition: tables.c:934
ia_hash_t * ia_na_active
struct ipv6_pool * ipv6_pool
Definition: dhcpd.h:1508
int parse_options(struct packet *)
Definition: options.c:47
isc_result_t dhcp_failover_put_message(dhcp_failover_link_t *, omapi_object_t *, int, u_int32_t,...)
int parse_allow_deny(struct option_cache **, struct parse *, int)
Definition: clparse.c:2269
int option_cache_allocate(struct option_cache **, const char *, int)
Definition: alloc.c:631
int packet6_len_okay(const char *, int)
Definition: options.c:3875
isc_result_t dhcp_failover_state_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
struct auth_key * key
Definition: dhcpd.h:1386
int dns_host_entry_dereference(struct dns_host_entry **, const char *, int)
Definition: alloc.c:814
struct eventqueue * next
Definition: dhcpd.h:1324
TIME timeout
Definition: dhcpd.h:1660
int addr_cmp(const struct iaddr *a1, const struct iaddr *a2)
Definition: inet.c:213
char * default_option_format
Definition: tables.c:930
isc_result_t dhcp_control_remove(omapi_object_t *, omapi_object_t *)
Definition: comapi.c:597
void script_write_requested(struct client_state *)
Definition: dhclient.c:3874
struct interface_info * interface
Definition: dhcpd.h:391
void(* handler)(void *)
Definition: dhcpd.h:1325
void dhcp_failover_listener_restart(void *)
isc_result_t dhcp_failover_process_update_request_all(dhcp_failover_state_t *, failover_message_t *)
void postconf_initialization(int)
Definition: dhcpd.c:816
void linked_option_space_foreach(struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *, void(*)(struct option_cache *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *))
Definition: options.c:3758
isc_result_t dhcp_failover_send_disconnect(omapi_object_t *, int, const char *)
omapi_object_type_t * dhcp_type_control
ssize_t send_packet6(struct interface_info *, const unsigned char *, size_t, struct sockaddr_in6 *)
isc_result_t dhcp_failover_peer_state_changed(dhcp_failover_state_t *, failover_message_t *)
struct dhcp_ddns_cb * next_op
Definition: dhcpd.h:1664
void delayed_ack_enqueue(struct lease *)
Definition: dhcp.c:3282
TIME valid_until
Definition: dhcpd.h:923
unsigned circuit_id_len
Definition: dhcpd.h:1261
struct group * next
Definition: dhcpd.h:850
int find_matching_case(struct executable_statement **, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct expression *, struct executable_statement *)
Definition: execute.c:1015
isc_result_t dhcp_failover_process_update_request(dhcp_failover_state_t *, failover_message_t *)
void save_linked_option(struct universe *, struct option_state *, struct option_cache *, isc_boolean_t appendp)
Definition: options.c:3613
char * print_dec_1(unsigned long)
Definition: print.c:501
void convert_servername_decl(struct parse *, jrefproto)
trace_type_t * inpacket_trace
const char * prefix
Definition: dhcpd.h:1229
struct expression * expr
Definition: dhcpd.h:995
void enter_lease(struct lease *)
Definition: mdb.c:1051
isc_result_t renew_leases(struct ia_xx *ia)
Definition: mdb6.c:2126
Definition: dhcpd.h:369
int socket
Definition: dhcpd.h:1392
int parse_numeric_expression(struct expression **, struct parse *, int *)
Definition: parse.c:3534
int write_server_duid(void)
struct pool * pool
Definition: dhcpd.h:518
void assemble_hw_header(struct interface_info *, unsigned char *, unsigned *, struct hardware *)
char * name
Definition: dhcpd.h:865
void commit_leases_timeout(void *)
Definition: db.c:1003
struct option_cache * lookup_fqdn6_option(struct universe *universe, struct option_state *options, unsigned code)
Definition: options.c:3281
int make_const_int(struct expression **, unsigned long)
Definition: tree.c:255
isc_result_t dhcp_class_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: omapi.c:1886
int dns_host_entry_allocate(struct dns_host_entry **, const char *, const char *, int)
Definition: alloc.c:769
void unregister_eventhandler(struct eventqueue **, void(*handler)(void *))
Definition: dispatch.c:70
int find_lease_by_hw_addr(struct lease **, const unsigned char *, unsigned, const char *, int)
Definition: mdb.c:2006
int if_register_lpf(struct interface_info *)
omapi_object_type_t * dhcp_type_subclass
Definition: omapi.c:47
isc_result_t dhcp_subclass_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: omapi.c:2233
dhcp_shutdown_state
Definition: dhcpd.h:233
void do_release(struct client_state *)
Definition: dhclient.c:4150
int linked_option_space_encapsulate(struct data_string *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *)
Definition: options.c:3657
host_hash_t * host_hw_addr_hash
Definition: mdb.c:35
int dhcp_failover_queue_ack(dhcp_failover_state_t *, failover_message_t *msg)
dhcp_failover_listener_t
Definition: dhcpd.h:3506
u_int8_t plen
Definition: dhcpd.h:1500
TIME atsfp
Definition: dhcpd.h:579
int parse_switch_statement(struct executable_statement **, struct parse *, int *)
Definition: parse.c:3189
int tline
Definition: dhcpd.h:283
int authoritative
Definition: dhcpd.h:856
isc_result_t interface_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
void delete_hashed_option(struct universe *, struct option_state *, int)
Definition: options.c:2664
u_int8_t * data
Definition: dhcpd.h:245
void parse_pool_statement(struct parse *, struct group *, int)
Parse a pool statement.
Definition: confpars.c:1598
int clone_group(struct group **, struct group *, const char *, int)
Definition: memory.c:130
struct iaddr ip_addr(struct iaddr, struct iaddr, u_int32_t)
Definition: inet.c:65
const char * path_dhcpd_pid
Definition: dhcpd.c:85
struct lease * n_hw
Definition: dhcpd.h:510
int free_leases
Definition: dhcpd.h:919
Definition: ip.h:47
const char * name
Definition: dhcpd.h:964
ssize_t send_packet(struct interface_info *, struct packet *, struct dhcp_packet *, size_t, struct in_addr, struct sockaddr_in *, struct hardware *)
isc_result_t dhcp_failover_link_signal(omapi_object_t *, const char *, va_list)
struct lease * n_uid
Definition: dhcpd.h:510
void convert_host_decl(struct parse *, jrefproto)
struct dhc6_lease * advertised_leases
Definition: dhcpd.h:1195
pair cons(caddr_t, pair)
Definition: tree.c:138
int refcnt
Definition: dhcpd.h:1531
TIME starts
Definition: dhcpd.h:513
const char * dhcp_failover_state_name_print(enum failover_state)
int parse_ip_addr_with_subnet(struct parse *, struct iaddrmatch *)
Definition: parse.c:511
int evaluate_boolean_option_cache(int *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct option_cache *, const char *, int)
Definition: tree.c:2670
omapi_object_type_t * dhcp_type_host
Definition: mdb.c:71
struct expression * submatch
Definition: dhcpd.h:999
isc_result_t dhcp_subclass_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: omapi.c:2268
int db_time_format
Definition: print.c:32
isc_result_t dhcp_subnet_destroy(omapi_object_t *, const char *, int)
Definition: comapi.c:654
u_int8_t flags
Definition: dhcpd.h:531
int(* group_write_hook)(struct group_object *)
Definition: memory.c:33
isc_result_t got_one_v6(omapi_object_t *)
struct lease * free
Definition: dhcpd.h:913
binding_state_t normal_binding_state_transition_check(struct lease *, dhcp_failover_state_t *, binding_state_t, u_int32_t)
void start_confirm6(struct client_state *client)
struct in_addr giaddr
Definition: dhclient.c:72
struct hardware * haddr
Definition: dhcpd.h:393
void set_server_duid(struct data_string *new_duid)
isc_result_t dhcid_fromlease(struct data_string *, struct data_string *)
int executable_statement_dereference(struct executable_statement **, const char *, int)
Definition: execute.c:615
isc_result_t add_ipv6_pool(struct ipv6_pool *pool)
Definition: mdb6.c:1798
int tlen
Definition: dhcpd.h:287
u_int32_t max_life
Definition: dhcpd.h:1044
struct dhcp_ddns_cb dhcp_ddns_cb_t
int addr_match(struct iaddr *, struct iaddrmatch *)
Definition: inet.c:186
struct permit * next
Definition: dhcpd.h:889
struct client_lease * next
Definition: dhcpd.h:1017
void ddns_cancel(dhcp_ddns_cb_t *ddns_cb, const char *file, int line)
isc_result_t create_lease6(struct ipv6_pool *pool, struct iasubopt **addr, unsigned int *attempts, const struct data_string *uid, time_t soft_lifetime_end_time)
Definition: mdb6.c:953
int lease_count
Definition: dhcpd.h:918
int parse_boolean_expression(struct expression **, struct parse *, int *)
Definition: parse.c:3440
u_int32_t prefer
Definition: dhcpd.h:1505
isc_result_t dhcp_lease_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
Definition: omapi.c:682
void parse_reject_statement(struct parse *, struct client_config *)
Definition: clparse.c:2205
struct host_decl * n_ipaddr
Definition: dhcpd.h:863
isc_result_t dhcp_failover_link_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
TIME valid_until
Definition: dhcpd.h:1602
int bits
Definition: dhcpd.h:1568
struct option_state * sent_options
Definition: dhcpd.h:1167
int dns_zone_reference(struct dns_zone **, struct dns_zone *, const char *, int)
Definition: alloc.c:1167
enum permit::@0 type
isc_result_t dhcp_pool_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: omapi.c:1650
TIME parse_date(struct parse *)
Definition: parse.c:1170
enum dhcp_token next_token(const char **, unsigned *, struct parse *)
Definition: conflex.c:355
int refcnt
Definition: dhcpd.h:1498
void uid_hash_delete(struct lease *)
Definition: mdb.c:2140
int main(int, char **)
Definition: dhclient.c:119
dhcp_failover_state_t * failover_states
isc_result_t dhcp_subclass_remove(omapi_object_t *, omapi_object_t *)
Definition: omapi.c:2312
int free_bindings(struct binding_scope *, const char *, int)
Definition: tree.c:3706
int make_let(struct executable_statement **, const char *)
Definition: tree.c:378
int load_balance_mine(struct packet *, dhcp_failover_state_t *)
unsigned char option_mask[16]
Definition: dhcpd.h:1399
void parse_shared_net_declaration(struct parse *, struct group *)
Definition: confpars.c:2459
void convert_class_statement(struct parse *, jrefproto, int)
int packet_type
Definition: dhcpd.h:373
void dhcp_failover_link_startup_timeout(void *)
isc_result_t dhcp_control_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: comapi.c:471
void convert_hardware_decl(struct parse *, jrefproto)
struct name_server * first_name_server(void)
Definition: resolv.c:170
u_int16_t remote_port
Definition: dhclient.c:88
struct client_state * client
Definition: dhcpd.h:1228
isc_result_t dhcp_interface_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: discover.c:1138
iasubopt_hash_t * leases
Definition: dhcpd.h:1570
isc_result_t dhcp_pool_remove(omapi_object_t *, omapi_object_t *)
Definition: omapi.c:1714
int permitted(struct packet *, struct permit *)
Definition: dhcp.c:4610
struct option_state * options
Definition: dhcpd.h:1059
int refcnt
Definition: dhcpd.h:852
void free_universe(struct universe *, const char *, int)
Definition: alloc.c:330
int omapi_port
Definition: dhcpd.h:1145
struct option * option
Definition: dhcpd.h:353
void rewrite_client_leases(void)
Definition: dhclient.c:3180
void trigger_event(struct eventqueue **)
Definition: dispatch.c:91
int nwip_option_space_encapsulate(struct data_string *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *)
Definition: options.c:3038
struct dhc6_lease * selected_lease
Definition: dhcpd.h:1196
isc_result_t dhcp_shared_network_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: comapi.c:781
int lease_limit
Definition: dhcpd.h:982
void set_server_duid_type(int type)
int max_ack_delay_usecs
Definition: dhcp.c:47
control_object_state_t
Definition: dhcpd.h:470
dhcp_type_control int option_chain_head_allocate(struct option_chain_head **, const char *, int)
Definition: alloc.c:36
void dhcp_db_objects_setup(void)
Definition: omapi.c:55
isc_sockaddrlist_t zone_server_list
Definition: dhcpd.h:1654
int option_chain_head_reference(struct option_chain_head **, struct option_chain_head *, const char *, int)
Definition: alloc.c:68
void repudiate_zone(struct dns_zone **)
int num_iasubopt
Definition: dhcpd.h:1534
int supersede_lease(struct lease *, struct lease *, int, int, int)
Definition: mdb.c:1094
isc_result_t dhcp_subclass_destroy(omapi_object_t *, const char *, int)
struct ipv6_pool ** ipv6_pools
Definition: dhcpd.h:1604
char * print_hw_addr(const int, const int, const unsigned char *)
struct option_tag * first
Definition: dhcpd.h:346
u_int16_t ia_type
Definition: dhcpd.h:1533
void dhcpnak(struct packet *)
Definition: dhclient.c:2197
isc_result_t write_named_billing_class(const void *, unsigned, void *)
Definition: db.c:858
int universe_count
Definition: tables.c:918
isc_result_t interface_initialize(omapi_object_t *, const char *, int)
Definition: discover.c:118
struct subnet * subnet
Definition: dhcpd.h:517
binding_state_t state
Definition: dhcpd.h:1501
struct universe * new_universe(const char *, int)
Definition: tree.h:287
isc_result_t interface_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
struct class * classes
Definition: dhcpd.h:965
int parse_destination_descriptor(struct parse *, struct iaddr *)
Definition: parse.c:344
int make_host_lookup(struct expression **, const char *)
Definition: tree.c:189
void new_address_range(struct parse *, struct iaddr, struct iaddr, struct subnet *, struct pool *, struct lease **)
Definition: mdb.c:755
isc_result_t find_failover_peer(dhcp_failover_state_t **, const char *, const char *, int)
void add_route_net(struct interface_info *, struct in_addr, struct in_addr)
int option_state_allocate(struct option_state **, const char *, int)
Definition: alloc.c:847
int token_print_indent(FILE *, int, int, const char *, const char *, const char *)
Definition: print.c:1239
const char * path_dhclient_conf
Definition: dhclient.c:55
int interfaces_requested
Definition: dhclient.c:66
u_int32_t flags
Definition: dhcpd.h:1281
struct shared_network * shared_network
Definition: dhcpd.h:952
u_int16_t validate_port(char *)
Definition: inet.c:661
void parse_lease_time(struct parse *, TIME *)
Definition: parse.c:679
isc_result_t ipv6_pool_dereference(struct ipv6_pool **pool, const char *file, int line)
de-reference an IPv6 pool structure.
Definition: mdb6.c:772
isc_result_t find_ipv6_pool(struct ipv6_pool **pool, u_int16_t type, const struct in6_addr *addr)
Definition: mdb6.c:2065
int refcnt
Definition: dhcpd.h:1379
int write_leases(void)
Definition: mdb.c:2371
int prefix_len
Definition: dhcpd.h:957
int find_hosts_by_uid(struct host_decl **, const unsigned char *, unsigned, const char *, int)
Definition: mdb.c:630
struct interface_info * interfaces
Definition: discover.c:40
int parse_option_decl(struct option_cache **, struct parse *)
Definition: parse.c:5240
struct timeout * next
Definition: dhcpd.h:1314
void print_expression(const char *, struct expression *)
isc_result_t dhcp_control_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: comapi.c:526
int fqdn_universe_decode(struct option_state *, const unsigned char *, unsigned, struct universe *)
Definition: options.c:351
int write_group(struct group_object *)
Definition: db.c:450
isc_result_t delete_class(struct class *, int)
Definition: mdb.c:436
int make_encapsulation(struct expression **, struct data_string *)
Definition: tree.c:299
isc_result_t enter_failover_peer(dhcp_failover_state_t *)
struct group * group
Definition: dhcpd.h:958
u_int32_t rebind
Definition: dhcpd.h:1056
u_int32_t last_xid
Definition: dhcpd.h:581
struct subnet * next_subnet
Definition: dhcpd.h:950
int option_cache_dereference(struct option_cache **, const char *, int)
Definition: options.c:2699
void dhcpv4_client_assignments(void)
Definition: dhclient.c:4803
isc_boolean_t ipv6_in_pool(const struct in6_addr *addr, const struct ipv6_pool *pool)
Definition: mdb6.c:2047
void convert_shared_net_statement(struct parse *, jrefproto)
int v6address_count
Definition: dhcpd.h:1254
isc_result_t free_iaddrcidrnetlist(struct iaddrcidrnetlist **result)
Definition: inet.c:505
void free_pair(pair, const char *, int)
Definition: alloc.c:401
int binding_value_allocate(struct binding_value **, const char *, int)
Definition: alloc.c:501
void delete_fqdn6_option(struct universe *universe, struct option_state *options, int code)
Definition: options.c:3302
struct option ** required_options
Definition: dhcpd.h:1106
ssize_t decode_ethernet_header(struct interface_info *, unsigned char *, unsigned, struct hardware *)
omapi_object_type_t * dhcp_type_class
Definition: omapi.c:46
struct dhc6_addr * addrs
Definition: dhcpd.h:1057
int zone_addr_count
Definition: dhcpd.h:1656
void convert_filename_decl(struct parse *, jrefproto)
int token_print_indent_concat(FILE *, int, int, const char *, const char *,...)
Definition: print.c:1158
char * name
Definition: dhcpd.h:841
struct dhcp_packet * new_dhcp_packet(const char *, int)
int make_concat(struct expression **, struct expression *, struct expression *)
Definition: tree.c:269
omapi_object_type_t * dhcp_type_group
int length
Definition: dhcpd.h:345
TIME retry_interval
Definition: dhcpd.h:1116
void write_client_pid_file(void)
Definition: dhclient.c:4089
isc_result_t dhcp_subnet_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
Definition: comapi.c:730
void cleanup(void)
char * token_line
Definition: dhcpd.h:255
int(* dhcp_interface_setup_hook)(struct interface_info *, struct iaddr *)
Definition: discover.c:45
int parse_base64(struct data_string *, struct parse *)
Definition: parse.c:1881
void add_timeout(struct timeval *, void(*)(void *), void *, tvref_t, tvunref_t)
Definition: dispatch.c:198
struct shared_network * shared_network
Definition: dhcpd.h:855
dhcp_token
Definition: dhctoken.h:35
void make_request(struct client_state *, struct client_lease *)
Definition: dhclient.c:2962
int parse_expression(struct expression **, struct parse *, int *, enum expression_context, struct expression **, enum expr_op)
Definition: parse.c:4466
int if_readsocket(omapi_object_t *)
Definition: discover.c:961
isc_result_t dhcp_lease_get(omapi_object_t **, const char *, int)
int group_reference(struct group **, struct group *, const char *, int)
Definition: alloc.c:178
dhcp_control_object_t * dhcp_control_object
int address_max
Definition: dhcpd.h:1251
isc_result_t dhcp_host_remove(omapi_object_t *, omapi_object_t *)
Definition: omapi.c:1516
TIME cltt
Definition: dhcpd.h:580
struct universe vsio_universe
Definition: tables.c:645
struct lease ** billed_leases
Definition: dhcpd.h:984
void dhcpdiscover(struct packet *, int)
Definition: dhcp.c:293
void dhcp_failover_reconnect(void *)
isc_result_t get_client_id(struct packet *, struct data_string *)
const char * path_dhcpd_conf
Definition: dhcpd.c:83
unsigned char * query
Definition: dhcpd.h:1367
void set_broadcast_addr(struct interface_info *, struct in_addr)
int address_type
Definition: dhcpd.h:1649
Definition: inet.h:31
void delete_linked_option(struct universe *, struct option_state *, int)
Definition: options.c:3693
void dhcp_failover_startup(void)
TIME valid_from
Definition: dhcpd.h:922
ipv6_pool structure
Definition: dhcpd.h:1564
struct option_cache * secondary
Definition: dhcpd.h:1383
Definition: dhcpd.h:888
int parse_dns_expression(struct expression **, struct parse *, int *)
void convert_host_statement(struct parse *, jrefproto)
u_int8_t * circuit_id
Definition: dhcpd.h:1259
void if_register6(struct interface_info *info, int do_multicast)
u_int8_t * circuit_id
Definition: dhcpd.h:398
OMAPI_OBJECT_PREAMBLE
Definition: dhcpd.h:1241
void convert_date(struct parse *, jrefproto, char *)
void set_ip_address(struct interface_info *, struct in_addr)
int find_subnet(struct subnet **, struct iaddr, const char *, int)
Definition: dhclient.c:1247
int have_billing_classes
Definition: class.c:41
struct client_lease * active
Definition: dhcpd.h:1172
isc_result_t dhcp_lease_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: omapi.c:497
unsigned short uid_len
Definition: dhcpd.h:526
isc_result_t dhcp_class_destroy(omapi_object_t *, const char *, int)
Definition: omapi.c:1922
int refcnt
Definition: dhcpd.h:1565
int parse_X(struct parse *, u_int8_t *, unsigned)
Definition: parse.c:5543
int hashed_option_space_encapsulate(struct data_string *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *)
Definition: options.c:2995
int authenticated
Definition: dhcpd.h:416
int parse_statement(struct parse *, struct group *, int, struct host_decl *, int)
Definition: confpars.c:351
isc_result_t client_dns_update(struct client_state *client, dhcp_ddns_cb_t *ddns_cb)
isc_result_t dhclient_interface_startup_hook(struct interface_info *)
Definition: dhclient.c:4264
isc_result_t release_leases(struct ia_xx *ia)
Definition: mdb6.c:2134
isc_result_t dhcp_group_remove(omapi_object_t *, omapi_object_t *)
Definition: comapi.c:416
struct iaddrcidrnetlist * fixed_prefix
Definition: dhcpd.h:874
void update_partner(struct lease *)
isc_result_t dhcp_failover_send_update_done(dhcp_failover_state_t *)
OMAPI_OBJECT_PREAMBLE
Definition: dhcpd.h:949
u_int32_t preferred_life
Definition: dhcpd.h:1043
void make_discover(struct client_state *, struct client_lease *)
Definition: dhclient.c:2898
ia_hash_t * ia_pd_active
void start_init6(struct client_state *client)
isc_result_t dns_zone_lookup(struct dns_zone **, const char *)
Definition: dns.c:703
struct group_object * named_group
Definition: dhcpd.h:876
Definition: dhcpd.h:849
struct dhc6_addr * next
Definition: dhcpd.h:1033
int nowait
Definition: dhclient.c:94
isc_result_t ddns_removals(struct lease *, struct iasubopt *, struct dhcp_ddns_cb *, isc_boolean_t)
enum dhcp_shutdown_state shutdown_state
Definition: dhcpd.c:1267
void parse_client_lease_declaration(struct parse *, struct client_lease *, struct interface_info **, struct client_state **)
Definition: clparse.c:1180
void dhcpv6(struct packet *)
isc_result_t dhcp_class_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: omapi.c:1897
int commit_leases_timed(void)
Definition: db.c:1046
expr_op
Definition: tree.h:132
void indent(int)
struct timeval cur_tv
Definition: dispatch.c:35
void trace_ddns_init(void)
isc_result_t ipv6_pond_allocate(struct ipv6_pond **pond, const char *file, int line)
Create a new IPv6 pond structure.
Definition: mdb6.c:2344
int envc
Definition: dhcpd.h:1166
struct auth_key * key
Definition: dhcpd.h:1023
ddns_action_t cur_func
Definition: dhcpd.h:1662
void unconfigure6(struct client_state *client, const char *reason)
void client_dns_remove(struct client_state *client, struct iaddr *addr)
isc_result_t dhcp_pool_signal_handler(omapi_object_t *, const char *, va_list)
Definition: omapi.c:1628
struct shared_network * shared_network
Definition: dhcpd.h:406
char * prev_line
Definition: dhcpd.h:256
int sent
Definition: dhcpd.h:1369
int got_server_identifier
Definition: dhcpd.h:608
char * quotify_buf(const unsigned char *, unsigned, const char *, int)
Definition: print.c:72
struct universe * config_universe
Definition: tables.c:924
void also_save_option(struct universe *, struct option_state *, struct option_cache *)
Definition: options.c:2575
int lease_enqueue(struct lease *)
Definition: mdb.c:2489
void register_eventhandler(struct eventqueue **, void(*handler)(void *))
const char * path_dhclient_pid
Definition: dhclient.c:57
struct executable_statement * statements
Definition: dhcpd.h:1005
__extension__ unsigned short dhcpd_main_semaphore __attribute__((unused)) __attribute__((section(".probes")))
int parse_agent_information_option(struct packet *, int, u_int8_t *)
Definition: dhclient.c:4316
binding_state_t rewind_binding_state
Definition: dhcpd.h:566
TIME tstp
Definition: dhcpd.h:577
int peer_wants_lease(struct lease *)
void parse_failover_state(struct parse *, enum failover_state *, TIME *)
struct interface_info * next
Definition: dhcpd.h:1242
isc_boolean_t prefix6_exists(const struct ipv6_pool *pool, const struct in6_addr *pref, u_int8_t plen)
Definition: mdb6.c:1757
void dhcp_failover_ack_queue_remove(dhcp_failover_state_t *, struct lease *)
void state_stop(void *)
Definition: dhclient.c:1765
isc_heap_t * inactive_timeouts
Definition: dhcpd.h:1574
isc_result_t dhcp_failover_set_service_state(dhcp_failover_state_t *state)
struct subnet * subnet
Definition: dhcpd.h:854
isc_result_t dhcp_io_shutdown(omapi_object_t *, void *)
Definition: dhcpd.c:1269
void if_register_fallback(struct interface_info *)
int ddns_updates(struct packet *, struct lease *, struct lease *, struct iasubopt *, struct iasubopt *, struct option_state *)
void convert_address_range(struct parse *, jrefproto)
int parse_encapsulated_suboptions(struct option_state *, struct option *, const unsigned char *, unsigned, struct universe *, const char *)
Definition: options.c:322
int interface_max
Definition: discover.c:76
int warnings_occurred
Definition: dhcpd.h:290
int parse_data_expression(struct expression **, struct parse *, int *)
Definition: parse.c:3507
void schedule_all_ipv6_lease_timeouts()
Definition: mdb6.c:1982
struct host_decl * host
Definition: dhcpd.h:516
void make_binding_state_transition(struct lease *)
Definition: mdb.c:1462
int script_go(struct client_state *)
Definition: dhclient.c:3893
int max_message_size
Definition: dhcpd.h:604
struct string_list * next
Definition: dhcpd.h:312
size_t bufsiz
Definition: dhcpd.h:294
void parse_failover_peer(struct parse *, struct group *, int)
#define DHCP_MAXDNS_WIRE
Definition: isclib.h:106
void parse_address_range6(struct parse *cfile, struct group *group, struct ipv6_pond *)
TIME initial_interval
Definition: dhcpd.h:1114
int addr_or(struct iaddr *result, const struct iaddr *a1, const struct iaddr *a2)
Definition: inet.c:240
const char int
Definition: omapip.h:443
void commit_leases_readerdry(void *)
isc_result_t iasubopt_dereference(struct iasubopt **iasubopt, const char *file, int line)
Definition: mdb6.c:260
int validate_packet(struct packet *)
Definition: options.c:4196
TIME timeout
Definition: dhcpd.h:1380
void failover_print(char *, unsigned *, unsigned, const char *)
int is_boolean_expression(struct expression *)
Definition: tree.c:2969
int dhcp_failover_queue_update(struct lease *, int)
int db_printable(const unsigned char *)
void execute_statements_in_scope(struct binding_value **result, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct group *, struct group *, struct on_star *)
Definition: execute.c:555
void convert_lease_time(struct parse *, jrefproto, char *)
void ack_lease(struct packet *, struct lease *, unsigned int, TIME, char *, int, struct host_decl *)
Definition: dhcp.c:1792
void skip_to_rbrace(struct parse *, int)
Definition: parse.c:94
isc_result_t set_server_duid_from_option(void)
void add_route_direct(struct interface_info *, struct in_addr)
struct shared_network * shared_network
Definition: dhcpd.h:609
struct domain_search_list * new_domain_search_list(const char *, int)
struct failover_option_info ft_options[]
void parse_prefix6(struct parse *cfile, struct group *group, struct ipv6_pond *)
pair new_pair(const char *, int)
struct option * host_id_option
Definition: dhcpd.h:868
int format_min_length(const char *, struct option_cache *)
int universe_count
Definition: dhcpd.h:362
int duid_type
Definition: dhclient.c:74
void save_fqdn6_option(struct universe *universe, struct option_state *options, struct option_cache *oc, isc_boolean_t appendp)
Definition: options.c:3292
isc_result_t ia_allocate(struct ia_xx **ia, u_int32_t iaid, const char *duid, unsigned int duid_len, const char *file, int line)
Definition: mdb6.c:338
int parse_class_declaration(struct class **, struct parse *, struct group *, int)
Definition: confpars.c:2081
enum dhcp_token peek_token(const char **, unsigned *, struct parse *)
Definition: conflex.c:429
isc_result_t enter_dns_zone(struct dns_zone *)
Definition: dns.c:678
int dont_use_fsync
Definition: dhcpd.c:81
time_t TIME
Definition: dhcpd.h:85
void parse_ia_pd_declaration(struct parse *)
Definition: confpars.c:5371
ssize_t send_fallback(struct interface_info *, struct packet *, struct dhcp_packet *, size_t, struct in_addr, struct sockaddr_in *, struct hardware *)
int read_client_conf_file(const char *, struct interface_info *, struct client_config *)
Definition: clparse.c:250
isc_result_t dhcp_shared_network_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: comapi.c:873
void data_string_forget(struct data_string *, const char *, int)
Definition: alloc.c:1276
void free_dhcp_packet(struct dhcp_packet *, const char *, int)
Definition: alloc.c:354
isc_result_t dhcp_class_signal_handler(omapi_object_t *, const char *, va_list)
Definition: omapi.c:2038
struct option_cache * primary6
Definition: dhcpd.h:1384
char * script_name
Definition: dhcpd.h:1132
binding_state_t desired_binding_state
Definition: dhcpd.h:565
isc_boolean_t agent_options_stashed
Definition: dhcpd.h:422
int dns_host_entry_reference(struct dns_host_entry **, struct dns_host_entry *, const char *, int)
Definition: alloc.c:786
struct subnet * next_sibling
Definition: dhcpd.h:951
isc_boolean_t unicast
Definition: dhcpd.h:428
int new_lease_file(void)
Definition: db.c:1115
isc_result_t ia_add_iasubopt(struct ia_xx *ia, struct iasubopt *iasubopt, const char *file, int line)
Definition: mdb6.c:438
int dhcp_failover_write_all_states(void)
int write_expression(FILE *, struct expression *, int, int, int)
Definition: tree.c:3234
int count
Definition: dhcpd.h:1351
void dhcpoffer(struct packet *)
Definition: dhclient.c:1943
isc_result_t dhcp_failover_listener_destroy(omapi_object_t *, const char *, int)
void convert_fixed_addr_decl(struct parse *, jrefproto)
void convert_hardware_addr(struct parse *, jrefproto)
Definition: tree.h:61
isc_heap_t * active_timeouts
Definition: dhcpd.h:1572
TIME parse_date_core(struct parse *)
Definition: parse.c:967
isc_result_t binding_scope_set_value(struct binding_scope *, int, omapi_data_string_t *, omapi_typed_data_t *)
Definition: omapi.c:2329
OMAPI_OBJECT_PREAMBLE
Definition: dhcpd.h:931
void initialize_common_option_spaces(void)
Definition: tables.c:1003
int lexchar
Definition: dhcpd.h:254
struct interface_info * interface
Definition: dhcpd.h:939
struct client_lease * offered_leases
Definition: dhcpd.h:1174
u_int32_t xid
Definition: dhcpd.h:1179
int index
Definition: dhcpd.h:921
isc_result_t ipv6_pond_dereference(struct ipv6_pond **pond, const char *file, int line)
de-reference an IPv6 pond structure.
Definition: mdb6.c:2427
time_t soft_lifetime_end_time
Definition: dhcpd.h:1504
int find_lease_by_uid(struct lease **, const unsigned char *, unsigned, const char *, int)
Definition: mdb.c:1998
int fundef_dereference(struct fundef **, const char *, int)
Definition: tree.c:3765
int supports_multiple_interfaces(struct interface_info *)
int state
Definition: dhcpd.h:1661
void parse_option_space_decl(struct parse *)
Definition: parse.c:1331
u_int8_t * remote_id
Definition: dhcpd.h:1263
int evaluate_boolean_expression_result(int *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct expression *)
Definition: tree.c:2718
isc_result_t dhcp_failover_send_bind_update(dhcp_failover_state_t *, struct lease *)
struct string_list * media
Definition: dhcpd.h:1131
void enter_subnet(struct subnet *)
Definition: mdb.c:947
isc_result_t dhcp_failover_send_state(dhcp_failover_state_t *)
struct iaddr broadcast_addr(struct iaddr, struct iaddr)
Definition: inet.c:114
TIME renewal
Definition: dhcpd.h:1018
int ddns_update_style
Definition: dhcpd.c:80
int fqdn6_universe_decode(struct option_state *options, const unsigned char *buffer, unsigned length, struct universe *u)
Definition: options.c:3438
TIME tsfp
Definition: dhcpd.h:578
void(* func)(struct dns_query *)
Definition: dhcpd.h:1339
isc_result_t dhcp_subnet_remove(omapi_object_t *, omapi_object_t *)
Definition: comapi.c:749
isc_result_t dhcp_subclass_create(omapi_object_t **, omapi_object_t *)
Definition: omapi.c:2294
isc_result_t enter_host(struct host_decl *, int, int)
Definition: mdb.c:221
enum expression_context op_context(enum expr_op)
Definition: tree.c:3154
TIME expiry
Definition: dhcpd.h:1358
int flags
Definition: dhcpd.h:842
void dhcp_failover_timeout(void *)
struct universe * find_option_universe(struct option *, const char *)
Definition: options.c:277
int add_option(struct option_state *options, unsigned int option_num, void *data, unsigned int data_len)
Definition: options.c:4145
int refcnt
Definition: dhcpd.h:361
isc_result_t dhcp_group_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: comapi.c:203
u_int32_t hash
Definition: dhcpd.h:1357
OMAPI_OBJECT_PREAMBLE
Definition: dhcpd.h:862
int make_const_data(struct expression **, const unsigned char *, unsigned, int, int, const char *, int)
Definition: tree.c:220
int dhcp_failover_state_match(dhcp_failover_state_t *, u_int8_t *, unsigned)
int dhcpd_interface_setup_hook(struct interface_info *ip, struct iaddr *ia)
Definition: dhcpd.c:1209
isc_result_t dhcp_lease_destroy(omapi_object_t *, const char *, int)
Definition: omapi.c:401
int token_indent_data_string(FILE *, int, int, const char *, const char *, struct data_string *)
Definition: print.c:1196
int flags
Definition: dhcpd.h:1012
void write_lease_option(struct option_cache *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *)
Definition: dhclient.c:3242
void dhcpv6_client_assignments(void)
void dhcp_failover_toack_queue_timeout(void *)
isc_result_t dhcp_pool_destroy(omapi_object_t *, const char *, int)
Definition: omapi.c:1578
int parse_case_statement(struct executable_statement **, struct parse *, int *, enum expression_context)
Definition: parse.c:3257
void interface_stash(struct interface_info *)
Definition: discover.c:1444
void delete_option(struct universe *, struct option_state *, int)
Definition: options.c:2652
void dump_raw(const unsigned char *, unsigned)
int packet_allocate(struct packet **, const char *, int)
Definition: alloc.c:1016
int unset(struct binding_scope *, const char *)
Definition: tree.c:4070
void print_hex_only(unsigned, const u_int8_t *, unsigned, char *)
Definition: print.c:369
struct binding_scope ** scope
Definition: dhcpd.h:1668
int class_count
Definition: dhcpd.h:412
int address_count
Definition: dhcpd.h:1250
void send_decline(void *)
Definition: dhclient.c:2666
struct iaddrmatchlist * reject_list
Definition: dhcpd.h:1143
struct string_list * medium
Definition: dhcpd.h:1022
isc_result_t dhcp_lease_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: omapi.c:198
int cons_options(struct packet *, struct dhcp_packet *, struct lease *, struct client_state *, int, struct option_state *, struct option_state *, struct binding_scope **, int, int, int, struct data_string *, const char *)
Definition: options.c:523
struct lease * next
Definition: dhcpd.h:509
expression_context
Definition: tree.h:84
struct option_cache * lookup_hashed_option(struct universe *, struct option_state *, unsigned)
Definition: options.c:2264
struct client_config * config
Definition: dhcpd.h:1164
OMAPI_OBJECT_PREAMBLE
Definition: dhcpd.h:905
u_int8_t data[1]
Definition: dhcpd.h:336
isc_result_t read_client_conf(void)
Definition: clparse.c:52
u_int16_t flags
Definition: dhcpd.h:1659
isc_result_t dhcp_lease_create(omapi_object_t **, omapi_object_t *)
Definition: omapi.c:848
struct protocol * next
Definition: dhcpd.h:1329
int interface_count
Definition: discover.c:75
struct interface_info ** interface_vector
Definition: discover.c:74
unsigned remote_id_len
Definition: dhcpd.h:1265
void(* ddns_action_t)(struct dhcp_ddns_cb *ddns_cb, isc_result_t result)
Definition: dhcpd.h:1641
void free_protocol(struct protocol *, const char *, int)
Definition: alloc.c:346
struct universe agent_universe
Definition: stables.c:165
ipv6_pond structure
Definition: dhcpd.h:1593
#define HARDWARE_ADDR_LEN
Definition: dhcpd.h:437
isc_result_t parse_option_name(struct parse *, int, int *, struct option **)
Definition: parse.c:1190
void * transaction
Definition: dhcpd.h:1670
void dhclient_schedule_updates(struct client_state *client, struct iaddr *addr, int offset)
Definition: tree.h:118
void state_panic(void *)
Definition: dhclient.c:2389
const char * piaddr(struct iaddr)
Definition: inet.c:581
isc_result_t dhcp_lease_free(omapi_object_t *, const char *, int)
int make_limit(struct expression **, struct expression *, int)
Definition: tree.c:332
TIME rebind
Definition: dhcpd.h:1018
char path_resolv_conf[]
Definition: resolv.c:34
struct lease * expired
Definition: dhcpd.h:912
u_int16_t local_port
Definition: dhclient.c:87
void * dataspace
Definition: dhcpd.h:1671
isc_result_t dhcp_class_remove(omapi_object_t *, omapi_object_t *)
Definition: omapi.c:2205
ssize_t receive_packet(struct interface_info *, unsigned char *, size_t, struct sockaddr_in *, struct hardware *)
int option_dereference(struct option **dest, const char *file, int line)
Definition: tables.c:956
struct ipv6_pool ** pools
isc_result_t save_parse_state(struct parse *cfile)
Definition: conflex.c:128
void ddns_cb_forget_zone(dhcp_ddns_cb_t *ddns_cb)
OMAPI_OBJECT_PREAMBLE
Definition: dhcpd.h:976
int commit_leases(void)
Definition: dhclient.c:1787
OMAPI_OBJECT_PREAMBLE
Definition: dhcpd.h:1391
struct iasubopt ** iasubopt
Definition: dhcpd.h:1537
struct dhc6_lease * next
Definition: dhcpd.h:1063
void classification_setup(void)
Definition: class.c:45
TIME next_event_time
Definition: dhcpd.h:917
void(* handler)(struct protocol *)
Definition: dhcpd.h:1331
unsigned int rbuf_max
Definition: dhcpd.h:1273
int write_ia(const struct ia_xx *)
Definition: db.c:519
void dump_packet_option(struct option_cache *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *, void *)
int ugflag
Definition: dhcpd.h:285
struct option * new_option(const char *, const char *, int)
struct ia_xx * ia
Definition: dhcpd.h:1507
int flags
Definition: dhcpd.h:878
char * cur_line
Definition: dhcpd.h:257
void parse_server_duid(struct parse *cfile)
struct universe dhcpv6_universe
Definition: tables.c:328
int fqdn_option_space_encapsulate(struct data_string *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *)
Definition: options.c:3163
int numclasseswritten
Definition: mdb.c:69
void remove_if_route(struct interface_info *, struct in_addr)
int ft_sizes[]
int store_option(struct data_string *, struct universe *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct option_cache *)
Definition: options.c:2837
isc_result_t dhcp_failover_listener_signal(omapi_object_t *, const char *, va_list)
const char * binding_state_names[]
Definition: stables.c:161
struct icmp_state * icmp_state
Definition: icmp.c:35
struct executable_statement * on_expiry
Definition: dhcpd.h:501
TIME timeout
Definition: dhcpd.h:1109
u_int8_t * remote_id
Definition: dhcpd.h:400
int linked_option_state_dereference(struct universe *, struct option_state *, const char *, int)
Definition: options.c:3747
const char * pdestdesc(struct iaddr)
Definition: inet.c:559
struct shared_network * next
Definition: dhcpd.h:932
int group_writer(struct group_object *)
Definition: db.c:1237
isc_result_t dhcp_group_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: comapi.c:303
struct collection default_collection
Definition: dhcpd.h:3004
struct shared_network * shared_network
Definition: dhcpd.h:908
void add_enumeration(struct enumeration *)
Definition: parse.c:37
struct string_list * medium
Definition: dhcpd.h:1183
unsigned int is_bootp
Definition: dhcpd.h:1026
isc_result_t dhcp_group_destroy(omapi_object_t *, const char *, int)
Definition: comapi.c:228
void client_envadd(struct client_state *, const char *, const char *, const char *,...) __attribute__((__format__(__printf__
void dhcp_reply(struct lease *)
Definition: dhcp.c:3404
const char * file
Definition: dhcpd.h:3535
isc_result_t find_cached_zone(dhcp_ddns_cb_t *, int)
struct dhcp_ddns_cb * ddns_cb
Definition: dhcpd.h:1224
isc_result_t dhcp_interface_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: discover.c:1175
char * name
Definition: dhcpd.h:933
struct enumeration syslog_enum
Definition: stables.c:405
void new_shared_network_interface(struct parse *, struct shared_network *, const char *)
Definition: mdb.c:1005
struct permit * permit_list
Definition: dhcpd.h:909
char * inbuf
Definition: dhcpd.h:292
int make_const_option_cache(struct option_cache **, struct buffer **, u_int8_t *, unsigned, struct option *, const char *, int)
Definition: tree.c:150
int configured
Definition: dhcpd.h:1278
isc_result_t create_prefix6(struct ipv6_pool *pool, struct iasubopt **pref, unsigned int *attempts, const struct data_string *uid, time_t soft_lifetime_end_time)
Definition: mdb6.c:1668
struct subnet * subnet
Definition: dhcpd.h:1578
const char * dhcp_failover_reject_reason_print(int)
struct leasequeue * next
Definition: dhcpd.h:1307
struct domain_search_list * domains
Definition: resolv.c:33
TIME rcdate
Definition: dhcpd.h:320
int dhcp_failover_send_acks(dhcp_failover_state_t *)
ssize_t decode_hw_header(struct interface_info *, unsigned char *, unsigned, struct hardware *)
void if_reinitialize_receive(struct interface_info *)
struct collection * next
Definition: dhcpd.h:962
int can_unicast_without_arp(struct interface_info *)
struct lease_state * new_lease_state(const char *, int)
void convert_lease_statement(struct parse *, jrefproto)
isc_result_t read_conf_file(const char *, struct group *, int, int)
Definition: confpars.c:72
void * what
Definition: dhcpd.h:1317
void if_register_receive(struct interface_info *)
int bill_class(struct lease *, struct class *)
Definition: class.c:274
struct shared_network * shared_network
Definition: dhcpd.h:1576
void trace_conf_stop(trace_type_t *ttype)
isc_result_t dhcp_failover_send_updates(dhcp_failover_state_t *)
unsigned char * parse_numeric_aggregate(struct parse *, unsigned char *, unsigned *, int, int, unsigned)
Definition: parse.c:723
int format_has_text(const char *)
isc_result_t ia_reference(struct ia_xx **ia, struct ia_xx *src, const char *file, int line)
Definition: mdb6.c:376
void make_client_config(struct client_state *, struct client_config *)
Definition: clparse.c:1026
struct executable_statement * on_commit
Definition: dhcpd.h:502
isc_result_t dhcp_interface_remove(omapi_object_t *, omapi_object_t *)
Definition: discover.c:1382
isc_result_t dhcp_pool_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: omapi.c:1531
void data_string_truncate(struct data_string *, int)
Definition: alloc.c:1289
void dhcp_failover_startup_timeout(void *)
void print_hex_or_string(unsigned, const u_int8_t *, unsigned, char *)
Definition: print.c:396
isc_result_t dhcp_shared_network_destroy(omapi_object_t *, const char *, int)
Definition: comapi.c:805
Definition: dhcpd.h:975
isc_result_t dhcp_failover_send_update_request_all(dhcp_failover_state_t *)
const unsigned char * data
Definition: tree.h:79
struct interface_info * interface
Definition: dhcpd.h:1160
policy
Definition: dhcpd.h:1091
void dhcp_common_objects_setup(void)
trace_type_t * outpacket_trace
isc_result_t generate_new_server_duid(void)
isc_result_t conf_file_subparse(struct parse *, struct group *, int)
Definition: confpars.c:239
struct binding_scope * scope
Definition: dhcpd.h:515
void parse_group_declaration(struct parse *, struct group *)
Definition: confpars.c:2810
u_int16_t ia_type
Definition: dhcpd.h:1052
struct domain_search_list * next
Definition: dhcpd.h:325
isc_boolean_t released
Definition: dhcpd.h:1066
unsigned packet_length
Definition: dhcpd.h:372
isc_result_t ipv6_pool_reference(struct ipv6_pool **pool, struct ipv6_pool *src, const char *file, int line)
reference an IPv6 pool structure.
Definition: mdb6.c:701
binding_state_t conflict_binding_state_transition_check(struct lease *, dhcp_failover_state_t *, binding_state_t, u_int32_t)
unsigned char * rbuf
Definition: dhcpd.h:1272
void parse_hardware_param(struct parse *, struct hardware *)
Definition: parse.c:604
int v6address_max
Definition: dhcpd.h:1256
isc_result_t dhcp_failover_state_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
isc_result_t lease_instantiate(const void *, unsigned, void *)
Definition: mdb.c:2612
struct permit * permit_list
Definition: dhcpd.h:1599
TIME offered_expiry
Definition: dhcpd.h:600
u_int16_t pool_type
Definition: dhcpd.h:1566
char * path_dhclient_script
Definition: dhclient.c:59
struct host_decl * n_dynamic
Definition: dhcpd.h:864
isc_result_t dhcp_pool_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
Definition: omapi.c:1696
int got_requested_address
Definition: dhcpd.h:403
int option_chain_head_dereference(struct option_chain_head **, const char *, int)
Definition: alloc.c:96
isc_result_t dhcp_interface_create(omapi_object_t **, omapi_object_t *)
Definition: discover.c:1366
int find_lease_by_ip_addr(struct lease **, struct iaddr, const char *, int)
Definition: mdb.c:1991
isc_result_t fallback_discard(omapi_object_t *)
int data_subexpression_length(int *, struct expression *)
int append_option_buffer(struct universe *, struct option_state *, struct buffer *, unsigned char *, unsigned, unsigned, int)
Definition: options.c:2315
struct client_lease * leases
Definition: dhcpd.h:1175
void parse_ia_na_declaration(struct parse *)
Definition: confpars.c:4487
struct data_string default_duid
Definition: dhclient.c:73
struct ifreq * ifp
Definition: dhcpd.h:1277
struct group * group
Definition: dhcpd.h:840
isc_result_t dhcp_failover_listener_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
struct dhc6_lease * old_lease
Definition: dhcpd.h:1194
HASH_FUNCTIONS_DECL(option_name, const char *, struct option, option_name_hash_t) HASH_FUNCTIONS_DECL(option_code
u_int32_t requested_lease
Definition: dhcpd.h:1129
unsigned int is_static
Definition: dhcpd.h:1025
struct name_server * new_name_server(const char *, int)
struct packet * packet
Definition: dhcpd.h:598
int relays
Definition: dhcpd.h:885
isc_result_t dhcp_subnet_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: comapi.c:631
u_int8_t hops
Definition: dhcpd.h:618
int dhcp_option_default_priority_list[]
isc_result_t form_duid(struct data_string *duid, const char *file, int line)
Definition: dhclient.c:3313
int expr_valid_for_context(struct expression *, enum expression_context)
TIME MRD
Definition: dhcpd.h:1208
struct timeval * process_outstanding_timeouts(struct timeval *)
Definition: dispatch.c:46
isc_result_t dhcp_control_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
Definition: comapi.c:559
void make_client_state(struct client_state **)
Definition: clparse.c:1017
isc_result_t dhcp_failover_link_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
int dirty
Definition: dhcpd.h:988
binding_state_t next_binding_state
Definition: dhcpd.h:564
int store_options6(char *, int, struct option_state *, struct packet *, const int *, struct data_string *)
Definition: options.c:925
struct enumeration ddns_styles
Definition: stables.c:335
int executable_statement_foreach(struct executable_statement *, int(*)(struct executable_statement *, void *, int), void *, int)
Definition: execute.c:1093
int expression_reference(struct expression **, struct expression *, const char *, int)
Definition: alloc.c:447
u_int16_t flags
Definition: dhcpd.h:1387
void ia_remove_iasubopt(struct ia_xx *ia, struct iasubopt *iasubopt, const char *file, int line)
Definition: mdb6.c:475
TIME starts
Definition: dhcpd.h:1054
void go_daemon(void)
Definition: dhclient.c:4047
u_int8_t binding_state_t
Definition: dhcpd.h:491
int if_register_socket(struct interface_info *, int, int *, struct in6_addr *)
struct interface_info * interface
Definition: dhcpd.h:953
void convert_option_decl(struct parse *, jrefproto)
int dhcp_failover_state_pool_check(dhcp_failover_state_t *)
void hw_hash_add(struct lease *)
Definition: mdb.c:2190
void classify_client(struct packet *)
Definition: class.c:63
omapi_object_type_t * dhcp_type_subnet
struct group * group
Definition: dhcpd.h:1596
isc_result_t dhcp_control_signal_handler(omapi_object_t *, const char *, va_list)
Definition: comapi.c:506
struct dhc6_lease * active_lease
Definition: dhcpd.h:1193
int parse_ip_addr_or_hostname(struct expression **, struct parse *, int)
Definition: parse.c:258
isc_result_t dhcp_pool_create(omapi_object_t **, omapi_object_t *)
Definition: omapi.c:1708
#define PACKET_MAX_CLASSES
Definition: dhcpd.h:410
isc_result_t dhcp_failover_process_bind_update(dhcp_failover_state_t *, failover_message_t *)
struct group_object * object
Definition: dhcpd.h:853
struct pool * pools
Definition: dhcpd.h:940
lease_ip_hash_t * lease_ip_addr_hash
Definition: mdb.c:39
char * tval
Definition: dhcpd.h:286
char * print_dec_2(unsigned long)
Definition: print.c:509
isc_result_t dhcp_failover_process_update_done(dhcp_failover_state_t *, failover_message_t *)
int buffer_reference(struct buffer **, struct buffer *, const char *, int)
Definition: alloc.c:699
int file
Definition: dhcpd.h:291
int spawning
Definition: dhcpd.h:1000
TIME reboot_timeout
Definition: dhcpd.h:1123
void remove_routes(struct in_addr)
u_int32_t host_addr(struct iaddr, struct iaddr)
Definition: inet.c:140
int lease_mine_to_reallocate(struct lease *)
isc_result_t expire_lease6(struct iasubopt **leasep, struct ipv6_pool *pool, time_t now)
Definition: mdb6.c:1521
struct group * group
Definition: dhcpd.h:875
TIME starts
Definition: dhcpd.h:1042
struct pool * next
Definition: dhcpd.h:906
void dhcp_failover_send_contact(void *)
void write_statements(FILE *, struct executable_statement *, int)
Definition: execute.c:744
isc_result_t dhcp_subclass_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: omapi.c:2221
isc_result_t range2cidr(struct iaddrcidrnetlist **result, const struct iaddr *lo, const struct iaddr *hi)
Definition: inet.c:362
isc_result_t dhcp_pool_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: omapi.c:1556
int buffer_allocate(struct buffer **, unsigned, const char *, int)
Definition: alloc.c:680
char * client_hostname
Definition: dhcpd.h:514
struct dns_wakeup * wakeups
Definition: dhcpd.h:1370
TIME MRC
Definition: dhcpd.h:1206
struct group * group
Definition: dhcpd.h:1002
int lease_copy(struct lease **, struct lease *, const char *, int)
Definition: mdb.c:1640
void add_route_default_gateway(struct interface_info *, struct in_addr)
int num_active
Definition: dhcpd.h:1571
void data_string_copy(struct data_string *, const struct data_string *, const char *, int)
Definition: alloc.c:1260
u_int16_t secs
Definition: dhcpd.h:1180
int binding_scope_reference(struct binding_scope **, struct binding_scope *, const char *, int)
Definition: alloc.c:1228
struct option_chain_head * agent_options
Definition: dhcpd.h:520
int lexline
Definition: dhcpd.h:253
void struct client_lease * packet_to_lease(struct packet *, struct client_state *)
Definition: dhclient.c:2078
isc_result_t interface_setup(void)
Definition: discover.c:80
int backup_leases
Definition: dhcpd.h:920
int parse_warn(struct parse *, const char *,...) __attribute__((__format__(__printf__
struct option_tag * next
Definition: dhcpd.h:335
void send_release(void *)
Definition: dhclient.c:2689
struct packet * dhcpv6_container_packet
Definition: dhcpd.h:386
int dns_update_timeout
Definition: dhcpd.h:1235
struct option_cache * primary
Definition: dhcpd.h:1382
char * server_name
Definition: dhcpd.h:1020
ssize_t receive_packet6(struct interface_info *interface, unsigned char *buf, size_t len, struct sockaddr_in6 *from, struct in6_addr *to_addr, unsigned int *if_index)
isc_result_t ddns_modify_fwd(dhcp_ddns_cb_t *ddns_cb, const char *file, int line)
isc_result_t binding_scope_get_value(omapi_value_t **, struct binding_scope *, omapi_data_string_t *)
Definition: omapi.c:2405
struct in6_addr * v6addresses
Definition: dhcpd.h:1252
int is_dns_expression(struct expression *)
dhcp_control_object_t
Definition: dhcpd.h:2287
isc_result_t iasubopt_reference(struct iasubopt **iasubopt, struct iasubopt *src, const char *file, int line)
Definition: mdb6.c:233
void remove_all_if_routes(struct interface_info *)
void dhcp_failover_auto_partner_down(void *vs)
struct interface_info * dummy_interfaces
Definition: discover.c:40
int bootp_broadcast_always
Definition: dhcpd.h:1152
int num_pools