Lines Matching refs:cfile
114 conf_file_parse(struct parse *cfile)
127 TAILQ_CONCAT(&top->comments, &cfile->comments);
131 (void) peek_token(NULL, NULL, cfile);
132 TAILQ_CONCAT(&dhcp->comments, &cfile->comments);
133 stackPush(cfile, dhcp);
134 assert(cfile->stack_top == 1);
135 cfile->stack[0] = top;
142 parse_error(cfile, "address family is not set");
144 issues = conf_file_subparse(cfile, ROOT_GROUP);
150 ifconf = mapGet(cfile->stack[1], "interfaces-config");
157 TAILQ_INSERT_TAIL(&cfile->stack[1]->comments, comment);
159 TAILQ_INSERT_TAIL(&cfile->stack[1]->comments, comment);
163 post_process_lifetimes(cfile);
165 issues += post_process_reservations(cfile);
166 post_process_classes(cfile);
167 post_process_generated_classes(cfile);
168 post_process_option_definitions(cfile);
175 post_process_lifetimes(struct parse *cfile)
179 entry = mapGet(cfile->stack[1], "valid-lifetime");
187 mapSet(cfile->stack[1], entry, "valid-lifetime");
190 entry = mapGet(cfile->stack[1], "min-valid-lifetime");
198 mapSet(cfile->stack[1], entry, "min-valid-lifetime");
201 entry = mapGet(cfile->stack[1], "max-valid-lifetime");
209 mapSet(cfile->stack[1], entry, "max-valid-lifetime");
223 post_process_reservations(struct parse *cfile)
234 hosts = mapGet(cfile->stack[1], "reservations");
237 mapRemove(cfile->stack[1], "reservations");
244 where = find_match(cfile, host, &used_heuristic);
245 if (where == cfile->stack[1])
267 mapSet(cfile->stack[1], orphans, "reservations");
275 post_process_classes(struct parse *cfile)
287 classes = mapGet(cfile->stack[1], "client-classes");
293 parse_error(cfile, "null global class at %i",
297 parse_error(cfile, "global class at %u "
307 parse_error(cfile, "subclass %s has "
321 parse_error(cfile, "subclass %s has no selector",
335 parse_error(cfile, "superclass %s has bad "
352 parse_error(cfile, "superclass %s has no submatch",
390 post_process_generated_classes(struct parse *cfile)
396 generated = mapGet(cfile->stack[1], "generated-classes");
399 mapRemove(cfile->stack[1], "generated-classes");
402 classes = mapGet(cfile->stack[1], "client-classes");
405 mapSet(cfile->stack[1], classes, "client-classes");
470 post_process_option_definitions(struct parse *cfile)
475 opt_def = mapGet(cfile->stack[1], "option-def");
488 struct parse *cfile;
498 cfile = new_parse(file, NULL, 0, filename, 0);
499 if (cfile == NULL)
502 cfile->stack = (struct element **)malloc(amount);
503 if (cfile->stack == NULL)
505 memcpy(cfile->stack, parent->stack, amount);
506 cfile->stack_size = parent->stack_size;
507 cfile->stack_top = parent->stack_top;
508 cfile->issue_counter = parent->issue_counter;
513 TAILQ_INSERT_TAIL(&cfile->comments, comment);
515 conf_file_subparse(cfile, group_type);
517 amount = cfile->stack_size * sizeof(struct element *);
518 if (cfile->stack_size > parent->stack_size) {
522 parse_error(cfile, "can't resize element stack");
524 memcpy(parent->stack, cfile->stack, amount);
525 parent->stack_size = cfile->stack_size;
526 parent->stack_top = cfile->stack_top;
527 parent->issue_counter = cfile->issue_counter;
532 end_parse(cfile);
540 conf_file_subparse(struct parse *cfile, int type)
547 token = peek_token(&val, NULL, cfile);
550 declaration = parse_statement(cfile, type, declaration);
552 skip_token(&val, NULL, cfile);
554 return cfile->issue_counter;
589 parse_statement(struct parse *cfile, int type, isc_boolean_t declaration)
604 token = peek_token(&val, NULL, cfile);
608 skip_token(&val, NULL, cfile);
609 token = next_token(&val, NULL, cfile);
611 parse_error(cfile, "filename string expected.");
612 read_conf_file(cfile, val, type);
613 parse_semi(cfile);
617 skip_token(&val, NULL, cfile);
619 parse_host_declaration(cfile);
621 parse_error(cfile,
626 skip_token(&val, NULL, cfile);
628 parse_group_declaration(cfile);
630 parse_error(cfile,
635 skip_token(&val, NULL, cfile);
640 parse_error(cfile, "shared-network parameters not %s.",
642 parse_shared_net_declaration(cfile);
647 skip_token(&val, NULL, cfile);
650 parse_error(cfile,
654 parse_subnet_declaration(cfile);
656 parse_subnet6_declaration(cfile);
663 skip_token(&val, NULL, cfile);
665 parse_error(cfile, "obsolete 'vendor-class' "
668 parse_error(cfile, "obsolete 'user-class' "
671 parse_error(cfile,
673 parse_class_declaration(cfile, token == CLASS
680 add_host_reservation_identifiers(cfile,
685 skip_token(&val, NULL, cfile);
687 for (i = cfile->stack_top; i > 0; --i) {
688 if (cfile->stack[i]->kind == HOST_DECL) {
695 parse_error(cfile, "hardware address parameter %s",
697 if (mapContains(cfile->stack[host_decl], "hw-address"))
698 parse_error(cfile, "Host hardware address already "
700 hardware = parse_hardware_param(cfile);
701 mapSet(cfile->stack[host_decl], hardware, "hw-address");
703 cfile->stack[host_decl]->skip = ISC_TRUE;
708 skip_token(&val, NULL, cfile);
710 for (i = cfile->stack_top; i > 0; --i) {
711 if (cfile->stack[i]->kind == HOST_DECL) {
718 parse_error(cfile,
721 cache = parse_fixed_addr_param(cfile, token);
725 if (mapContains(cfile->stack[host_decl], "ip-address"))
726 parse_error(cfile, "Only one fixed address "
730 mapSet(cfile->stack[host_decl], addr, "ip-address");
733 cfile->issue_counter++;
734 mapSet(cfile->stack[host_decl],
738 if (mapContains(cfile->stack[host_decl],
740 parse_error(cfile, "Only one fixed address "
742 mapSet(cfile->stack[host_decl], cache, "ip-addresses");
747 skip_token(&val, NULL, cfile);
749 parse_error(cfile, "pool declared within pool.");
751 parse_error(cfile, "pool declared outside of network");
752 parse_pool_statement(cfile, type);
757 skip_token(&val, NULL, cfile);
759 for (i = cfile->stack_top; i > 0; --i) {
760 if (cfile->stack[i]->kind == SUBNET_DECL) {
767 parse_error(cfile,
769 parse_address_range(cfile, type, subnet);
775 skip_token(NULL, NULL, cfile);
777 for (i = cfile->stack_top; i > 0; --i) {
778 if (cfile->stack[i]->kind == SUBNET_DECL) {
785 parse_error(cfile,
787 parse_address_range6(cfile, type, subnet);
793 skip_token(NULL, NULL, cfile);
795 for (i = cfile->stack_top; i > 0; --i) {
796 if (cfile->stack[i]->kind == SUBNET_DECL) {
803 parse_error(cfile,
805 parse_prefix6(cfile, type, subnet);
811 skip_token(&val, NULL, cfile);
813 for (i = cfile->stack_top; i > 0; --i) {
814 if (cfile->stack[i]->kind == HOST_DECL) {
821 parse_error(cfile,
824 parse_fixed_prefix6(cfile, host_decl);
830 skip_token(&val, NULL, cfile);
832 parse_error(cfile, "pool6 declared within pool.");
834 parse_error(cfile,
836 parse_pool6_statement(cfile, type);
841 skip_token(&val, NULL, cfile);
842 token = next_token(&val, NULL, cfile);
848 parse_error(cfile, "expecting assertion");
853 skip_token(&val, NULL, cfile);
857 parse_error(cfile, "authority makes no sense here.");
859 for (i = cfile->stack_top; i > 0; --i) {
862 kind = cfile->stack[i]->kind;
872 parse_error(cfile, "can't find root group");
875 TAILQ_CONCAT(&cache->comments, &cfile->comments);
876 mapSet(cfile->stack[subnet], cache, "authoritative");
878 parse_semi(cfile);
887 skip_token(&val, NULL, cfile);
891 skip_token(&val, NULL, cfile);
892 token = peek_token(&val, NULL, cfile);
895 parse_error(cfile,
898 parse_option_space_decl(cfile);
903 option = parse_option_name(cfile, ISC_TRUE, &known);
904 token = peek_token(&val, NULL, cfile);
907 parse_error(cfile,
910 skip_token(&val, NULL, cfile);
913 parse_option_code_definition(cfile, option);
919 parse_error(cfile, "unknown option %s.%s",
922 parse_option_statement(NULL, cfile, option,
930 skip_to_semi(cfile);
936 parse_server_duid_conf(cfile);
940 token = next_token(&val, NULL, cfile);
945 skip_token(&val, NULL, cfile);
947 parse_error(cfile, "directives are only supported "
949 parse_directive(cfile);
953 skip_token(&val, NULL, cfile);
957 TAILQ_CONCAT(&et->comments, &cfile->comments);
959 if (!parse_executable_statement(et, cfile, &lose,
963 parse_error(cfile,
966 parse_error(cfile,
976 cfile->issue_counter++;
977 mapSet(cfile->stack[cfile->stack_top], et, "statement");
1003 * \param[in] cfile = the configuration file being parsed
1009 get_permit(struct parse *cfile, struct element *permit_head)
1020 token = next_token(&val, NULL, cfile);
1069 if (next_token(&val, NULL, cfile) != TOKEN_BOOTP)
1070 parse_error(cfile, "expecting \"bootp\"");
1074 cfile->issue_counter++;
1082 if (next_token(&val, NULL, cfile) != OF)
1083 parse_error(cfile, "expecting \"of\"");
1084 if (next_token(&val, NULL, cfile) != STRING)
1085 parse_error(cfile, "expecting class name.");
1094 while (peek_raw_token(NULL, NULL, cfile) != SEMI) {
1095 next_raw_token(&val, NULL, cfile);
1100 cfile->issue_counter++;
1106 parse_error(cfile, "expecting permit type.");
1113 if (need_clients && (next_token(&val, NULL, cfile) != CLIENTS))
1114 parse_error(cfile, "expecting \"clients\"");
1123 parse_semi(cfile);
1137 * \param[in] cfile = the configuration file being parsed
1147 parse_pool_statement(struct parse *cfile, int type)
1161 TAILQ_CONCAT(&pool->comments, &cfile->comments);
1164 parse_error(cfile, "Dynamic pools are only valid inside "
1166 parse_lbrace(cfile);
1168 stackPush(cfile, pool);
1175 token = peek_token(&val, NULL, cfile);
1182 skip_to_semi(cfile);
1186 skip_token(&val, NULL, cfile);
1187 parse_address_range(cfile, type, cfile->stack_top);
1192 skip_token(&val, NULL, cfile);
1193 cfile, permit);
1197 skip_token(&val, NULL, cfile);
1198 get_permit(cfile, prohibit);
1202 skip_token(&val, NULL, cfile);
1212 parse_error(cfile, "unexpected end of file");
1215 declaration = parse_statement(cfile, type,
1221 cfile->stack_top--;
1223 generate_class(cfile, pool, permit, prohibit);
1225 pools = mapGet(cfile->stack[cfile->stack_top], "pools");
1229 mapSet(cfile->stack[cfile->stack_top], pools, "pools");
1238 cfile->issue_counter++;
1256 parse_error(cfile, "bad pool entry");
1274 parse_lbrace(struct parse *cfile)
1279 token = next_token(&val, NULL, cfile);
1281 parse_error(cfile, "expecting left brace.");
1287 parse_host_declaration(struct parse *cfile)
1300 TAILQ_CONCAT(&host->comments, &cfile->comments);
1302 name = parse_host_name(cfile);
1304 parse_error(cfile, "expecting a name for host declaration.");
1308 parse_lbrace(cfile);
1310 stackPush(cfile, host);
1313 token = peek_token(&val, NULL, cfile);
1315 skip_token(&val, NULL, cfile);
1319 parse_error(cfile, "unexpected end of file");
1323 skip_token(&val, NULL, cfile);
1324 parse_error(cfile, "dynamic hosts don't exist "
1330 skip_token(&val, NULL, cfile);
1331 parse_error(cfile, "deleted hosts don't exist "
1339 skip_token(&val, NULL, cfile);
1340 token = next_token(&val, NULL, cfile);
1342 parse_error(cfile,
1346 cfile->issue_counter++;
1353 parse_semi(cfile);
1361 add_host_reservation_identifiers(cfile,
1366 skip_token(&val, NULL, cfile);
1369 parse_error(cfile, "Host %s already has a "
1374 token = peek_token(&val, NULL, cfile);
1376 skip_token(&val, NULL, cfile);
1383 (cfile, NULL, &len, ':', 16, 8);
1385 parse_error(cfile,
1392 parse_semi(cfile);
1405 add_host_reservation_identifiers(cfile,
1412 parse_error(cfile,
1415 skip_token(&val, NULL, cfile);
1416 token = next_token(&val, NULL, cfile);
1420 token = next_token(&val, NULL, cfile);
1423 parse_error(cfile,
1430 parse_error(cfile,
1436 parse_error(cfile,
1440 option = parse_option_name(cfile, ISC_TRUE, &known);
1442 parse_error(cfile, "unknown option %s.%s",
1449 data = parse_option_textbin(cfile, option);
1450 parse_semi(cfile);
1453 parse_error(cfile, "can't get option data");
1457 cfile->issue_counter++;
1461 add_host_id_option(cfile, option, relays);
1486 declaration = parse_statement(cfile, HOST_DECL, declaration);
1489 cfile->stack_top--;
1491 where = find_match(cfile, host, &used_heuristic);
1514 add_host_reservation_identifiers(struct parse *cfile, const char *id)
1518 ids = mapGet(cfile->stack[1], "host-reservation-identifiers");
1521 mapSet(cfile->stack[1], ids, "host-reservation-identifiers");
1528 add_host_id_option(struct parse *cfile,
1547 mapSet(cfile->stack[1], hooks, "hooks-libraries");
1589 parse_class_declaration(struct parse *cfile, int type)
1609 token = next_token(&val, NULL, cfile);
1611 parse_error(cfile, "Expecting class name");
1614 classes = mapGet(cfile->stack[1], "client-classes");
1618 mapSet(cfile->stack[1], classes, "client-classes");
1620 for (group = cfile->stack_top; group > 0; --group) {
1623 kind = cfile->stack[group]->kind;
1625 parse_error(cfile, "class in class");
1630 parse_error(cfile, "can't find root group");
1631 if (cfile->stack[group]->kind == GROUP_DECL) {
1632 group_classes = mapGet(cfile->stack[group], "client-classes");
1636 mapSet(cfile->stack[group], group_classes,
1665 parse_error(cfile, "no class named %s", val);
1668 parse_error(cfile, "found class name %s but it is "
1675 token = peek_token(&val, NULL, cfile);
1679 skip_token(&val, &len, cfile);
1682 data = createHexa(parse_hexa(cfile));
1685 skip_token(&val, NULL, cfile);
1686 parse_error(cfile, "Expecting string or hex list.");
1743 TAILQ_CONCAT(&class->comments, &cfile->comments);
1748 cfile->issue_counter++;
1771 token = peek_token(&val, NULL, cfile);
1773 skip_token(&val, NULL, cfile);
1774 subclass_inherit(cfile, class, copy(pc));
1779 parse_lbrace(cfile);
1781 stackPush(cfile, class);
1784 token = peek_token(&val, NULL, cfile);
1786 skip_token(&val, NULL, cfile);
1789 skip_token(&val, NULL, cfile);
1790 parse_error(cfile, "unexpected end of file");
1792 skip_token(&val, NULL, cfile);
1793 parse_error(cfile, "dynamic classes don't exist "
1796 skip_token(&val, NULL, cfile);
1797 parse_error(cfile, "deleted hosts don't exist "
1800 skip_token(&val, NULL, cfile);
1802 cfile,
1804 token = peek_token(&val, NULL, cfile);
1812 skip_token(&val, NULL, cfile);
1814 parse_error(cfile,
1819 if (!parse_boolean_expression(expr, cfile, &lose)) {
1821 parse_error(cfile,
1826 add_match_class(cfile, class, copy(expr));
1827 parse_semi(cfile);
1830 skip_token(&val, NULL, cfile);
1832 parse_error(cfile,
1836 cfile->issue_counter++;
1838 token = next_token(&val, NULL, cfile);
1840 parse_error(cfile,
1844 parse_error(cfile,
1849 if (!parse_data_expression(expr, cfile, &lose)) {
1851 parse_error(cfile,
1855 cfile->issue_counter++;
1857 parse_semi(cfile);
1862 skip_token(&val, NULL, cfile);
1863 token = next_token(&val, NULL, cfile);
1865 parse_error(cfile, "expecting \"limit\"");
1866 token = next_token(&val, NULL, cfile);
1868 parse_error(cfile, "expecting a number");
1871 cfile->issue_counter++;
1878 parse_semi(cfile);
1880 declaration = parse_statement(cfile, CLASS_DECL,
1884 cfile->stack_top--;
1887 subclass_inherit(cfile, class, copy(pc));
1897 subclass_inherit(struct parse *cfile,
1920 parse_error(cfile, "can't get superclass name");
1925 parse_error(cfile, "can't get superclass submatch");
1932 parse_error(cfile, "can't get superclass %s item at "
1946 parse_error(cfile, "superclass %s has unexpected %s "
1978 cfile->issue_counter++;
1991 parse_error(cfile, "can't get subclass %s data",
2022 parse_error(cfile, "class matching rule evaluated to a "
2046 add_match_class(struct parse *cfile,
2058 parse_error(cfile, "'match if' with a constant boolean "
2064 cfile->issue_counter++;
2110 parse_shared_net_declaration(struct parse *cfile)
2123 TAILQ_CONCAT(&share->comments, &cfile->comments);
2126 token = peek_token(&val, NULL, cfile);
2128 skip_token(&val, NULL, cfile);
2131 parse_error(cfile, "zero-length shared network name");
2134 name = parse_host_name(cfile);
2136 parse_error(cfile,
2145 parse_lbrace(cfile);
2147 stackPush(cfile, share);
2150 token = peek_token(&val, NULL, cfile);
2152 skip_token(&val, NULL, cfile);
2155 skip_token(&val, NULL, cfile);
2156 parse_error(cfile, "unexpected end of file");
2158 skip_token(&val, NULL, cfile);
2159 token = next_token(&val, NULL, cfile);
2161 parse_error(cfile,
2166 new_network_interface(cfile, interface);
2167 parse_semi(cfile);
2171 declaration = parse_statement(cfile, SHARED_NET_DECL,
2175 cfile->stack_top--;
2178 parse_error(cfile, "empty shared-network decl");
2183 shares = mapGet(cfile->stack[cfile->stack_top],
2190 mapSet(cfile->stack[cfile->stack_top],
2209 cfile->issue_counter++;
2225 cfile->issue_counter++;
2274 subnets = mapGet(cfile->stack[1], "subnet4");
2278 mapSet(cfile->stack[1], subnets, "subnet4");
2281 subnets = mapGet(cfile->stack[1], "subnet6");
2285 mapSet(cfile->stack[1], subnets, "subnet6");
2292 common_subnet_parsing(struct parse *cfile,
2301 parse_lbrace(cfile);
2303 stackPush(cfile, subnet);
2306 token = peek_token(&val, NULL, cfile);
2308 skip_token(&val, NULL, cfile);
2311 skip_token(&val, NULL, cfile);
2312 parse_error(cfile, "unexpected end of file");
2315 skip_token(&val, NULL, cfile);
2316 token = next_token(&val, NULL, cfile);
2318 parse_error(cfile,
2323 new_network_interface(cfile, interface);
2324 parse_semi(cfile);
2327 declaration = parse_statement(cfile, SUBNET_DECL, declaration);
2330 cfile->stack_top--;
2342 parse_subnet_declaration(struct parse *cfile)
2360 TAILQ_CONCAT(&subnet->comments, &cfile->comments);
2367 parse_error(cfile, "can't allocate subnet");
2373 for (i = cfile->stack_top; i > 0; --i) {
2374 kind = cfile->stack[i]->kind;
2383 parse_error(cfile, "can't find a place to put subnet");
2385 chain->share = cfile->stack[parent];
2386 subnets = mapGet(cfile->stack[parent], "subnet4");
2389 parse_error(cfile, "shared network without subnets");
2392 mapSet(cfile->stack[parent], subnets, "subnet4");
2396 address = parse_numeric_aggregate(cfile, addr, &len, DOT, 10, 8);
2398 parse_error(cfile
2400 parse_error(cfile, "bad IPv4 address length");
2403 token = next_token(&val, NULL, cfile);
2405 parse_error(cfile, "Expecting netmask");
2408 netmask = parse_numeric_aggregate(cfile, addr, &len, DOT, 10, 8);
2410 parse_error(cfile, "can't decode network mask");
2412 parse_error(cfile, "bad IPv4 mask length");
2422 parse_error(cfile, "can't get a prefix from %s mask %s",
2427 common_subnet_parsing(cfile, subnets, subnet);
2434 parse_subnet6_declaration(struct parse *cfile)
2450 parse_error(cfile, "subnet6 statement is only supported "
2455 TAILQ_CONCAT(&subnet->comments, &cfile->comments);
2462 parse_error(cfile, "can't allocate subnet");
2468 for (i = cfile->stack_top; i > 0; --i) {
2469 kind = cfile->stack[i]->kind;
2478 parse_error(cfile, "can't find a place to put subnet");
2480 chain->share = cfile->stack[parent];
2481 subnets = mapGet(cfile->stack[parent], "subnet6");
2484 parse_error(cfile, "shared network without subnets");
2487 mapSet(cfile->stack[parent], subnets, "subnet6");
2490 address = parse_ip6_addr(cfile);
2492 parse_error(cfile, "can't decode network number");
2494 parse_error(cfile, "bad IPv6 address length");
2499 token = next_token(&val, NULL, cfile);
2501 parse_error(cfile, "Expecting a '/'.");
2504 token = next_token(&val, NULL, cfile);
2506 parse_error(cfile, "Expecting a number.");
2519 common_subnet_parsing(cfile, subnets, subnet);
2525 parse_group_declaration(struct parse *cfile)
2533 if (mapContains(cfile->stack[cfile->stack_top], "group"))
2534 parse_error(cfile, "another group is already open");
2538 TAILQ_CONCAT(&group->comments, &cfile->comments);
2539 mapSet(cfile->stack[cfile->stack_top], group, "group");
2541 token = peek_token(&val, NULL, cfile);
2543 skip_token(&val, NULL, cfile);
2547 parse_error(cfile, "no memory for group decl name %s",
2551 parse_lbrace(cfile);
2553 stackPush(cfile, group);
2556 token = peek_token(&val, NULL, cfile);
2558 skip_token(&val, NULL, cfile);
2561 skip_token(&val, NULL, cfile);
2562 parse_error(cfile, "unexpected end of file");
2565 skip_token(&val, NULL, cfile);
2566 parse_error(cfile, "deleted groups don't exist "
2569 skip_token(&val, NULL, cfile);
2570 parse_error(cfile, "dynamic groups don't exist "
2573 skip_token(&val, NULL, cfile);
2574 parse_error(cfile, "static groups don't exist "
2577 declaration = parse_statement(cfile, GROUP_DECL, declaration);
2580 cfile->stack_top--;
2584 close_group(cfile, group);
2594 close_group(struct parse *cfile, struct element *group)
2617 parent = cfile->stack[cfile->stack_top];
2619 parse_error(cfile, "unexpected kind for group parent %d",
2623 parse_error(cfile, "no group in parent");
2625 parse_error(cfile, "got a different group from parent");
2633 parse_error(cfile, "can't get group item at %u",
2641 parse_error(cfile, "impossible group item (kind %d) "
2647 parse_error(cfile, "expected reservations "
2651 parse_error(cfile, "got reservations twice "
2656 parse_error(cfile, "host declarations not "
2664 parse_error(cfile, "expected shared-networks "
2671 parse_error(cfile, "shared-network parameters "
2680 parse_error(cfile, "expected %s got %s at %u",
2683 parse_error(cfile, "got %s twice at %u and %u",
2688 parse_error(cfile, "subnet declarations not "
2696 parse_error(cfile, "expected client-classes "
2700 parse_error(cfile, "got %s twice at %u and %u",
2703 parse_error(cfile, "class declarations not "
2712 parse_error(cfile, "got pd-pools "
2718 parse_error(cfile, "got pools twice "
2723 parse_error(cfile, "expecyed [pd-]pools got "
2727 parse_error(cfile, "pool declared within "
2731 parse_error(cfile, "pool declared outside "
2776 parse_error(cfile, "unexpected parameter %s "
2833 cfile->issue_counter++;
2839 option_data_derive(cfile, handle, hosts);
2840 option_data_derive(cfile, handle, shares);
2841 option_data_derive(cfile, handle, subnets);
2842 derive_classes(cfile, handle, classes);
2843 option_data_derive(cfile, handle, pdpools);
2844 option_data_derive(cfile, handle, pools);
2860 derive_classes(cfile, handle, classes);
2864 derive_classes(cfile, handle, classes);
2866 parse_error(cfile, "unexpected parameter %s to derive",
2872 root = mapGet(cfile->stack[1], "reservations");
2874 mapSet(cfile->stack[1], hosts->value, "reservations");
2902 for (where = cfile->stack_top; where > 0; --where) {
2903 kind = cfile->stack[where]->kind;
2908 upper = mapGet(cfile->stack[where], "client-classes");
2910 mapSet(cfile->stack[where],
2914 concat_classes(cfile, upper, classes->value);
2943 option_data_derive(struct parse *cfile, struct handle *src, struct handle *dst)
2974 derive_classes(struct parse *cfile, struct handle *src, struct handle *dst)
2989 item = get_class(cfile, item);
2991 parse_error(cfile, "dangling class reference");
3013 parse_fixed_addr_param(struct parse *cfile, enum dhcp_token type) {
3021 TAILQ_CONCAT(&addresses->comments, &cfile->comments);
3026 address = parse_ip_addr_or_hostname(cfile, ISC_TRUE);
3028 address = parse_ip6_addr_txt(cfile);
3030 parse_error(cfile, "requires FIXED_ADDR[6]");
3032 parse_error(cfile, "can't parse fixed address");
3035 TAILQ_CONCAT(&addr->comments, &cfile->comments);
3037 token = peek_token(&val, NULL, cfile);
3039 token = next_token(&val, NULL, cfile);
3042 parse_semi(cfile);
3046 parse_error(cfile, "can't get fixed address");
3060 parse_binding_value(struct parse *cfile)
3068 token = peek_token(&val, NULL, cfile);
3070 skip_token(&val, &buflen, cfile);
3075 data = parse_hexa(cfile);
3078 skip_token(&val, NULL, cfile);
3079 token = next_token(&val, NULL, cfile);
3081 parse_error(cfile, "expecting decimal number.");
3084 token = next_token(&val, NULL, cfile);
3090 parse_error(cfile, "expecting true or false");
3092 parse_error(cfile, "expecting a constant value.");
3102 parse_address_range(struct parse *cfile, int type, size_t where)
3115 if ((token = peek_token(&val, NULL, cfile)) == DYNAMIC_BOOTP) {
3116 skip_token(&val, NULL, cfile);
3120 low = parse_numeric_aggregate(cfile, addr, &len, DOT, 10, 8);
3122 parse_error(cfile, "can't parse range (low)");
3125 token = peek_token(&val, NULL, cfile);
3130 high = parse_numeric_aggregate(cfile, addr, &len, DOT, 10, 8);
3132 parse_error(cfile, "can't parse range (high)");
3135 token = next_token(&val, NULL, cfile);
3137 parse_error(cfile, "semicolon expected.");
3146 group = cfile->stack[where];
3177 pool = cfile->stack[where];
3192 TAILQ_CONCAT(&r->comments, &cfile->comments);
3198 parse_error(cfile, "can't allocate range");
3202 kind = cfile->stack[i]->kind;
3204 chain->share = cfile->stack[i];
3217 parse_address_range6(struct parse *cfile, int type, size_t where)
3230 parse_error(cfile, "range6 statement is only supported "
3236 low = parse_ip6_addr_txt(cfile);
3238 parse_error(cfile, "can't parse range6 address (low)");
3245 token = peek_token(&val, NULL, cfile);
3251 skip_token(NULL, NULL, cfile);
3252 token = next_token(&val, NULL, cfile);
3254 parse_error(cfile, "expecting number");
3262 token = peek_token(&val, NULL, cfile);
3267 skip_token(NULL, NULL, cfile);
3276 skip_token(NULL, NULL, cfile);
3282 high = parse_ip6_addr_txt(cfile);
3284 parse_error(cfile,
3291 token = next_token(NULL, NULL, cfile);
3293 parse_error(cfile, "semicolon expected.");
3299 group = cfile->stack[where];
3309 pool = cfile->stack[where];
3312 TAILQ_CONCAT(&r->comments, &cfile->comments);
3315 cfile->issue_counter++;
3321 parse_error(cfile, "can't allocate range");
3325 kind = cfile->stack[i]->kind;
3327 chain->share = cfile->stack[i];
3338 parse_prefix6(struct parse *cfile, int type, size_t where)
3349 parse_error(cfile, "prefix6 statement is only supported "
3355 lo = parse_ip6_addr_txt(cfile);
3357 parse_error(cfile, "can't parse prefix6 address (low)");
3359 hi = parse_ip6_addr_txt(cfile);
3361 parse_error(cfile, "can't parse prefix6 address (high)");
3366 token = next_token(NULL, NULL, cfile);
3368 parse_error(cfile, "expecting '/'");
3369 token = next_token(&val, NULL, cfile);
3371 parse_error(cfile, "expecting number");
3374 parse_error(cfile, "networks have 0 to 128 bits (exclusive)");
3376 token = next_token(NULL, NULL, cfile);
3378 parse_error(cfile, "semicolon expected.");
3384 group = cfile->stack[where];
3394 pool = cfile->stack[where];
3397 TAILQ_CONCAT(&prefix->comments, &cfile->comments);
3405 cfile->issue_counter++;
3414 parse_fixed_prefix6(struct parse *cfile, size_t host_decl)
3424 parse_error(cfile, "fixed-prefix6 statement is only "
3430 host = cfile->stack[host_decl];
3437 ia = parse_ip6_addr_txt(cfile);
3439 parse_error(cfile, "can't parse fixed-prefix6 address");
3440 token = next_token(&val, NULL, cfile);
3442 parse_error(cfile, "expecting '/'");
3444 token = next_token(&val, NULL, cfile);
3446 parse_error(cfile, "expecting number");
3448 token = next_token(NULL, NULL, cfile);
3450 parse_error(cfile, "semicolon expected.");
3453 TAILQ_CONCAT(&prefix->comments, &cfile->comments);
3466 * \param[in] cfile = the configuration file being parsed
3477 parse_pool6_statement(struct parse *cfile, int type)
3493 parse_error(cfile, "pool6 statement is only supported "
3498 TAILQ_CONCAT(&pool->comments, &cfile->comments);
3501 parse_error(cfile, "pool6s are only valid inside "
3503 parse_lbrace(cfile);
3505 stackPush(cfile, pool);
3512 token = peek_token(&val, NULL, cfile);
3515 skip_token(NULL, NULL, cfile);
3516 parse_address_range6(cfile, type, cfile->stack_top);
3521 skip_token(NULL, NULL, cfile);
3522 parse_prefix6(cfile, type, cfile->stack_top);
3528 skip_token(NULL, NULL, cfile);
3529 get_permit(cfile, permit);
3533 skip_token(NULL, NULL, cfile);
3534 get_permit(cfile, prohibit);
3538 skip_token(&val, NULL, cfile);
3548 parse_error(cfile, "unexpected end of file");
3551 declaration = parse_statement(cfile, POOL_DECL,
3557 cfile->stack_top--;
3559 generate_class(cfile, pool, permit, prohibit);
3566 pools = mapGet(cfile->stack[cfile->stack_top], "pools");
3570 mapSet(cfile->stack[cfile->stack_top], pools, "pools");
3580 cfile->issue_counter++;
3586 pdpools = mapGet(cfile->stack[cfile->stack_top], "pd-pools");
3590 mapSet(cfile->stack[cfile->stack_top],
3625 parse_error(cfile, "bad pdpool entry");
3653 parse_error(cfile, "can't find prefix marker");
3656 parse_error(cfile, "unexpected prefix marker");
3663 pools = mapGet(cfile->stack[cfile->stack_top], "pools");
3667 mapSet(cfile->stack[cfile->stack_top], pools, "pools");
3684 parse_error(cfile, "bad pool entry");
3708 parse_allow_deny(struct parse *cfile, int flag)
3732 token = next_token(&val, NULL, cfile);
3767 parse_error(cfile, "expecting allow/deny key");
3769 parse_semi(cfile);
3776 parse_error(cfile, "unknown allow/deny keyword (%s)", name);
3779 cfile->issue_counter++;
3795 parse_server_duid_conf(struct parse *cfile) {
3805 TAILQ_CONCAT(&duid->comments, &cfile->comments);
3810 next_token(&val, NULL, cfile);
3815 token = next_token(&val, NULL, cfile);
3828 token = next_token(&val, NULL, cfile);
3830 parse_error(cfile, "enterprise number expected");
3834 token = next_token(&val, &len, cfile);
3836 parse_error(cfile, "identifier expected");
3856 if (peek_token(NULL, NULL, cfile) != SEMI) {
3860 token = next_token(NULL, NULL, cfile);
3872 parse_error(cfile, "hardware type expected");
3877 ll_addr = parse_hexa(cfile);
3879 parse_error(cfile,
3897 if (peek_token(NULL, NULL, cfile) != SEMI) {
3901 token = next_token(NULL, NULL, cfile);
3913 parse_error(cfile, "hardware type expected");
3918 token = next_token(&val, NULL, cfile);
3920 parse_error(cfile, "timestamp expected");
3924 ll_addr = parse_hexa(cfile);
3926 parse_error(cfile,
3947 cfile->issue_counter++;
3950 token = next_token(&val, &len, cfile);
3952 parse_error(cfile, "identifier expected");
3961 parse_error(cfile, "DUID type of LLT, EN, or LL expected");
3966 token = next_token(NULL, NULL, cfile);
3968 parse_error(cfile, "semicolon expected");
3971 if (mapContains(cfile->stack[1], "server-id"))
3972 parse_error(cfile, "there is already a server-id");
3976 cfile->issue_counter++;
3978 mapSet(cfile->stack[1], duid, "server-id");
4006 parse_directive(struct parse *cfile)
4013 token = peek_token(&val, NULL, cfile);
4017 skip_token(&val, NULL, cfile);
4018 token = peek_token(&val, NULL, cfile);
4020 parse_option_space_dir(cfile);
4025 option = parse_option_name(cfile, ISC_TRUE, &known);
4026 token = next_token(&val, NULL, cfile);
4046 parse_semi(cfile);
4050 parse_error(cfile, "attempt to modify config %s.%s",
4053 token = next_token(&val, NULL, cfile);
4055 parse_error(cfile,
4059 parse_error(cfile,
4064 parse_semi(cfile);
4068 parse_option_code_dir(cfile, option);
4073 parse_option_status_dir(cfile, option, token);
4077 parse_option_local_dir(cfile, option);
4078 parse_semi(cfile);
4082 parse_option_define_dir(cfile, option);
4083 parse_semi(cfile);
4086 parse_error(cfile, "unknown option directive %s", val);
4089 parse_error(cfile, "unknown directive %s", val);
4096 parse_option_space_dir(struct parse *cfile)
4102 skip_token(NULL, NULL, cfile); /* Discard SPACE */
4103 token = next_token(&val, NULL, cfile);
4105 parse_error(cfile, "expecting identifier.");
4108 parse_error(cfile, "can't find space '%s", val);
4110 token = next_token(&val, NULL, cfile);
4117 parse_semi(cfile);
4121 token = next_token(&val, NULL, cfile);
4123 parse_error(cfile,
4127 parse_error(cfile,
4131 parse_semi(cfile);
4137 token = next_token(NULL, NULL, cfile);
4143 parse_error(cfile, "expected KNOW or UNKNOWN");
4145 parse_error(cfile, "expected KNOW or UNKNOWN or DYNAMIC");
4150 parse_error(cfile, "illicit combination: space "
4153 parse_error(cfile, "expected KNOW or UNKNOWN");
4155 parse_semi(cfile);
4161 parse_option_code_dir(struct parse *cfile, struct option *option)
4179 token = next_token(&val, NULL, cfile);
4181 parse_error(cfile, "expecting option code number.");
4198 parse_error(cfile, "attempt to redefine %s.%s code %u",
4201 token = next_token(&val, NULL, cfile);
4203 parse_error(cfile, "expecting \"=\"");
4204 token = next_token(&val, NULL, cfile);
4206 parse_error(cfile, "expecting format string");
4208 parse_semi(cfile);
4213 parse_error(cfile, "failed to convert format \"%s\" for "
4218 parse_error(cfile, "option %s.%s code %u encapsulate?",
4230 optdef = mapGet(cfile->stack[1], "option-def");
4233 cfile->stack[1], optdef, "option-def");
4241 parse_option_status_dir(struct parse *cfile, struct option *option,
4247 token = next_token(NULL, NULL, cfile);
4253 parse_error(cfile, "expected KNOW or UNKNOWN");
4255 parse_error(cfile, "expected KNOW or UNKNOWN or DYNAMIC");
4260 parse_error(cfile, "illicit combination: option "
4265 parse_error(cfile, "expected KNOW or UNKNOWN");
4267 parse_semi(cfile);
4273 parse_option_local_dir(struct parse *cfile, struct option *option)
4282 parse_error(cfile, "unknown code for option %s.%s",
4285 optdef = mapGet(cfile->stack[1], "option-def");
4288 mapSet(cfile->stack[1], optdef, "option-def");
4295 parse_error(cfile, "got an option definition "
4302 parse_error(cfile, "got an option definition "
4314 parse_error(cfile, "can't find option %s.%s code %u in definitions",
4321 parse_option_define_dir(struct parse *cfile, struct option *option)
4333 parse_error(cfile, "unknown code for option %s.%s",
4336 optdef = mapGet(cfile->stack[1], "option-def");
4339 mapSet(cfile->stack[1], optdef, "option-def");
4346 parse_error(cfile, "got an option definition "
4353 parse_error(cfile, "got an option definition "
4356 parse_error(cfile, "unexpected definition for "
4372 parse_error(cfile, "failed to convert format \"%s\" for "
4378 parse_error(cfile, "option %s.%s code %u encapsulate?",
4400 new_network_interface(struct parse *cfile, struct element *iface)
4407 ifconf = mapGet(cfile->stack[1], "interfaces-config");
4410 mapSet(cfile->stack[1], ifconf, "interfaces-config");
4476 find_match(struct parse *cfile, struct element *host,
4489 hosts = mapGet(cfile->stack[1], "reservations");
4491 mapSet(cfile->stack[1],
4495 mapSet(cfile->stack[1], hosts, "reservations");
4498 return cfile->stack[1];
4501 for (group = cfile->stack_top; group > 0; --group) {
4502 kind = cfile->stack[group]->kind;
4507 parse_error(cfile, "can't find root group");
4509 return cfile->stack[group];
4515 return cfile->stack[1];
4525 return cfile->stack[1];
4537 parse_error(cfile, "bad address %s",
4553 return cfile->stack[1];
4632 get_class(struct parse *cfile, struct element *ref)
4641 classes = mapGet(cfile->stack[1], "client-classes");
4705 concat_classes(struct parse *cfile, struct element *dst, struct element *src)
4716 class = get_class(cfile, sitem);
4723 if (class == get_class(cfile, ditem)) {
4737 generate_class(struct parse *cfile, struct element *pool,
4757 classes = mapGet(cfile->stack[1], "generated-classes");
4760 mapSet(cfile->stack[1], classes, "generated-classes");