105#if defined (DEBUG_TOKENS)
174 log_fatal (
"no memory for string %s.", val);
217 log_fatal (
"can't allocate temp space for hostname.");
237 log_fatal (
"can't allocate space for hostname.");
244 unsigned l =
strlen ((
char *)(
c -> car));
275 unsigned char addr [4];
276 unsigned len =
sizeof addr;
342 &addr ->
len,
DOT, 10, 8))
361 &addr ->
len,
DOT, 10, 8)) {
366 "subnet mask width (%u) greater than 32.",
mask_width);
370 "destination descriptor with subnet mask width %u "
371 "should have %u octets, but has %u octets.",
384is_hex_string(
const char *
s) {
410 char v6[
sizeof(
"ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
425 is_hex_string(val)) ||
488 if (token !=
SLASH) {
502 if ((
n < 0) || (
n > 128)) {
526 const char *val, *
orig;
538 if (token ==
SLASH) {
544 " expecting a number.");
573 "\x00\x80\xc0\xe0\xf0\xf8\xfc\xfe"[
prefixlen % 8];
591 log_error(
"Warning: Extraneous bits removed "
592 "in address component of %s/%d.",
603 "expecting ip-address or ip-address/prefixlen");
639 if (!
strncmp(val,
"unknown-", 8)) {
643 "expecting a network hardware type");
735 max, separator, base, size)
745 unsigned char *
bufp = buf, *
s, *
t;
752 log_fatal (
"no space for numeric aggregate");
759 if (
token != separator) {
774 return (
unsigned char *)0;
814 }
while (++count != *max);
824 log_fatal (
"no space for numeric aggregate.");
825 s =
bufp + count - size / 8;
847 const unsigned char *ptr = (
const unsigned char *)
str;
860 if (ptr [0] ==
'0') {
861 if (ptr [1] ==
'x') {
880 else if (
tval >=
'A')
882 else if (
tval >=
'0')
890 "Bogus number %s: digit %d not in base %d",
894 val = val * base +
tval;
898 max = (1 << (size - 1));
900 max = (1 << (size - 1)) + ((1 << (size - 1)) - 1);
905 "%s%lo exceeds max (%d) for precision.",
907 (
unsigned long)val, max);
911 "%s%lx exceeds max (%d) for precision.",
913 (
unsigned long)val, max);
917 "%s%lu exceeds max (%d) for precision.",
919 (
unsigned long)val, max);
927 *buf = -(
unsigned long)val;
937 "Unexpected integer size: %d\n", size);
953 "Unexpected integer size: %d\n", size);
985 static int months[11] = { 31, 59, 90, 120, 151, 181,
986 212, 243, 273, 304, 334 };
1046 "expected slash separating year from month.");
1068 "expected slash separating month from day.");
1101 "expected colon separating hour from minute.");
1123 "expected colon separating minute from second.");
1147 "Time zone offset or semicolon expected.");
1165 !((
year - 72) & 3)) +
1227 "expecting identifier after option keyword.");
1234 log_fatal (
"no memory for uname information.");
1280 }
else if (
strncasecmp(val,
"unknown-", 8) == 0) {
1319 log_info(
"option %s has been redefined as option %s. "
1320 "Please update your configs if necessary.",
1369 log_fatal (
"No memory for new option space.");
1374 log_fatal (
"No memory for new option space name.");
1386 if (token !=
WIDTH) {
1415 "expecting a 1, 2 or 4.",
1423 if (token !=
WIDTH) {
1437 "expecting 1 or 2.",
lsize);
1445 if (token !=
SIZE) {
1471 }
while (token !=
SEMI);
1521 log_fatal (
"No memory to expand option space array.");
1530 log_fatal(
"Can't allocate %s option hash table.",
nu->name);
1600 if (token !=
EQUAL) {
1608 if (token ==
ARRAY) {
1628 "encapsulate must always be the last item.");
1652 "only uniform array inside record.");
1672 switch (
atoi (val)) {
1684 "%s bit precision is not supported.", val);
1724 tokbuf[
tokix++] =
'D';
1750 "expecting option space identifier");
1763 tokbuf [
tokix++] =
'E';
1790 if (
tokix ==
sizeof tokbuf) {
1798 tokbuf [
tokix++] = type;
1803 if (
tokix ==
sizeof tokbuf) {
1805 "too many types in record.");
1811 tokbuf[
tokix++] =
'a';
1813 if (token ==
COMMA) {
1816 "%s must be at end of record.",
1817 type ==
't' ?
"text" :
"string");
1843 "Arrays of encapsulations don't make sense.");
1848 log_fatal(
"no memory for option format.");
1888 log_fatal(
"error finding encapsulated option (%s:%d)",
1906 static unsigned char
1907 from64 [] = {64, 64, 64, 64, 64, 64, 64, 64,
1908 64, 64, 64, 62, 64, 64, 64, 63,
1909 52, 53, 54, 55, 56, 57, 58, 59,
1910 60, 61, 64, 64, 64, 64, 64, 64,
1911 64, 0, 1, 2, 3, 4, 5, 6,
1912 7, 8, 9, 10, 11, 12, 13, 14,
1913 15, 16, 17, 18, 19, 20, 21, 22,
1914 23, 24, 25, 64, 64, 64, 64, 64,
1915 64, 26, 27, 28, 29, 30, 31, 32,
1916 33, 34, 35, 36, 37, 38, 39, 40,
1917 41, 42, 43, 44, 45, 46, 47, 48,
1918 49, 50, 51, 64, 64, 64, 64, 64};
1935 log_fatal(
"no memory for base64 buffer.");
1946 for (
i = 0; val[
i];
i++) {
1950 if (((val[
i] <
' ') || (val[
i] >
'z')) ||
1951 ((
from64[val[
i] -
' '] > 63) && (val[
i] !=
'='))) {
1959 data->
len = (data->
len * 3) / 4;
1969 for (
i = 0;
t->string[
i];
i++) {
1970 unsigned foo =
t->string[
i];
1971 if (terminated && foo !=
'=') {
1973 "stuff after base64 '=' terminator: %s.",
1977 if ((foo <
' ') || (foo >
'z')) {
1980 "invalid base64 character %d.",
2017 "partial base64 value left over: %d.",
2069 log_fatal (
"no memory for string list.");
2085 log_fatal (
"no memory to store octet data.");
2088 data -> terminated = 0;
2139#if defined(ENABLE_EXECUTE)
2162 }
else if (token ==
LOCAL) {
2173 if (token !=
SEMI) {
2209 log_fatal (
"no memory for new statement.");
2211 (*result) -> data.add =
cta;
2221 log_fatal (
"no memory for new statement.");
2266 log_fatal (
"no memory for new statement.");
2325 "case statement in inappropriate scope.");
2337 "inappropriate scope.");
2343 log_fatal (
"no memory for default statement.");
2359 "%s can't be a variable name", val);
2367 log_fatal (
"no memory for set statement.");
2370 if (!(*result)->data.set.name)
2371 log_fatal (
"can't allocate variable name");
2381 (
unsigned *)0,
cfile);
2386 "expecting argument name");
2398 memset (
new, 0,
sizeof *
new);
2399 strcpy (
new ->
string, val);
2407 (
unsigned *)0,
cfile);
2408 }
while (token ==
COMMA);
2427 log_fatal (
"can't allocate expression.");
2447 if (token !=
EQUAL) {
2449 "expecting '=' in %s statement.",
2450 flag ?
"define" :
"set");
2460 "expecting expression.");
2480 "%s can't be a variable name", val);
2487 log_fatal (
"no memory for set statement.");
2490 if (!(*result)->data.unset)
2491 log_fatal (
"can't allocate variable name");
2503 log_fatal (
"no memory for eval statement.");
2511 "expecting data expression.");
2525#ifdef ENABLE_EXECUTE
2529 log_fatal (
"no memory for execute statement.");
2548 (*result)->data.execute.command =
dmalloc(len + 1,
MDL);
2549 if ((*result)->data.execute.command ==
NULL)
2550 log_fatal(
"can't allocate command name");
2551 strcpy((*result)->data.execute.command, val);
2553 ep = &(*result)->data.execute.arglist;
2554 (*result)->data.execute.argc = 0;
2558 log_fatal (
"can't allocate expression");
2564 "expecting expression.");
2571 ep = &(*ep)->data.arg.next;
2572 (*result)->data.execute.argc++;
2588 "enable execute(); expressions.");
2599 log_fatal (
"no memory for return statement.");
2607 "expecting data expression.");
2625 log_fatal (
"no memory for log statement.");
2638 if (token ==
FATAL) {
2639 (*result) ->
data.log.priority = log_priority_fatal;
2640 }
else if (token ==
ERROR) {
2641 (*result) ->
data.log.priority = log_priority_error;
2643 (*result) ->
data.log.priority = log_priority_debug;
2644 }
else if (token ==
INFO) {
2645 (*result) ->
data.log.priority = log_priority_info;
2647 (*result) ->
data.log.priority = log_priority_debug;
2653 if (token !=
COMMA) {
2677 if (token !=
SEMI) {
2697 log_fatal(
"no memory for execute statement.");
2710 if (!zone ->
name) {
2719 if (zone ->
name [
i - 1] !=
'.') {
2772 log_fatal (
"no memory for eval statement.");
2834 if (zone -> primary) {
2836 "more than one primary.");
2841 log_fatal (
"can't allocate primary option cache.");
2842 oc = zone -> primary;
2846 if (zone -> secondary) {
2852 log_fatal (
"can't allocate secondary.");
2853 oc = zone -> secondary;
2860 "expecting IP addr or hostname.");
2883 }
while (token ==
COMMA);
2884 if (token !=
SEMI) {
2898 log_fatal(
"can't allocate primary6 option cache.");
2921 if (
oc->expression) {
2938 }
while (token ==
COMMA);
2939 if (token !=
SEMI) {
2962 log_fatal(
"Multiple key definitions for zone %s.",
3039 "key %s: too many algorithms",
3046 "expecting key algorithm name.");
3055 static char add [] =
".SIG-ALG.REG.INT.";
3116 if (token ==
SEMI) {
3153 log_fatal (
"no memory for new statement.");
3160 (*result) -> data.on.evtypes |=
ON_EXPIRY;
3164 (*result) -> data.on.evtypes |=
ON_COMMIT;
3202 (
unsigned *)0,
cfile);
3233 log_fatal (
"no memory for new statement.");
3252 "expecting data or numeric expression.");
3270 (&(*result) -> data.s_switch.statements,
cfile,
lose,
3302 log_fatal (
"no memory for new statement.");
3312 ?
"data" :
"numeric"));
3349 log_fatal (
"no memory for if statement.");
3369#if defined (DEBUG_EXPRESSION_PARSE)
3395 (
unsigned *)0,
cfile);
3419 "expecting if statement");
3433 (&(*result) -> data.ie.fc,
3453 "expecting conditional.");
3513 "boolean value (true/false/on/off) expected");
3629 log_fatal (
"can't allocate expression");
3637 log_fatal (
"can't allocate expression");
3681 log_fatal (
"can't allocate expression");
3686 &(*expr)->data.option);
3688 (*expr)->data.option ==
NULL) {
3698 log_fatal (
"can't allocate expression");
3705 log_fatal (
"can't allocate expression");
3712 log_fatal (
"can't allocate expression");
3730 "expecting data expression.");
3738 if (token !=
COMMA) {
3752 "expecting numeric expression.");
3781 log_fatal (
"can't allocate expression");
3808 log_fatal (
"can't allocate expression");
3826 log_fatal (
"can't allocate expression");
3845 log_fatal (
"can't allocate expression");
3867 if (token ==
COMMA) {
3870 log_fatal (
"can't allocate at CONCAT2");
3887 log_fatal (
"can't allocate expression");
3930 log_fatal (
"can't allocate expression");
3959 log_fatal (
"can't allocate expression");
3975 if (token ==
COMMA) {
3985 }
while (token ==
COMMA);
3995 log_fatal (
"can't allocate expression");
4003 &(*expr)->data.option);
4005 (*expr)->data.option ==
NULL) {
4015 log_fatal (
"can't allocate expression");
4022 log_fatal (
"can't allocate expression");
4029 log_fatal (
"can't allocate expression");
4036 log_fatal (
"can't allocate expression");
4043 log_fatal (
"can't allocate expression");
4050 log_fatal (
"can't allocate expression");
4057 log_fatal (
"can't allocate expression");
4064 log_fatal (
"can't allocate expression");
4071 log_fatal (
"can't allocate expression");
4099 log_fatal (
"can't make constant string expression.");
4112 log_fatal (
"can't allocate expression");
4118 "expecting data expression.");
4127 if (token !=
COMMA) {
4141 switch (
atoi (val)) {
4156 "unsupported integer size %d",
atoi (val));
4182 log_fatal (
"can't allocate expression");
4194 if (token !=
COMMA) {
4208 switch (
atoi (val)) {
4223 "unsupported integer size %d",
atoi (val));
4246 log_fatal (
"can't allocate expression");
4254 log_fatal (
"can't allocate expression");
4269 log_fatal (
"can't allocate expression");
4357 log_fatal (
"can't allocate expression");
4360 if (!(*expr)->data.variable)
4361 log_fatal (
"can't allocate variable name");
4394 "\"foo.example.com\"");
4400 log_fatal(
"Error creating gethostbyname() internal "
4401 "record. (%s:%d)",
MDL);
4411 log_fatal (
"can't allocate expression");
4446 log_fatal (
"can't allocate variable name");
4453 log_fatal (
"can't allocate expression");
4461 log_fatal (
"can't allocate expression");
4469 log_fatal (
"can't allocate expression");
4477 "expecting expression.");
4486 }
while (token ==
COMMA);
4532 "expecting right-hand side.");
4550 if (token !=
EQUAL) {
4574 else if (token ==
EQUAL)
4685 "expecting a subexpression");
4779 log_fatal (
"Can't allocate expression!");
4796 log_fatal (
"No memory for equal precedence combination.");
4841 if ((
fmt[0] !=
'Z') && (
tolower((
unsigned char)
fmt[1]) ==
'a'))
4845 if ((*
fmt ==
'A') || (*
fmt ==
'a'))
4853 if (
fmt[1] ==
'o') {
4864 if (token ==
SEMI) {
4875 if (
fmt [1] !=
'o') {
4888 }
while (*
fmt !=
'\0');
4890 if ((*
fmt ==
'A') || (*
fmt ==
'a')) {
4893 if (token ==
COMMA) {
4899 if ((*
fmt ==
'A') || (
fmt[1] ==
'\0'))
4907 }
while ((*
fmt ==
'A') || (*
fmt ==
'a'));
4941 }
else if (token ==
EQUAL) {
4952 "expecting a data expression.");
4965 log_fatal (
"no memory for option statement.");
4970 log_fatal (
"no memory for option cache");
4989 unsigned char buf [4];
5001 if ((*
fmt) [1] !=
'o') {
5017 "malformed encapsulation format (bug!)");
5039 (
const unsigned char *)val,
5041 log_fatal (
"No memory for \"%s\"", val);
5043 if ((*
fmt) [1] !=
'o') {
5045 "or hexadecimal data.");
5054 if ((*
fmt)[1] ==
'c') {
5064 if ((*
fmt)[1] !=
'o')
5083 if ((*
fmt) [1] !=
'o') {
5092 log_fatal (
"No memory for concatenation");
5131 "enumeration format");
5140 "identifier expected");
5198 if ((*
fmt) [1] !=
'o') {
5233 if ((*
fmt) [1] !=
'o')
5236 if ((*
fmt) [1] !=
'o') {
5251 if ((*
fmt) [1] !=
'o')
5261 if (token !=
SEMI) {
5299 const char *
fmt, *
f;
5344 "malformed %s (bug!)",
5345 "encapsulation format");
5359 if (token ==
SEMI &&
fmt[1] ==
'o') {
5367 "expecting string.");
5372 "option data buffer %s",
5382 if (
fmt[1] ==
'c') {
5399 len =
express->data.const_data.len;
5418 "malformed %s (bug!)",
5419 "enumeration format");
5423 (
unsigned *)0,
cfile);
5426 "identifier expected");
5462 "option data buffer %s",
5473 (
unsigned *)0,
cfile);
5478 "expecting number.");
5492 (
unsigned *)0,
cfile);
5504 (
unsigned *)0,
cfile);
5515 (
unsigned *)0,
cfile);
5518 "expecting identifier.");
5533 "expecting boolean.");
5542 if (token !=
SEMI) {
5544 "semicolon expected.");
5552 log_error (
"parse_option_param: Bad format %c",
5560 if (token !=
SEMI) {
5567 log_fatal (
"no memory to store option declaration.");
5571 log_fatal (
"out of memory allocating option cache.");
5573 (*oc) ->
data.buffer =
bp;
5609 "expecting hexadecimal constant.");
5615 "hexadecimal constant too long.");
5624 (
unsigned *)0,
cfile);
5629 if (len + 1 > max) {
5634 memcpy (buf, val, len + 1);
5660 snprintf (fbuf,
sizeof fbuf,
"%s line %d: %s",
5665 vsnprintf (
final,
sizeof final, fbuf, list);
5709 unsigned len,
clen = 0;
5776 }
while (token ==
COMMA);
5779 log_fatal(
"No memory for domain list object.");
5812 while (buf[len] != 0) {
5813 len += buf[len] + 1;
5819 log_fatal(
"No memory for domain name object.");
int parse_allow_deny(struct option_cache **oc, struct parse *cfile, int flag)
int expression_allocate(struct expression **cptr, const char *file, int line)
int fundef_allocate(struct fundef **cptr, const char *file, int line)
int buffer_allocate(struct buffer **ptr, unsigned len, const char *file, int line)
int expression_reference(struct expression **ptr, struct expression *src, const char *file, int line)
void data_string_forget(struct data_string *data, const char *file, int line)
int option_state_dereference(struct option_state **ptr, const char *file, int line)
int dns_zone_allocate(struct dns_zone **ptr, const char *file, int line)
struct option * new_option(char *name, const char *file, int line) const
int executable_statement_allocate(struct executable_statement **ptr, const char *file, int line)
int option_cache_allocate(struct option_cache **cptr, const char *file, int line)
struct universe * new_universe(char *file, int line) const
enum dhcp_token next_raw_token(const char **rval, unsigned *rlen, struct parse *cfile)
enum dhcp_token peek_raw_token(const char **rval, unsigned *rlen, struct parse *cfile)
enum dhcp_token peek_token(const char **rval, unsigned *rlen, struct parse *cfile)
enum dhcp_token next_token(const char **rval, unsigned *rlen, struct parse *cfile)
isc_result_t save_parse_state(struct parse *cfile)
isc_result_t restore_parse_state(struct parse *cfile)
void save_hashed_option(struct universe *universe, struct option_state *options, struct option_cache *oc, isc_boolean_t appendp)
int hashed_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)
int hashed_option_state_dereference(struct universe *universe, struct option_state *state, const char *file, int line)
void hashed_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 *))
struct option_cache * lookup_hashed_option(struct universe *universe, struct option_state *options, unsigned code)
void delete_hashed_option(struct universe *universe, struct option_state *options, int code)
int parse_option_buffer(struct option_state *options, const unsigned char *buffer, unsigned length, struct universe *universe)
struct enumeration * find_enumeration(const char *name, int length)
void add_enumeration(struct enumeration *enumeration)
int parse_boolean(struct parse *cfile)
struct enumeration * enumerations
unsigned char * parse_numeric_aggregate(struct parse *cfile, unsigned char *buf, unsigned *max, int separator, int base, unsigned size)
int parse_string(struct parse *cfile, char **sptr, unsigned *lptr)
int parse_option_token(struct expression **rv, struct parse *cfile, const char **fmt, struct expression *expr, int uniform, int lookups)
int parse_boolean_expression(struct expression **expr, struct parse *cfile, int *lose)
struct collection default_collection
struct collection * collections
struct enumeration_value * find_enumeration_value(const char *name, int length, unsigned *widthp, const char *value)
int parse_ip6_addr_expr(struct expression **expr, struct parse *cfile)
void skip_to_semi(struct parse *cfile)
int parse_option_statement(struct executable_statement **result, struct parse *cfile, int lookups, struct option *option, enum statement_op op)
int parse_X(struct parse *cfile, u_int8_t *buf, unsigned max)
int parse_expression(struct expression **expr, struct parse *cfile, int *lose, enum expression_context context, struct expression **plhs, enum expr_op binop)
int parse_semi(struct parse *cfile)
int parse_key(struct parse *cfile)
int parse_switch_statement(struct executable_statement **result, struct parse *cfile, int *lose)
int parse_option_code_definition(struct parse *cfile, struct option *option)
int parse_ip6_prefix(struct parse *cfile, struct iaddr *addr, u_int8_t *plen)
int parse_ip6_addr(struct parse *cfile, struct iaddr *addr)
int parse_option_decl(struct option_cache **oc, struct parse *cfile)
int parse_zone(struct dns_zone *zone, struct parse *cfile)
TIME parse_date(struct parse *cfile)
int parse_destination_descriptor(struct parse *cfile, struct iaddr *addr)
void skip_to_rbrace(struct parse *cfile, int brace_count)
int parse_warn(struct parse *cfile, const char *fmt,...)
int parse_if_statement(struct executable_statement **result, struct parse *cfile, int *lose)
int parse_numeric_expression(struct expression **expr, struct parse *cfile, int *lose)
int parse_data_expression(struct expression **expr, struct parse *cfile, int *lose)
void convert_num(struct parse *cfile, unsigned char *buf, const char *str, int base, unsigned size)
int parse_executable_statements(struct executable_statement **statements, struct parse *cfile, int *lose, enum expression_context case_context)
struct expression * parse_domain_list(struct parse *cfile, int compress)
int parse_ip_addr_with_subnet(struct parse *cfile, struct iaddrmatch *match)
int parse_non_binary(struct expression **expr, struct parse *cfile, int *lose, enum expression_context context)
int parse_base64(struct data_string *data, struct parse *cfile)
char * parse_host_name(struct parse *cfile)
int parse_ip_addr_or_hostname(struct expression **expr, struct parse *cfile, int uniform)
int parse_cshl(struct data_string *data, struct parse *cfile)
struct expression * parse_domain_name(struct parse *cfile)
void parse_hardware_param(struct parse *cfile, struct hardware *hardware)
int parse_on_statement(struct executable_statement **result, struct parse *cfile, int *lose)
int parse_option_data(struct expression **expr, struct parse *cfile, int lookups, struct option *option)
void parse_option_space_decl(struct parse *cfile)
int parse_ip_addr(struct parse *cfile, struct iaddr *addr)
int parse_executable_statement(struct executable_statement **result, struct parse *cfile, int *lose, enum expression_context case_context)
int parse_case_statement(struct executable_statement **result, struct parse *cfile, int *lose, enum expression_context case_context)
isc_result_t parse_option_name(struct parse *cfile, int allocate, int *known, struct option **opt)
void parse_lease_time(struct parse *cfile, TIME *timep)
TIME parse_date_core(struct parse *cfile)
void print_expression(char *name, struct expression *expr) const
void putShort(unsigned char *, int32_t)
void putLong(unsigned char *, int32_t)
u_int32_t getUShort(const unsigned char *)
void putUShort(unsigned char *, u_int32_t)
u_int32_t getULong(const unsigned char *)
void putUChar(unsigned char *, u_int32_t)
u_int32_t getUChar(const unsigned char *)
void putULong(unsigned char *, u_int32_t)
isc_result_t find_class(struct class **c, const char *s, const char *file, int line)
#define DEFAULT_TIME_FORMAT
#define skip_token(a, b, c)
#define BYTE_NAME_HASH_SIZE
#define DEFAULT_SPACE_HASH_SIZE
#define LOCAL_TIME_FORMAT
#define WORD_NAME_HASH_SIZE
#define QUAD_NAME_HASH_SIZE
struct universe dhcp_universe
isc_result_t enter_dns_zone(struct dns_zone *zone)
int dns_zone_dereference(struct dns_zone **ptr, const char *file, int line)
int executable_statement_dereference(struct executable_statement **ptr, const char *file, int line)
isc_boolean_t is_cidr_mask_valid(const struct iaddr *addr, int bits)
struct iaddr ip_addr(struct iaddr subnet, struct iaddr mask, u_int32_t host_address)
const char * piaddr(const struct iaddr addr)
#define ISC_R_NOTIMPLEMENTED
@ supersede_option_statement
@ default_option_statement
@ prepend_option_statement
@ append_option_statement
int MRns_name_compress(const char *src, u_char *dst, size_t dstsiz, const u_char **dnptrs, const u_char **lastdnptr)
int MRns_name_pton(const char *src, u_char *dst, size_t dstsiz)
isc_result_t omapi_data_string_new(omapi_data_string_t **, unsigned, const char *, int)
isc_result_t omapi_auth_key_lookup_name(omapi_auth_key_t **, const char *)
void * dmalloc(size_t, const char *, int)
void dfree(void *, const char *, int)
isc_result_t omapi_auth_key_enter(omapi_auth_key_t *)
int log_error(const char *,...) __attribute__((__format__(__printf__
int int int void do_percentm(char *obuf, size_t obufsize, const char *ibuf)
void log_fatal(const char *,...) __attribute__((__format__(__printf__
int int log_info(const char *,...) __attribute__((__format__(__printf__
#define DHCP_R_INVALIDARG
omapi_data_string_t * key
const unsigned char * data
struct option_cache * secondary6
struct option_cache * primary6
struct enumeration_value * values
struct enumeration * next
struct executable_statement * next
struct executable_statement * statements
union expression::expr_union data
u_int8_t hbuf[HARDWARE_ADDR_LEN+1]
enum option_status status
struct universe * universe
struct string_list * next
int(* decode)(struct option_state *, const unsigned char *, unsigned, struct universe *)
void(* save_func)(struct universe *, struct option_state *, struct option_cache *, isc_boolean_t)
int(* encapsulate)(struct data_string *, struct packet *, struct lease *, struct client_state *, struct option_state *, struct option_state *, struct binding_scope **, struct universe *)
void(* delete_func)(struct universe *universe, struct option_state *, int)
option_name_hash_t * name_hash
option_code_hash_t * code_hash
struct option_cache *(* lookup_func)(struct universe *, struct option_state *, unsigned)
struct universe * config_universe
char * default_option_format
int option_reference(struct option **dest, struct option *src, const char *file, int line)
int option_dereference(struct option **dest, const char *file, int line)
universe_hash_t * universe_hash
struct universe ** universes
int make_const_data(struct expression **expr, const unsigned char *data, unsigned len, int terminated, int allocate, const char *file, int line)
enum expression_context op_context(enum expr_op op)
void expression_dereference(struct expression **eptr, const char *file, int line)
int make_limit(struct expression **new, struct expression *expr, int limit)
int make_host_lookup(struct expression **expr, const char *name)
int is_boolean_expression(struct expression *expr)
int is_numeric_expression(struct expression *expr)
int is_data_expression(struct expression *expr)
pair cons(caddr_t car, pair cdr)
int make_concat(struct expression **expr, struct expression *left, struct expression *right)
int op_precedence(enum expr_op op1, enum expr_op op2)
@ context_data_or_numeric
@ expr_variable_reference
struct expression * extract_int
struct expression::expr_union::@25 arg
struct collection * check
struct expression * arglist
struct expression::expr_union::@19 b2a
struct expression * encode_int
struct expression::expr_union::@20 reverse
struct expression * separator
struct expression::expr_union::@17 suffix
struct expression::expr_union::@16 substring
struct expression::expr_union::@18 packet
struct expression::expr_union::@21 pick_first_value
struct data_string const_data
struct expression * offset
struct expression * width
struct expression * buffer
struct expression * concat[2]
struct expression * equal[2]
struct expression::expr_union::@26 funcall