ISC DHCP 4.4.3-P1
A reference DHCPv4 and DHCPv6 implementation
 
Loading...
Searching...
No Matches
tree.h
Go to the documentation of this file.
1/* tree.h
2
3 Definitions for address trees... */
4
5/*
6 * Copyright (C) 2004-2022 Internet Systems Consortium, Inc. ("ISC")
7 * Copyright (c) 1996-2003 by Internet Software Consortium
8 *
9 * This Source Code Form is subject to the terms of the Mozilla Public
10 * License, v. 2.0. If a copy of the MPL was not distributed with this
11 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
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 * PO Box 360
23 * Newmarket, NH 03857 USA
24 * <info@isc.org>
25 * https://www.isc.org/
26 *
27 */
28
29/* A pair of pointers, suitable for making a linked list. */
30typedef struct _pair {
31 caddr_t car;
32 struct _pair *cdr;
34
39
41 const char *name;
42 u_int8_t value;
43};
44
47 const char *name;
48 unsigned width;
50};
51
52/* Tree node types... */
53#define TREE_CONCAT 1
54#define TREE_HOST_LOOKUP 2
55#define TREE_CONST 3
56#define TREE_LIMIT 4
57#define TREE_DATA_EXPR 5
58
59/* A data buffer with a reference count. */
60struct buffer {
61 int refcnt;
62 unsigned char data [1];
63};
64
65/* XXX The mechanism by which data strings are returned is currently
66 XXX broken: rather than returning an ephemeral pointer, we create
67 XXX a reference to the data in the caller's space, which the caller
68 XXX then has to dereference - instead, the reference should be
69 XXX ephemeral by default and be made a persistent reference explicitly. */
70/* XXX on the other hand, it seems to work pretty nicely, so maybe the
71 XXX above comment is meshuggenah. */
72/* XXX I think the above comment tries to say this:
73 XXX http://tinyurl.com/2tjqre */
74
75/* A string of data bytes, possibly accompanied by a larger buffer. */
77 struct buffer *buffer;
78 const unsigned char *data;
79 unsigned len; /* Does not include NUL terminator, if any. */
81};
82
92
98
116
117struct binding {
118 struct binding *next;
119 char *name;
121};
122
128
129/* Expression tree structure. */
130
196
201 struct {
206 struct expression *equal [2];
207 struct expression *and [2];
208 struct expression *or [2];
216 struct {
217 struct expression *expr;
218 struct expression *len;
222 struct option *option;
224 struct {
225 struct expression *offset;
226 struct expression *len;
231 unsigned long const_int;
232 struct expression *concat [2];
234 struct option *exists;
236 struct {
242 struct {
243 struct expression *width;
244 struct expression *buffer;
245 } reverse;
246 struct {
249 } pick_first_value;
250 struct {
251 struct expression *car;
252 struct expression *cdr;
253 } dns_transaction;
254 struct {
255 unsigned rrclass;
256 unsigned rrtype;
260 } ns_add;
261 struct {
262 unsigned rrclass;
263 unsigned rrtype;
264 struct expression *rrname;
265 struct expression *rrdata;
266 } ns_delete, ns_exists, ns_not_exists;
267 char *variable;
268 struct {
271 } arg;
272 struct {
273 char *name;
275 } funcall;
276 struct fundef *func;
277 struct {
280 } v6relay;
282 int flags;
283# define EXPR_EPHEMERAL 1
284};
285
286/* DNS host entry structure... */
293
294struct option_cache; /* forward */
295struct packet; /* forward */
296struct option_state; /* forward */
297struct decoded_option_state; /* forward */
298struct lease; /* forward */
299struct client_state; /* forward */
300
301struct universe {
302 const char *name;
303 struct option_cache *(*lookup_func) (struct universe *,
304 struct option_state *,
305 unsigned);
306 void (*save_func) (struct universe *, struct option_state *,
307 struct option_cache *, isc_boolean_t);
308 void (*foreach) (struct packet *,
309 struct lease *, struct client_state *,
310 struct option_state *, struct option_state *,
311 struct binding_scope **, struct universe *, void *,
312 void (*) (struct option_cache *, struct packet *,
313 struct lease *, struct client_state *,
314 struct option_state *,
315 struct option_state *,
316 struct binding_scope **,
317 struct universe *, void *));
318 void (*delete_func) (struct universe *universe,
319 struct option_state *, int);
321 struct option_state *,
322 const char *, int);
323 int (*decode) (struct option_state *,
324 const unsigned char *, unsigned, struct universe *);
325 int (*encapsulate) (struct data_string *, struct packet *,
326 struct lease *, struct client_state *,
327 struct option_state *, struct option_state *,
328 struct binding_scope **,
329 struct universe *);
330 u_int32_t (*get_tag) (const unsigned char *);
331 void (*store_tag) (unsigned char *, u_int32_t);
332 u_int32_t (*get_length) (const unsigned char *);
333 void (*store_length) (unsigned char *, u_int32_t);
339 int index;
340
341 /* Flags should probably become condensed. */
343};
344
345struct option {
346 const char *name;
347 const char *format;
349 unsigned code;
351};
isc_boolean_t
Definition data.h:150
time_t TIME
Definition dhcpd.h:85
struct hash_table option_name_hash_t
Definition dhcpd.h:77
struct hash_table option_code_hash_t
Definition dhcpd.h:78
const char int
Definition omapip.h:442
Definition tree.h:30
struct _pair * cdr
Definition tree.h:32
caddr_t car
Definition tree.h:31
struct binding * bindings
Definition tree.h:126
struct binding_scope * outer
Definition tree.h:125
int refcnt
Definition tree.h:124
enum binding_value::@135246253323115003010247222006030375211205217247 type
@ binding_data
Definition tree.h:103
@ binding_function
Definition tree.h:106
@ binding_numeric
Definition tree.h:104
@ binding_dns
Definition tree.h:105
@ binding_boolean
Definition tree.h:102
int refcnt
Definition tree.h:100
char * name
Definition tree.h:119
struct binding * next
Definition tree.h:118
struct binding_value * value
Definition tree.h:120
Definition tree.h:60
unsigned char data[1]
Definition tree.h:62
int refcnt
Definition tree.h:61
struct buffer * buffer
Definition tree.h:77
const unsigned char * data
Definition tree.h:78
int terminated
Definition tree.h:80
unsigned len
Definition tree.h:79
Definition tree.h:287
TIME timeout
Definition tree.h:289
struct data_string data
Definition tree.h:290
int refcnt
Definition tree.h:288
char hostname[1]
Definition tree.h:291
u_int8_t value
Definition tree.h:42
const char * name
Definition tree.h:41
struct enumeration_value * values
Definition tree.h:49
unsigned width
Definition tree.h:48
struct enumeration * next
Definition tree.h:46
const char * name
Definition tree.h:47
union expression::expr_union data
int flags
Definition tree.h:282
enum expr_op op
Definition tree.h:199
int refcnt
Definition tree.h:198
Definition tree.h:93
int refcnt
Definition tree.h:94
struct string_list * args
Definition tree.h:95
struct executable_statement * statements
Definition tree.h:96
Definition dhcpd.h:560
Definition tree.h:345
const char * format
Definition tree.h:347
unsigned code
Definition tree.h:349
int refcnt
Definition tree.h:350
struct universe * universe
Definition tree.h:348
const char * name
Definition tree.h:346
int(* decode)(struct option_state *, const unsigned char *, unsigned, struct universe *)
Definition tree.h:323
void(* store_length)(unsigned char *, u_int32_t)
Definition tree.h:333
int tag_size
Definition tree.h:334
void(* save_func)(struct universe *, struct option_state *, struct option_cache *, isc_boolean_t)
Definition tree.h:306
int(* encapsulate)(struct data_string *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *)
Definition tree.h:325
void(* store_tag)(unsigned char *, u_int32_t)
Definition tree.h:331
int index
Definition tree.h:339
int(* option_state_dereference)(struct universe *, struct option_state *, const char *, int)
Definition tree.h:320
void(* delete_func)(struct universe *universe, struct option_state *, int)
Definition tree.h:318
option_name_hash_t * name_hash
Definition tree.h:336
unsigned site_code_min
Definition tree.h:335
int concat_duplicates
Definition tree.h:342
option_code_hash_t * code_hash
Definition tree.h:337
u_int32_t(* get_tag)(const unsigned char *)
Definition tree.h:330
u_int32_t(* get_length)(const unsigned char *)
Definition tree.h:332
struct option * enc_opt
Definition tree.h:338
int length_size
Definition tree.h:334
const char * name
Definition tree.h:302
unsigned end
Definition tree.h:335
struct _pair * pair
expression_context
Definition tree.h:83
@ context_function
Definition tree.h:90
@ context_data
Definition tree.h:86
@ context_dns
Definition tree.h:88
@ context_data_or_numeric
Definition tree.h:89
@ context_boolean
Definition tree.h:85
@ context_numeric
Definition tree.h:87
@ context_any
Definition tree.h:84
expr_op
Definition tree.h:131
@ expr_ucase
Definition tree.h:188
@ expr_funcall
Definition tree.h:177
@ expr_gethostname
Definition tree.h:192
@ expr_extract_int8
Definition tree.h:147
@ expr_ns_not_exists
Definition tree.h:169
@ expr_host_lookup
Definition tree.h:139
@ expr_option
Definition tree.h:143
@ expr_encode_int32
Definition tree.h:152
@ expr_static
Definition tree.h:165
@ expr_binary_and
Definition tree.h:184
@ expr_encode_int16
Definition tree.h:151
@ expr_regex_match
Definition tree.h:190
@ expr_equal
Definition tree.h:135
@ expr_check
Definition tree.h:134
@ expr_none
Definition tree.h:132
@ expr_lease_time
Definition tree.h:163
@ expr_extract_int16
Definition tree.h:148
@ expr_filename
Definition tree.h:174
@ expr_binary_or
Definition tree.h:185
@ expr_pick_first_value
Definition tree.h:162
@ expr_encapsulate
Definition tree.h:155
@ expr_ns_add
Definition tree.h:166
@ expr_concat_dclist
Definition tree.h:194
@ expr_remainder
Definition tree.h:183
@ expr_config_option
Definition tree.h:160
@ expr_not
Definition tree.h:142
@ expr_add
Definition tree.h:179
@ expr_const_int
Definition tree.h:153
@ expr_sname
Definition tree.h:175
@ expr_divide
Definition tree.h:182
@ expr_hardware
Definition tree.h:144
@ expr_concat
Definition tree.h:138
@ expr_or
Definition tree.h:141
@ expr_and
Definition tree.h:140
@ expr_null
Definition tree.h:171
@ expr_dns_transaction
Definition tree.h:164
@ expr_host_decl_name
Definition tree.h:161
@ expr_known
Definition tree.h:156
@ expr_leased_address
Definition tree.h:158
@ expr_lcase
Definition tree.h:189
@ expr_exists
Definition tree.h:154
@ expr_const_data
Definition tree.h:146
@ expr_binary_to_ascii
Definition tree.h:159
@ expr_ns_delete
Definition tree.h:167
@ expr_extract_int32
Definition tree.h:149
@ expr_substring
Definition tree.h:136
@ expr_iregex_match
Definition tree.h:191
@ expr_multiply
Definition tree.h:181
@ expr_suffix
Definition tree.h:137
@ expr_function
Definition tree.h:178
@ expr_packet
Definition tree.h:145
@ expr_encode_int8
Definition tree.h:150
@ expr_variable_exists
Definition tree.h:172
@ expr_match
Definition tree.h:133
@ expr_subtract
Definition tree.h:180
@ expr_binary_xor
Definition tree.h:186
@ expr_arg
Definition tree.h:176
@ expr_not_equal
Definition tree.h:170
@ expr_v6relay
Definition tree.h:193
@ expr_client_state
Definition tree.h:187
@ expr_reverse
Definition tree.h:157
@ expr_variable_reference
Definition tree.h:173
@ expr_ns_exists
Definition tree.h:168
struct binding_value * bv
Definition tree.h:113
struct fundef * fundef
Definition tree.h:112
struct data_string data
Definition tree.h:109
unsigned long intval
Definition tree.h:110
struct expression * subtract
Definition tree.h:211
struct expression * cdr
Definition tree.h:248
unsigned long const_int
Definition tree.h:231
struct expression * rrname
Definition tree.h:257
struct dns_host_entry * host_lookup
Definition tree.h:233
struct expression * divide
Definition tree.h:213
struct expression * next
Definition tree.h:270
struct option * config_option
Definition tree.h:223
struct expression * not
Definition tree.h:209
struct expression * extract_int
Definition tree.h:229
struct expression * ucase
Definition tree.h:221
struct expression::expr_union::@152152363213031317102070271074050115327136262165 substring
struct option * exists
Definition tree.h:234
struct expression * remainder
Definition tree.h:214
struct expression::expr_union::@142357143130043056032332065103331215371345065324 b2a
struct expression * rrdata
Definition tree.h:258
struct expression * relay
Definition tree.h:278
struct collection * check
Definition tree.h:215
struct expression * arglist
Definition tree.h:274
struct expression * len
Definition tree.h:204
struct expression * encode_int
Definition tree.h:230
struct expression * val
Definition tree.h:269
struct expression * or[2]
Definition tree.h:208
struct data_string encapsulate
Definition tree.h:235
struct expression * and[2]
Definition tree.h:207
struct expression * add
Definition tree.h:210
struct expression * separator
Definition tree.h:239
struct expression::expr_union::@245157277262265343375031324341307155317045004360 suffix
struct expression * expr
Definition tree.h:202
struct expression * ttl
Definition tree.h:259
struct expression * roption
Definition tree.h:279
struct option * option
Definition tree.h:222
struct expression * base
Definition tree.h:237
struct expression * lcase
Definition tree.h:220
struct data_string const_data
Definition tree.h:228
struct expression * offset
Definition tree.h:203
struct expression * width
Definition tree.h:238
struct expression * buffer
Definition tree.h:240
struct fundef * func
Definition tree.h:276
struct expression * concat[2]
Definition tree.h:232
struct expression * car
Definition tree.h:247
struct expression * equal[2]
Definition tree.h:206
struct expression * multiply
Definition tree.h:212
Definition data.h:205