From: Thomas Markwalder Date: Thu, 16 Aug 2018 18:55:09 +0000 (-0400) Subject: [trac.TDS1] Patch kea-dhcp support for global HRs X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fv1_4_0_p1_tds;p=thirdparty%2Fkea.git [trac.TDS1] Patch kea-dhcp support for global HRs Applies changes from 5704 and 5705 to 1.4.0-P1 --- diff --git a/doc/guide/dhcp4-srv.xml b/doc/guide/dhcp4-srv.xml index 812d9e8f88..ec77508c25 100644 --- a/doc/guide/dhcp4-srv.xml +++ b/doc/guide/dhcp4-srv.xml @@ -3273,7 +3273,7 @@ It is merely echoed by the server identifier, DUID and circuit-id have been added in Kea 1.1.0. The following example shows how to reserve addresses for specific - hosts: + hosts in a subnet: "subnet4": [ @@ -3352,6 +3352,20 @@ It is merely echoed by the server to skip reservation checks when dealing with existing leases. Therefore, system administrators are encouraged to use out-of-pool reservations if possible. + Beginning with Kea 1.5.0, there is now support for global + host reservations. These are reservations that are specified at the + global level within the configuration and that do not belong to any + specific subnet. Kea will still match inbound client packets to a + subnet as before, but when the subnet's reservation mode is set to + "global", Kea will look for host reservations only + among the global reservations defined. Typcially, such resrvations would + be used to reserve hostnames for clients which may move from one subnet + to another. + + You can reserve any ip-address in a global reservation. Just keep + in mind that Kea will not do any sanity checking on the address and for + Kea 1.5.0, support for global reservations should be considered experimental. +
@@ -3429,6 +3443,15 @@ It is merely echoed by the server out-of-pool reservations. If the reserved address does not belong to a pool, there is no way that other clients could get this address. + + + The conflict resolution mechanism does not work for global + reservations. As of Kea 1.5.0, it is generally recommended to not use + global reservations for addresses. If you want to use it anyway, + you have to manually ensure that the reserved addressed are not + in the dynamic pools. + +
@@ -3695,10 +3718,10 @@ It is merely echoed by the server Allowed values are: - all - enables all host reservation - types. This is the default value. This setting is the safest and the most - flexible. It allows in-pool and out-of-pool reservations. As all checks - are conducted, it is also the slowest. + all - enables both in-pool + and out-of-pool host reservation types. This is the default value. This + setting is the safest and the most flexible. As all checks are conducted, + it is also the slowest. This does not check against global reservations. out-of-pool - allows only out of @@ -3711,6 +3734,16 @@ It is merely echoed by the server reservation-mode and misconfiguration may cause problems. + global - allows only global + host reservations. With this setting in place, the server searches for + reservations for a client only among the defined global reservations. + If an address is specified, the server will skip the reservation checks + done when dealing in other modes, thus improving performance. + Caution is advised when using this setting: Kea does not sanity check + the reservations when global and + misconfiguration may cause problems. + + disabled - host reservation support is disabled. As there are no reservations, the server will skip all checks. Any reservations defined @@ -3722,7 +3755,7 @@ It is merely echoed by the server - An example configuration that disables reservation looks like follows: + An example configuration that disables reservation appears as follows: "Dhcp4": { "subnet4": [ @@ -3734,8 +3767,45 @@ It is merely echoed by the server ] } + + + + + An example configuration using global reservations is shown below: + +"Dhcp4": { + + + "reservations": [ + { + "hw-address": "01:bb:cc:dd:ee:ff", + "hostname": "host-one" + }, + { + "hw-address": "02:bb:cc:dd:ee:ff", + "hostname": "host-two" + } + ], + + "subnet4": [ + { + "subnet": "192.0.2.0/24", + "reservation-mode": "global", + ... + }, + { + "subnet": "192.0.8.0/24", + "reservation-mode": "global", + ... + } + ] +} + + For more details regarding global erservations, see . + + Another aspect of the host reservations are the different types of identifiers. Kea 1.1.0 supports four types of identifiers (hw-address, duid, client-id and circuit-id), but more identifier types @@ -3779,7 +3849,84 @@ If not specified, the default value is: src/lib/dhcpsrv/cfg_host_operations.cc --> -
+ + + +
+ Global reservations in DHCPv4 + + In some deployments, such as mobile, clients can roam within the + network and there is a desire to specify certain parameters regardless of + the client's current location. To facilitate such a need, a global + reservation mechanism has been implemented. The idea behind it is that + regular host reservations are tied to specific subnets, by using specific + subnet-id. Kea 1.5.0 introduced a new capability to specify global + reservation that can be used in every subnet that has global reservations + enabled. + + This feature can be used to assign certain parameters, such as + hostname or other dedicated, host-specific options. It can also be used to + assign addresses. However, global reservations that assign addresses bypass + the whole topology determination provided by DHCP logic implemented in + Kea. It is very easy to misuse this feature and get configuration that is + inconsistent. To give a specific example, imagine a global reservation + for address 192.0.2.100 and two subnets 192.0.2.0/24 and 192.0.5.0/24. If + global reservations are used in both subnets and a device matching global + host reservations visits part of the network that is serviced by + 192.0.5.0/24, it will get an IP address 192.0.2.100, a subnet 192.0.5.0 and + a default router 192.0.5.1. Obviously such a configuration is unusable, as + the client won't be able to reach its default gateway. + + + To use global host reservations a configuration similar to the following + can be used: + + +"Dhcp4:" { + // This specify global reservations. They will apply to all subnets that + // have global reservations enabled. + + "reservations": [ + { + "hw-address": "aa:bb:cc:dd:ee:ff", + "hostname": "hw-host-dynamic" + }, + { + "hw-address": "01:02:03:04:05:06", + "hostname": "hw-host-fixed", + + // Use of IP address is global reservation is risky. If used outside of + // matching subnet, such as 192.0.1.0/24, it will result in a broken + // configuration being handled to the client. + "ip-address": "192.0.1.77" + }, + { + "duid": "01:02:03:04:05", + "hostname": "duid-host" + }, + { + "circuit-id": "'charter950'", + "hostname": "circuit-id-host" + }, + { + "client-id": "01:11:22:33:44:55:66", + "hostname": "client-id-host" + } + ], + "valid-lifetime": 600, + "subnet4": [ { + "subnet": "10.0.0.0/24", + "reservation-mode": "global", + "pools": [ { "pool": "10.0.0.10-10.0.0.100" } ] + } ] +} + + + + When using database backends, the global host reservations are + distinguished from regular reservations by using subnet-id value of + zero. +
diff --git a/src/bin/d2/location.hh b/src/bin/d2/location.hh index f7cd2a53f0..e91f42fc4c 100644 --- a/src/bin/d2/location.hh +++ b/src/bin/d2/location.hh @@ -1,4 +1,3 @@ -// Generated 201804111443 // A Bison parser, made by GNU Bison 3.0.4. // Locations for Bison parsers in C++ diff --git a/src/bin/d2/position.hh b/src/bin/d2/position.hh index 7b8f536e7a..1ba4edcffe 100644 --- a/src/bin/d2/position.hh +++ b/src/bin/d2/position.hh @@ -1,4 +1,3 @@ -// Generated 201804111443 // A Bison parser, made by GNU Bison 3.0.4. // Positions for Bison parsers in C++ diff --git a/src/bin/d2/stack.hh b/src/bin/d2/stack.hh index 4569b5a695..770196b000 100644 --- a/src/bin/d2/stack.hh +++ b/src/bin/d2/stack.hh @@ -1,4 +1,3 @@ -// Generated 201804111443 // A Bison parser, made by GNU Bison 3.0.4. // Stack handling for Bison parsers in C++ diff --git a/src/bin/dhcp4/dhcp4_lexer.cc b/src/bin/dhcp4/dhcp4_lexer.cc index 63aa9cf038..30f437260c 100644 --- a/src/bin/dhcp4/dhcp4_lexer.cc +++ b/src/bin/dhcp4/dhcp4_lexer.cc @@ -1,22 +1,27 @@ -#line 2 "dhcp4_lexer.cc" +#line 1 "dhcp4_lexer.cc" -#line 4 "dhcp4_lexer.cc" +#line 3 "dhcp4_lexer.cc" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ /* %not-for-header */ - /* %if-c-only */ /* %if-not-reentrant */ #define yy_create_buffer parser4__create_buffer #define yy_delete_buffer parser4__delete_buffer -#define yy_flex_debug parser4__flex_debug +#define yy_scan_buffer parser4__scan_buffer +#define yy_scan_string parser4__scan_string +#define yy_scan_bytes parser4__scan_bytes #define yy_init_buffer parser4__init_buffer #define yy_flush_buffer parser4__flush_buffer #define yy_load_buffer_state parser4__load_buffer_state #define yy_switch_to_buffer parser4__switch_to_buffer +#define yypush_buffer_state parser4_push_buffer_state +#define yypop_buffer_state parser4_pop_buffer_state +#define yyensure_buffer_stack parser4_ensure_buffer_stack +#define yy_flex_debug parser4__flex_debug #define yyin parser4_in #define yyleng parser4_leng #define yylex parser4_lex @@ -36,7 +41,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 -#define YY_FLEX_SUBMINOR_VERSION 0 +#define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -45,11 +50,244 @@ /* %endif */ /* %if-c-only */ - +#ifdef yy_create_buffer +#define parser4__create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer parser4__create_buffer +#endif + +#ifdef yy_delete_buffer +#define parser4__delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer parser4__delete_buffer +#endif + +#ifdef yy_scan_buffer +#define parser4__scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer parser4__scan_buffer +#endif + +#ifdef yy_scan_string +#define parser4__scan_string_ALREADY_DEFINED +#else +#define yy_scan_string parser4__scan_string +#endif + +#ifdef yy_scan_bytes +#define parser4__scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes parser4__scan_bytes +#endif + +#ifdef yy_init_buffer +#define parser4__init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer parser4__init_buffer +#endif + +#ifdef yy_flush_buffer +#define parser4__flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer parser4__flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define parser4__load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state parser4__load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define parser4__switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer parser4__switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define parser4_push_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state parser4_push_buffer_state +#endif + +#ifdef yypop_buffer_state +#define parser4_pop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state parser4_pop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define parser4_ensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack parser4_ensure_buffer_stack +#endif + +#ifdef yylex +#define parser4_lex_ALREADY_DEFINED +#else +#define yylex parser4_lex +#endif + +#ifdef yyrestart +#define parser4_restart_ALREADY_DEFINED +#else +#define yyrestart parser4_restart +#endif + +#ifdef yylex_init +#define parser4_lex_init_ALREADY_DEFINED +#else +#define yylex_init parser4_lex_init +#endif + +#ifdef yylex_init_extra +#define parser4_lex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra parser4_lex_init_extra +#endif + +#ifdef yylex_destroy +#define parser4_lex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy parser4_lex_destroy +#endif + +#ifdef yyget_debug +#define parser4_get_debug_ALREADY_DEFINED +#else +#define yyget_debug parser4_get_debug +#endif + +#ifdef yyset_debug +#define parser4_set_debug_ALREADY_DEFINED +#else +#define yyset_debug parser4_set_debug +#endif + +#ifdef yyget_extra +#define parser4_get_extra_ALREADY_DEFINED +#else +#define yyget_extra parser4_get_extra +#endif + +#ifdef yyset_extra +#define parser4_set_extra_ALREADY_DEFINED +#else +#define yyset_extra parser4_set_extra +#endif + +#ifdef yyget_in +#define parser4_get_in_ALREADY_DEFINED +#else +#define yyget_in parser4_get_in +#endif + +#ifdef yyset_in +#define parser4_set_in_ALREADY_DEFINED +#else +#define yyset_in parser4_set_in +#endif + +#ifdef yyget_out +#define parser4_get_out_ALREADY_DEFINED +#else +#define yyget_out parser4_get_out +#endif + +#ifdef yyset_out +#define parser4_set_out_ALREADY_DEFINED +#else +#define yyset_out parser4_set_out +#endif + +#ifdef yyget_leng +#define parser4_get_leng_ALREADY_DEFINED +#else +#define yyget_leng parser4_get_leng +#endif + +#ifdef yyget_text +#define parser4_get_text_ALREADY_DEFINED +#else +#define yyget_text parser4_get_text +#endif + +#ifdef yyget_lineno +#define parser4_get_lineno_ALREADY_DEFINED +#else +#define yyget_lineno parser4_get_lineno +#endif + +#ifdef yyset_lineno +#define parser4_set_lineno_ALREADY_DEFINED +#else +#define yyset_lineno parser4_set_lineno +#endif + +#ifdef yywrap +#define parser4_wrap_ALREADY_DEFINED +#else +#define yywrap parser4_wrap +#endif + /* %endif */ +#ifdef yyalloc +#define parser4_alloc_ALREADY_DEFINED +#else +#define yyalloc parser4_alloc +#endif + +#ifdef yyrealloc +#define parser4_realloc_ALREADY_DEFINED +#else +#define yyrealloc parser4_realloc +#endif + +#ifdef yyfree +#define parser4_free_ALREADY_DEFINED +#else +#define yyfree parser4_free +#endif + /* %if-c-only */ +#ifdef yytext +#define parser4_text_ALREADY_DEFINED +#else +#define yytext parser4_text +#endif + +#ifdef yyleng +#define parser4_leng_ALREADY_DEFINED +#else +#define yyleng parser4_leng +#endif + +#ifdef yyin +#define parser4_in_ALREADY_DEFINED +#else +#define yyin parser4_in +#endif + +#ifdef yyout +#define parser4_out_ALREADY_DEFINED +#else +#define yyout parser4_out +#endif + +#ifdef yy_flex_debug +#define parser4__flex_debug_ALREADY_DEFINED +#else +#define yy_flex_debug parser4__flex_debug +#endif + +#ifdef yylineno +#define parser4_lineno_ALREADY_DEFINED +#else +#define yylineno parser4_lineno +#endif + /* %endif */ /* First, we deal with platform-specific or compiler-specific issues. */ @@ -127,50 +365,39 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* %endif */ +/* begin standard C++ headers. */ /* %if-c++-only */ /* %endif */ -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST +/* TODO: this is always defined, so inline it */ #define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) #else -#define yyconst +#define yynoreturn #endif /* %not-for-header */ - /* Returned upon end-of-file. */ #define YY_NULL 0 /* %ok-for-header */ /* %not-for-header */ - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) /* %ok-for-header */ /* %if-reentrant */ @@ -185,20 +412,16 @@ typedef unsigned int flex_uint32_t; * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * - /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START - /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - /* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE parser4_restart(parser4_in ) - +#define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ @@ -229,19 +452,19 @@ typedef size_t yy_size_t; #endif /* %if-not-reentrant */ -extern yy_size_t parser4_leng; +extern int yyleng; /* %endif */ /* %if-c-only */ /* %if-not-reentrant */ -extern FILE *parser4_in, *parser4_out; +extern FILE *yyin, *yyout; /* %endif */ /* %endif */ #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 - + #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) @@ -249,16 +472,15 @@ extern FILE *parser4_in, *parser4_out; #define yyless(n) \ do \ { \ - /* Undo effects of setting up parser4_text. */ \ + /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up parser4_text again */ \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) - #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE @@ -278,7 +500,7 @@ struct yy_buffer_state /* Size of input buffer in bytes, not including room for EOB * characters. */ - yy_size_t yy_buf_size; + int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. @@ -306,7 +528,7 @@ struct yy_buffer_state int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ - + /* Whether to try to fill the input buffer when we reach the * end of it. */ @@ -323,8 +545,8 @@ struct yy_buffer_state * possible backing-up. * * When we actually see the EOF, we change the status to "new" - * (via parser4_restart()), so that the user can continue scanning by - * just pointing parser4_in at a new input file. + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 @@ -333,13 +555,12 @@ struct yy_buffer_state /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ - /* %if-not-reentrant */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ +static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ /* %endif */ /* %ok-for-header */ @@ -354,7 +575,6 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) - /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ @@ -364,126 +584,115 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* %if-not-reentrant */ /* %not-for-header */ - -/* yy_hold_char holds the character lost when parser4_text is formed. */ +/* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ -yy_size_t parser4_leng; +int yyleng; /* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; +static char *yy_c_buf_p = NULL; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ -/* Flag which is used to allow parser4_wrap()'s to do buffer switches - * instead of setting up a fresh parser4_in. A bit of a hack ... +/* Flag which is used to allow yywrap()'s to do buffer switches + * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; /* %ok-for-header */ /* %endif */ -void parser4_restart (FILE *input_file ); -void parser4__switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE parser4__create_buffer (FILE *file,int size ); -void parser4__delete_buffer (YY_BUFFER_STATE b ); -void parser4__flush_buffer (YY_BUFFER_STATE b ); -void parser4_push_buffer_state (YY_BUFFER_STATE new_buffer ); -void parser4_pop_buffer_state (void ); +void yyrestart ( FILE *input_file ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); +void yy_delete_buffer ( YY_BUFFER_STATE b ); +void yy_flush_buffer ( YY_BUFFER_STATE b ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state ( void ); -static void parser4_ensure_buffer_stack (void ); -static void parser4__load_buffer_state (void ); -static void parser4__init_buffer (YY_BUFFER_STATE b,FILE *file ); +static void yyensure_buffer_stack ( void ); +static void yy_load_buffer_state ( void ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) -#define YY_FLUSH_BUFFER parser4__flush_buffer(YY_CURRENT_BUFFER ) - -YY_BUFFER_STATE parser4__scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE parser4__scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE parser4__scan_bytes (yyconst char *bytes,yy_size_t len ); +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); /* %endif */ -void *parser4_alloc (yy_size_t ); -void *parser4_realloc (void *,yy_size_t ); -void parser4_free (void * ); - -#define yy_new_buffer parser4__create_buffer +void *yyalloc ( yy_size_t ); +void *yyrealloc ( void *, yy_size_t ); +void yyfree ( void * ); +#define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ - parser4_ensure_buffer_stack (); \ + yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ - parser4__create_buffer(parser4_in,YY_BUF_SIZE ); \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } - #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ - parser4_ensure_buffer_stack (); \ + yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ - parser4__create_buffer(parser4_in,YY_BUF_SIZE ); \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } - #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) -/* %% [1.0] parser4_text/parser4_in/parser4_out/yy_state_type/parser4_lineno etc. def's & init go here */ +/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */ /* Begin user sect3 */ #define parser4_wrap() (/*CONSTCOND*/1) #define YY_SKIP_YYWRAP #define FLEX_DEBUG +typedef flex_uint8_t YY_CHAR; -typedef unsigned char YY_CHAR; - -FILE *parser4_in = (FILE *) 0, *parser4_out = (FILE *) 0; +FILE *yyin = NULL, *yyout = NULL; typedef int yy_state_type; -extern int parser4_lineno; +extern int yylineno; +int yylineno = 1; -int parser4_lineno = 1; - -extern char *parser4_text; +extern char *yytext; #ifdef yytext_ptr #undef yytext_ptr #endif -#define yytext_ptr parser4_text +#define yytext_ptr yytext /* %% [1.5] DFA */ /* %if-c-only Standard (non-C++) definition */ -static yy_state_type yy_get_previous_state (void ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); -static int yy_get_next_buffer (void ); -#if defined(__GNUC__) && __GNUC__ >= 3 -__attribute__((__noreturn__)) -#endif -static void yy_fatal_error (yyconst char msg[] ); +static yy_state_type yy_get_previous_state ( void ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); +static int yy_get_next_buffer ( void ); +static void yynoreturn yy_fatal_error ( const char* msg ); /* %endif */ /* Done after the current pattern has been matched and before the - * corresponding action - sets up parser4_text. + * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ -/* %% [2.0] code to fiddle parser4_text and parser4_leng for yymore() goes here \ */\ - parser4_leng = (size_t) (yy_cp - yy_bp); \ +/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ + yyleng = (int) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ -/* %% [3.0] code to copy yytext_ptr to parser4_text[] goes here, if %array \ */\ +/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ (yy_c_buf_p) = yy_cp; - /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ -#define YY_NUM_RULES 168 -#define YY_END_OF_BUFFER 169 +#define YY_NUM_RULES 169 +#define YY_END_OF_BUFFER 170 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -491,165 +700,166 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[1396] = +static const flex_int16_t yy_accept[1402] = { 0, - 161, 161, 0, 0, 0, 0, 0, 0, 0, 0, - 169, 167, 10, 11, 167, 1, 161, 158, 161, 161, - 167, 160, 159, 167, 167, 167, 167, 167, 154, 155, - 167, 167, 167, 156, 157, 5, 5, 5, 167, 167, - 167, 10, 11, 0, 0, 150, 0, 0, 0, 0, + 162, 162, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 168, 10, 11, 168, 1, 162, 159, 162, 162, + 168, 161, 160, 168, 168, 168, 168, 168, 155, 156, + 168, 168, 168, 157, 158, 5, 5, 5, 168, 168, + 168, 10, 11, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 161, 161, 0, 160, 161, 3, 2, 6, 0, 161, + 162, 162, 0, 161, 162, 3, 2, 6, 0, 162, 0, 0, 0, 0, 0, 0, 4, 0, 0, 9, - 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, + 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, + 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 167, 165, 0, 164, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 166, 164, 0, 163, 162, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, - 130, 0, 0, 69, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 132, 0, 131, 0, 0, 70, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, + 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, - 165, 162, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 166, 163, 0, 0, 0, 0, 0, - 0, 0, 132, 0, 0, 134, 0, 0, 0, 0, - 0, 0, 0, 70, 0, 0, 0, 0, 0, 54, - 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 133, 0, 0, 135, 0, + 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, + 0, 0, 54, 0, 0, 0, 0, 0, 88, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 57, 0, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 57, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 84, 26, 0, 0, 31, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, - 0, 0, 0, 0, 0, 0, 0, 0, 12, 139, - 0, 136, 0, 135, 0, 0, 0, 97, 0, 0, + 26, 0, 0, 31, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 140, 0, 137, 0, 136, 0, 0, + 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, + 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, - 0, 0, 7, 0, 0, 137, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, + 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 103, 73, 0, 0, 0, - 0, 78, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, + 0, 104, 74, 0, 0, 0, 0, 79, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, + 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, - 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 93, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 0, 0, 0, 0, 0, 0, 115, 0, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, + 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, - 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, - 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, - 90, 0, 0, 0, 0, 94, 76, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 0, 20, 0, 99, 0, 0, 0, 0, 0, - 0, 0, 124, 0, 0, 0, 0, 51, 0, 0, - - 0, 0, 0, 102, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 121, 0, 0, 119, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, + 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, + 0, 95, 77, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 89, 0, 20, 0, + 100, 0, 0, 0, 0, 0, 0, 0, 125, 0, + + 0, 0, 0, 51, 0, 0, 0, 0, 0, 103, + 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 147, 0, 52, 68, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, - 0, 0, 0, 0, 121, 0, 119, 0, 114, 113, - 0, 42, 0, 19, 0, 0, 0, 0, 0, 133, - - 0, 0, 83, 0, 0, 0, 0, 0, 0, 111, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, - 0, 100, 0, 36, 0, 0, 0, 0, 0, 123, - 0, 0, 0, 0, 0, 0, 64, 47, 0, 0, - 95, 0, 0, 0, 0, 86, 0, 0, 0, 0, - 0, 58, 0, 142, 0, 141, 0, 0, 0, 0, + 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, + 0, 52, 68, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, + 122, 0, 120, 0, 115, 114, 0, 42, 0, 19, + + 0, 0, 0, 0, 0, 134, 0, 0, 84, 0, + 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 62, 0, 101, 0, 36, + 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, + 0, 0, 64, 47, 0, 0, 96, 0, 0, 0, + 0, 87, 0, 0, 0, 0, 0, 58, 0, 143, + 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, - 0, 0, 149, 81, 0, 43, 112, 0, 0, 145, - 116, 0, 0, 0, 0, 0, 0, 23, 0, 0, - 22, 0, 122, 0, 0, 0, 0, 0, 74, 0, + 0, 0, 41, 0, 0, 0, 0, 0, 150, 82, + 0, 43, 113, 0, 0, 146, 117, 0, 0, 0, + 0, 0, 0, 23, 0, 0, 22, 0, 123, 0, + 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 102, + 0, 24, 0, 147, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 40, 0, 0, 18, 149, + 50, 0, 144, 139, 0, 0, 14, 0, 0, 130, + 0, 0, 0, 0, 110, 0, 86, 0, 0, 0, + + 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, + 0, 0, 0, 13, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 45, 0, 0, 0, 37, 0, 0, 0, - 0, 0, 0, 101, 0, 24, 0, 146, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, - 0, 0, 18, 148, 50, 0, 143, 138, 0, 0, - 14, 0, 0, 129, 0, 0, 0, 0, 109, 0, - 85, 0, 0, 0, 0, 0, 0, 0, 0, 65, - - 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, - 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 108, 0, 17, 0, 126, - 0, 0, 0, 0, 0, 125, 0, 0, 0, 107, - 0, 44, 0, 0, 39, 128, 0, 0, 0, 0, + 0, 109, 0, 17, 0, 127, 0, 0, 0, 0, + 0, 126, 0, 0, 0, 108, 0, 44, 0, 0, + 39, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, - 82, 0, 0, 0, 0, 0, 105, 110, 48, 0, - 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, - 71, 0, 0, 106, 0 + 0, 0, 0, 0, 128, 0, 83, 0, 0, 0, + 0, 0, 106, 111, 48, 0, 0, 0, 105, 0, + 0, 0, 0, 0, 0, 0, 72, 0, 0, 107, + 0 } ; -static yyconst YY_CHAR yy_ec[256] = +static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, @@ -681,7 +891,7 @@ static yyconst YY_CHAR yy_ec[256] = 5, 5, 5, 5, 5 } ; -static yyconst YY_CHAR yy_meta[72] = +static const YY_CHAR yy_meta[72] = { 0, 1, 1, 2, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 3, 3, 3, 3, @@ -693,341 +903,343 @@ static yyconst YY_CHAR yy_meta[72] = 3 } ; -static yyconst flex_uint16_t yy_base[1408] = +static const flex_int16_t yy_base[1414] = { 0, 0, 70, 19, 29, 41, 49, 52, 58, 87, 95, - 1758, 1759, 32, 1754, 141, 0, 201, 1759, 206, 88, - 11, 213, 1759, 1736, 114, 25, 2, 6, 1759, 1759, - 73, 11, 17, 1759, 1759, 1759, 104, 1742, 1697, 0, - 1734, 107, 1749, 217, 247, 1759, 1693, 185, 1692, 1698, - 93, 58, 1690, 91, 211, 195, 14, 273, 195, 1689, - 181, 275, 202, 209, 1698, 66, 188, 1697, 232, 219, - 296, 284, 207, 1680, 78, 287, 324, 305, 1699, 0, - 339, 359, 367, 374, 379, 1759, 0, 1759, 301, 344, - 223, 295, 196, 336, 348, 210, 1759, 1696, 1735, 1759, - - 322, 1759, 392, 1724, 330, 1682, 1692, 351, 366, 1687, - 363, 370, 372, 379, 241, 1730, 0, 443, 376, 1674, - 1676, 1672, 1680, 362, 1676, 1665, 1666, 89, 1682, 1665, - 1674, 1674, 366, 1665, 353, 1666, 358, 1711, 1715, 1657, - 1708, 1650, 1673, 1670, 1670, 1664, 358, 1657, 1650, 1655, - 1649, 378, 1660, 1653, 1644, 1643, 1657, 373, 1643, 386, - 1659, 72, 439, 1646, 413, 1657, 1654, 1655, 1653, 414, - 1635, 1637, 420, 1629, 1646, 1638, 0, 389, 425, 331, - 398, 442, 414, 1637, 1759, 0, 1680, 419, 1627, 1630, - 438, 445, 1638, 456, 1681, 457, 1680, 446, 1679, 1759, - - 492, 1678, 465, 1639, 1619, 1635, 1632, 1631, 1622, 462, - 1671, 1665, 1631, 1610, 1618, 1613, 1627, 1623, 1611, 1623, - 1623, 1614, 1598, 1602, 1615, 1615, 1607, 1597, 1615, 1759, - 1610, 1613, 1594, 1593, 1643, 1592, 1602, 1605, 466, 1601, - 1589, 1600, 1636, 1583, 1639, 1576, 1591, 484, 1581, 1597, - 1578, 1577, 1583, 1574, 1573, 1580, 1582, 1627, 1585, 1584, - 1578, 311, 1585, 1580, 1572, 1562, 1577, 1576, 1576, 1557, - 1573, 1559, 1565, 1572, 1560, 314, 1553, 1567, 1608, 1569, - 450, 1560, 485, 1759, 1759, 487, 1759, 1759, 1547, 0, - 468, 293, 1549, 508, 496, 1603, 1556, 489, 1759, 1601, - - 1759, 1595, 537, 1759, 487, 1537, 1593, 1539, 1545, 1595, - 1552, 1551, 503, 1759, 1549, 1591, 1546, 1543, 415, 1549, - 1587, 1581, 1536, 1531, 1528, 1577, 1536, 1525, 1574, 1522, - 543, 1536, 1521, 1534, 1521, 1531, 1526, 1533, 1528, 1524, - 485, 1522, 1525, 1520, 1516, 1564, 507, 1558, 1759, 1557, - 1509, 1508, 1507, 1500, 1502, 1506, 1495, 1508, 528, 1553, - 1508, 1505, 1509, 1759, 1507, 1496, 1496, 1508, 508, 1483, - 1484, 1505, 519, 1487, 1536, 1498, 1497, 1483, 1495, 1494, - 1493, 1492, 516, 1533, 1532, 1759, 1476, 1475, 566, 1488, - 1759, 1759, 1487, 0, 1476, 1468, 514, 1473, 1524, 1523, - - 1481, 1521, 1759, 1469, 1519, 1759, 557, 603, 534, 1518, - 1474, 1470, 1458, 1759, 1463, 1473, 1472, 1459, 1458, 1759, - 1460, 1457, 480, 1455, 1457, 1759, 1465, 1462, 1447, 1460, - 1455, 568, 1462, 1444, 1493, 1759, 1442, 1458, 1490, 1453, - 1450, 1451, 1453, 1485, 1438, 1433, 1432, 1481, 1427, 1442, - 1420, 1427, 1432, 1480, 1759, 1427, 1423, 1421, 1430, 1424, - 1431, 1415, 1415, 1425, 1428, 1417, 1412, 1759, 1467, 1759, - 1411, 1422, 1459, 1406, 1411, 1420, 1414, 1408, 1417, 1457, - 1451, 1415, 1398, 1398, 1393, 1413, 1395, 1394, 1402, 1406, - 1389, 1445, 1387, 1401, 1390, 1759, 1759, 1390, 1388, 1759, - - 1399, 1433, 1395, 0, 1379, 1396, 1434, 1384, 1759, 1759, - 1381, 1759, 1387, 1759, 544, 545, 582, 1759, 1384, 1372, - 1423, 1370, 1369, 1368, 1375, 1368, 1380, 1379, 1379, 1367, - 1408, 1375, 1367, 1410, 1356, 1372, 1371, 1759, 1356, 1353, - 1367, 1359, 1365, 1356, 1364, 1349, 1365, 1347, 1361, 1359, - 1342, 1336, 1341, 1356, 1353, 1354, 1351, 1392, 1349, 1759, - 1335, 1337, 1346, 1344, 1381, 1380, 1333, 551, 1342, 1325, - 1326, 1323, 1759, 1337, 1316, 1337, 1334, 1326, 1369, 1323, - 1330, 1366, 1759, 1313, 1327, 1311, 1325, 1328, 1309, 1359, - 1358, 1305, 1356, 1355, 1759, 14, 1317, 1317, 1315, 1298, - - 1303, 1305, 1759, 1311, 1301, 1759, 1346, 1294, 1349, 545, - 567, 539, 1299, 1342, 551, 1346, 1340, 1339, 1338, 1292, - 1282, 1335, 1288, 1298, 1332, 1295, 1289, 1276, 1284, 1327, - 1331, 1288, 1287, 1288, 1281, 1270, 1283, 1286, 1281, 1282, - 1279, 1278, 1281, 1276, 1317, 1316, 1266, 1256, 540, 1313, - 1759, 1312, 1261, 1253, 1254, 1303, 1266, 1253, 1264, 1759, - 1252, 1261, 1260, 1260, 1300, 1243, 1252, 1245, 1256, 1233, - 1237, 1288, 1252, 1234, 1244, 1284, 1283, 1282, 1229, 1280, - 552, 561, 1222, 1232, 573, 1759, 1282, 1228, 1238, 1238, - 1221, 1226, 1230, 1220, 1232, 1235, 1272, 1759, 1266, 573, - - 1219, 1227, 1226, 1221, 1217, 1224, 1759, 1207, 1210, 1206, - 1223, 1218, 1206, 1202, 1209, 1203, 1255, 1212, 0, 24, - 66, 1759, 191, 241, 438, 554, 561, 604, 558, 560, - 575, 569, 626, 570, 573, 1759, 1759, 585, 590, 595, - 583, 1759, 1759, 597, 584, 578, 583, 609, 587, 635, - 595, 644, 595, 652, 1759, 599, 603, 605, 599, 657, - 612, 602, 603, 599, 612, 623, 607, 625, 620, 621, - 615, 617, 618, 618, 620, 673, 632, 637, 614, 1759, - 639, 629, 674, 634, 624, 639, 640, 627, 641, 1759, - 660, 668, 648, 638, 685, 650, 654, 693, 648, 643, - - 644, 640, 649, 644, 700, 659, 650, 1759, 652, 663, - 648, 664, 658, 703, 671, 656, 657, 1759, 676, 659, - 716, 661, 1759, 680, 660, 678, 717, 677, 673, 668, - 686, 685, 686, 672, 687, 679, 686, 676, 694, 679, - 1759, 687, 693, 688, 739, 1759, 690, 695, 737, 690, - 702, 697, 701, 699, 697, 699, 751, 697, 697, 754, - 700, 1759, 699, 707, 705, 710, 722, 706, 711, 721, - 722, 727, 766, 725, 741, 746, 720, 730, 722, 774, - 719, 1759, 726, 731, 738, 779, 780, 729, 1759, 725, - 728, 727, 747, 744, 749, 750, 736, 744, 753, 733, - - 754, 794, 1759, 749, 798, 799, 761, 763, 751, 748, - 755, 764, 807, 756, 754, 756, 773, 812, 764, 763, - 769, 767, 765, 818, 819, 815, 775, 1759, 780, 773, - 764, 783, 771, 781, 778, 783, 779, 792, 1759, 775, - 776, 1759, 777, 775, 794, 795, 792, 777, 798, 798, - 782, 787, 805, 1759, 795, 828, 819, 791, 850, 813, - 1759, 796, 811, 803, 807, 1759, 1759, 817, 852, 801, - 854, 803, 861, 806, 817, 809, 815, 811, 829, 830, - 1759, 828, 1759, 831, 1759, 816, 835, 825, 818, 831, - 873, 839, 1759, 831, 881, 824, 883, 1759, 884, 828, - - 834, 841, 883, 1759, 1759, 833, 833, 836, 850, 855, - 838, 895, 854, 855, 856, 894, 848, 901, 851, 903, - 852, 905, 906, 848, 908, 869, 910, 854, 866, 871, - 857, 887, 916, 876, 1759, 868, 919, 868, 864, 880, - 885, 867, 925, 880, 885, 1759, 886, 879, 888, 889, - 886, 876, 878, 935, 884, 937, 882, 939, 935, 878, - 895, 885, 945, 1759, 900, 1759, 1759, 905, 897, 907, - 893, 895, 954, 955, 901, 911, 958, 1759, 908, 908, - 911, 913, 964, 907, 1759, 928, 1759, 912, 1759, 1759, - 926, 1759, 920, 1759, 970, 921, 972, 973, 955, 1759, - - 933, 934, 1759, 922, 921, 924, 924, 925, 921, 1759, - 943, 929, 930, 945, 945, 948, 948, 945, 950, 1759, - 942, 1759, 952, 1759, 949, 954, 956, 953, 995, 1759, - 946, 947, 947, 953, 952, 963, 1759, 1759, 1002, 951, - 1759, 952, 952, 954, 960, 1759, 962, 964, 967, 1016, - 979, 1759, 976, 1759, 973, 1759, 996, 1016, 1022, 1023, - 967, 1025, 1026, 981, 975, 1029, 1030, 1026, 991, 987, - 1029, 979, 984, 1037, 995, 1039, 999, 1041, 1004, 993, - 987, 1003, 1003, 1048, 992, 1009, 1008, 992, 1048, 1049, - 998, 1051, 1016, 1017, 1017, 1004, 1759, 1015, 1062, 1022, - - 1035, 1022, 1759, 1759, 1066, 1759, 1759, 1015, 1026, 1759, - 1759, 1016, 1065, 1010, 1015, 1073, 1023, 1759, 1075, 1030, - 1759, 1077, 1759, 1022, 1037, 1025, 1040, 1044, 1759, 1078, - 1046, 1039, 1048, 1030, 1037, 1089, 1050, 1049, 1094, 1095, - 1096, 1047, 1759, 1098, 1099, 1046, 1759, 1050, 1102, 1048, - 1047, 1105, 1060, 1759, 1102, 1759, 1064, 1759, 1067, 1110, - 1065, 1112, 1073, 1056, 1058, 1055, 1071, 1072, 1081, 1759, - 1071, 1121, 1759, 1759, 1759, 1117, 1759, 1759, 1082, 1119, - 1759, 1073, 1080, 1759, 1077, 1082, 1129, 1074, 1759, 1089, - 1759, 1090, 1080, 1092, 1135, 1079, 1087, 1088, 1101, 1759, - - 1100, 1090, 1089, 1103, 1094, 1103, 1105, 1759, 1147, 1092, - 1149, 1109, 1151, 1759, 1147, 1111, 1112, 1099, 1094, 1157, - 1116, 1117, 1118, 1161, 1120, 1759, 1163, 1759, 1126, 1759, - 1108, 1166, 1167, 1112, 1129, 1759, 1115, 1115, 1117, 1759, - 1122, 1759, 1117, 1129, 1759, 1759, 1134, 1128, 1132, 1123, - 1175, 1124, 1140, 1133, 1128, 1143, 1134, 1141, 1128, 1143, - 1190, 1149, 1192, 1137, 1153, 1144, 1158, 1154, 1759, 1198, - 1759, 1199, 1200, 1157, 1156, 1157, 1759, 1759, 1759, 1204, - 1148, 1164, 1759, 1202, 1153, 1152, 1154, 1165, 1212, 1163, - 1759, 1172, 1215, 1759, 1759, 1221, 1226, 1231, 1236, 1241, - - 1246, 1251, 1254, 1228, 1233, 1235, 1248 + 1764, 1765, 32, 1760, 141, 0, 201, 1765, 206, 88, + 11, 213, 1765, 1742, 114, 25, 2, 6, 1765, 1765, + 73, 11, 17, 1765, 1765, 1765, 104, 1748, 1703, 0, + 1740, 107, 1755, 217, 247, 1765, 1699, 185, 1698, 1704, + 93, 58, 1696, 91, 211, 195, 14, 273, 195, 1695, + 181, 275, 202, 209, 76, 68, 188, 1704, 232, 219, + 296, 284, 207, 1687, 230, 287, 324, 305, 1706, 0, + 339, 359, 367, 374, 379, 1765, 0, 1765, 301, 344, + 295, 336, 196, 348, 350, 292, 1765, 1703, 1742, 1765, + + 355, 1765, 395, 1731, 331, 1689, 1699, 351, 367, 1694, + 363, 370, 373, 379, 241, 1737, 0, 446, 375, 1681, + 1683, 1679, 1687, 363, 1683, 1672, 1673, 76, 1689, 1672, + 1681, 1681, 322, 1672, 367, 1673, 1671, 359, 1717, 1721, + 1663, 1714, 1656, 1679, 1676, 1676, 1670, 349, 1663, 1656, + 1661, 1655, 381, 1666, 1659, 1650, 1649, 1663, 362, 1649, + 381, 1665, 266, 442, 1652, 390, 1663, 1660, 1661, 1659, + 417, 1641, 1643, 418, 1635, 1652, 1644, 0, 392, 428, + 441, 401, 445, 448, 1643, 1765, 0, 1686, 454, 1633, + 1636, 444, 450, 1644, 457, 1687, 460, 1686, 454, 1685, + + 1765, 498, 1684, 482, 1645, 1625, 1641, 1638, 1637, 1628, + 75, 1677, 1671, 1637, 1616, 1624, 1619, 1633, 1629, 1617, + 1629, 1629, 1620, 1604, 1608, 1621, 1623, 1620, 1612, 1602, + 1620, 1765, 1615, 1618, 1599, 1598, 1648, 1597, 1607, 1610, + 453, 1606, 1594, 1605, 1641, 1588, 1644, 1581, 1596, 505, + 1586, 1602, 1583, 1582, 1588, 1579, 1578, 1585, 1587, 1632, + 1590, 1589, 1583, 470, 1590, 1585, 1577, 1567, 1582, 1581, + 1581, 1562, 1578, 1564, 1570, 1577, 1565, 521, 1558, 1572, + 1613, 1574, 468, 1565, 485, 1765, 1765, 492, 1765, 1765, + 1552, 0, 479, 470, 1554, 533, 505, 1608, 1561, 501, + + 1765, 1606, 1765, 1600, 551, 1765, 500, 1542, 1598, 1544, + 1550, 1600, 1557, 1556, 491, 1765, 1554, 1596, 1551, 1548, + 540, 1554, 1592, 1586, 1541, 1536, 1533, 1582, 1541, 1530, + 1546, 1578, 1526, 548, 1540, 1525, 1538, 1525, 1535, 1530, + 1537, 1532, 1528, 372, 1526, 1529, 1524, 1520, 1568, 511, + 1562, 1765, 1561, 1513, 1512, 1511, 1504, 1506, 1510, 1499, + 1512, 475, 1557, 1512, 1509, 1513, 1765, 1511, 1500, 1500, + 1512, 521, 1487, 1488, 1509, 531, 1491, 1540, 1502, 1501, + 1487, 1499, 1498, 1497, 1496, 504, 1537, 1536, 1765, 1480, + 1479, 574, 1492, 1765, 1765, 1491, 0, 1480, 1472, 522, + + 1477, 1528, 1527, 1485, 1525, 1765, 1473, 1523, 1765, 556, + 602, 529, 1522, 1478, 1474, 1462, 1765, 1467, 1477, 1476, + 1463, 1462, 1765, 1464, 1461, 190, 1459, 1461, 1765, 1469, + 1466, 1451, 1464, 1459, 581, 1466, 1454, 1447, 1496, 1765, + 1445, 1461, 1493, 1456, 1453, 1454, 1456, 1488, 1441, 1436, + 1435, 1484, 1430, 1445, 1423, 1430, 1435, 1483, 1765, 1430, + 1426, 1424, 1433, 1427, 1434, 1418, 1418, 1428, 1431, 1420, + 1415, 1765, 1470, 1765, 1414, 1425, 1462, 1409, 1414, 1423, + 1417, 1411, 1420, 1460, 1454, 1418, 1401, 1401, 1396, 1416, + 1398, 1397, 1405, 1409, 1392, 1448, 1390, 1404, 1393, 1765, + + 1765, 1393, 1391, 1765, 1402, 1436, 1398, 0, 1382, 1399, + 1437, 1387, 1765, 1765, 1384, 1765, 1390, 1765, 550, 560, + 583, 1765, 1387, 1375, 1426, 1373, 1372, 1371, 1378, 1371, + 1383, 1382, 1382, 1370, 1411, 1378, 1370, 1413, 1359, 1375, + 1374, 1765, 1359, 1356, 1412, 1369, 1361, 1367, 1358, 1366, + 1351, 1367, 1349, 1363, 1361, 1344, 1338, 1343, 1358, 1355, + 1356, 1353, 1394, 1351, 1765, 1337, 1339, 1348, 1346, 1383, + 1382, 1335, 563, 1344, 1327, 1328, 1325, 1765, 1339, 1318, + 1339, 1336, 1328, 1371, 1325, 1332, 1368, 1765, 1315, 1329, + 1313, 1327, 1330, 1311, 1361, 1360, 1307, 1358, 1357, 1765, + + 14, 1319, 1319, 1317, 1300, 1305, 1307, 1765, 1313, 1303, + 1765, 1348, 1296, 1351, 566, 582, 550, 1301, 1344, 557, + 1348, 1342, 1341, 1340, 1294, 1284, 1337, 1290, 1300, 1334, + 1297, 1291, 1278, 1286, 1329, 1333, 1290, 1289, 1765, 1290, + 1283, 1272, 1285, 1288, 1283, 1284, 1281, 1280, 1283, 1278, + 1319, 1318, 1268, 1258, 556, 1315, 1765, 1314, 1263, 1255, + 1256, 1305, 1268, 1255, 1266, 1765, 1254, 1263, 1262, 1262, + 1302, 1245, 1254, 1247, 1258, 1235, 1239, 1290, 1254, 1236, + 1246, 1286, 1285, 1284, 1231, 1282, 579, 581, 1224, 1234, + 578, 1765, 1284, 1230, 1240, 1240, 1223, 1228, 1232, 1222, + + 1234, 1237, 1274, 1765, 1268, 600, 1221, 1229, 1228, 1223, + 1219, 1226, 1765, 1209, 1212, 1208, 1225, 1220, 1208, 1204, + 5, 9, 129, 198, 229, 276, 308, 1765, 388, 398, + 410, 491, 523, 584, 541, 557, 572, 560, 630, 574, + 578, 1765, 1765, 590, 595, 600, 588, 1765, 1765, 608, + 595, 589, 594, 612, 599, 647, 600, 650, 602, 658, + 1765, 605, 609, 611, 605, 663, 618, 608, 609, 605, + 618, 629, 613, 631, 626, 627, 621, 623, 624, 624, + 626, 679, 638, 643, 620, 1765, 645, 635, 680, 640, + 630, 645, 646, 633, 647, 1765, 666, 674, 654, 644, + + 691, 656, 660, 699, 654, 649, 650, 646, 655, 650, + 706, 665, 656, 1765, 658, 669, 654, 670, 664, 709, + 677, 662, 663, 1765, 682, 665, 722, 667, 1765, 686, + 666, 684, 723, 683, 679, 674, 692, 691, 692, 678, + 693, 685, 692, 682, 700, 685, 1765, 693, 699, 694, + 745, 1765, 696, 701, 743, 696, 708, 703, 707, 705, + 703, 705, 757, 703, 703, 760, 706, 1765, 705, 713, + 711, 716, 728, 712, 717, 727, 728, 733, 772, 731, + 747, 752, 726, 736, 728, 780, 725, 1765, 732, 737, + 744, 785, 786, 735, 1765, 731, 734, 733, 753, 750, + + 755, 756, 742, 750, 759, 739, 760, 800, 1765, 755, + 804, 805, 767, 769, 757, 754, 761, 770, 813, 762, + 760, 762, 779, 818, 770, 769, 775, 773, 771, 824, + 825, 821, 781, 1765, 786, 779, 770, 789, 777, 787, + 784, 789, 785, 798, 1765, 781, 782, 1765, 783, 781, + 800, 801, 798, 783, 804, 804, 788, 793, 811, 1765, + 801, 834, 825, 797, 856, 819, 1765, 802, 817, 809, + 813, 1765, 1765, 823, 858, 807, 860, 809, 867, 812, + 823, 815, 821, 817, 835, 836, 1765, 834, 1765, 837, + 1765, 822, 841, 831, 824, 837, 879, 845, 1765, 837, + + 887, 830, 889, 1765, 890, 834, 840, 847, 889, 1765, + 1765, 839, 839, 842, 856, 861, 844, 901, 860, 861, + 862, 900, 854, 907, 857, 909, 858, 911, 912, 854, + 914, 875, 916, 860, 872, 877, 863, 893, 922, 882, + 1765, 874, 925, 874, 870, 886, 891, 873, 931, 886, + 891, 1765, 892, 885, 894, 895, 892, 882, 884, 941, + 890, 943, 888, 945, 941, 884, 901, 891, 951, 1765, + 906, 1765, 1765, 911, 903, 913, 899, 901, 960, 961, + 907, 917, 964, 1765, 914, 914, 917, 919, 970, 913, + 1765, 934, 1765, 918, 1765, 1765, 932, 1765, 926, 1765, + + 976, 927, 978, 979, 961, 1765, 939, 940, 1765, 928, + 927, 930, 930, 931, 927, 1765, 949, 935, 936, 951, + 951, 954, 954, 951, 956, 1765, 948, 1765, 958, 1765, + 955, 960, 962, 959, 1001, 1765, 952, 953, 953, 959, + 958, 969, 1765, 1765, 1008, 957, 1765, 958, 958, 960, + 966, 1765, 968, 970, 973, 1022, 985, 1765, 982, 1765, + 979, 1765, 1002, 1022, 1028, 1029, 973, 1031, 1032, 987, + 981, 1035, 1036, 1032, 997, 993, 1035, 985, 990, 1043, + 1001, 1045, 1005, 1047, 1010, 999, 993, 1009, 1009, 1054, + 998, 1015, 1014, 998, 1054, 1055, 1004, 1057, 1022, 1023, + + 1023, 1010, 1765, 1021, 1068, 1028, 1041, 1028, 1765, 1765, + 1072, 1765, 1765, 1021, 1032, 1765, 1765, 1022, 1071, 1016, + 1021, 1079, 1029, 1765, 1081, 1036, 1765, 1083, 1765, 1028, + 1043, 1031, 1046, 1050, 1765, 1084, 1052, 1045, 1054, 1036, + 1043, 1095, 1056, 1055, 1100, 1101, 1102, 1053, 1765, 1104, + 1105, 1052, 1765, 1056, 1108, 1054, 1053, 1111, 1066, 1765, + 1108, 1765, 1070, 1765, 1073, 1116, 1071, 1118, 1079, 1062, + 1064, 1061, 1077, 1078, 1087, 1765, 1077, 1127, 1765, 1765, + 1765, 1123, 1765, 1765, 1088, 1125, 1765, 1079, 1086, 1765, + 1083, 1088, 1135, 1080, 1765, 1095, 1765, 1096, 1086, 1098, + + 1141, 1085, 1093, 1094, 1107, 1765, 1106, 1096, 1095, 1109, + 1100, 1109, 1111, 1765, 1153, 1098, 1155, 1115, 1157, 1765, + 1153, 1117, 1118, 1105, 1100, 1163, 1122, 1123, 1124, 1167, + 1126, 1765, 1169, 1765, 1132, 1765, 1114, 1172, 1173, 1118, + 1135, 1765, 1121, 1121, 1123, 1765, 1128, 1765, 1123, 1135, + 1765, 1765, 1140, 1134, 1138, 1129, 1181, 1130, 1146, 1139, + 1134, 1149, 1140, 1147, 1134, 1149, 1196, 1155, 1198, 1143, + 1159, 1150, 1164, 1160, 1765, 1204, 1765, 1205, 1206, 1163, + 1162, 1163, 1765, 1765, 1765, 1210, 1154, 1170, 1765, 1208, + 1159, 1158, 1160, 1171, 1218, 1169, 1765, 1178, 1221, 1765, + + 1765, 1227, 1232, 1237, 1242, 1247, 1252, 1257, 1260, 1234, + 1239, 1241, 1254 } ; -static yyconst flex_int16_t yy_def[1408] = +static const flex_int16_t yy_def[1414] = { 0, - 1396, 1396, 1397, 1397, 1396, 1396, 1396, 1396, 1396, 1396, - 1395, 1395, 1395, 1395, 1395, 1398, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1399, - 1395, 1395, 1395, 1400, 15, 1395, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1401, 45, 45, + 1402, 1402, 1403, 1403, 1402, 1402, 1402, 1402, 1402, 1402, + 1401, 1401, 1401, 1401, 1401, 1404, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1405, + 1401, 1401, 1401, 1406, 15, 1401, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, - 1395, 1395, 1395, 1395, 1395, 1395, 1402, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1399, 1395, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, + 1401, 1401, 1401, 1401, 1401, 1401, 1408, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1405, 1401, - 1400, 1395, 1395, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1403, 45, 1401, 45, 45, + 1406, 1401, 1401, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 1409, 45, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 1402, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1404, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 1403, 1395, + 45, 45, 45, 45, 45, 45, 45, 1408, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1410, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, - 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 1401, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1405, - 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, + 45, 45, 45, 45, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1411, 45, 45, 45, 45, 45, 45, 45, 45, - 1395, 45, 1401, 1395, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 1395, 45, 45, 45, 45, 45, 45, + 1401, 45, 1401, 45, 1407, 1401, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 1395, 45, 45, 45, 45, 45, 45, + 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, - 1395, 1395, 1395, 1406, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 1401, 45, + 45, 45, 45, 1401, 1401, 1401, 1412, 45, 45, 45, - 45, 45, 1395, 45, 45, 1395, 45, 1401, 45, 45, - 45, 45, 45, 1395, 45, 45, 45, 45, 45, 1395, - 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 1401, 45, 45, 1401, 45, + 1407, 45, 45, 45, 45, 45, 1401, 45, 45, 45, + 45, 45, 1401, 45, 45, 45, 45, 45, 1401, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1395, 45, 1395, + 45, 45, 45, 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 1401, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1395, 1395, 45, 45, 1395, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 1401, - 45, 45, 1395, 1407, 45, 45, 45, 45, 1395, 1395, - 45, 1395, 45, 1395, 45, 45, 45, 1395, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, + 1401, 45, 45, 1401, 45, 45, 1401, 1413, 45, 45, + 45, 45, 1401, 1401, 45, 1401, 45, 1401, 45, 45, + 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, + 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 1395, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 1395, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1401, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1401, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 1401, - 45, 45, 1395, 45, 45, 1395, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1401, 45, 45, + 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 1395, 45, 45, 45, 45, 45, 45, 45, 45, 1395, + 45, 45, 45, 45, 45, 45, 1401, 45, 45, 45, + 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, + 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, + 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, + 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 1395, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1395, 1395, 45, 45, 45, - 45, 1395, 1395, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, + 45, 1401, 1401, 45, 45, 45, 45, 1401, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, + 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, - 45, 45, 1395, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 1395, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 1395, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 1401, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 1395, 45, 45, 45, 45, 45, 45, 1395, 45, + 45, 45, 45, 45, 45, 45, 1401, 45, 45, 45, + 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1401, 45, 45, + 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, - 45, 45, 1395, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, - 45, 1395, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 1395, 45, 45, 45, 45, 45, 45, - 1395, 45, 45, 45, 45, 1395, 1395, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 1395, 45, 1395, 45, 1395, 45, 45, 45, 45, 45, - 45, 45, 1395, 45, 45, 45, 45, 1395, 45, 45, - - 45, 45, 45, 1395, 1395, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 1401, 45, 45, 1401, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 1401, + 45, 45, 45, 45, 45, 45, 1401, 45, 45, 45, + 45, 1401, 1401, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 1401, 45, 1401, 45, + 1401, 45, 45, 45, 45, 45, 45, 45, 1401, 45, + + 45, 45, 45, 1401, 45, 45, 45, 45, 45, 1401, + 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 1395, 45, 1395, 1395, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, - 45, 45, 45, 45, 1395, 45, 1395, 45, 1395, 1395, - 45, 1395, 45, 1395, 45, 45, 45, 45, 45, 1395, - - 45, 45, 1395, 45, 45, 45, 45, 45, 45, 1395, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, - 45, 1395, 45, 1395, 45, 45, 45, 45, 45, 1395, - 45, 45, 45, 45, 45, 45, 1395, 1395, 45, 45, - 1395, 45, 45, 45, 45, 1395, 45, 45, 45, 45, - 45, 1395, 45, 1395, 45, 1395, 45, 45, 45, 45, + 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 1401, + 45, 1401, 1401, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, + 1401, 45, 1401, 45, 1401, 1401, 45, 1401, 45, 1401, + + 45, 45, 45, 45, 45, 1401, 45, 45, 1401, 45, + 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 1401, 45, 1401, 45, 1401, + 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, + 45, 45, 1401, 1401, 45, 45, 1401, 45, 45, 45, + 45, 1401, 45, 45, 45, 45, 45, 1401, 45, 1401, + 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, - 45, 45, 1395, 1395, 45, 1395, 1395, 45, 45, 1395, - 1395, 45, 45, 45, 45, 45, 45, 1395, 45, 45, - 1395, 45, 1395, 45, 45, 45, 45, 45, 1395, 45, + 45, 45, 1401, 45, 45, 45, 45, 45, 1401, 1401, + 45, 1401, 1401, 45, 45, 1401, 1401, 45, 45, 45, + 45, 45, 45, 1401, 45, 45, 1401, 45, 1401, 45, + 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 1401, 45, + 45, 45, 1401, 45, 45, 45, 45, 45, 45, 1401, + 45, 1401, 45, 1401, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 1401, 45, 45, 1401, 1401, + 1401, 45, 1401, 1401, 45, 45, 1401, 45, 45, 1401, + 45, 45, 45, 45, 1401, 45, 1401, 45, 45, 45, + + 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, + 45, 45, 45, 1401, 45, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 1395, 45, 45, 45, 1395, 45, 45, 45, - 45, 45, 45, 1395, 45, 1395, 45, 1395, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, - 45, 45, 1395, 1395, 1395, 45, 1395, 1395, 45, 45, - 1395, 45, 45, 1395, 45, 45, 45, 45, 1395, 45, - 1395, 45, 45, 45, 45, 45, 45, 45, 45, 1395, - - 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, - 45, 45, 45, 1395, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1395, 45, 1395, 45, 1395, - 45, 45, 45, 45, 45, 1395, 45, 45, 45, 1395, - 45, 1395, 45, 45, 1395, 1395, 45, 45, 45, 45, + 45, 1401, 45, 1401, 45, 1401, 45, 45, 45, 45, + 45, 1401, 45, 45, 45, 1401, 45, 1401, 45, 45, + 1401, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, - 1395, 45, 45, 45, 45, 45, 1395, 1395, 1395, 45, - 45, 45, 1395, 45, 45, 45, 45, 45, 45, 45, - 1395, 45, 45, 1395, 0, 1395, 1395, 1395, 1395, 1395, + 45, 45, 45, 45, 1401, 45, 1401, 45, 45, 45, + 45, 45, 1401, 1401, 1401, 45, 45, 45, 1401, 45, + 45, 45, 45, 45, 45, 45, 1401, 45, 45, 1401, - 1395, 1395, 1395, 1395, 1395, 1395, 1395 + 0, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401 } ; -static yyconst flex_uint16_t yy_nxt[1831] = +static const flex_int16_t yy_nxt[1837] = { 0, - 1395, 13, 14, 13, 1395, 15, 16, 1395, 17, 18, - 19, 20, 21, 22, 22, 22, 23, 24, 86, 686, - 37, 14, 37, 87, 25, 26, 38, 1395, 687, 27, + 1401, 13, 14, 13, 1401, 15, 16, 1401, 17, 18, + 19, 20, 21, 22, 22, 22, 23, 24, 86, 692, + 37, 14, 37, 87, 25, 26, 38, 1401, 693, 27, 37, 14, 37, 42, 28, 42, 38, 92, 93, 29, 115, 30, 13, 14, 13, 91, 92, 25, 31, 93, - 13, 14, 13, 13, 14, 13, 32, 40, 810, 13, - 14, 13, 33, 40, 115, 92, 93, 811, 91, 34, + 13, 14, 13, 13, 14, 13, 32, 40, 812, 13, + 14, 13, 33, 40, 115, 92, 93, 813, 91, 34, 35, 13, 14, 13, 95, 15, 16, 96, 17, 18, 19, 20, 21, 22, 22, 22, 23, 24, 13, 14, 13, 109, 39, 91, 25, 26, 13, 14, 13, 27, 39, 85, 85, 85, 28, 42, 41, 42, 42, 29, 42, 30, 83, 108, 41, 111, 94, 25, 31, 109, - 812, 162, 89, 137, 89, 163, 32, 90, 90, 90, - 257, 138, 33, 214, 215, 83, 108, 258, 111, 34, + 215, 216, 89, 136, 89, 138, 32, 90, 90, 90, + 137, 314, 33, 139, 814, 83, 108, 315, 111, 34, 35, 44, 44, 44, 45, 45, 46, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 45, 45, 45, 48, 45, 49, 50, 45, 51, 45, 52, 53, @@ -1038,103 +1250,103 @@ static yyconst flex_uint16_t yy_nxt[1831] = 74, 75, 76, 77, 78, 79, 57, 45, 45, 45, 45, 45, 81, 105, 82, 82, 82, 81, 114, 84, 84, 84, 102, 105, 81, 83, 84, 84, 84, 108, - 83, 180, 122, 112, 139, 123, 813, 83, 124, 105, - 125, 114, 126, 113, 140, 180, 141, 132, 83, 119, - 158, 178, 108, 83, 159, 120, 112, 103, 133, 180, - 83, 45, 147, 135, 160, 198, 148, 45, 134, 45, - 45, 113, 45, 183, 45, 45, 45, 178, 117, 143, - 144, 45, 45, 145, 45, 45, 149, 814, 198, 146, + 83, 181, 122, 112, 140, 123, 533, 83, 124, 105, + 125, 114, 126, 113, 141, 815, 142, 132, 83, 119, + 159, 534, 108, 83, 160, 120, 112, 103, 133, 181, + 83, 45, 148, 135, 161, 199, 149, 45, 134, 45, + 45, 113, 45, 163, 45, 45, 45, 164, 117, 144, + 145, 45, 45, 146, 45, 45, 150, 816, 199, 147, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 90, 90, 90, 45, 127, 299, - 111, 45, 128, 179, 383, 129, 130, 102, 114, 45, - 164, 397, 153, 45, 165, 45, 118, 166, 131, 150, - 154, 151, 155, 152, 167, 168, 112, 156, 157, 179, - 169, 173, 85, 85, 85, 285, 113, 90, 90, 90, - 397, 174, 103, 83, 178, 368, 175, 188, 369, 170, - 81, 171, 82, 82, 82, 89, 179, 89, 285, 191, + 45, 45, 45, 45, 90, 90, 90, 45, 127, 817, + 111, 45, 128, 179, 259, 129, 130, 181, 114, 45, + 165, 260, 154, 45, 166, 45, 118, 167, 131, 151, + 155, 152, 156, 153, 168, 169, 112, 157, 158, 179, + 170, 174, 85, 85, 85, 184, 113, 90, 90, 90, + 102, 175, 818, 83, 180, 221, 176, 222, 189, 171, + 81, 172, 82, 82, 82, 89, 179, 89, 180, 192, 90, 90, 90, 83, 113, 81, 83, 84, 84, 84, - 181, 172, 85, 85, 85, 188, 192, 101, 83, 194, - - 223, 195, 182, 83, 101, 191, 83, 196, 208, 220, - 197, 221, 226, 188, 194, 227, 224, 209, 210, 228, - 238, 83, 283, 192, 239, 423, 83, 194, 195, 424, - 202, 283, 101, 250, 251, 196, 101, 197, 285, 292, - 101, 203, 194, 253, 244, 195, 254, 255, 101, 259, - 283, 197, 101, 284, 101, 186, 201, 201, 201, 286, - 388, 288, 292, 201, 201, 201, 201, 201, 201, 269, - 284, 295, 276, 270, 296, 302, 341, 271, 279, 284, - 298, 300, 260, 261, 262, 292, 201, 201, 201, 201, - 201, 201, 815, 263, 352, 264, 287, 265, 266, 295, - - 267, 296, 302, 298, 300, 303, 303, 303, 305, 391, - 389, 391, 303, 303, 303, 303, 303, 303, 312, 395, - 402, 405, 399, 400, 313, 397, 529, 342, 353, 396, - 343, 401, 391, 468, 392, 303, 303, 303, 303, 303, - 303, 530, 354, 402, 449, 450, 417, 507, 436, 405, - 408, 408, 408, 437, 409, 456, 660, 408, 408, 408, - 408, 408, 408, 418, 478, 457, 483, 507, 479, 494, - 484, 500, 495, 538, 610, 507, 501, 611, 539, 699, - 408, 408, 408, 408, 408, 408, 515, 606, 516, 469, - 701, 700, 612, 661, 740, 517, 705, 741, 816, 438, - - 702, 610, 706, 771, 439, 611, 792, 699, 817, 818, - 772, 773, 774, 515, 700, 516, 45, 45, 45, 775, - 819, 820, 821, 45, 45, 45, 45, 45, 45, 778, - 822, 823, 824, 825, 792, 779, 826, 827, 828, 829, - 830, 831, 832, 833, 836, 837, 45, 45, 45, 45, - 45, 45, 834, 838, 839, 840, 835, 841, 842, 843, - 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, + 180, 173, 85, 85, 85, 103, 189, 193, 83, 195, + + 101, 196, 182, 83, 183, 192, 83, 101, 197, 209, + 198, 240, 189, 228, 224, 241, 229, 195, 210, 211, + 230, 83, 252, 253, 193, 285, 83, 195, 196, 203, + 225, 453, 454, 819, 285, 101, 197, 198, 255, 101, + 204, 256, 257, 101, 820, 195, 271, 246, 196, 198, + 272, 101, 261, 285, 273, 101, 286, 101, 187, 202, + 202, 202, 288, 344, 821, 287, 202, 202, 202, 202, + 202, 202, 287, 286, 294, 278, 281, 297, 391, 298, + 472, 300, 286, 304, 302, 262, 263, 264, 287, 202, + 202, 202, 202, 202, 202, 290, 265, 294, 266, 289, + + 267, 268, 294, 269, 300, 297, 298, 302, 400, 394, + 304, 305, 305, 305, 345, 355, 394, 346, 305, 305, + 305, 305, 305, 305, 371, 307, 301, 372, 392, 405, + 398, 386, 394, 408, 420, 822, 473, 400, 400, 395, + 399, 305, 305, 305, 305, 305, 305, 402, 403, 356, + 426, 421, 405, 440, 427, 511, 404, 498, 441, 460, + 499, 408, 511, 357, 411, 411, 411, 412, 666, 461, + 823, 411, 411, 411, 411, 411, 411, 482, 487, 504, + 615, 483, 488, 511, 505, 519, 542, 520, 611, 824, + 521, 543, 616, 617, 411, 411, 411, 411, 411, 411, + + 705, 707, 711, 825, 442, 667, 706, 615, 712, 443, + 746, 708, 519, 747, 520, 45, 45, 45, 826, 827, + 616, 828, 45, 45, 45, 45, 45, 45, 705, 706, + 777, 779, 780, 798, 784, 829, 830, 778, 831, 781, + 785, 832, 833, 834, 835, 45, 45, 45, 45, 45, + 45, 836, 837, 838, 839, 840, 842, 843, 844, 841, + 845, 798, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, - 894, 895, 896, 897, 898, 876, 899, 900, 875, 901, - 902, 903, 906, 907, 908, 909, 904, 910, 911, 912, - 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, - 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, - 923, 934, 935, 936, 937, 938, 939, 940, 941, 942, + 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, + 904, 882, 905, 906, 881, 907, 908, 909, 912, 913, + 914, 915, 910, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 930, 931, 932, 933, + 934, 935, 936, 937, 938, 939, 929, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, - 953, 954, 955, 956, 958, 957, 959, 905, 960, 961, - 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 964, 963, 965, 911, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, - 982, 956, 957, 983, 985, 987, 988, 989, 984, 990, - 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 982, 983, 984, 985, 986, 987, 988, 962, 963, 989, + 991, 993, 994, 995, 990, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 1024, 1025, 1026, 986, 1027, 1028, 1029, - 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, + 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 1031, 1032, 992, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, - 1050, 1051, 1052, 1053, 1054, 1032, 1055, 1056, 1057, 1058, - 1059, 1033, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, + 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, + 1060, 1038, 1061, 1062, 1063, 1064, 1065, 1039, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, - 1078, 1079, 1080, 1081, 1082, 1084, 1085, 1086, 1087, 1088, - 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, - 1099, 1100, 1101, 1102, 1103, 1105, 1106, 1107, 1108, 1109, - 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, - 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1129, 1099, 1127, - 1130, 1131, 1132, 1133, 1134, 1083, 1135, 1128, 1136, 1137, - 1138, 1139, 1140, 1141, 1142, 1143, 1104, 1144, 1145, 1146, - 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1156, 1157, - 1158, 1159, 1155, 1160, 1161, 1162, 1163, 1164, 1165, 1166, + 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, + 1088, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, + 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, + 1109, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, + 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, + 1130, 1131, 1132, 1135, 1105, 1133, 1136, 1137, 1138, 1139, + 1140, 1089, 1141, 1134, 1142, 1143, 1144, 1145, 1146, 1147, + 1148, 1149, 1110, 1150, 1151, 1152, 1153, 1154, 1155, 1156, + 1157, 1158, 1159, 1160, 1162, 1163, 1164, 1165, 1161, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, - 1177, 1178, 1157, 1179, 1180, 1181, 1182, 1183, 1184, 1185, + 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1163, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, - 1216, 1217, 1218, 1220, 1221, 1222, 1223, 1224, 1225, 1226, - 1227, 1228, 1201, 1229, 1230, 1231, 1232, 1233, 1234, 1235, + 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1226, + 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1207, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, - 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1245, 1219, 1273, + 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, - 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, + 1276, 1277, 1278, 1251, 1225, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, @@ -1147,92 +1359,93 @@ static yyconst flex_uint16_t yy_nxt[1831] = 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, - 1394, 12, 12, 12, 12, 12, 36, 36, 36, 36, - 36, 80, 290, 80, 80, 80, 99, 394, 99, 504, - 99, 101, 101, 101, 101, 101, 116, 116, 116, 116, - 116, 177, 101, 177, 177, 177, 199, 199, 199, 809, - 808, 807, 806, 805, 804, 803, 802, 801, 800, 799, - 798, 797, 796, 795, 794, 793, 791, 790, 789, 788, - 787, 786, 785, 784, 783, 782, 781, 780, 777, 776, - 770, 769, 768, 767, 766, 765, 764, 763, 762, 761, - - 760, 759, 758, 757, 756, 755, 754, 753, 752, 751, - 750, 749, 748, 747, 746, 745, 744, 743, 742, 739, - 738, 737, 736, 735, 734, 733, 732, 731, 730, 729, - 728, 727, 726, 725, 724, 723, 722, 721, 720, 719, - 718, 717, 716, 715, 714, 713, 712, 711, 710, 709, - 708, 707, 704, 703, 698, 697, 696, 695, 694, 693, - 692, 691, 690, 689, 688, 685, 684, 683, 682, 681, - 680, 679, 678, 677, 676, 675, 674, 673, 672, 671, - 670, 669, 668, 667, 666, 665, 664, 663, 662, 659, - 658, 657, 656, 655, 654, 653, 652, 651, 650, 649, - - 648, 647, 646, 645, 644, 643, 642, 641, 640, 639, - 638, 637, 636, 635, 634, 633, 632, 631, 630, 629, - 628, 627, 626, 625, 624, 623, 622, 621, 620, 619, - 618, 617, 616, 615, 614, 613, 609, 608, 607, 606, - 605, 604, 603, 602, 601, 600, 599, 598, 597, 596, - 595, 594, 593, 592, 591, 590, 589, 588, 587, 586, - 585, 584, 583, 582, 581, 580, 579, 578, 577, 576, - 575, 574, 573, 572, 571, 570, 569, 568, 567, 566, - 565, 564, 563, 562, 561, 560, 559, 558, 557, 556, - 555, 554, 553, 552, 551, 550, 549, 548, 547, 546, - - 545, 544, 543, 542, 541, 540, 537, 536, 535, 534, - 533, 532, 531, 528, 527, 526, 525, 524, 523, 522, - 521, 520, 519, 518, 514, 513, 512, 511, 510, 509, - 508, 506, 505, 503, 502, 499, 498, 497, 496, 493, - 492, 491, 490, 489, 488, 487, 486, 485, 482, 481, - 480, 477, 476, 475, 474, 473, 472, 471, 470, 467, - 466, 465, 464, 463, 462, 461, 460, 459, 458, 455, - 454, 453, 452, 451, 448, 447, 446, 445, 444, 443, - 442, 441, 440, 435, 434, 433, 432, 431, 430, 429, - 428, 427, 426, 425, 422, 421, 420, 419, 416, 415, - - 414, 413, 412, 411, 410, 407, 406, 404, 403, 398, - 393, 390, 387, 386, 385, 384, 382, 381, 380, 379, - 378, 377, 376, 375, 374, 373, 372, 371, 370, 367, - 366, 365, 364, 363, 362, 361, 360, 359, 358, 357, - 356, 355, 351, 350, 349, 348, 347, 346, 345, 344, - 340, 339, 338, 337, 336, 335, 334, 333, 332, 331, - 330, 329, 328, 327, 326, 325, 324, 323, 322, 321, - 320, 319, 318, 317, 316, 315, 314, 311, 310, 309, - 308, 307, 306, 304, 200, 301, 299, 297, 294, 293, - 291, 289, 282, 281, 280, 278, 277, 275, 274, 273, - - 272, 268, 256, 252, 249, 248, 247, 246, 245, 243, - 242, 241, 240, 237, 236, 235, 234, 233, 232, 231, - 230, 229, 225, 222, 219, 218, 217, 216, 213, 212, - 211, 207, 206, 205, 204, 200, 193, 190, 189, 187, - 185, 184, 176, 161, 142, 136, 121, 110, 107, 106, - 104, 43, 100, 98, 97, 88, 43, 1395, 11, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395 + 1394, 1395, 1396, 1397, 1398, 1399, 1400, 12, 12, 12, + 12, 12, 36, 36, 36, 36, 36, 80, 292, 80, + 80, 80, 99, 397, 99, 508, 99, 101, 101, 101, + 101, 101, 116, 116, 116, 116, 116, 178, 101, 178, + 178, 178, 200, 200, 200, 811, 810, 809, 808, 807, + 806, 805, 804, 803, 802, 801, 800, 799, 797, 796, + 795, 794, 793, 792, 791, 790, 789, 788, 787, 786, + 783, 782, 776, 775, 774, 773, 772, 771, 770, 769, + + 768, 767, 766, 765, 764, 763, 762, 761, 760, 759, + 758, 757, 756, 755, 754, 753, 752, 751, 750, 749, + 748, 745, 744, 743, 742, 741, 740, 739, 738, 737, + 736, 735, 734, 733, 732, 731, 730, 729, 728, 727, + 726, 725, 724, 723, 722, 721, 720, 719, 718, 717, + 716, 715, 714, 713, 710, 709, 704, 703, 702, 701, + 700, 699, 698, 697, 696, 695, 694, 691, 690, 689, + 688, 687, 686, 685, 684, 683, 682, 681, 680, 679, + 678, 677, 676, 675, 674, 673, 672, 671, 670, 669, + 668, 665, 664, 663, 662, 661, 660, 659, 658, 657, + + 656, 655, 654, 653, 652, 651, 650, 649, 648, 647, + 646, 645, 644, 643, 642, 641, 640, 639, 638, 637, + 636, 635, 634, 633, 632, 631, 630, 629, 628, 627, + 626, 625, 624, 623, 622, 621, 620, 619, 618, 614, + 613, 612, 611, 610, 609, 608, 607, 606, 605, 604, + 603, 602, 601, 600, 599, 598, 597, 596, 595, 594, + 593, 592, 591, 590, 589, 588, 587, 586, 585, 584, + 583, 582, 581, 580, 579, 578, 577, 576, 575, 574, + 573, 572, 571, 570, 569, 568, 567, 566, 565, 564, + 563, 562, 561, 560, 559, 558, 557, 556, 555, 554, + + 553, 552, 551, 550, 549, 548, 547, 546, 545, 544, + 541, 540, 539, 538, 537, 536, 535, 532, 531, 530, + 529, 528, 527, 526, 525, 524, 523, 522, 518, 517, + 516, 515, 514, 513, 512, 510, 509, 507, 506, 503, + 502, 501, 500, 497, 496, 495, 494, 493, 492, 491, + 490, 489, 486, 485, 484, 481, 480, 479, 478, 477, + 476, 475, 474, 471, 470, 469, 468, 467, 466, 465, + 464, 463, 462, 459, 458, 457, 456, 455, 452, 451, + 450, 449, 448, 447, 446, 445, 444, 439, 438, 437, + 436, 435, 434, 433, 432, 431, 430, 429, 428, 425, + + 424, 423, 422, 419, 418, 417, 416, 415, 414, 413, + 410, 409, 407, 406, 401, 396, 393, 390, 389, 388, + 387, 385, 384, 383, 382, 381, 380, 379, 378, 377, + 376, 375, 374, 373, 370, 369, 368, 367, 366, 365, + 364, 363, 362, 361, 360, 359, 358, 354, 353, 352, + 351, 350, 349, 348, 347, 343, 342, 341, 340, 339, + 338, 337, 336, 335, 334, 333, 332, 331, 330, 329, + 328, 327, 326, 325, 324, 323, 322, 321, 320, 319, + 318, 317, 316, 313, 312, 311, 310, 309, 308, 306, + 201, 303, 301, 299, 296, 295, 293, 291, 284, 283, + + 282, 280, 279, 277, 276, 275, 274, 270, 258, 254, + 251, 250, 249, 248, 247, 245, 244, 243, 242, 239, + 238, 237, 236, 235, 234, 233, 232, 231, 227, 226, + 223, 220, 219, 218, 217, 214, 213, 212, 208, 207, + 206, 205, 201, 194, 191, 190, 188, 186, 185, 177, + 162, 143, 121, 110, 107, 106, 104, 43, 100, 98, + 97, 88, 43, 1401, 11, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401 } ; -static yyconst flex_int16_t yy_chk[1831] = +static const flex_int16_t yy_chk[1837] = { 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 21, 596, - 3, 3, 3, 21, 1, 1, 3, 0, 596, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 21, 601, + 3, 3, 3, 21, 1, 1, 3, 0, 601, 1, 4, 4, 4, 13, 1, 13, 4, 27, 28, 1, 57, 1, 5, 5, 5, 26, 32, 1, 1, 33, - 6, 6, 6, 7, 7, 7, 1, 7, 719, 8, - 8, 8, 1, 8, 57, 27, 28, 720, 26, 1, + 6, 6, 6, 7, 7, 7, 1, 7, 721, 8, + 8, 8, 1, 8, 57, 27, 28, 722, 26, 1, 1, 2, 2, 2, 32, 2, 2, 33, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 52, 5, 31, 2, 2, 10, 10, 10, 2, 6, 20, 20, 20, 2, 37, 9, 37, 42, 2, 42, 2, 20, 51, 10, 54, 31, 2, 2, 52, - 721, 75, 25, 66, 25, 75, 2, 25, 25, 25, - 162, 66, 2, 128, 128, 20, 51, 162, 54, 2, + 128, 128, 25, 65, 25, 66, 2, 25, 25, 25, + 65, 211, 2, 66, 723, 20, 51, 211, 54, 2, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, @@ -1243,210 +1456,211 @@ static yyconst flex_int16_t yy_chk[1831] = 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 17, 48, 17, 17, 17, 19, 56, 19, 19, 19, 44, 59, 22, 17, 22, 22, 22, 64, - 19, 93, 61, 55, 67, 61, 723, 22, 61, 48, - 61, 56, 61, 55, 67, 96, 67, 63, 17, 59, - 73, 91, 64, 19, 73, 59, 55, 44, 63, 93, + 19, 93, 61, 55, 67, 61, 426, 22, 61, 48, + 61, 56, 61, 55, 67, 724, 67, 63, 17, 59, + 73, 426, 64, 19, 73, 59, 55, 44, 63, 93, 22, 45, 70, 64, 73, 115, 70, 45, 63, 45, - 45, 55, 45, 96, 45, 45, 45, 91, 58, 69, - 69, 45, 45, 69, 45, 58, 70, 724, 115, 69, + 45, 55, 45, 75, 45, 45, 45, 75, 58, 69, + 69, 45, 45, 69, 45, 58, 70, 725, 115, 69, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 58, 89, 89, 89, 58, 62, 276, - 71, 58, 62, 92, 276, 62, 62, 101, 78, 58, - 76, 292, 72, 58, 76, 58, 58, 76, 62, 71, - 72, 71, 72, 71, 76, 76, 77, 72, 72, 92, - 76, 78, 81, 81, 81, 180, 77, 90, 90, 90, - 292, 78, 101, 81, 94, 262, 78, 105, 262, 77, - 82, 77, 82, 82, 82, 83, 95, 83, 180, 108, + 45, 45, 45, 58, 89, 89, 89, 58, 62, 726, + 71, 58, 62, 91, 163, 62, 62, 96, 78, 58, + 76, 163, 72, 58, 76, 58, 58, 76, 62, 71, + 72, 71, 72, 71, 76, 76, 77, 72, 72, 91, + 76, 78, 81, 81, 81, 96, 77, 90, 90, 90, + 101, 78, 727, 81, 92, 133, 78, 133, 105, 77, + 82, 77, 82, 82, 82, 83, 94, 83, 95, 108, 83, 83, 83, 82, 77, 84, 81, 84, 84, 84, - 94, 77, 85, 85, 85, 105, 109, 103, 84, 111, - - 135, 112, 95, 85, 103, 108, 82, 113, 124, 133, - 114, 133, 137, 119, 152, 137, 135, 124, 124, 137, - 147, 84, 178, 109, 147, 319, 85, 111, 112, 319, - 119, 181, 103, 158, 158, 113, 103, 114, 183, 188, - 103, 119, 152, 160, 152, 170, 160, 160, 103, 163, - 178, 173, 103, 179, 103, 103, 118, 118, 118, 181, - 281, 183, 188, 118, 118, 118, 118, 118, 118, 165, - 182, 191, 170, 165, 192, 198, 239, 165, 173, 179, - 194, 196, 163, 163, 163, 203, 118, 118, 118, 118, - 118, 118, 725, 163, 248, 163, 182, 163, 163, 191, - - 163, 192, 198, 194, 196, 201, 201, 201, 203, 283, - 281, 286, 201, 201, 201, 201, 201, 201, 210, 291, - 295, 298, 294, 294, 210, 305, 423, 239, 248, 291, - 239, 294, 283, 359, 286, 201, 201, 201, 201, 201, - 201, 423, 248, 295, 341, 341, 313, 397, 331, 298, - 303, 303, 303, 331, 305, 347, 568, 303, 303, 303, - 303, 303, 303, 313, 369, 347, 373, 409, 369, 383, - 373, 389, 383, 432, 515, 397, 389, 516, 432, 610, - 303, 303, 303, 303, 303, 303, 407, 517, 407, 359, - 612, 611, 517, 568, 649, 409, 615, 649, 726, 331, - - 612, 515, 615, 681, 331, 516, 700, 610, 727, 728, - 681, 682, 682, 407, 611, 407, 408, 408, 408, 682, - 729, 730, 731, 408, 408, 408, 408, 408, 408, 685, - 732, 733, 734, 735, 700, 685, 738, 739, 740, 741, - 744, 745, 746, 747, 749, 750, 408, 408, 408, 408, - 408, 408, 748, 751, 752, 753, 748, 754, 756, 757, - 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 92, 77, 85, 85, 85, 101, 105, 109, 84, 111, + + 103, 112, 94, 85, 95, 108, 82, 103, 113, 124, + 114, 148, 119, 138, 135, 148, 138, 153, 124, 124, + 138, 84, 159, 159, 109, 179, 85, 111, 112, 119, + 135, 344, 344, 729, 182, 103, 113, 114, 161, 103, + 119, 161, 161, 103, 730, 153, 166, 153, 171, 174, + 166, 103, 164, 179, 166, 103, 180, 103, 103, 118, + 118, 118, 182, 241, 731, 181, 118, 118, 118, 118, + 118, 118, 184, 183, 189, 171, 174, 192, 283, 193, + 362, 195, 180, 199, 197, 164, 164, 164, 181, 118, + 118, 118, 118, 118, 118, 184, 164, 189, 164, 183, + + 164, 164, 204, 164, 195, 192, 193, 197, 294, 285, + 199, 202, 202, 202, 241, 250, 288, 241, 202, 202, + 202, 202, 202, 202, 264, 204, 278, 264, 283, 297, + 293, 278, 285, 300, 315, 732, 362, 294, 307, 288, + 293, 202, 202, 202, 202, 202, 202, 296, 296, 250, + 321, 315, 297, 334, 321, 400, 296, 386, 334, 350, + 386, 300, 412, 250, 305, 305, 305, 307, 573, 350, + 733, 305, 305, 305, 305, 305, 305, 372, 376, 392, + 519, 372, 376, 400, 392, 410, 435, 410, 521, 734, + 412, 435, 520, 521, 305, 305, 305, 305, 305, 305, + + 615, 617, 620, 735, 334, 573, 616, 519, 620, 334, + 655, 617, 410, 655, 410, 411, 411, 411, 736, 737, + 520, 738, 411, 411, 411, 411, 411, 411, 615, 616, + 687, 688, 688, 706, 691, 739, 740, 687, 741, 688, + 691, 744, 745, 746, 747, 411, 411, 411, 411, 411, + 411, 750, 751, 752, 753, 754, 755, 756, 757, 754, + 758, 706, 759, 760, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, - 778, 779, 781, 782, 783, 784, 785, 786, 787, 788, - 789, 791, 792, 793, 794, 795, 796, 797, 798, 799, - - 800, 801, 802, 803, 804, 805, 806, 807, 809, 810, - 811, 812, 813, 814, 815, 792, 816, 817, 791, 819, - 820, 821, 822, 824, 825, 826, 821, 827, 828, 829, - 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, - 840, 842, 843, 844, 845, 847, 848, 849, 850, 851, - 839, 852, 853, 854, 855, 856, 857, 858, 859, 860, - 861, 863, 864, 865, 866, 867, 868, 869, 870, 871, - 872, 873, 874, 875, 877, 876, 878, 821, 879, 880, - 881, 883, 884, 885, 886, 887, 888, 890, 891, 892, - 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, - - 904, 875, 876, 905, 906, 907, 908, 909, 905, 910, - 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, - 921, 922, 923, 924, 925, 926, 927, 929, 930, 931, - 932, 933, 934, 935, 936, 937, 938, 940, 941, 943, - 944, 945, 946, 947, 948, 949, 906, 950, 951, 952, - 953, 955, 956, 957, 958, 959, 960, 962, 963, 964, - 965, 968, 969, 970, 971, 972, 973, 974, 975, 976, - 977, 978, 979, 980, 982, 956, 984, 986, 987, 988, - 989, 957, 990, 991, 992, 994, 995, 996, 997, 999, - 1000, 1001, 1002, 1003, 1006, 1007, 1008, 1009, 1010, 1011, + 778, 779, 780, 781, 782, 783, 784, 785, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 797, 798, 799, + + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, + 810, 811, 812, 813, 815, 816, 817, 818, 819, 820, + 821, 798, 822, 823, 797, 825, 826, 827, 828, 830, + 831, 832, 827, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 848, 849, 850, + 851, 853, 854, 855, 856, 857, 845, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, + 883, 882, 884, 827, 885, 886, 887, 889, 890, 891, + 892, 893, 894, 896, 897, 898, 899, 900, 901, 902, + + 903, 904, 905, 906, 907, 908, 910, 881, 882, 911, + 912, 913, 914, 915, 911, 916, 917, 918, 919, 920, + 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, + 931, 932, 933, 935, 936, 937, 938, 939, 940, 941, + 942, 943, 944, 946, 947, 949, 950, 951, 952, 953, + 954, 955, 912, 956, 957, 958, 959, 961, 962, 963, + 964, 965, 966, 968, 969, 970, 971, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 988, 962, 990, 992, 993, 994, 995, 963, 996, 997, + 998, 1000, 1001, 1002, 1003, 1005, 1006, 1007, 1008, 1009, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, - 1032, 1033, 1034, 1036, 1037, 1038, 1039, 1040, 1041, 1042, - 1043, 1044, 1045, 1047, 1048, 1049, 1050, 1051, 1052, 1053, - 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1062, 1032, 1061, - 1063, 1065, 1068, 1069, 1070, 1016, 1071, 1061, 1072, 1073, - 1074, 1075, 1076, 1077, 1079, 1080, 1037, 1081, 1082, 1083, - 1084, 1086, 1088, 1091, 1093, 1095, 1096, 1097, 1098, 1099, - 1101, 1102, 1097, 1104, 1105, 1106, 1107, 1108, 1109, 1111, - 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1121, 1123, - - 1125, 1126, 1099, 1127, 1128, 1129, 1131, 1132, 1133, 1134, - 1135, 1136, 1139, 1140, 1142, 1143, 1144, 1145, 1147, 1148, - 1149, 1150, 1151, 1153, 1155, 1157, 1158, 1159, 1160, 1161, - 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, + 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1042, + 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1053, + 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, + 1064, 1065, 1066, 1068, 1038, 1067, 1069, 1071, 1074, 1075, + 1076, 1022, 1077, 1067, 1078, 1079, 1080, 1081, 1082, 1083, + 1085, 1086, 1043, 1087, 1088, 1089, 1090, 1092, 1094, 1097, + 1099, 1101, 1102, 1103, 1104, 1105, 1107, 1108, 1103, 1110, + 1111, 1112, 1113, 1114, 1115, 1117, 1118, 1119, 1120, 1121, + + 1122, 1123, 1124, 1125, 1127, 1129, 1131, 1132, 1105, 1133, + 1134, 1135, 1137, 1138, 1139, 1140, 1141, 1142, 1145, 1146, + 1148, 1149, 1150, 1151, 1153, 1154, 1155, 1156, 1157, 1159, + 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, - 1182, 1183, 1157, 1184, 1185, 1186, 1187, 1188, 1189, 1190, - 1191, 1192, 1193, 1194, 1195, 1196, 1198, 1199, 1200, 1201, - 1202, 1205, 1208, 1209, 1212, 1213, 1214, 1215, 1216, 1217, - 1219, 1220, 1222, 1224, 1225, 1226, 1227, 1228, 1230, 1231, - 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1201, 1174, 1239, - - 1240, 1241, 1242, 1244, 1245, 1246, 1248, 1249, 1250, 1251, - 1252, 1253, 1255, 1257, 1259, 1260, 1261, 1262, 1263, 1264, - 1265, 1266, 1267, 1268, 1269, 1271, 1272, 1276, 1279, 1280, - 1282, 1283, 1285, 1286, 1287, 1288, 1290, 1292, 1293, 1294, - 1295, 1296, 1297, 1298, 1299, 1301, 1302, 1303, 1304, 1305, - 1306, 1307, 1309, 1310, 1311, 1312, 1313, 1315, 1316, 1317, - 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1327, 1329, - 1331, 1332, 1333, 1334, 1335, 1337, 1338, 1339, 1341, 1343, - 1344, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, + 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1163, 1190, + 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, + 1201, 1202, 1204, 1205, 1206, 1207, 1208, 1211, 1214, 1215, + 1218, 1219, 1220, 1221, 1222, 1223, 1225, 1226, 1228, 1230, + 1231, 1232, 1233, 1234, 1236, 1237, 1238, 1239, 1240, 1241, + + 1242, 1243, 1244, 1207, 1180, 1245, 1246, 1247, 1248, 1250, + 1251, 1252, 1254, 1255, 1256, 1257, 1258, 1259, 1261, 1263, + 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, + 1275, 1277, 1278, 1282, 1285, 1286, 1288, 1289, 1291, 1292, + 1293, 1294, 1296, 1298, 1299, 1300, 1301, 1302, 1303, 1304, + 1305, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1315, 1316, + 1317, 1318, 1319, 1321, 1322, 1323, 1324, 1325, 1326, 1327, + 1328, 1329, 1330, 1331, 1333, 1335, 1337, 1338, 1339, 1340, + 1341, 1343, 1344, 1345, 1347, 1349, 1350, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, - 1366, 1367, 1368, 1370, 1372, 1373, 1374, 1375, 1376, 1380, - 1381, 1382, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1392, - 1393, 1396, 1396, 1396, 1396, 1396, 1397, 1397, 1397, 1397, - 1397, 1398, 1404, 1398, 1398, 1398, 1399, 1405, 1399, 1406, - 1399, 1400, 1400, 1400, 1400, 1400, 1401, 1401, 1401, 1401, - 1401, 1402, 1407, 1402, 1402, 1402, 1403, 1403, 1403, 718, - 717, 716, 715, 714, 713, 712, 711, 710, 709, 708, - 706, 705, 704, 703, 702, 701, 699, 697, 696, 695, - 694, 693, 692, 691, 690, 689, 688, 687, 684, 683, - 680, 679, 678, 677, 676, 675, 674, 673, 672, 671, - - 670, 669, 668, 667, 666, 665, 664, 663, 662, 661, - 659, 658, 657, 656, 655, 654, 653, 652, 650, 648, - 647, 646, 645, 644, 643, 642, 641, 640, 639, 638, - 637, 636, 635, 634, 633, 632, 631, 630, 629, 628, - 627, 626, 625, 624, 623, 622, 621, 620, 619, 618, - 617, 616, 614, 613, 609, 608, 607, 605, 604, 602, - 601, 600, 599, 598, 597, 594, 593, 592, 591, 590, - 589, 588, 587, 586, 585, 584, 582, 581, 580, 579, - 578, 577, 576, 575, 574, 572, 571, 570, 569, 567, - 566, 565, 564, 563, 562, 561, 559, 558, 557, 556, - - 555, 554, 553, 552, 551, 550, 549, 548, 547, 546, - 545, 544, 543, 542, 541, 540, 539, 537, 536, 535, - 534, 533, 532, 531, 530, 529, 528, 527, 526, 525, - 524, 523, 522, 521, 520, 519, 513, 511, 508, 507, - 506, 505, 503, 502, 501, 499, 498, 495, 494, 493, - 492, 491, 490, 489, 488, 487, 486, 485, 484, 483, - 482, 481, 480, 479, 478, 477, 476, 475, 474, 473, - 472, 471, 469, 467, 466, 465, 464, 463, 462, 461, - 460, 459, 458, 457, 456, 454, 453, 452, 451, 450, - 449, 448, 447, 446, 445, 444, 443, 442, 441, 440, - - 439, 438, 437, 435, 434, 433, 431, 430, 429, 428, - 427, 425, 424, 422, 421, 419, 418, 417, 416, 415, - 413, 412, 411, 410, 405, 404, 402, 401, 400, 399, - 398, 396, 395, 393, 390, 388, 387, 385, 384, 382, - 381, 380, 379, 378, 377, 376, 375, 374, 372, 371, - 370, 368, 367, 366, 365, 363, 362, 361, 360, 358, - 357, 356, 355, 354, 353, 352, 351, 350, 348, 346, - 345, 344, 343, 342, 340, 339, 338, 337, 336, 335, - 334, 333, 332, 330, 329, 328, 327, 326, 325, 324, - 323, 322, 321, 320, 318, 317, 316, 315, 312, 311, - - 310, 309, 308, 307, 306, 302, 300, 297, 296, 293, - 289, 282, 280, 279, 278, 277, 275, 274, 273, 272, - 271, 270, 269, 268, 267, 266, 265, 264, 263, 261, - 260, 259, 258, 257, 256, 255, 254, 253, 252, 251, - 250, 249, 247, 246, 245, 244, 243, 242, 241, 240, - 238, 237, 236, 235, 234, 233, 232, 231, 229, 228, - 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, - 217, 216, 215, 214, 213, 212, 211, 209, 208, 207, - 206, 205, 204, 202, 199, 197, 195, 193, 190, 189, - 187, 184, 176, 175, 174, 172, 171, 169, 168, 167, - - 166, 164, 161, 159, 157, 156, 155, 154, 153, 151, - 150, 149, 148, 146, 145, 144, 143, 142, 141, 140, - 139, 138, 136, 134, 132, 131, 130, 129, 127, 126, - 125, 123, 122, 121, 120, 116, 110, 107, 106, 104, - 99, 98, 79, 74, 68, 65, 60, 53, 50, 49, - 47, 43, 41, 39, 38, 24, 14, 11, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395 + 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1376, + 1378, 1379, 1380, 1381, 1382, 1386, 1387, 1388, 1390, 1391, + 1392, 1393, 1394, 1395, 1396, 1398, 1399, 1402, 1402, 1402, + 1402, 1402, 1403, 1403, 1403, 1403, 1403, 1404, 1410, 1404, + 1404, 1404, 1405, 1411, 1405, 1412, 1405, 1406, 1406, 1406, + 1406, 1406, 1407, 1407, 1407, 1407, 1407, 1408, 1413, 1408, + 1408, 1408, 1409, 1409, 1409, 720, 719, 718, 717, 716, + 715, 714, 712, 711, 710, 709, 708, 707, 705, 703, + 702, 701, 700, 699, 698, 697, 696, 695, 694, 693, + 690, 689, 686, 685, 684, 683, 682, 681, 680, 679, + + 678, 677, 676, 675, 674, 673, 672, 671, 670, 669, + 668, 667, 665, 664, 663, 662, 661, 660, 659, 658, + 656, 654, 653, 652, 651, 650, 649, 648, 647, 646, + 645, 644, 643, 642, 641, 640, 638, 637, 636, 635, + 634, 633, 632, 631, 630, 629, 628, 627, 626, 625, + 624, 623, 622, 621, 619, 618, 614, 613, 612, 610, + 609, 607, 606, 605, 604, 603, 602, 599, 598, 597, + 596, 595, 594, 593, 592, 591, 590, 589, 587, 586, + 585, 584, 583, 582, 581, 580, 579, 577, 576, 575, + 574, 572, 571, 570, 569, 568, 567, 566, 564, 563, + + 562, 561, 560, 559, 558, 557, 556, 555, 554, 553, + 552, 551, 550, 549, 548, 547, 546, 545, 544, 543, + 541, 540, 539, 538, 537, 536, 535, 534, 533, 532, + 531, 530, 529, 528, 527, 526, 525, 524, 523, 517, + 515, 512, 511, 510, 509, 507, 506, 505, 503, 502, + 499, 498, 497, 496, 495, 494, 493, 492, 491, 490, + 489, 488, 487, 486, 485, 484, 483, 482, 481, 480, + 479, 478, 477, 476, 475, 473, 471, 470, 469, 468, + 467, 466, 465, 464, 463, 462, 461, 460, 458, 457, + 456, 455, 454, 453, 452, 451, 450, 449, 448, 447, + + 446, 445, 444, 443, 442, 441, 439, 438, 437, 436, + 434, 433, 432, 431, 430, 428, 427, 425, 424, 422, + 421, 420, 419, 418, 416, 415, 414, 413, 408, 407, + 405, 404, 403, 402, 401, 399, 398, 396, 393, 391, + 390, 388, 387, 385, 384, 383, 382, 381, 380, 379, + 378, 377, 375, 374, 373, 371, 370, 369, 368, 366, + 365, 364, 363, 361, 360, 359, 358, 357, 356, 355, + 354, 353, 351, 349, 348, 347, 346, 345, 343, 342, + 341, 340, 339, 338, 337, 336, 335, 333, 332, 331, + 330, 329, 328, 327, 326, 325, 324, 323, 322, 320, + + 319, 318, 317, 314, 313, 312, 311, 310, 309, 308, + 304, 302, 299, 298, 295, 291, 284, 282, 281, 280, + 279, 277, 276, 275, 274, 273, 272, 271, 270, 269, + 268, 267, 266, 265, 263, 262, 261, 260, 259, 258, + 257, 256, 255, 254, 253, 252, 251, 249, 248, 247, + 246, 245, 244, 243, 242, 240, 239, 238, 237, 236, + 235, 234, 233, 231, 230, 229, 228, 227, 226, 225, + 224, 223, 222, 221, 220, 219, 218, 217, 216, 215, + 214, 213, 212, 210, 209, 208, 207, 206, 205, 203, + 200, 198, 196, 194, 191, 190, 188, 185, 177, 176, + + 175, 173, 172, 170, 169, 168, 167, 165, 162, 160, + 158, 157, 156, 155, 154, 152, 151, 150, 149, 147, + 146, 145, 144, 143, 142, 141, 140, 139, 137, 136, + 134, 132, 131, 130, 129, 127, 126, 125, 123, 122, + 121, 120, 116, 110, 107, 106, 104, 99, 98, 79, + 74, 68, 60, 53, 50, 49, 47, 43, 41, 39, + 38, 24, 14, 11, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1401, 1401, 1401 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; -extern int parser4__flex_debug; -int parser4__flex_debug = 1; +extern int yy_flex_debug; +int yy_flex_debug = 1; -static yyconst flex_int16_t yy_rule_linenum[168] = +static const flex_int16_t yy_rule_linenum[169] = { 0, - 144, 146, 148, 153, 154, 159, 160, 161, 173, 176, - 181, 188, 197, 206, 215, 224, 234, 243, 252, 261, - 270, 279, 288, 297, 306, 315, 326, 335, 344, 353, - 362, 372, 382, 392, 402, 412, 422, 432, 442, 452, - 462, 472, 482, 492, 502, 513, 524, 535, 544, 554, - 563, 573, 587, 602, 611, 620, 629, 638, 658, 678, - 687, 697, 706, 715, 724, 734, 743, 752, 761, 770, - 780, 789, 798, 807, 816, 825, 834, 843, 852, 861, - 870, 880, 891, 903, 912, 921, 930, 940, 950, 960, - 970, 980, 989, 999, 1008, 1017, 1026, 1035, 1045, 1055, - - 1064, 1074, 1083, 1092, 1101, 1110, 1119, 1128, 1137, 1146, - 1155, 1164, 1173, 1182, 1191, 1200, 1209, 1218, 1227, 1236, - 1245, 1254, 1263, 1272, 1281, 1290, 1299, 1308, 1317, 1326, - 1336, 1346, 1356, 1366, 1376, 1386, 1396, 1406, 1416, 1425, - 1434, 1443, 1452, 1461, 1470, 1479, 1490, 1503, 1516, 1531, - 1630, 1635, 1640, 1645, 1646, 1647, 1648, 1649, 1650, 1652, - 1670, 1683, 1688, 1692, 1694, 1696, 1698 + 145, 147, 149, 154, 155, 160, 161, 162, 174, 177, + 182, 189, 198, 207, 216, 225, 235, 244, 253, 262, + 271, 280, 289, 298, 307, 316, 327, 336, 345, 354, + 363, 373, 383, 393, 403, 413, 423, 433, 443, 453, + 463, 473, 483, 493, 503, 514, 525, 536, 545, 555, + 564, 574, 588, 603, 612, 621, 630, 639, 659, 679, + 688, 698, 707, 716, 725, 735, 744, 753, 762, 771, + 780, 790, 799, 808, 817, 826, 835, 844, 853, 862, + 871, 880, 890, 901, 913, 922, 931, 941, 951, 961, + 971, 981, 991, 1000, 1010, 1019, 1028, 1037, 1046, 1056, + + 1066, 1075, 1085, 1094, 1103, 1112, 1121, 1130, 1139, 1148, + 1157, 1166, 1175, 1184, 1193, 1202, 1211, 1220, 1229, 1238, + 1247, 1256, 1265, 1274, 1283, 1292, 1301, 1310, 1319, 1328, + 1337, 1347, 1357, 1367, 1377, 1387, 1397, 1407, 1417, 1427, + 1436, 1445, 1454, 1463, 1472, 1481, 1490, 1501, 1514, 1527, + 1542, 1641, 1646, 1651, 1656, 1657, 1658, 1659, 1660, 1661, + 1663, 1681, 1694, 1699, 1703, 1705, 1707, 1709 } ; /* The intent behind this definition is that it'll catch @@ -1456,7 +1670,7 @@ static yyconst flex_int16_t yy_rule_linenum[168] = #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET -char *parser4_text; +char *yytext; #line 1 "dhcp4_lexer.ll" /* Copyright (C) 2016-2018 Internet Systems Consortium, Inc. ("ISC") @@ -1483,8 +1697,8 @@ char *parser4_text; 2.5.31 through 2.5.33): it generates code that does not conform to C89. See Debian bug 333231 . */ -# undef parser4_wrap -# define parser4_wrap() 1 +# undef yywrap +# define yywrap() 1 namespace { @@ -1499,9 +1713,10 @@ using namespace isc::dhcp; /* To avoid the call to exit... oops! */ #define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg) +#line 1716 "dhcp4_lexer.cc" /* noyywrap disables automatic rewinding for the next file to parse. Since we always parse only a single string, there's no need to do any wraps. And - using parser4_wrap requires linking with -lfl, which provides the default parser4_wrap + using yywrap requires linking with -lfl, which provides the default yywrap implementation that always returns 1 anyway. */ /* nounput simplifies the lexer, by removing support for putting a character back into the input stream. We never use such capability anyway. */ @@ -1509,23 +1724,23 @@ using namespace isc::dhcp; /* avoid to get static global variables to remain with C++. */ /* in last resort %option reentrant */ /* Enables debug mode. To see the debug messages, one needs to also set - parser4__flex_debug to 1, then the debug messages will be printed on stderr. */ + yy_flex_debug to 1, then the debug messages will be printed on stderr. */ /* I have no idea what this option does, except it was specified in the bison examples and Postgres folks added it to remove gcc 4.3 warnings. Let's be on the safe side and keep it. */ #define YY_NO_INPUT 1 - /* These are not token expressions yet, just convenience expressions that can be used during actual token definitions. Note some can match incorrect inputs (e.g., IP addresses) which must be checked. */ /* for errors */ #line 94 "dhcp4_lexer.ll" /* This code run each time a pattern is matched. It updates the location - by moving it ahead by parser4_leng bytes. parser4_leng specifies the length of the + by moving it ahead by yyleng bytes. yyleng specifies the length of the currently matched token. */ -#define YY_USER_ACTION driver.loc_.columns(parser4_leng); -#line 1529 "dhcp4_lexer.cc" +#define YY_USER_ACTION driver.loc_.columns(yyleng); +#line 1742 "dhcp4_lexer.cc" +#line 1743 "dhcp4_lexer.cc" #define INITIAL 0 #define COMMENT 1 @@ -1553,7 +1768,7 @@ using namespace isc::dhcp; /* %if-reentrant */ /* %if-c-only */ -static int yy_init_globals (void ); +static int yy_init_globals ( void ); /* %endif */ /* %if-reentrant */ @@ -1563,31 +1778,31 @@ static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ -int parser4_lex_destroy (void ); +int yylex_destroy ( void ); -int parser4_get_debug (void ); +int yyget_debug ( void ); -void parser4_set_debug (int debug_flag ); +void yyset_debug ( int debug_flag ); -YY_EXTRA_TYPE parser4_get_extra (void ); +YY_EXTRA_TYPE yyget_extra ( void ); -void parser4_set_extra (YY_EXTRA_TYPE user_defined ); +void yyset_extra ( YY_EXTRA_TYPE user_defined ); -FILE *parser4_get_in (void ); +FILE *yyget_in ( void ); -void parser4_set_in (FILE * _in_str ); +void yyset_in ( FILE * _in_str ); -FILE *parser4_get_out (void ); +FILE *yyget_out ( void ); -void parser4_set_out (FILE * _out_str ); +void yyset_out ( FILE * _out_str ); -yy_size_t parser4_get_leng (void ); + int yyget_leng ( void ); -char *parser4_get_text (void ); +char *yyget_text ( void ); -int parser4_get_lineno (void ); +int yyget_lineno ( void ); -void parser4_set_lineno (int _line_number ); +void yyset_lineno ( int _line_number ); /* %if-bison-bridge */ /* %endif */ @@ -1598,14 +1813,13 @@ void parser4_set_lineno (int _line_number ); #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus -extern "C" int parser4_wrap (void ); +extern "C" int yywrap ( void ); #else -extern int parser4_wrap (void ); +extern int yywrap ( void ); #endif #endif /* %not-for-header */ - #ifndef YY_NO_UNPUT #endif @@ -1614,21 +1828,20 @@ extern int parser4_wrap (void ); /* %endif */ #ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); +static void yy_flex_strncpy ( char *, const char *, int ); #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); +static int yy_flex_strlen ( const char * ); #endif #ifndef YY_NO_INPUT /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ - #ifdef __cplusplus -static int yyinput (void ); +static int yyinput ( void ); #else -static int input (void ); +static int input ( void ); #endif /* %ok-for-header */ @@ -1655,7 +1868,7 @@ static int input (void ); /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ -#define ECHO do { if (fwrite( parser4_text, parser4_leng, 1, parser4_out )) {} } while (0) +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ @@ -1670,20 +1883,20 @@ static int input (void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - size_t n; \ + int n; \ for ( n = 0; n < max_size && \ - (c = getc( parser4_in )) != EOF && c != '\n'; ++n ) \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ - if ( c == EOF && ferror( parser4_in ) ) \ + if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ - while ( (result = fread(buf, 1, max_size, parser4_in))==0 && ferror(parser4_in)) \ + while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ @@ -1691,7 +1904,7 @@ static int input (void ); break; \ } \ errno=0; \ - clearerr(parser4_in); \ + clearerr(yyin); \ } \ }\ \ @@ -1724,11 +1937,9 @@ static int input (void ); /* %if-tables-serialization structures and prototypes */ /* %not-for-header */ - /* %ok-for-header */ /* %not-for-header */ - /* %tables-yydmap generated elements */ /* %endif */ /* end tables serialization structures and prototypes */ @@ -1742,15 +1953,15 @@ static int input (void ); #define YY_DECL_IS_OURS 1 /* %if-c-only Standard (non-C++) definition */ -extern int parser4_lex (void); +extern int yylex (void); -#define YY_DECL int parser4_lex (void) +#define YY_DECL int yylex (void) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* !YY_DECL */ -/* Code executed at the beginning of each rule, after parser4_text and parser4_leng +/* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION @@ -1767,7 +1978,6 @@ extern int parser4_lex (void); YY_USER_ACTION /* %not-for-header */ - /** The main scanner function which does all the work. */ YY_DECL @@ -1787,27 +1997,27 @@ YY_DECL if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ - if ( ! parser4_in ) + if ( ! yyin ) /* %if-c-only */ - parser4_in = stdin; + yyin = stdin; /* %endif */ /* %if-c++-only */ /* %endif */ - if ( ! parser4_out ) + if ( ! yyout ) /* %if-c-only */ - parser4_out = stdout; + yyout = stdout; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! YY_CURRENT_BUFFER ) { - parser4_ensure_buffer_stack (); + yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - parser4__create_buffer(parser4_in,YY_BUF_SIZE ); + yy_create_buffer( yyin, YY_BUF_SIZE ); } - parser4__load_buffer_state( ); + yy_load_buffer_state( ); } { @@ -1816,11 +2026,12 @@ YY_DECL +#line 104 "dhcp4_lexer.ll" /* This part of the code is copied over to the verbatim to the top - of the generated parser4_lex function. Explanation: + of the generated yylex function. Explanation: http://www.gnu.org/software/bison/manual/html_node/Multiple-start_002dsymbols.html */ - /* Code run each time parser4_lex is called. */ + /* Code run each time yylex is called. */ driver.loc_.step(); if (start_token_flag) { @@ -1857,14 +2068,14 @@ YY_DECL } -#line 1861 "dhcp4_lexer.cc" +#line 2071 "dhcp4_lexer.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { /* %% [8.0] yymore()-related code goes here */ yy_cp = (yy_c_buf_p); - /* Support of parser4_text. */ + /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of @@ -1886,13 +2097,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1396 ) - yy_c = yy_meta[(unsigned int) yy_c]; + if ( yy_current_state >= 1402 ) + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 1395 ); + while ( yy_current_state != 1401 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -1902,22 +2113,22 @@ yy_find_action: YY_DO_BEFORE_ACTION; -/* %% [11.0] code for parser4_lineno update goes here */ +/* %% [11.0] code for yylineno update goes here */ do_action: /* This label is used only to access EOF actions. */ /* %% [12.0] debug code goes here */ - if ( parser4__flex_debug ) + if ( yy_flex_debug ) { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); - else if ( yy_act < 168 ) + else if ( yy_act < 169 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", - (long)yy_rule_linenum[yy_act], parser4_text ); - else if ( yy_act == 168 ) - fprintf( stderr, "--accepting default rule (\"%s\")\n", - parser4_text ); + (long)yy_rule_linenum[yy_act], yytext ); else if ( yy_act == 169 ) + fprintf( stderr, "--accepting default rule (\"%s\")\n", + yytext ); + else if ( yy_act == 170 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -1935,17 +2146,17 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 144 "dhcp4_lexer.ll" +#line 145 "dhcp4_lexer.ll" ; YY_BREAK case 2: YY_RULE_SETUP -#line 146 "dhcp4_lexer.ll" +#line 147 "dhcp4_lexer.ll" ; YY_BREAK case 3: YY_RULE_SETUP -#line 148 "dhcp4_lexer.ll" +#line 149 "dhcp4_lexer.ll" { BEGIN(COMMENT); comment_start_line = driver.loc_.end.line;; @@ -1953,38 +2164,38 @@ YY_RULE_SETUP YY_BREAK case 4: YY_RULE_SETUP -#line 153 "dhcp4_lexer.ll" +#line 154 "dhcp4_lexer.ll" BEGIN(INITIAL); YY_BREAK case 5: YY_RULE_SETUP -#line 154 "dhcp4_lexer.ll" +#line 155 "dhcp4_lexer.ll" ; YY_BREAK case YY_STATE_EOF(COMMENT): -#line 155 "dhcp4_lexer.ll" +#line 156 "dhcp4_lexer.ll" { isc_throw(Dhcp4ParseError, "Comment not closed. (/* in line " << comment_start_line); } YY_BREAK case 6: YY_RULE_SETUP -#line 159 "dhcp4_lexer.ll" +#line 160 "dhcp4_lexer.ll" BEGIN(DIR_ENTER); YY_BREAK case 7: YY_RULE_SETUP -#line 160 "dhcp4_lexer.ll" +#line 161 "dhcp4_lexer.ll" BEGIN(DIR_INCLUDE); YY_BREAK case 8: YY_RULE_SETUP -#line 161 "dhcp4_lexer.ll" +#line 162 "dhcp4_lexer.ll" { /* Include directive. */ /* Extract the filename. */ - std::string tmp(parser4_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); driver.includeFile(tmp); @@ -1993,19 +2204,19 @@ YY_RULE_SETUP case YY_STATE_EOF(DIR_ENTER): case YY_STATE_EOF(DIR_INCLUDE): case YY_STATE_EOF(DIR_EXIT): -#line 170 "dhcp4_lexer.ll" +#line 171 "dhcp4_lexer.ll" { isc_throw(Dhcp4ParseError, "Directive not closed."); } YY_BREAK case 9: YY_RULE_SETUP -#line 173 "dhcp4_lexer.ll" +#line 174 "dhcp4_lexer.ll" BEGIN(INITIAL); YY_BREAK case 10: YY_RULE_SETUP -#line 176 "dhcp4_lexer.ll" +#line 177 "dhcp4_lexer.ll" { /* Ok, we found a with space. Let's ignore it and update loc variable. */ driver.loc_.step(); @@ -2014,16 +2225,16 @@ YY_RULE_SETUP case 11: /* rule 11 can match eol */ YY_RULE_SETUP -#line 181 "dhcp4_lexer.ll" +#line 182 "dhcp4_lexer.ll" { /* Newline found. Let's update the location and continue. */ - driver.loc_.lines(parser4_leng); + driver.loc_.lines(yyleng); driver.loc_.step(); } YY_BREAK case 12: YY_RULE_SETUP -#line 188 "dhcp4_lexer.ll" +#line 189 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONFIG: @@ -2035,7 +2246,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 197 "dhcp4_lexer.ll" +#line 198 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2047,7 +2258,7 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 206 "dhcp4_lexer.ll" +#line 207 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::INTERFACES_CONFIG: @@ -2059,7 +2270,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 215 "dhcp4_lexer.ll" +#line 216 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_SOCKET_TYPE: @@ -2071,7 +2282,7 @@ YY_RULE_SETUP YY_BREAK case 16: YY_RULE_SETUP -#line 224 "dhcp4_lexer.ll" +#line 225 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_SOCKET_TYPE: @@ -2084,7 +2295,7 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 234 "dhcp4_lexer.ll" +#line 235 "dhcp4_lexer.ll" { switch(driver.ctx_) { case Parser4Context::INTERFACES_CONFIG: @@ -2096,7 +2307,7 @@ YY_RULE_SETUP YY_BREAK case 18: YY_RULE_SETUP -#line 243 "dhcp4_lexer.ll" +#line 244 "dhcp4_lexer.ll" { switch(driver.ctx_) { case Parser4Context::OUTBOUND_INTERFACE: @@ -2108,7 +2319,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 252 "dhcp4_lexer.ll" +#line 253 "dhcp4_lexer.ll" { switch(driver.ctx_) { case Parser4Context::OUTBOUND_INTERFACE: @@ -2120,7 +2331,7 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 261 "dhcp4_lexer.ll" +#line 262 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::INTERFACES_CONFIG: @@ -2132,7 +2343,7 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 270 "dhcp4_lexer.ll" +#line 271 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::INTERFACES_CONFIG: @@ -2144,7 +2355,7 @@ YY_RULE_SETUP YY_BREAK case 22: YY_RULE_SETUP -#line 279 "dhcp4_lexer.ll" +#line 280 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2156,7 +2367,7 @@ YY_RULE_SETUP YY_BREAK case 23: YY_RULE_SETUP -#line 288 "dhcp4_lexer.ll" +#line 289 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2168,7 +2379,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 297 "dhcp4_lexer.ll" +#line 298 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2180,7 +2391,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 306 "dhcp4_lexer.ll" +#line 307 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOSTS_DATABASE: @@ -2192,7 +2403,7 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 315 "dhcp4_lexer.ll" +#line 316 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2206,7 +2417,7 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 326 "dhcp4_lexer.ll" +#line 327 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DATABASE_TYPE: @@ -2218,7 +2429,7 @@ YY_RULE_SETUP YY_BREAK case 28: YY_RULE_SETUP -#line 335 "dhcp4_lexer.ll" +#line 336 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DATABASE_TYPE: @@ -2230,7 +2441,7 @@ YY_RULE_SETUP YY_BREAK case 29: YY_RULE_SETUP -#line 344 "dhcp4_lexer.ll" +#line 345 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DATABASE_TYPE: @@ -2242,7 +2453,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 353 "dhcp4_lexer.ll" +#line 354 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DATABASE_TYPE: @@ -2254,7 +2465,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 362 "dhcp4_lexer.ll" +#line 363 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2267,7 +2478,7 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 372 "dhcp4_lexer.ll" +#line 373 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2280,7 +2491,7 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 382 "dhcp4_lexer.ll" +#line 383 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2293,7 +2504,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 392 "dhcp4_lexer.ll" +#line 393 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2306,7 +2517,7 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 402 "dhcp4_lexer.ll" +#line 403 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2319,7 +2530,7 @@ YY_RULE_SETUP YY_BREAK case 36: YY_RULE_SETUP -#line 412 "dhcp4_lexer.ll" +#line 413 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2332,7 +2543,7 @@ YY_RULE_SETUP YY_BREAK case 37: YY_RULE_SETUP -#line 422 "dhcp4_lexer.ll" +#line 423 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2345,7 +2556,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 432 "dhcp4_lexer.ll" +#line 433 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2358,7 +2569,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 442 "dhcp4_lexer.ll" +#line 443 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2371,7 +2582,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 452 "dhcp4_lexer.ll" +#line 453 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2384,7 +2595,7 @@ YY_RULE_SETUP YY_BREAK case 41: YY_RULE_SETUP -#line 462 "dhcp4_lexer.ll" +#line 463 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2397,7 +2608,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 472 "dhcp4_lexer.ll" +#line 473 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2410,7 +2621,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 482 "dhcp4_lexer.ll" +#line 483 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2423,7 +2634,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 492 "dhcp4_lexer.ll" +#line 493 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2436,7 +2647,7 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 502 "dhcp4_lexer.ll" +#line 503 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2450,7 +2661,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 513 "dhcp4_lexer.ll" +#line 514 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2464,7 +2675,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 524 "dhcp4_lexer.ll" +#line 525 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2478,7 +2689,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 535 "dhcp4_lexer.ll" +#line 536 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2490,7 +2701,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 544 "dhcp4_lexer.ll" +#line 545 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2503,7 +2714,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 554 "dhcp4_lexer.ll" +#line 555 "dhcp4_lexer.ll" { switch (driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2515,7 +2726,7 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 563 "dhcp4_lexer.ll" +#line 564 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2528,7 +2739,7 @@ YY_RULE_SETUP YY_BREAK case 52: YY_RULE_SETUP -#line 573 "dhcp4_lexer.ll" +#line 574 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2545,7 +2756,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 587 "dhcp4_lexer.ll" +#line 588 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2563,7 +2774,7 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 602 "dhcp4_lexer.ll" +#line 603 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DATA: @@ -2575,7 +2786,7 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 611 "dhcp4_lexer.ll" +#line 612 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DATA: @@ -2587,7 +2798,7 @@ YY_RULE_SETUP YY_BREAK case 56: YY_RULE_SETUP -#line 620 "dhcp4_lexer.ll" +#line 621 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2599,7 +2810,7 @@ YY_RULE_SETUP YY_BREAK case 57: YY_RULE_SETUP -#line 629 "dhcp4_lexer.ll" +#line 630 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::POOLS: @@ -2611,7 +2822,7 @@ YY_RULE_SETUP YY_BREAK case 58: YY_RULE_SETUP -#line 638 "dhcp4_lexer.ll" +#line 639 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2634,7 +2845,7 @@ YY_RULE_SETUP YY_BREAK case 59: YY_RULE_SETUP -#line 658 "dhcp4_lexer.ll" +#line 659 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2657,7 +2868,7 @@ YY_RULE_SETUP YY_BREAK case 60: YY_RULE_SETUP -#line 678 "dhcp4_lexer.ll" +#line 679 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2669,7 +2880,7 @@ YY_RULE_SETUP YY_BREAK case 61: YY_RULE_SETUP -#line 687 "dhcp4_lexer.ll" +#line 688 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2682,7 +2893,7 @@ YY_RULE_SETUP YY_BREAK case 62: YY_RULE_SETUP -#line 697 "dhcp4_lexer.ll" +#line 698 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2694,7 +2905,7 @@ YY_RULE_SETUP YY_BREAK case 63: YY_RULE_SETUP -#line 706 "dhcp4_lexer.ll" +#line 707 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2706,7 +2917,7 @@ YY_RULE_SETUP YY_BREAK case 64: YY_RULE_SETUP -#line 715 "dhcp4_lexer.ll" +#line 716 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2718,7 +2929,7 @@ YY_RULE_SETUP YY_BREAK case 65: YY_RULE_SETUP -#line 724 "dhcp4_lexer.ll" +#line 725 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2731,7 +2942,7 @@ YY_RULE_SETUP YY_BREAK case 66: YY_RULE_SETUP -#line 734 "dhcp4_lexer.ll" +#line 735 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATION_MODE: @@ -2743,7 +2954,7 @@ YY_RULE_SETUP YY_BREAK case 67: YY_RULE_SETUP -#line 743 "dhcp4_lexer.ll" +#line 744 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATION_MODE: @@ -2755,7 +2966,7 @@ YY_RULE_SETUP YY_BREAK case 68: YY_RULE_SETUP -#line 752 "dhcp4_lexer.ll" +#line 753 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATION_MODE: @@ -2767,7 +2978,19 @@ YY_RULE_SETUP YY_BREAK case 69: YY_RULE_SETUP -#line 761 "dhcp4_lexer.ll" +#line 762 "dhcp4_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::RESERVATION_MODE: + return isc::dhcp::Dhcp4Parser::make_GLOBAL(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("global", driver.loc_); + } +} + YY_BREAK +case 70: +YY_RULE_SETUP +#line 771 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATION_MODE: @@ -2777,9 +3000,9 @@ YY_RULE_SETUP } } YY_BREAK -case 70: +case 71: YY_RULE_SETUP -#line 770 "dhcp4_lexer.ll" +#line 780 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -2790,9 +3013,9 @@ YY_RULE_SETUP } } YY_BREAK -case 71: +case 72: YY_RULE_SETUP -#line 780 "dhcp4_lexer.ll" +#line 790 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2802,9 +3025,9 @@ YY_RULE_SETUP } } YY_BREAK -case 72: +case 73: YY_RULE_SETUP -#line 789 "dhcp4_lexer.ll" +#line 799 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONFIG: @@ -2814,9 +3037,9 @@ YY_RULE_SETUP } } YY_BREAK -case 73: +case 74: YY_RULE_SETUP -#line 798 "dhcp4_lexer.ll" +#line 808 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGING: @@ -2826,9 +3049,9 @@ YY_RULE_SETUP } } YY_BREAK -case 74: +case 75: YY_RULE_SETUP -#line 807 "dhcp4_lexer.ll" +#line 817 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -2838,9 +3061,9 @@ YY_RULE_SETUP } } YY_BREAK -case 75: +case 76: YY_RULE_SETUP -#line 816 "dhcp4_lexer.ll" +#line 826 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -2850,9 +3073,9 @@ YY_RULE_SETUP } } YY_BREAK -case 76: +case 77: YY_RULE_SETUP -#line 825 "dhcp4_lexer.ll" +#line 835 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -2862,9 +3085,9 @@ YY_RULE_SETUP } } YY_BREAK -case 77: +case 78: YY_RULE_SETUP -#line 834 "dhcp4_lexer.ll" +#line 844 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -2874,9 +3097,9 @@ YY_RULE_SETUP } } YY_BREAK -case 78: +case 79: YY_RULE_SETUP -#line 843 "dhcp4_lexer.ll" +#line 853 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -2886,9 +3109,9 @@ YY_RULE_SETUP } } YY_BREAK -case 79: +case 80: YY_RULE_SETUP -#line 852 "dhcp4_lexer.ll" +#line 862 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -2898,9 +3121,9 @@ YY_RULE_SETUP } } YY_BREAK -case 80: +case 81: YY_RULE_SETUP -#line 861 "dhcp4_lexer.ll" +#line 871 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -2910,9 +3133,9 @@ YY_RULE_SETUP } } YY_BREAK -case 81: +case 82: YY_RULE_SETUP -#line 870 "dhcp4_lexer.ll" +#line 880 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2923,9 +3146,9 @@ YY_RULE_SETUP } } YY_BREAK -case 82: +case 83: YY_RULE_SETUP -#line 880 "dhcp4_lexer.ll" +#line 890 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2937,9 +3160,9 @@ YY_RULE_SETUP } } YY_BREAK -case 83: +case 84: YY_RULE_SETUP -#line 891 "dhcp4_lexer.ll" +#line 901 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2952,9 +3175,9 @@ YY_RULE_SETUP } } YY_BREAK -case 84: +case 85: YY_RULE_SETUP -#line 903 "dhcp4_lexer.ll" +#line 913 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CLIENT_CLASSES: @@ -2964,9 +3187,9 @@ YY_RULE_SETUP } } YY_BREAK -case 85: +case 86: YY_RULE_SETUP -#line 912 "dhcp4_lexer.ll" +#line 922 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CLIENT_CLASSES: @@ -2976,11 +3199,12 @@ YY_RULE_SETUP } } YY_BREAK -case 86: +case 87: YY_RULE_SETUP -#line 921 "dhcp4_lexer.ll" +#line 931 "dhcp4_lexer.ll" { switch(driver.ctx_) { + case isc::dhcp::Parser4Context::DHCP4: case isc::dhcp::Parser4Context::SUBNET4: return isc::dhcp::Dhcp4Parser::make_RESERVATIONS(driver.loc_); default: @@ -2988,9 +3212,9 @@ YY_RULE_SETUP } } YY_BREAK -case 87: +case 88: YY_RULE_SETUP -#line 930 "dhcp4_lexer.ll" +#line 941 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -3001,9 +3225,9 @@ YY_RULE_SETUP } } YY_BREAK -case 88: +case 89: YY_RULE_SETUP -#line 940 "dhcp4_lexer.ll" +#line 951 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -3014,9 +3238,9 @@ YY_RULE_SETUP } } YY_BREAK -case 89: +case 90: YY_RULE_SETUP -#line 950 "dhcp4_lexer.ll" +#line 961 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -3027,9 +3251,9 @@ YY_RULE_SETUP } } YY_BREAK -case 90: +case 91: YY_RULE_SETUP -#line 960 "dhcp4_lexer.ll" +#line 971 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -3040,9 +3264,9 @@ YY_RULE_SETUP } } YY_BREAK -case 91: +case 92: YY_RULE_SETUP -#line 970 "dhcp4_lexer.ll" +#line 981 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -3053,9 +3277,9 @@ YY_RULE_SETUP } } YY_BREAK -case 92: +case 93: YY_RULE_SETUP -#line 980 "dhcp4_lexer.ll" +#line 991 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATIONS: @@ -3065,9 +3289,9 @@ YY_RULE_SETUP } } YY_BREAK -case 93: +case 94: YY_RULE_SETUP -#line 989 "dhcp4_lexer.ll" +#line 1000 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -3078,9 +3302,9 @@ YY_RULE_SETUP } } YY_BREAK -case 94: +case 95: YY_RULE_SETUP -#line 999 "dhcp4_lexer.ll" +#line 1010 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DATA: @@ -3090,9 +3314,9 @@ YY_RULE_SETUP } } YY_BREAK -case 95: +case 96: YY_RULE_SETUP -#line 1008 "dhcp4_lexer.ll" +#line 1019 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -3102,9 +3326,9 @@ YY_RULE_SETUP } } YY_BREAK -case 96: +case 97: YY_RULE_SETUP -#line 1017 "dhcp4_lexer.ll" +#line 1028 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -3114,9 +3338,9 @@ YY_RULE_SETUP } } YY_BREAK -case 97: +case 98: YY_RULE_SETUP -#line 1026 "dhcp4_lexer.ll" +#line 1037 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -3126,9 +3350,9 @@ YY_RULE_SETUP } } YY_BREAK -case 98: +case 99: YY_RULE_SETUP -#line 1035 "dhcp4_lexer.ll" +#line 1046 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3139,9 +3363,9 @@ YY_RULE_SETUP } } YY_BREAK -case 99: +case 100: YY_RULE_SETUP -#line 1045 "dhcp4_lexer.ll" +#line 1056 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RELAY: @@ -3152,9 +3376,9 @@ YY_RULE_SETUP } } YY_BREAK -case 100: +case 101: YY_RULE_SETUP -#line 1055 "dhcp4_lexer.ll" +#line 1066 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RELAY: @@ -3164,9 +3388,9 @@ YY_RULE_SETUP } } YY_BREAK -case 101: +case 102: YY_RULE_SETUP -#line 1064 "dhcp4_lexer.ll" +#line 1075 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3176,9 +3400,9 @@ YY_RULE_SETUP } } YY_BREAK -case 102: +case 103: YY_RULE_SETUP -#line 1074 "dhcp4_lexer.ll" +#line 1085 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOOKS_LIBRARIES: @@ -3188,9 +3412,9 @@ YY_RULE_SETUP } } YY_BREAK -case 103: +case 104: YY_RULE_SETUP -#line 1083 "dhcp4_lexer.ll" +#line 1094 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOOKS_LIBRARIES: @@ -3200,9 +3424,9 @@ YY_RULE_SETUP } } YY_BREAK -case 104: +case 105: YY_RULE_SETUP -#line 1092 "dhcp4_lexer.ll" +#line 1103 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3212,9 +3436,9 @@ YY_RULE_SETUP } } YY_BREAK -case 105: +case 106: YY_RULE_SETUP -#line 1101 "dhcp4_lexer.ll" +#line 1112 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -3224,9 +3448,9 @@ YY_RULE_SETUP } } YY_BREAK -case 106: +case 107: YY_RULE_SETUP -#line 1110 "dhcp4_lexer.ll" +#line 1121 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -3236,9 +3460,9 @@ YY_RULE_SETUP } } YY_BREAK -case 107: +case 108: YY_RULE_SETUP -#line 1119 "dhcp4_lexer.ll" +#line 1130 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -3248,9 +3472,9 @@ YY_RULE_SETUP } } YY_BREAK -case 108: +case 109: YY_RULE_SETUP -#line 1128 "dhcp4_lexer.ll" +#line 1139 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -3260,9 +3484,9 @@ YY_RULE_SETUP } } YY_BREAK -case 109: +case 110: YY_RULE_SETUP -#line 1137 "dhcp4_lexer.ll" +#line 1148 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -3272,9 +3496,9 @@ YY_RULE_SETUP } } YY_BREAK -case 110: +case 111: YY_RULE_SETUP -#line 1146 "dhcp4_lexer.ll" +#line 1157 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -3284,9 +3508,9 @@ YY_RULE_SETUP } } YY_BREAK -case 111: +case 112: YY_RULE_SETUP -#line 1155 "dhcp4_lexer.ll" +#line 1166 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3296,9 +3520,9 @@ YY_RULE_SETUP } } YY_BREAK -case 112: +case 113: YY_RULE_SETUP -#line 1164 "dhcp4_lexer.ll" +#line 1175 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3308,9 +3532,9 @@ YY_RULE_SETUP } } YY_BREAK -case 113: +case 114: YY_RULE_SETUP -#line 1173 "dhcp4_lexer.ll" +#line 1184 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -3320,9 +3544,9 @@ YY_RULE_SETUP } } YY_BREAK -case 114: +case 115: YY_RULE_SETUP -#line 1182 "dhcp4_lexer.ll" +#line 1193 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -3332,9 +3556,9 @@ YY_RULE_SETUP } } YY_BREAK -case 115: +case 116: YY_RULE_SETUP -#line 1191 "dhcp4_lexer.ll" +#line 1202 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3344,9 +3568,9 @@ YY_RULE_SETUP } } YY_BREAK -case 116: +case 117: YY_RULE_SETUP -#line 1200 "dhcp4_lexer.ll" +#line 1211 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3356,9 +3580,9 @@ YY_RULE_SETUP } } YY_BREAK -case 117: +case 118: YY_RULE_SETUP -#line 1209 "dhcp4_lexer.ll" +#line 1220 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3368,9 +3592,9 @@ YY_RULE_SETUP } } YY_BREAK -case 118: +case 119: YY_RULE_SETUP -#line 1218 "dhcp4_lexer.ll" +#line 1229 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3380,9 +3604,9 @@ YY_RULE_SETUP } } YY_BREAK -case 119: +case 120: YY_RULE_SETUP -#line 1227 "dhcp4_lexer.ll" +#line 1238 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3392,9 +3616,9 @@ YY_RULE_SETUP } } YY_BREAK -case 120: +case 121: YY_RULE_SETUP -#line 1236 "dhcp4_lexer.ll" +#line 1247 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3404,9 +3628,9 @@ YY_RULE_SETUP } } YY_BREAK -case 121: +case 122: YY_RULE_SETUP -#line 1245 "dhcp4_lexer.ll" +#line 1256 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3416,9 +3640,9 @@ YY_RULE_SETUP } } YY_BREAK -case 122: +case 123: YY_RULE_SETUP -#line 1254 "dhcp4_lexer.ll" +#line 1265 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3428,9 +3652,9 @@ YY_RULE_SETUP } } YY_BREAK -case 123: +case 124: YY_RULE_SETUP -#line 1263 "dhcp4_lexer.ll" +#line 1274 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3440,9 +3664,9 @@ YY_RULE_SETUP } } YY_BREAK -case 124: +case 125: YY_RULE_SETUP -#line 1272 "dhcp4_lexer.ll" +#line 1283 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3452,9 +3676,9 @@ YY_RULE_SETUP } } YY_BREAK -case 125: +case 126: YY_RULE_SETUP -#line 1281 "dhcp4_lexer.ll" +#line 1292 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3464,9 +3688,9 @@ YY_RULE_SETUP } } YY_BREAK -case 126: +case 127: YY_RULE_SETUP -#line 1290 "dhcp4_lexer.ll" +#line 1301 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3476,9 +3700,9 @@ YY_RULE_SETUP } } YY_BREAK -case 127: +case 128: YY_RULE_SETUP -#line 1299 "dhcp4_lexer.ll" +#line 1310 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3488,9 +3712,9 @@ YY_RULE_SETUP } } YY_BREAK -case 128: +case 129: YY_RULE_SETUP -#line 1308 "dhcp4_lexer.ll" +#line 1319 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3500,9 +3724,9 @@ YY_RULE_SETUP } } YY_BREAK -case 129: +case 130: YY_RULE_SETUP -#line 1317 "dhcp4_lexer.ll" +#line 1328 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -3512,126 +3736,126 @@ YY_RULE_SETUP } } YY_BREAK -case 130: +case 131: YY_RULE_SETUP -#line 1326 "dhcp4_lexer.ll" +#line 1337 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) { return isc::dhcp::Dhcp4Parser::make_UDP(driver.loc_); } - std::string tmp(parser4_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 131: +case 132: YY_RULE_SETUP -#line 1336 "dhcp4_lexer.ll" +#line 1347 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) { return isc::dhcp::Dhcp4Parser::make_TCP(driver.loc_); } - std::string tmp(parser4_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 132: +case 133: YY_RULE_SETUP -#line 1346 "dhcp4_lexer.ll" +#line 1357 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) { return isc::dhcp::Dhcp4Parser::make_JSON(driver.loc_); } - std::string tmp(parser4_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 133: +case 134: YY_RULE_SETUP -#line 1356 "dhcp4_lexer.ll" +#line 1367 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp4Parser::make_WHEN_PRESENT(driver.loc_); } - std::string tmp(parser4_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 134: +case 135: YY_RULE_SETUP -#line 1366 "dhcp4_lexer.ll" +#line 1377 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp4Parser::make_WHEN_PRESENT(driver.loc_); } - std::string tmp(parser4_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 135: +case 136: YY_RULE_SETUP -#line 1376 "dhcp4_lexer.ll" +#line 1387 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp4Parser::make_NEVER(driver.loc_); } - std::string tmp(parser4_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 136: +case 137: YY_RULE_SETUP -#line 1386 "dhcp4_lexer.ll" +#line 1397 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp4Parser::make_NEVER(driver.loc_); } - std::string tmp(parser4_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 137: +case 138: YY_RULE_SETUP -#line 1396 "dhcp4_lexer.ll" +#line 1407 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp4Parser::make_ALWAYS(driver.loc_); } - std::string tmp(parser4_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 138: +case 139: YY_RULE_SETUP -#line 1406 "dhcp4_lexer.ll" +#line 1417 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp4Parser::make_WHEN_NOT_PRESENT(driver.loc_); } - std::string tmp(parser4_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 139: +case 140: YY_RULE_SETUP -#line 1416 "dhcp4_lexer.ll" +#line 1427 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONFIG: @@ -3641,9 +3865,9 @@ YY_RULE_SETUP } } YY_BREAK -case 140: +case 141: YY_RULE_SETUP -#line 1425 "dhcp4_lexer.ll" +#line 1436 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONFIG: @@ -3653,9 +3877,9 @@ YY_RULE_SETUP } } YY_BREAK -case 141: +case 142: YY_RULE_SETUP -#line 1434 "dhcp4_lexer.ll" +#line 1445 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONFIG: @@ -3665,9 +3889,9 @@ YY_RULE_SETUP } } YY_BREAK -case 142: +case 143: YY_RULE_SETUP -#line 1443 "dhcp4_lexer.ll" +#line 1454 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3677,9 +3901,9 @@ YY_RULE_SETUP } } YY_BREAK -case 143: +case 144: YY_RULE_SETUP -#line 1452 "dhcp4_lexer.ll" +#line 1463 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3689,9 +3913,9 @@ YY_RULE_SETUP } } YY_BREAK -case 144: +case 145: YY_RULE_SETUP -#line 1461 "dhcp4_lexer.ll" +#line 1472 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3701,9 +3925,9 @@ YY_RULE_SETUP } } YY_BREAK -case 145: +case 146: YY_RULE_SETUP -#line 1470 "dhcp4_lexer.ll" +#line 1481 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3713,9 +3937,9 @@ YY_RULE_SETUP } } YY_BREAK -case 146: +case 147: YY_RULE_SETUP -#line 1479 "dhcp4_lexer.ll" +#line 1490 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3727,9 +3951,9 @@ YY_RULE_SETUP } } YY_BREAK -case 147: +case 148: YY_RULE_SETUP -#line 1490 "dhcp4_lexer.ll" +#line 1501 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3743,9 +3967,9 @@ YY_RULE_SETUP } } YY_BREAK -case 148: +case 149: YY_RULE_SETUP -#line 1503 "dhcp4_lexer.ll" +#line 1514 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3759,9 +3983,9 @@ YY_RULE_SETUP } } YY_BREAK -case 149: +case 150: YY_RULE_SETUP -#line 1516 "dhcp4_lexer.ll" +#line 1527 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3775,14 +3999,14 @@ YY_RULE_SETUP } } YY_BREAK -case 150: +case 151: YY_RULE_SETUP -#line 1531 "dhcp4_lexer.ll" +#line 1542 "dhcp4_lexer.ll" { /* A string has been matched. It contains the actual string and single quotes. We need to get those quotes out of the way and just use its content, e.g. for 'foo' we should get foo */ - std::string raw(parser4_text+1); + std::string raw(yytext+1); size_t len = raw.size() - 1; raw.resize(len); std::string decoded; @@ -3877,68 +4101,68 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_); } YY_BREAK -case 151: -/* rule 151 can match eol */ +case 152: +/* rule 152 can match eol */ YY_RULE_SETUP -#line 1630 "dhcp4_lexer.ll" +#line 1641 "dhcp4_lexer.ll" { /* Bad string with a forbidden control character inside */ - driver.error(driver.loc_, "Invalid control in " + std::string(parser4_text)); + driver.error(driver.loc_, "Invalid control in " + std::string(yytext)); } YY_BREAK -case 152: -/* rule 152 can match eol */ +case 153: +/* rule 153 can match eol */ YY_RULE_SETUP -#line 1635 "dhcp4_lexer.ll" +#line 1646 "dhcp4_lexer.ll" { /* Bad string with a bad escape inside */ - driver.error(driver.loc_, "Bad escape in " + std::string(parser4_text)); + driver.error(driver.loc_, "Bad escape in " + std::string(yytext)); } YY_BREAK -case 153: +case 154: YY_RULE_SETUP -#line 1640 "dhcp4_lexer.ll" +#line 1651 "dhcp4_lexer.ll" { /* Bad string with an open escape at the end */ - driver.error(driver.loc_, "Overflow escape in " + std::string(parser4_text)); + driver.error(driver.loc_, "Overflow escape in " + std::string(yytext)); } YY_BREAK -case 154: +case 155: YY_RULE_SETUP -#line 1645 "dhcp4_lexer.ll" +#line 1656 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); } YY_BREAK -case 155: +case 156: YY_RULE_SETUP -#line 1646 "dhcp4_lexer.ll" +#line 1657 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); } YY_BREAK -case 156: +case 157: YY_RULE_SETUP -#line 1647 "dhcp4_lexer.ll" +#line 1658 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); } YY_BREAK -case 157: +case 158: YY_RULE_SETUP -#line 1648 "dhcp4_lexer.ll" +#line 1659 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); } YY_BREAK -case 158: +case 159: YY_RULE_SETUP -#line 1649 "dhcp4_lexer.ll" +#line 1660 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); } YY_BREAK -case 159: +case 160: YY_RULE_SETUP -#line 1650 "dhcp4_lexer.ll" +#line 1661 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); } YY_BREAK -case 160: +case 161: YY_RULE_SETUP -#line 1652 "dhcp4_lexer.ll" +#line 1663 "dhcp4_lexer.ll" { /* An integer was found. */ - std::string tmp(parser4_text); + std::string tmp(yytext); int64_t integer = 0; try { /* In substring we want to use negative values (e.g. -1). @@ -3954,12 +4178,12 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_); } YY_BREAK -case 161: +case 162: YY_RULE_SETUP -#line 1670 "dhcp4_lexer.ll" +#line 1681 "dhcp4_lexer.ll" { /* A floating point was found. */ - std::string tmp(parser4_text); + std::string tmp(yytext); double fp = 0.0; try { fp = boost::lexical_cast(tmp); @@ -3970,43 +4194,43 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_); } YY_BREAK -case 162: +case 163: YY_RULE_SETUP -#line 1683 "dhcp4_lexer.ll" +#line 1694 "dhcp4_lexer.ll" { - string tmp(parser4_text); + string tmp(yytext); return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK -case 163: +case 164: YY_RULE_SETUP -#line 1688 "dhcp4_lexer.ll" +#line 1699 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_); } YY_BREAK -case 164: +case 165: YY_RULE_SETUP -#line 1692 "dhcp4_lexer.ll" +#line 1703 "dhcp4_lexer.ll" driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); YY_BREAK -case 165: +case 166: YY_RULE_SETUP -#line 1694 "dhcp4_lexer.ll" +#line 1705 "dhcp4_lexer.ll" driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); YY_BREAK -case 166: +case 167: YY_RULE_SETUP -#line 1696 "dhcp4_lexer.ll" +#line 1707 "dhcp4_lexer.ll" driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); YY_BREAK -case 167: +case 168: YY_RULE_SETUP -#line 1698 "dhcp4_lexer.ll" -driver.error (driver.loc_, "Invalid character: " + std::string(parser4_text)); +#line 1709 "dhcp4_lexer.ll" +driver.error (driver.loc_, "Invalid character: " + std::string(yytext)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 1700 "dhcp4_lexer.ll" +#line 1711 "dhcp4_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp4Parser::make_END(driver.loc_); @@ -4030,12 +4254,12 @@ case YY_STATE_EOF(INITIAL): BEGIN(DIR_EXIT); } YY_BREAK -case 168: +case 169: YY_RULE_SETUP -#line 1723 "dhcp4_lexer.ll" +#line 1734 "dhcp4_lexer.ll" ECHO; YY_BREAK -#line 4039 "dhcp4_lexer.cc" +#line 4262 "dhcp4_lexer.cc" case YY_END_OF_BUFFER: { @@ -4050,8 +4274,8 @@ ECHO; { /* We're scanning a new file or input source. It's * possible that this happened because the user - * just pointed parser4_in at a new source and called - * parser4_lex(). If so, then we have to assure + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a @@ -4059,7 +4283,7 @@ ECHO; */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; /* %if-c-only */ - YY_CURRENT_BUFFER_LVALUE->yy_input_file = parser4_in; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4117,11 +4341,11 @@ ECHO; { (yy_did_buffer_switch_on_eof) = 0; - if ( parser4_wrap( ) ) + if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up - * parser4_text, we can now set up + * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the @@ -4171,12 +4395,11 @@ ECHO; } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ -} /* end of parser4_lex */ +} /* end of yylex */ /* %ok-for-header */ /* %if-c++-only */ /* %not-for-header */ - /* %ok-for-header */ /* %endif */ @@ -4196,7 +4419,7 @@ static int yy_get_next_buffer (void) { char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = (yytext_ptr); - yy_size_t number_to_move, i; + int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) @@ -4225,7 +4448,7 @@ static int yy_get_next_buffer (void) /* Try to read more data. */ /* First move last chars to start of buffer. */ - number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1; + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); @@ -4238,7 +4461,7 @@ static int yy_get_next_buffer (void) else { - yy_size_t num_to_read = + int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) @@ -4252,7 +4475,7 @@ static int yy_get_next_buffer (void) if ( b->yy_is_our_buffer ) { - yy_size_t new_size = b->yy_buf_size * 2; + int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -4261,11 +4484,12 @@ static int yy_get_next_buffer (void) b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ - parser4_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) ); } else /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; + b->yy_ch_buf = NULL; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( @@ -4293,7 +4517,7 @@ static int yy_get_next_buffer (void) if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; - parser4_restart(parser4_in ); + yyrestart( yyin ); } else @@ -4307,12 +4531,15 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; - if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) parser4_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); } (yy_n_chars) += number_to_move; @@ -4328,7 +4555,6 @@ static int yy_get_next_buffer (void) /* %if-c-only */ /* %not-for-header */ - static yy_state_type yy_get_previous_state (void) /* %endif */ /* %if-c++-only */ @@ -4352,10 +4578,10 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1396 ) - yy_c = yy_meta[(unsigned int) yy_c]; + if ( yy_current_state >= 1402 ) + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; } return yy_current_state; @@ -4385,11 +4611,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1396 ) - yy_c = yy_meta[(unsigned int) yy_c]; + if ( yy_current_state >= 1402 ) + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 1395); + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + yy_is_jam = (yy_current_state == 1401); return yy_is_jam ? 0 : yy_current_state; } @@ -4428,7 +4654,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); + int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -4445,14 +4671,14 @@ static int yy_get_next_buffer (void) */ /* Reset buffer status. */ - parser4_restart(parser4_in ); + yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { - if ( parser4_wrap( ) ) - return EOF; + if ( yywrap( ) ) + return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; @@ -4471,10 +4697,10 @@ static int yy_get_next_buffer (void) } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ - *(yy_c_buf_p) = '\0'; /* preserve parser4_text */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); -/* %% [19.0] update BOL and parser4_lineno */ +/* %% [19.0] update BOL and yylineno */ return c; } @@ -4488,20 +4714,20 @@ static int yy_get_next_buffer (void) * @note This function does not reset the start condition to @c INITIAL . */ /* %if-c-only */ - void parser4_restart (FILE * input_file ) + void yyrestart (FILE * input_file ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! YY_CURRENT_BUFFER ){ - parser4_ensure_buffer_stack (); + yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - parser4__create_buffer(parser4_in,YY_BUF_SIZE ); + yy_create_buffer( yyin, YY_BUF_SIZE ); } - parser4__init_buffer(YY_CURRENT_BUFFER,input_file ); - parser4__load_buffer_state( ); + yy_init_buffer( YY_CURRENT_BUFFER, input_file ); + yy_load_buffer_state( ); } /* %if-c++-only */ @@ -4512,7 +4738,7 @@ static int yy_get_next_buffer (void) * */ /* %if-c-only */ - void parser4__switch_to_buffer (YY_BUFFER_STATE new_buffer ) + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4520,10 +4746,10 @@ static int yy_get_next_buffer (void) /* TODO. We should be able to replace this entire function body * with - * parser4_pop_buffer_state(); - * parser4_push_buffer_state(new_buffer); + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); */ - parser4_ensure_buffer_stack (); + yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; @@ -4536,18 +4762,18 @@ static int yy_get_next_buffer (void) } YY_CURRENT_BUFFER_LVALUE = new_buffer; - parser4__load_buffer_state( ); + yy_load_buffer_state( ); /* We don't actually know whether we did this switch during - * EOF (parser4_wrap()) processing, but the only time this flag - * is looked at is after parser4_wrap() is called, so it's safe + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } /* %if-c-only */ -static void parser4__load_buffer_state (void) +static void yy_load_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4555,7 +4781,7 @@ static void parser4__load_buffer_state (void) (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; /* %if-c-only */ - parser4_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4569,29 +4795,29 @@ static void parser4__load_buffer_state (void) * @return the allocated buffer state. */ /* %if-c-only */ - YY_BUFFER_STATE parser4__create_buffer (FILE * file, int size ) + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) /* %endif */ /* %if-c++-only */ /* %endif */ { YY_BUFFER_STATE b; - b = (YY_BUFFER_STATE) parser4_alloc(sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in parser4__create_buffer()" ); + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - b->yy_buf_size = (yy_size_t)size; + b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ - b->yy_ch_buf = (char *) parser4_alloc(b->yy_buf_size + 2 ); + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in parser4__create_buffer()" ); + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; - parser4__init_buffer(b,file ); + yy_init_buffer( b, file ); return b; } @@ -4600,11 +4826,11 @@ static void parser4__load_buffer_state (void) /* %endif */ /** Destroy the buffer. - * @param b a buffer created with parser4__create_buffer() + * @param b a buffer created with yy_create_buffer() * */ /* %if-c-only */ - void parser4__delete_buffer (YY_BUFFER_STATE b ) + void yy_delete_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4617,17 +4843,17 @@ static void parser4__load_buffer_state (void) YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) - parser4_free((void *) b->yy_ch_buf ); + yyfree( (void *) b->yy_ch_buf ); - parser4_free((void *) b ); + yyfree( (void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, - * such as during a parser4_restart() or at EOF. + * such as during a yyrestart() or at EOF. */ /* %if-c-only */ - static void parser4__init_buffer (YY_BUFFER_STATE b, FILE * file ) + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4635,7 +4861,7 @@ static void parser4__load_buffer_state (void) { int oerrno = errno; - parser4__flush_buffer(b ); + yy_flush_buffer( b ); /* %if-c-only */ b->yy_input_file = file; @@ -4644,8 +4870,8 @@ static void parser4__load_buffer_state (void) /* %endif */ b->yy_fill_buffer = 1; - /* If b is the current buffer, then parser4__init_buffer was _probably_ - * called from parser4_restart() or through yy_get_next_buffer. + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ @@ -4668,7 +4894,7 @@ static void parser4__load_buffer_state (void) * */ /* %if-c-only */ - void parser4__flush_buffer (YY_BUFFER_STATE b ) + void yy_flush_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4691,7 +4917,7 @@ static void parser4__load_buffer_state (void) b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) - parser4__load_buffer_state( ); + yy_load_buffer_state( ); } /* %if-c-or-c++ */ @@ -4702,7 +4928,7 @@ static void parser4__load_buffer_state (void) * */ /* %if-c-only */ -void parser4_push_buffer_state (YY_BUFFER_STATE new_buffer ) +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4710,9 +4936,9 @@ void parser4_push_buffer_state (YY_BUFFER_STATE new_buffer ) if (new_buffer == NULL) return; - parser4_ensure_buffer_stack(); + yyensure_buffer_stack(); - /* This block is copied from parser4__switch_to_buffer. */ + /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ @@ -4726,8 +4952,8 @@ void parser4_push_buffer_state (YY_BUFFER_STATE new_buffer ) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; - /* copied from parser4__switch_to_buffer. */ - parser4__load_buffer_state( ); + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /* %endif */ @@ -4738,7 +4964,7 @@ void parser4_push_buffer_state (YY_BUFFER_STATE new_buffer ) * */ /* %if-c-only */ -void parser4_pop_buffer_state (void) +void yypop_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4746,13 +4972,13 @@ void parser4_pop_buffer_state (void) if (!YY_CURRENT_BUFFER) return; - parser4__delete_buffer(YY_CURRENT_BUFFER ); + yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { - parser4__load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } @@ -4763,7 +4989,7 @@ void parser4_pop_buffer_state (void) * Guarantees space for at least one push. */ /* %if-c-only */ -static void parser4_ensure_buffer_stack (void) +static void yyensure_buffer_stack (void) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4776,15 +5002,15 @@ static void parser4_ensure_buffer_stack (void) * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ - num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ - (yy_buffer_stack) = (struct yy_buffer_state**)parser4_alloc + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in parser4_ensure_buffer_stack()" ); - + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - + (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; @@ -4796,12 +5022,12 @@ static void parser4_ensure_buffer_stack (void) yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; - (yy_buffer_stack) = (struct yy_buffer_state**)parser4_realloc + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in parser4_ensure_buffer_stack()" ); + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); @@ -4815,9 +5041,9 @@ static void parser4_ensure_buffer_stack (void) * @param base the character buffer * @param size the size in bytes of the character buffer * - * @return the newly allocated buffer state object. + * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE parser4__scan_buffer (char * base, yy_size_t size ) +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; @@ -4825,73 +5051,73 @@ YY_BUFFER_STATE parser4__scan_buffer (char * base, yy_size_t size ) base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ - return 0; + return NULL; - b = (YY_BUFFER_STATE) parser4_alloc(sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in parser4__scan_buffer()" ); + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; - b->yy_input_file = 0; + b->yy_input_file = NULL; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; - parser4__switch_to_buffer(b ); + yy_switch_to_buffer( b ); return b; } /* %endif */ /* %if-c-only */ -/** Setup the input buffer state to scan a string. The next call to parser4_lex() will +/** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use - * parser4__scan_bytes() instead. + * yy_scan_bytes() instead. */ -YY_BUFFER_STATE parser4__scan_string (yyconst char * yystr ) +YY_BUFFER_STATE yy_scan_string (const char * yystr ) { - return parser4__scan_bytes(yystr,strlen(yystr) ); + return yy_scan_bytes( yystr, (int) strlen(yystr) ); } /* %endif */ /* %if-c-only */ -/** Setup the input buffer state to scan the given bytes. The next call to parser4_lex() will +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE parser4__scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; - yy_size_t i; + int i; /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) parser4_alloc(n ); + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n ); if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in parser4__scan_bytes()" ); + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - b = parser4__scan_buffer(buf,n ); + b = yy_scan_buffer( buf, n ); if ( ! b ) - YY_FATAL_ERROR( "bad buffer in parser4__scan_bytes()" ); + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. @@ -4907,9 +5133,9 @@ YY_BUFFER_STATE parser4__scan_bytes (yyconst char * yybytes, yy_size_t _yybyte #endif /* %if-c-only */ -static void yy_fatal_error (yyconst char* msg ) +static void yynoreturn yy_fatal_error (const char* msg ) { - (void) fprintf( stderr, "%s\n", msg ); + fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* %endif */ @@ -4922,14 +5148,14 @@ static void yy_fatal_error (yyconst char* msg ) #define yyless(n) \ do \ { \ - /* Undo effects of setting up parser4_text. */ \ + /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ - parser4_text[parser4_leng] = (yy_hold_char); \ - (yy_c_buf_p) = parser4_text + yyless_macro_arg; \ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ - parser4_leng = yyless_macro_arg; \ + yyleng = yyless_macro_arg; \ } \ while ( 0 ) @@ -4942,43 +5168,43 @@ static void yy_fatal_error (yyconst char* msg ) /** Get the current line number. * */ -int parser4_get_lineno (void) +int yyget_lineno (void) { - - return parser4_lineno; + + return yylineno; } /** Get the input stream. * */ -FILE *parser4_get_in (void) +FILE *yyget_in (void) { - return parser4_in; + return yyin; } /** Get the output stream. * */ -FILE *parser4_get_out (void) +FILE *yyget_out (void) { - return parser4_out; + return yyout; } /** Get the length of the current token. * */ -yy_size_t parser4_get_leng (void) +int yyget_leng (void) { - return parser4_leng; + return yyleng; } /** Get the current token. * */ -char *parser4_get_text (void) +char *yyget_text (void) { - return parser4_text; + return yytext; } /* %if-reentrant */ @@ -4988,36 +5214,36 @@ char *parser4_get_text (void) * @param _line_number line number * */ -void parser4_set_lineno (int _line_number ) +void yyset_lineno (int _line_number ) { - parser4_lineno = _line_number; + yylineno = _line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * - * @see parser4__switch_to_buffer + * @see yy_switch_to_buffer */ -void parser4_set_in (FILE * _in_str ) +void yyset_in (FILE * _in_str ) { - parser4_in = _in_str ; + yyin = _in_str ; } -void parser4_set_out (FILE * _out_str ) +void yyset_out (FILE * _out_str ) { - parser4_out = _out_str ; + yyout = _out_str ; } -int parser4_get_debug (void) +int yyget_debug (void) { - return parser4__flex_debug; + return yy_flex_debug; } -void parser4_set_debug (int _bdebug ) +void yyset_debug (int _bdebug ) { - parser4__flex_debug = _bdebug ; + yy_flex_debug = _bdebug ; } /* %endif */ @@ -5031,50 +5257,50 @@ void parser4_set_debug (int _bdebug ) static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. - * This function is called from parser4_lex_destroy(), so don't allocate here. + * This function is called from yylex_destroy(), so don't allocate here. */ - (yy_buffer_stack) = 0; + (yy_buffer_stack) = NULL; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = (char *) 0; + (yy_c_buf_p) = NULL; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT - parser4_in = stdin; - parser4_out = stdout; + yyin = stdin; + yyout = stdout; #else - parser4_in = (FILE *) 0; - parser4_out = (FILE *) 0; + yyin = NULL; + yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by - * parser4_lex_init() + * yylex_init() */ return 0; } /* %endif */ /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ -/* parser4_lex_destroy is for both reentrant and non-reentrant scanners. */ -int parser4_lex_destroy (void) +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ - parser4__delete_buffer(YY_CURRENT_BUFFER ); + yy_delete_buffer( YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; - parser4_pop_buffer_state(); + yypop_buffer_state(); } /* Destroy the stack itself. */ - parser4_free((yy_buffer_stack) ); + yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time - * parser4_lex() is called, initialization will occur. */ + * yylex() is called, initialization will occur. */ yy_init_globals( ); /* %if-reentrant */ @@ -5088,7 +5314,7 @@ int parser4_lex_destroy (void) */ #ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +static void yy_flex_strncpy (char* s1, const char * s2, int n ) { int i; @@ -5098,7 +5324,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s ) +static int yy_flex_strlen (const char * s ) { int n; for ( n = 0; s[n]; ++n ) @@ -5108,12 +5334,12 @@ static int yy_flex_strlen (yyconst char * s ) } #endif -void *parser4_alloc (yy_size_t size ) +void *yyalloc (yy_size_t size ) { - return (void *) malloc( size ); + return malloc(size); } -void *parser4_realloc (void * ptr, yy_size_t size ) +void *yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both @@ -5123,12 +5349,12 @@ void *parser4_realloc (void * ptr, yy_size_t size ) * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ - return (void *) realloc( (char *) ptr, size ); + return realloc(ptr, size); } -void parser4_free (void * ptr ) +void yyfree (void * ptr ) { - free( (char *) ptr ); /* see parser4_realloc() for (char *) cast */ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } /* %if-tables-serialization definitions */ @@ -5138,8 +5364,7 @@ void parser4_free (void * ptr ) /* %ok-for-header */ -#line 1723 "dhcp4_lexer.ll" - +#line 1734 "dhcp4_lexer.ll" using namespace isc::dhcp; @@ -5153,7 +5378,7 @@ Parser4Context::scanStringBegin(const std::string& str, ParserType parser_type) file_ = ""; sfile_ = 0; loc_.initialize(&file_); - parser4__flex_debug = trace_scanning_; + yy_flex_debug = trace_scanning_; YY_BUFFER_STATE buffer; buffer = parser4__scan_bytes(str.c_str(), str.size()); if (!buffer) { @@ -5173,7 +5398,7 @@ Parser4Context::scanFileBegin(FILE * f, file_ = filename; sfile_ = f; loc_.initialize(&file_); - parser4__flex_debug = trace_scanning_; + yy_flex_debug = trace_scanning_; YY_BUFFER_STATE buffer; /* See dhcp4_lexer.cc header for available definitions */ diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index 6650d75f95..0412e20ba8 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -758,6 +758,15 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } +\"global\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::RESERVATION_MODE: + return isc::dhcp::Dhcp4Parser::make_GLOBAL(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("global", driver.loc_); + } +} + \"all\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATION_MODE: @@ -920,6 +929,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} \"reservations\" { switch(driver.ctx_) { + case isc::dhcp::Parser4Context::DHCP4: case isc::dhcp::Parser4Context::SUBNET4: return isc::dhcp::Dhcp4Parser::make_RESERVATIONS(driver.loc_); default: diff --git a/src/bin/dhcp4/dhcp4_parser.cc b/src/bin/dhcp4/dhcp4_parser.cc index cb76fa5bab..09a712a3b8 100644 --- a/src/bin/dhcp4/dhcp4_parser.cc +++ b/src/bin/dhcp4/dhcp4_parser.cc @@ -253,30 +253,30 @@ namespace isc { namespace dhcp { { switch (that.type_get ()) { - case 176: // value - case 180: // map_value - case 218: // socket_type - case 221: // outbound_interface_value - case 237: // db_type - case 321: // hr_mode - case 469: // ncr_protocol_value - case 477: // replace_client_name_value + case 177: // value + case 181: // map_value + case 219: // socket_type + case 222: // outbound_interface_value + case 238: // db_type + case 322: // hr_mode + case 470: // ncr_protocol_value + case 478: // replace_client_name_value value.move< ElementPtr > (that.value); break; - case 160: // "boolean" + case 161: // "boolean" value.move< bool > (that.value); break; - case 159: // "floating point" + case 160: // "floating point" value.move< double > (that.value); break; - case 158: // "integer" + case 159: // "integer" value.move< int64_t > (that.value); break; - case 157: // "constant string" + case 158: // "constant string" value.move< std::string > (that.value); break; @@ -295,30 +295,30 @@ namespace isc { namespace dhcp { state = that.state; switch (that.type_get ()) { - case 176: // value - case 180: // map_value - case 218: // socket_type - case 221: // outbound_interface_value - case 237: // db_type - case 321: // hr_mode - case 469: // ncr_protocol_value - case 477: // replace_client_name_value + case 177: // value + case 181: // map_value + case 219: // socket_type + case 222: // outbound_interface_value + case 238: // db_type + case 322: // hr_mode + case 470: // ncr_protocol_value + case 478: // replace_client_name_value value.copy< ElementPtr > (that.value); break; - case 160: // "boolean" + case 161: // "boolean" value.copy< bool > (that.value); break; - case 159: // "floating point" + case 160: // "floating point" value.copy< double > (that.value); break; - case 158: // "integer" + case 159: // "integer" value.copy< int64_t > (that.value); break; - case 157: // "constant string" + case 158: // "constant string" value.copy< std::string > (that.value); break; @@ -358,86 +358,86 @@ namespace isc { namespace dhcp { << yysym.location << ": "; switch (yytype) { - case 157: // "constant string" + case 158: // "constant string" -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< std::string > (); } #line 366 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 158: // "integer" + case 159: // "integer" -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< int64_t > (); } #line 373 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 159: // "floating point" + case 160: // "floating point" -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< double > (); } #line 380 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 160: // "boolean" + case 161: // "boolean" -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< bool > (); } #line 387 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 176: // value + case 177: // value -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } #line 394 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 180: // map_value + case 181: // map_value -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } #line 401 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 218: // socket_type + case 219: // socket_type -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } #line 408 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 221: // outbound_interface_value + case 222: // outbound_interface_value -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } #line 415 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 237: // db_type + case 238: // db_type -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } #line 422 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 321: // hr_mode + case 322: // hr_mode -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } #line 429 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 469: // ncr_protocol_value + case 470: // ncr_protocol_value -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } #line 436 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 477: // replace_client_name_value + case 478: // replace_client_name_value -#line 235 "dhcp4_parser.yy" // lalr1.cc:636 +#line 236 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } #line 443 "dhcp4_parser.cc" // lalr1.cc:636 break; @@ -639,30 +639,30 @@ namespace isc { namespace dhcp { when using variants. */ switch (yyr1_[yyn]) { - case 176: // value - case 180: // map_value - case 218: // socket_type - case 221: // outbound_interface_value - case 237: // db_type - case 321: // hr_mode - case 469: // ncr_protocol_value - case 477: // replace_client_name_value + case 177: // value + case 181: // map_value + case 219: // socket_type + case 222: // outbound_interface_value + case 238: // db_type + case 322: // hr_mode + case 470: // ncr_protocol_value + case 478: // replace_client_name_value yylhs.value.build< ElementPtr > (); break; - case 160: // "boolean" + case 161: // "boolean" yylhs.value.build< bool > (); break; - case 159: // "floating point" + case 160: // "floating point" yylhs.value.build< double > (); break; - case 158: // "integer" + case 159: // "integer" yylhs.value.build< int64_t > (); break; - case 157: // "constant string" + case 158: // "constant string" yylhs.value.build< std::string > (); break; @@ -684,127 +684,127 @@ namespace isc { namespace dhcp { switch (yyn) { case 2: -#line 244 "dhcp4_parser.yy" // lalr1.cc:859 +#line 245 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.NO_KEYWORD; } #line 690 "dhcp4_parser.cc" // lalr1.cc:859 break; case 4: -#line 245 "dhcp4_parser.yy" // lalr1.cc:859 +#line 246 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.CONFIG; } #line 696 "dhcp4_parser.cc" // lalr1.cc:859 break; case 6: -#line 246 "dhcp4_parser.yy" // lalr1.cc:859 +#line 247 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.DHCP4; } #line 702 "dhcp4_parser.cc" // lalr1.cc:859 break; case 8: -#line 247 "dhcp4_parser.yy" // lalr1.cc:859 +#line 248 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.INTERFACES_CONFIG; } #line 708 "dhcp4_parser.cc" // lalr1.cc:859 break; case 10: -#line 248 "dhcp4_parser.yy" // lalr1.cc:859 +#line 249 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.SUBNET4; } #line 714 "dhcp4_parser.cc" // lalr1.cc:859 break; case 12: -#line 249 "dhcp4_parser.yy" // lalr1.cc:859 +#line 250 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.POOLS; } #line 720 "dhcp4_parser.cc" // lalr1.cc:859 break; case 14: -#line 250 "dhcp4_parser.yy" // lalr1.cc:859 +#line 251 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.RESERVATIONS; } #line 726 "dhcp4_parser.cc" // lalr1.cc:859 break; case 16: -#line 251 "dhcp4_parser.yy" // lalr1.cc:859 +#line 252 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.DHCP4; } #line 732 "dhcp4_parser.cc" // lalr1.cc:859 break; case 18: -#line 252 "dhcp4_parser.yy" // lalr1.cc:859 +#line 253 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.OPTION_DEF; } #line 738 "dhcp4_parser.cc" // lalr1.cc:859 break; case 20: -#line 253 "dhcp4_parser.yy" // lalr1.cc:859 +#line 254 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.OPTION_DATA; } #line 744 "dhcp4_parser.cc" // lalr1.cc:859 break; case 22: -#line 254 "dhcp4_parser.yy" // lalr1.cc:859 +#line 255 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } #line 750 "dhcp4_parser.cc" // lalr1.cc:859 break; case 24: -#line 255 "dhcp4_parser.yy" // lalr1.cc:859 +#line 256 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.DHCP_DDNS; } #line 756 "dhcp4_parser.cc" // lalr1.cc:859 break; case 26: -#line 256 "dhcp4_parser.yy" // lalr1.cc:859 +#line 257 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.LOGGING; } #line 762 "dhcp4_parser.cc" // lalr1.cc:859 break; case 28: -#line 264 "dhcp4_parser.yy" // lalr1.cc:859 +#line 265 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); } #line 768 "dhcp4_parser.cc" // lalr1.cc:859 break; case 29: -#line 265 "dhcp4_parser.yy" // lalr1.cc:859 +#line 266 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); } #line 774 "dhcp4_parser.cc" // lalr1.cc:859 break; case 30: -#line 266 "dhcp4_parser.yy" // lalr1.cc:859 +#line 267 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); } #line 780 "dhcp4_parser.cc" // lalr1.cc:859 break; case 31: -#line 267 "dhcp4_parser.yy" // lalr1.cc:859 +#line 268 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); } #line 786 "dhcp4_parser.cc" // lalr1.cc:859 break; case 32: -#line 268 "dhcp4_parser.yy" // lalr1.cc:859 +#line 269 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } #line 792 "dhcp4_parser.cc" // lalr1.cc:859 break; case 33: -#line 269 "dhcp4_parser.yy" // lalr1.cc:859 +#line 270 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 798 "dhcp4_parser.cc" // lalr1.cc:859 break; case 34: -#line 270 "dhcp4_parser.yy" // lalr1.cc:859 +#line 271 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 804 "dhcp4_parser.cc" // lalr1.cc:859 break; case 35: -#line 273 "dhcp4_parser.yy" // lalr1.cc:859 +#line 274 "dhcp4_parser.yy" // lalr1.cc:859 { // Push back the JSON value on the stack ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ()); @@ -813,7 +813,7 @@ namespace isc { namespace dhcp { break; case 36: -#line 278 "dhcp4_parser.yy" // lalr1.cc:859 +#line 279 "dhcp4_parser.yy" // lalr1.cc:859 { // This code is executed when we're about to start parsing // the content of the map @@ -824,7 +824,7 @@ namespace isc { namespace dhcp { break; case 37: -#line 283 "dhcp4_parser.yy" // lalr1.cc:859 +#line 284 "dhcp4_parser.yy" // lalr1.cc:859 { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -834,13 +834,13 @@ namespace isc { namespace dhcp { break; case 38: -#line 289 "dhcp4_parser.yy" // lalr1.cc:859 +#line 290 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 840 "dhcp4_parser.cc" // lalr1.cc:859 break; case 41: -#line 296 "dhcp4_parser.yy" // lalr1.cc:859 +#line 297 "dhcp4_parser.yy" // lalr1.cc:859 { // map containing a single entry ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ()); @@ -849,7 +849,7 @@ namespace isc { namespace dhcp { break; case 42: -#line 300 "dhcp4_parser.yy" // lalr1.cc:859 +#line 301 "dhcp4_parser.yy" // lalr1.cc:859 { // map consisting of a shorter map followed by // comma and string:value @@ -859,7 +859,7 @@ namespace isc { namespace dhcp { break; case 43: -#line 307 "dhcp4_parser.yy" // lalr1.cc:859 +#line 308 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); @@ -868,7 +868,7 @@ namespace isc { namespace dhcp { break; case 44: -#line 310 "dhcp4_parser.yy" // lalr1.cc:859 +#line 311 "dhcp4_parser.yy" // lalr1.cc:859 { // list parsing complete. Put any sanity checking here } @@ -876,7 +876,7 @@ namespace isc { namespace dhcp { break; case 47: -#line 318 "dhcp4_parser.yy" // lalr1.cc:859 +#line 319 "dhcp4_parser.yy" // lalr1.cc:859 { // List consisting of a single element. ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ()); @@ -885,7 +885,7 @@ namespace isc { namespace dhcp { break; case 48: -#line 322 "dhcp4_parser.yy" // lalr1.cc:859 +#line 323 "dhcp4_parser.yy" // lalr1.cc:859 { // List ending with , and a value. ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ()); @@ -894,7 +894,7 @@ namespace isc { namespace dhcp { break; case 49: -#line 329 "dhcp4_parser.yy" // lalr1.cc:859 +#line 330 "dhcp4_parser.yy" // lalr1.cc:859 { // List parsing about to start } @@ -902,7 +902,7 @@ namespace isc { namespace dhcp { break; case 50: -#line 331 "dhcp4_parser.yy" // lalr1.cc:859 +#line 332 "dhcp4_parser.yy" // lalr1.cc:859 { // list parsing complete. Put any sanity checking here //ctx.stack_.pop_back(); @@ -911,7 +911,7 @@ namespace isc { namespace dhcp { break; case 53: -#line 340 "dhcp4_parser.yy" // lalr1.cc:859 +#line 341 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); @@ -920,7 +920,7 @@ namespace isc { namespace dhcp { break; case 54: -#line 344 "dhcp4_parser.yy" // lalr1.cc:859 +#line 345 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); @@ -929,7 +929,7 @@ namespace isc { namespace dhcp { break; case 55: -#line 355 "dhcp4_parser.yy" // lalr1.cc:859 +#line 356 "dhcp4_parser.yy" // lalr1.cc:859 { const std::string& where = ctx.contextName(); const std::string& keyword = yystack_[1].value.as< std::string > (); @@ -940,7 +940,7 @@ namespace isc { namespace dhcp { break; case 56: -#line 365 "dhcp4_parser.yy" // lalr1.cc:859 +#line 366 "dhcp4_parser.yy" // lalr1.cc:859 { // This code is executed when we're about to start parsing // the content of the map @@ -951,7 +951,7 @@ namespace isc { namespace dhcp { break; case 57: -#line 370 "dhcp4_parser.yy" // lalr1.cc:859 +#line 371 "dhcp4_parser.yy" // lalr1.cc:859 { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -964,7 +964,7 @@ namespace isc { namespace dhcp { break; case 66: -#line 394 "dhcp4_parser.yy" // lalr1.cc:859 +#line 395 "dhcp4_parser.yy" // lalr1.cc:859 { // This code is executed when we're about to start parsing // the content of the map @@ -977,7 +977,7 @@ namespace isc { namespace dhcp { break; case 67: -#line 401 "dhcp4_parser.yy" // lalr1.cc:859 +#line 402 "dhcp4_parser.yy" // lalr1.cc:859 { // No global parameter is required ctx.stack_.pop_back(); @@ -987,7 +987,7 @@ namespace isc { namespace dhcp { break; case 68: -#line 409 "dhcp4_parser.yy" // lalr1.cc:859 +#line 410 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the Dhcp4 map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -997,7 +997,7 @@ namespace isc { namespace dhcp { break; case 69: -#line 413 "dhcp4_parser.yy" // lalr1.cc:859 +#line 414 "dhcp4_parser.yy" // lalr1.cc:859 { // No global parameter is required // parsing completed @@ -1005,8 +1005,8 @@ namespace isc { namespace dhcp { #line 1006 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 99: -#line 453 "dhcp4_parser.yy" // lalr1.cc:859 + case 100: +#line 455 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("valid-lifetime", prf); @@ -1014,8 +1014,8 @@ namespace isc { namespace dhcp { #line 1015 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 100: -#line 458 "dhcp4_parser.yy" // lalr1.cc:859 + case 101: +#line 460 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("renew-timer", prf); @@ -1023,8 +1023,8 @@ namespace isc { namespace dhcp { #line 1024 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 101: -#line 463 "dhcp4_parser.yy" // lalr1.cc:859 + case 102: +#line 465 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rebind-timer", prf); @@ -1032,8 +1032,8 @@ namespace isc { namespace dhcp { #line 1033 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 102: -#line 468 "dhcp4_parser.yy" // lalr1.cc:859 + case 103: +#line 470 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("decline-probation-period", dpp); @@ -1041,8 +1041,8 @@ namespace isc { namespace dhcp { #line 1042 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 103: -#line 473 "dhcp4_parser.yy" // lalr1.cc:859 + case 104: +#line 475 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("echo-client-id", echo); @@ -1050,8 +1050,8 @@ namespace isc { namespace dhcp { #line 1051 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 104: -#line 478 "dhcp4_parser.yy" // lalr1.cc:859 + case 105: +#line 480 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("match-client-id", match); @@ -1059,8 +1059,8 @@ namespace isc { namespace dhcp { #line 1060 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 105: -#line 484 "dhcp4_parser.yy" // lalr1.cc:859 + case 106: +#line 486 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interfaces-config", i); @@ -1070,8 +1070,8 @@ namespace isc { namespace dhcp { #line 1071 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 106: -#line 489 "dhcp4_parser.yy" // lalr1.cc:859 + case 107: +#line 491 "dhcp4_parser.yy" // lalr1.cc:859 { // No interfaces config param is required ctx.stack_.pop_back(); @@ -1080,8 +1080,8 @@ namespace isc { namespace dhcp { #line 1081 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 116: -#line 508 "dhcp4_parser.yy" // lalr1.cc:859 + case 117: +#line 510 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the interfaces-config map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1090,8 +1090,8 @@ namespace isc { namespace dhcp { #line 1091 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 117: -#line 512 "dhcp4_parser.yy" // lalr1.cc:859 + case 118: +#line 514 "dhcp4_parser.yy" // lalr1.cc:859 { // No interfaces config param is required // parsing completed @@ -1099,8 +1099,8 @@ namespace isc { namespace dhcp { #line 1100 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 118: -#line 517 "dhcp4_parser.yy" // lalr1.cc:859 + case 119: +#line 519 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interfaces", l); @@ -1110,8 +1110,8 @@ namespace isc { namespace dhcp { #line 1111 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 119: -#line 522 "dhcp4_parser.yy" // lalr1.cc:859 + case 120: +#line 524 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1119,16 +1119,16 @@ namespace isc { namespace dhcp { #line 1120 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 120: -#line 527 "dhcp4_parser.yy" // lalr1.cc:859 + case 121: +#line 529 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.DHCP_SOCKET_TYPE); } #line 1128 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 121: -#line 529 "dhcp4_parser.yy" // lalr1.cc:859 + case 122: +#line 531 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -1136,28 +1136,28 @@ namespace isc { namespace dhcp { #line 1137 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 122: -#line 534 "dhcp4_parser.yy" // lalr1.cc:859 + case 123: +#line 536 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); } #line 1143 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 123: -#line 535 "dhcp4_parser.yy" // lalr1.cc:859 + case 124: +#line 537 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); } #line 1149 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 124: -#line 538 "dhcp4_parser.yy" // lalr1.cc:859 + case 125: +#line 540 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.OUTBOUND_INTERFACE); } #line 1157 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 125: -#line 540 "dhcp4_parser.yy" // lalr1.cc:859 + case 126: +#line 542 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -1165,24 +1165,24 @@ namespace isc { namespace dhcp { #line 1166 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 126: -#line 545 "dhcp4_parser.yy" // lalr1.cc:859 + case 127: +#line 547 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location))); } #line 1174 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 127: -#line 547 "dhcp4_parser.yy" // lalr1.cc:859 + case 128: +#line 549 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location))); } #line 1182 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 128: -#line 551 "dhcp4_parser.yy" // lalr1.cc:859 + case 129: +#line 553 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("re-detect", b); @@ -1190,8 +1190,8 @@ namespace isc { namespace dhcp { #line 1191 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 129: -#line 557 "dhcp4_parser.yy" // lalr1.cc:859 + case 130: +#line 559 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lease-database", i); @@ -1201,8 +1201,8 @@ namespace isc { namespace dhcp { #line 1202 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 130: -#line 562 "dhcp4_parser.yy" // lalr1.cc:859 + case 131: +#line 564 "dhcp4_parser.yy" // lalr1.cc:859 { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); @@ -1212,8 +1212,8 @@ namespace isc { namespace dhcp { #line 1213 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 131: -#line 569 "dhcp4_parser.yy" // lalr1.cc:859 + case 132: +#line 571 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hosts-database", i); @@ -1223,8 +1223,8 @@ namespace isc { namespace dhcp { #line 1224 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 132: -#line 574 "dhcp4_parser.yy" // lalr1.cc:859 + case 133: +#line 576 "dhcp4_parser.yy" // lalr1.cc:859 { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); @@ -1234,8 +1234,8 @@ namespace isc { namespace dhcp { #line 1235 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 133: -#line 581 "dhcp4_parser.yy" // lalr1.cc:859 + case 134: +#line 583 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hosts-databases", l); @@ -1245,8 +1245,8 @@ namespace isc { namespace dhcp { #line 1246 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 134: -#line 586 "dhcp4_parser.yy" // lalr1.cc:859 + case 135: +#line 588 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1254,8 +1254,8 @@ namespace isc { namespace dhcp { #line 1255 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 139: -#line 599 "dhcp4_parser.yy" // lalr1.cc:859 + case 140: +#line 601 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -1264,8 +1264,8 @@ namespace isc { namespace dhcp { #line 1265 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 140: -#line 603 "dhcp4_parser.yy" // lalr1.cc:859 + case 141: +#line 605 "dhcp4_parser.yy" // lalr1.cc:859 { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -1274,16 +1274,16 @@ namespace isc { namespace dhcp { #line 1275 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 161: -#line 633 "dhcp4_parser.yy" // lalr1.cc:859 + case 162: +#line 635 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.DATABASE_TYPE); } #line 1283 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 162: -#line 635 "dhcp4_parser.yy" // lalr1.cc:859 + case 163: +#line 637 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -1291,40 +1291,40 @@ namespace isc { namespace dhcp { #line 1292 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 163: -#line 640 "dhcp4_parser.yy" // lalr1.cc:859 + case 164: +#line 642 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); } #line 1298 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 164: -#line 641 "dhcp4_parser.yy" // lalr1.cc:859 + case 165: +#line 643 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); } #line 1304 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 165: -#line 642 "dhcp4_parser.yy" // lalr1.cc:859 + case 166: +#line 644 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); } #line 1310 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 166: -#line 643 "dhcp4_parser.yy" // lalr1.cc:859 + case 167: +#line 645 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); } #line 1316 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 167: -#line 646 "dhcp4_parser.yy" // lalr1.cc:859 + case 168: +#line 648 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1324 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 168: -#line 648 "dhcp4_parser.yy" // lalr1.cc:859 + case 169: +#line 650 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user", user); @@ -1333,16 +1333,16 @@ namespace isc { namespace dhcp { #line 1334 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 169: -#line 654 "dhcp4_parser.yy" // lalr1.cc:859 + case 170: +#line 656 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1342 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 170: -#line 656 "dhcp4_parser.yy" // lalr1.cc:859 + case 171: +#line 658 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password", pwd); @@ -1351,16 +1351,16 @@ namespace isc { namespace dhcp { #line 1352 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 171: -#line 662 "dhcp4_parser.yy" // lalr1.cc:859 + case 172: +#line 664 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1360 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 172: -#line 664 "dhcp4_parser.yy" // lalr1.cc:859 + case 173: +#line 666 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host", h); @@ -1369,8 +1369,8 @@ namespace isc { namespace dhcp { #line 1370 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 173: -#line 670 "dhcp4_parser.yy" // lalr1.cc:859 + case 174: +#line 672 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("port", p); @@ -1378,16 +1378,16 @@ namespace isc { namespace dhcp { #line 1379 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 174: -#line 675 "dhcp4_parser.yy" // lalr1.cc:859 + case 175: +#line 677 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1387 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 175: -#line 677 "dhcp4_parser.yy" // lalr1.cc:859 + case 176: +#line 679 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); @@ -1396,8 +1396,8 @@ namespace isc { namespace dhcp { #line 1397 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 176: -#line 683 "dhcp4_parser.yy" // lalr1.cc:859 + case 177: +#line 685 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("persist", n); @@ -1405,8 +1405,8 @@ namespace isc { namespace dhcp { #line 1406 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 177: -#line 688 "dhcp4_parser.yy" // lalr1.cc:859 + case 178: +#line 690 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lfc-interval", n); @@ -1414,8 +1414,8 @@ namespace isc { namespace dhcp { #line 1415 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 178: -#line 693 "dhcp4_parser.yy" // lalr1.cc:859 + case 179: +#line 695 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("readonly", n); @@ -1423,8 +1423,8 @@ namespace isc { namespace dhcp { #line 1424 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 179: -#line 698 "dhcp4_parser.yy" // lalr1.cc:859 + case 180: +#line 700 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("connect-timeout", n); @@ -1432,8 +1432,8 @@ namespace isc { namespace dhcp { #line 1433 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 180: -#line 703 "dhcp4_parser.yy" // lalr1.cc:859 + case 181: +#line 705 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("request-timeout", n); @@ -1441,8 +1441,8 @@ namespace isc { namespace dhcp { #line 1442 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 181: -#line 708 "dhcp4_parser.yy" // lalr1.cc:859 + case 182: +#line 710 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("tcp-keepalive", n); @@ -1450,8 +1450,8 @@ namespace isc { namespace dhcp { #line 1451 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 182: -#line 713 "dhcp4_parser.yy" // lalr1.cc:859 + case 183: +#line 715 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("tcp-nodelay", n); @@ -1459,16 +1459,16 @@ namespace isc { namespace dhcp { #line 1460 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 183: -#line 718 "dhcp4_parser.yy" // lalr1.cc:859 + case 184: +#line 720 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1468 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 184: -#line 720 "dhcp4_parser.yy" // lalr1.cc:859 + case 185: +#line 722 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("contact-points", cp); @@ -1477,16 +1477,16 @@ namespace isc { namespace dhcp { #line 1478 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 185: -#line 726 "dhcp4_parser.yy" // lalr1.cc:859 + case 186: +#line 728 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1486 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 186: -#line 728 "dhcp4_parser.yy" // lalr1.cc:859 + case 187: +#line 730 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("keyspace", ks); @@ -1495,8 +1495,8 @@ namespace isc { namespace dhcp { #line 1496 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 187: -#line 734 "dhcp4_parser.yy" // lalr1.cc:859 + case 188: +#line 736 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reconnect-tries", n); @@ -1504,8 +1504,8 @@ namespace isc { namespace dhcp { #line 1505 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 188: -#line 739 "dhcp4_parser.yy" // lalr1.cc:859 + case 189: +#line 741 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reconnect-wait-time", n); @@ -1513,8 +1513,8 @@ namespace isc { namespace dhcp { #line 1514 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 189: -#line 744 "dhcp4_parser.yy" // lalr1.cc:859 + case 190: +#line 746 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host-reservation-identifiers", l); @@ -1524,8 +1524,8 @@ namespace isc { namespace dhcp { #line 1525 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 190: -#line 749 "dhcp4_parser.yy" // lalr1.cc:859 + case 191: +#line 751 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1533,8 +1533,8 @@ namespace isc { namespace dhcp { #line 1534 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 198: -#line 765 "dhcp4_parser.yy" // lalr1.cc:859 + case 199: +#line 767 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); @@ -1542,8 +1542,8 @@ namespace isc { namespace dhcp { #line 1543 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 199: -#line 770 "dhcp4_parser.yy" // lalr1.cc:859 + case 200: +#line 772 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); @@ -1551,8 +1551,8 @@ namespace isc { namespace dhcp { #line 1552 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 200: -#line 775 "dhcp4_parser.yy" // lalr1.cc:859 + case 201: +#line 777 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(circuit); @@ -1560,8 +1560,8 @@ namespace isc { namespace dhcp { #line 1561 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 201: -#line 780 "dhcp4_parser.yy" // lalr1.cc:859 + case 202: +#line 782 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(client); @@ -1569,8 +1569,8 @@ namespace isc { namespace dhcp { #line 1570 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 202: -#line 785 "dhcp4_parser.yy" // lalr1.cc:859 + case 203: +#line 787 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(flex_id); @@ -1578,8 +1578,8 @@ namespace isc { namespace dhcp { #line 1579 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 203: -#line 790 "dhcp4_parser.yy" // lalr1.cc:859 + case 204: +#line 792 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hooks-libraries", l); @@ -1589,8 +1589,8 @@ namespace isc { namespace dhcp { #line 1590 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 204: -#line 795 "dhcp4_parser.yy" // lalr1.cc:859 + case 205: +#line 797 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1598,8 +1598,8 @@ namespace isc { namespace dhcp { #line 1599 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 209: -#line 808 "dhcp4_parser.yy" // lalr1.cc:859 + case 210: +#line 810 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -1608,8 +1608,8 @@ namespace isc { namespace dhcp { #line 1609 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 210: -#line 812 "dhcp4_parser.yy" // lalr1.cc:859 + case 211: +#line 814 "dhcp4_parser.yy" // lalr1.cc:859 { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -1618,8 +1618,8 @@ namespace isc { namespace dhcp { #line 1619 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 211: -#line 818 "dhcp4_parser.yy" // lalr1.cc:859 + case 212: +#line 820 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the hooks-libraries list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1628,8 +1628,8 @@ namespace isc { namespace dhcp { #line 1629 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 212: -#line 822 "dhcp4_parser.yy" // lalr1.cc:859 + case 213: +#line 824 "dhcp4_parser.yy" // lalr1.cc:859 { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -1638,16 +1638,16 @@ namespace isc { namespace dhcp { #line 1639 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 218: -#line 837 "dhcp4_parser.yy" // lalr1.cc:859 + case 219: +#line 839 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1647 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 219: -#line 839 "dhcp4_parser.yy" // lalr1.cc:859 + case 220: +#line 841 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("library", lib); @@ -1656,16 +1656,16 @@ namespace isc { namespace dhcp { #line 1657 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 220: -#line 845 "dhcp4_parser.yy" // lalr1.cc:859 + case 221: +#line 847 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1665 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 221: -#line 847 "dhcp4_parser.yy" // lalr1.cc:859 + case 222: +#line 849 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -1673,8 +1673,8 @@ namespace isc { namespace dhcp { #line 1674 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 222: -#line 853 "dhcp4_parser.yy" // lalr1.cc:859 + case 223: +#line 855 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("expired-leases-processing", m); @@ -1684,8 +1684,8 @@ namespace isc { namespace dhcp { #line 1685 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 223: -#line 858 "dhcp4_parser.yy" // lalr1.cc:859 + case 224: +#line 860 "dhcp4_parser.yy" // lalr1.cc:859 { // No expired lease parameter is required ctx.stack_.pop_back(); @@ -1694,8 +1694,8 @@ namespace isc { namespace dhcp { #line 1695 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 232: -#line 876 "dhcp4_parser.yy" // lalr1.cc:859 + case 233: +#line 878 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reclaim-timer-wait-time", value); @@ -1703,8 +1703,8 @@ namespace isc { namespace dhcp { #line 1704 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 233: -#line 881 "dhcp4_parser.yy" // lalr1.cc:859 + case 234: +#line 883 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value); @@ -1712,8 +1712,8 @@ namespace isc { namespace dhcp { #line 1713 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 234: -#line 886 "dhcp4_parser.yy" // lalr1.cc:859 + case 235: +#line 888 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hold-reclaimed-time", value); @@ -1721,8 +1721,8 @@ namespace isc { namespace dhcp { #line 1722 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 235: -#line 891 "dhcp4_parser.yy" // lalr1.cc:859 + case 236: +#line 893 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-leases", value); @@ -1730,8 +1730,8 @@ namespace isc { namespace dhcp { #line 1731 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 236: -#line 896 "dhcp4_parser.yy" // lalr1.cc:859 + case 237: +#line 898 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-time", value); @@ -1739,8 +1739,8 @@ namespace isc { namespace dhcp { #line 1740 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 237: -#line 901 "dhcp4_parser.yy" // lalr1.cc:859 + case 238: +#line 903 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("unwarned-reclaim-cycles", value); @@ -1748,8 +1748,8 @@ namespace isc { namespace dhcp { #line 1749 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 238: -#line 909 "dhcp4_parser.yy" // lalr1.cc:859 + case 239: +#line 911 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet4", l); @@ -1759,8 +1759,8 @@ namespace isc { namespace dhcp { #line 1760 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 239: -#line 914 "dhcp4_parser.yy" // lalr1.cc:859 + case 240: +#line 916 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1768,8 +1768,8 @@ namespace isc { namespace dhcp { #line 1769 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 244: -#line 934 "dhcp4_parser.yy" // lalr1.cc:859 + case 245: +#line 936 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -1778,8 +1778,8 @@ namespace isc { namespace dhcp { #line 1779 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 245: -#line 938 "dhcp4_parser.yy" // lalr1.cc:859 + case 246: +#line 940 "dhcp4_parser.yy" // lalr1.cc:859 { // Once we reached this place, the subnet parsing is now complete. // If we want to, we can implement default values here. @@ -1804,8 +1804,8 @@ namespace isc { namespace dhcp { #line 1805 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 246: -#line 960 "dhcp4_parser.yy" // lalr1.cc:859 + case 247: +#line 962 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the subnet4 list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1814,8 +1814,8 @@ namespace isc { namespace dhcp { #line 1815 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 247: -#line 964 "dhcp4_parser.yy" // lalr1.cc:859 + case 248: +#line 966 "dhcp4_parser.yy" // lalr1.cc:859 { // The subnet subnet4 parameter is required ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -1824,16 +1824,16 @@ namespace isc { namespace dhcp { #line 1825 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 275: -#line 1003 "dhcp4_parser.yy" // lalr1.cc:859 + case 276: +#line 1005 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1833 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 276: -#line 1005 "dhcp4_parser.yy" // lalr1.cc:859 + case 277: +#line 1007 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); @@ -1842,16 +1842,16 @@ namespace isc { namespace dhcp { #line 1843 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 277: -#line 1011 "dhcp4_parser.yy" // lalr1.cc:859 + case 278: +#line 1013 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1851 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 278: -#line 1013 "dhcp4_parser.yy" // lalr1.cc:859 + case 279: +#line 1015 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface", iface); @@ -1860,16 +1860,16 @@ namespace isc { namespace dhcp { #line 1861 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 279: -#line 1019 "dhcp4_parser.yy" // lalr1.cc:859 + case 280: +#line 1021 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1869 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 280: -#line 1021 "dhcp4_parser.yy" // lalr1.cc:859 + case 281: +#line 1023 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface-id", iface); @@ -1878,16 +1878,16 @@ namespace isc { namespace dhcp { #line 1879 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 281: -#line 1027 "dhcp4_parser.yy" // lalr1.cc:859 + case 282: +#line 1029 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1887 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 282: -#line 1029 "dhcp4_parser.yy" // lalr1.cc:859 + case 283: +#line 1031 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-subnet", iface); @@ -1896,16 +1896,16 @@ namespace isc { namespace dhcp { #line 1897 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 283: -#line 1035 "dhcp4_parser.yy" // lalr1.cc:859 + case 284: +#line 1037 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1905 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 284: -#line 1037 "dhcp4_parser.yy" // lalr1.cc:859 + case 285: +#line 1039 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); @@ -1914,16 +1914,16 @@ namespace isc { namespace dhcp { #line 1915 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 285: -#line 1043 "dhcp4_parser.yy" // lalr1.cc:859 + case 286: +#line 1045 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1923 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 286: -#line 1045 "dhcp4_parser.yy" // lalr1.cc:859 + case 287: +#line 1047 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface-id", iface); @@ -1932,16 +1932,16 @@ namespace isc { namespace dhcp { #line 1933 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 287: -#line 1051 "dhcp4_parser.yy" // lalr1.cc:859 + case 288: +#line 1053 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1941 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 288: -#line 1053 "dhcp4_parser.yy" // lalr1.cc:859 + case 289: +#line 1055 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-class", cls); @@ -1950,8 +1950,8 @@ namespace isc { namespace dhcp { #line 1951 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 289: -#line 1059 "dhcp4_parser.yy" // lalr1.cc:859 + case 290: +#line 1061 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("require-client-classes", c); @@ -1961,8 +1961,8 @@ namespace isc { namespace dhcp { #line 1962 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 290: -#line 1064 "dhcp4_parser.yy" // lalr1.cc:859 + case 291: +#line 1066 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1970,16 +1970,16 @@ namespace isc { namespace dhcp { #line 1971 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 291: -#line 1069 "dhcp4_parser.yy" // lalr1.cc:859 + case 292: +#line 1071 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.RESERVATION_MODE); } #line 1979 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 292: -#line 1071 "dhcp4_parser.yy" // lalr1.cc:859 + case 293: +#line 1073 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -1987,129 +1987,135 @@ namespace isc { namespace dhcp { #line 1988 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 293: -#line 1076 "dhcp4_parser.yy" // lalr1.cc:859 + case 294: +#line 1078 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } #line 1994 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 294: -#line 1077 "dhcp4_parser.yy" // lalr1.cc:859 + case 295: +#line 1079 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } #line 2000 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 295: -#line 1078 "dhcp4_parser.yy" // lalr1.cc:859 - { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } + case 296: +#line 1080 "dhcp4_parser.yy" // lalr1.cc:859 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); } #line 2006 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 296: + case 297: #line 1081 "dhcp4_parser.yy" // lalr1.cc:859 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } +#line 2012 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 298: +#line 1084 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); } -#line 2015 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2021 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 297: -#line 1086 "dhcp4_parser.yy" // lalr1.cc:859 + case 299: +#line 1089 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rapid-commit", rc); } -#line 2024 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2030 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 298: -#line 1093 "dhcp4_parser.yy" // lalr1.cc:859 + case 300: +#line 1096 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("shared-networks", l); ctx.stack_.push_back(l); ctx.enter(ctx.SHARED_NETWORK); } -#line 2035 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2041 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 299: -#line 1098 "dhcp4_parser.yy" // lalr1.cc:859 + case 301: +#line 1101 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2044 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2050 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 304: -#line 1113 "dhcp4_parser.yy" // lalr1.cc:859 + case 306: +#line 1116 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2054 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2060 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 305: -#line 1117 "dhcp4_parser.yy" // lalr1.cc:859 + case 307: +#line 1120 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 2062 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2068 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 326: -#line 1149 "dhcp4_parser.yy" // lalr1.cc:859 + case 328: +#line 1152 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("option-def", l); ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DEF); } -#line 2073 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2079 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 327: -#line 1154 "dhcp4_parser.yy" // lalr1.cc:859 + case 329: +#line 1157 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2082 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2088 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 328: -#line 1162 "dhcp4_parser.yy" // lalr1.cc:859 + case 330: +#line 1165 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2091 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2097 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 329: -#line 1165 "dhcp4_parser.yy" // lalr1.cc:859 + case 331: +#line 1168 "dhcp4_parser.yy" // lalr1.cc:859 { // parsing completed } -#line 2099 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2105 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 334: -#line 1181 "dhcp4_parser.yy" // lalr1.cc:859 + case 336: +#line 1184 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2109 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2115 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 335: -#line 1185 "dhcp4_parser.yy" // lalr1.cc:859 + case 337: +#line 1188 "dhcp4_parser.yy" // lalr1.cc:859 { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2117,21 +2123,21 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2121 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2127 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 336: -#line 1196 "dhcp4_parser.yy" // lalr1.cc:859 + case 338: +#line 1199 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the option-def list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2131 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2137 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 337: -#line 1200 "dhcp4_parser.yy" // lalr1.cc:859 + case 339: +#line 1203 "dhcp4_parser.yy" // lalr1.cc:859 { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2139,281 +2145,281 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2143 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2149 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 353: -#line 1232 "dhcp4_parser.yy" // lalr1.cc:859 + case 355: +#line 1235 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); } -#line 2152 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2158 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 355: -#line 1239 "dhcp4_parser.yy" // lalr1.cc:859 + case 357: +#line 1242 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2160 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2166 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 356: -#line 1241 "dhcp4_parser.yy" // lalr1.cc:859 + case 358: +#line 1244 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 2170 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2176 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 357: -#line 1247 "dhcp4_parser.yy" // lalr1.cc:859 + case 359: +#line 1250 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2178 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2184 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 358: -#line 1249 "dhcp4_parser.yy" // lalr1.cc:859 + case 360: +#line 1252 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("record-types", rtypes); ctx.leave(); } -#line 2188 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2194 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 359: -#line 1255 "dhcp4_parser.yy" // lalr1.cc:859 + case 361: +#line 1258 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2196 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2202 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 360: -#line 1257 "dhcp4_parser.yy" // lalr1.cc:859 + case 362: +#line 1260 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); ctx.leave(); } -#line 2206 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2212 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 362: -#line 1265 "dhcp4_parser.yy" // lalr1.cc:859 + case 364: +#line 1268 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2214 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2220 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 363: -#line 1267 "dhcp4_parser.yy" // lalr1.cc:859 + case 365: +#line 1270 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); ctx.leave(); } -#line 2224 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2230 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 364: -#line 1273 "dhcp4_parser.yy" // lalr1.cc:859 + case 366: +#line 1276 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); } -#line 2233 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2239 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 365: -#line 1282 "dhcp4_parser.yy" // lalr1.cc:859 + case 367: +#line 1285 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("option-data", l); ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DATA); } -#line 2244 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2250 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 366: -#line 1287 "dhcp4_parser.yy" // lalr1.cc:859 + case 368: +#line 1290 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2253 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2259 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 371: -#line 1306 "dhcp4_parser.yy" // lalr1.cc:859 + case 373: +#line 1309 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2263 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2269 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 372: -#line 1310 "dhcp4_parser.yy" // lalr1.cc:859 + case 374: +#line 1313 "dhcp4_parser.yy" // lalr1.cc:859 { /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); } -#line 2272 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2278 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 373: -#line 1318 "dhcp4_parser.yy" // lalr1.cc:859 + case 375: +#line 1321 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the option-data list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2282 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2288 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 374: -#line 1322 "dhcp4_parser.yy" // lalr1.cc:859 + case 376: +#line 1325 "dhcp4_parser.yy" // lalr1.cc:859 { /// @todo: the code or name parameters are required. // parsing completed } -#line 2291 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2297 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 389: -#line 1355 "dhcp4_parser.yy" // lalr1.cc:859 + case 391: +#line 1358 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2299 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2305 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 390: -#line 1357 "dhcp4_parser.yy" // lalr1.cc:859 + case 392: +#line 1360 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); ctx.leave(); } -#line 2309 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2315 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 393: -#line 1367 "dhcp4_parser.yy" // lalr1.cc:859 + case 395: +#line 1370 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", space); } -#line 2318 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2324 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 394: -#line 1372 "dhcp4_parser.yy" // lalr1.cc:859 + case 396: +#line 1375 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-send", persist); } -#line 2327 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2333 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 395: -#line 1380 "dhcp4_parser.yy" // lalr1.cc:859 + case 397: +#line 1383 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pools", l); ctx.stack_.push_back(l); ctx.enter(ctx.POOLS); } -#line 2338 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2344 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 396: -#line 1385 "dhcp4_parser.yy" // lalr1.cc:859 + case 398: +#line 1388 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2347 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2353 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 401: -#line 1400 "dhcp4_parser.yy" // lalr1.cc:859 + case 403: +#line 1403 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2357 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2363 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 402: -#line 1404 "dhcp4_parser.yy" // lalr1.cc:859 + case 404: +#line 1407 "dhcp4_parser.yy" // lalr1.cc:859 { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2367 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2373 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 403: -#line 1410 "dhcp4_parser.yy" // lalr1.cc:859 + case 405: +#line 1413 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2377 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2383 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 404: -#line 1414 "dhcp4_parser.yy" // lalr1.cc:859 + case 406: +#line 1417 "dhcp4_parser.yy" // lalr1.cc:859 { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2387 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2393 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 414: -#line 1433 "dhcp4_parser.yy" // lalr1.cc:859 + case 416: +#line 1436 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2395 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2401 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 415: -#line 1435 "dhcp4_parser.yy" // lalr1.cc:859 + case 417: +#line 1438 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); ctx.leave(); } -#line 2405 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2411 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 416: -#line 1441 "dhcp4_parser.yy" // lalr1.cc:859 + case 418: +#line 1444 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2413 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2419 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 417: -#line 1443 "dhcp4_parser.yy" // lalr1.cc:859 + case 419: +#line 1446 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context = yystack_[0].value.as< ElementPtr > (); @@ -2436,19 +2442,19 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 2440 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2446 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 418: -#line 1466 "dhcp4_parser.yy" // lalr1.cc:859 + case 420: +#line 1469 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2448 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2454 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 419: -#line 1468 "dhcp4_parser.yy" // lalr1.cc:859 + case 421: +#line 1471 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location))); @@ -2473,960 +2479,960 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 2477 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2483 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 420: -#line 1496 "dhcp4_parser.yy" // lalr1.cc:859 + case 422: +#line 1499 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations", l); ctx.stack_.push_back(l); ctx.enter(ctx.RESERVATIONS); } -#line 2488 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2494 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 421: -#line 1501 "dhcp4_parser.yy" // lalr1.cc:859 + case 423: +#line 1504 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2497 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2503 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 426: -#line 1514 "dhcp4_parser.yy" // lalr1.cc:859 + case 428: +#line 1517 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2507 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2513 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 427: -#line 1518 "dhcp4_parser.yy" // lalr1.cc:859 + case 429: +#line 1521 "dhcp4_parser.yy" // lalr1.cc:859 { /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); } -#line 2516 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2522 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 428: -#line 1523 "dhcp4_parser.yy" // lalr1.cc:859 + case 430: +#line 1526 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2526 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2532 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 429: -#line 1527 "dhcp4_parser.yy" // lalr1.cc:859 + case 431: +#line 1530 "dhcp4_parser.yy" // lalr1.cc:859 { /// @todo: an identifier parameter is required. // parsing completed } -#line 2535 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2541 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 449: -#line 1558 "dhcp4_parser.yy" // lalr1.cc:859 + case 451: +#line 1561 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2543 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2549 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 450: -#line 1560 "dhcp4_parser.yy" // lalr1.cc:859 + case 452: +#line 1563 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr next_server(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("next-server", next_server); ctx.leave(); } -#line 2553 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2559 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 451: -#line 1566 "dhcp4_parser.yy" // lalr1.cc:859 + case 453: +#line 1569 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2561 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2567 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 452: -#line 1568 "dhcp4_parser.yy" // lalr1.cc:859 + case 454: +#line 1571 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr srv(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-hostname", srv); ctx.leave(); } -#line 2571 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2577 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 453: -#line 1574 "dhcp4_parser.yy" // lalr1.cc:859 + case 455: +#line 1577 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2579 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2585 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 454: -#line 1576 "dhcp4_parser.yy" // lalr1.cc:859 + case 456: +#line 1579 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr bootfile(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("boot-file-name", bootfile); ctx.leave(); } -#line 2589 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2595 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 455: -#line 1582 "dhcp4_parser.yy" // lalr1.cc:859 + case 457: +#line 1585 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2597 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2603 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 456: -#line 1584 "dhcp4_parser.yy" // lalr1.cc:859 + case 458: +#line 1587 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", addr); ctx.leave(); } -#line 2607 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2613 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 457: -#line 1590 "dhcp4_parser.yy" // lalr1.cc:859 + case 459: +#line 1593 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-addresses", l); ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 2618 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2624 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 458: -#line 1595 "dhcp4_parser.yy" // lalr1.cc:859 + case 460: +#line 1598 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2627 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2633 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 459: -#line 1600 "dhcp4_parser.yy" // lalr1.cc:859 + case 461: +#line 1603 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2635 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2641 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 460: -#line 1602 "dhcp4_parser.yy" // lalr1.cc:859 + case 462: +#line 1605 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); ctx.leave(); } -#line 2645 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2651 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 461: -#line 1608 "dhcp4_parser.yy" // lalr1.cc:859 + case 463: +#line 1611 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2653 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2659 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 462: -#line 1610 "dhcp4_parser.yy" // lalr1.cc:859 + case 464: +#line 1613 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hw-address", hw); ctx.leave(); } -#line 2663 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2669 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 463: -#line 1616 "dhcp4_parser.yy" // lalr1.cc:859 + case 465: +#line 1619 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2671 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2677 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 464: -#line 1618 "dhcp4_parser.yy" // lalr1.cc:859 + case 466: +#line 1621 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-id", hw); ctx.leave(); } -#line 2681 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2687 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 465: -#line 1624 "dhcp4_parser.yy" // lalr1.cc:859 + case 467: +#line 1627 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2689 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2695 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 466: -#line 1626 "dhcp4_parser.yy" // lalr1.cc:859 + case 468: +#line 1629 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("circuit-id", hw); ctx.leave(); } -#line 2699 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2705 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 467: -#line 1632 "dhcp4_parser.yy" // lalr1.cc:859 + case 469: +#line 1635 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2707 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2713 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 468: -#line 1634 "dhcp4_parser.yy" // lalr1.cc:859 + case 470: +#line 1637 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flex-id", hw); ctx.leave(); } -#line 2717 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2723 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 469: -#line 1640 "dhcp4_parser.yy" // lalr1.cc:859 + case 471: +#line 1643 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2725 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2731 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 470: -#line 1642 "dhcp4_parser.yy" // lalr1.cc:859 + case 472: +#line 1645 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); ctx.leave(); } -#line 2735 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2741 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 471: -#line 1648 "dhcp4_parser.yy" // lalr1.cc:859 + case 473: +#line 1651 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-classes", c); ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2746 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2752 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 472: -#line 1653 "dhcp4_parser.yy" // lalr1.cc:859 + case 474: +#line 1656 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2755 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2761 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 473: -#line 1661 "dhcp4_parser.yy" // lalr1.cc:859 + case 475: +#line 1664 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("relay", m); ctx.stack_.push_back(m); ctx.enter(ctx.RELAY); } -#line 2766 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2772 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 474: -#line 1666 "dhcp4_parser.yy" // lalr1.cc:859 + case 476: +#line 1669 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2775 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2781 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 477: -#line 1678 "dhcp4_parser.yy" // lalr1.cc:859 + case 479: +#line 1681 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-classes", l); ctx.stack_.push_back(l); ctx.enter(ctx.CLIENT_CLASSES); } -#line 2786 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2792 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 478: -#line 1683 "dhcp4_parser.yy" // lalr1.cc:859 + case 480: +#line 1686 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2795 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2801 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 481: -#line 1692 "dhcp4_parser.yy" // lalr1.cc:859 + case 483: +#line 1695 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2805 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2811 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 482: -#line 1696 "dhcp4_parser.yy" // lalr1.cc:859 + case 484: +#line 1699 "dhcp4_parser.yy" // lalr1.cc:859 { // The name client class parameter is required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2815 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2821 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 499: -#line 1725 "dhcp4_parser.yy" // lalr1.cc:859 + case 501: +#line 1728 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2823 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2829 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 500: -#line 1727 "dhcp4_parser.yy" // lalr1.cc:859 + case 502: +#line 1730 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); ctx.leave(); } -#line 2833 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2839 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 501: -#line 1733 "dhcp4_parser.yy" // lalr1.cc:859 + case 503: +#line 1736 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("only-if-required", b); } -#line 2842 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2848 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 502: -#line 1742 "dhcp4_parser.yy" // lalr1.cc:859 + case 504: +#line 1745 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); } -#line 2851 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2857 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 503: -#line 1749 "dhcp4_parser.yy" // lalr1.cc:859 + case 505: +#line 1752 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("control-socket", m); ctx.stack_.push_back(m); ctx.enter(ctx.CONTROL_SOCKET); } -#line 2862 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2868 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 504: -#line 1754 "dhcp4_parser.yy" // lalr1.cc:859 + case 506: +#line 1757 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2871 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2877 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 512: -#line 1770 "dhcp4_parser.yy" // lalr1.cc:859 + case 514: +#line 1773 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2879 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2885 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 513: -#line 1772 "dhcp4_parser.yy" // lalr1.cc:859 + case 515: +#line 1775 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-type", stype); ctx.leave(); } -#line 2889 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2895 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 514: -#line 1778 "dhcp4_parser.yy" // lalr1.cc:859 + case 516: +#line 1781 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2897 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2903 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 515: -#line 1780 "dhcp4_parser.yy" // lalr1.cc:859 + case 517: +#line 1783 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-name", name); ctx.leave(); } -#line 2907 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2913 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 516: -#line 1788 "dhcp4_parser.yy" // lalr1.cc:859 + case 518: +#line 1791 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp-ddns", m); ctx.stack_.push_back(m); ctx.enter(ctx.DHCP_DDNS); } -#line 2918 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2924 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 517: -#line 1793 "dhcp4_parser.yy" // lalr1.cc:859 + case 519: +#line 1796 "dhcp4_parser.yy" // lalr1.cc:859 { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 2929 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2935 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 518: -#line 1800 "dhcp4_parser.yy" // lalr1.cc:859 + case 520: +#line 1803 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2939 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2945 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 519: -#line 1804 "dhcp4_parser.yy" // lalr1.cc:859 + case 521: +#line 1807 "dhcp4_parser.yy" // lalr1.cc:859 { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2949 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2955 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 539: -#line 1833 "dhcp4_parser.yy" // lalr1.cc:859 + case 541: +#line 1836 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-updates", b); } -#line 2958 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2964 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 540: -#line 1838 "dhcp4_parser.yy" // lalr1.cc:859 + case 542: +#line 1841 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2966 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2972 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 541: -#line 1840 "dhcp4_parser.yy" // lalr1.cc:859 + case 543: +#line 1843 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("qualifying-suffix", s); ctx.leave(); } -#line 2976 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2982 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 542: -#line 1846 "dhcp4_parser.yy" // lalr1.cc:859 + case 544: +#line 1849 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2984 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2990 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 543: -#line 1848 "dhcp4_parser.yy" // lalr1.cc:859 + case 545: +#line 1851 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-ip", s); ctx.leave(); } -#line 2994 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3000 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 544: -#line 1854 "dhcp4_parser.yy" // lalr1.cc:859 + case 546: +#line 1857 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-port", i); } -#line 3003 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3009 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 545: -#line 1859 "dhcp4_parser.yy" // lalr1.cc:859 + case 547: +#line 1862 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 3011 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3017 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 546: -#line 1861 "dhcp4_parser.yy" // lalr1.cc:859 + case 548: +#line 1864 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-ip", s); ctx.leave(); } -#line 3021 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3027 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 547: -#line 1867 "dhcp4_parser.yy" // lalr1.cc:859 + case 549: +#line 1870 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-port", i); } -#line 3030 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3036 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 548: -#line 1872 "dhcp4_parser.yy" // lalr1.cc:859 + case 550: +#line 1875 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-queue-size", i); } -#line 3039 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3045 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 549: -#line 1877 "dhcp4_parser.yy" // lalr1.cc:859 + case 551: +#line 1880 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NCR_PROTOCOL); } -#line 3047 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3053 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 550: -#line 1879 "dhcp4_parser.yy" // lalr1.cc:859 + case 552: +#line 1882 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3056 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3062 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 551: -#line 1885 "dhcp4_parser.yy" // lalr1.cc:859 + case 553: +#line 1888 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } -#line 3062 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3068 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 552: -#line 1886 "dhcp4_parser.yy" // lalr1.cc:859 + case 554: +#line 1889 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } -#line 3068 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3074 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 553: -#line 1889 "dhcp4_parser.yy" // lalr1.cc:859 + case 555: +#line 1892 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NCR_FORMAT); } -#line 3076 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3082 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 554: -#line 1891 "dhcp4_parser.yy" // lalr1.cc:859 + case 556: +#line 1894 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } -#line 3086 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3092 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 555: -#line 1897 "dhcp4_parser.yy" // lalr1.cc:859 + case 557: +#line 1900 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-include-fqdn", b); } -#line 3095 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3101 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 556: -#line 1902 "dhcp4_parser.yy" // lalr1.cc:859 + case 558: +#line 1905 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-no-update", b); } -#line 3104 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3110 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 557: -#line 1907 "dhcp4_parser.yy" // lalr1.cc:859 + case 559: +#line 1910 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-client-update", b); } -#line 3113 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3119 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 558: -#line 1912 "dhcp4_parser.yy" // lalr1.cc:859 + case 560: +#line 1915 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.REPLACE_CLIENT_NAME); } -#line 3121 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3127 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 559: -#line 1914 "dhcp4_parser.yy" // lalr1.cc:859 + case 561: +#line 1917 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3130 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3136 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 560: -#line 1920 "dhcp4_parser.yy" // lalr1.cc:859 + case 562: +#line 1923 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } -#line 3138 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3144 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 561: -#line 1923 "dhcp4_parser.yy" // lalr1.cc:859 + case 563: +#line 1926 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } -#line 3146 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3152 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 562: -#line 1926 "dhcp4_parser.yy" // lalr1.cc:859 + case 564: +#line 1929 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } -#line 3154 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3160 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 563: -#line 1929 "dhcp4_parser.yy" // lalr1.cc:859 + case 565: +#line 1932 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } -#line 3162 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3168 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 564: -#line 1932 "dhcp4_parser.yy" // lalr1.cc:859 + case 566: +#line 1935 "dhcp4_parser.yy" // lalr1.cc:859 { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); } -#line 3171 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3177 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 565: -#line 1938 "dhcp4_parser.yy" // lalr1.cc:859 + case 567: +#line 1941 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 3179 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3185 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 566: -#line 1940 "dhcp4_parser.yy" // lalr1.cc:859 + case 568: +#line 1943 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("generated-prefix", s); ctx.leave(); } -#line 3189 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3195 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 567: -#line 1948 "dhcp4_parser.yy" // lalr1.cc:859 + case 569: +#line 1951 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 3197 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3203 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 568: -#line 1950 "dhcp4_parser.yy" // lalr1.cc:859 + case 570: +#line 1953 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3206 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3212 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 569: -#line 1955 "dhcp4_parser.yy" // lalr1.cc:859 + case 571: +#line 1958 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 3214 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3220 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 570: -#line 1957 "dhcp4_parser.yy" // lalr1.cc:859 + case 572: +#line 1960 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3223 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3229 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 571: -#line 1962 "dhcp4_parser.yy" // lalr1.cc:859 + case 573: +#line 1965 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 3231 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3237 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 572: -#line 1964 "dhcp4_parser.yy" // lalr1.cc:859 + case 574: +#line 1967 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3240 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3246 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 573: -#line 1974 "dhcp4_parser.yy" // lalr1.cc:859 + case 575: +#line 1977 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("Logging", m); ctx.stack_.push_back(m); ctx.enter(ctx.LOGGING); } -#line 3251 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3257 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 574: -#line 1979 "dhcp4_parser.yy" // lalr1.cc:859 + case 576: +#line 1982 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3260 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3266 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 575: -#line 1984 "dhcp4_parser.yy" // lalr1.cc:859 + case 577: +#line 1987 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the Logging map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3270 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3276 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 576: -#line 1988 "dhcp4_parser.yy" // lalr1.cc:859 + case 578: +#line 1991 "dhcp4_parser.yy" // lalr1.cc:859 { // parsing completed } -#line 3278 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3284 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 580: -#line 2004 "dhcp4_parser.yy" // lalr1.cc:859 + case 582: +#line 2007 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("loggers", l); ctx.stack_.push_back(l); ctx.enter(ctx.LOGGERS); } -#line 3289 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3295 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 581: -#line 2009 "dhcp4_parser.yy" // lalr1.cc:859 + case 583: +#line 2012 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3298 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3304 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 584: -#line 2021 "dhcp4_parser.yy" // lalr1.cc:859 + case 586: +#line 2024 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 3308 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3314 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 585: -#line 2025 "dhcp4_parser.yy" // lalr1.cc:859 + case 587: +#line 2028 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 3316 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3322 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 595: -#line 2042 "dhcp4_parser.yy" // lalr1.cc:859 + case 597: +#line 2045 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 3325 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3331 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 596: -#line 2047 "dhcp4_parser.yy" // lalr1.cc:859 + case 598: +#line 2050 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 3333 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3339 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 597: -#line 2049 "dhcp4_parser.yy" // lalr1.cc:859 + case 599: +#line 2052 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 3343 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3349 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 598: -#line 2055 "dhcp4_parser.yy" // lalr1.cc:859 + case 600: +#line 2058 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output_options", l); ctx.stack_.push_back(l); ctx.enter(ctx.OUTPUT_OPTIONS); } -#line 3354 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3360 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 599: -#line 2060 "dhcp4_parser.yy" // lalr1.cc:859 + case 601: +#line 2063 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3363 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3369 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 602: -#line 2069 "dhcp4_parser.yy" // lalr1.cc:859 + case 604: +#line 2072 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3373 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3379 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 603: -#line 2073 "dhcp4_parser.yy" // lalr1.cc:859 + case 605: +#line 2076 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 3381 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3387 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 610: -#line 2087 "dhcp4_parser.yy" // lalr1.cc:859 + case 612: +#line 2090 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 3389 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3395 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 611: -#line 2089 "dhcp4_parser.yy" // lalr1.cc:859 + case 613: +#line 2092 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 3399 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3405 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 612: -#line 2095 "dhcp4_parser.yy" // lalr1.cc:859 + case 614: +#line 2098 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); } -#line 3408 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3414 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 613: -#line 2100 "dhcp4_parser.yy" // lalr1.cc:859 + case 615: +#line 2103 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); } -#line 3417 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3423 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 614: -#line 2105 "dhcp4_parser.yy" // lalr1.cc:859 + case 616: +#line 2108 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); } -#line 3426 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3432 "dhcp4_parser.cc" // lalr1.cc:859 break; -#line 3430 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3436 "dhcp4_parser.cc" // lalr1.cc:859 default: break; } @@ -3681,112 +3687,112 @@ namespace isc { namespace dhcp { } - const short int Dhcp4Parser::yypact_ninf_ = -765; + const short int Dhcp4Parser::yypact_ninf_ = -756; const signed char Dhcp4Parser::yytable_ninf_ = -1; const short int Dhcp4Parser::yypact_[] = { - 310, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, 30, 22, 66, 72, 108, 111, - 125, 154, 195, 216, 233, 242, 249, 257, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, 22, 1, 34, 60, 43, 171, - 6, 115, 157, 368, 382, -51, 428, 82, -765, 271, - 273, 279, 281, 289, -765, -765, -765, -765, -765, 291, - -765, 46, -765, -765, -765, -765, -765, -765, -765, 292, - 294, -765, -765, -765, -765, -765, -765, 297, 299, 300, - 302, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, 303, -765, -765, -765, 126, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, 314, -765, 137, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, 315, 317, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, 141, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, 143, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, 285, - 319, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, 318, -765, -765, 321, -765, -765, -765, - 325, -765, -765, 322, 320, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, 327, 328, - -765, -765, -765, -765, 326, 330, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, 144, -765, - -765, -765, 331, -765, -765, 333, -765, 337, 338, -765, - -765, 339, 341, 342, -765, -765, -765, -765, -765, 145, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, 147, -765, -765, -765, - 22, 22, -765, 190, 345, 348, 350, 351, 357, -765, - 34, -765, 358, 209, 213, 362, 367, 370, 371, 372, - 373, 224, 225, 231, 236, 387, 391, 394, 396, 398, - 399, 401, 423, 427, 431, 288, 433, 443, 60, -765, - 444, 445, 446, 307, 43, -765, 447, 464, 465, 466, - 467, 468, 469, 316, 324, 471, 472, 474, 475, 476, - 171, -765, 477, 6, -765, 481, 482, 483, 484, 485, - 486, 487, 488, -765, 115, -765, 489, 491, 346, 492, - 493, 499, 347, -765, 368, 501, 349, 355, -765, 382, - 502, 504, 100, -765, 356, 506, 507, 359, 514, 361, - 363, 516, 518, 364, 366, 369, 519, 523, 428, -765, - 524, 82, -765, -765, -765, 526, 527, 529, 22, 22, - 22, -765, 530, -765, -765, 374, 381, 397, 548, 549, - 552, -765, -765, -765, -765, 553, 554, 555, 556, 557, - 405, 558, 560, 561, 562, -765, 563, 564, -765, 567, - 215, 220, -765, -765, 410, 411, 416, 569, 418, 419, - 420, -765, -765, 237, 567, 421, 574, 573, -765, 424, - -765, 567, 425, 426, 429, 430, 432, 434, 435, -765, - 436, 437, -765, 438, 439, 440, -765, -765, 441, -765, - -765, -765, 442, 22, -765, -765, 448, 449, -765, 450, - -765, -765, 17, 457, -765, -765, -765, -32, 451, -765, - 583, -765, 22, 60, 82, -765, -765, -765, 43, -765, - -765, -765, 378, 378, 593, 594, 595, 596, 597, -765, - -765, -765, 12, 602, 603, 18, 55, 428, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, 604, - -765, -765, -765, -765, -765, -765, -765, -765, -765, 605, - 184, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, 606, -765, 151, 166, 170, -765, -765, -765, - -765, 586, 610, 611, 612, 613, -765, -765, 614, 615, - 616, 617, 618, -765, 180, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, 181, -765, 619, 620, -765, -765, 621, - 623, -765, -765, 622, 626, -765, -765, 624, 628, -765, - -765, 627, 629, -765, -765, -765, -765, -765, -765, 47, - -765, -765, -765, -765, -765, -765, -765, 58, -765, -765, - 630, 631, -765, 633, 634, 635, 636, 637, 638, 193, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, 206, -765, -765, -765, 208, 478, -765, 639, - 640, -765, -765, 641, 643, -765, -765, -765, -765, 642, - -765, 85, -765, -765, -765, -765, 644, 645, 647, 648, - 495, 494, 497, 496, 500, 653, 655, 503, 505, 508, - 509, 510, 378, -765, -765, 378, -765, 593, 171, -765, - 594, 368, -765, 595, 382, -765, 596, 211, -765, 597, - 12, -765, 229, 602, -765, -51, -765, 603, 511, 513, - 515, 517, 520, 521, 18, -765, 656, 658, 55, -765, - -765, -765, 659, 661, 6, -765, 604, 115, -765, 605, - 664, -765, -1, 606, -765, 280, 525, 528, 531, -765, - -765, -765, -765, -765, 532, 533, -765, -765, -765, -765, - -765, -765, 219, -765, 228, -765, 666, -765, 668, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, 247, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, 673, -765, -765, -765, -765, -765, -765, - -765, -765, -765, 672, 669, -765, -765, -765, -765, -765, - 259, -765, -765, -765, -765, -765, -765, -765, -765, 534, - 535, -765, -765, 536, 263, -765, 675, -765, 567, -765, - 677, -765, -765, -765, -765, -765, 267, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, 211, -765, 680, 537, - -765, 229, -765, -765, -765, -765, -765, -765, -765, 682, - 538, 683, -1, -765, -765, 541, -765, -765, 689, -765, - 542, -765, -765, 688, -765, -765, 101, -765, -45, 688, - -765, -765, 696, 697, 699, 270, -765, -765, -765, -765, - -765, -765, 700, 546, 551, 566, -45, -765, 550, -765, - -765, -765, -765, -765 + 419, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, 37, 25, 42, 46, 53, 57, + 73, 108, 152, 167, 202, 203, 215, 224, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, 25, -92, 36, 141, 56, 63, + 19, 177, 14, 218, 157, -48, 437, 110, -756, 72, + 150, 247, 233, 249, -756, -756, -756, -756, -756, 261, + -756, 32, -756, -756, -756, -756, -756, -756, -756, 270, + 281, -756, -756, -756, -756, -756, -756, 290, 301, 305, + 310, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, 316, -756, -756, -756, 59, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, 317, -756, + 71, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, 319, 320, -756, -756, -756, + -756, -756, -756, -756, -756, -756, 74, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, 88, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + 254, 284, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, 300, -756, -756, 322, -756, -756, + -756, 323, -756, -756, 321, 333, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, 334, + 337, -756, -756, -756, -756, 335, 339, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, 111, + -756, -756, -756, 340, -756, -756, 341, -756, 342, 348, + -756, -756, 351, 352, 353, -756, -756, -756, -756, -756, + 120, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, 122, -756, -756, + -756, 25, 25, -756, 201, 356, 358, 363, 365, 367, + -756, 36, -756, 368, 213, 220, 378, 380, 382, 384, + 386, 388, 236, 242, 243, 245, 392, 401, 402, 408, + 410, 411, 412, 414, 415, 416, 417, 263, 420, 422, + 141, -756, 423, 424, 425, 262, 56, -756, 426, 427, + 428, 429, 430, 434, 436, 282, 285, 438, 439, 443, + 444, 63, -756, 445, 19, -756, 446, 447, 448, 449, + 450, 451, 452, 455, -756, 177, -756, 457, 458, 306, + 459, 462, 463, 307, -756, 218, 465, 309, 311, -756, + 157, 471, 472, 5, -756, 318, 473, 476, 325, 477, + 326, 327, 483, 484, 328, 329, 330, 489, 490, 437, + -756, 492, 110, -756, -756, -756, 493, 494, 497, 25, + 25, 25, -756, 498, -756, -756, 354, 355, 359, 499, + 502, 495, -756, -756, -756, -756, 505, 506, 511, 513, + 514, 362, 517, 534, 535, 536, 537, -756, 539, 540, + -756, 543, 107, 127, -756, -756, 421, 431, 432, 572, + 433, 435, 440, -756, -756, 238, 543, 441, 571, -756, + 442, -756, 543, 453, 454, 456, 460, 461, 464, 466, + -756, 467, 468, -756, 469, 470, 474, -756, -756, 475, + -756, -756, -756, 478, 25, -756, -756, 479, 480, -756, + 481, -756, -756, 21, 370, -756, -756, -756, -37, 482, + -756, 575, -756, 25, 141, 110, -756, -756, -756, 56, + -756, -756, -756, 491, 491, 574, 576, 577, 578, 579, + -756, -756, -756, 165, 580, 581, 585, 100, -12, 437, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, 587, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, 99, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, 589, -756, 146, 173, 227, -756, + -756, -756, -756, 593, 597, 598, 599, 600, -756, -756, + 601, 602, 603, 604, 605, -756, 229, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, 230, -756, 607, 496, -756, + -756, 609, 613, -756, -756, 611, 617, -756, -756, 615, + 620, -756, -756, 623, 627, -756, -756, -756, -756, -756, + -756, 126, -756, -756, -756, -756, -756, -756, -756, 154, + -756, -756, 625, 631, -756, -756, 629, 638, -756, 606, + 639, 640, 641, 642, 643, 237, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, 255, -756, + -756, -756, 269, 500, -756, 636, 645, -756, -756, -756, + -756, 644, -756, 169, -756, -756, -756, -756, 646, 647, + 649, 650, 501, 503, 504, 507, 508, 651, 652, 510, + 512, 515, 516, 509, 491, -756, -756, 491, -756, 574, + 63, -756, 576, 218, -756, 577, 157, -756, 578, 387, + -756, 579, 165, -756, 85, 580, -756, 177, -756, 581, + -48, -756, 585, 518, 519, 520, 521, 522, 523, 100, + -756, 653, 655, -12, -756, -756, -756, 656, 658, 19, + -756, 587, 661, -756, 155, 589, -756, 302, 525, 526, + 527, -756, -756, -756, -756, -756, 528, 529, -756, -756, + -756, -756, -756, -756, 283, -756, 292, -756, 664, -756, + 665, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, 293, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, 662, -756, -756, -756, -756, + -756, -756, -756, -756, -756, 668, 685, -756, -756, -756, + -756, -756, 681, -756, 294, -756, -756, -756, -756, -756, + -756, -756, -756, 532, 533, -756, -756, 538, 295, -756, + 543, -756, 688, -756, -756, -756, -756, -756, 303, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, 387, -756, + 689, 541, -756, 85, -756, -756, -756, -756, -756, -756, + -756, 690, 542, 691, 155, -756, -756, 545, -756, -756, + 692, -756, 547, -756, -756, 693, -756, -756, 258, -756, + -39, 693, -756, -756, 694, 695, 702, 304, -756, -756, + -756, -756, -756, -756, 704, 548, 552, 553, -39, -756, + 559, -756, -756, -756, -756, -756 }; const unsigned short int @@ -3796,552 +3802,554 @@ namespace isc { namespace dhcp { 20, 22, 24, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 43, 36, 32, 31, 28, 29, 30, 35, 3, 33, 34, - 56, 5, 68, 7, 116, 9, 246, 11, 403, 13, - 428, 15, 328, 17, 336, 19, 373, 21, 211, 23, - 518, 25, 575, 27, 45, 39, 0, 0, 0, 0, - 0, 430, 0, 338, 375, 0, 0, 0, 47, 0, - 46, 0, 0, 40, 66, 573, 567, 569, 571, 0, - 65, 0, 58, 60, 62, 63, 64, 61, 105, 0, - 0, 449, 451, 453, 129, 131, 133, 0, 0, 0, - 0, 238, 326, 365, 298, 416, 418, 189, 477, 203, - 222, 0, 503, 516, 98, 0, 70, 72, 73, 74, - 75, 91, 92, 78, 79, 80, 81, 82, 86, 87, - 76, 77, 84, 85, 96, 97, 93, 94, 95, 83, - 88, 89, 90, 118, 120, 124, 0, 115, 0, 107, - 109, 110, 111, 112, 113, 114, 277, 279, 281, 395, - 275, 283, 285, 0, 0, 291, 289, 287, 420, 473, - 274, 250, 251, 252, 265, 0, 248, 255, 269, 270, - 271, 256, 257, 260, 261, 263, 258, 259, 253, 254, - 272, 273, 262, 266, 267, 268, 264, 414, 413, 409, - 410, 408, 0, 405, 407, 411, 412, 471, 459, 461, - 465, 463, 469, 467, 455, 448, 442, 446, 447, 0, - 431, 432, 443, 444, 445, 439, 434, 440, 436, 437, - 438, 441, 435, 0, 355, 174, 0, 359, 357, 362, - 0, 351, 352, 0, 339, 340, 342, 354, 343, 344, - 345, 361, 346, 347, 348, 349, 350, 389, 0, 0, - 387, 388, 391, 392, 0, 376, 377, 379, 380, 381, - 382, 383, 384, 385, 386, 218, 220, 215, 0, 213, - 216, 217, 0, 540, 542, 0, 545, 0, 0, 549, - 553, 0, 0, 0, 558, 565, 538, 536, 537, 0, - 520, 522, 523, 524, 525, 526, 527, 528, 529, 530, - 531, 532, 533, 534, 535, 580, 0, 577, 579, 44, - 0, 0, 37, 0, 0, 0, 0, 0, 0, 55, - 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 5, 68, 7, 117, 9, 247, 11, 405, 13, + 430, 15, 330, 17, 338, 19, 375, 21, 212, 23, + 520, 25, 577, 27, 45, 39, 0, 0, 0, 0, + 0, 432, 0, 340, 377, 0, 0, 0, 47, 0, + 46, 0, 0, 40, 66, 575, 569, 571, 573, 0, + 65, 0, 58, 60, 62, 63, 64, 61, 106, 0, + 0, 451, 453, 455, 130, 132, 134, 0, 0, 0, + 0, 239, 328, 367, 300, 418, 420, 190, 479, 422, + 204, 223, 0, 505, 518, 99, 0, 70, 72, 73, + 74, 75, 91, 92, 78, 79, 80, 81, 82, 86, + 87, 76, 77, 84, 85, 96, 97, 98, 93, 94, + 95, 83, 88, 89, 90, 119, 121, 125, 0, 116, + 0, 108, 110, 111, 112, 113, 114, 115, 278, 280, + 282, 397, 276, 284, 286, 0, 0, 292, 290, 288, + 475, 275, 251, 252, 253, 266, 0, 249, 256, 270, + 271, 272, 257, 258, 261, 262, 264, 259, 260, 254, + 255, 273, 274, 263, 267, 268, 269, 265, 416, 415, + 411, 412, 410, 0, 407, 409, 413, 414, 473, 461, + 463, 467, 465, 471, 469, 457, 450, 444, 448, 449, + 0, 433, 434, 445, 446, 447, 441, 436, 442, 438, + 439, 440, 443, 437, 0, 357, 175, 0, 361, 359, + 364, 0, 353, 354, 0, 341, 342, 344, 356, 345, + 346, 347, 363, 348, 349, 350, 351, 352, 391, 0, + 0, 389, 390, 393, 394, 0, 378, 379, 381, 382, + 383, 384, 385, 386, 387, 388, 219, 221, 216, 0, + 214, 217, 218, 0, 542, 544, 0, 547, 0, 0, + 551, 555, 0, 0, 0, 560, 567, 540, 538, 539, + 0, 522, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 582, 0, 579, 581, + 44, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 55, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, - 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, + 0, 69, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 247, 0, 0, 404, 0, 0, 0, 0, 0, - 0, 0, 0, 429, 0, 329, 0, 0, 0, 0, - 0, 0, 0, 337, 0, 0, 0, 0, 374, 0, - 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, - 0, 0, 576, 48, 41, 0, 0, 0, 0, 0, - 0, 59, 0, 103, 104, 0, 0, 0, 0, 0, - 0, 99, 100, 101, 102, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 502, 0, 0, 71, 0, - 0, 0, 128, 108, 0, 0, 0, 0, 0, 0, - 0, 296, 297, 0, 0, 0, 0, 0, 249, 0, - 406, 0, 0, 0, 0, 0, 0, 0, 0, 433, - 0, 0, 353, 0, 0, 0, 364, 341, 0, 393, - 394, 378, 0, 0, 214, 539, 0, 0, 544, 0, - 547, 548, 0, 0, 555, 556, 557, 0, 0, 521, - 0, 578, 0, 0, 0, 568, 570, 572, 0, 450, - 452, 454, 0, 0, 135, 240, 330, 367, 300, 38, - 417, 419, 0, 0, 205, 0, 0, 0, 49, 119, - 122, 123, 121, 126, 127, 125, 278, 280, 282, 397, - 276, 284, 286, 293, 294, 295, 292, 290, 288, 422, - 0, 415, 472, 460, 462, 466, 464, 470, 468, 456, - 356, 175, 360, 358, 363, 390, 219, 221, 541, 543, - 546, 551, 552, 550, 554, 560, 561, 562, 563, 564, - 559, 566, 0, 42, 0, 0, 0, 161, 167, 169, - 171, 0, 0, 0, 0, 0, 183, 185, 0, 0, - 0, 0, 0, 160, 0, 141, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 156, 157, 158, 153, - 159, 154, 155, 0, 139, 0, 136, 137, 244, 0, - 241, 242, 334, 0, 331, 332, 371, 0, 368, 369, - 304, 0, 301, 302, 198, 199, 200, 201, 202, 0, - 191, 193, 194, 195, 196, 197, 481, 0, 479, 209, - 0, 206, 207, 0, 0, 0, 0, 0, 0, 0, - 224, 226, 227, 228, 229, 230, 231, 512, 514, 511, - 509, 510, 0, 505, 507, 508, 0, 51, 401, 0, - 398, 399, 426, 0, 423, 424, 457, 475, 476, 0, - 584, 0, 582, 67, 574, 106, 0, 0, 0, 0, + 0, 0, 248, 0, 0, 406, 0, 0, 0, 0, + 0, 0, 0, 0, 431, 0, 331, 0, 0, 0, + 0, 0, 0, 0, 339, 0, 0, 0, 0, 376, + 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 130, 132, 0, 134, 0, 0, 239, - 0, 338, 327, 0, 375, 366, 0, 0, 299, 0, - 0, 190, 483, 0, 478, 0, 204, 0, 0, 0, - 0, 0, 0, 0, 0, 223, 0, 0, 0, 504, - 517, 53, 0, 52, 0, 396, 0, 430, 421, 0, - 0, 474, 0, 0, 581, 0, 0, 0, 0, 173, - 176, 177, 178, 179, 0, 0, 187, 188, 180, 181, - 182, 142, 0, 138, 0, 243, 0, 333, 0, 370, - 325, 322, 311, 312, 314, 308, 309, 310, 320, 321, - 319, 0, 306, 313, 323, 324, 315, 316, 317, 318, - 303, 192, 499, 0, 497, 498, 490, 491, 495, 496, - 492, 493, 494, 0, 484, 485, 487, 488, 489, 480, - 0, 208, 232, 233, 234, 235, 236, 237, 225, 0, - 0, 506, 50, 0, 0, 400, 0, 425, 0, 598, - 0, 596, 594, 588, 592, 593, 0, 586, 590, 591, - 589, 583, 163, 164, 165, 166, 162, 168, 170, 172, - 184, 186, 140, 245, 335, 372, 0, 305, 0, 0, - 482, 0, 210, 513, 515, 54, 402, 427, 458, 0, - 0, 0, 0, 585, 307, 0, 501, 486, 0, 595, - 0, 587, 500, 0, 597, 602, 0, 600, 0, 0, - 599, 610, 0, 0, 0, 0, 604, 606, 607, 608, - 609, 601, 0, 0, 0, 0, 0, 603, 0, 612, - 613, 614, 605, 611 + 521, 0, 0, 578, 48, 41, 0, 0, 0, 0, + 0, 0, 59, 0, 104, 105, 0, 0, 0, 0, + 0, 0, 100, 101, 102, 103, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, + 71, 0, 0, 0, 129, 109, 0, 0, 0, 0, + 0, 0, 0, 298, 299, 0, 0, 0, 0, 250, + 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, + 435, 0, 0, 355, 0, 0, 0, 366, 343, 0, + 395, 396, 380, 0, 0, 215, 541, 0, 0, 546, + 0, 549, 550, 0, 0, 557, 558, 559, 0, 0, + 523, 0, 580, 0, 0, 0, 570, 572, 574, 0, + 452, 454, 456, 0, 0, 136, 241, 332, 369, 302, + 38, 419, 421, 0, 0, 424, 206, 0, 0, 0, + 49, 120, 123, 124, 122, 127, 128, 126, 279, 281, + 283, 399, 277, 285, 287, 294, 295, 296, 297, 293, + 291, 289, 0, 417, 474, 462, 464, 468, 466, 472, + 470, 458, 358, 176, 362, 360, 365, 392, 220, 222, + 543, 545, 548, 553, 554, 552, 556, 562, 563, 564, + 565, 566, 561, 568, 0, 42, 0, 0, 0, 162, + 168, 170, 172, 0, 0, 0, 0, 0, 184, 186, + 0, 0, 0, 0, 0, 161, 0, 142, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 157, 158, + 159, 154, 160, 155, 156, 0, 140, 0, 137, 138, + 245, 0, 242, 243, 336, 0, 333, 334, 373, 0, + 370, 371, 306, 0, 303, 304, 199, 200, 201, 202, + 203, 0, 192, 194, 195, 196, 197, 198, 483, 0, + 481, 428, 0, 425, 426, 210, 0, 207, 208, 0, + 0, 0, 0, 0, 0, 0, 225, 227, 228, 229, + 230, 231, 232, 514, 516, 513, 511, 512, 0, 507, + 509, 510, 0, 51, 403, 0, 400, 401, 459, 477, + 478, 0, 586, 0, 584, 67, 576, 107, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 131, 133, 0, 135, 0, + 0, 240, 0, 340, 329, 0, 377, 368, 0, 0, + 301, 0, 0, 191, 485, 0, 480, 432, 423, 0, + 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, + 224, 0, 0, 0, 506, 519, 53, 0, 52, 0, + 398, 0, 0, 476, 0, 0, 583, 0, 0, 0, + 0, 174, 177, 178, 179, 180, 0, 0, 188, 189, + 181, 182, 183, 143, 0, 139, 0, 244, 0, 335, + 0, 372, 327, 324, 313, 314, 316, 310, 311, 312, + 322, 323, 321, 0, 308, 315, 325, 326, 317, 318, + 319, 320, 305, 193, 501, 0, 499, 500, 492, 493, + 497, 498, 494, 495, 496, 0, 486, 487, 489, 490, + 491, 482, 0, 427, 0, 209, 233, 234, 235, 236, + 237, 238, 226, 0, 0, 508, 50, 0, 0, 402, + 0, 600, 0, 598, 596, 590, 594, 595, 0, 588, + 592, 593, 591, 585, 164, 165, 166, 167, 163, 169, + 171, 173, 185, 187, 141, 246, 337, 374, 0, 307, + 0, 0, 484, 0, 429, 211, 515, 517, 54, 404, + 460, 0, 0, 0, 0, 587, 309, 0, 503, 488, + 0, 597, 0, 589, 502, 0, 599, 604, 0, 602, + 0, 0, 601, 612, 0, 0, 0, 0, 606, 608, + 609, 610, 611, 603, 0, 0, 0, 0, 0, 605, + 0, 614, 615, 616, 607, 613 }; const short int Dhcp4Parser::yypgoto_[] = { - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -40, -765, 155, -765, -765, - -765, -765, -765, -765, -765, -765, -468, -765, -765, -765, - -66, -765, -765, -765, 304, -765, -765, -765, -765, 167, - 365, -23, -11, -9, -765, -765, 9, -765, -765, 165, - 352, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -52, -765, -547, -37, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -22, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -53, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -58, -765, -765, -765, -55, 353, -765, -765, - -765, -765, -765, -765, -765, -47, -765, -765, -765, -765, - -765, -765, -764, -765, -765, -765, -31, -765, -765, -765, - 8, 377, -765, -765, -765, -765, -765, -765, -765, -765, - -756, -765, -765, -765, -42, -765, -5, -765, -739, -765, - -765, -765, -765, -765, -765, -765, -765, -16, -765, -765, - -157, -61, -765, -765, -765, -765, -765, 10, -765, -765, - -765, 11, -765, 375, -765, -62, -765, -765, -765, -765, - -765, -56, -765, -765, -765, -765, -765, -3, -765, -765, - -765, 15, -765, -765, -765, 13, -765, 376, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -18, - -765, -765, -765, -20, 400, -765, -765, -54, -765, -34, - -765, -765, -765, -765, -765, -17, -765, -765, -765, -13, - -765, 392, -46, -765, -26, -765, 3, -765, 207, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -736, -765, -765, -765, - -765, -765, 19, -765, -765, -765, -133, -765, -765, -765, - -765, -765, -765, -765, -765, 2, -765, -765, -765, -765, - -765, -765, -765, -765, 238, 379, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, - -765, -765, -765, -765, -765, -765, -765, -765, -765, 262, - 380, -765, -765, -765, -10, -765, -765, -135, -765, -765, - -765, -765, -765, -765, -151, -765, -765, -167, -765, -765, - -765, -765, -765 + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -51, -756, 112, -756, -756, + -756, -756, -756, -756, -756, -756, -475, -756, -756, -756, + -66, -756, -756, -756, 397, -756, -756, -756, -756, 185, + 371, -44, -43, -28, -756, -756, -4, -756, -756, 191, + 376, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -23, -756, -531, -10, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -45, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -25, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -33, -756, -756, -756, -22, 344, -756, -756, + -756, -756, -756, -756, -756, -35, -756, -756, -756, -756, + -756, -756, -755, -756, -756, -756, 6, -756, -756, -756, + 4, 389, -756, -756, -756, -756, -756, -756, -756, -756, + -746, -756, -756, -756, -64, -756, -16, -756, -741, -756, + -756, -756, -756, -756, -756, -756, -756, 3, -756, -756, + -143, -61, -756, -756, -756, -756, -756, 15, -756, -756, + -756, 24, -756, 372, -756, -62, -756, -756, -756, -756, + -756, -56, -756, -756, -756, -756, -756, -14, -756, -756, + -756, 16, -756, -756, -756, 22, -756, 381, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -19, + -756, -756, -756, -9, 409, -756, -756, -54, -756, -26, + -756, -38, -756, -756, -756, 13, -756, -756, -756, 17, + -756, 400, -8, -756, 2, -756, 12, -756, 214, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -740, -756, -756, -756, + -756, -756, 23, -756, -756, -756, -126, -756, -756, -756, + -756, -756, -756, -756, -756, 7, -756, -756, -756, -756, + -756, -756, -756, -756, 240, 373, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, 266, + 374, -756, -756, -756, -2, -756, -756, -130, -756, -756, + -756, -756, -756, -756, -146, -756, -756, -161, -756, -756, + -756, -756, -756 }; const short int Dhcp4Parser::yydefgoto_[] = { -1, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 36, 37, 38, 65, 560, - 82, 83, 39, 64, 79, 80, 569, 727, 802, 803, - 643, 41, 66, 91, 92, 93, 334, 43, 67, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 342, 158, - 159, 45, 68, 160, 370, 161, 371, 572, 162, 372, - 575, 163, 134, 348, 135, 349, 136, 350, 665, 666, - 667, 765, 644, 645, 646, 746, 916, 647, 747, 648, - 748, 649, 749, 650, 651, 407, 652, 653, 654, 655, - 656, 657, 658, 659, 755, 660, 756, 661, 662, 137, - 361, 689, 690, 691, 692, 693, 694, 695, 138, 363, - 700, 701, 702, 785, 59, 75, 288, 289, 290, 420, - 291, 421, 139, 364, 709, 710, 711, 712, 713, 714, - 715, 716, 140, 355, 669, 670, 671, 768, 47, 69, - 185, 186, 187, 380, 188, 376, 189, 377, 190, 378, - 191, 381, 192, 382, 193, 387, 194, 386, 195, 385, - 586, 196, 197, 141, 358, 681, 682, 683, 777, 851, - 852, 142, 356, 53, 72, 673, 674, 675, 771, 55, - 73, 253, 254, 255, 256, 257, 258, 259, 406, 260, - 410, 261, 409, 262, 263, 411, 264, 143, 357, 677, - 678, 679, 774, 57, 74, 274, 275, 276, 277, 278, - 415, 279, 280, 281, 282, 199, 379, 729, 730, 731, - 804, 49, 70, 212, 213, 214, 392, 144, 359, 145, - 360, 202, 388, 733, 734, 735, 807, 51, 71, 229, - 230, 231, 146, 345, 147, 346, 148, 347, 235, 402, - 738, 810, 236, 396, 237, 397, 238, 399, 239, 398, - 240, 401, 241, 400, 242, 395, 206, 389, 739, 149, - 362, 697, 698, 782, 873, 874, 875, 876, 877, 928, - 878, 150, 151, 366, 722, 723, 724, 796, 725, 797, - 152, 367, 61, 76, 309, 310, 311, 312, 425, 313, - 426, 314, 315, 428, 316, 317, 318, 431, 613, 319, - 432, 320, 321, 322, 323, 436, 620, 324, 437, 94, - 336, 95, 337, 96, 338, 97, 335, 63, 77, 326, - 327, 328, 440, 741, 742, 812, 906, 907, 908, 909, - 941, 910, 939, 956, 957, 958, 965, 966, 967, 972, - 968, 969, 970 + 23, 24, 25, 26, 27, 36, 37, 38, 65, 561, + 82, 83, 39, 64, 79, 80, 571, 733, 807, 808, + 645, 41, 66, 91, 92, 93, 335, 43, 67, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 343, 160, + 161, 45, 68, 162, 372, 163, 373, 574, 164, 374, + 577, 165, 135, 349, 136, 350, 137, 351, 667, 668, + 669, 767, 646, 647, 648, 748, 918, 649, 749, 650, + 750, 651, 751, 652, 653, 408, 654, 655, 656, 657, + 658, 659, 660, 661, 757, 662, 758, 663, 664, 138, + 362, 691, 692, 693, 694, 695, 696, 697, 139, 365, + 706, 707, 708, 790, 59, 75, 289, 290, 291, 421, + 292, 422, 140, 366, 715, 716, 717, 718, 719, 720, + 721, 722, 141, 356, 671, 672, 673, 770, 47, 69, + 186, 187, 188, 382, 189, 378, 190, 379, 191, 380, + 192, 383, 193, 384, 194, 389, 195, 388, 196, 387, + 589, 197, 198, 142, 359, 683, 684, 685, 779, 853, + 854, 143, 357, 53, 72, 675, 676, 677, 773, 55, + 73, 254, 255, 256, 257, 258, 259, 260, 407, 261, + 411, 262, 410, 263, 264, 412, 265, 144, 358, 679, + 680, 681, 776, 57, 74, 275, 276, 277, 278, 279, + 416, 280, 281, 282, 283, 200, 381, 735, 736, 737, + 809, 49, 70, 213, 214, 215, 393, 145, 360, 146, + 361, 147, 364, 702, 703, 704, 787, 51, 71, 230, + 231, 232, 148, 346, 149, 347, 150, 348, 236, 403, + 740, 812, 237, 397, 238, 398, 239, 400, 240, 399, + 241, 402, 242, 401, 243, 396, 207, 390, 741, 151, + 363, 699, 700, 784, 875, 876, 877, 878, 879, 930, + 880, 152, 153, 368, 728, 729, 730, 801, 731, 802, + 154, 369, 61, 76, 310, 311, 312, 313, 426, 314, + 427, 315, 316, 429, 317, 318, 319, 432, 615, 320, + 433, 321, 322, 323, 324, 437, 622, 325, 438, 94, + 337, 95, 338, 96, 339, 97, 336, 63, 77, 327, + 328, 329, 441, 743, 744, 814, 908, 909, 910, 911, + 943, 912, 941, 958, 959, 960, 967, 968, 969, 974, + 970, 971, 972 }; const unsigned short int Dhcp4Parser::yytable_[] = { - 90, 124, 157, 180, 208, 225, 663, 251, 270, 287, - 306, 243, 272, 846, 164, 200, 215, 227, 273, 265, - 283, 847, 307, 203, 78, 232, 587, 29, 209, 30, - 28, 31, 611, 592, 165, 201, 216, 228, 850, 266, - 284, 859, 308, 204, 84, 233, 181, 285, 286, 340, - 780, 252, 271, 781, 341, 153, 154, 245, 182, 155, - 183, 783, 156, 113, 784, 210, 198, 211, 226, 115, - 116, 98, 205, 40, 234, 207, 115, 116, 184, 42, - 99, 100, 101, 102, 103, 104, 105, 106, 813, 176, - 961, 814, 177, 962, 963, 964, 615, 616, 617, 618, - 684, 685, 686, 687, 959, 688, 89, 960, 107, 108, - 109, 110, 111, 115, 116, 44, 112, 113, 46, 703, - 704, 705, 706, 707, 708, 115, 116, 114, 619, 368, - 115, 116, 48, 899, 369, 900, 901, 101, 102, 103, - 374, 117, 118, 612, 390, 375, 393, 422, 438, 391, - 441, 394, 423, 439, 368, 442, 89, 119, 81, 743, - 120, 50, 846, 89, 717, 718, 85, 121, 122, 441, - 847, 123, 113, 374, 744, 86, 87, 88, 745, 32, - 33, 34, 35, 762, 762, 115, 116, 850, 763, 764, - 859, 89, 100, 101, 102, 103, 794, 217, 285, 286, - 89, 795, 52, 218, 219, 220, 221, 222, 223, 798, - 224, 438, 89, 112, 799, 325, 800, 89, 832, 107, - 108, 109, 762, 54, 166, 167, 168, 922, 113, 570, - 571, 390, 100, 101, 102, 103, 923, 573, 574, 169, - 56, 115, 116, 170, 171, 172, 173, 174, 175, 58, - 926, 101, 102, 103, 176, 927, 60, 177, 178, 107, - 108, 109, 422, 111, 62, 179, 393, 932, 113, 245, - 942, 936, 89, 976, 90, 943, 330, 329, 977, 224, - 736, 115, 116, 331, 171, 112, 113, 245, 175, 332, - 443, 444, 333, 403, 176, 339, 343, 177, 344, 115, - 116, 351, 124, 352, 353, 179, 354, 365, 157, 912, - 913, 914, 915, 862, 863, 583, 584, 585, 373, 383, - 164, 384, 404, 414, 180, 408, 405, 208, 89, 412, - 413, 416, 417, 419, 418, 424, 200, 427, 225, 215, - 165, 429, 430, 433, 203, 434, 435, 445, 251, 446, - 227, 209, 447, 270, 448, 449, 201, 272, 232, 216, - 265, 450, 452, 273, 204, 283, 455, 181, 89, 453, - 228, 456, 306, 454, 457, 458, 459, 460, 233, 182, - 266, 183, 461, 462, 307, 284, 89, 198, 210, 463, - 211, 465, 252, 205, 464, 466, 244, 271, 467, 184, - 468, 226, 469, 470, 308, 471, 627, 234, 545, 546, - 547, 628, 629, 630, 631, 632, 633, 634, 635, 636, - 637, 638, 639, 640, 641, 642, 245, 472, 246, 247, - 938, 473, 248, 249, 250, 474, 245, 476, 115, 116, - 245, 267, 246, 247, 268, 269, 475, 477, 479, 480, - 481, 484, 115, 116, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 482, 485, 486, - 487, 488, 489, 490, 491, 493, 494, 124, 495, 496, - 497, 499, 157, 607, 492, 501, 502, 503, 504, 505, - 506, 507, 508, 510, 164, 511, 513, 514, 115, 116, - 719, 306, 623, 515, 512, 518, 522, 516, 523, 519, - 526, 527, 720, 307, 165, 520, 525, 528, 529, 530, - 532, 531, 533, 537, 534, 89, 535, 538, 540, 536, - 542, 549, 721, 308, 543, 89, 544, 548, 550, 89, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 551, 552, 553, 554, 555, 556, - 557, 558, 561, 562, 30, 563, 564, 576, 577, 565, - 566, 567, 568, 578, 579, 580, 581, 582, 588, 589, - 590, 591, 593, 594, 614, 89, 595, 596, 622, 597, - 750, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 664, 668, 672, 676, 680, 608, 609, 610, 621, 696, - 699, 728, 732, 740, 751, 752, 753, 754, 757, 758, - 759, 760, 761, 767, 559, 766, 770, 769, 772, 773, - 775, 776, 779, 778, 787, 801, 786, 788, 789, 790, - 791, 792, 793, 806, 451, 805, 809, 808, 815, 816, - 811, 817, 818, 819, 820, 821, 822, 824, 823, 825, - 889, 826, 890, 827, 893, 892, 828, 829, 898, 882, - 830, 883, 931, 884, 924, 885, 925, 929, 886, 887, - 930, 940, 917, 937, 945, 918, 948, 950, 919, 920, - 921, 933, 934, 935, 953, 955, 949, 946, 952, 954, - 973, 974, 180, 975, 978, 251, 979, 983, 270, 980, - 624, 840, 272, 626, 200, 833, 864, 265, 273, 287, - 283, 866, 203, 854, 981, 831, 483, 861, 868, 881, - 880, 856, 719, 478, 201, 848, 870, 266, 208, 835, - 284, 225, 204, 855, 720, 181, 902, 888, 869, 252, - 215, 857, 271, 227, 841, 845, 871, 182, 904, 183, - 865, 232, 209, 860, 721, 198, 842, 498, 843, 944, - 216, 205, 849, 228, 853, 524, 834, 184, 905, 867, - 858, 233, 836, 837, 894, 872, 844, 838, 895, 517, - 903, 839, 897, 500, 896, 521, 509, 737, 947, 210, - 891, 211, 879, 911, 226, 726, 625, 951, 971, 982, - 234, 0, 0, 0, 0, 0, 0, 539, 0, 0, - 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 125, 159, 181, 209, 226, 210, 252, 271, 288, + 307, 244, 273, 78, 166, 201, 216, 228, 274, 266, + 284, 590, 308, 665, 848, 182, 183, 594, 253, 272, + 29, 203, 30, 849, 31, 341, 613, 28, 852, 861, + 342, 184, 167, 202, 217, 229, 84, 267, 285, 40, + 309, 286, 287, 42, 211, 199, 212, 227, 115, 116, + 44, 204, 370, 233, 46, 185, 81, 371, 155, 156, + 112, 205, 157, 234, 376, 158, 113, 391, 330, 377, + 48, 206, 392, 235, 100, 101, 102, 103, 208, 115, + 116, 394, 617, 618, 619, 620, 395, 963, 723, 724, + 964, 965, 966, 178, 286, 287, 179, 101, 102, 103, + 89, 107, 108, 109, 423, 50, 168, 169, 170, 424, + 113, 572, 573, 439, 621, 442, 115, 116, 440, 782, + 443, 171, 783, 115, 116, 172, 173, 174, 175, 176, + 177, 112, 113, 246, 575, 576, 89, 178, 614, 370, + 179, 119, 98, 331, 745, 115, 116, 785, 180, 52, + 786, 99, 100, 101, 102, 103, 104, 105, 106, 85, + 864, 865, 815, 848, 54, 816, 442, 89, 86, 87, + 88, 746, 849, 32, 33, 34, 35, 852, 861, 107, + 108, 109, 110, 111, 89, 225, 738, 112, 113, 101, + 102, 103, 709, 710, 711, 712, 713, 714, 114, 56, + 58, 115, 116, 246, 89, 246, 268, 247, 248, 269, + 270, 89, 60, 117, 118, 115, 116, 115, 116, 119, + 376, 62, 764, 764, 113, 747, 834, 765, 766, 120, + 799, 333, 121, 89, 326, 800, 245, 115, 116, 122, + 123, 332, 334, 124, 686, 687, 688, 689, 803, 690, + 218, 961, 404, 804, 962, 340, 219, 220, 221, 222, + 223, 224, 439, 225, 344, 90, 246, 805, 247, 248, + 444, 445, 249, 250, 251, 345, 764, 405, 115, 116, + 901, 924, 902, 903, 352, 391, 928, 423, 394, 89, + 925, 929, 935, 939, 125, 353, 944, 978, 406, 354, + 159, 945, 979, 89, 355, 89, 585, 586, 587, 588, + 367, 375, 166, 385, 386, 181, 409, 413, 209, 414, + 210, 914, 915, 916, 917, 89, 415, 201, 417, 226, + 216, 418, 420, 419, 425, 428, 430, 182, 183, 252, + 167, 228, 431, 203, 271, 434, 435, 436, 273, 446, + 447, 266, 448, 184, 274, 202, 284, 449, 217, 450, + 253, 451, 453, 307, 454, 272, 89, 199, 211, 229, + 212, 455, 456, 204, 457, 308, 458, 185, 459, 267, + 460, 227, 461, 205, 285, 462, 466, 233, 546, 547, + 548, 463, 464, 206, 465, 467, 468, 234, 100, 101, + 102, 103, 469, 309, 470, 471, 472, 235, 473, 474, + 475, 476, 477, 484, 478, 940, 479, 481, 482, 483, + 486, 487, 488, 489, 490, 107, 108, 109, 491, 111, + 492, 493, 495, 496, 113, 246, 494, 497, 498, 500, + 502, 503, 504, 505, 506, 507, 508, 115, 116, 509, + 173, 511, 512, 514, 177, 513, 515, 516, 517, 519, + 520, 178, 521, 609, 179, 523, 524, 527, 125, 526, + 528, 530, 180, 159, 529, 531, 532, 533, 534, 535, + 536, 537, 625, 538, 539, 166, 541, 543, 616, 769, + 555, 544, 725, 307, 545, 549, 553, 115, 116, 554, + 556, 557, 550, 551, 726, 308, 558, 552, 559, 629, + 562, 30, 563, 167, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 564, + 565, 566, 727, 309, 567, 89, 568, 569, 570, 246, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 581, 592, 578, + 624, 666, 560, 670, 674, 678, 682, 698, 701, 579, + 580, 582, 705, 583, 734, 89, 742, 752, 584, 591, + 593, 753, 754, 755, 756, 759, 760, 761, 762, 763, + 793, 595, 596, 768, 597, 771, 772, 774, 598, 599, + 775, 777, 600, 778, 601, 602, 603, 604, 605, 780, + 781, 788, 606, 607, 789, 791, 608, 610, 611, 612, + 623, 792, 810, 794, 795, 796, 797, 798, 811, 89, + 817, 818, 813, 819, 820, 826, 827, 893, 806, 894, + 821, 897, 896, 823, 822, 900, 931, 825, 824, 828, + 832, 829, 926, 927, 830, 831, 932, 886, 887, 888, + 889, 890, 891, 919, 920, 921, 922, 923, 933, 934, + 936, 937, 942, 947, 950, 952, 938, 955, 975, 976, + 957, 951, 948, 954, 181, 956, 977, 252, 980, 981, + 271, 982, 983, 842, 273, 850, 201, 985, 866, 266, + 274, 226, 284, 868, 288, 856, 182, 183, 253, 626, + 870, 272, 203, 228, 847, 843, 844, 725, 452, 867, + 628, 480, 184, 209, 202, 210, 835, 267, 904, 726, + 285, 845, 485, 857, 833, 216, 199, 863, 871, 885, + 906, 229, 204, 851, 892, 855, 185, 525, 884, 905, + 869, 858, 205, 227, 836, 846, 872, 727, 837, 233, + 499, 859, 206, 217, 862, 946, 873, 518, 907, 234, + 839, 860, 899, 211, 841, 212, 874, 838, 840, 235, + 898, 522, 883, 501, 882, 510, 739, 949, 881, 732, + 895, 627, 540, 913, 953, 973, 542, 984, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 840, 0, 0, 0, 0, 864, 0, 0, 0, 0, - 866, 0, 854, 0, 0, 0, 902, 868, 0, 0, - 856, 0, 0, 0, 848, 870, 0, 0, 904, 0, - 0, 0, 855, 0, 0, 0, 0, 869, 0, 0, - 857, 0, 0, 841, 845, 871, 0, 0, 905, 865, - 0, 0, 0, 0, 0, 842, 0, 843, 0, 0, - 903, 849, 0, 853, 0, 0, 0, 0, 867, 858, - 0, 0, 0, 0, 872, 844 + 0, 0, 842, 0, 850, 0, 0, 866, 0, 0, + 0, 0, 868, 0, 856, 0, 0, 0, 904, 870, + 0, 0, 0, 847, 843, 844, 0, 0, 867, 0, + 906, 0, 0, 0, 0, 0, 0, 0, 0, 905, + 845, 0, 857, 0, 0, 0, 0, 871, 0, 0, + 0, 0, 851, 0, 855, 0, 0, 0, 907, 869, + 858, 0, 0, 0, 846, 872, 0, 0, 0, 0, + 859, 0, 0, 0, 0, 873, 0, 0, 0, 0, + 860, 0, 0, 0, 0, 874 }; const short int Dhcp4Parser::yycheck_[] = { - 66, 67, 68, 69, 70, 71, 553, 73, 74, 75, - 76, 72, 74, 777, 68, 69, 70, 71, 74, 73, - 74, 777, 76, 69, 64, 71, 494, 5, 70, 7, - 0, 9, 15, 501, 68, 69, 70, 71, 777, 73, - 74, 777, 76, 69, 10, 71, 69, 98, 99, 3, - 3, 73, 74, 6, 8, 12, 13, 58, 69, 16, - 69, 3, 19, 57, 6, 70, 69, 70, 71, 70, - 71, 11, 69, 7, 71, 69, 70, 71, 69, 7, - 20, 21, 22, 23, 24, 25, 26, 27, 3, 83, - 135, 6, 86, 138, 139, 140, 128, 129, 130, 131, - 88, 89, 90, 91, 3, 93, 157, 6, 48, 49, - 50, 51, 52, 70, 71, 7, 56, 57, 7, 101, - 102, 103, 104, 105, 106, 70, 71, 67, 160, 3, - 70, 71, 7, 134, 8, 136, 137, 22, 23, 24, - 3, 81, 82, 126, 3, 8, 3, 3, 3, 8, - 3, 8, 8, 8, 3, 8, 157, 97, 157, 8, - 100, 7, 926, 157, 109, 110, 132, 107, 108, 3, - 926, 111, 57, 3, 8, 141, 142, 143, 8, 157, - 158, 159, 160, 3, 3, 70, 71, 926, 8, 8, - 926, 157, 21, 22, 23, 24, 3, 82, 98, 99, - 157, 8, 7, 88, 89, 90, 91, 92, 93, 3, - 95, 3, 157, 56, 8, 133, 8, 157, 765, 48, - 49, 50, 3, 7, 53, 54, 55, 8, 57, 14, - 15, 3, 21, 22, 23, 24, 8, 17, 18, 68, - 7, 70, 71, 72, 73, 74, 75, 76, 77, 7, - 3, 22, 23, 24, 83, 8, 7, 86, 87, 48, - 49, 50, 3, 52, 7, 94, 3, 8, 57, 58, - 3, 8, 157, 3, 340, 8, 3, 6, 8, 95, - 96, 70, 71, 4, 73, 56, 57, 58, 77, 8, - 330, 331, 3, 8, 83, 4, 4, 86, 4, 70, - 71, 4, 368, 4, 4, 94, 4, 4, 374, 29, - 30, 31, 32, 84, 85, 78, 79, 80, 4, 4, - 374, 4, 3, 3, 390, 4, 8, 393, 157, 4, - 8, 4, 4, 3, 8, 4, 390, 4, 404, 393, - 374, 4, 4, 4, 390, 4, 4, 157, 414, 4, - 404, 393, 4, 419, 4, 4, 390, 419, 404, 393, - 414, 4, 4, 419, 390, 419, 4, 390, 157, 160, - 404, 4, 438, 160, 4, 4, 4, 4, 404, 390, - 414, 390, 158, 158, 438, 419, 157, 390, 393, 158, - 393, 4, 414, 390, 158, 4, 28, 419, 4, 390, - 4, 404, 4, 4, 438, 4, 28, 404, 448, 449, - 450, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 58, 4, 60, 61, - 898, 4, 64, 65, 66, 4, 58, 4, 70, 71, - 58, 59, 60, 61, 62, 63, 158, 4, 4, 4, - 4, 4, 70, 71, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 160, 4, 4, - 4, 4, 4, 4, 158, 4, 4, 543, 4, 4, - 4, 4, 548, 523, 160, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 548, 4, 4, 4, 70, 71, - 566, 567, 542, 4, 158, 4, 4, 160, 4, 160, - 4, 4, 566, 567, 548, 160, 160, 158, 4, 158, - 4, 158, 4, 4, 160, 157, 160, 4, 4, 160, - 4, 157, 566, 567, 7, 157, 7, 7, 157, 157, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 157, 7, 7, 5, 5, 5, - 5, 5, 157, 5, 7, 5, 5, 157, 157, 7, - 7, 7, 5, 157, 5, 157, 157, 157, 157, 5, - 7, 157, 157, 157, 127, 157, 157, 157, 5, 157, - 4, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 7, 7, 7, 7, 7, 157, 157, 157, 157, 7, - 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 3, 469, 6, 3, 6, 6, 3, - 6, 3, 3, 6, 3, 157, 6, 4, 4, 4, - 4, 4, 4, 3, 340, 6, 3, 6, 4, 4, - 8, 4, 4, 158, 160, 158, 160, 4, 158, 4, - 4, 158, 4, 158, 3, 6, 158, 158, 4, 158, - 160, 158, 3, 158, 8, 158, 8, 4, 158, 158, - 8, 4, 157, 8, 4, 157, 4, 4, 157, 157, - 157, 157, 157, 157, 5, 7, 158, 160, 157, 157, - 4, 4, 768, 4, 4, 771, 160, 157, 774, 158, - 543, 777, 774, 548, 768, 767, 782, 771, 774, 785, - 774, 782, 768, 777, 158, 762, 374, 780, 782, 787, - 785, 777, 798, 368, 768, 777, 782, 771, 804, 770, - 774, 807, 768, 777, 798, 768, 812, 794, 782, 771, - 804, 777, 774, 807, 777, 777, 782, 768, 812, 768, - 782, 807, 804, 779, 798, 768, 777, 390, 777, 926, - 804, 768, 777, 807, 777, 422, 768, 768, 812, 782, - 777, 807, 771, 773, 804, 782, 777, 774, 806, 414, - 812, 776, 809, 393, 807, 419, 404, 590, 931, 804, - 798, 804, 783, 813, 807, 567, 544, 942, 959, 976, - 807, -1, -1, -1, -1, -1, -1, 438, -1, -1, - -1, 441, -1, -1, -1, -1, -1, -1, -1, -1, + 66, 67, 68, 69, 70, 71, 70, 73, 74, 75, + 76, 72, 74, 64, 68, 69, 70, 71, 74, 73, + 74, 496, 76, 554, 779, 69, 69, 502, 73, 74, + 5, 69, 7, 779, 9, 3, 15, 0, 779, 779, + 8, 69, 68, 69, 70, 71, 10, 73, 74, 7, + 76, 99, 100, 7, 70, 69, 70, 71, 70, 71, + 7, 69, 3, 71, 7, 69, 158, 8, 12, 13, + 56, 69, 16, 71, 3, 19, 57, 3, 6, 8, + 7, 69, 8, 71, 21, 22, 23, 24, 69, 70, + 71, 3, 129, 130, 131, 132, 8, 136, 110, 111, + 139, 140, 141, 84, 99, 100, 87, 22, 23, 24, + 158, 48, 49, 50, 3, 7, 53, 54, 55, 8, + 57, 14, 15, 3, 161, 3, 70, 71, 8, 3, + 8, 68, 6, 70, 71, 72, 73, 74, 75, 76, + 77, 56, 57, 58, 17, 18, 158, 84, 127, 3, + 87, 88, 11, 3, 8, 70, 71, 3, 95, 7, + 6, 20, 21, 22, 23, 24, 25, 26, 27, 133, + 85, 86, 3, 928, 7, 6, 3, 158, 142, 143, + 144, 8, 928, 158, 159, 160, 161, 928, 928, 48, + 49, 50, 51, 52, 158, 96, 97, 56, 57, 22, + 23, 24, 102, 103, 104, 105, 106, 107, 67, 7, + 7, 70, 71, 58, 158, 58, 59, 60, 61, 62, + 63, 158, 7, 82, 83, 70, 71, 70, 71, 88, + 3, 7, 3, 3, 57, 8, 767, 8, 8, 98, + 3, 8, 101, 158, 134, 8, 28, 70, 71, 108, + 109, 4, 3, 112, 89, 90, 91, 92, 3, 94, + 83, 3, 8, 8, 6, 4, 89, 90, 91, 92, + 93, 94, 3, 96, 4, 341, 58, 8, 60, 61, + 331, 332, 64, 65, 66, 4, 3, 3, 70, 71, + 135, 8, 137, 138, 4, 3, 3, 3, 3, 158, + 8, 8, 8, 8, 370, 4, 3, 3, 8, 4, + 376, 8, 8, 158, 4, 158, 78, 79, 80, 81, + 4, 4, 376, 4, 4, 391, 4, 4, 394, 8, + 394, 29, 30, 31, 32, 158, 3, 391, 4, 405, + 394, 4, 3, 8, 4, 4, 4, 391, 391, 415, + 376, 405, 4, 391, 420, 4, 4, 4, 420, 158, + 4, 415, 4, 391, 420, 391, 420, 4, 394, 4, + 415, 4, 4, 439, 161, 420, 158, 391, 394, 405, + 394, 161, 4, 391, 4, 439, 4, 391, 4, 415, + 4, 405, 4, 391, 420, 159, 4, 405, 449, 450, + 451, 159, 159, 391, 159, 4, 4, 405, 21, 22, + 23, 24, 4, 439, 4, 4, 4, 405, 4, 4, + 4, 4, 159, 161, 4, 900, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 48, 49, 50, 4, 52, + 4, 159, 4, 4, 57, 58, 161, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 70, 71, 4, + 73, 4, 4, 4, 77, 159, 4, 4, 161, 4, + 161, 84, 161, 524, 87, 4, 4, 4, 544, 161, + 4, 4, 95, 549, 159, 159, 159, 4, 4, 161, + 161, 161, 543, 4, 4, 549, 4, 4, 128, 3, + 5, 7, 568, 569, 7, 7, 7, 70, 71, 7, + 5, 5, 158, 158, 568, 569, 5, 158, 5, 28, + 158, 7, 5, 549, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 5, + 5, 5, 568, 569, 7, 158, 7, 7, 5, 58, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 5, 7, 158, + 5, 7, 470, 7, 7, 7, 7, 7, 7, 158, + 158, 158, 7, 158, 7, 158, 7, 4, 158, 158, + 158, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 158, 158, 6, 158, 6, 3, 6, 158, 158, + 3, 6, 158, 3, 158, 158, 158, 158, 158, 6, + 3, 6, 158, 158, 3, 6, 158, 158, 158, 158, + 158, 3, 6, 4, 4, 4, 4, 4, 3, 158, + 4, 4, 8, 4, 4, 4, 4, 4, 158, 4, + 159, 3, 6, 159, 161, 4, 4, 159, 161, 159, + 161, 159, 8, 8, 159, 159, 8, 159, 159, 159, + 159, 159, 159, 158, 158, 158, 158, 158, 3, 8, + 158, 158, 4, 4, 4, 4, 158, 5, 4, 4, + 7, 159, 161, 158, 770, 158, 4, 773, 4, 161, + 776, 159, 159, 779, 776, 779, 770, 158, 784, 773, + 776, 787, 776, 784, 790, 779, 770, 770, 773, 544, + 784, 776, 770, 787, 779, 779, 779, 803, 341, 784, + 549, 370, 770, 809, 770, 809, 769, 773, 814, 803, + 776, 779, 376, 779, 764, 809, 770, 782, 784, 792, + 814, 787, 770, 779, 799, 779, 770, 423, 790, 814, + 784, 779, 770, 787, 770, 779, 784, 803, 772, 787, + 391, 779, 770, 809, 781, 928, 784, 415, 814, 787, + 775, 779, 811, 809, 778, 809, 784, 773, 776, 787, + 809, 420, 789, 394, 787, 405, 592, 933, 785, 569, + 803, 545, 439, 815, 944, 961, 442, 978, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 926, -1, -1, -1, -1, 931, -1, -1, -1, -1, - 931, -1, 926, -1, -1, -1, 942, 931, -1, -1, - 926, -1, -1, -1, 926, 931, -1, -1, 942, -1, - -1, -1, 926, -1, -1, -1, -1, 931, -1, -1, - 926, -1, -1, 926, 926, 931, -1, -1, 942, 931, - -1, -1, -1, -1, -1, 926, -1, 926, -1, -1, - 942, 926, -1, 926, -1, -1, -1, -1, 931, 926, - -1, -1, -1, -1, 931, 926 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 928, -1, 928, -1, -1, 933, -1, -1, + -1, -1, 933, -1, 928, -1, -1, -1, 944, 933, + -1, -1, -1, 928, 928, 928, -1, -1, 933, -1, + 944, -1, -1, -1, -1, -1, -1, -1, -1, 944, + 928, -1, 928, -1, -1, -1, -1, 933, -1, -1, + -1, -1, 928, -1, 928, -1, -1, -1, 944, 933, + 928, -1, -1, -1, 928, 933, -1, -1, -1, -1, + 928, -1, -1, -1, -1, 933, -1, -1, -1, -1, + 928, -1, -1, -1, -1, 933 }; const unsigned short int Dhcp4Parser::yystos_[] = { - 0, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 0, 5, - 7, 9, 157, 158, 159, 160, 176, 177, 178, 183, - 7, 192, 7, 198, 7, 212, 7, 299, 7, 382, - 7, 398, 7, 334, 7, 340, 7, 364, 7, 275, - 7, 453, 7, 488, 184, 179, 193, 199, 213, 300, - 383, 399, 335, 341, 365, 276, 454, 489, 176, 185, - 186, 157, 181, 182, 10, 132, 141, 142, 143, 157, - 191, 194, 195, 196, 480, 482, 484, 486, 11, 20, + 0, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 0, 5, + 7, 9, 158, 159, 160, 161, 177, 178, 179, 184, + 7, 193, 7, 199, 7, 213, 7, 300, 7, 383, + 7, 399, 7, 335, 7, 341, 7, 365, 7, 276, + 7, 454, 7, 489, 185, 180, 194, 200, 214, 301, + 384, 400, 336, 342, 366, 277, 455, 490, 177, 186, + 187, 158, 182, 183, 10, 133, 142, 143, 144, 158, + 192, 195, 196, 197, 481, 483, 485, 487, 11, 20, 21, 22, 23, 24, 25, 26, 27, 48, 49, 50, - 51, 52, 56, 57, 67, 70, 71, 81, 82, 97, - 100, 107, 108, 111, 191, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 223, 225, 227, 260, 269, 283, - 293, 324, 332, 358, 388, 390, 403, 405, 407, 430, - 442, 443, 451, 12, 13, 16, 19, 191, 210, 211, - 214, 216, 219, 222, 388, 390, 53, 54, 55, 68, - 72, 73, 74, 75, 76, 77, 83, 86, 87, 94, - 191, 202, 203, 204, 207, 301, 302, 303, 305, 307, - 309, 311, 313, 315, 317, 319, 322, 323, 358, 376, - 388, 390, 392, 403, 405, 407, 427, 69, 191, 315, - 317, 358, 384, 385, 386, 388, 390, 82, 88, 89, - 90, 91, 92, 93, 95, 191, 358, 388, 390, 400, - 401, 402, 403, 405, 407, 409, 413, 415, 417, 419, - 421, 423, 425, 332, 28, 58, 60, 61, 64, 65, - 66, 191, 245, 342, 343, 344, 345, 346, 347, 348, - 350, 352, 354, 355, 357, 388, 390, 59, 62, 63, - 191, 245, 346, 352, 366, 367, 368, 369, 370, 372, - 373, 374, 375, 388, 390, 98, 99, 191, 277, 278, - 279, 281, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 191, 388, 390, 455, - 456, 457, 458, 460, 462, 463, 465, 466, 467, 470, - 472, 473, 474, 475, 478, 133, 490, 491, 492, 6, - 3, 4, 8, 3, 197, 487, 481, 483, 485, 4, - 3, 8, 209, 4, 4, 404, 406, 408, 224, 226, - 228, 4, 4, 4, 4, 294, 333, 359, 325, 389, - 391, 261, 431, 270, 284, 4, 444, 452, 3, 8, - 215, 217, 220, 4, 3, 8, 306, 308, 310, 377, - 304, 312, 314, 4, 4, 320, 318, 316, 393, 428, - 3, 8, 387, 3, 8, 426, 414, 416, 420, 418, - 424, 422, 410, 8, 3, 8, 349, 246, 4, 353, - 351, 356, 4, 8, 3, 371, 4, 4, 8, 3, - 280, 282, 3, 8, 4, 459, 461, 4, 464, 4, - 4, 468, 471, 4, 4, 4, 476, 479, 3, 8, - 493, 3, 8, 176, 176, 157, 4, 4, 4, 4, - 4, 195, 4, 160, 160, 4, 4, 4, 4, 4, - 4, 158, 158, 158, 158, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 158, 4, 4, 201, 4, - 4, 4, 160, 211, 4, 4, 4, 4, 4, 4, - 4, 158, 160, 4, 4, 4, 4, 4, 302, 4, - 385, 4, 4, 4, 4, 4, 4, 4, 4, 402, - 4, 4, 158, 4, 4, 4, 160, 344, 4, 160, - 160, 368, 4, 4, 278, 160, 4, 4, 158, 4, - 158, 158, 4, 4, 160, 160, 160, 4, 4, 456, - 4, 491, 4, 7, 7, 176, 176, 176, 7, 157, - 157, 157, 7, 7, 5, 5, 5, 5, 5, 178, - 180, 157, 5, 5, 5, 7, 7, 7, 5, 187, - 14, 15, 218, 17, 18, 221, 157, 157, 157, 5, - 157, 157, 157, 78, 79, 80, 321, 187, 157, 5, - 7, 157, 187, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 176, 157, 157, - 157, 15, 126, 469, 127, 128, 129, 130, 131, 160, - 477, 157, 5, 176, 200, 490, 210, 28, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 191, 233, 234, 235, 238, 240, 242, - 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, - 256, 258, 259, 233, 7, 229, 230, 231, 7, 295, - 296, 297, 7, 336, 337, 338, 7, 360, 361, 362, - 7, 326, 327, 328, 88, 89, 90, 91, 93, 262, - 263, 264, 265, 266, 267, 268, 7, 432, 433, 7, - 271, 272, 273, 101, 102, 103, 104, 105, 106, 285, - 286, 287, 288, 289, 290, 291, 292, 109, 110, 191, - 388, 390, 445, 446, 447, 449, 455, 188, 7, 378, - 379, 380, 7, 394, 395, 396, 96, 409, 411, 429, - 7, 494, 495, 8, 8, 8, 236, 239, 241, 243, - 4, 4, 4, 4, 4, 255, 257, 4, 4, 4, - 4, 4, 3, 8, 8, 232, 6, 3, 298, 6, - 3, 339, 6, 3, 363, 6, 3, 329, 6, 3, - 3, 6, 434, 3, 6, 274, 6, 3, 4, 4, - 4, 4, 4, 4, 3, 8, 448, 450, 3, 8, - 8, 157, 189, 190, 381, 6, 3, 397, 6, 3, - 412, 8, 496, 3, 6, 4, 4, 4, 4, 158, - 160, 158, 160, 158, 4, 4, 158, 158, 158, 158, - 160, 234, 233, 231, 301, 297, 342, 338, 366, 362, - 191, 202, 203, 204, 207, 245, 293, 311, 315, 317, - 319, 330, 331, 358, 388, 390, 403, 405, 407, 427, - 328, 263, 84, 85, 191, 245, 332, 358, 388, 390, - 403, 405, 407, 435, 436, 437, 438, 439, 441, 433, - 277, 273, 158, 158, 158, 158, 158, 158, 286, 4, - 4, 446, 6, 3, 384, 380, 400, 396, 4, 134, - 136, 137, 191, 245, 388, 390, 497, 498, 499, 500, - 502, 495, 29, 30, 31, 32, 237, 157, 157, 157, - 157, 157, 8, 8, 8, 8, 3, 8, 440, 4, - 8, 3, 8, 157, 157, 157, 8, 8, 187, 503, - 4, 501, 3, 8, 331, 4, 160, 437, 4, 158, - 4, 498, 157, 5, 157, 7, 504, 505, 506, 3, - 6, 135, 138, 139, 140, 507, 508, 509, 511, 512, - 513, 505, 510, 4, 4, 4, 3, 8, 4, 160, - 158, 158, 508, 157 + 51, 52, 56, 57, 67, 70, 71, 82, 83, 88, + 98, 101, 108, 109, 112, 192, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 224, 226, 228, 261, 270, + 284, 294, 325, 333, 359, 389, 391, 393, 404, 406, + 408, 431, 443, 444, 452, 12, 13, 16, 19, 192, + 211, 212, 215, 217, 220, 223, 389, 391, 53, 54, + 55, 68, 72, 73, 74, 75, 76, 77, 84, 87, + 95, 192, 203, 204, 205, 208, 302, 303, 304, 306, + 308, 310, 312, 314, 316, 318, 320, 323, 324, 359, + 377, 389, 391, 393, 404, 406, 408, 428, 69, 192, + 316, 318, 359, 385, 386, 387, 389, 391, 83, 89, + 90, 91, 92, 93, 94, 96, 192, 359, 389, 391, + 401, 402, 403, 404, 406, 408, 410, 414, 416, 418, + 420, 422, 424, 426, 333, 28, 58, 60, 61, 64, + 65, 66, 192, 246, 343, 344, 345, 346, 347, 348, + 349, 351, 353, 355, 356, 358, 389, 391, 59, 62, + 63, 192, 246, 347, 353, 367, 368, 369, 370, 371, + 373, 374, 375, 376, 389, 391, 99, 100, 192, 278, + 279, 280, 282, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 192, 389, 391, + 456, 457, 458, 459, 461, 463, 464, 466, 467, 468, + 471, 473, 474, 475, 476, 479, 134, 491, 492, 493, + 6, 3, 4, 8, 3, 198, 488, 482, 484, 486, + 4, 3, 8, 210, 4, 4, 405, 407, 409, 225, + 227, 229, 4, 4, 4, 4, 295, 334, 360, 326, + 390, 392, 262, 432, 394, 271, 285, 4, 445, 453, + 3, 8, 216, 218, 221, 4, 3, 8, 307, 309, + 311, 378, 305, 313, 315, 4, 4, 321, 319, 317, + 429, 3, 8, 388, 3, 8, 427, 415, 417, 421, + 419, 425, 423, 411, 8, 3, 8, 350, 247, 4, + 354, 352, 357, 4, 8, 3, 372, 4, 4, 8, + 3, 281, 283, 3, 8, 4, 460, 462, 4, 465, + 4, 4, 469, 472, 4, 4, 4, 477, 480, 3, + 8, 494, 3, 8, 177, 177, 158, 4, 4, 4, + 4, 4, 196, 4, 161, 161, 4, 4, 4, 4, + 4, 4, 159, 159, 159, 159, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 159, 4, 4, + 202, 4, 4, 4, 161, 212, 4, 4, 4, 4, + 4, 4, 4, 159, 161, 4, 4, 4, 4, 303, + 4, 386, 4, 4, 4, 4, 4, 4, 4, 4, + 403, 4, 4, 159, 4, 4, 4, 161, 345, 4, + 161, 161, 369, 4, 4, 279, 161, 4, 4, 159, + 4, 159, 159, 4, 4, 161, 161, 161, 4, 4, + 457, 4, 492, 4, 7, 7, 177, 177, 177, 7, + 158, 158, 158, 7, 7, 5, 5, 5, 5, 5, + 179, 181, 158, 5, 5, 5, 5, 7, 7, 7, + 5, 188, 14, 15, 219, 17, 18, 222, 158, 158, + 158, 5, 158, 158, 158, 78, 79, 80, 81, 322, + 188, 158, 7, 158, 188, 158, 158, 158, 158, 158, + 158, 158, 158, 158, 158, 158, 158, 158, 158, 177, + 158, 158, 158, 15, 127, 470, 128, 129, 130, 131, + 132, 161, 478, 158, 5, 177, 201, 491, 211, 28, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 192, 234, 235, 236, 239, + 241, 243, 245, 246, 248, 249, 250, 251, 252, 253, + 254, 255, 257, 259, 260, 234, 7, 230, 231, 232, + 7, 296, 297, 298, 7, 337, 338, 339, 7, 361, + 362, 363, 7, 327, 328, 329, 89, 90, 91, 92, + 94, 263, 264, 265, 266, 267, 268, 269, 7, 433, + 434, 7, 395, 396, 397, 7, 272, 273, 274, 102, + 103, 104, 105, 106, 107, 286, 287, 288, 289, 290, + 291, 292, 293, 110, 111, 192, 389, 391, 446, 447, + 448, 450, 456, 189, 7, 379, 380, 381, 97, 410, + 412, 430, 7, 495, 496, 8, 8, 8, 237, 240, + 242, 244, 4, 4, 4, 4, 4, 256, 258, 4, + 4, 4, 4, 4, 3, 8, 8, 233, 6, 3, + 299, 6, 3, 340, 6, 3, 364, 6, 3, 330, + 6, 3, 3, 6, 435, 3, 6, 398, 6, 3, + 275, 6, 3, 4, 4, 4, 4, 4, 4, 3, + 8, 449, 451, 3, 8, 8, 158, 190, 191, 382, + 6, 3, 413, 8, 497, 3, 6, 4, 4, 4, + 4, 159, 161, 159, 161, 159, 4, 4, 159, 159, + 159, 159, 161, 235, 234, 232, 302, 298, 343, 339, + 367, 363, 192, 203, 204, 205, 208, 246, 294, 312, + 316, 318, 320, 331, 332, 359, 389, 391, 404, 406, + 408, 428, 329, 264, 85, 86, 192, 246, 333, 359, + 389, 391, 404, 406, 408, 436, 437, 438, 439, 440, + 442, 434, 401, 397, 278, 274, 159, 159, 159, 159, + 159, 159, 287, 4, 4, 447, 6, 3, 385, 381, + 4, 135, 137, 138, 192, 246, 389, 391, 498, 499, + 500, 501, 503, 496, 29, 30, 31, 32, 238, 158, + 158, 158, 158, 158, 8, 8, 8, 8, 3, 8, + 441, 4, 8, 3, 8, 8, 158, 158, 158, 8, + 188, 504, 4, 502, 3, 8, 332, 4, 161, 438, + 4, 159, 4, 499, 158, 5, 158, 7, 505, 506, + 507, 3, 6, 136, 139, 140, 141, 508, 509, 510, + 512, 513, 514, 506, 511, 4, 4, 4, 3, 8, + 4, 161, 159, 159, 509, 158 }; const unsigned short int Dhcp4Parser::yyr1_[] = { - 0, 161, 163, 162, 164, 162, 165, 162, 166, 162, - 167, 162, 168, 162, 169, 162, 170, 162, 171, 162, - 172, 162, 173, 162, 174, 162, 175, 162, 176, 176, - 176, 176, 176, 176, 176, 177, 179, 178, 180, 181, - 181, 182, 182, 184, 183, 185, 185, 186, 186, 188, - 187, 189, 189, 190, 190, 191, 193, 192, 194, 194, - 195, 195, 195, 195, 195, 195, 197, 196, 199, 198, - 200, 200, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, - 203, 204, 205, 206, 207, 209, 208, 210, 210, 211, - 211, 211, 211, 211, 211, 211, 213, 212, 215, 214, - 217, 216, 218, 218, 220, 219, 221, 221, 222, 224, - 223, 226, 225, 228, 227, 229, 229, 230, 230, 232, - 231, 233, 233, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 236, 235, 237, 237, 237, 237, 239, 238, 241, - 240, 243, 242, 244, 246, 245, 247, 248, 249, 250, - 251, 252, 253, 255, 254, 257, 256, 258, 259, 261, - 260, 262, 262, 263, 263, 263, 263, 263, 264, 265, - 266, 267, 268, 270, 269, 271, 271, 272, 272, 274, - 273, 276, 275, 277, 277, 277, 278, 278, 280, 279, - 282, 281, 284, 283, 285, 285, 286, 286, 286, 286, - 286, 286, 287, 288, 289, 290, 291, 292, 294, 293, - 295, 295, 296, 296, 298, 297, 300, 299, 301, 301, - 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, - 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, - 302, 302, 302, 302, 302, 304, 303, 306, 305, 308, - 307, 310, 309, 312, 311, 314, 313, 316, 315, 318, - 317, 320, 319, 321, 321, 321, 322, 323, 325, 324, - 326, 326, 327, 327, 329, 328, 330, 330, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 333, 332, 335, 334, - 336, 336, 337, 337, 339, 338, 341, 340, 342, 342, - 343, 343, 344, 344, 344, 344, 344, 344, 344, 344, - 344, 344, 345, 346, 347, 349, 348, 351, 350, 353, - 352, 354, 356, 355, 357, 359, 358, 360, 360, 361, - 361, 363, 362, 365, 364, 366, 366, 367, 367, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 369, 371, - 370, 372, 373, 374, 375, 377, 376, 378, 378, 379, - 379, 381, 380, 383, 382, 384, 384, 385, 385, 385, - 385, 385, 385, 385, 387, 386, 389, 388, 391, 390, - 393, 392, 394, 394, 395, 395, 397, 396, 399, 398, - 400, 400, 401, 401, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 404, - 403, 406, 405, 408, 407, 410, 409, 412, 411, 414, - 413, 416, 415, 418, 417, 420, 419, 422, 421, 424, - 423, 426, 425, 428, 427, 429, 429, 431, 430, 432, - 432, 434, 433, 435, 435, 436, 436, 437, 437, 437, - 437, 437, 437, 437, 437, 437, 437, 437, 438, 440, - 439, 441, 442, 444, 443, 445, 445, 446, 446, 446, - 446, 446, 448, 447, 450, 449, 452, 451, 454, 453, - 455, 455, 456, 456, 456, 456, 456, 456, 456, 456, - 456, 456, 456, 456, 456, 456, 456, 456, 456, 457, - 459, 458, 461, 460, 462, 464, 463, 465, 466, 468, - 467, 469, 469, 471, 470, 472, 473, 474, 476, 475, - 477, 477, 477, 477, 477, 479, 478, 481, 480, 483, - 482, 485, 484, 487, 486, 489, 488, 490, 490, 491, - 493, 492, 494, 494, 496, 495, 497, 497, 498, 498, - 498, 498, 498, 498, 498, 499, 501, 500, 503, 502, - 504, 504, 506, 505, 507, 507, 508, 508, 508, 508, - 510, 509, 511, 512, 513 + 0, 162, 164, 163, 165, 163, 166, 163, 167, 163, + 168, 163, 169, 163, 170, 163, 171, 163, 172, 163, + 173, 163, 174, 163, 175, 163, 176, 163, 177, 177, + 177, 177, 177, 177, 177, 178, 180, 179, 181, 182, + 182, 183, 183, 185, 184, 186, 186, 187, 187, 189, + 188, 190, 190, 191, 191, 192, 194, 193, 195, 195, + 196, 196, 196, 196, 196, 196, 198, 197, 200, 199, + 201, 201, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 203, 204, 205, 206, 207, 208, 210, 209, 211, 211, + 212, 212, 212, 212, 212, 212, 212, 214, 213, 216, + 215, 218, 217, 219, 219, 221, 220, 222, 222, 223, + 225, 224, 227, 226, 229, 228, 230, 230, 231, 231, + 233, 232, 234, 234, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 237, 236, 238, 238, 238, 238, 240, 239, + 242, 241, 244, 243, 245, 247, 246, 248, 249, 250, + 251, 252, 253, 254, 256, 255, 258, 257, 259, 260, + 262, 261, 263, 263, 264, 264, 264, 264, 264, 265, + 266, 267, 268, 269, 271, 270, 272, 272, 273, 273, + 275, 274, 277, 276, 278, 278, 278, 279, 279, 281, + 280, 283, 282, 285, 284, 286, 286, 287, 287, 287, + 287, 287, 287, 288, 289, 290, 291, 292, 293, 295, + 294, 296, 296, 297, 297, 299, 298, 301, 300, 302, + 302, 303, 303, 303, 303, 303, 303, 303, 303, 303, + 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, + 303, 303, 303, 303, 303, 303, 305, 304, 307, 306, + 309, 308, 311, 310, 313, 312, 315, 314, 317, 316, + 319, 318, 321, 320, 322, 322, 322, 322, 323, 324, + 326, 325, 327, 327, 328, 328, 330, 329, 331, 331, + 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, 334, 333, + 336, 335, 337, 337, 338, 338, 340, 339, 342, 341, + 343, 343, 344, 344, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 346, 347, 348, 350, 349, 352, + 351, 354, 353, 355, 357, 356, 358, 360, 359, 361, + 361, 362, 362, 364, 363, 366, 365, 367, 367, 368, + 368, 369, 369, 369, 369, 369, 369, 369, 369, 369, + 370, 372, 371, 373, 374, 375, 376, 378, 377, 379, + 379, 380, 380, 382, 381, 384, 383, 385, 385, 386, + 386, 386, 386, 386, 386, 386, 388, 387, 390, 389, + 392, 391, 394, 393, 395, 395, 396, 396, 398, 397, + 400, 399, 401, 401, 402, 402, 403, 403, 403, 403, + 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, + 403, 405, 404, 407, 406, 409, 408, 411, 410, 413, + 412, 415, 414, 417, 416, 419, 418, 421, 420, 423, + 422, 425, 424, 427, 426, 429, 428, 430, 430, 432, + 431, 433, 433, 435, 434, 436, 436, 437, 437, 438, + 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, + 439, 441, 440, 442, 443, 445, 444, 446, 446, 447, + 447, 447, 447, 447, 449, 448, 451, 450, 453, 452, + 455, 454, 456, 456, 457, 457, 457, 457, 457, 457, + 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, + 457, 458, 460, 459, 462, 461, 463, 465, 464, 466, + 467, 469, 468, 470, 470, 472, 471, 473, 474, 475, + 477, 476, 478, 478, 478, 478, 478, 480, 479, 482, + 481, 484, 483, 486, 485, 488, 487, 490, 489, 491, + 491, 492, 494, 493, 495, 495, 497, 496, 498, 498, + 499, 499, 499, 499, 499, 499, 499, 500, 502, 501, + 504, 503, 505, 505, 507, 506, 508, 508, 509, 509, + 509, 509, 511, 510, 512, 513, 514 }; const unsigned char @@ -4356,59 +4364,59 @@ namespace isc { namespace dhcp { 1, 1, 1, 1, 1, 1, 0, 6, 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 3, 3, 3, 3, 3, 0, 6, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 0, 4, 0, 4, - 0, 4, 1, 1, 0, 4, 1, 1, 3, 0, - 6, 0, 6, 0, 6, 0, 1, 1, 3, 0, - 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 4, 1, 1, 1, 1, 0, 4, 0, - 4, 0, 4, 3, 0, 4, 3, 3, 3, 3, - 3, 3, 3, 0, 4, 0, 4, 3, 3, 0, - 6, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 6, 0, 1, 1, 3, 0, - 4, 0, 4, 1, 3, 1, 1, 1, 0, 4, - 0, 4, 0, 6, 1, 3, 1, 1, 1, 1, - 1, 1, 3, 3, 3, 3, 3, 3, 0, 6, - 0, 1, 1, 3, 0, 4, 0, 4, 1, 3, + 3, 3, 3, 3, 3, 3, 0, 6, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 0, 4, 0, + 4, 0, 4, 1, 1, 0, 4, 1, 1, 3, + 0, 6, 0, 6, 0, 6, 0, 1, 1, 3, + 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 4, 1, 1, 1, 1, 0, 4, + 0, 4, 0, 4, 3, 0, 4, 3, 3, 3, + 3, 3, 3, 3, 0, 4, 0, 4, 3, 3, + 0, 6, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 6, 0, 1, 1, 3, + 0, 4, 0, 4, 1, 3, 1, 1, 1, 0, + 4, 0, 4, 0, 6, 1, 3, 1, 1, 1, + 1, 1, 1, 3, 3, 3, 3, 3, 3, 0, + 6, 0, 1, 1, 3, 0, 4, 0, 4, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 4, 1, 1, 1, 3, 3, 0, 6, - 0, 1, 1, 3, 0, 4, 1, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 0, 4, + 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, + 0, 4, 0, 4, 1, 1, 1, 1, 3, 3, + 0, 6, 0, 1, 1, 3, 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 6, 0, 4, - 0, 1, 1, 3, 0, 4, 0, 4, 0, 1, - 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 1, 0, 4, 0, 4, 0, - 4, 1, 0, 4, 3, 0, 6, 0, 1, 1, - 3, 0, 4, 0, 4, 0, 1, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 4, 1, 1, 3, 3, 0, 6, 0, 1, 1, - 3, 0, 4, 0, 4, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 0, 4, 0, 4, 0, 4, - 0, 6, 0, 1, 1, 3, 0, 4, 0, 4, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 6, + 0, 4, 0, 1, 1, 3, 0, 4, 0, 4, 0, 1, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 1, 1, 1, 1, 1, 3, 1, 0, 4, 0, + 4, 0, 4, 1, 0, 4, 3, 0, 6, 0, + 1, 1, 3, 0, 4, 0, 4, 0, 1, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 4, 1, 1, 3, 3, 0, 6, 0, + 1, 1, 3, 0, 4, 0, 4, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 0, 4, + 0, 4, 0, 6, 0, 1, 1, 3, 0, 4, + 0, 4, 0, 1, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 6, 1, 1, 0, 6, 1, - 3, 0, 4, 0, 1, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 4, 3, 3, 0, 6, 1, 3, 1, 1, 1, - 1, 1, 0, 4, 0, 4, 0, 6, 0, 4, - 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 0, 4, 0, 4, 3, 0, 4, 3, 3, 0, - 4, 1, 1, 0, 4, 3, 3, 3, 0, 4, - 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 6, 0, 4, 1, 3, 1, + 4, 0, 4, 0, 4, 0, 6, 1, 1, 0, + 6, 1, 3, 0, 4, 0, 1, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 4, 3, 3, 0, 6, 1, 3, 1, + 1, 1, 1, 1, 0, 4, 0, 4, 0, 6, + 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 0, 4, 0, 4, 3, 0, 4, 3, + 3, 0, 4, 1, 1, 0, 4, 3, 3, 3, + 0, 4, 1, 1, 1, 1, 1, 0, 4, 0, + 4, 0, 4, 0, 4, 0, 6, 0, 4, 1, + 3, 1, 0, 6, 1, 3, 0, 4, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 3, 0, 4, 0, 6, 1, 3, 0, 4, 1, 3, 1, 1, - 1, 1, 1, 1, 1, 3, 0, 4, 0, 6, - 1, 3, 0, 4, 1, 3, 1, 1, 1, 1, - 0, 4, 3, 3, 3 + 1, 1, 0, 4, 3, 3, 3 }; @@ -4439,8 +4447,8 @@ namespace isc { namespace dhcp { "\"encapsulate\"", "\"array\"", "\"shared-networks\"", "\"pools\"", "\"pool\"", "\"user-context\"", "\"comment\"", "\"subnet\"", "\"interface\"", "\"interface-id\"", "\"id\"", "\"rapid-commit\"", - "\"reservation-mode\"", "\"disabled\"", "\"out-of-pool\"", "\"all\"", - "\"host-reservation-identifiers\"", "\"client-classes\"", + "\"reservation-mode\"", "\"disabled\"", "\"out-of-pool\"", "\"global\"", + "\"all\"", "\"host-reservation-identifiers\"", "\"client-classes\"", "\"require-client-classes\"", "\"test\"", "\"only-if-required\"", "\"client-class\"", "\"reservations\"", "\"duid\"", "\"hw-address\"", "\"circuit-id\"", "\"client-id\"", "\"hostname\"", "\"flex-id\"", @@ -4554,68 +4562,68 @@ namespace isc { namespace dhcp { const unsigned short int Dhcp4Parser::yyrline_[] = { - 0, 244, 244, 244, 245, 245, 246, 246, 247, 247, - 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, - 253, 253, 254, 254, 255, 255, 256, 256, 264, 265, - 266, 267, 268, 269, 270, 273, 278, 278, 289, 292, - 293, 296, 300, 307, 307, 314, 315, 318, 322, 329, - 329, 336, 337, 340, 344, 355, 365, 365, 381, 382, - 386, 387, 388, 389, 390, 391, 394, 394, 409, 409, - 418, 419, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 453, - 458, 463, 468, 473, 478, 484, 484, 495, 496, 499, - 500, 501, 502, 503, 504, 505, 508, 508, 517, 517, - 527, 527, 534, 535, 538, 538, 545, 547, 551, 557, - 557, 569, 569, 581, 581, 591, 592, 595, 596, 599, - 599, 609, 610, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, - 630, 633, 633, 640, 641, 642, 643, 646, 646, 654, - 654, 662, 662, 670, 675, 675, 683, 688, 693, 698, - 703, 708, 713, 718, 718, 726, 726, 734, 739, 744, - 744, 754, 755, 758, 759, 760, 761, 762, 765, 770, - 775, 780, 785, 790, 790, 800, 801, 804, 805, 808, - 808, 818, 818, 828, 829, 830, 833, 834, 837, 837, - 845, 845, 853, 853, 864, 865, 868, 869, 870, 871, - 872, 873, 876, 881, 886, 891, 896, 901, 909, 909, - 922, 923, 926, 927, 934, 934, 960, 960, 971, 972, - 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, - 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, - 996, 997, 998, 999, 1000, 1003, 1003, 1011, 1011, 1019, - 1019, 1027, 1027, 1035, 1035, 1043, 1043, 1051, 1051, 1059, - 1059, 1069, 1069, 1076, 1077, 1078, 1081, 1086, 1093, 1093, - 1104, 1105, 1109, 1110, 1113, 1113, 1121, 1122, 1125, 1126, - 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, - 1137, 1138, 1139, 1140, 1141, 1142, 1149, 1149, 1162, 1162, - 1171, 1172, 1175, 1176, 1181, 1181, 1196, 1196, 1210, 1211, - 1214, 1215, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, - 1226, 1227, 1230, 1232, 1237, 1239, 1239, 1247, 1247, 1255, - 1255, 1263, 1265, 1265, 1273, 1282, 1282, 1294, 1295, 1300, - 1301, 1306, 1306, 1318, 1318, 1330, 1331, 1336, 1337, 1342, - 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1353, 1355, - 1355, 1363, 1365, 1367, 1372, 1380, 1380, 1392, 1393, 1396, - 1397, 1400, 1400, 1410, 1410, 1420, 1421, 1424, 1425, 1426, - 1427, 1428, 1429, 1430, 1433, 1433, 1441, 1441, 1466, 1466, - 1496, 1496, 1506, 1507, 1510, 1511, 1514, 1514, 1523, 1523, - 1532, 1533, 1536, 1537, 1541, 1542, 1543, 1544, 1545, 1546, - 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1558, - 1558, 1566, 1566, 1574, 1574, 1582, 1582, 1590, 1590, 1600, - 1600, 1608, 1608, 1616, 1616, 1624, 1624, 1632, 1632, 1640, - 1640, 1648, 1648, 1661, 1661, 1671, 1672, 1678, 1678, 1688, - 1689, 1692, 1692, 1702, 1703, 1706, 1707, 1710, 1711, 1712, - 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1723, 1725, - 1725, 1733, 1742, 1749, 1749, 1759, 1760, 1763, 1764, 1765, - 1766, 1767, 1770, 1770, 1778, 1778, 1788, 1788, 1800, 1800, - 1810, 1811, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, - 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1833, - 1838, 1838, 1846, 1846, 1854, 1859, 1859, 1867, 1872, 1877, - 1877, 1885, 1886, 1889, 1889, 1897, 1902, 1907, 1912, 1912, - 1920, 1923, 1926, 1929, 1932, 1938, 1938, 1948, 1948, 1955, - 1955, 1962, 1962, 1974, 1974, 1984, 1984, 1995, 1996, 2000, - 2004, 2004, 2016, 2017, 2021, 2021, 2029, 2030, 2033, 2034, - 2035, 2036, 2037, 2038, 2039, 2042, 2047, 2047, 2055, 2055, - 2065, 2066, 2069, 2069, 2077, 2078, 2081, 2082, 2083, 2084, - 2087, 2087, 2095, 2100, 2105 + 0, 245, 245, 245, 246, 246, 247, 247, 248, 248, + 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, + 254, 254, 255, 255, 256, 256, 257, 257, 265, 266, + 267, 268, 269, 270, 271, 274, 279, 279, 290, 293, + 294, 297, 301, 308, 308, 315, 316, 319, 323, 330, + 330, 337, 338, 341, 345, 356, 366, 366, 382, 383, + 387, 388, 389, 390, 391, 392, 395, 395, 410, 410, + 419, 420, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 455, 460, 465, 470, 475, 480, 486, 486, 497, 498, + 501, 502, 503, 504, 505, 506, 507, 510, 510, 519, + 519, 529, 529, 536, 537, 540, 540, 547, 549, 553, + 559, 559, 571, 571, 583, 583, 593, 594, 597, 598, + 601, 601, 611, 612, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, + 631, 632, 635, 635, 642, 643, 644, 645, 648, 648, + 656, 656, 664, 664, 672, 677, 677, 685, 690, 695, + 700, 705, 710, 715, 720, 720, 728, 728, 736, 741, + 746, 746, 756, 757, 760, 761, 762, 763, 764, 767, + 772, 777, 782, 787, 792, 792, 802, 803, 806, 807, + 810, 810, 820, 820, 830, 831, 832, 835, 836, 839, + 839, 847, 847, 855, 855, 866, 867, 870, 871, 872, + 873, 874, 875, 878, 883, 888, 893, 898, 903, 911, + 911, 924, 925, 928, 929, 936, 936, 962, 962, 973, + 974, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, + 997, 998, 999, 1000, 1001, 1002, 1005, 1005, 1013, 1013, + 1021, 1021, 1029, 1029, 1037, 1037, 1045, 1045, 1053, 1053, + 1061, 1061, 1071, 1071, 1078, 1079, 1080, 1081, 1084, 1089, + 1096, 1096, 1107, 1108, 1112, 1113, 1116, 1116, 1124, 1125, + 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, + 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1152, 1152, + 1165, 1165, 1174, 1175, 1178, 1179, 1184, 1184, 1199, 1199, + 1213, 1214, 1217, 1218, 1221, 1222, 1223, 1224, 1225, 1226, + 1227, 1228, 1229, 1230, 1233, 1235, 1240, 1242, 1242, 1250, + 1250, 1258, 1258, 1266, 1268, 1268, 1276, 1285, 1285, 1297, + 1298, 1303, 1304, 1309, 1309, 1321, 1321, 1333, 1334, 1339, + 1340, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, + 1356, 1358, 1358, 1366, 1368, 1370, 1375, 1383, 1383, 1395, + 1396, 1399, 1400, 1403, 1403, 1413, 1413, 1423, 1424, 1427, + 1428, 1429, 1430, 1431, 1432, 1433, 1436, 1436, 1444, 1444, + 1469, 1469, 1499, 1499, 1509, 1510, 1513, 1514, 1517, 1517, + 1526, 1526, 1535, 1536, 1539, 1540, 1544, 1545, 1546, 1547, + 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, + 1558, 1561, 1561, 1569, 1569, 1577, 1577, 1585, 1585, 1593, + 1593, 1603, 1603, 1611, 1611, 1619, 1619, 1627, 1627, 1635, + 1635, 1643, 1643, 1651, 1651, 1664, 1664, 1674, 1675, 1681, + 1681, 1691, 1692, 1695, 1695, 1705, 1706, 1709, 1710, 1713, + 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, + 1726, 1728, 1728, 1736, 1745, 1752, 1752, 1762, 1763, 1766, + 1767, 1768, 1769, 1770, 1773, 1773, 1781, 1781, 1791, 1791, + 1803, 1803, 1813, 1814, 1817, 1818, 1819, 1820, 1821, 1822, + 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, + 1833, 1836, 1841, 1841, 1849, 1849, 1857, 1862, 1862, 1870, + 1875, 1880, 1880, 1888, 1889, 1892, 1892, 1900, 1905, 1910, + 1915, 1915, 1923, 1926, 1929, 1932, 1935, 1941, 1941, 1951, + 1951, 1958, 1958, 1965, 1965, 1977, 1977, 1987, 1987, 1998, + 1999, 2003, 2007, 2007, 2019, 2020, 2024, 2024, 2032, 2033, + 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2045, 2050, 2050, + 2058, 2058, 2068, 2069, 2072, 2072, 2080, 2081, 2084, 2085, + 2086, 2087, 2090, 2090, 2098, 2103, 2108 }; // Print the state stack on the debug stream. @@ -4650,8 +4658,8 @@ namespace isc { namespace dhcp { #line 14 "dhcp4_parser.yy" // lalr1.cc:1167 } } // isc::dhcp -#line 4654 "dhcp4_parser.cc" // lalr1.cc:1167 -#line 2110 "dhcp4_parser.yy" // lalr1.cc:1168 +#line 4662 "dhcp4_parser.cc" // lalr1.cc:1167 +#line 2113 "dhcp4_parser.yy" // lalr1.cc:1168 void diff --git a/src/bin/dhcp4/dhcp4_parser.h b/src/bin/dhcp4/dhcp4_parser.h index c7e972a12b..8f85ea9903 100644 --- a/src/bin/dhcp4/dhcp4_parser.h +++ b/src/bin/dhcp4/dhcp4_parser.h @@ -425,87 +425,88 @@ namespace isc { namespace dhcp { TOKEN_RESERVATION_MODE = 332, TOKEN_DISABLED = 333, TOKEN_OUT_OF_POOL = 334, - TOKEN_ALL = 335, - TOKEN_HOST_RESERVATION_IDENTIFIERS = 336, - TOKEN_CLIENT_CLASSES = 337, - TOKEN_REQUIRE_CLIENT_CLASSES = 338, - TOKEN_TEST = 339, - TOKEN_ONLY_IF_REQUIRED = 340, - TOKEN_CLIENT_CLASS = 341, - TOKEN_RESERVATIONS = 342, - TOKEN_DUID = 343, - TOKEN_HW_ADDRESS = 344, - TOKEN_CIRCUIT_ID = 345, - TOKEN_CLIENT_ID = 346, - TOKEN_HOSTNAME = 347, - TOKEN_FLEX_ID = 348, - TOKEN_RELAY = 349, - TOKEN_IP_ADDRESS = 350, - TOKEN_IP_ADDRESSES = 351, - TOKEN_HOOKS_LIBRARIES = 352, - TOKEN_LIBRARY = 353, - TOKEN_PARAMETERS = 354, - TOKEN_EXPIRED_LEASES_PROCESSING = 355, - TOKEN_RECLAIM_TIMER_WAIT_TIME = 356, - TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 357, - TOKEN_HOLD_RECLAIMED_TIME = 358, - TOKEN_MAX_RECLAIM_LEASES = 359, - TOKEN_MAX_RECLAIM_TIME = 360, - TOKEN_UNWARNED_RECLAIM_CYCLES = 361, - TOKEN_DHCP4O6_PORT = 362, - TOKEN_CONTROL_SOCKET = 363, - TOKEN_SOCKET_TYPE = 364, - TOKEN_SOCKET_NAME = 365, - TOKEN_DHCP_DDNS = 366, - TOKEN_ENABLE_UPDATES = 367, - TOKEN_QUALIFYING_SUFFIX = 368, - TOKEN_SERVER_IP = 369, - TOKEN_SERVER_PORT = 370, - TOKEN_SENDER_IP = 371, - TOKEN_SENDER_PORT = 372, - TOKEN_MAX_QUEUE_SIZE = 373, - TOKEN_NCR_PROTOCOL = 374, - TOKEN_NCR_FORMAT = 375, - TOKEN_ALWAYS_INCLUDE_FQDN = 376, - TOKEN_OVERRIDE_NO_UPDATE = 377, - TOKEN_OVERRIDE_CLIENT_UPDATE = 378, - TOKEN_REPLACE_CLIENT_NAME = 379, - TOKEN_GENERATED_PREFIX = 380, - TOKEN_TCP = 381, - TOKEN_JSON = 382, - TOKEN_WHEN_PRESENT = 383, - TOKEN_NEVER = 384, - TOKEN_ALWAYS = 385, - TOKEN_WHEN_NOT_PRESENT = 386, - TOKEN_LOGGING = 387, - TOKEN_LOGGERS = 388, - TOKEN_OUTPUT_OPTIONS = 389, - TOKEN_OUTPUT = 390, - TOKEN_DEBUGLEVEL = 391, - TOKEN_SEVERITY = 392, - TOKEN_FLUSH = 393, - TOKEN_MAXSIZE = 394, - TOKEN_MAXVER = 395, - TOKEN_DHCP6 = 396, - TOKEN_DHCPDDNS = 397, - TOKEN_CONTROL_AGENT = 398, - TOKEN_TOPLEVEL_JSON = 399, - TOKEN_TOPLEVEL_DHCP4 = 400, - TOKEN_SUB_DHCP4 = 401, - TOKEN_SUB_INTERFACES4 = 402, - TOKEN_SUB_SUBNET4 = 403, - TOKEN_SUB_POOL4 = 404, - TOKEN_SUB_RESERVATION = 405, - TOKEN_SUB_OPTION_DEFS = 406, - TOKEN_SUB_OPTION_DEF = 407, - TOKEN_SUB_OPTION_DATA = 408, - TOKEN_SUB_HOOKS_LIBRARY = 409, - TOKEN_SUB_DHCP_DDNS = 410, - TOKEN_SUB_LOGGING = 411, - TOKEN_STRING = 412, - TOKEN_INTEGER = 413, - TOKEN_FLOAT = 414, - TOKEN_BOOLEAN = 415 + TOKEN_GLOBAL = 335, + TOKEN_ALL = 336, + TOKEN_HOST_RESERVATION_IDENTIFIERS = 337, + TOKEN_CLIENT_CLASSES = 338, + TOKEN_REQUIRE_CLIENT_CLASSES = 339, + TOKEN_TEST = 340, + TOKEN_ONLY_IF_REQUIRED = 341, + TOKEN_CLIENT_CLASS = 342, + TOKEN_RESERVATIONS = 343, + TOKEN_DUID = 344, + TOKEN_HW_ADDRESS = 345, + TOKEN_CIRCUIT_ID = 346, + TOKEN_CLIENT_ID = 347, + TOKEN_HOSTNAME = 348, + TOKEN_FLEX_ID = 349, + TOKEN_RELAY = 350, + TOKEN_IP_ADDRESS = 351, + TOKEN_IP_ADDRESSES = 352, + TOKEN_HOOKS_LIBRARIES = 353, + TOKEN_LIBRARY = 354, + TOKEN_PARAMETERS = 355, + TOKEN_EXPIRED_LEASES_PROCESSING = 356, + TOKEN_RECLAIM_TIMER_WAIT_TIME = 357, + TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 358, + TOKEN_HOLD_RECLAIMED_TIME = 359, + TOKEN_MAX_RECLAIM_LEASES = 360, + TOKEN_MAX_RECLAIM_TIME = 361, + TOKEN_UNWARNED_RECLAIM_CYCLES = 362, + TOKEN_DHCP4O6_PORT = 363, + TOKEN_CONTROL_SOCKET = 364, + TOKEN_SOCKET_TYPE = 365, + TOKEN_SOCKET_NAME = 366, + TOKEN_DHCP_DDNS = 367, + TOKEN_ENABLE_UPDATES = 368, + TOKEN_QUALIFYING_SUFFIX = 369, + TOKEN_SERVER_IP = 370, + TOKEN_SERVER_PORT = 371, + TOKEN_SENDER_IP = 372, + TOKEN_SENDER_PORT = 373, + TOKEN_MAX_QUEUE_SIZE = 374, + TOKEN_NCR_PROTOCOL = 375, + TOKEN_NCR_FORMAT = 376, + TOKEN_ALWAYS_INCLUDE_FQDN = 377, + TOKEN_OVERRIDE_NO_UPDATE = 378, + TOKEN_OVERRIDE_CLIENT_UPDATE = 379, + TOKEN_REPLACE_CLIENT_NAME = 380, + TOKEN_GENERATED_PREFIX = 381, + TOKEN_TCP = 382, + TOKEN_JSON = 383, + TOKEN_WHEN_PRESENT = 384, + TOKEN_NEVER = 385, + TOKEN_ALWAYS = 386, + TOKEN_WHEN_NOT_PRESENT = 387, + TOKEN_LOGGING = 388, + TOKEN_LOGGERS = 389, + TOKEN_OUTPUT_OPTIONS = 390, + TOKEN_OUTPUT = 391, + TOKEN_DEBUGLEVEL = 392, + TOKEN_SEVERITY = 393, + TOKEN_FLUSH = 394, + TOKEN_MAXSIZE = 395, + TOKEN_MAXVER = 396, + TOKEN_DHCP6 = 397, + TOKEN_DHCPDDNS = 398, + TOKEN_CONTROL_AGENT = 399, + TOKEN_TOPLEVEL_JSON = 400, + TOKEN_TOPLEVEL_DHCP4 = 401, + TOKEN_SUB_DHCP4 = 402, + TOKEN_SUB_INTERFACES4 = 403, + TOKEN_SUB_SUBNET4 = 404, + TOKEN_SUB_POOL4 = 405, + TOKEN_SUB_RESERVATION = 406, + TOKEN_SUB_OPTION_DEFS = 407, + TOKEN_SUB_OPTION_DEF = 408, + TOKEN_SUB_OPTION_DATA = 409, + TOKEN_SUB_HOOKS_LIBRARY = 410, + TOKEN_SUB_DHCP_DDNS = 411, + TOKEN_SUB_LOGGING = 412, + TOKEN_STRING = 413, + TOKEN_INTEGER = 414, + TOKEN_FLOAT = 415, + TOKEN_BOOLEAN = 416 }; }; @@ -932,6 +933,10 @@ namespace isc { namespace dhcp { symbol_type make_OUT_OF_POOL (const location_type& l); + static inline + symbol_type + make_GLOBAL (const location_type& l); + static inline symbol_type make_ALL (const location_type& l); @@ -1461,12 +1466,12 @@ namespace isc { namespace dhcp { enum { yyeof_ = 0, - yylast_ = 935, ///< Last index in yytable_. + yylast_ = 945, ///< Last index in yytable_. yynnts_ = 353, ///< Number of nonterminal symbols. yyfinal_ = 28, ///< Termination state number. yyterror_ = 1, yyerrcode_ = 256, - yyntokens_ = 161 ///< Number of tokens. + yyntokens_ = 162 ///< Number of tokens. }; @@ -1524,9 +1529,9 @@ namespace isc { namespace dhcp { 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160 + 155, 156, 157, 158, 159, 160, 161 }; - const unsigned int user_token_number_max_ = 415; + const unsigned int user_token_number_max_ = 416; const token_number_type undef_token_ = 2; if (static_cast(t) <= yyeof_) @@ -1559,30 +1564,30 @@ namespace isc { namespace dhcp { { switch (other.type_get ()) { - case 176: // value - case 180: // map_value - case 218: // socket_type - case 221: // outbound_interface_value - case 237: // db_type - case 321: // hr_mode - case 469: // ncr_protocol_value - case 477: // replace_client_name_value + case 177: // value + case 181: // map_value + case 219: // socket_type + case 222: // outbound_interface_value + case 238: // db_type + case 322: // hr_mode + case 470: // ncr_protocol_value + case 478: // replace_client_name_value value.copy< ElementPtr > (other.value); break; - case 160: // "boolean" + case 161: // "boolean" value.copy< bool > (other.value); break; - case 159: // "floating point" + case 160: // "floating point" value.copy< double > (other.value); break; - case 158: // "integer" + case 159: // "integer" value.copy< int64_t > (other.value); break; - case 157: // "constant string" + case 158: // "constant string" value.copy< std::string > (other.value); break; @@ -1603,30 +1608,30 @@ namespace isc { namespace dhcp { (void) v; switch (this->type_get ()) { - case 176: // value - case 180: // map_value - case 218: // socket_type - case 221: // outbound_interface_value - case 237: // db_type - case 321: // hr_mode - case 469: // ncr_protocol_value - case 477: // replace_client_name_value + case 177: // value + case 181: // map_value + case 219: // socket_type + case 222: // outbound_interface_value + case 238: // db_type + case 322: // hr_mode + case 470: // ncr_protocol_value + case 478: // replace_client_name_value value.copy< ElementPtr > (v); break; - case 160: // "boolean" + case 161: // "boolean" value.copy< bool > (v); break; - case 159: // "floating point" + case 160: // "floating point" value.copy< double > (v); break; - case 158: // "integer" + case 159: // "integer" value.copy< int64_t > (v); break; - case 157: // "constant string" + case 158: // "constant string" value.copy< std::string > (v); break; @@ -1706,30 +1711,30 @@ namespace isc { namespace dhcp { // Type destructor. switch (yytype) { - case 176: // value - case 180: // map_value - case 218: // socket_type - case 221: // outbound_interface_value - case 237: // db_type - case 321: // hr_mode - case 469: // ncr_protocol_value - case 477: // replace_client_name_value + case 177: // value + case 181: // map_value + case 219: // socket_type + case 222: // outbound_interface_value + case 238: // db_type + case 322: // hr_mode + case 470: // ncr_protocol_value + case 478: // replace_client_name_value value.template destroy< ElementPtr > (); break; - case 160: // "boolean" + case 161: // "boolean" value.template destroy< bool > (); break; - case 159: // "floating point" + case 160: // "floating point" value.template destroy< double > (); break; - case 158: // "integer" + case 159: // "integer" value.template destroy< int64_t > (); break; - case 157: // "constant string" + case 158: // "constant string" value.template destroy< std::string > (); break; @@ -1756,30 +1761,30 @@ namespace isc { namespace dhcp { super_type::move(s); switch (this->type_get ()) { - case 176: // value - case 180: // map_value - case 218: // socket_type - case 221: // outbound_interface_value - case 237: // db_type - case 321: // hr_mode - case 469: // ncr_protocol_value - case 477: // replace_client_name_value + case 177: // value + case 181: // map_value + case 219: // socket_type + case 222: // outbound_interface_value + case 238: // db_type + case 322: // hr_mode + case 470: // ncr_protocol_value + case 478: // replace_client_name_value value.move< ElementPtr > (s.value); break; - case 160: // "boolean" + case 161: // "boolean" value.move< bool > (s.value); break; - case 159: // "floating point" + case 160: // "floating point" value.move< double > (s.value); break; - case 158: // "integer" + case 159: // "integer" value.move< int64_t > (s.value); break; - case 157: // "constant string" + case 158: // "constant string" value.move< std::string > (s.value); break; @@ -1854,7 +1859,7 @@ namespace isc { namespace dhcp { 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415 + 415, 416 }; return static_cast (yytoken_number_[type]); } @@ -2327,6 +2332,12 @@ namespace isc { namespace dhcp { return symbol_type (token::TOKEN_OUT_OF_POOL, l); } + Dhcp4Parser::symbol_type + Dhcp4Parser::make_GLOBAL (const location_type& l) + { + return symbol_type (token::TOKEN_GLOBAL, l); + } + Dhcp4Parser::symbol_type Dhcp4Parser::make_ALL (const location_type& l) { @@ -2816,7 +2827,7 @@ namespace isc { namespace dhcp { #line 14 "dhcp4_parser.yy" // lalr1.cc:377 } } // isc::dhcp -#line 2820 "dhcp4_parser.h" // lalr1.cc:377 +#line 2831 "dhcp4_parser.h" // lalr1.cc:377 diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index 555cb965f3..090f3e2a52 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -125,6 +125,7 @@ using namespace std; RESERVATION_MODE "reservation-mode" DISABLED "disabled" OUT_OF_POOL "out-of-pool" + GLOBAL "global" ALL "all" HOST_RESERVATION_IDENTIFIERS "host-reservation-identifiers" @@ -447,6 +448,7 @@ global_param: valid_lifetime | boot_file_name | user_context | comment + | reservations | unknown_map_entry ; @@ -1075,6 +1077,7 @@ reservation_mode: RESERVATION_MODE { hr_mode: DISABLED { $$ = ElementPtr(new StringElement("disabled", ctx.loc2pos(@1))); } | OUT_OF_POOL { $$ = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(@1))); } + | GLOBAL { $$ = ElementPtr(new StringElement("global", ctx.loc2pos(@1))); } | ALL { $$ = ElementPtr(new StringElement("all", ctx.loc2pos(@1))); } ; diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index 646091cd09..163af46129 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -470,6 +470,17 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set, continue; } + if (config_pair.first == "reservations") { + HostCollection hosts; + HostReservationsListParser parser; + parser.parse(SUBNET_ID_GLOBAL, config_pair.second, hosts); + for (auto h = hosts.begin(); h != hosts.end(); ++h) { + srv_cfg->getCfgHosts()->add(*h); + } + + continue; + } + // Timers are not used in the global scope. Their values are derived // to specific subnets (see SimpleParser6::deriveParameters). // decline-probation-period, dhcp4o6-port, echo-client-id, diff --git a/src/bin/dhcp4/tests/Makefile.am b/src/bin/dhcp4/tests/Makefile.am index f23e046e05..eb4f1352e0 100644 --- a/src/bin/dhcp4/tests/Makefile.am +++ b/src/bin/dhcp4/tests/Makefile.am @@ -102,6 +102,7 @@ dhcp4_unittests_SOURCES += dhcp4to6_ipc_unittest.cc dhcp4_unittests_SOURCES += simple_parser4_unittest.cc dhcp4_unittests_SOURCES += get_config_unittest.cc get_config_unittest.h dhcp4_unittests_SOURCES += shared_network_unittest.cc +dhcp4_unittests_SOURCES += host_unittest.cc nodist_dhcp4_unittests_SOURCES = marker_file.h test_libraries.h diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc index 7d7289450f..82895dcff1 100644 --- a/src/bin/dhcp4/tests/config_parser_unittest.cc +++ b/src/bin/dhcp4/tests/config_parser_unittest.cc @@ -6050,7 +6050,7 @@ TEST_F(Dhcp4ParserTest, comments) { EXPECT_EQ("aa:bb:cc:dd:ee:ff", host->getHWAddress()->toText(false)); EXPECT_FALSE(host->getDuid()); EXPECT_EQ(100, host->getIPv4SubnetID()); - EXPECT_EQ(0, host->getIPv6SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, host->getIPv6SubnetID()); EXPECT_EQ("foo.example.com", host->getHostname()); // Check host user context. @@ -6101,4 +6101,141 @@ TEST_F(Dhcp4ParserTest, comments) { #endif } +// This test verifies that the global host reservations can be specified +TEST_F(Dhcp4ParserTest, globalReservations) { + ConstElementPtr x; + string config = "{ " + genIfaceConfig() + "," + + "\"rebind-timer\": 2000, \n" + "\"renew-timer\": 1000, \n" + "\"reservations\": [\n" + " {\n" + " \"duid\": \"01:02:03:04:05:06:07:08:09:0A\",\n" + " \"ip-address\": \"192.0.200.1\",\n" + " \"hostname\": \"global1\",\n" + " \"option-data\": [\n" + " {\n" + " \"name\": \"name-servers\",\n" + " \"data\": \"192.0.3.15\"\n" + " },\n" + " {\n" + " \"name\": \"default-ip-ttl\",\n" + " \"data\": \"32\"\n" + " }\n" + " ]\n" + " },\n" + " {\n" + " \"hw-address\": \"01:02:03:04:05:06\",\n" + " \"hostname\": \"global2\",\n" + " \"option-data\": [\n" + " {\n" + " \"name\": \"name-servers\",\n" + " \"data\": \"192.0.3.95\"\n" + " },\n" + " {\n" + " \"name\": \"default-ip-ttl\",\n" + " \"data\": \"11\"\n" + " }\n" + " ]\n" + " }],\n" + "\"subnet4\": [ \n" + " { \n" + " \"pools\": [ { \"pool\": \"192.0.2.1 - 192.0.2.100\" } ],\n" + " \"subnet\": \"192.0.2.0/24\", \n" + " \"id\": 123,\n" + " \"reservations\": [\n" + " ]\n" + " },\n" + " {\n" + " \"pools\": [ { \"pool\": \"192.0.4.101 - 192.0.4.150\" } ],\n" + " \"subnet\": \"192.0.4.0/24\",\n" + " \"id\": 542\n" + " } ],\n" + "\"valid-lifetime\": 4000" + "}\n"; + + ConstElementPtr json; + try { + (json = parseDHCP4(config)); + } catch (const std::exception& ex) { + FAIL() << "KA-BLAM! " << ex.what(); + } + + + ASSERT_NO_THROW(json = parseDHCP4(config)); + extractConfig(config); + + EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json)); + checkResult(x, 0); + + // Make sure all subnets have been successfully configured. There is no + // need to sanity check the subnet properties because it should have + // been already tested by other tests. + const Subnet4Collection* subnets = + CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->getAll(); + ASSERT_TRUE(subnets); + ASSERT_EQ(2, subnets->size()); + + // Hosts configuration must be available. + CfgHostsPtr hosts_cfg = CfgMgr::instance().getStagingCfg()->getCfgHosts(); + ASSERT_TRUE(hosts_cfg); + + // Let's create a hardware address of the host named "global2" + std::vector hwaddr; + for (unsigned int i = 1; i < 7; ++i) { + hwaddr.push_back(static_cast(i)); + } + + // Retrieve the global reservation and sanity check the hostname reserved. + ConstHostPtr host = hosts_cfg->get4(SUBNET_ID_GLOBAL, Host::IDENT_HWADDR, + &hwaddr[0], hwaddr.size()); + ASSERT_TRUE(host); + EXPECT_EQ("global2", host->getHostname()); + + // Check that options are stored correctly. + Option4AddrLstPtr opt_dns = + retrieveOption(*host, DHO_NAME_SERVERS); + ASSERT_TRUE(opt_dns); + Option4AddrLst::AddressContainer dns_addrs = opt_dns->getAddresses(); + ASSERT_EQ(1, dns_addrs.size()); + EXPECT_EQ("192.0.3.95", dns_addrs[0].toText()); + OptionUint8Ptr opt_ttl = + retrieveOption(*host, DHO_DEFAULT_IP_TTL); + ASSERT_TRUE(opt_ttl); + EXPECT_EQ(11, static_cast(opt_ttl->getValue())); + + // This reservation should be global solely and not assigned to + // either subnet + EXPECT_FALSE(hosts_cfg->get4(123, Host::IDENT_HWADDR, + &hwaddr[0], hwaddr.size())); + + EXPECT_FALSE(hosts_cfg->get4(542, Host::IDENT_HWADDR, + &hwaddr[0], hwaddr.size())); + + // Do the same test for the DUID based reservation. + std::vector duid; + for (unsigned int i = 1; i < 0xb; ++i) { + duid.push_back(static_cast(i)); + } + + // Retrieve the global reservation and sanity check the hostname reserved. + host = hosts_cfg->get4(SUBNET_ID_GLOBAL, Host::IDENT_DUID, &duid[0], duid.size()); + ASSERT_TRUE(host); + EXPECT_EQ("global1", host->getHostname()); + + // Check that options are assigned correctly. + opt_dns = retrieveOption(*host, DHO_NAME_SERVERS); + ASSERT_TRUE(opt_dns); + dns_addrs = opt_dns->getAddresses(); + ASSERT_EQ(1, dns_addrs.size()); + EXPECT_EQ("192.0.3.15", dns_addrs[0].toText()); + opt_ttl = retrieveOption(*host, DHO_DEFAULT_IP_TTL); + ASSERT_TRUE(opt_ttl); + EXPECT_EQ(32, static_cast(opt_ttl->getValue())); + + // This reservation should be global solely and not assigned to + // either subnet + EXPECT_FALSE(hosts_cfg->get4(123, Host::IDENT_DUID, &duid[0], duid.size())); + EXPECT_FALSE(hosts_cfg->get4(542, Host::IDENT_DUID, &duid[0], duid.size())); +} + } diff --git a/src/bin/dhcp4/tests/dhcp4_test_utils.cc b/src/bin/dhcp4/tests/dhcp4_test_utils.cc index 75c31f3f67..ca66463c07 100644 --- a/src/bin/dhcp4/tests/dhcp4_test_utils.cc +++ b/src/bin/dhcp4/tests/dhcp4_test_utils.cc @@ -605,7 +605,15 @@ void Dhcpv4SrvTest::configure(const std::string& config, NakedDhcpv4Srv& srv, const bool commit) { ConstElementPtr json; - ASSERT_NO_THROW(json = parseJSON(config)); + try { + json = parseJSON(config); + } catch (const std::exception& ex){ + // Fatal falure on parsing error + FAIL() << "parsing failure:" + << "config:" << config << std::endl + << "error: " << ex.what(); + } + ConstElementPtr status; // Disable the re-detect flag @@ -616,7 +624,7 @@ Dhcpv4SrvTest::configure(const std::string& config, NakedDhcpv4Srv& srv, ASSERT_TRUE(status); int rcode; ConstElementPtr comment = config::parseAnswer(rcode, status); - ASSERT_EQ(0, rcode); + ASSERT_EQ(0, rcode) << comment->stringValue(); // Use specified lease database backend. ASSERT_NO_THROW( { diff --git a/src/bin/dhcp4/tests/dora_unittest.cc b/src/bin/dhcp4/tests/dora_unittest.cc index 2c45e53d9c..a4a4243599 100644 --- a/src/bin/dhcp4/tests/dora_unittest.cc +++ b/src/bin/dhcp4/tests/dora_unittest.cc @@ -1361,7 +1361,7 @@ TEST_F(DORATest, reservationsWithConflicts) { HostPtr host(new Host(&client.getHWAddress()->hwaddr_[0], client.getHWAddress()->hwaddr_.size(), Host::IDENT_HWADDR, SubnetID(1), - SubnetID(0), IOAddress("10.0.0.9"))); + SUBNET_ID_UNUSED, IOAddress("10.0.0.9"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1440,7 +1440,7 @@ TEST_F(DORATest, reservationsWithConflicts) { host.reset(new Host(&clientB.getHWAddress()->hwaddr_[0], clientB.getHWAddress()->hwaddr_.size(), Host::IDENT_HWADDR, SubnetID(1), - SubnetID(0), in_pool_addr)); + SUBNET_ID_UNUSED, in_pool_addr)); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); diff --git a/src/bin/dhcp4/tests/get_config_unittest.cc b/src/bin/dhcp4/tests/get_config_unittest.cc index ca2affa5a4..84a6f6fc4b 100644 --- a/src/bin/dhcp4/tests/get_config_unittest.cc +++ b/src/bin/dhcp4/tests/get_config_unittest.cc @@ -1851,6 +1851,68 @@ const char* EXTRACTED_CONFIGS[] = { " ]\n" " }\n" " ]\n" +" }\n", + // CONFIGURATION 63 +"{\n" +" \"interfaces-config\": {\n" +" \"interfaces\": [ \"*\" ],\n" +" \"re-detect\": false\n" +" },\n" +" \"rebind-timer\": 2000,\n" +" \"renew-timer\": 1000,\n" +" \"reservations\": [\n" +" {\n" +" \"duid\": \"01:02:03:04:05:06:07:08:09:0A\",\n" +" \"hostname\": \"global1\",\n" +" \"ip-address\": \"192.0.200.1\",\n" +" \"option-data\": [\n" +" {\n" +" \"data\": \"192.0.3.15\",\n" +" \"name\": \"name-servers\"\n" +" },\n" +" {\n" +" \"data\": \"32\",\n" +" \"name\": \"default-ip-ttl\"\n" +" }\n" +" ]\n" +" },\n" +" {\n" +" \"hostname\": \"global2\",\n" +" \"hw-address\": \"01:02:03:04:05:06\",\n" +" \"option-data\": [\n" +" {\n" +" \"data\": \"192.0.3.95\",\n" +" \"name\": \"name-servers\"\n" +" },\n" +" {\n" +" \"data\": \"11\",\n" +" \"name\": \"default-ip-ttl\"\n" +" }\n" +" ]\n" +" }\n" +" ],\n" +" \"subnet4\": [\n" +" {\n" +" \"id\": 123,\n" +" \"pools\": [\n" +" {\n" +" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n" +" }\n" +" ],\n" +" \"reservations\": [ ],\n" +" \"subnet\": \"192.0.2.0/24\"\n" +" },\n" +" {\n" +" \"id\": 542,\n" +" \"pools\": [\n" +" {\n" +" \"pool\": \"192.0.4.101 - 192.0.4.150\"\n" +" }\n" +" ],\n" +" \"subnet\": \"192.0.4.0/24\"\n" +" }\n" +" ],\n" +" \"valid-lifetime\": 4000\n" " }\n" }; @@ -7177,6 +7239,160 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"subnet4\": [ ]\n" +" }\n", + // CONFIGURATION 63 +"{\n" +" \"decline-probation-period\": 86400,\n" +" \"dhcp-ddns\": {\n" +" \"always-include-fqdn\": false,\n" +" \"enable-updates\": false,\n" +" \"generated-prefix\": \"myhost\",\n" +" \"max-queue-size\": 1024,\n" +" \"ncr-format\": \"JSON\",\n" +" \"ncr-protocol\": \"UDP\",\n" +" \"override-client-update\": false,\n" +" \"override-no-update\": false,\n" +" \"qualifying-suffix\": \"\",\n" +" \"replace-client-name\": \"never\",\n" +" \"sender-ip\": \"0.0.0.0\",\n" +" \"sender-port\": 0,\n" +" \"server-ip\": \"127.0.0.1\",\n" +" \"server-port\": 53001\n" +" },\n" +" \"dhcp4o6-port\": 0,\n" +" \"echo-client-id\": true,\n" +" \"expired-leases-processing\": {\n" +" \"flush-reclaimed-timer-wait-time\": 25,\n" +" \"hold-reclaimed-time\": 3600,\n" +" \"max-reclaim-leases\": 100,\n" +" \"max-reclaim-time\": 250,\n" +" \"reclaim-timer-wait-time\": 10,\n" +" \"unwarned-reclaim-cycles\": 5\n" +" },\n" +" \"hooks-libraries\": [ ],\n" +" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n" +" \"interfaces-config\": {\n" +" \"interfaces\": [ \"*\" ],\n" +" \"re-detect\": false\n" +" },\n" +" \"lease-database\": {\n" +" \"type\": \"memfile\"\n" +" },\n" +" \"option-data\": [ ],\n" +" \"option-def\": [ ],\n" +" \"rebind-timer\": 2000,\n" +" \"renew-timer\": 1000,\n" +" \"reservations\": [\n" +" {\n" +" \"boot-file-name\": \"\",\n" +" \"client-classes\": [ ],\n" +" \"hostname\": \"global2\",\n" +" \"hw-address\": \"01:02:03:04:05:06\",\n" +" \"next-server\": \"0.0.0.0\",\n" +" \"option-data\": [\n" +" {\n" +" \"always-send\": false,\n" +" \"code\": 5,\n" +" \"csv-format\": true,\n" +" \"data\": \"192.0.3.95\",\n" +" \"name\": \"name-servers\",\n" +" \"space\": \"dhcp4\"\n" +" },\n" +" {\n" +" \"always-send\": false,\n" +" \"code\": 23,\n" +" \"csv-format\": true,\n" +" \"data\": \"11\",\n" +" \"name\": \"default-ip-ttl\",\n" +" \"space\": \"dhcp4\"\n" +" }\n" +" ],\n" +" \"server-hostname\": \"\"\n" +" },\n" +" {\n" +" \"boot-file-name\": \"\",\n" +" \"client-classes\": [ ],\n" +" \"duid\": \"01:02:03:04:05:06:07:08:09:0a\",\n" +" \"hostname\": \"global1\",\n" +" \"ip-address\": \"192.0.200.1\",\n" +" \"next-server\": \"0.0.0.0\",\n" +" \"option-data\": [\n" +" {\n" +" \"always-send\": false,\n" +" \"code\": 5,\n" +" \"csv-format\": true,\n" +" \"data\": \"192.0.3.15\",\n" +" \"name\": \"name-servers\",\n" +" \"space\": \"dhcp4\"\n" +" },\n" +" {\n" +" \"always-send\": false,\n" +" \"code\": 23,\n" +" \"csv-format\": true,\n" +" \"data\": \"32\",\n" +" \"name\": \"default-ip-ttl\",\n" +" \"space\": \"dhcp4\"\n" +" }\n" +" ],\n" +" \"server-hostname\": \"\"\n" +" }\n" +" ],\n" +" \"shared-networks\": [ ],\n" +" \"subnet4\": [\n" +" {\n" +" \"4o6-interface\": \"\",\n" +" \"4o6-interface-id\": \"\",\n" +" \"4o6-subnet\": \"\",\n" +" \"boot-file-name\": \"\",\n" +" \"id\": 123,\n" +" \"match-client-id\": true,\n" +" \"next-server\": \"0.0.0.0\",\n" +" \"option-data\": [ ],\n" +" \"pools\": [\n" +" {\n" +" \"option-data\": [ ],\n" +" \"pool\": \"192.0.2.1-192.0.2.100\"\n" +" }\n" +" ],\n" +" \"rebind-timer\": 2000,\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"renew-timer\": 1000,\n" +" \"reservation-mode\": \"all\",\n" +" \"reservations\": [ ],\n" +" \"server-hostname\": \"\",\n" +" \"subnet\": \"192.0.2.0/24\",\n" +" \"valid-lifetime\": 4000\n" +" },\n" +" {\n" +" \"4o6-interface\": \"\",\n" +" \"4o6-interface-id\": \"\",\n" +" \"4o6-subnet\": \"\",\n" +" \"boot-file-name\": \"\",\n" +" \"id\": 542,\n" +" \"match-client-id\": true,\n" +" \"next-server\": \"0.0.0.0\",\n" +" \"option-data\": [ ],\n" +" \"pools\": [\n" +" {\n" +" \"option-data\": [ ],\n" +" \"pool\": \"192.0.4.101-192.0.4.150\"\n" +" }\n" +" ],\n" +" \"rebind-timer\": 2000,\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"renew-timer\": 1000,\n" +" \"reservation-mode\": \"all\",\n" +" \"reservations\": [ ],\n" +" \"server-hostname\": \"\",\n" +" \"subnet\": \"192.0.4.0/24\",\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"valid-lifetime\": 4000\n" " }\n" }; diff --git a/src/bin/dhcp6/dhcp6_lexer.cc b/src/bin/dhcp6/dhcp6_lexer.cc index 25d548e897..a3dbb5aa5e 100644 --- a/src/bin/dhcp6/dhcp6_lexer.cc +++ b/src/bin/dhcp6/dhcp6_lexer.cc @@ -1,22 +1,27 @@ -#line 2 "dhcp6_lexer.cc" +#line 1 "dhcp6_lexer.cc" -#line 4 "dhcp6_lexer.cc" +#line 3 "dhcp6_lexer.cc" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ /* %not-for-header */ - /* %if-c-only */ /* %if-not-reentrant */ #define yy_create_buffer parser6__create_buffer #define yy_delete_buffer parser6__delete_buffer -#define yy_flex_debug parser6__flex_debug +#define yy_scan_buffer parser6__scan_buffer +#define yy_scan_string parser6__scan_string +#define yy_scan_bytes parser6__scan_bytes #define yy_init_buffer parser6__init_buffer #define yy_flush_buffer parser6__flush_buffer #define yy_load_buffer_state parser6__load_buffer_state #define yy_switch_to_buffer parser6__switch_to_buffer +#define yypush_buffer_state parser6_push_buffer_state +#define yypop_buffer_state parser6_pop_buffer_state +#define yyensure_buffer_stack parser6_ensure_buffer_stack +#define yy_flex_debug parser6__flex_debug #define yyin parser6_in #define yyleng parser6_leng #define yylex parser6_lex @@ -36,7 +41,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 -#define YY_FLEX_SUBMINOR_VERSION 0 +#define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -45,11 +50,244 @@ /* %endif */ /* %if-c-only */ - +#ifdef yy_create_buffer +#define parser6__create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer parser6__create_buffer +#endif + +#ifdef yy_delete_buffer +#define parser6__delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer parser6__delete_buffer +#endif + +#ifdef yy_scan_buffer +#define parser6__scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer parser6__scan_buffer +#endif + +#ifdef yy_scan_string +#define parser6__scan_string_ALREADY_DEFINED +#else +#define yy_scan_string parser6__scan_string +#endif + +#ifdef yy_scan_bytes +#define parser6__scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes parser6__scan_bytes +#endif + +#ifdef yy_init_buffer +#define parser6__init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer parser6__init_buffer +#endif + +#ifdef yy_flush_buffer +#define parser6__flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer parser6__flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define parser6__load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state parser6__load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define parser6__switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer parser6__switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define parser6_push_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state parser6_push_buffer_state +#endif + +#ifdef yypop_buffer_state +#define parser6_pop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state parser6_pop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define parser6_ensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack parser6_ensure_buffer_stack +#endif + +#ifdef yylex +#define parser6_lex_ALREADY_DEFINED +#else +#define yylex parser6_lex +#endif + +#ifdef yyrestart +#define parser6_restart_ALREADY_DEFINED +#else +#define yyrestart parser6_restart +#endif + +#ifdef yylex_init +#define parser6_lex_init_ALREADY_DEFINED +#else +#define yylex_init parser6_lex_init +#endif + +#ifdef yylex_init_extra +#define parser6_lex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra parser6_lex_init_extra +#endif + +#ifdef yylex_destroy +#define parser6_lex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy parser6_lex_destroy +#endif + +#ifdef yyget_debug +#define parser6_get_debug_ALREADY_DEFINED +#else +#define yyget_debug parser6_get_debug +#endif + +#ifdef yyset_debug +#define parser6_set_debug_ALREADY_DEFINED +#else +#define yyset_debug parser6_set_debug +#endif + +#ifdef yyget_extra +#define parser6_get_extra_ALREADY_DEFINED +#else +#define yyget_extra parser6_get_extra +#endif + +#ifdef yyset_extra +#define parser6_set_extra_ALREADY_DEFINED +#else +#define yyset_extra parser6_set_extra +#endif + +#ifdef yyget_in +#define parser6_get_in_ALREADY_DEFINED +#else +#define yyget_in parser6_get_in +#endif + +#ifdef yyset_in +#define parser6_set_in_ALREADY_DEFINED +#else +#define yyset_in parser6_set_in +#endif + +#ifdef yyget_out +#define parser6_get_out_ALREADY_DEFINED +#else +#define yyget_out parser6_get_out +#endif + +#ifdef yyset_out +#define parser6_set_out_ALREADY_DEFINED +#else +#define yyset_out parser6_set_out +#endif + +#ifdef yyget_leng +#define parser6_get_leng_ALREADY_DEFINED +#else +#define yyget_leng parser6_get_leng +#endif + +#ifdef yyget_text +#define parser6_get_text_ALREADY_DEFINED +#else +#define yyget_text parser6_get_text +#endif + +#ifdef yyget_lineno +#define parser6_get_lineno_ALREADY_DEFINED +#else +#define yyget_lineno parser6_get_lineno +#endif + +#ifdef yyset_lineno +#define parser6_set_lineno_ALREADY_DEFINED +#else +#define yyset_lineno parser6_set_lineno +#endif + +#ifdef yywrap +#define parser6_wrap_ALREADY_DEFINED +#else +#define yywrap parser6_wrap +#endif + /* %endif */ +#ifdef yyalloc +#define parser6_alloc_ALREADY_DEFINED +#else +#define yyalloc parser6_alloc +#endif + +#ifdef yyrealloc +#define parser6_realloc_ALREADY_DEFINED +#else +#define yyrealloc parser6_realloc +#endif + +#ifdef yyfree +#define parser6_free_ALREADY_DEFINED +#else +#define yyfree parser6_free +#endif + /* %if-c-only */ +#ifdef yytext +#define parser6_text_ALREADY_DEFINED +#else +#define yytext parser6_text +#endif + +#ifdef yyleng +#define parser6_leng_ALREADY_DEFINED +#else +#define yyleng parser6_leng +#endif + +#ifdef yyin +#define parser6_in_ALREADY_DEFINED +#else +#define yyin parser6_in +#endif + +#ifdef yyout +#define parser6_out_ALREADY_DEFINED +#else +#define yyout parser6_out +#endif + +#ifdef yy_flex_debug +#define parser6__flex_debug_ALREADY_DEFINED +#else +#define yy_flex_debug parser6__flex_debug +#endif + +#ifdef yylineno +#define parser6_lineno_ALREADY_DEFINED +#else +#define yylineno parser6_lineno +#endif + /* %endif */ /* First, we deal with platform-specific or compiler-specific issues. */ @@ -127,50 +365,39 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* %endif */ +/* begin standard C++ headers. */ /* %if-c++-only */ /* %endif */ -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST +/* TODO: this is always defined, so inline it */ #define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) #else -#define yyconst +#define yynoreturn #endif /* %not-for-header */ - /* Returned upon end-of-file. */ #define YY_NULL 0 /* %ok-for-header */ /* %not-for-header */ - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) /* %ok-for-header */ /* %if-reentrant */ @@ -185,20 +412,16 @@ typedef unsigned int flex_uint32_t; * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * - /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START - /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - /* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE parser6_restart(parser6_in ) - +#define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ @@ -229,19 +452,19 @@ typedef size_t yy_size_t; #endif /* %if-not-reentrant */ -extern yy_size_t parser6_leng; +extern int yyleng; /* %endif */ /* %if-c-only */ /* %if-not-reentrant */ -extern FILE *parser6_in, *parser6_out; +extern FILE *yyin, *yyout; /* %endif */ /* %endif */ #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 - + #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) @@ -249,16 +472,15 @@ extern FILE *parser6_in, *parser6_out; #define yyless(n) \ do \ { \ - /* Undo effects of setting up parser6_text. */ \ + /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up parser6_text again */ \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) - #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE @@ -278,7 +500,7 @@ struct yy_buffer_state /* Size of input buffer in bytes, not including room for EOB * characters. */ - yy_size_t yy_buf_size; + int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. @@ -306,7 +528,7 @@ struct yy_buffer_state int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ - + /* Whether to try to fill the input buffer when we reach the * end of it. */ @@ -323,8 +545,8 @@ struct yy_buffer_state * possible backing-up. * * When we actually see the EOF, we change the status to "new" - * (via parser6_restart()), so that the user can continue scanning by - * just pointing parser6_in at a new input file. + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 @@ -333,13 +555,12 @@ struct yy_buffer_state /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ - /* %if-not-reentrant */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ +static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ /* %endif */ /* %ok-for-header */ @@ -354,7 +575,6 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) - /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ @@ -364,123 +584,112 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* %if-not-reentrant */ /* %not-for-header */ - -/* yy_hold_char holds the character lost when parser6_text is formed. */ +/* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ -yy_size_t parser6_leng; +int yyleng; /* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; +static char *yy_c_buf_p = NULL; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ -/* Flag which is used to allow parser6_wrap()'s to do buffer switches - * instead of setting up a fresh parser6_in. A bit of a hack ... +/* Flag which is used to allow yywrap()'s to do buffer switches + * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; /* %ok-for-header */ /* %endif */ -void parser6_restart (FILE *input_file ); -void parser6__switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE parser6__create_buffer (FILE *file,int size ); -void parser6__delete_buffer (YY_BUFFER_STATE b ); -void parser6__flush_buffer (YY_BUFFER_STATE b ); -void parser6_push_buffer_state (YY_BUFFER_STATE new_buffer ); -void parser6_pop_buffer_state (void ); - -static void parser6_ensure_buffer_stack (void ); -static void parser6__load_buffer_state (void ); -static void parser6__init_buffer (YY_BUFFER_STATE b,FILE *file ); +void yyrestart ( FILE *input_file ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); +void yy_delete_buffer ( YY_BUFFER_STATE b ); +void yy_flush_buffer ( YY_BUFFER_STATE b ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state ( void ); -#define YY_FLUSH_BUFFER parser6__flush_buffer(YY_CURRENT_BUFFER ) +static void yyensure_buffer_stack ( void ); +static void yy_load_buffer_state ( void ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) -YY_BUFFER_STATE parser6__scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE parser6__scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE parser6__scan_bytes (yyconst char *bytes,yy_size_t len ); +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); /* %endif */ -void *parser6_alloc (yy_size_t ); -void *parser6_realloc (void *,yy_size_t ); -void parser6_free (void * ); - -#define yy_new_buffer parser6__create_buffer +void *yyalloc ( yy_size_t ); +void *yyrealloc ( void *, yy_size_t ); +void yyfree ( void * ); +#define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ - parser6_ensure_buffer_stack (); \ + yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ - parser6__create_buffer(parser6_in,YY_BUF_SIZE ); \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } - #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ - parser6_ensure_buffer_stack (); \ + yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ - parser6__create_buffer(parser6_in,YY_BUF_SIZE ); \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } - #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) -/* %% [1.0] parser6_text/parser6_in/parser6_out/yy_state_type/parser6_lineno etc. def's & init go here */ +/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */ /* Begin user sect3 */ #define parser6_wrap() (/*CONSTCOND*/1) #define YY_SKIP_YYWRAP #define FLEX_DEBUG +typedef flex_uint8_t YY_CHAR; -typedef unsigned char YY_CHAR; - -FILE *parser6_in = (FILE *) 0, *parser6_out = (FILE *) 0; +FILE *yyin = NULL, *yyout = NULL; typedef int yy_state_type; -extern int parser6_lineno; - -int parser6_lineno = 1; +extern int yylineno; +int yylineno = 1; -extern char *parser6_text; +extern char *yytext; #ifdef yytext_ptr #undef yytext_ptr #endif -#define yytext_ptr parser6_text +#define yytext_ptr yytext /* %% [1.5] DFA */ /* %if-c-only Standard (non-C++) definition */ -static yy_state_type yy_get_previous_state (void ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); -static int yy_get_next_buffer (void ); -#if defined(__GNUC__) && __GNUC__ >= 3 -__attribute__((__noreturn__)) -#endif -static void yy_fatal_error (yyconst char msg[] ); +static yy_state_type yy_get_previous_state ( void ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); +static int yy_get_next_buffer ( void ); +static void yynoreturn yy_fatal_error ( const char* msg ); /* %endif */ /* Done after the current pattern has been matched and before the - * corresponding action - sets up parser6_text. + * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ -/* %% [2.0] code to fiddle parser6_text and parser6_leng for yymore() goes here \ */\ - parser6_leng = (size_t) (yy_cp - yy_bp); \ +/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ + yyleng = (int) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ -/* %% [3.0] code to copy yytext_ptr to parser6_text[] goes here, if %array \ */\ +/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ (yy_c_buf_p) = yy_cp; - /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ #define YY_NUM_RULES 171 #define YY_END_OF_BUFFER 172 @@ -491,7 +700,7 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[1378] = +static const flex_int16_t yy_accept[1378] = { 0, 164, 164, 0, 0, 0, 0, 0, 0, 0, 0, 172, 170, 10, 11, 170, 1, 164, 161, 164, 164, @@ -646,7 +855,7 @@ static yyconst flex_int16_t yy_accept[1378] = 0, 0, 98, 0, 0, 140, 0 } ; -static yyconst YY_CHAR yy_ec[256] = +static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, @@ -678,7 +887,7 @@ static yyconst YY_CHAR yy_ec[256] = 5, 5, 5, 5, 5 } ; -static yyconst YY_CHAR yy_meta[72] = +static const YY_CHAR yy_meta[72] = { 0, 1, 1, 2, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 3, 3, 3, 3, @@ -690,7 +899,7 @@ static yyconst YY_CHAR yy_meta[72] = 3 } ; -static yyconst flex_uint16_t yy_base[1390] = +static const flex_int16_t yy_base[1390] = { 0, 0, 70, 19, 29, 41, 49, 52, 58, 87, 95, 1742, 1743, 32, 1738, 141, 0, 201, 1743, 206, 88, @@ -846,7 +1055,7 @@ static yyconst flex_uint16_t yy_base[1390] = 1220, 1225, 1230, 1235, 1238, 1212, 1217, 1219, 1232 } ; -static yyconst flex_int16_t yy_def[1390] = +static const flex_int16_t yy_def[1390] = { 0, 1378, 1378, 1379, 1379, 1378, 1378, 1378, 1378, 1378, 1378, 1377, 1377, 1377, 1377, 1377, 1380, 1377, 1377, 1377, 1377, @@ -1002,7 +1211,7 @@ static yyconst flex_int16_t yy_def[1390] = 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377 } ; -static yyconst flex_uint16_t yy_nxt[1815] = +static const flex_int16_t yy_nxt[1815] = { 0, 1377, 13, 14, 13, 1377, 15, 16, 815, 17, 18, 19, 20, 21, 22, 22, 22, 23, 24, 85, 357, @@ -1206,7 +1415,7 @@ static yyconst flex_uint16_t yy_nxt[1815] = 1377, 1377, 1377, 1377 } ; -static yyconst flex_int16_t yy_chk[1815] = +static const flex_int16_t yy_chk[1815] = { 0, 0, 1, 1, 1, 0, 1, 1, 728, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 251, @@ -1413,29 +1622,29 @@ static yyconst flex_int16_t yy_chk[1815] = static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; -extern int parser6__flex_debug; -int parser6__flex_debug = 1; +extern int yy_flex_debug; +int yy_flex_debug = 1; -static yyconst flex_int16_t yy_rule_linenum[171] = +static const flex_int16_t yy_rule_linenum[171] = { 0, - 146, 148, 150, 155, 156, 161, 162, 163, 175, 178, - 183, 190, 199, 208, 217, 226, 235, 244, 253, 262, - 271, 280, 289, 298, 307, 316, 326, 336, 346, 356, - 366, 375, 385, 395, 405, 415, 424, 433, 442, 451, - 460, 469, 478, 487, 499, 508, 517, 526, 535, 545, - 555, 565, 575, 586, 596, 606, 616, 626, 636, 646, - 656, 666, 676, 687, 698, 709, 720, 729, 739, 748, - 757, 772, 787, 796, 805, 814, 823, 832, 841, 850, - 859, 868, 877, 899, 921, 930, 940, 950, 959, 969, - 979, 988, 997, 1006, 1015, 1025, 1034, 1043, 1052, 1061, - - 1070, 1079, 1088, 1097, 1106, 1116, 1125, 1134, 1144, 1156, - 1169, 1178, 1187, 1196, 1206, 1215, 1226, 1236, 1245, 1255, - 1265, 1274, 1283, 1292, 1301, 1311, 1320, 1330, 1339, 1348, - 1357, 1366, 1375, 1384, 1393, 1402, 1411, 1420, 1429, 1438, - 1447, 1456, 1465, 1474, 1483, 1492, 1501, 1510, 1519, 1528, - 1537, 1546, 1556, 1655, 1660, 1665, 1670, 1671, 1672, 1673, - 1674, 1675, 1677, 1695, 1708, 1713, 1717, 1719, 1721, 1723 + 147, 149, 151, 156, 157, 162, 163, 164, 176, 179, + 184, 191, 200, 209, 218, 227, 236, 245, 254, 263, + 272, 281, 290, 299, 308, 317, 327, 337, 347, 357, + 367, 376, 386, 396, 406, 416, 425, 434, 443, 452, + 461, 470, 479, 488, 500, 509, 518, 527, 536, 546, + 556, 566, 576, 587, 597, 607, 617, 627, 637, 647, + 657, 667, 677, 688, 699, 710, 721, 730, 740, 749, + 758, 773, 788, 797, 806, 815, 824, 833, 842, 851, + 860, 869, 878, 900, 922, 931, 941, 951, 960, 970, + 980, 989, 998, 1007, 1016, 1026, 1035, 1044, 1053, 1062, + + 1071, 1080, 1089, 1098, 1107, 1117, 1126, 1135, 1145, 1157, + 1170, 1179, 1188, 1198, 1208, 1217, 1228, 1238, 1247, 1257, + 1267, 1276, 1285, 1294, 1303, 1313, 1322, 1332, 1341, 1350, + 1359, 1368, 1377, 1386, 1395, 1404, 1413, 1422, 1431, 1440, + 1449, 1458, 1467, 1476, 1485, 1494, 1503, 1512, 1521, 1530, + 1539, 1548, 1558, 1657, 1662, 1667, 1672, 1673, 1674, 1675, + 1676, 1677, 1679, 1697, 1710, 1715, 1719, 1721, 1723, 1725 } ; /* The intent behind this definition is that it'll catch @@ -1445,7 +1654,7 @@ static yyconst flex_int16_t yy_rule_linenum[171] = #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET -char *parser6_text; +char *yytext; #line 1 "dhcp6_lexer.ll" /* Copyright (C) 2016-2018 Internet Systems Consortium, Inc. ("ISC") @@ -1472,8 +1681,8 @@ char *parser6_text; 2.5.31 through 2.5.33): it generates code that does not conform to C89. See Debian bug 333231 . */ -# undef parser6_wrap -# define parser6_wrap() 1 +# undef yywrap +# define yywrap() 1 namespace { @@ -1488,9 +1697,10 @@ using namespace isc::dhcp; /* To avoid the call to exit... oops! */ #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg) +#line 1700 "dhcp6_lexer.cc" /* noyywrap disables automatic rewinding for the next file to parse. Since we always parse only a single string, there's no need to do any wraps. And - using parser6_wrap requires linking with -lfl, which provides the default parser6_wrap + using yywrap requires linking with -lfl, which provides the default yywrap implementation that always returns 1 anyway. */ /* nounput simplifies the lexer, by removing support for putting a character back into the input stream. We never use such capability anyway. */ @@ -1498,23 +1708,23 @@ using namespace isc::dhcp; /* avoid to get static global variables to remain with C++. */ /* in last resort %option reentrant */ /* Enables debug mode. To see the debug messages, one needs to also set - parser6__flex_debug to 1, then the debug messages will be printed on stderr. */ + yy_flex_debug to 1, then the debug messages will be printed on stderr. */ /* I have no idea what this option does, except it was specified in the bison examples and Postgres folks added it to remove gcc 4.3 warnings. Let's be on the safe side and keep it. */ #define YY_NO_INPUT 1 - /* These are not token expressions yet, just convenience expressions that can be used during actual token definitions. Note some can match incorrect inputs (e.g., IP addresses) which must be checked. */ /* for errors */ #line 94 "dhcp6_lexer.ll" /* This code run each time a pattern is matched. It updates the location - by moving it ahead by parser6_leng bytes. parser6_leng specifies the length of the + by moving it ahead by yyleng bytes. yyleng specifies the length of the currently matched token. */ -#define YY_USER_ACTION driver.loc_.columns(parser6_leng); -#line 1518 "dhcp6_lexer.cc" +#define YY_USER_ACTION driver.loc_.columns(yyleng); +#line 1726 "dhcp6_lexer.cc" +#line 1727 "dhcp6_lexer.cc" #define INITIAL 0 #define COMMENT 1 @@ -1542,7 +1752,7 @@ using namespace isc::dhcp; /* %if-reentrant */ /* %if-c-only */ -static int yy_init_globals (void ); +static int yy_init_globals ( void ); /* %endif */ /* %if-reentrant */ @@ -1552,31 +1762,31 @@ static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ -int parser6_lex_destroy (void ); +int yylex_destroy ( void ); -int parser6_get_debug (void ); +int yyget_debug ( void ); -void parser6_set_debug (int debug_flag ); +void yyset_debug ( int debug_flag ); -YY_EXTRA_TYPE parser6_get_extra (void ); +YY_EXTRA_TYPE yyget_extra ( void ); -void parser6_set_extra (YY_EXTRA_TYPE user_defined ); +void yyset_extra ( YY_EXTRA_TYPE user_defined ); -FILE *parser6_get_in (void ); +FILE *yyget_in ( void ); -void parser6_set_in (FILE * _in_str ); +void yyset_in ( FILE * _in_str ); -FILE *parser6_get_out (void ); +FILE *yyget_out ( void ); -void parser6_set_out (FILE * _out_str ); +void yyset_out ( FILE * _out_str ); -yy_size_t parser6_get_leng (void ); + int yyget_leng ( void ); -char *parser6_get_text (void ); +char *yyget_text ( void ); -int parser6_get_lineno (void ); +int yyget_lineno ( void ); -void parser6_set_lineno (int _line_number ); +void yyset_lineno ( int _line_number ); /* %if-bison-bridge */ /* %endif */ @@ -1587,14 +1797,13 @@ void parser6_set_lineno (int _line_number ); #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus -extern "C" int parser6_wrap (void ); +extern "C" int yywrap ( void ); #else -extern int parser6_wrap (void ); +extern int yywrap ( void ); #endif #endif /* %not-for-header */ - #ifndef YY_NO_UNPUT #endif @@ -1603,21 +1812,20 @@ extern int parser6_wrap (void ); /* %endif */ #ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); +static void yy_flex_strncpy ( char *, const char *, int ); #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); +static int yy_flex_strlen ( const char * ); #endif #ifndef YY_NO_INPUT /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ - #ifdef __cplusplus -static int yyinput (void ); +static int yyinput ( void ); #else -static int input (void ); +static int input ( void ); #endif /* %ok-for-header */ @@ -1644,7 +1852,7 @@ static int input (void ); /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ -#define ECHO do { if (fwrite( parser6_text, parser6_leng, 1, parser6_out )) {} } while (0) +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ @@ -1659,20 +1867,20 @@ static int input (void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - size_t n; \ + int n; \ for ( n = 0; n < max_size && \ - (c = getc( parser6_in )) != EOF && c != '\n'; ++n ) \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ - if ( c == EOF && ferror( parser6_in ) ) \ + if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ - while ( (result = fread(buf, 1, max_size, parser6_in))==0 && ferror(parser6_in)) \ + while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ @@ -1680,7 +1888,7 @@ static int input (void ); break; \ } \ errno=0; \ - clearerr(parser6_in); \ + clearerr(yyin); \ } \ }\ \ @@ -1713,11 +1921,9 @@ static int input (void ); /* %if-tables-serialization structures and prototypes */ /* %not-for-header */ - /* %ok-for-header */ /* %not-for-header */ - /* %tables-yydmap generated elements */ /* %endif */ /* end tables serialization structures and prototypes */ @@ -1731,15 +1937,15 @@ static int input (void ); #define YY_DECL_IS_OURS 1 /* %if-c-only Standard (non-C++) definition */ -extern int parser6_lex (void); +extern int yylex (void); -#define YY_DECL int parser6_lex (void) +#define YY_DECL int yylex (void) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* !YY_DECL */ -/* Code executed at the beginning of each rule, after parser6_text and parser6_leng +/* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION @@ -1756,7 +1962,6 @@ extern int parser6_lex (void); YY_USER_ACTION /* %not-for-header */ - /** The main scanner function which does all the work. */ YY_DECL @@ -1776,27 +1981,27 @@ YY_DECL if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ - if ( ! parser6_in ) + if ( ! yyin ) /* %if-c-only */ - parser6_in = stdin; + yyin = stdin; /* %endif */ /* %if-c++-only */ /* %endif */ - if ( ! parser6_out ) + if ( ! yyout ) /* %if-c-only */ - parser6_out = stdout; + yyout = stdout; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! YY_CURRENT_BUFFER ) { - parser6_ensure_buffer_stack (); + yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - parser6__create_buffer(parser6_in,YY_BUF_SIZE ); + yy_create_buffer( yyin, YY_BUF_SIZE ); } - parser6__load_buffer_state( ); + yy_load_buffer_state( ); } { @@ -1805,11 +2010,12 @@ YY_DECL +#line 104 "dhcp6_lexer.ll" /* This part of the code is copied over to the verbatim to the top - of the generated parser6_lex function. Explanation: + of the generated yylex function. Explanation: http://www.gnu.org/software/bison/manual/html_node/Multiple-start_002dsymbols.html */ - /* Code run each time parser6_lex is called. */ + /* Code run each time yylex is called. */ driver.loc_.step(); if (start_token_flag) { @@ -1848,14 +2054,14 @@ YY_DECL } -#line 1852 "dhcp6_lexer.cc" +#line 2057 "dhcp6_lexer.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { /* %% [8.0] yymore()-related code goes here */ yy_cp = (yy_c_buf_p); - /* Support of parser6_text. */ + /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of @@ -1878,9 +2084,9 @@ yy_match: { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 1378 ) - yy_c = yy_meta[(unsigned int) yy_c]; + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } while ( yy_current_state != 1377 ); @@ -1893,21 +2099,21 @@ yy_find_action: YY_DO_BEFORE_ACTION; -/* %% [11.0] code for parser6_lineno update goes here */ +/* %% [11.0] code for yylineno update goes here */ do_action: /* This label is used only to access EOF actions. */ /* %% [12.0] debug code goes here */ - if ( parser6__flex_debug ) + if ( yy_flex_debug ) { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); else if ( yy_act < 171 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", - (long)yy_rule_linenum[yy_act], parser6_text ); + (long)yy_rule_linenum[yy_act], yytext ); else if ( yy_act == 171 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", - parser6_text ); + yytext ); else if ( yy_act == 172 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else @@ -1926,17 +2132,17 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 146 "dhcp6_lexer.ll" +#line 147 "dhcp6_lexer.ll" ; YY_BREAK case 2: YY_RULE_SETUP -#line 148 "dhcp6_lexer.ll" +#line 149 "dhcp6_lexer.ll" ; YY_BREAK case 3: YY_RULE_SETUP -#line 150 "dhcp6_lexer.ll" +#line 151 "dhcp6_lexer.ll" { BEGIN(COMMENT); comment_start_line = driver.loc_.end.line;; @@ -1944,38 +2150,38 @@ YY_RULE_SETUP YY_BREAK case 4: YY_RULE_SETUP -#line 155 "dhcp6_lexer.ll" +#line 156 "dhcp6_lexer.ll" BEGIN(INITIAL); YY_BREAK case 5: YY_RULE_SETUP -#line 156 "dhcp6_lexer.ll" +#line 157 "dhcp6_lexer.ll" ; YY_BREAK case YY_STATE_EOF(COMMENT): -#line 157 "dhcp6_lexer.ll" +#line 158 "dhcp6_lexer.ll" { isc_throw(Dhcp6ParseError, "Comment not closed. (/* in line " << comment_start_line); } YY_BREAK case 6: YY_RULE_SETUP -#line 161 "dhcp6_lexer.ll" +#line 162 "dhcp6_lexer.ll" BEGIN(DIR_ENTER); YY_BREAK case 7: YY_RULE_SETUP -#line 162 "dhcp6_lexer.ll" +#line 163 "dhcp6_lexer.ll" BEGIN(DIR_INCLUDE); YY_BREAK case 8: YY_RULE_SETUP -#line 163 "dhcp6_lexer.ll" +#line 164 "dhcp6_lexer.ll" { /* Include directive. */ /* Extract the filename. */ - std::string tmp(parser6_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); driver.includeFile(tmp); @@ -1984,19 +2190,19 @@ YY_RULE_SETUP case YY_STATE_EOF(DIR_ENTER): case YY_STATE_EOF(DIR_INCLUDE): case YY_STATE_EOF(DIR_EXIT): -#line 172 "dhcp6_lexer.ll" +#line 173 "dhcp6_lexer.ll" { isc_throw(Dhcp6ParseError, "Directive not closed."); } YY_BREAK case 9: YY_RULE_SETUP -#line 175 "dhcp6_lexer.ll" +#line 176 "dhcp6_lexer.ll" BEGIN(INITIAL); YY_BREAK case 10: YY_RULE_SETUP -#line 178 "dhcp6_lexer.ll" +#line 179 "dhcp6_lexer.ll" { /* Ok, we found a with space. Let's ignore it and update loc variable. */ driver.loc_.step(); @@ -2005,16 +2211,16 @@ YY_RULE_SETUP case 11: /* rule 11 can match eol */ YY_RULE_SETUP -#line 183 "dhcp6_lexer.ll" +#line 184 "dhcp6_lexer.ll" { /* Newline found. Let's update the location and continue. */ - driver.loc_.lines(parser6_leng); + driver.loc_.lines(yyleng); driver.loc_.step(); } YY_BREAK case 12: YY_RULE_SETUP -#line 190 "dhcp6_lexer.ll" +#line 191 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2026,7 +2232,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 199 "dhcp6_lexer.ll" +#line 200 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2038,7 +2244,7 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 208 "dhcp6_lexer.ll" +#line 209 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2050,7 +2256,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 217 "dhcp6_lexer.ll" +#line 218 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2062,7 +2268,7 @@ YY_RULE_SETUP YY_BREAK case 16: YY_RULE_SETUP -#line 226 "dhcp6_lexer.ll" +#line 227 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2074,7 +2280,7 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 235 "dhcp6_lexer.ll" +#line 236 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2086,7 +2292,7 @@ YY_RULE_SETUP YY_BREAK case 18: YY_RULE_SETUP -#line 244 "dhcp6_lexer.ll" +#line 245 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2098,7 +2304,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 253 "dhcp6_lexer.ll" +#line 254 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2110,7 +2316,7 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 262 "dhcp6_lexer.ll" +#line 263 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2122,7 +2328,7 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 271 "dhcp6_lexer.ll" +#line 272 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2134,7 +2340,7 @@ YY_RULE_SETUP YY_BREAK case 22: YY_RULE_SETUP -#line 280 "dhcp6_lexer.ll" +#line 281 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2146,7 +2352,7 @@ YY_RULE_SETUP YY_BREAK case 23: YY_RULE_SETUP -#line 289 "dhcp6_lexer.ll" +#line 290 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2158,7 +2364,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 298 "dhcp6_lexer.ll" +#line 299 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2170,7 +2376,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 307 "dhcp6_lexer.ll" +#line 308 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_DDNS: @@ -2182,72 +2388,72 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 316 "dhcp6_lexer.ll" +#line 317 "dhcp6_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) { return isc::dhcp::Dhcp6Parser::make_UDP(driver.loc_); } - std::string tmp(parser6_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK case 27: YY_RULE_SETUP -#line 326 "dhcp6_lexer.ll" +#line 327 "dhcp6_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) { return isc::dhcp::Dhcp6Parser::make_TCP(driver.loc_); } - std::string tmp(parser6_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK case 28: YY_RULE_SETUP -#line 336 "dhcp6_lexer.ll" +#line 337 "dhcp6_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_FORMAT) { return isc::dhcp::Dhcp6Parser::make_JSON(driver.loc_); } - std::string tmp(parser6_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK case 29: YY_RULE_SETUP -#line 346 "dhcp6_lexer.ll" +#line 347 "dhcp6_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp6Parser::make_WHEN_PRESENT(driver.loc_); } - std::string tmp(parser6_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK case 30: YY_RULE_SETUP -#line 356 "dhcp6_lexer.ll" +#line 357 "dhcp6_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp6Parser::make_WHEN_PRESENT(driver.loc_); } - std::string tmp(parser6_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK case 31: YY_RULE_SETUP -#line 366 "dhcp6_lexer.ll" +#line 367 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME: @@ -2259,59 +2465,59 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 375 "dhcp6_lexer.ll" +#line 376 "dhcp6_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp6Parser::make_NEVER(driver.loc_); } - std::string tmp(parser6_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK case 33: YY_RULE_SETUP -#line 385 "dhcp6_lexer.ll" +#line 386 "dhcp6_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp6Parser::make_NEVER(driver.loc_); } - std::string tmp(parser6_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK case 34: YY_RULE_SETUP -#line 395 "dhcp6_lexer.ll" +#line 396 "dhcp6_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp6Parser::make_ALWAYS(driver.loc_); } - std::string tmp(parser6_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK case 35: YY_RULE_SETUP -#line 405 "dhcp6_lexer.ll" +#line 406 "dhcp6_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) { return isc::dhcp::Dhcp6Parser::make_WHEN_NOT_PRESENT(driver.loc_); } - std::string tmp(parser6_text+1); + std::string tmp(yytext+1); tmp.resize(tmp.size() - 1); return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK case 36: YY_RULE_SETUP -#line 415 "dhcp6_lexer.ll" +#line 416 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -2323,7 +2529,7 @@ YY_RULE_SETUP YY_BREAK case 37: YY_RULE_SETUP -#line 424 "dhcp6_lexer.ll" +#line 425 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2335,7 +2541,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 433 "dhcp6_lexer.ll" +#line 434 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::INTERFACES_CONFIG: @@ -2347,7 +2553,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 442 "dhcp6_lexer.ll" +#line 443 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::INTERFACES_CONFIG: @@ -2359,7 +2565,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 451 "dhcp6_lexer.ll" +#line 452 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2371,7 +2577,7 @@ YY_RULE_SETUP YY_BREAK case 41: YY_RULE_SETUP -#line 460 "dhcp6_lexer.ll" +#line 461 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2383,7 +2589,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 469 "dhcp6_lexer.ll" +#line 470 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2395,7 +2601,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 478 "dhcp6_lexer.ll" +#line 479 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOSTS_DATABASE: @@ -2407,7 +2613,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 487 "dhcp6_lexer.ll" +#line 488 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2422,7 +2628,7 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 499 "dhcp6_lexer.ll" +#line 500 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DATABASE_TYPE: @@ -2434,7 +2640,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 508 "dhcp6_lexer.ll" +#line 509 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DATABASE_TYPE: @@ -2446,7 +2652,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 517 "dhcp6_lexer.ll" +#line 518 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DATABASE_TYPE: @@ -2458,7 +2664,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 526 "dhcp6_lexer.ll" +#line 527 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DATABASE_TYPE: @@ -2470,7 +2676,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 535 "dhcp6_lexer.ll" +#line 536 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2483,7 +2689,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 545 "dhcp6_lexer.ll" +#line 546 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2496,7 +2702,7 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 555 "dhcp6_lexer.ll" +#line 556 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2509,7 +2715,7 @@ YY_RULE_SETUP YY_BREAK case 52: YY_RULE_SETUP -#line 565 "dhcp6_lexer.ll" +#line 566 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2522,7 +2728,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 575 "dhcp6_lexer.ll" +#line 576 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2536,7 +2742,7 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 586 "dhcp6_lexer.ll" +#line 587 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2549,7 +2755,7 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 596 "dhcp6_lexer.ll" +#line 597 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2562,7 +2768,7 @@ YY_RULE_SETUP YY_BREAK case 56: YY_RULE_SETUP -#line 606 "dhcp6_lexer.ll" +#line 607 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2575,7 +2781,7 @@ YY_RULE_SETUP YY_BREAK case 57: YY_RULE_SETUP -#line 616 "dhcp6_lexer.ll" +#line 617 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2588,7 +2794,7 @@ YY_RULE_SETUP YY_BREAK case 58: YY_RULE_SETUP -#line 626 "dhcp6_lexer.ll" +#line 627 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2601,7 +2807,7 @@ YY_RULE_SETUP YY_BREAK case 59: YY_RULE_SETUP -#line 636 "dhcp6_lexer.ll" +#line 637 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2614,7 +2820,7 @@ YY_RULE_SETUP YY_BREAK case 60: YY_RULE_SETUP -#line 646 "dhcp6_lexer.ll" +#line 647 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2627,7 +2833,7 @@ YY_RULE_SETUP YY_BREAK case 61: YY_RULE_SETUP -#line 656 "dhcp6_lexer.ll" +#line 657 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2640,7 +2846,7 @@ YY_RULE_SETUP YY_BREAK case 62: YY_RULE_SETUP -#line 666 "dhcp6_lexer.ll" +#line 667 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2653,7 +2859,7 @@ YY_RULE_SETUP YY_BREAK case 63: YY_RULE_SETUP -#line 676 "dhcp6_lexer.ll" +#line 677 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2667,7 +2873,7 @@ YY_RULE_SETUP YY_BREAK case 64: YY_RULE_SETUP -#line 687 "dhcp6_lexer.ll" +#line 688 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2681,7 +2887,7 @@ YY_RULE_SETUP YY_BREAK case 65: YY_RULE_SETUP -#line 698 "dhcp6_lexer.ll" +#line 699 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2695,7 +2901,7 @@ YY_RULE_SETUP YY_BREAK case 66: YY_RULE_SETUP -#line 709 "dhcp6_lexer.ll" +#line 710 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2709,7 +2915,7 @@ YY_RULE_SETUP YY_BREAK case 67: YY_RULE_SETUP -#line 720 "dhcp6_lexer.ll" +#line 721 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2721,7 +2927,7 @@ YY_RULE_SETUP YY_BREAK case 68: YY_RULE_SETUP -#line 729 "dhcp6_lexer.ll" +#line 730 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2734,7 +2940,7 @@ YY_RULE_SETUP YY_BREAK case 69: YY_RULE_SETUP -#line 739 "dhcp6_lexer.ll" +#line 740 "dhcp6_lexer.ll" { switch (driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2746,7 +2952,7 @@ YY_RULE_SETUP YY_BREAK case 70: YY_RULE_SETUP -#line 748 "dhcp6_lexer.ll" +#line 749 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2758,7 +2964,7 @@ YY_RULE_SETUP YY_BREAK case 71: YY_RULE_SETUP -#line 757 "dhcp6_lexer.ll" +#line 758 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2776,7 +2982,7 @@ YY_RULE_SETUP YY_BREAK case 72: YY_RULE_SETUP -#line 772 "dhcp6_lexer.ll" +#line 773 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2794,7 +3000,7 @@ YY_RULE_SETUP YY_BREAK case 73: YY_RULE_SETUP -#line 787 "dhcp6_lexer.ll" +#line 788 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -2806,7 +3012,7 @@ YY_RULE_SETUP YY_BREAK case 74: YY_RULE_SETUP -#line 796 "dhcp6_lexer.ll" +#line 797 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -2818,7 +3024,7 @@ YY_RULE_SETUP YY_BREAK case 75: YY_RULE_SETUP -#line 805 "dhcp6_lexer.ll" +#line 806 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2830,7 +3036,7 @@ YY_RULE_SETUP YY_BREAK case 76: YY_RULE_SETUP -#line 814 "dhcp6_lexer.ll" +#line 815 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2842,7 +3048,7 @@ YY_RULE_SETUP YY_BREAK case 77: YY_RULE_SETUP -#line 823 "dhcp6_lexer.ll" +#line 824 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -2854,7 +3060,7 @@ YY_RULE_SETUP YY_BREAK case 78: YY_RULE_SETUP -#line 832 "dhcp6_lexer.ll" +#line 833 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -2866,7 +3072,7 @@ YY_RULE_SETUP YY_BREAK case 79: YY_RULE_SETUP -#line 841 "dhcp6_lexer.ll" +#line 842 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -2878,7 +3084,7 @@ YY_RULE_SETUP YY_BREAK case 80: YY_RULE_SETUP -#line 850 "dhcp6_lexer.ll" +#line 851 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -2890,7 +3096,7 @@ YY_RULE_SETUP YY_BREAK case 81: YY_RULE_SETUP -#line 859 "dhcp6_lexer.ll" +#line 860 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -2902,7 +3108,7 @@ YY_RULE_SETUP YY_BREAK case 82: YY_RULE_SETUP -#line 868 "dhcp6_lexer.ll" +#line 869 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::POOLS: @@ -2914,7 +3120,7 @@ YY_RULE_SETUP YY_BREAK case 83: YY_RULE_SETUP -#line 877 "dhcp6_lexer.ll" +#line 878 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2939,7 +3145,7 @@ YY_RULE_SETUP YY_BREAK case 84: YY_RULE_SETUP -#line 899 "dhcp6_lexer.ll" +#line 900 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2964,7 +3170,7 @@ YY_RULE_SETUP YY_BREAK case 85: YY_RULE_SETUP -#line 921 "dhcp6_lexer.ll" +#line 922 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2976,7 +3182,7 @@ YY_RULE_SETUP YY_BREAK case 86: YY_RULE_SETUP -#line 930 "dhcp6_lexer.ll" +#line 931 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2989,7 +3195,7 @@ YY_RULE_SETUP YY_BREAK case 87: YY_RULE_SETUP -#line 940 "dhcp6_lexer.ll" +#line 941 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3002,7 +3208,7 @@ YY_RULE_SETUP YY_BREAK case 88: YY_RULE_SETUP -#line 950 "dhcp6_lexer.ll" +#line 951 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3014,7 +3220,7 @@ YY_RULE_SETUP YY_BREAK case 89: YY_RULE_SETUP -#line 959 "dhcp6_lexer.ll" +#line 960 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3027,7 +3233,7 @@ YY_RULE_SETUP YY_BREAK case 90: YY_RULE_SETUP -#line 969 "dhcp6_lexer.ll" +#line 970 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3040,7 +3246,7 @@ YY_RULE_SETUP YY_BREAK case 91: YY_RULE_SETUP -#line 979 "dhcp6_lexer.ll" +#line 980 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -3052,7 +3258,7 @@ YY_RULE_SETUP YY_BREAK case 92: YY_RULE_SETUP -#line 988 "dhcp6_lexer.ll" +#line 989 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -3064,7 +3270,7 @@ YY_RULE_SETUP YY_BREAK case 93: YY_RULE_SETUP -#line 997 "dhcp6_lexer.ll" +#line 998 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -3076,7 +3282,7 @@ YY_RULE_SETUP YY_BREAK case 94: YY_RULE_SETUP -#line 1006 "dhcp6_lexer.ll" +#line 1007 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -3088,7 +3294,7 @@ YY_RULE_SETUP YY_BREAK case 95: YY_RULE_SETUP -#line 1015 "dhcp6_lexer.ll" +#line 1016 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -3101,7 +3307,7 @@ YY_RULE_SETUP YY_BREAK case 96: YY_RULE_SETUP -#line 1025 "dhcp6_lexer.ll" +#line 1026 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3113,7 +3319,7 @@ YY_RULE_SETUP YY_BREAK case 97: YY_RULE_SETUP -#line 1034 "dhcp6_lexer.ll" +#line 1035 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3125,7 +3331,7 @@ YY_RULE_SETUP YY_BREAK case 98: YY_RULE_SETUP -#line 1043 "dhcp6_lexer.ll" +#line 1044 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3137,7 +3343,7 @@ YY_RULE_SETUP YY_BREAK case 99: YY_RULE_SETUP -#line 1052 "dhcp6_lexer.ll" +#line 1053 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -3149,7 +3355,7 @@ YY_RULE_SETUP YY_BREAK case 100: YY_RULE_SETUP -#line 1061 "dhcp6_lexer.ll" +#line 1062 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGING: @@ -3161,7 +3367,7 @@ YY_RULE_SETUP YY_BREAK case 101: YY_RULE_SETUP -#line 1070 "dhcp6_lexer.ll" +#line 1071 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -3173,7 +3379,7 @@ YY_RULE_SETUP YY_BREAK case 102: YY_RULE_SETUP -#line 1079 "dhcp6_lexer.ll" +#line 1080 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -3185,7 +3391,7 @@ YY_RULE_SETUP YY_BREAK case 103: YY_RULE_SETUP -#line 1088 "dhcp6_lexer.ll" +#line 1089 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -3197,7 +3403,7 @@ YY_RULE_SETUP YY_BREAK case 104: YY_RULE_SETUP -#line 1097 "dhcp6_lexer.ll" +#line 1098 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -3209,7 +3415,7 @@ YY_RULE_SETUP YY_BREAK case 105: YY_RULE_SETUP -#line 1106 "dhcp6_lexer.ll" +#line 1107 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -3221,7 +3427,7 @@ YY_RULE_SETUP YY_BREAK case 106: YY_RULE_SETUP -#line 1116 "dhcp6_lexer.ll" +#line 1117 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -3233,7 +3439,7 @@ YY_RULE_SETUP YY_BREAK case 107: YY_RULE_SETUP -#line 1125 "dhcp6_lexer.ll" +#line 1126 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -3245,7 +3451,7 @@ YY_RULE_SETUP YY_BREAK case 108: YY_RULE_SETUP -#line 1134 "dhcp6_lexer.ll" +#line 1135 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3258,7 +3464,7 @@ YY_RULE_SETUP YY_BREAK case 109: YY_RULE_SETUP -#line 1144 "dhcp6_lexer.ll" +#line 1145 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3273,7 +3479,7 @@ YY_RULE_SETUP YY_BREAK case 110: YY_RULE_SETUP -#line 1156 "dhcp6_lexer.ll" +#line 1157 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3289,7 +3495,7 @@ YY_RULE_SETUP YY_BREAK case 111: YY_RULE_SETUP -#line 1169 "dhcp6_lexer.ll" +#line 1170 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -3301,7 +3507,7 @@ YY_RULE_SETUP YY_BREAK case 112: YY_RULE_SETUP -#line 1178 "dhcp6_lexer.ll" +#line 1179 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -3313,9 +3519,10 @@ YY_RULE_SETUP YY_BREAK case 113: YY_RULE_SETUP -#line 1187 "dhcp6_lexer.ll" +#line 1188 "dhcp6_lexer.ll" { switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: return isc::dhcp::Dhcp6Parser::make_RESERVATIONS(driver.loc_); default: @@ -3325,7 +3532,7 @@ YY_RULE_SETUP YY_BREAK case 114: YY_RULE_SETUP -#line 1196 "dhcp6_lexer.ll" +#line 1198 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -3338,7 +3545,7 @@ YY_RULE_SETUP YY_BREAK case 115: YY_RULE_SETUP -#line 1206 "dhcp6_lexer.ll" +#line 1208 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -3350,7 +3557,7 @@ YY_RULE_SETUP YY_BREAK case 116: YY_RULE_SETUP -#line 1215 "dhcp6_lexer.ll" +#line 1217 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::MAC_SOURCES: @@ -3364,7 +3571,7 @@ YY_RULE_SETUP YY_BREAK case 117: YY_RULE_SETUP -#line 1226 "dhcp6_lexer.ll" +#line 1228 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS: @@ -3377,7 +3584,7 @@ YY_RULE_SETUP YY_BREAK case 118: YY_RULE_SETUP -#line 1236 "dhcp6_lexer.ll" +#line 1238 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -3389,7 +3596,7 @@ YY_RULE_SETUP YY_BREAK case 119: YY_RULE_SETUP -#line 1245 "dhcp6_lexer.ll" +#line 1247 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS: @@ -3402,7 +3609,7 @@ YY_RULE_SETUP YY_BREAK case 120: YY_RULE_SETUP -#line 1255 "dhcp6_lexer.ll" +#line 1257 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -3415,7 +3622,7 @@ YY_RULE_SETUP YY_BREAK case 121: YY_RULE_SETUP -#line 1265 "dhcp6_lexer.ll" +#line 1267 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -3427,7 +3634,7 @@ YY_RULE_SETUP YY_BREAK case 122: YY_RULE_SETUP -#line 1274 "dhcp6_lexer.ll" +#line 1276 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -3439,7 +3646,7 @@ YY_RULE_SETUP YY_BREAK case 123: YY_RULE_SETUP -#line 1283 "dhcp6_lexer.ll" +#line 1285 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -3451,7 +3658,7 @@ YY_RULE_SETUP YY_BREAK case 124: YY_RULE_SETUP -#line 1292 "dhcp6_lexer.ll" +#line 1294 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -3463,7 +3670,7 @@ YY_RULE_SETUP YY_BREAK case 125: YY_RULE_SETUP -#line 1301 "dhcp6_lexer.ll" +#line 1303 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3476,7 +3683,7 @@ YY_RULE_SETUP YY_BREAK case 126: YY_RULE_SETUP -#line 1311 "dhcp6_lexer.ll" +#line 1313 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RELAY: @@ -3488,7 +3695,7 @@ YY_RULE_SETUP YY_BREAK case 127: YY_RULE_SETUP -#line 1320 "dhcp6_lexer.ll" +#line 1322 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3500,7 +3707,7 @@ YY_RULE_SETUP YY_BREAK case 128: YY_RULE_SETUP -#line 1330 "dhcp6_lexer.ll" +#line 1332 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -3512,7 +3719,7 @@ YY_RULE_SETUP YY_BREAK case 129: YY_RULE_SETUP -#line 1339 "dhcp6_lexer.ll" +#line 1341 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -3524,7 +3731,7 @@ YY_RULE_SETUP YY_BREAK case 130: YY_RULE_SETUP -#line 1348 "dhcp6_lexer.ll" +#line 1350 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3536,7 +3743,7 @@ YY_RULE_SETUP YY_BREAK case 131: YY_RULE_SETUP -#line 1357 "dhcp6_lexer.ll" +#line 1359 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -3548,7 +3755,7 @@ YY_RULE_SETUP YY_BREAK case 132: YY_RULE_SETUP -#line 1366 "dhcp6_lexer.ll" +#line 1368 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -3560,7 +3767,7 @@ YY_RULE_SETUP YY_BREAK case 133: YY_RULE_SETUP -#line 1375 "dhcp6_lexer.ll" +#line 1377 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -3572,7 +3779,7 @@ YY_RULE_SETUP YY_BREAK case 134: YY_RULE_SETUP -#line 1384 "dhcp6_lexer.ll" +#line 1386 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -3584,7 +3791,7 @@ YY_RULE_SETUP YY_BREAK case 135: YY_RULE_SETUP -#line 1393 "dhcp6_lexer.ll" +#line 1395 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -3596,7 +3803,7 @@ YY_RULE_SETUP YY_BREAK case 136: YY_RULE_SETUP -#line 1402 "dhcp6_lexer.ll" +#line 1404 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -3608,7 +3815,7 @@ YY_RULE_SETUP YY_BREAK case 137: YY_RULE_SETUP -#line 1411 "dhcp6_lexer.ll" +#line 1413 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -3620,7 +3827,7 @@ YY_RULE_SETUP YY_BREAK case 138: YY_RULE_SETUP -#line 1420 "dhcp6_lexer.ll" +#line 1422 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3632,7 +3839,7 @@ YY_RULE_SETUP YY_BREAK case 139: YY_RULE_SETUP -#line 1429 "dhcp6_lexer.ll" +#line 1431 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -3644,7 +3851,7 @@ YY_RULE_SETUP YY_BREAK case 140: YY_RULE_SETUP -#line 1438 "dhcp6_lexer.ll" +#line 1440 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -3656,7 +3863,7 @@ YY_RULE_SETUP YY_BREAK case 141: YY_RULE_SETUP -#line 1447 "dhcp6_lexer.ll" +#line 1449 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -3668,7 +3875,7 @@ YY_RULE_SETUP YY_BREAK case 142: YY_RULE_SETUP -#line 1456 "dhcp6_lexer.ll" +#line 1458 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -3680,7 +3887,7 @@ YY_RULE_SETUP YY_BREAK case 143: YY_RULE_SETUP -#line 1465 "dhcp6_lexer.ll" +#line 1467 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -3692,7 +3899,7 @@ YY_RULE_SETUP YY_BREAK case 144: YY_RULE_SETUP -#line 1474 "dhcp6_lexer.ll" +#line 1476 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -3704,7 +3911,7 @@ YY_RULE_SETUP YY_BREAK case 145: YY_RULE_SETUP -#line 1483 "dhcp6_lexer.ll" +#line 1485 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3716,7 +3923,7 @@ YY_RULE_SETUP YY_BREAK case 146: YY_RULE_SETUP -#line 1492 "dhcp6_lexer.ll" +#line 1494 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3728,7 +3935,7 @@ YY_RULE_SETUP YY_BREAK case 147: YY_RULE_SETUP -#line 1501 "dhcp6_lexer.ll" +#line 1503 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -3740,7 +3947,7 @@ YY_RULE_SETUP YY_BREAK case 148: YY_RULE_SETUP -#line 1510 "dhcp6_lexer.ll" +#line 1512 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -3752,7 +3959,7 @@ YY_RULE_SETUP YY_BREAK case 149: YY_RULE_SETUP -#line 1519 "dhcp6_lexer.ll" +#line 1521 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3764,7 +3971,7 @@ YY_RULE_SETUP YY_BREAK case 150: YY_RULE_SETUP -#line 1528 "dhcp6_lexer.ll" +#line 1530 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -3776,7 +3983,7 @@ YY_RULE_SETUP YY_BREAK case 151: YY_RULE_SETUP -#line 1537 "dhcp6_lexer.ll" +#line 1539 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -3788,7 +3995,7 @@ YY_RULE_SETUP YY_BREAK case 152: YY_RULE_SETUP -#line 1546 "dhcp6_lexer.ll" +#line 1548 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -3800,12 +4007,12 @@ YY_RULE_SETUP YY_BREAK case 153: YY_RULE_SETUP -#line 1556 "dhcp6_lexer.ll" +#line 1558 "dhcp6_lexer.ll" { /* A string has been matched. It contains the actual string and single quotes. We need to get those quotes out of the way and just use its content, e.g. for 'foo' we should get foo */ - std::string raw(parser6_text+1); + std::string raw(yytext+1); size_t len = raw.size() - 1; raw.resize(len); std::string decoded; @@ -3903,65 +4110,65 @@ YY_RULE_SETUP case 154: /* rule 154 can match eol */ YY_RULE_SETUP -#line 1655 "dhcp6_lexer.ll" +#line 1657 "dhcp6_lexer.ll" { /* Bad string with a forbidden control character inside */ - driver.error(driver.loc_, "Invalid control in " + std::string(parser6_text)); + driver.error(driver.loc_, "Invalid control in " + std::string(yytext)); } YY_BREAK case 155: /* rule 155 can match eol */ YY_RULE_SETUP -#line 1660 "dhcp6_lexer.ll" +#line 1662 "dhcp6_lexer.ll" { /* Bad string with a bad escape inside */ - driver.error(driver.loc_, "Bad escape in " + std::string(parser6_text)); + driver.error(driver.loc_, "Bad escape in " + std::string(yytext)); } YY_BREAK case 156: YY_RULE_SETUP -#line 1665 "dhcp6_lexer.ll" +#line 1667 "dhcp6_lexer.ll" { /* Bad string with an open escape at the end */ - driver.error(driver.loc_, "Overflow escape in " + std::string(parser6_text)); + driver.error(driver.loc_, "Overflow escape in " + std::string(yytext)); } YY_BREAK case 157: YY_RULE_SETUP -#line 1670 "dhcp6_lexer.ll" +#line 1672 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); } YY_BREAK case 158: YY_RULE_SETUP -#line 1671 "dhcp6_lexer.ll" +#line 1673 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); } YY_BREAK case 159: YY_RULE_SETUP -#line 1672 "dhcp6_lexer.ll" +#line 1674 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); } YY_BREAK case 160: YY_RULE_SETUP -#line 1673 "dhcp6_lexer.ll" +#line 1675 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); } YY_BREAK case 161: YY_RULE_SETUP -#line 1674 "dhcp6_lexer.ll" +#line 1676 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); } YY_BREAK case 162: YY_RULE_SETUP -#line 1675 "dhcp6_lexer.ll" +#line 1677 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); } YY_BREAK case 163: YY_RULE_SETUP -#line 1677 "dhcp6_lexer.ll" +#line 1679 "dhcp6_lexer.ll" { /* An integer was found. */ - std::string tmp(parser6_text); + std::string tmp(yytext); int64_t integer = 0; try { /* In substring we want to use negative values (e.g. -1). @@ -3979,10 +4186,10 @@ YY_RULE_SETUP YY_BREAK case 164: YY_RULE_SETUP -#line 1695 "dhcp6_lexer.ll" +#line 1697 "dhcp6_lexer.ll" { /* A floating point was found. */ - std::string tmp(parser6_text); + std::string tmp(yytext); double fp = 0.0; try { fp = boost::lexical_cast(tmp); @@ -3995,41 +4202,41 @@ YY_RULE_SETUP YY_BREAK case 165: YY_RULE_SETUP -#line 1708 "dhcp6_lexer.ll" +#line 1710 "dhcp6_lexer.ll" { - string tmp(parser6_text); + string tmp(yytext); return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK case 166: YY_RULE_SETUP -#line 1713 "dhcp6_lexer.ll" +#line 1715 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_); } YY_BREAK case 167: YY_RULE_SETUP -#line 1717 "dhcp6_lexer.ll" +#line 1719 "dhcp6_lexer.ll" driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); YY_BREAK case 168: YY_RULE_SETUP -#line 1719 "dhcp6_lexer.ll" +#line 1721 "dhcp6_lexer.ll" driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); YY_BREAK case 169: YY_RULE_SETUP -#line 1721 "dhcp6_lexer.ll" +#line 1723 "dhcp6_lexer.ll" driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); YY_BREAK case 170: YY_RULE_SETUP -#line 1723 "dhcp6_lexer.ll" -driver.error (driver.loc_, "Invalid character: " + std::string(parser6_text)); +#line 1725 "dhcp6_lexer.ll" +driver.error (driver.loc_, "Invalid character: " + std::string(yytext)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 1725 "dhcp6_lexer.ll" +#line 1727 "dhcp6_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp6Parser::make_END(driver.loc_); @@ -4055,10 +4262,10 @@ case YY_STATE_EOF(INITIAL): YY_BREAK case 171: YY_RULE_SETUP -#line 1748 "dhcp6_lexer.ll" +#line 1750 "dhcp6_lexer.ll" ECHO; YY_BREAK -#line 4062 "dhcp6_lexer.cc" +#line 4268 "dhcp6_lexer.cc" case YY_END_OF_BUFFER: { @@ -4073,8 +4280,8 @@ ECHO; { /* We're scanning a new file or input source. It's * possible that this happened because the user - * just pointed parser6_in at a new source and called - * parser6_lex(). If so, then we have to assure + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a @@ -4082,7 +4289,7 @@ ECHO; */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; /* %if-c-only */ - YY_CURRENT_BUFFER_LVALUE->yy_input_file = parser6_in; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4140,11 +4347,11 @@ ECHO; { (yy_did_buffer_switch_on_eof) = 0; - if ( parser6_wrap( ) ) + if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up - * parser6_text, we can now set up + * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the @@ -4194,12 +4401,11 @@ ECHO; } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ -} /* end of parser6_lex */ +} /* end of yylex */ /* %ok-for-header */ /* %if-c++-only */ /* %not-for-header */ - /* %ok-for-header */ /* %endif */ @@ -4219,7 +4425,7 @@ static int yy_get_next_buffer (void) { char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = (yytext_ptr); - yy_size_t number_to_move, i; + int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) @@ -4248,7 +4454,7 @@ static int yy_get_next_buffer (void) /* Try to read more data. */ /* First move last chars to start of buffer. */ - number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1; + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); @@ -4261,7 +4467,7 @@ static int yy_get_next_buffer (void) else { - yy_size_t num_to_read = + int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) @@ -4275,7 +4481,7 @@ static int yy_get_next_buffer (void) if ( b->yy_is_our_buffer ) { - yy_size_t new_size = b->yy_buf_size * 2; + int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -4284,11 +4490,12 @@ static int yy_get_next_buffer (void) b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ - parser6_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) ); } else /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; + b->yy_ch_buf = NULL; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( @@ -4316,7 +4523,7 @@ static int yy_get_next_buffer (void) if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; - parser6_restart(parser6_in ); + yyrestart( yyin ); } else @@ -4330,12 +4537,15 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; - if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) parser6_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); } (yy_n_chars) += number_to_move; @@ -4351,7 +4561,6 @@ static int yy_get_next_buffer (void) /* %if-c-only */ /* %not-for-header */ - static yy_state_type yy_get_previous_state (void) /* %endif */ /* %if-c++-only */ @@ -4376,9 +4585,9 @@ static int yy_get_next_buffer (void) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 1378 ) - yy_c = yy_meta[(unsigned int) yy_c]; + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; } return yy_current_state; @@ -4409,9 +4618,9 @@ static int yy_get_next_buffer (void) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 1378 ) - yy_c = yy_meta[(unsigned int) yy_c]; + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_is_jam = (yy_current_state == 1377); return yy_is_jam ? 0 : yy_current_state; @@ -4451,7 +4660,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); + int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -4468,14 +4677,14 @@ static int yy_get_next_buffer (void) */ /* Reset buffer status. */ - parser6_restart(parser6_in ); + yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { - if ( parser6_wrap( ) ) - return EOF; + if ( yywrap( ) ) + return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; @@ -4494,10 +4703,10 @@ static int yy_get_next_buffer (void) } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ - *(yy_c_buf_p) = '\0'; /* preserve parser6_text */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); -/* %% [19.0] update BOL and parser6_lineno */ +/* %% [19.0] update BOL and yylineno */ return c; } @@ -4511,20 +4720,20 @@ static int yy_get_next_buffer (void) * @note This function does not reset the start condition to @c INITIAL . */ /* %if-c-only */ - void parser6_restart (FILE * input_file ) + void yyrestart (FILE * input_file ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! YY_CURRENT_BUFFER ){ - parser6_ensure_buffer_stack (); + yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - parser6__create_buffer(parser6_in,YY_BUF_SIZE ); + yy_create_buffer( yyin, YY_BUF_SIZE ); } - parser6__init_buffer(YY_CURRENT_BUFFER,input_file ); - parser6__load_buffer_state( ); + yy_init_buffer( YY_CURRENT_BUFFER, input_file ); + yy_load_buffer_state( ); } /* %if-c++-only */ @@ -4535,7 +4744,7 @@ static int yy_get_next_buffer (void) * */ /* %if-c-only */ - void parser6__switch_to_buffer (YY_BUFFER_STATE new_buffer ) + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4543,10 +4752,10 @@ static int yy_get_next_buffer (void) /* TODO. We should be able to replace this entire function body * with - * parser6_pop_buffer_state(); - * parser6_push_buffer_state(new_buffer); + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); */ - parser6_ensure_buffer_stack (); + yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; @@ -4559,18 +4768,18 @@ static int yy_get_next_buffer (void) } YY_CURRENT_BUFFER_LVALUE = new_buffer; - parser6__load_buffer_state( ); + yy_load_buffer_state( ); /* We don't actually know whether we did this switch during - * EOF (parser6_wrap()) processing, but the only time this flag - * is looked at is after parser6_wrap() is called, so it's safe + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } /* %if-c-only */ -static void parser6__load_buffer_state (void) +static void yy_load_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4578,7 +4787,7 @@ static void parser6__load_buffer_state (void) (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; /* %if-c-only */ - parser6_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4592,29 +4801,29 @@ static void parser6__load_buffer_state (void) * @return the allocated buffer state. */ /* %if-c-only */ - YY_BUFFER_STATE parser6__create_buffer (FILE * file, int size ) + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) /* %endif */ /* %if-c++-only */ /* %endif */ { YY_BUFFER_STATE b; - b = (YY_BUFFER_STATE) parser6_alloc(sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in parser6__create_buffer()" ); + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - b->yy_buf_size = (yy_size_t)size; + b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ - b->yy_ch_buf = (char *) parser6_alloc(b->yy_buf_size + 2 ); + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in parser6__create_buffer()" ); + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; - parser6__init_buffer(b,file ); + yy_init_buffer( b, file ); return b; } @@ -4623,11 +4832,11 @@ static void parser6__load_buffer_state (void) /* %endif */ /** Destroy the buffer. - * @param b a buffer created with parser6__create_buffer() + * @param b a buffer created with yy_create_buffer() * */ /* %if-c-only */ - void parser6__delete_buffer (YY_BUFFER_STATE b ) + void yy_delete_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4640,17 +4849,17 @@ static void parser6__load_buffer_state (void) YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) - parser6_free((void *) b->yy_ch_buf ); + yyfree( (void *) b->yy_ch_buf ); - parser6_free((void *) b ); + yyfree( (void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, - * such as during a parser6_restart() or at EOF. + * such as during a yyrestart() or at EOF. */ /* %if-c-only */ - static void parser6__init_buffer (YY_BUFFER_STATE b, FILE * file ) + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4658,7 +4867,7 @@ static void parser6__load_buffer_state (void) { int oerrno = errno; - parser6__flush_buffer(b ); + yy_flush_buffer( b ); /* %if-c-only */ b->yy_input_file = file; @@ -4667,8 +4876,8 @@ static void parser6__load_buffer_state (void) /* %endif */ b->yy_fill_buffer = 1; - /* If b is the current buffer, then parser6__init_buffer was _probably_ - * called from parser6_restart() or through yy_get_next_buffer. + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ @@ -4691,7 +4900,7 @@ static void parser6__load_buffer_state (void) * */ /* %if-c-only */ - void parser6__flush_buffer (YY_BUFFER_STATE b ) + void yy_flush_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4714,7 +4923,7 @@ static void parser6__load_buffer_state (void) b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) - parser6__load_buffer_state( ); + yy_load_buffer_state( ); } /* %if-c-or-c++ */ @@ -4725,7 +4934,7 @@ static void parser6__load_buffer_state (void) * */ /* %if-c-only */ -void parser6_push_buffer_state (YY_BUFFER_STATE new_buffer ) +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4733,9 +4942,9 @@ void parser6_push_buffer_state (YY_BUFFER_STATE new_buffer ) if (new_buffer == NULL) return; - parser6_ensure_buffer_stack(); + yyensure_buffer_stack(); - /* This block is copied from parser6__switch_to_buffer. */ + /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ @@ -4749,8 +4958,8 @@ void parser6_push_buffer_state (YY_BUFFER_STATE new_buffer ) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; - /* copied from parser6__switch_to_buffer. */ - parser6__load_buffer_state( ); + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /* %endif */ @@ -4761,7 +4970,7 @@ void parser6_push_buffer_state (YY_BUFFER_STATE new_buffer ) * */ /* %if-c-only */ -void parser6_pop_buffer_state (void) +void yypop_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4769,13 +4978,13 @@ void parser6_pop_buffer_state (void) if (!YY_CURRENT_BUFFER) return; - parser6__delete_buffer(YY_CURRENT_BUFFER ); + yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { - parser6__load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } @@ -4786,7 +4995,7 @@ void parser6_pop_buffer_state (void) * Guarantees space for at least one push. */ /* %if-c-only */ -static void parser6_ensure_buffer_stack (void) +static void yyensure_buffer_stack (void) /* %endif */ /* %if-c++-only */ /* %endif */ @@ -4799,15 +5008,15 @@ static void parser6_ensure_buffer_stack (void) * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ - num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ - (yy_buffer_stack) = (struct yy_buffer_state**)parser6_alloc + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in parser6_ensure_buffer_stack()" ); - + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - + (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; @@ -4819,12 +5028,12 @@ static void parser6_ensure_buffer_stack (void) yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; - (yy_buffer_stack) = (struct yy_buffer_state**)parser6_realloc + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in parser6_ensure_buffer_stack()" ); + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); @@ -4838,9 +5047,9 @@ static void parser6_ensure_buffer_stack (void) * @param base the character buffer * @param size the size in bytes of the character buffer * - * @return the newly allocated buffer state object. + * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE parser6__scan_buffer (char * base, yy_size_t size ) +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; @@ -4848,73 +5057,73 @@ YY_BUFFER_STATE parser6__scan_buffer (char * base, yy_size_t size ) base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ - return 0; + return NULL; - b = (YY_BUFFER_STATE) parser6_alloc(sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in parser6__scan_buffer()" ); + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; - b->yy_input_file = 0; + b->yy_input_file = NULL; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; - parser6__switch_to_buffer(b ); + yy_switch_to_buffer( b ); return b; } /* %endif */ /* %if-c-only */ -/** Setup the input buffer state to scan a string. The next call to parser6_lex() will +/** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use - * parser6__scan_bytes() instead. + * yy_scan_bytes() instead. */ -YY_BUFFER_STATE parser6__scan_string (yyconst char * yystr ) +YY_BUFFER_STATE yy_scan_string (const char * yystr ) { - return parser6__scan_bytes(yystr,strlen(yystr) ); + return yy_scan_bytes( yystr, (int) strlen(yystr) ); } /* %endif */ /* %if-c-only */ -/** Setup the input buffer state to scan the given bytes. The next call to parser6_lex() will +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE parser6__scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; - yy_size_t i; + int i; /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) parser6_alloc(n ); + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n ); if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in parser6__scan_bytes()" ); + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - b = parser6__scan_buffer(buf,n ); + b = yy_scan_buffer( buf, n ); if ( ! b ) - YY_FATAL_ERROR( "bad buffer in parser6__scan_bytes()" ); + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. @@ -4930,9 +5139,9 @@ YY_BUFFER_STATE parser6__scan_bytes (yyconst char * yybytes, yy_size_t _yybyte #endif /* %if-c-only */ -static void yy_fatal_error (yyconst char* msg ) +static void yynoreturn yy_fatal_error (const char* msg ) { - (void) fprintf( stderr, "%s\n", msg ); + fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* %endif */ @@ -4945,14 +5154,14 @@ static void yy_fatal_error (yyconst char* msg ) #define yyless(n) \ do \ { \ - /* Undo effects of setting up parser6_text. */ \ + /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ - parser6_text[parser6_leng] = (yy_hold_char); \ - (yy_c_buf_p) = parser6_text + yyless_macro_arg; \ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ - parser6_leng = yyless_macro_arg; \ + yyleng = yyless_macro_arg; \ } \ while ( 0 ) @@ -4965,43 +5174,43 @@ static void yy_fatal_error (yyconst char* msg ) /** Get the current line number. * */ -int parser6_get_lineno (void) +int yyget_lineno (void) { - - return parser6_lineno; + + return yylineno; } /** Get the input stream. * */ -FILE *parser6_get_in (void) +FILE *yyget_in (void) { - return parser6_in; + return yyin; } /** Get the output stream. * */ -FILE *parser6_get_out (void) +FILE *yyget_out (void) { - return parser6_out; + return yyout; } /** Get the length of the current token. * */ -yy_size_t parser6_get_leng (void) +int yyget_leng (void) { - return parser6_leng; + return yyleng; } /** Get the current token. * */ -char *parser6_get_text (void) +char *yyget_text (void) { - return parser6_text; + return yytext; } /* %if-reentrant */ @@ -5011,36 +5220,36 @@ char *parser6_get_text (void) * @param _line_number line number * */ -void parser6_set_lineno (int _line_number ) +void yyset_lineno (int _line_number ) { - parser6_lineno = _line_number; + yylineno = _line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * - * @see parser6__switch_to_buffer + * @see yy_switch_to_buffer */ -void parser6_set_in (FILE * _in_str ) +void yyset_in (FILE * _in_str ) { - parser6_in = _in_str ; + yyin = _in_str ; } -void parser6_set_out (FILE * _out_str ) +void yyset_out (FILE * _out_str ) { - parser6_out = _out_str ; + yyout = _out_str ; } -int parser6_get_debug (void) +int yyget_debug (void) { - return parser6__flex_debug; + return yy_flex_debug; } -void parser6_set_debug (int _bdebug ) +void yyset_debug (int _bdebug ) { - parser6__flex_debug = _bdebug ; + yy_flex_debug = _bdebug ; } /* %endif */ @@ -5054,50 +5263,50 @@ void parser6_set_debug (int _bdebug ) static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. - * This function is called from parser6_lex_destroy(), so don't allocate here. + * This function is called from yylex_destroy(), so don't allocate here. */ - (yy_buffer_stack) = 0; + (yy_buffer_stack) = NULL; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = (char *) 0; + (yy_c_buf_p) = NULL; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT - parser6_in = stdin; - parser6_out = stdout; + yyin = stdin; + yyout = stdout; #else - parser6_in = (FILE *) 0; - parser6_out = (FILE *) 0; + yyin = NULL; + yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by - * parser6_lex_init() + * yylex_init() */ return 0; } /* %endif */ /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ -/* parser6_lex_destroy is for both reentrant and non-reentrant scanners. */ -int parser6_lex_destroy (void) +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ - parser6__delete_buffer(YY_CURRENT_BUFFER ); + yy_delete_buffer( YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; - parser6_pop_buffer_state(); + yypop_buffer_state(); } /* Destroy the stack itself. */ - parser6_free((yy_buffer_stack) ); + yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time - * parser6_lex() is called, initialization will occur. */ + * yylex() is called, initialization will occur. */ yy_init_globals( ); /* %if-reentrant */ @@ -5111,7 +5320,7 @@ int parser6_lex_destroy (void) */ #ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +static void yy_flex_strncpy (char* s1, const char * s2, int n ) { int i; @@ -5121,7 +5330,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s ) +static int yy_flex_strlen (const char * s ) { int n; for ( n = 0; s[n]; ++n ) @@ -5131,12 +5340,12 @@ static int yy_flex_strlen (yyconst char * s ) } #endif -void *parser6_alloc (yy_size_t size ) +void *yyalloc (yy_size_t size ) { - return (void *) malloc( size ); + return malloc(size); } -void *parser6_realloc (void * ptr, yy_size_t size ) +void *yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both @@ -5146,12 +5355,12 @@ void *parser6_realloc (void * ptr, yy_size_t size ) * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ - return (void *) realloc( (char *) ptr, size ); + return realloc(ptr, size); } -void parser6_free (void * ptr ) +void yyfree (void * ptr ) { - free( (char *) ptr ); /* see parser6_realloc() for (char *) cast */ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } /* %if-tables-serialization definitions */ @@ -5161,8 +5370,7 @@ void parser6_free (void * ptr ) /* %ok-for-header */ -#line 1748 "dhcp6_lexer.ll" - +#line 1750 "dhcp6_lexer.ll" using namespace isc::dhcp; @@ -5176,7 +5384,7 @@ Parser6Context::scanStringBegin(const std::string& str, ParserType parser_type) file_ = ""; sfile_ = 0; loc_.initialize(&file_); - parser6__flex_debug = trace_scanning_; + yy_flex_debug = trace_scanning_; YY_BUFFER_STATE buffer; buffer = parser6__scan_bytes(str.c_str(), str.size()); if (!buffer) { @@ -5196,7 +5404,7 @@ Parser6Context::scanFileBegin(FILE * f, file_ = filename; sfile_ = f; loc_.initialize(&file_); - parser6__flex_debug = trace_scanning_; + yy_flex_debug = trace_scanning_; YY_BUFFER_STATE buffer; /* See dhcp6_lexer.cc header for available definitions */ diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index a6194d8ea3..b7836da307 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -1186,6 +1186,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} \"reservations\" { switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: return isc::dhcp::Dhcp6Parser::make_RESERVATIONS(driver.loc_); default: diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc index cc4ce305f0..4326b5094d 100644 --- a/src/bin/dhcp6/dhcp6_parser.cc +++ b/src/bin/dhcp6/dhcp6_parser.cc @@ -1001,8 +1001,8 @@ namespace isc { namespace dhcp { #line 1002 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 100: -#line 454 "dhcp6_parser.yy" // lalr1.cc:859 + case 101: +#line 455 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("preferred-lifetime", prf); @@ -1010,8 +1010,8 @@ namespace isc { namespace dhcp { #line 1011 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 101: -#line 459 "dhcp6_parser.yy" // lalr1.cc:859 + case 102: +#line 460 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("valid-lifetime", prf); @@ -1019,8 +1019,8 @@ namespace isc { namespace dhcp { #line 1020 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 102: -#line 464 "dhcp6_parser.yy" // lalr1.cc:859 + case 103: +#line 465 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("renew-timer", prf); @@ -1028,8 +1028,8 @@ namespace isc { namespace dhcp { #line 1029 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 103: -#line 469 "dhcp6_parser.yy" // lalr1.cc:859 + case 104: +#line 470 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rebind-timer", prf); @@ -1037,8 +1037,8 @@ namespace isc { namespace dhcp { #line 1038 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 104: -#line 474 "dhcp6_parser.yy" // lalr1.cc:859 + case 105: +#line 475 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("decline-probation-period", dpp); @@ -1046,8 +1046,8 @@ namespace isc { namespace dhcp { #line 1047 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 105: -#line 479 "dhcp6_parser.yy" // lalr1.cc:859 + case 106: +#line 480 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interfaces-config", i); @@ -1057,8 +1057,8 @@ namespace isc { namespace dhcp { #line 1058 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 106: -#line 484 "dhcp6_parser.yy" // lalr1.cc:859 + case 107: +#line 485 "dhcp6_parser.yy" // lalr1.cc:859 { // No interfaces config param is required ctx.stack_.pop_back(); @@ -1067,8 +1067,8 @@ namespace isc { namespace dhcp { #line 1068 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 107: -#line 490 "dhcp6_parser.yy" // lalr1.cc:859 + case 108: +#line 491 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the interfaces-config map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1077,8 +1077,8 @@ namespace isc { namespace dhcp { #line 1078 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 108: -#line 494 "dhcp6_parser.yy" // lalr1.cc:859 + case 109: +#line 495 "dhcp6_parser.yy" // lalr1.cc:859 { // No interfaces config param is required // parsing completed @@ -1086,8 +1086,8 @@ namespace isc { namespace dhcp { #line 1087 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 116: -#line 510 "dhcp6_parser.yy" // lalr1.cc:859 + case 117: +#line 511 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interfaces", l); @@ -1097,8 +1097,8 @@ namespace isc { namespace dhcp { #line 1098 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 117: -#line 515 "dhcp6_parser.yy" // lalr1.cc:859 + case 118: +#line 516 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1106,8 +1106,8 @@ namespace isc { namespace dhcp { #line 1107 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 118: -#line 520 "dhcp6_parser.yy" // lalr1.cc:859 + case 119: +#line 521 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("re-detect", b); @@ -1115,8 +1115,8 @@ namespace isc { namespace dhcp { #line 1116 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 119: -#line 526 "dhcp6_parser.yy" // lalr1.cc:859 + case 120: +#line 527 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lease-database", i); @@ -1126,8 +1126,8 @@ namespace isc { namespace dhcp { #line 1127 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 120: -#line 531 "dhcp6_parser.yy" // lalr1.cc:859 + case 121: +#line 532 "dhcp6_parser.yy" // lalr1.cc:859 { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); @@ -1137,8 +1137,8 @@ namespace isc { namespace dhcp { #line 1138 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 121: -#line 538 "dhcp6_parser.yy" // lalr1.cc:859 + case 122: +#line 539 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hosts-database", i); @@ -1148,8 +1148,8 @@ namespace isc { namespace dhcp { #line 1149 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 122: -#line 543 "dhcp6_parser.yy" // lalr1.cc:859 + case 123: +#line 544 "dhcp6_parser.yy" // lalr1.cc:859 { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); @@ -1159,8 +1159,8 @@ namespace isc { namespace dhcp { #line 1160 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 123: -#line 550 "dhcp6_parser.yy" // lalr1.cc:859 + case 124: +#line 551 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hosts-databases", l); @@ -1170,8 +1170,8 @@ namespace isc { namespace dhcp { #line 1171 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 124: -#line 555 "dhcp6_parser.yy" // lalr1.cc:859 + case 125: +#line 556 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1179,8 +1179,8 @@ namespace isc { namespace dhcp { #line 1180 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 129: -#line 568 "dhcp6_parser.yy" // lalr1.cc:859 + case 130: +#line 569 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -1189,8 +1189,8 @@ namespace isc { namespace dhcp { #line 1190 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 130: -#line 572 "dhcp6_parser.yy" // lalr1.cc:859 + case 131: +#line 573 "dhcp6_parser.yy" // lalr1.cc:859 { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -1199,16 +1199,16 @@ namespace isc { namespace dhcp { #line 1200 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 151: -#line 602 "dhcp6_parser.yy" // lalr1.cc:859 + case 152: +#line 603 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.DATABASE_TYPE); } #line 1208 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 152: -#line 604 "dhcp6_parser.yy" // lalr1.cc:859 + case 153: +#line 605 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -1216,40 +1216,40 @@ namespace isc { namespace dhcp { #line 1217 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 153: -#line 609 "dhcp6_parser.yy" // lalr1.cc:859 + case 154: +#line 610 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); } #line 1223 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 154: -#line 610 "dhcp6_parser.yy" // lalr1.cc:859 + case 155: +#line 611 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); } #line 1229 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 155: -#line 611 "dhcp6_parser.yy" // lalr1.cc:859 + case 156: +#line 612 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); } #line 1235 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 156: -#line 612 "dhcp6_parser.yy" // lalr1.cc:859 + case 157: +#line 613 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); } #line 1241 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 157: -#line 615 "dhcp6_parser.yy" // lalr1.cc:859 + case 158: +#line 616 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1249 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 158: -#line 617 "dhcp6_parser.yy" // lalr1.cc:859 + case 159: +#line 618 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user", user); @@ -1258,16 +1258,16 @@ namespace isc { namespace dhcp { #line 1259 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 159: -#line 623 "dhcp6_parser.yy" // lalr1.cc:859 + case 160: +#line 624 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1267 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 160: -#line 625 "dhcp6_parser.yy" // lalr1.cc:859 + case 161: +#line 626 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password", pwd); @@ -1276,16 +1276,16 @@ namespace isc { namespace dhcp { #line 1277 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 161: -#line 631 "dhcp6_parser.yy" // lalr1.cc:859 + case 162: +#line 632 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1285 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 162: -#line 633 "dhcp6_parser.yy" // lalr1.cc:859 + case 163: +#line 634 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host", h); @@ -1294,8 +1294,8 @@ namespace isc { namespace dhcp { #line 1295 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 163: -#line 639 "dhcp6_parser.yy" // lalr1.cc:859 + case 164: +#line 640 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("port", p); @@ -1303,16 +1303,16 @@ namespace isc { namespace dhcp { #line 1304 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 164: -#line 644 "dhcp6_parser.yy" // lalr1.cc:859 + case 165: +#line 645 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1312 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 165: -#line 646 "dhcp6_parser.yy" // lalr1.cc:859 + case 166: +#line 647 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); @@ -1321,8 +1321,8 @@ namespace isc { namespace dhcp { #line 1322 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 166: -#line 652 "dhcp6_parser.yy" // lalr1.cc:859 + case 167: +#line 653 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("persist", n); @@ -1330,8 +1330,8 @@ namespace isc { namespace dhcp { #line 1331 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 167: -#line 657 "dhcp6_parser.yy" // lalr1.cc:859 + case 168: +#line 658 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lfc-interval", n); @@ -1339,8 +1339,8 @@ namespace isc { namespace dhcp { #line 1340 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 168: -#line 662 "dhcp6_parser.yy" // lalr1.cc:859 + case 169: +#line 663 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("readonly", n); @@ -1348,8 +1348,8 @@ namespace isc { namespace dhcp { #line 1349 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 169: -#line 667 "dhcp6_parser.yy" // lalr1.cc:859 + case 170: +#line 668 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("connect-timeout", n); @@ -1357,8 +1357,8 @@ namespace isc { namespace dhcp { #line 1358 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 170: -#line 672 "dhcp6_parser.yy" // lalr1.cc:859 + case 171: +#line 673 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reconnect-wait-time", n); @@ -1366,8 +1366,8 @@ namespace isc { namespace dhcp { #line 1367 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 171: -#line 677 "dhcp6_parser.yy" // lalr1.cc:859 + case 172: +#line 678 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("request-timeout", n); @@ -1375,8 +1375,8 @@ namespace isc { namespace dhcp { #line 1376 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 172: -#line 682 "dhcp6_parser.yy" // lalr1.cc:859 + case 173: +#line 683 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("tcp-keepalive", n); @@ -1384,8 +1384,8 @@ namespace isc { namespace dhcp { #line 1385 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 173: -#line 687 "dhcp6_parser.yy" // lalr1.cc:859 + case 174: +#line 688 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("tcp-nodelay", n); @@ -1393,16 +1393,16 @@ namespace isc { namespace dhcp { #line 1394 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 174: -#line 692 "dhcp6_parser.yy" // lalr1.cc:859 + case 175: +#line 693 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1402 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 175: -#line 694 "dhcp6_parser.yy" // lalr1.cc:859 + case 176: +#line 695 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("contact-points", cp); @@ -1411,8 +1411,8 @@ namespace isc { namespace dhcp { #line 1412 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 176: -#line 700 "dhcp6_parser.yy" // lalr1.cc:859 + case 177: +#line 701 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reconnect-tries", n); @@ -1420,16 +1420,16 @@ namespace isc { namespace dhcp { #line 1421 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 177: -#line 705 "dhcp6_parser.yy" // lalr1.cc:859 + case 178: +#line 706 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1429 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 178: -#line 707 "dhcp6_parser.yy" // lalr1.cc:859 + case 179: +#line 708 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("keyspace", ks); @@ -1438,8 +1438,8 @@ namespace isc { namespace dhcp { #line 1439 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 179: -#line 714 "dhcp6_parser.yy" // lalr1.cc:859 + case 180: +#line 715 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("mac-sources", l); @@ -1449,8 +1449,8 @@ namespace isc { namespace dhcp { #line 1450 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 180: -#line 719 "dhcp6_parser.yy" // lalr1.cc:859 + case 181: +#line 720 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1458,8 +1458,8 @@ namespace isc { namespace dhcp { #line 1459 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 185: -#line 732 "dhcp6_parser.yy" // lalr1.cc:859 + case 186: +#line 733 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); @@ -1467,8 +1467,8 @@ namespace isc { namespace dhcp { #line 1468 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 186: -#line 737 "dhcp6_parser.yy" // lalr1.cc:859 + case 187: +#line 738 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); @@ -1476,8 +1476,8 @@ namespace isc { namespace dhcp { #line 1477 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 187: -#line 742 "dhcp6_parser.yy" // lalr1.cc:859 + case 188: +#line 743 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host-reservation-identifiers", l); @@ -1487,8 +1487,8 @@ namespace isc { namespace dhcp { #line 1488 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 188: -#line 747 "dhcp6_parser.yy" // lalr1.cc:859 + case 189: +#line 748 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1496,8 +1496,8 @@ namespace isc { namespace dhcp { #line 1497 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 194: -#line 761 "dhcp6_parser.yy" // lalr1.cc:859 + case 195: +#line 762 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); @@ -1505,8 +1505,8 @@ namespace isc { namespace dhcp { #line 1506 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 195: -#line 766 "dhcp6_parser.yy" // lalr1.cc:859 + case 196: +#line 767 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(flex_id); @@ -1514,8 +1514,8 @@ namespace isc { namespace dhcp { #line 1515 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 196: -#line 773 "dhcp6_parser.yy" // lalr1.cc:859 + case 197: +#line 774 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("relay-supplied-options", l); @@ -1525,8 +1525,8 @@ namespace isc { namespace dhcp { #line 1526 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 197: -#line 778 "dhcp6_parser.yy" // lalr1.cc:859 + case 198: +#line 779 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1534,8 +1534,8 @@ namespace isc { namespace dhcp { #line 1535 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 198: -#line 783 "dhcp6_parser.yy" // lalr1.cc:859 + case 199: +#line 784 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hooks-libraries", l); @@ -1545,8 +1545,8 @@ namespace isc { namespace dhcp { #line 1546 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 199: -#line 788 "dhcp6_parser.yy" // lalr1.cc:859 + case 200: +#line 789 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1554,8 +1554,8 @@ namespace isc { namespace dhcp { #line 1555 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 204: -#line 801 "dhcp6_parser.yy" // lalr1.cc:859 + case 205: +#line 802 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -1564,8 +1564,8 @@ namespace isc { namespace dhcp { #line 1565 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 205: -#line 805 "dhcp6_parser.yy" // lalr1.cc:859 + case 206: +#line 806 "dhcp6_parser.yy" // lalr1.cc:859 { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -1574,8 +1574,8 @@ namespace isc { namespace dhcp { #line 1575 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 206: -#line 811 "dhcp6_parser.yy" // lalr1.cc:859 + case 207: +#line 812 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the hooks-libraries list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1584,8 +1584,8 @@ namespace isc { namespace dhcp { #line 1585 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 207: -#line 815 "dhcp6_parser.yy" // lalr1.cc:859 + case 208: +#line 816 "dhcp6_parser.yy" // lalr1.cc:859 { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -1594,16 +1594,16 @@ namespace isc { namespace dhcp { #line 1595 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 213: -#line 830 "dhcp6_parser.yy" // lalr1.cc:859 + case 214: +#line 831 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1603 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 214: -#line 832 "dhcp6_parser.yy" // lalr1.cc:859 + case 215: +#line 833 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("library", lib); @@ -1612,16 +1612,16 @@ namespace isc { namespace dhcp { #line 1613 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 215: -#line 838 "dhcp6_parser.yy" // lalr1.cc:859 + case 216: +#line 839 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1621 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 216: -#line 840 "dhcp6_parser.yy" // lalr1.cc:859 + case 217: +#line 841 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -1629,8 +1629,8 @@ namespace isc { namespace dhcp { #line 1630 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 217: -#line 846 "dhcp6_parser.yy" // lalr1.cc:859 + case 218: +#line 847 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("expired-leases-processing", m); @@ -1640,8 +1640,8 @@ namespace isc { namespace dhcp { #line 1641 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 218: -#line 851 "dhcp6_parser.yy" // lalr1.cc:859 + case 219: +#line 852 "dhcp6_parser.yy" // lalr1.cc:859 { // No expired lease parameter is required ctx.stack_.pop_back(); @@ -1650,8 +1650,8 @@ namespace isc { namespace dhcp { #line 1651 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 227: -#line 869 "dhcp6_parser.yy" // lalr1.cc:859 + case 228: +#line 870 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reclaim-timer-wait-time", value); @@ -1659,8 +1659,8 @@ namespace isc { namespace dhcp { #line 1660 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 228: -#line 874 "dhcp6_parser.yy" // lalr1.cc:859 + case 229: +#line 875 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value); @@ -1668,8 +1668,8 @@ namespace isc { namespace dhcp { #line 1669 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 229: -#line 879 "dhcp6_parser.yy" // lalr1.cc:859 + case 230: +#line 880 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hold-reclaimed-time", value); @@ -1677,8 +1677,8 @@ namespace isc { namespace dhcp { #line 1678 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 230: -#line 884 "dhcp6_parser.yy" // lalr1.cc:859 + case 231: +#line 885 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-leases", value); @@ -1686,8 +1686,8 @@ namespace isc { namespace dhcp { #line 1687 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 231: -#line 889 "dhcp6_parser.yy" // lalr1.cc:859 + case 232: +#line 890 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-time", value); @@ -1695,8 +1695,8 @@ namespace isc { namespace dhcp { #line 1696 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 232: -#line 894 "dhcp6_parser.yy" // lalr1.cc:859 + case 233: +#line 895 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("unwarned-reclaim-cycles", value); @@ -1704,8 +1704,8 @@ namespace isc { namespace dhcp { #line 1705 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 233: -#line 902 "dhcp6_parser.yy" // lalr1.cc:859 + case 234: +#line 903 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet6", l); @@ -1715,8 +1715,8 @@ namespace isc { namespace dhcp { #line 1716 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 234: -#line 907 "dhcp6_parser.yy" // lalr1.cc:859 + case 235: +#line 908 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1724,8 +1724,8 @@ namespace isc { namespace dhcp { #line 1725 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 239: -#line 927 "dhcp6_parser.yy" // lalr1.cc:859 + case 240: +#line 928 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -1734,8 +1734,8 @@ namespace isc { namespace dhcp { #line 1735 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 240: -#line 931 "dhcp6_parser.yy" // lalr1.cc:859 + case 241: +#line 932 "dhcp6_parser.yy" // lalr1.cc:859 { // Once we reached this place, the subnet parsing is now complete. // If we want to, we can implement default values here. @@ -1760,8 +1760,8 @@ namespace isc { namespace dhcp { #line 1761 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 241: -#line 953 "dhcp6_parser.yy" // lalr1.cc:859 + case 242: +#line 954 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the subnet6 list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1770,8 +1770,8 @@ namespace isc { namespace dhcp { #line 1771 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 242: -#line 957 "dhcp6_parser.yy" // lalr1.cc:859 + case 243: +#line 958 "dhcp6_parser.yy" // lalr1.cc:859 { // The subnet subnet6 parameter is required ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -1780,16 +1780,16 @@ namespace isc { namespace dhcp { #line 1781 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 265: -#line 991 "dhcp6_parser.yy" // lalr1.cc:859 + case 266: +#line 992 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1789 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 266: -#line 993 "dhcp6_parser.yy" // lalr1.cc:859 + case 267: +#line 994 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); @@ -1798,16 +1798,16 @@ namespace isc { namespace dhcp { #line 1799 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 267: -#line 999 "dhcp6_parser.yy" // lalr1.cc:859 + case 268: +#line 1000 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1807 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 268: -#line 1001 "dhcp6_parser.yy" // lalr1.cc:859 + case 269: +#line 1002 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); @@ -1816,16 +1816,16 @@ namespace isc { namespace dhcp { #line 1817 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 269: -#line 1007 "dhcp6_parser.yy" // lalr1.cc:859 + case 270: +#line 1008 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1825 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 270: -#line 1009 "dhcp6_parser.yy" // lalr1.cc:859 + case 271: +#line 1010 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface-id", iface); @@ -1834,16 +1834,16 @@ namespace isc { namespace dhcp { #line 1835 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 271: -#line 1015 "dhcp6_parser.yy" // lalr1.cc:859 + case 272: +#line 1016 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 1843 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 272: -#line 1017 "dhcp6_parser.yy" // lalr1.cc:859 + case 273: +#line 1018 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-class", cls); @@ -1852,8 +1852,8 @@ namespace isc { namespace dhcp { #line 1853 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 273: -#line 1023 "dhcp6_parser.yy" // lalr1.cc:859 + case 274: +#line 1024 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("require-client-classes", c); @@ -1863,8 +1863,8 @@ namespace isc { namespace dhcp { #line 1864 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 274: -#line 1028 "dhcp6_parser.yy" // lalr1.cc:859 + case 275: +#line 1029 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1872,16 +1872,16 @@ namespace isc { namespace dhcp { #line 1873 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 275: -#line 1033 "dhcp6_parser.yy" // lalr1.cc:859 + case 276: +#line 1034 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.RESERVATION_MODE); } #line 1881 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 276: -#line 1035 "dhcp6_parser.yy" // lalr1.cc:859 + case 277: +#line 1036 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -1889,26 +1889,26 @@ namespace isc { namespace dhcp { #line 1890 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 277: -#line 1040 "dhcp6_parser.yy" // lalr1.cc:859 + case 278: +#line 1041 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } #line 1896 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 278: -#line 1041 "dhcp6_parser.yy" // lalr1.cc:859 + case 279: +#line 1042 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } #line 1902 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 279: -#line 1042 "dhcp6_parser.yy" // lalr1.cc:859 + case 280: +#line 1043 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } #line 1908 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 280: -#line 1045 "dhcp6_parser.yy" // lalr1.cc:859 + case 281: +#line 1046 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); @@ -1916,8 +1916,8 @@ namespace isc { namespace dhcp { #line 1917 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 281: -#line 1050 "dhcp6_parser.yy" // lalr1.cc:859 + case 282: +#line 1051 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rapid-commit", rc); @@ -1925,8 +1925,8 @@ namespace isc { namespace dhcp { #line 1926 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 282: -#line 1058 "dhcp6_parser.yy" // lalr1.cc:859 + case 283: +#line 1059 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("shared-networks", l); @@ -1936,8 +1936,8 @@ namespace isc { namespace dhcp { #line 1937 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 283: -#line 1063 "dhcp6_parser.yy" // lalr1.cc:859 + case 284: +#line 1064 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1945,8 +1945,8 @@ namespace isc { namespace dhcp { #line 1946 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 288: -#line 1078 "dhcp6_parser.yy" // lalr1.cc:859 + case 289: +#line 1079 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -1955,16 +1955,16 @@ namespace isc { namespace dhcp { #line 1956 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 289: -#line 1082 "dhcp6_parser.yy" // lalr1.cc:859 + case 290: +#line 1083 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } #line 1964 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 309: -#line 1113 "dhcp6_parser.yy" // lalr1.cc:859 + case 310: +#line 1114 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("option-def", l); @@ -1974,8 +1974,8 @@ namespace isc { namespace dhcp { #line 1975 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 310: -#line 1118 "dhcp6_parser.yy" // lalr1.cc:859 + case 311: +#line 1119 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -1983,8 +1983,8 @@ namespace isc { namespace dhcp { #line 1984 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 311: -#line 1126 "dhcp6_parser.yy" // lalr1.cc:859 + case 312: +#line 1127 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); @@ -1992,16 +1992,16 @@ namespace isc { namespace dhcp { #line 1993 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 312: -#line 1129 "dhcp6_parser.yy" // lalr1.cc:859 + case 313: +#line 1130 "dhcp6_parser.yy" // lalr1.cc:859 { // parsing completed } #line 2001 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 317: -#line 1145 "dhcp6_parser.yy" // lalr1.cc:859 + case 318: +#line 1146 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -2010,8 +2010,8 @@ namespace isc { namespace dhcp { #line 2011 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 318: -#line 1149 "dhcp6_parser.yy" // lalr1.cc:859 + case 319: +#line 1150 "dhcp6_parser.yy" // lalr1.cc:859 { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2022,8 +2022,8 @@ namespace isc { namespace dhcp { #line 2023 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 319: -#line 1160 "dhcp6_parser.yy" // lalr1.cc:859 + case 320: +#line 1161 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the option-def list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2032,8 +2032,8 @@ namespace isc { namespace dhcp { #line 2033 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 320: -#line 1164 "dhcp6_parser.yy" // lalr1.cc:859 + case 321: +#line 1165 "dhcp6_parser.yy" // lalr1.cc:859 { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2044,8 +2044,8 @@ namespace isc { namespace dhcp { #line 2045 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 336: -#line 1196 "dhcp6_parser.yy" // lalr1.cc:859 + case 337: +#line 1197 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); @@ -2053,16 +2053,16 @@ namespace isc { namespace dhcp { #line 2054 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 338: -#line 1203 "dhcp6_parser.yy" // lalr1.cc:859 + case 339: +#line 1204 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2062 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 339: -#line 1205 "dhcp6_parser.yy" // lalr1.cc:859 + case 340: +#line 1206 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); @@ -2071,16 +2071,16 @@ namespace isc { namespace dhcp { #line 2072 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 340: -#line 1211 "dhcp6_parser.yy" // lalr1.cc:859 + case 341: +#line 1212 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2080 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 341: -#line 1213 "dhcp6_parser.yy" // lalr1.cc:859 + case 342: +#line 1214 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("record-types", rtypes); @@ -2089,16 +2089,16 @@ namespace isc { namespace dhcp { #line 2090 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 342: -#line 1219 "dhcp6_parser.yy" // lalr1.cc:859 + case 343: +#line 1220 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2098 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 343: -#line 1221 "dhcp6_parser.yy" // lalr1.cc:859 + case 344: +#line 1222 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); @@ -2107,16 +2107,16 @@ namespace isc { namespace dhcp { #line 2108 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 345: -#line 1229 "dhcp6_parser.yy" // lalr1.cc:859 + case 346: +#line 1230 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2116 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 346: -#line 1231 "dhcp6_parser.yy" // lalr1.cc:859 + case 347: +#line 1232 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); @@ -2125,8 +2125,8 @@ namespace isc { namespace dhcp { #line 2126 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 347: -#line 1237 "dhcp6_parser.yy" // lalr1.cc:859 + case 348: +#line 1238 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); @@ -2134,8 +2134,8 @@ namespace isc { namespace dhcp { #line 2135 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 348: -#line 1246 "dhcp6_parser.yy" // lalr1.cc:859 + case 349: +#line 1247 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("option-data", l); @@ -2145,8 +2145,8 @@ namespace isc { namespace dhcp { #line 2146 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 349: -#line 1251 "dhcp6_parser.yy" // lalr1.cc:859 + case 350: +#line 1252 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -2154,8 +2154,8 @@ namespace isc { namespace dhcp { #line 2155 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 354: -#line 1270 "dhcp6_parser.yy" // lalr1.cc:859 + case 355: +#line 1271 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -2164,8 +2164,8 @@ namespace isc { namespace dhcp { #line 2165 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 355: -#line 1274 "dhcp6_parser.yy" // lalr1.cc:859 + case 356: +#line 1275 "dhcp6_parser.yy" // lalr1.cc:859 { /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); @@ -2173,8 +2173,8 @@ namespace isc { namespace dhcp { #line 2174 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 356: -#line 1282 "dhcp6_parser.yy" // lalr1.cc:859 + case 357: +#line 1283 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the option-data list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2183,8 +2183,8 @@ namespace isc { namespace dhcp { #line 2184 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 357: -#line 1286 "dhcp6_parser.yy" // lalr1.cc:859 + case 358: +#line 1287 "dhcp6_parser.yy" // lalr1.cc:859 { /// @todo: the code or name parameters are required. // parsing completed @@ -2192,16 +2192,16 @@ namespace isc { namespace dhcp { #line 2193 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 372: -#line 1319 "dhcp6_parser.yy" // lalr1.cc:859 + case 373: +#line 1320 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2201 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 373: -#line 1321 "dhcp6_parser.yy" // lalr1.cc:859 + case 374: +#line 1322 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); @@ -2210,8 +2210,8 @@ namespace isc { namespace dhcp { #line 2211 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 376: -#line 1331 "dhcp6_parser.yy" // lalr1.cc:859 + case 377: +#line 1332 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", space); @@ -2219,8 +2219,8 @@ namespace isc { namespace dhcp { #line 2220 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 377: -#line 1336 "dhcp6_parser.yy" // lalr1.cc:859 + case 378: +#line 1337 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-send", persist); @@ -2228,8 +2228,8 @@ namespace isc { namespace dhcp { #line 2229 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 378: -#line 1344 "dhcp6_parser.yy" // lalr1.cc:859 + case 379: +#line 1345 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pools", l); @@ -2239,8 +2239,8 @@ namespace isc { namespace dhcp { #line 2240 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 379: -#line 1349 "dhcp6_parser.yy" // lalr1.cc:859 + case 380: +#line 1350 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -2248,8 +2248,8 @@ namespace isc { namespace dhcp { #line 2249 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 384: -#line 1364 "dhcp6_parser.yy" // lalr1.cc:859 + case 385: +#line 1365 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -2258,8 +2258,8 @@ namespace isc { namespace dhcp { #line 2259 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 385: -#line 1368 "dhcp6_parser.yy" // lalr1.cc:859 + case 386: +#line 1369 "dhcp6_parser.yy" // lalr1.cc:859 { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2268,8 +2268,8 @@ namespace isc { namespace dhcp { #line 2269 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 386: -#line 1374 "dhcp6_parser.yy" // lalr1.cc:859 + case 387: +#line 1375 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2278,8 +2278,8 @@ namespace isc { namespace dhcp { #line 2279 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 387: -#line 1378 "dhcp6_parser.yy" // lalr1.cc:859 + case 388: +#line 1379 "dhcp6_parser.yy" // lalr1.cc:859 { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2287,16 +2287,16 @@ namespace isc { namespace dhcp { #line 2288 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 397: -#line 1396 "dhcp6_parser.yy" // lalr1.cc:859 + case 398: +#line 1397 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2296 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 398: -#line 1398 "dhcp6_parser.yy" // lalr1.cc:859 + case 399: +#line 1399 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); @@ -2305,16 +2305,16 @@ namespace isc { namespace dhcp { #line 2306 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 399: -#line 1404 "dhcp6_parser.yy" // lalr1.cc:859 + case 400: +#line 1405 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2314 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 400: -#line 1406 "dhcp6_parser.yy" // lalr1.cc:859 + case 401: +#line 1407 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context = yystack_[0].value.as< ElementPtr > (); @@ -2340,16 +2340,16 @@ namespace isc { namespace dhcp { #line 2341 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 401: -#line 1429 "dhcp6_parser.yy" // lalr1.cc:859 + case 402: +#line 1430 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2349 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 402: -#line 1431 "dhcp6_parser.yy" // lalr1.cc:859 + case 403: +#line 1432 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location))); @@ -2377,8 +2377,8 @@ namespace isc { namespace dhcp { #line 2378 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 403: -#line 1459 "dhcp6_parser.yy" // lalr1.cc:859 + case 404: +#line 1460 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pd-pools", l); @@ -2388,8 +2388,8 @@ namespace isc { namespace dhcp { #line 2389 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 404: -#line 1464 "dhcp6_parser.yy" // lalr1.cc:859 + case 405: +#line 1465 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -2397,8 +2397,8 @@ namespace isc { namespace dhcp { #line 2398 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 409: -#line 1479 "dhcp6_parser.yy" // lalr1.cc:859 + case 410: +#line 1480 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -2407,8 +2407,8 @@ namespace isc { namespace dhcp { #line 2408 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 410: -#line 1483 "dhcp6_parser.yy" // lalr1.cc:859 + case 411: +#line 1484 "dhcp6_parser.yy" // lalr1.cc:859 { // The prefix, prefix len and delegated len parameters are required. ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2419,8 +2419,8 @@ namespace isc { namespace dhcp { #line 2420 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 411: -#line 1491 "dhcp6_parser.yy" // lalr1.cc:859 + case 412: +#line 1492 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the pd-pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2429,8 +2429,8 @@ namespace isc { namespace dhcp { #line 2430 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 412: -#line 1495 "dhcp6_parser.yy" // lalr1.cc:859 + case 413: +#line 1496 "dhcp6_parser.yy" // lalr1.cc:859 { // The prefix, prefix len and delegated len parameters are required. ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2441,16 +2441,16 @@ namespace isc { namespace dhcp { #line 2442 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 426: -#line 1520 "dhcp6_parser.yy" // lalr1.cc:859 + case 427: +#line 1521 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2450 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 427: -#line 1522 "dhcp6_parser.yy" // lalr1.cc:859 + case 428: +#line 1523 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix", prf); @@ -2459,8 +2459,8 @@ namespace isc { namespace dhcp { #line 2460 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 428: -#line 1528 "dhcp6_parser.yy" // lalr1.cc:859 + case 429: +#line 1529 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix-len", prf); @@ -2468,16 +2468,16 @@ namespace isc { namespace dhcp { #line 2469 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 429: -#line 1533 "dhcp6_parser.yy" // lalr1.cc:859 + case 430: +#line 1534 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2477 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 430: -#line 1535 "dhcp6_parser.yy" // lalr1.cc:859 + case 431: +#line 1536 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("excluded-prefix", prf); @@ -2486,8 +2486,8 @@ namespace isc { namespace dhcp { #line 2487 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 431: -#line 1541 "dhcp6_parser.yy" // lalr1.cc:859 + case 432: +#line 1542 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("excluded-prefix-len", prf); @@ -2495,8 +2495,8 @@ namespace isc { namespace dhcp { #line 2496 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 432: -#line 1546 "dhcp6_parser.yy" // lalr1.cc:859 + case 433: +#line 1547 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("delegated-len", deleg); @@ -2504,8 +2504,8 @@ namespace isc { namespace dhcp { #line 2505 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 433: -#line 1554 "dhcp6_parser.yy" // lalr1.cc:859 + case 434: +#line 1555 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations", l); @@ -2515,8 +2515,8 @@ namespace isc { namespace dhcp { #line 2516 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 434: -#line 1559 "dhcp6_parser.yy" // lalr1.cc:859 + case 435: +#line 1560 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -2524,8 +2524,8 @@ namespace isc { namespace dhcp { #line 2525 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 439: -#line 1572 "dhcp6_parser.yy" // lalr1.cc:859 + case 440: +#line 1573 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -2534,8 +2534,8 @@ namespace isc { namespace dhcp { #line 2535 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 440: -#line 1576 "dhcp6_parser.yy" // lalr1.cc:859 + case 441: +#line 1577 "dhcp6_parser.yy" // lalr1.cc:859 { /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); @@ -2543,8 +2543,8 @@ namespace isc { namespace dhcp { #line 2544 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 441: -#line 1581 "dhcp6_parser.yy" // lalr1.cc:859 + case 442: +#line 1582 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2553,8 +2553,8 @@ namespace isc { namespace dhcp { #line 2554 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 442: -#line 1585 "dhcp6_parser.yy" // lalr1.cc:859 + case 443: +#line 1586 "dhcp6_parser.yy" // lalr1.cc:859 { /// @todo: an identifier parameter is required. // parsing completed @@ -2562,8 +2562,8 @@ namespace isc { namespace dhcp { #line 2563 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 458: -#line 1612 "dhcp6_parser.yy" // lalr1.cc:859 + case 459: +#line 1613 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-addresses", l); @@ -2573,8 +2573,8 @@ namespace isc { namespace dhcp { #line 2574 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 459: -#line 1617 "dhcp6_parser.yy" // lalr1.cc:859 + case 460: +#line 1618 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -2582,8 +2582,8 @@ namespace isc { namespace dhcp { #line 2583 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 460: -#line 1622 "dhcp6_parser.yy" // lalr1.cc:859 + case 461: +#line 1623 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefixes", l); @@ -2593,8 +2593,8 @@ namespace isc { namespace dhcp { #line 2594 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 461: -#line 1627 "dhcp6_parser.yy" // lalr1.cc:859 + case 462: +#line 1628 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -2602,16 +2602,16 @@ namespace isc { namespace dhcp { #line 2603 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 462: -#line 1632 "dhcp6_parser.yy" // lalr1.cc:859 + case 463: +#line 1633 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2611 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 463: -#line 1634 "dhcp6_parser.yy" // lalr1.cc:859 + case 464: +#line 1635 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); @@ -2620,16 +2620,16 @@ namespace isc { namespace dhcp { #line 2621 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 464: -#line 1640 "dhcp6_parser.yy" // lalr1.cc:859 + case 465: +#line 1641 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2629 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 465: -#line 1642 "dhcp6_parser.yy" // lalr1.cc:859 + case 466: +#line 1643 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hw-address", hw); @@ -2638,16 +2638,16 @@ namespace isc { namespace dhcp { #line 2639 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 466: -#line 1648 "dhcp6_parser.yy" // lalr1.cc:859 + case 467: +#line 1649 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2647 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 467: -#line 1650 "dhcp6_parser.yy" // lalr1.cc:859 + case 468: +#line 1651 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); @@ -2656,16 +2656,16 @@ namespace isc { namespace dhcp { #line 2657 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 468: -#line 1656 "dhcp6_parser.yy" // lalr1.cc:859 + case 469: +#line 1657 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2665 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 469: -#line 1658 "dhcp6_parser.yy" // lalr1.cc:859 + case 470: +#line 1659 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flex-id", hw); @@ -2674,8 +2674,8 @@ namespace isc { namespace dhcp { #line 2675 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 470: -#line 1664 "dhcp6_parser.yy" // lalr1.cc:859 + case 471: +#line 1665 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-classes", c); @@ -2685,8 +2685,8 @@ namespace isc { namespace dhcp { #line 2686 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 471: -#line 1669 "dhcp6_parser.yy" // lalr1.cc:859 + case 472: +#line 1670 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -2694,8 +2694,8 @@ namespace isc { namespace dhcp { #line 2695 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 472: -#line 1677 "dhcp6_parser.yy" // lalr1.cc:859 + case 473: +#line 1678 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("relay", m); @@ -2705,8 +2705,8 @@ namespace isc { namespace dhcp { #line 2706 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 473: -#line 1682 "dhcp6_parser.yy" // lalr1.cc:859 + case 474: +#line 1683 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -2714,16 +2714,16 @@ namespace isc { namespace dhcp { #line 2715 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 476: -#line 1691 "dhcp6_parser.yy" // lalr1.cc:859 + case 477: +#line 1692 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2723 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 477: -#line 1693 "dhcp6_parser.yy" // lalr1.cc:859 + case 478: +#line 1694 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", addr); @@ -2732,8 +2732,8 @@ namespace isc { namespace dhcp { #line 2733 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 478: -#line 1702 "dhcp6_parser.yy" // lalr1.cc:859 + case 479: +#line 1703 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-classes", l); @@ -2743,8 +2743,8 @@ namespace isc { namespace dhcp { #line 2744 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 479: -#line 1707 "dhcp6_parser.yy" // lalr1.cc:859 + case 480: +#line 1708 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -2752,8 +2752,8 @@ namespace isc { namespace dhcp { #line 2753 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 482: -#line 1716 "dhcp6_parser.yy" // lalr1.cc:859 + case 483: +#line 1717 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -2762,8 +2762,8 @@ namespace isc { namespace dhcp { #line 2763 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 483: -#line 1720 "dhcp6_parser.yy" // lalr1.cc:859 + case 484: +#line 1721 "dhcp6_parser.yy" // lalr1.cc:859 { // The name client class parameter is required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2772,16 +2772,16 @@ namespace isc { namespace dhcp { #line 2773 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 496: -#line 1745 "dhcp6_parser.yy" // lalr1.cc:859 + case 497: +#line 1746 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2781 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 497: -#line 1747 "dhcp6_parser.yy" // lalr1.cc:859 + case 498: +#line 1748 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); @@ -2790,8 +2790,8 @@ namespace isc { namespace dhcp { #line 2791 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 498: -#line 1753 "dhcp6_parser.yy" // lalr1.cc:859 + case 499: +#line 1754 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("only-if-required", b); @@ -2799,8 +2799,8 @@ namespace isc { namespace dhcp { #line 2800 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 499: -#line 1761 "dhcp6_parser.yy" // lalr1.cc:859 + case 500: +#line 1762 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-id", m); @@ -2810,8 +2810,8 @@ namespace isc { namespace dhcp { #line 2811 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 500: -#line 1766 "dhcp6_parser.yy" // lalr1.cc:859 + case 501: +#line 1767 "dhcp6_parser.yy" // lalr1.cc:859 { // The type parameter is required. ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); @@ -2821,16 +2821,16 @@ namespace isc { namespace dhcp { #line 2822 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 512: -#line 1788 "dhcp6_parser.yy" // lalr1.cc:859 + case 513: +#line 1789 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.DUID_TYPE); } #line 2830 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 513: -#line 1790 "dhcp6_parser.yy" // lalr1.cc:859 + case 514: +#line 1791 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -2838,26 +2838,26 @@ namespace isc { namespace dhcp { #line 2839 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 514: -#line 1795 "dhcp6_parser.yy" // lalr1.cc:859 + case 515: +#line 1796 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); } #line 2845 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 515: -#line 1796 "dhcp6_parser.yy" // lalr1.cc:859 + case 516: +#line 1797 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); } #line 2851 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 516: -#line 1797 "dhcp6_parser.yy" // lalr1.cc:859 + case 517: +#line 1798 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); } #line 2857 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 517: -#line 1800 "dhcp6_parser.yy" // lalr1.cc:859 + case 518: +#line 1801 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("htype", htype); @@ -2865,16 +2865,16 @@ namespace isc { namespace dhcp { #line 2866 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 518: -#line 1805 "dhcp6_parser.yy" // lalr1.cc:859 + case 519: +#line 1806 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2874 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 519: -#line 1807 "dhcp6_parser.yy" // lalr1.cc:859 + case 520: +#line 1808 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("identifier", id); @@ -2883,8 +2883,8 @@ namespace isc { namespace dhcp { #line 2884 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 520: -#line 1813 "dhcp6_parser.yy" // lalr1.cc:859 + case 521: +#line 1814 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("time", time); @@ -2892,8 +2892,8 @@ namespace isc { namespace dhcp { #line 2893 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 521: -#line 1818 "dhcp6_parser.yy" // lalr1.cc:859 + case 522: +#line 1819 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enterprise-id", time); @@ -2901,8 +2901,8 @@ namespace isc { namespace dhcp { #line 2902 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 522: -#line 1825 "dhcp6_parser.yy" // lalr1.cc:859 + case 523: +#line 1826 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); @@ -2910,8 +2910,8 @@ namespace isc { namespace dhcp { #line 2911 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 523: -#line 1832 "dhcp6_parser.yy" // lalr1.cc:859 + case 524: +#line 1833 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("control-socket", m); @@ -2921,8 +2921,8 @@ namespace isc { namespace dhcp { #line 2922 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 524: -#line 1837 "dhcp6_parser.yy" // lalr1.cc:859 + case 525: +#line 1838 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -2930,16 +2930,16 @@ namespace isc { namespace dhcp { #line 2931 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 532: -#line 1853 "dhcp6_parser.yy" // lalr1.cc:859 + case 533: +#line 1854 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2939 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 533: -#line 1855 "dhcp6_parser.yy" // lalr1.cc:859 + case 534: +#line 1856 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-type", stype); @@ -2948,16 +2948,16 @@ namespace isc { namespace dhcp { #line 2949 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 534: -#line 1861 "dhcp6_parser.yy" // lalr1.cc:859 + case 535: +#line 1862 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 2957 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 535: -#line 1863 "dhcp6_parser.yy" // lalr1.cc:859 + case 536: +#line 1864 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-name", name); @@ -2966,8 +2966,8 @@ namespace isc { namespace dhcp { #line 2967 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 536: -#line 1871 "dhcp6_parser.yy" // lalr1.cc:859 + case 537: +#line 1872 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp-ddns", m); @@ -2977,8 +2977,8 @@ namespace isc { namespace dhcp { #line 2978 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 537: -#line 1876 "dhcp6_parser.yy" // lalr1.cc:859 + case 538: +#line 1877 "dhcp6_parser.yy" // lalr1.cc:859 { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); @@ -2988,8 +2988,8 @@ namespace isc { namespace dhcp { #line 2989 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 538: -#line 1883 "dhcp6_parser.yy" // lalr1.cc:859 + case 539: +#line 1884 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2998,8 +2998,8 @@ namespace isc { namespace dhcp { #line 2999 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 539: -#line 1887 "dhcp6_parser.yy" // lalr1.cc:859 + case 540: +#line 1888 "dhcp6_parser.yy" // lalr1.cc:859 { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3008,8 +3008,8 @@ namespace isc { namespace dhcp { #line 3009 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 559: -#line 1916 "dhcp6_parser.yy" // lalr1.cc:859 + case 560: +#line 1917 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-updates", b); @@ -3017,16 +3017,16 @@ namespace isc { namespace dhcp { #line 3018 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 560: -#line 1921 "dhcp6_parser.yy" // lalr1.cc:859 + case 561: +#line 1922 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 3026 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 561: -#line 1923 "dhcp6_parser.yy" // lalr1.cc:859 + case 562: +#line 1924 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("qualifying-suffix", s); @@ -3035,16 +3035,16 @@ namespace isc { namespace dhcp { #line 3036 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 562: -#line 1929 "dhcp6_parser.yy" // lalr1.cc:859 + case 563: +#line 1930 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 3044 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 563: -#line 1931 "dhcp6_parser.yy" // lalr1.cc:859 + case 564: +#line 1932 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-ip", s); @@ -3053,8 +3053,8 @@ namespace isc { namespace dhcp { #line 3054 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 564: -#line 1937 "dhcp6_parser.yy" // lalr1.cc:859 + case 565: +#line 1938 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-port", i); @@ -3062,16 +3062,16 @@ namespace isc { namespace dhcp { #line 3063 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 565: -#line 1942 "dhcp6_parser.yy" // lalr1.cc:859 + case 566: +#line 1943 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 3071 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 566: -#line 1944 "dhcp6_parser.yy" // lalr1.cc:859 + case 567: +#line 1945 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-ip", s); @@ -3080,8 +3080,8 @@ namespace isc { namespace dhcp { #line 3081 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 567: -#line 1950 "dhcp6_parser.yy" // lalr1.cc:859 + case 568: +#line 1951 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-port", i); @@ -3089,8 +3089,8 @@ namespace isc { namespace dhcp { #line 3090 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 568: -#line 1955 "dhcp6_parser.yy" // lalr1.cc:859 + case 569: +#line 1956 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-queue-size", i); @@ -3098,16 +3098,16 @@ namespace isc { namespace dhcp { #line 3099 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 569: -#line 1960 "dhcp6_parser.yy" // lalr1.cc:859 + case 570: +#line 1961 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NCR_PROTOCOL); } #line 3107 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 570: -#line 1962 "dhcp6_parser.yy" // lalr1.cc:859 + case 571: +#line 1963 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -3115,28 +3115,28 @@ namespace isc { namespace dhcp { #line 3116 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 571: -#line 1968 "dhcp6_parser.yy" // lalr1.cc:859 + case 572: +#line 1969 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } #line 3122 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 572: -#line 1969 "dhcp6_parser.yy" // lalr1.cc:859 + case 573: +#line 1970 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } #line 3128 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 573: -#line 1972 "dhcp6_parser.yy" // lalr1.cc:859 + case 574: +#line 1973 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NCR_FORMAT); } #line 3136 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 574: -#line 1974 "dhcp6_parser.yy" // lalr1.cc:859 + case 575: +#line 1975 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); @@ -3145,8 +3145,8 @@ namespace isc { namespace dhcp { #line 3146 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 575: -#line 1980 "dhcp6_parser.yy" // lalr1.cc:859 + case 576: +#line 1981 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-include-fqdn", b); @@ -3154,8 +3154,8 @@ namespace isc { namespace dhcp { #line 3155 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 576: -#line 1985 "dhcp6_parser.yy" // lalr1.cc:859 + case 577: +#line 1986 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-no-update", b); @@ -3163,8 +3163,8 @@ namespace isc { namespace dhcp { #line 3164 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 577: -#line 1990 "dhcp6_parser.yy" // lalr1.cc:859 + case 578: +#line 1991 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-client-update", b); @@ -3172,16 +3172,16 @@ namespace isc { namespace dhcp { #line 3173 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 578: -#line 1995 "dhcp6_parser.yy" // lalr1.cc:859 + case 579: +#line 1996 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.REPLACE_CLIENT_NAME); } #line 3181 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 579: -#line 1997 "dhcp6_parser.yy" // lalr1.cc:859 + case 580: +#line 1998 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -3189,40 +3189,40 @@ namespace isc { namespace dhcp { #line 3190 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 580: -#line 2003 "dhcp6_parser.yy" // lalr1.cc:859 + case 581: +#line 2004 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } #line 3198 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 581: -#line 2006 "dhcp6_parser.yy" // lalr1.cc:859 + case 582: +#line 2007 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } #line 3206 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 582: -#line 2009 "dhcp6_parser.yy" // lalr1.cc:859 + case 583: +#line 2010 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } #line 3214 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 583: -#line 2012 "dhcp6_parser.yy" // lalr1.cc:859 + case 584: +#line 2013 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } #line 3222 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 584: -#line 2015 "dhcp6_parser.yy" // lalr1.cc:859 + case 585: +#line 2016 "dhcp6_parser.yy" // lalr1.cc:859 { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); @@ -3230,16 +3230,16 @@ namespace isc { namespace dhcp { #line 3231 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 585: -#line 2021 "dhcp6_parser.yy" // lalr1.cc:859 + case 586: +#line 2022 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 3239 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 586: -#line 2023 "dhcp6_parser.yy" // lalr1.cc:859 + case 587: +#line 2024 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("generated-prefix", s); @@ -3248,16 +3248,16 @@ namespace isc { namespace dhcp { #line 3249 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 587: -#line 2031 "dhcp6_parser.yy" // lalr1.cc:859 + case 588: +#line 2032 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 3257 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 588: -#line 2033 "dhcp6_parser.yy" // lalr1.cc:859 + case 589: +#line 2034 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -3265,16 +3265,16 @@ namespace isc { namespace dhcp { #line 3266 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 589: -#line 2038 "dhcp6_parser.yy" // lalr1.cc:859 + case 590: +#line 2039 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 3274 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 590: -#line 2040 "dhcp6_parser.yy" // lalr1.cc:859 + case 591: +#line 2041 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -3282,16 +3282,16 @@ namespace isc { namespace dhcp { #line 3283 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 591: -#line 2045 "dhcp6_parser.yy" // lalr1.cc:859 + case 592: +#line 2046 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 3291 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 592: -#line 2047 "dhcp6_parser.yy" // lalr1.cc:859 + case 593: +#line 2048 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -3299,8 +3299,8 @@ namespace isc { namespace dhcp { #line 3300 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 593: -#line 2058 "dhcp6_parser.yy" // lalr1.cc:859 + case 594: +#line 2059 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("Logging", m); @@ -3310,8 +3310,8 @@ namespace isc { namespace dhcp { #line 3311 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 594: -#line 2063 "dhcp6_parser.yy" // lalr1.cc:859 + case 595: +#line 2064 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -3319,8 +3319,8 @@ namespace isc { namespace dhcp { #line 3320 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 595: -#line 2068 "dhcp6_parser.yy" // lalr1.cc:859 + case 596: +#line 2069 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the Logging map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3329,16 +3329,16 @@ namespace isc { namespace dhcp { #line 3330 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 596: -#line 2072 "dhcp6_parser.yy" // lalr1.cc:859 + case 597: +#line 2073 "dhcp6_parser.yy" // lalr1.cc:859 { // parsing completed } #line 3338 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 600: -#line 2088 "dhcp6_parser.yy" // lalr1.cc:859 + case 601: +#line 2089 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("loggers", l); @@ -3348,8 +3348,8 @@ namespace isc { namespace dhcp { #line 3349 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 601: -#line 2093 "dhcp6_parser.yy" // lalr1.cc:859 + case 602: +#line 2094 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -3357,8 +3357,8 @@ namespace isc { namespace dhcp { #line 3358 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 604: -#line 2105 "dhcp6_parser.yy" // lalr1.cc:859 + case 605: +#line 2106 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); @@ -3367,16 +3367,16 @@ namespace isc { namespace dhcp { #line 3368 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 605: -#line 2109 "dhcp6_parser.yy" // lalr1.cc:859 + case 606: +#line 2110 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } #line 3376 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 615: -#line 2126 "dhcp6_parser.yy" // lalr1.cc:859 + case 616: +#line 2127 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); @@ -3384,16 +3384,16 @@ namespace isc { namespace dhcp { #line 3385 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 616: -#line 2131 "dhcp6_parser.yy" // lalr1.cc:859 + case 617: +#line 2132 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 3393 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 617: -#line 2133 "dhcp6_parser.yy" // lalr1.cc:859 + case 618: +#line 2134 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); @@ -3402,8 +3402,8 @@ namespace isc { namespace dhcp { #line 3403 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 618: -#line 2139 "dhcp6_parser.yy" // lalr1.cc:859 + case 619: +#line 2140 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output_options", l); @@ -3413,8 +3413,8 @@ namespace isc { namespace dhcp { #line 3414 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 619: -#line 2144 "dhcp6_parser.yy" // lalr1.cc:859 + case 620: +#line 2145 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -3422,8 +3422,8 @@ namespace isc { namespace dhcp { #line 3423 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 622: -#line 2153 "dhcp6_parser.yy" // lalr1.cc:859 + case 623: +#line 2154 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -3432,24 +3432,24 @@ namespace isc { namespace dhcp { #line 3433 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 623: -#line 2157 "dhcp6_parser.yy" // lalr1.cc:859 + case 624: +#line 2158 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } #line 3441 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 630: -#line 2171 "dhcp6_parser.yy" // lalr1.cc:859 + case 631: +#line 2172 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } #line 3449 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 631: -#line 2173 "dhcp6_parser.yy" // lalr1.cc:859 + case 632: +#line 2174 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); @@ -3458,8 +3458,8 @@ namespace isc { namespace dhcp { #line 3459 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 632: -#line 2179 "dhcp6_parser.yy" // lalr1.cc:859 + case 633: +#line 2180 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); @@ -3467,8 +3467,8 @@ namespace isc { namespace dhcp { #line 3468 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 633: -#line 2184 "dhcp6_parser.yy" // lalr1.cc:859 + case 634: +#line 2185 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); @@ -3476,8 +3476,8 @@ namespace isc { namespace dhcp { #line 3477 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 634: -#line 2189 "dhcp6_parser.yy" // lalr1.cc:859 + case 635: +#line 2190 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); @@ -3741,116 +3741,116 @@ namespace isc { namespace dhcp { } - const short int Dhcp6Parser::yypact_ninf_ = -783; + const short int Dhcp6Parser::yypact_ninf_ = -774; const signed char Dhcp6Parser::yytable_ninf_ = -1; const short int Dhcp6Parser::yypact_[] = { - 435, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, 38, 41, 40, 58, 85, - 92, 101, 107, 108, 116, 124, 128, 146, 152, 153, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, 41, -112, - 17, 63, 27, 214, 67, 227, 403, 144, 65, 186, - -41, 454, 35, -783, 175, 197, 217, 215, 240, -783, - -783, -783, -783, -783, 255, -783, 33, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, 259, 269, 270, - 287, 309, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, 310, -783, -783, -783, 68, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, 321, -783, 138, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - 323, 327, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, 139, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, 147, -783, -783, -783, -783, -783, - 333, -783, 353, 354, -783, -783, -783, -783, -783, -783, - 148, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, 236, 262, - -783, -783, -783, -783, -783, -783, -783, -783, 290, -783, - -783, 365, -783, -783, -783, 367, -783, -783, 344, 326, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, 369, 373, -783, -783, -783, -783, 370, - 377, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, 219, -783, -783, -783, 378, -783, -783, - 379, -783, 381, 385, -783, -783, 388, 397, 399, -783, - -783, -783, -783, -783, 222, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, 238, -783, -783, -783, 41, 41, -783, 229, 402, - 404, 405, 406, 407, -783, 17, -783, 409, 411, 412, - 414, 245, 258, 265, 267, 271, 417, 428, 430, 431, - 432, 433, 436, 437, 438, 439, 440, 441, 442, 277, - 446, 449, 63, -783, 452, 299, 27, -783, 453, 455, - 464, 465, 466, 296, 312, 467, 468, 469, 470, 473, - 214, -783, 474, 67, -783, 477, 320, 479, 330, 331, - 227, -783, 481, 490, 491, 492, 493, 494, 495, -783, - 403, -783, 496, 500, 343, 502, 503, 504, 347, -783, - 65, 505, 349, 350, -783, 186, 508, 511, -37, -783, - 355, 514, 516, 359, 518, 361, 362, 521, 522, 366, - 368, 372, 527, 529, 454, -783, 530, 35, -783, -783, - -783, 533, 531, 532, 41, 41, 41, -783, 534, 535, - 536, 539, -783, -783, -783, -783, -783, 540, 541, 544, - 543, 390, 547, 548, 550, 551, 552, 553, 554, 555, - -783, 556, 589, -783, 592, -783, -783, 593, 594, 398, - 443, 444, -783, -783, 293, 592, 445, 595, 596, -783, - 447, -783, 448, -783, 450, -783, -783, -783, 592, 592, - 592, 451, 456, 457, 458, -783, 459, 460, -783, 461, - 462, 463, -783, -783, 471, -783, -783, -783, 472, 41, - -783, -783, 475, 476, -783, 478, -783, -783, -45, 410, - -783, -783, -783, -73, 480, -783, 597, -783, 41, 63, - 35, -783, -783, -783, 27, 184, 184, 600, 603, 606, - 607, -783, -783, -783, 609, -52, 41, 89, 618, 619, - 70, 132, 32, 454, -783, -783, 620, 621, -783, -783, - -783, -783, -783, -783, -783, -783, -783, 622, -26, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, 623, -783, 239, 252, 253, -783, -783, -783, -783, - 627, 630, 631, 634, 636, -783, 638, 639, -783, 640, - 641, 642, -783, 254, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, 261, -783, 643, 557, -783, -783, 644, 598, - -783, -783, 645, 649, -783, -783, 647, 651, -783, -783, - 650, 652, -783, -783, -783, 90, -783, -783, -783, 653, - -783, -783, -783, 118, -783, -783, -783, -783, 294, -783, - -783, 654, 655, -783, 657, 658, 659, 660, 661, 662, - 264, -783, -783, -783, -783, -783, -783, -783, -783, -783, - 663, 664, 665, -783, -783, -783, -783, 291, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, 301, - -783, -783, -783, 304, 486, -783, 666, 667, -783, -783, - 668, 670, -783, -783, 669, 673, -783, -783, -783, 671, - -783, -783, 348, -783, -783, -783, -783, 674, 676, 677, - 678, 509, 484, 515, 519, 523, 680, 524, 525, 684, - 528, 537, 538, 184, -783, -783, 184, -783, 600, 214, - -783, 603, 65, -783, 606, 186, -783, 607, 386, -783, - 609, -52, -783, -783, 89, -783, 18, 618, -783, -41, - -783, 619, 542, 545, 546, 549, 558, 559, 70, -783, - 685, 687, 562, 564, 565, 132, -783, 688, 689, 32, - -783, -783, -783, 690, 691, 67, -783, 620, 227, -783, - 621, 403, -783, 622, 693, -783, 256, 623, -783, 178, - 568, 570, 577, -783, -783, -783, -783, -783, 579, -783, - -783, 580, -783, -783, -783, -783, 307, -783, 308, -783, - 692, -783, 695, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, 314, -783, -783, - -783, -783, -783, -783, -783, -783, -783, 694, -783, -783, - -783, -783, -783, 697, 698, -783, -783, -783, -783, -783, - 318, -783, -783, -783, -783, -783, -783, -783, -783, 295, - 585, -783, -783, -783, -783, 586, 588, -783, -783, 591, - 325, -783, 335, -783, 701, -783, 599, -783, 702, -783, - -783, -783, -783, -783, 336, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, 386, -783, 706, 605, -783, 18, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, 708, 601, 709, 256, -783, -783, 612, - -783, -783, 710, -783, 613, -783, -783, 707, -783, -783, - 356, -783, 42, 707, -783, -783, 712, 713, 714, 345, - -783, -783, -783, -783, -783, -783, 746, 611, 608, 616, - 42, -783, 626, -783, -783, -783, -783, -783 + 313, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, 45, 35, 42, 74, 81, + 105, 124, 128, 165, 182, 184, 186, 188, 198, 232, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, 35, -82, + 29, 52, 59, 225, 193, 238, 123, 127, 85, 381, + -45, 444, 51, -774, 245, 242, 249, 269, 299, -774, + -774, -774, -774, -774, 305, -774, 54, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, 307, 311, 322, + 324, 328, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, 340, -774, -774, -774, + 72, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, 342, + -774, 110, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, 351, 353, -774, -774, -774, -774, -774, -774, + -774, -774, -774, 136, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, 142, -774, -774, -774, -774, + -774, 357, -774, 360, 361, -774, -774, -774, -774, -774, + -774, 148, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, 354, + 347, -774, -774, -774, -774, -774, -774, -774, -774, 362, + -774, -774, 369, -774, -774, -774, 376, -774, -774, 374, + 382, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, 380, 386, -774, -774, -774, -774, + 384, 391, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, 160, -774, -774, -774, 393, -774, + -774, 394, -774, 400, 401, -774, -774, 407, 409, 418, + -774, -774, -774, -774, -774, 163, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, 176, -774, -774, -774, 35, 35, -774, 234, + 419, 420, 430, 433, 436, -774, 29, -774, 437, 438, + 441, 442, 285, 287, 288, 290, 291, 450, 451, 452, + 453, 454, 470, 471, 472, 473, 474, 475, 477, 478, + 479, 325, 480, 482, 52, -774, 484, 329, 59, -774, + 485, 486, 487, 488, 490, 333, 332, 494, 495, 496, + 497, 225, -774, 498, 193, -774, 504, 348, 505, 349, + 350, 238, -774, 509, 510, 514, 515, 516, 520, 521, + -774, 123, -774, 522, 523, 366, 525, 526, 528, 372, + -774, 85, 529, 373, 375, -774, 381, 530, 534, 27, + -774, 377, 536, 539, 383, 540, 385, 387, 542, 544, + 388, 392, 408, 546, 547, 444, -774, 553, 51, -774, + -774, -774, 569, 567, 568, 35, 35, 35, -774, 570, + 571, 572, 575, -774, -774, -774, -774, -774, 576, 577, + 578, 579, 415, 580, 582, 583, 584, 585, 586, 587, + 588, 590, -774, 591, 592, -774, 589, -774, -774, 595, + 596, 423, 432, 443, -774, -774, 346, 589, 445, 600, + -774, 447, -774, 448, -774, 449, -774, -774, -774, 589, + 589, 589, 455, 456, 457, 458, -774, 459, 460, -774, + 461, 462, 463, -774, -774, 464, -774, -774, -774, 465, + 35, -774, -774, 466, 467, -774, 468, -774, -774, 90, + 481, -774, -774, -774, -47, 469, -774, 597, -774, 35, + 52, 51, -774, -774, -774, 59, 199, 199, 605, 606, + 607, 624, -774, -774, -774, 625, -21, 35, 252, 626, + 627, 628, 8, 152, -12, 444, -774, -774, 629, 630, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -7, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, 631, -774, 180, 209, 233, -774, -774, -774, + -774, 599, 635, 636, 637, 638, -774, 639, 640, -774, + 641, 642, 643, -774, 235, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, 239, -774, 644, 645, -774, -774, 646, + 648, -774, -774, 647, 651, -774, -774, 649, 653, -774, + -774, 652, 654, -774, -774, -774, 40, -774, -774, -774, + 655, -774, -774, -774, 95, -774, -774, -774, -774, 154, + -774, -774, 656, 657, -774, -774, 658, 660, -774, 661, + 662, 663, 664, 665, 666, 246, -774, -774, -774, -774, + -774, -774, -774, -774, -774, 667, 668, 669, -774, -774, + -774, -774, 258, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, 264, -774, -774, -774, 267, 513, + -774, 670, 672, -774, -774, 671, 675, -774, -774, -774, + 673, -774, -774, 280, -774, -774, -774, -774, 676, 678, + 679, 680, 517, 524, 527, 531, 532, 681, 535, 537, + 682, 538, 541, 543, 199, -774, -774, 199, -774, 605, + 225, -774, 606, 85, -774, 607, 381, -774, 624, 370, + -774, 625, -21, -774, -774, 252, -774, 79, 626, -774, + 123, -774, 627, -45, -774, 628, 548, 549, 550, 551, + 552, 554, 8, -774, 683, 686, 555, 556, 557, 152, + -774, 687, 688, -12, -774, -774, -774, 690, 695, 193, + -774, 629, 238, -774, 630, 689, -774, 15, 631, -774, + 358, 545, 560, 561, -774, -774, -774, -774, -774, 564, + -774, -774, 566, -774, -774, -774, -774, 270, -774, 277, + -774, 693, -774, 694, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, 302, -774, + -774, -774, -774, -774, -774, -774, -774, -774, 700, -774, + -774, -774, -774, -774, 697, 705, -774, -774, -774, -774, + -774, 701, -774, 309, -774, -774, -774, -774, -774, -774, + -774, -774, 317, 573, -774, -774, -774, -774, 593, 601, + -774, -774, 603, 315, -774, 319, -774, 613, -774, 711, + -774, -774, -774, -774, -774, 326, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, 370, -774, 724, 602, -774, + 79, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, 726, 598, 727, 15, -774, -774, + 617, -774, -774, 745, -774, 619, -774, -774, 744, -774, + -774, 336, -774, 39, 744, -774, -774, 757, 763, 779, + 327, -774, -774, -774, -774, -774, -774, 781, 622, 633, + 634, 39, -774, 650, -774, -774, -774, -774, -774 }; const unsigned short int @@ -3860,147 +3860,147 @@ namespace isc { namespace dhcp { 20, 22, 24, 26, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 45, 38, 34, 33, 30, 31, 32, 37, 3, - 35, 36, 58, 5, 70, 7, 107, 9, 241, 11, - 386, 13, 411, 15, 441, 17, 311, 19, 319, 21, - 356, 23, 206, 25, 538, 27, 595, 29, 47, 41, - 0, 0, 0, 0, 0, 0, 443, 0, 321, 358, + 35, 36, 58, 5, 70, 7, 108, 9, 242, 11, + 387, 13, 412, 15, 442, 17, 312, 19, 320, 21, + 357, 23, 207, 25, 539, 27, 596, 29, 47, 41, + 0, 0, 0, 0, 0, 0, 444, 0, 322, 359, 0, 0, 0, 49, 0, 48, 0, 0, 42, 68, - 593, 587, 589, 591, 0, 67, 0, 60, 62, 64, - 65, 66, 63, 105, 119, 121, 123, 0, 0, 0, - 0, 0, 233, 309, 348, 399, 401, 282, 179, 196, - 187, 478, 198, 217, 499, 0, 523, 536, 99, 0, - 72, 74, 75, 76, 77, 78, 81, 82, 83, 84, - 85, 87, 86, 91, 92, 79, 80, 89, 90, 97, - 98, 88, 93, 94, 95, 96, 116, 0, 115, 0, - 109, 111, 112, 113, 114, 378, 403, 265, 267, 269, - 0, 0, 275, 273, 271, 433, 472, 264, 245, 246, - 247, 248, 0, 243, 252, 253, 254, 257, 258, 260, - 255, 256, 249, 250, 262, 263, 251, 259, 261, 397, - 396, 392, 393, 391, 0, 388, 390, 394, 395, 426, - 0, 429, 0, 0, 425, 419, 420, 418, 423, 424, - 0, 413, 415, 416, 421, 422, 417, 470, 458, 460, - 462, 464, 466, 468, 457, 454, 455, 456, 0, 444, - 445, 449, 450, 447, 451, 452, 453, 448, 0, 338, - 164, 0, 342, 340, 345, 0, 334, 335, 0, 322, - 323, 325, 337, 326, 327, 328, 344, 329, 330, 331, - 332, 333, 372, 0, 0, 370, 371, 374, 375, 0, - 359, 360, 362, 363, 364, 365, 366, 367, 368, 369, - 213, 215, 210, 0, 208, 211, 212, 0, 560, 562, - 0, 565, 0, 0, 569, 573, 0, 0, 0, 578, - 585, 558, 556, 557, 0, 540, 542, 543, 544, 545, + 594, 588, 590, 592, 0, 67, 0, 60, 62, 64, + 65, 66, 63, 106, 120, 122, 124, 0, 0, 0, + 0, 0, 234, 310, 349, 400, 402, 283, 180, 197, + 188, 479, 434, 199, 218, 500, 0, 524, 537, 100, + 0, 72, 74, 75, 76, 77, 78, 81, 82, 83, + 84, 85, 87, 86, 91, 92, 79, 80, 89, 90, + 97, 98, 99, 88, 93, 94, 95, 96, 117, 0, + 116, 0, 110, 112, 113, 114, 115, 379, 404, 266, + 268, 270, 0, 0, 276, 274, 272, 473, 265, 246, + 247, 248, 249, 0, 244, 253, 254, 255, 258, 259, + 261, 256, 257, 250, 251, 263, 264, 252, 260, 262, + 398, 397, 393, 394, 392, 0, 389, 391, 395, 396, + 427, 0, 430, 0, 0, 426, 420, 421, 419, 424, + 425, 0, 414, 416, 417, 422, 423, 418, 471, 459, + 461, 463, 465, 467, 469, 458, 455, 456, 457, 0, + 445, 446, 450, 451, 448, 452, 453, 454, 449, 0, + 339, 165, 0, 343, 341, 346, 0, 335, 336, 0, + 323, 324, 326, 338, 327, 328, 329, 345, 330, 331, + 332, 333, 334, 373, 0, 0, 371, 372, 375, 376, + 0, 360, 361, 363, 364, 365, 366, 367, 368, 369, + 370, 214, 216, 211, 0, 209, 212, 213, 0, 561, + 563, 0, 566, 0, 0, 570, 574, 0, 0, 0, + 579, 586, 559, 557, 558, 0, 541, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 600, 0, 597, 599, 46, 0, 0, 39, 0, 0, - 0, 0, 0, 0, 57, 0, 59, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 556, 601, 0, 598, 600, 46, 0, 0, 39, 0, + 0, 0, 0, 0, 0, 57, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 71, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 242, 0, 0, 387, 0, 0, 0, 0, 0, - 0, 412, 0, 0, 0, 0, 0, 0, 0, 442, - 0, 312, 0, 0, 0, 0, 0, 0, 0, 320, - 0, 0, 0, 0, 357, 0, 0, 0, 0, 207, + 0, 0, 0, 0, 0, 71, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 539, 0, 0, 596, 50, - 43, 0, 0, 0, 0, 0, 0, 61, 0, 0, - 0, 0, 100, 101, 102, 103, 104, 0, 0, 0, + 0, 0, 243, 0, 0, 388, 0, 0, 0, 0, + 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, + 443, 0, 313, 0, 0, 0, 0, 0, 0, 0, + 321, 0, 0, 0, 0, 358, 0, 0, 0, 0, + 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 540, 0, 0, 597, + 50, 43, 0, 0, 0, 0, 0, 0, 61, 0, + 0, 0, 0, 101, 102, 103, 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 522, 0, 0, 73, 0, 118, 110, 0, 0, 0, - 0, 0, 280, 281, 0, 0, 0, 0, 0, 244, - 0, 389, 0, 428, 0, 431, 432, 414, 0, 0, - 0, 0, 0, 0, 0, 446, 0, 0, 336, 0, - 0, 0, 347, 324, 0, 376, 377, 361, 0, 0, - 209, 559, 0, 0, 564, 0, 567, 568, 0, 0, - 575, 576, 577, 0, 0, 541, 0, 598, 0, 0, - 0, 588, 590, 592, 0, 0, 0, 125, 235, 313, - 350, 40, 400, 402, 284, 0, 47, 0, 0, 200, - 0, 0, 0, 0, 51, 117, 380, 405, 266, 268, - 270, 277, 278, 279, 276, 274, 272, 435, 0, 398, - 427, 430, 471, 459, 461, 463, 465, 467, 469, 339, - 165, 343, 341, 346, 373, 214, 216, 561, 563, 566, - 571, 572, 570, 574, 580, 581, 582, 583, 584, 579, - 586, 0, 44, 0, 0, 0, 151, 157, 159, 161, - 0, 0, 0, 0, 0, 174, 0, 0, 177, 0, - 0, 0, 150, 0, 131, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 145, 146, 147, 148, 143, - 144, 149, 0, 129, 0, 126, 127, 239, 0, 236, - 237, 317, 0, 314, 315, 354, 0, 351, 352, 288, - 0, 285, 286, 185, 186, 0, 181, 183, 184, 0, - 194, 195, 191, 0, 189, 192, 193, 482, 0, 480, - 204, 0, 201, 202, 0, 0, 0, 0, 0, 0, - 0, 219, 221, 222, 223, 224, 225, 226, 512, 518, - 0, 0, 0, 511, 508, 509, 510, 0, 501, 503, - 506, 504, 505, 507, 532, 534, 531, 529, 530, 0, - 525, 527, 528, 0, 53, 384, 0, 381, 382, 409, - 0, 406, 407, 439, 0, 436, 437, 476, 475, 0, - 474, 604, 0, 602, 69, 594, 106, 0, 0, 0, + 0, 0, 523, 0, 0, 73, 0, 119, 111, 0, + 0, 0, 0, 0, 281, 282, 0, 0, 0, 0, + 245, 0, 390, 0, 429, 0, 432, 433, 415, 0, + 0, 0, 0, 0, 0, 0, 447, 0, 0, 337, + 0, 0, 0, 348, 325, 0, 377, 378, 362, 0, + 0, 210, 560, 0, 0, 565, 0, 568, 569, 0, + 0, 576, 577, 578, 0, 0, 542, 0, 599, 0, + 0, 0, 589, 591, 593, 0, 0, 0, 126, 236, + 314, 351, 40, 401, 403, 285, 0, 47, 0, 0, + 436, 201, 0, 0, 0, 0, 51, 118, 381, 406, + 267, 269, 271, 278, 279, 280, 277, 275, 273, 0, + 399, 428, 431, 472, 460, 462, 464, 466, 468, 470, + 340, 166, 344, 342, 347, 374, 215, 217, 562, 564, + 567, 572, 573, 571, 575, 581, 582, 583, 584, 585, + 580, 587, 0, 44, 0, 0, 0, 152, 158, 160, + 162, 0, 0, 0, 0, 0, 175, 0, 0, 178, + 0, 0, 0, 151, 0, 132, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 146, 147, 148, 149, + 144, 145, 150, 0, 130, 0, 127, 128, 240, 0, + 237, 238, 318, 0, 315, 316, 355, 0, 352, 353, + 289, 0, 286, 287, 186, 187, 0, 182, 184, 185, + 0, 195, 196, 192, 0, 190, 193, 194, 483, 0, + 481, 440, 0, 437, 438, 205, 0, 202, 203, 0, + 0, 0, 0, 0, 0, 0, 220, 222, 223, 224, + 225, 226, 227, 513, 519, 0, 0, 0, 512, 509, + 510, 511, 0, 502, 504, 507, 505, 506, 508, 533, + 535, 532, 530, 531, 0, 526, 528, 529, 0, 53, + 385, 0, 382, 383, 410, 0, 407, 408, 477, 476, + 0, 475, 605, 0, 603, 69, 595, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 120, 122, 0, 124, 0, 0, - 234, 0, 321, 310, 0, 358, 349, 0, 0, 283, - 0, 0, 180, 197, 0, 188, 484, 0, 479, 0, - 199, 0, 0, 0, 0, 0, 0, 0, 0, 218, - 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, - 524, 537, 55, 0, 54, 0, 379, 0, 0, 404, - 0, 443, 434, 0, 0, 473, 0, 0, 601, 0, - 0, 0, 0, 163, 166, 167, 168, 169, 0, 176, - 170, 0, 171, 172, 173, 132, 0, 128, 0, 238, - 0, 316, 0, 353, 308, 303, 305, 296, 297, 292, - 293, 294, 295, 301, 302, 300, 304, 0, 290, 298, - 306, 307, 299, 287, 182, 190, 496, 0, 494, 495, - 491, 492, 493, 0, 485, 486, 488, 489, 490, 481, - 0, 203, 227, 228, 229, 230, 231, 232, 220, 0, - 0, 517, 520, 521, 502, 0, 0, 526, 52, 0, - 0, 383, 0, 408, 0, 438, 0, 618, 0, 616, - 614, 608, 612, 613, 0, 606, 610, 611, 609, 603, - 153, 154, 155, 156, 152, 158, 160, 162, 175, 178, - 130, 240, 318, 355, 0, 289, 0, 0, 483, 0, - 205, 514, 515, 516, 513, 519, 533, 535, 56, 385, - 410, 440, 477, 0, 0, 0, 0, 605, 291, 0, - 498, 487, 0, 615, 0, 607, 497, 0, 617, 622, - 0, 620, 0, 0, 619, 630, 0, 0, 0, 0, - 624, 626, 627, 628, 629, 621, 0, 0, 0, 0, - 0, 623, 0, 632, 633, 634, 625, 631 + 0, 0, 0, 0, 0, 121, 123, 0, 125, 0, + 0, 235, 0, 322, 311, 0, 359, 350, 0, 0, + 284, 0, 0, 181, 198, 0, 189, 485, 0, 480, + 444, 435, 0, 0, 200, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, + 501, 0, 0, 0, 525, 538, 55, 0, 54, 0, + 380, 0, 0, 405, 0, 0, 474, 0, 0, 602, + 0, 0, 0, 0, 164, 167, 168, 169, 170, 0, + 177, 171, 0, 172, 173, 174, 133, 0, 129, 0, + 239, 0, 317, 0, 354, 309, 304, 306, 297, 298, + 293, 294, 295, 296, 302, 303, 301, 305, 0, 291, + 299, 307, 308, 300, 288, 183, 191, 497, 0, 495, + 496, 492, 493, 494, 0, 486, 487, 489, 490, 491, + 482, 0, 439, 0, 204, 228, 229, 230, 231, 232, + 233, 221, 0, 0, 518, 521, 522, 503, 0, 0, + 527, 52, 0, 0, 384, 0, 409, 0, 619, 0, + 617, 615, 609, 613, 614, 0, 607, 611, 612, 610, + 604, 154, 155, 156, 157, 153, 159, 161, 163, 176, + 179, 131, 241, 319, 356, 0, 290, 0, 0, 484, + 0, 441, 206, 515, 516, 517, 514, 520, 534, 536, + 56, 386, 411, 478, 0, 0, 0, 0, 606, 292, + 0, 499, 488, 0, 616, 0, 608, 498, 0, 618, + 623, 0, 621, 0, 0, 620, 631, 0, 0, 0, + 0, 625, 627, 628, 629, 630, 622, 0, 0, 0, + 0, 0, 624, 0, 633, 634, 635, 626, 632 }; const short int Dhcp6Parser::yypgoto_[] = { - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, 6, -783, 187, -783, - -783, -783, -783, -783, -783, 129, -783, -376, -783, -783, - -783, -70, -783, -783, -783, 408, -783, -783, -783, -783, - 207, 395, -66, -56, -55, -54, -783, -783, -783, -783, - -783, 203, 419, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -9, -783, -541, -3, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -34, -783, - -559, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -19, -554, -783, -783, - -783, -783, -20, -783, -783, -783, -783, -783, -783, -783, - -783, -23, -783, -783, -783, -16, 371, -783, -783, -783, - -783, -783, -783, -783, -28, -783, -783, -783, -783, -783, - -783, -782, -783, -783, -783, 5, -783, -783, -783, 9, - 415, -783, -783, -778, -783, -775, -783, -32, -783, -21, - -783, -774, -783, -783, -783, -773, -783, -783, -783, -783, - 4, -783, -783, -157, 731, -783, -783, -783, -783, -783, - 15, -783, -783, -783, 19, -783, 393, -783, -65, -783, - -783, -783, -783, -783, -58, -783, -783, -783, -783, -783, - 12, -783, -783, -783, 23, -783, -783, -783, 20, -783, - 391, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -15, -783, -783, -783, -14, 434, -783, -783, - -44, -783, -6, -783, -783, -783, -783, -783, -12, -783, - -783, -783, -13, 424, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -17, -783, -783, -783, -11, - -783, 421, 246, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -772, -783, -783, -783, - -783, -783, -783, -783, 26, -783, -783, -783, -133, -783, - -783, -783, -783, -783, -783, -783, 13, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, 8, - -783, -783, -783, -783, -783, -783, -783, -783, 266, 400, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, - -783, -783, -783, 292, 394, -783, -783, -783, -4, -783, - -783, -141, -783, -783, -783, -783, -783, -783, -155, -783, - -783, -174, -783, -783, -783, -783, -783 + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, 66, -774, 178, -774, + -774, -774, -774, -774, -774, 92, -774, -400, -774, -774, + -774, -70, -774, -774, -774, 446, -774, -774, -774, -774, + 251, 414, -66, -44, -43, -8, -774, -774, -774, -774, + -774, 244, 424, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, 14, -774, -535, 20, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -54, -774, + -561, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, 3, -555, -774, -774, + -774, -774, 1, -774, -774, -774, -774, -774, -774, -774, + -774, -3, -774, -774, -774, -6, 379, -774, -774, -774, + -774, -774, -774, -774, -4, -774, -774, -774, -774, -774, + -774, -773, -774, -774, -774, 18, -774, -774, -774, 24, + 425, -774, -774, -771, -774, -764, -774, -5, -774, -1, + -774, -763, -774, -774, -774, -762, -774, -774, -774, -774, + 16, -774, -774, -150, 743, -774, -774, -774, -774, -774, + 26, -774, -774, -774, 30, -774, 403, -774, -60, -774, + -774, -774, -774, -774, -38, -774, -774, -774, -774, -774, + -42, -774, -774, -774, 28, -774, -774, -774, 32, -774, + 399, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -11, -774, -774, -774, -10, 439, -774, -774, + -58, -774, -20, -774, -774, -774, -774, -774, -13, -774, + -774, -774, -2, 431, -774, -774, -774, -774, -774, -774, + -774, -46, -774, -774, -774, 23, -774, -774, -774, 33, + -774, 428, 247, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -761, -774, -774, -774, + -774, -774, -774, -774, 34, -774, -774, -774, -126, -774, + -774, -774, -774, -774, -774, -774, 17, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, 12, + -774, -774, -774, -774, -774, -774, -774, -774, 272, 404, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, 297, 402, -774, -774, -774, 4, -774, + -774, -136, -774, -774, -774, -774, -774, -774, -151, -774, + -774, -167, -774, -774, -774, -774, -774 }; const short int @@ -4008,249 +4008,245 @@ namespace isc { namespace dhcp { { -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 83, 39, 40, 69, - 562, 87, 88, 41, 68, 84, 85, 575, 744, 833, - 834, 642, 43, 70, 96, 97, 98, 339, 45, 71, - 129, 130, 131, 132, 133, 134, 135, 136, 347, 47, - 72, 159, 160, 161, 374, 162, 137, 348, 138, 349, - 139, 350, 664, 665, 666, 786, 643, 644, 645, 767, - 954, 646, 768, 647, 769, 648, 770, 649, 650, 413, - 651, 652, 653, 654, 655, 656, 657, 658, 659, 776, - 660, 661, 779, 140, 362, 685, 686, 687, 688, 141, - 364, 693, 694, 695, 696, 142, 363, 143, 366, 701, - 702, 703, 809, 63, 80, 293, 294, 295, 426, 296, - 427, 144, 367, 710, 711, 712, 713, 714, 715, 716, - 717, 145, 356, 668, 669, 670, 789, 49, 73, 182, - 183, 184, 380, 185, 381, 186, 382, 187, 387, 188, - 386, 189, 385, 584, 190, 191, 146, 361, 680, 681, - 682, 798, 887, 888, 147, 357, 57, 77, 672, 673, - 674, 792, 59, 78, 258, 259, 260, 261, 262, 263, - 264, 412, 265, 416, 266, 415, 267, 268, 417, 269, - 148, 358, 676, 677, 678, 795, 61, 79, 279, 280, - 281, 282, 283, 421, 284, 285, 286, 287, 193, 378, - 746, 747, 748, 835, 51, 74, 204, 205, 206, 392, - 149, 359, 150, 360, 196, 379, 750, 751, 752, 838, - 53, 75, 220, 221, 222, 395, 223, 224, 397, 225, - 226, 197, 388, 754, 755, 756, 841, 55, 76, 238, - 239, 240, 241, 403, 242, 404, 243, 405, 244, 406, - 245, 407, 246, 408, 247, 402, 198, 389, 759, 760, - 844, 151, 365, 698, 699, 806, 903, 904, 905, 906, - 907, 966, 908, 152, 368, 727, 728, 729, 820, 974, - 730, 731, 821, 732, 733, 153, 154, 370, 739, 740, - 741, 827, 742, 828, 155, 371, 65, 81, 314, 315, - 316, 317, 431, 318, 432, 319, 320, 434, 321, 322, - 323, 437, 612, 324, 438, 325, 326, 327, 328, 442, - 619, 329, 443, 99, 341, 100, 342, 101, 343, 102, - 340, 67, 82, 331, 332, 333, 446, 762, 763, 846, - 944, 945, 946, 947, 985, 948, 983, 1000, 1001, 1002, - 1009, 1010, 1011, 1016, 1012, 1013, 1014 + 563, 87, 88, 41, 68, 84, 85, 577, 749, 837, + 838, 643, 43, 70, 96, 97, 98, 340, 45, 71, + 130, 131, 132, 133, 134, 135, 136, 137, 348, 47, + 72, 161, 162, 163, 376, 164, 138, 349, 139, 350, + 140, 351, 665, 666, 667, 787, 644, 645, 646, 768, + 955, 647, 769, 648, 770, 649, 771, 650, 651, 414, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 777, + 661, 662, 780, 141, 363, 686, 687, 688, 689, 142, + 365, 694, 695, 696, 697, 143, 364, 144, 368, 706, + 707, 708, 813, 63, 80, 294, 295, 296, 427, 297, + 428, 145, 369, 715, 716, 717, 718, 719, 720, 721, + 722, 146, 357, 669, 670, 671, 790, 49, 73, 183, + 184, 185, 382, 186, 383, 187, 384, 188, 389, 189, + 388, 190, 387, 586, 191, 192, 147, 362, 681, 682, + 683, 799, 888, 889, 148, 358, 57, 77, 673, 674, + 675, 793, 59, 78, 259, 260, 261, 262, 263, 264, + 265, 413, 266, 417, 267, 416, 268, 269, 418, 270, + 149, 359, 677, 678, 679, 796, 61, 79, 280, 281, + 282, 283, 284, 422, 285, 286, 287, 288, 194, 380, + 751, 752, 753, 839, 51, 74, 205, 206, 207, 393, + 150, 360, 151, 361, 197, 381, 755, 756, 757, 842, + 53, 75, 221, 222, 223, 396, 224, 225, 398, 226, + 227, 152, 367, 702, 703, 704, 810, 55, 76, 239, + 240, 241, 242, 404, 243, 405, 244, 406, 245, 407, + 246, 408, 247, 409, 248, 403, 199, 390, 760, 761, + 845, 153, 366, 699, 700, 807, 904, 905, 906, 907, + 908, 967, 909, 154, 370, 732, 733, 734, 824, 976, + 735, 736, 825, 737, 738, 155, 156, 372, 744, 745, + 746, 831, 747, 832, 157, 373, 65, 81, 315, 316, + 317, 318, 432, 319, 433, 320, 321, 435, 322, 323, + 324, 438, 613, 325, 439, 326, 327, 328, 329, 443, + 620, 330, 444, 99, 342, 100, 343, 101, 344, 102, + 341, 67, 82, 332, 333, 334, 447, 763, 764, 847, + 945, 946, 947, 948, 986, 949, 984, 1001, 1002, 1003, + 1010, 1011, 1012, 1017, 1013, 1014, 1015 }; const unsigned short int Dhcp6Parser::yytable_[] = { - 95, 128, 158, 177, 200, 214, 234, 178, 256, 275, - 292, 311, 724, 692, 277, 662, 880, 179, 180, 181, - 881, 278, 38, 882, 885, 886, 892, 89, 163, 194, - 207, 218, 236, 683, 270, 288, 345, 312, 30, 156, - 157, 346, 201, 215, 257, 276, 31, 42, 32, 86, - 33, 290, 291, 202, 216, 290, 291, 228, 614, 615, - 616, 617, 114, 250, 757, 44, 164, 195, 208, 219, - 237, 372, 271, 289, 103, 313, 373, 104, 105, 106, - 115, 116, 249, 610, 611, 192, 203, 217, 235, 115, - 116, 618, 46, 801, 115, 116, 802, 896, 897, 48, - 107, 108, 109, 110, 111, 112, 113, 114, 50, 684, - 250, 114, 251, 252, 52, 54, 253, 254, 255, 585, - 94, 804, 199, 56, 805, 115, 116, 115, 116, 115, - 116, 58, 592, 593, 594, 60, 117, 118, 119, 120, - 121, 376, 390, 734, 735, 173, 377, 391, 174, 718, - 393, 400, 90, 62, 122, 394, 401, 123, 631, 64, - 66, 91, 92, 93, 124, 704, 705, 706, 707, 708, - 709, 330, 125, 126, 683, 690, 127, 691, 94, 94, - 1005, 334, 880, 1006, 1007, 1008, 881, 113, 94, 882, - 885, 886, 892, 94, 115, 116, 950, 951, 952, 953, - 335, 626, 34, 35, 36, 37, 627, 628, 629, 630, - 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, - 641, 336, 428, 337, 94, 444, 94, 429, 94, 250, - 445, 250, 272, 251, 252, 273, 274, 719, 720, 721, - 722, 447, 372, 338, 409, 866, 448, 764, 115, 116, - 692, 107, 108, 109, 110, 447, 376, 783, 114, 344, - 765, 766, 784, 351, 783, 410, 724, 818, 165, 785, - 166, 114, 819, 352, 353, 95, 115, 116, 167, 168, - 169, 170, 171, 172, 209, 210, 211, 212, 213, 115, - 116, 354, 173, 94, 825, 174, 175, 807, 411, 826, - 808, 250, 128, 176, 829, 173, 158, 444, 174, 830, - 783, 390, 831, 355, 369, 960, 961, 964, 115, 116, - 177, 428, 965, 200, 178, 375, 970, 383, 393, 420, - 214, 384, 163, 979, 179, 180, 181, 396, 400, 986, - 234, 449, 450, 980, 987, 94, 194, 94, 1020, 207, - 256, 847, 419, 1021, 848, 275, 218, 398, 399, 1003, - 277, 201, 1004, 581, 582, 583, 236, 278, 215, 414, - 164, 418, 202, 422, 311, 94, 270, 423, 424, 216, - 425, 288, 430, 433, 195, 435, 257, 208, 94, 436, - 451, 276, 439, 937, 219, 938, 939, 971, 972, 973, - 312, 440, 192, 441, 237, 203, 452, 462, 453, 454, - 455, 456, 217, 458, 271, 459, 460, 94, 461, 289, - 463, 467, 235, 107, 108, 109, 110, 464, 112, 465, - 114, 250, 468, 466, 469, 470, 471, 472, 313, 480, - 473, 474, 475, 476, 477, 478, 479, 114, 115, 116, - 481, 168, 169, 482, 171, 172, 484, 487, 492, 488, - 551, 552, 553, 485, 173, 115, 116, 174, 489, 490, - 491, 494, 495, 496, 497, 176, 493, 498, 500, 128, - 227, 502, 503, 504, 158, 508, 228, 229, 230, 231, - 232, 233, 505, 506, 509, 510, 511, 512, 513, 514, - 516, 723, 736, 311, 517, 518, 519, 520, 521, 524, - 163, 522, 528, 525, 526, 529, 115, 116, 532, 531, - 533, 534, 535, 536, 537, 538, 539, 725, 737, 312, - 540, 543, 541, 544, 546, 606, 542, 548, 549, 550, - 613, 554, 555, 556, 557, 558, 559, 94, 164, 560, - 32, 563, 564, 565, 622, 566, 567, 568, 569, 578, - 788, 570, 571, 572, 94, 726, 738, 313, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 573, 574, 576, 577, - 587, 791, 621, 588, 579, 580, 586, 663, 589, 590, - 667, 591, 595, 671, 675, 94, 679, 596, 597, 598, - 599, 600, 601, 602, 603, 697, 700, 745, 749, 753, - 761, 771, 604, 605, 772, 773, 607, 608, 774, 609, - 775, 620, 777, 778, 780, 781, 782, 832, 854, 787, - 790, 793, 794, 796, 797, 800, 799, 561, 811, 803, - 810, 812, 813, 814, 815, 816, 817, 822, 823, 824, - 837, 853, 836, 840, 839, 842, 843, 855, 849, 845, - 850, 851, 852, 856, 858, 857, 859, 860, 861, 919, - 862, 920, 925, 926, 929, 689, 928, 936, 967, 863, - 962, 969, 864, 963, 912, 968, 984, 913, 914, 981, - 989, 915, 992, 994, 999, 997, 1017, 1018, 1019, 177, - 916, 917, 256, 178, 921, 275, 922, 923, 874, 955, - 277, 956, 875, 179, 180, 181, 898, 278, 957, 292, - 958, 959, 876, 877, 878, 194, 975, 976, 270, 977, - 1022, 288, 978, 457, 890, 723, 623, 625, 257, 736, - 982, 276, 901, 993, 879, 200, 883, 483, 214, 990, - 1024, 234, 899, 996, 998, 1023, 940, 884, 1025, 867, - 865, 725, 894, 195, 895, 737, 271, 1027, 911, 289, - 918, 207, 891, 910, 218, 486, 869, 236, 868, 530, - 902, 192, 942, 201, 893, 499, 215, 988, 248, 871, - 889, 870, 941, 523, 202, 872, 527, 216, 900, 726, - 873, 930, 931, 738, 507, 932, 935, 501, 933, 208, - 934, 515, 219, 909, 758, 237, 991, 927, 924, 743, - 943, 547, 624, 949, 545, 995, 1026, 203, 1015, 0, - 217, 0, 0, 235, 0, 0, 0, 0, 0, 0, + 95, 129, 160, 178, 201, 215, 235, 179, 257, 276, + 293, 312, 729, 693, 165, 195, 208, 219, 237, 278, + 271, 289, 663, 313, 258, 277, 881, 198, 882, 180, + 181, 193, 204, 218, 236, 883, 886, 887, 893, 89, + 31, 279, 32, 802, 33, 30, 803, 291, 292, 42, + 115, 116, 166, 196, 209, 220, 238, 346, 272, 290, + 251, 314, 347, 103, 684, 182, 104, 105, 106, 202, + 216, 158, 159, 203, 217, 374, 229, 115, 116, 86, + 375, 44, 38, 758, 615, 616, 617, 618, 46, 107, + 108, 109, 110, 111, 112, 113, 114, 587, 805, 739, + 740, 806, 250, 709, 710, 711, 712, 713, 714, 593, + 594, 595, 48, 378, 115, 116, 94, 619, 379, 291, + 292, 115, 116, 114, 251, 117, 118, 119, 120, 121, + 251, 50, 252, 253, 122, 52, 254, 255, 256, 391, + 685, 115, 116, 123, 392, 394, 124, 115, 116, 94, + 395, 401, 938, 125, 939, 940, 402, 808, 897, 898, + 809, 126, 127, 429, 90, 128, 445, 114, 430, 723, + 113, 446, 54, 91, 92, 93, 94, 1006, 632, 448, + 1007, 1008, 1009, 374, 449, 115, 116, 331, 765, 56, + 94, 58, 881, 60, 882, 62, 34, 35, 36, 37, + 228, 883, 886, 887, 893, 64, 229, 230, 231, 232, + 233, 234, 448, 94, 115, 116, 627, 766, 611, 612, + 94, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 378, 114, 784, 66, + 94, 767, 784, 785, 251, 336, 94, 786, 200, 822, + 693, 335, 867, 337, 823, 115, 116, 724, 725, 726, + 727, 829, 107, 108, 109, 110, 830, 833, 729, 114, + 445, 175, 834, 784, 176, 835, 95, 338, 961, 167, + 391, 168, 114, 848, 94, 962, 849, 115, 116, 169, + 170, 171, 172, 173, 174, 210, 211, 212, 213, 214, + 115, 116, 339, 175, 129, 965, 176, 122, 160, 345, + 966, 352, 429, 94, 177, 353, 175, 972, 394, 176, + 165, 178, 401, 981, 201, 179, 354, 982, 355, 987, + 1021, 215, 356, 195, 988, 1022, 208, 684, 691, 1004, + 692, 235, 1005, 219, 371, 198, 377, 180, 181, 193, + 411, 257, 204, 237, 94, 385, 276, 386, 166, 218, + 94, 397, 410, 271, 399, 400, 278, 258, 289, 236, + 412, 196, 277, 415, 209, 312, 951, 952, 953, 954, + 419, 220, 420, 182, 423, 421, 94, 313, 279, 202, + 424, 238, 425, 203, 426, 452, 216, 431, 434, 94, + 217, 272, 450, 451, 436, 437, 290, 107, 108, 109, + 110, 440, 112, 441, 114, 251, 583, 584, 585, 973, + 974, 975, 442, 453, 454, 314, 251, 273, 252, 253, + 274, 275, 115, 116, 455, 170, 171, 456, 173, 174, + 457, 459, 460, 115, 116, 461, 462, 463, 175, 464, + 465, 176, 466, 467, 468, 469, 470, 471, 472, 177, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 473, 474, 475, 476, 477, 478, + 129, 479, 480, 481, 483, 160, 484, 482, 486, 489, + 490, 491, 492, 487, 493, 494, 495, 165, 496, 497, + 498, 499, 501, 728, 741, 312, 115, 116, 503, 505, + 504, 506, 507, 509, 510, 730, 742, 313, 511, 512, + 513, 552, 553, 554, 514, 515, 517, 518, 519, 520, + 521, 94, 522, 525, 529, 166, 523, 526, 530, 527, + 533, 532, 94, 534, 536, 535, 539, 537, 540, 538, + 544, 545, 541, 731, 743, 314, 542, 547, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 543, 549, 550, 551, 564, 555, 556, 557, + 558, 559, 560, 561, 580, 565, 32, 566, 567, 568, + 569, 570, 571, 581, 576, 572, 607, 573, 574, 575, + 578, 579, 622, 772, 582, 94, 588, 589, 590, 591, + 592, 614, 664, 668, 672, 623, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, + 621, 676, 680, 698, 701, 705, 750, 754, 762, 773, + 774, 775, 776, 778, 779, 781, 782, 783, 789, 562, + 788, 792, 791, 794, 795, 797, 798, 801, 800, 690, + 812, 804, 811, 815, 814, 816, 817, 818, 819, 820, + 821, 826, 827, 828, 836, 841, 840, 843, 844, 854, + 850, 846, 851, 852, 853, 859, 862, 922, 855, 856, + 923, 928, 929, 937, 858, 857, 931, 860, 932, 861, + 863, 963, 964, 864, 968, 969, 956, 865, 970, 971, + 915, 916, 917, 918, 919, 985, 920, 924, 925, 926, + 178, 957, 958, 257, 179, 959, 276, 960, 990, 875, + 993, 995, 195, 876, 977, 271, 278, 899, 289, 258, + 235, 891, 277, 293, 198, 880, 180, 181, 193, 902, + 998, 1000, 237, 900, 978, 877, 878, 890, 279, 728, + 994, 1018, 979, 741, 980, 901, 991, 1019, 236, 201, + 196, 730, 215, 272, 983, 742, 290, 941, 997, 892, + 999, 208, 182, 1020, 219, 1023, 1024, 903, 485, 943, + 238, 879, 458, 942, 884, 1025, 1026, 204, 885, 626, + 218, 624, 488, 868, 866, 895, 896, 913, 531, 731, + 870, 1028, 914, 743, 869, 989, 500, 894, 921, 209, + 249, 872, 220, 871, 524, 528, 874, 944, 873, 933, + 934, 936, 508, 502, 202, 912, 759, 216, 203, 516, + 935, 217, 910, 911, 992, 930, 927, 748, 625, 546, + 548, 996, 950, 1016, 1027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 874, 0, 0, 0, 875, 898, - 0, 0, 0, 0, 0, 0, 0, 0, 876, 877, - 878, 0, 0, 0, 0, 0, 940, 0, 0, 0, - 890, 0, 0, 0, 0, 901, 0, 0, 0, 0, - 879, 0, 883, 0, 0, 899, 0, 0, 0, 0, - 0, 0, 942, 884, 0, 0, 0, 0, 0, 0, - 0, 0, 941, 0, 0, 0, 0, 0, 891, 0, - 0, 0, 0, 902, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 889, 0, 0, 0, - 943, 900 + 0, 0, 0, 0, 0, 875, 0, 0, 0, 876, + 899, 0, 0, 0, 0, 0, 0, 891, 0, 0, + 0, 880, 902, 0, 0, 0, 900, 941, 0, 0, + 0, 877, 878, 890, 0, 0, 0, 0, 901, 943, + 0, 0, 0, 942, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 892, 0, 0, 0, 0, + 903, 0, 0, 0, 0, 0, 0, 879, 0, 0, + 884, 0, 0, 0, 885, 0, 0, 944 }; const short int Dhcp6Parser::yycheck_[] = { 70, 71, 72, 73, 74, 75, 76, 73, 78, 79, - 80, 81, 571, 567, 79, 556, 798, 73, 73, 73, - 798, 79, 16, 798, 798, 798, 798, 10, 72, 73, - 74, 75, 76, 85, 78, 79, 3, 81, 0, 12, - 13, 8, 74, 75, 78, 79, 5, 7, 7, 161, - 9, 92, 93, 74, 75, 92, 93, 83, 131, 132, - 133, 134, 44, 45, 90, 7, 72, 73, 74, 75, - 76, 3, 78, 79, 11, 81, 8, 14, 15, 16, - 62, 63, 17, 128, 129, 73, 74, 75, 76, 62, - 63, 164, 7, 3, 62, 63, 6, 79, 80, 7, - 37, 38, 39, 40, 41, 42, 43, 44, 7, 161, - 45, 44, 47, 48, 7, 7, 51, 52, 53, 495, - 161, 3, 55, 7, 6, 62, 63, 62, 63, 62, - 63, 7, 508, 509, 510, 7, 73, 74, 75, 76, - 77, 3, 3, 111, 112, 78, 8, 8, 81, 17, - 3, 3, 135, 7, 91, 8, 8, 94, 26, 7, - 7, 144, 145, 146, 101, 95, 96, 97, 98, 99, - 100, 136, 109, 110, 85, 86, 113, 88, 161, 161, - 138, 6, 964, 141, 142, 143, 964, 43, 161, 964, - 964, 964, 964, 161, 62, 63, 18, 19, 20, 21, - 3, 17, 161, 162, 163, 164, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 4, 3, 8, 161, 3, 161, 8, 161, 45, - 8, 45, 46, 47, 48, 49, 50, 105, 106, 107, - 108, 3, 3, 3, 8, 786, 8, 8, 62, 63, - 804, 37, 38, 39, 40, 3, 3, 3, 44, 4, - 8, 8, 8, 4, 3, 3, 825, 3, 54, 8, - 56, 44, 8, 4, 4, 345, 62, 63, 64, 65, - 66, 67, 68, 69, 57, 58, 59, 60, 61, 62, - 63, 4, 78, 161, 3, 81, 82, 3, 8, 8, - 6, 45, 372, 89, 3, 78, 376, 3, 81, 8, - 3, 3, 8, 4, 4, 8, 8, 3, 62, 63, - 390, 3, 8, 393, 390, 4, 8, 4, 3, 3, - 400, 4, 376, 8, 390, 390, 390, 4, 3, 3, - 410, 335, 336, 8, 8, 161, 390, 161, 3, 393, - 420, 3, 8, 8, 6, 425, 400, 4, 4, 3, - 425, 393, 6, 70, 71, 72, 410, 425, 400, 4, - 376, 4, 393, 4, 444, 161, 420, 4, 8, 400, - 3, 425, 4, 4, 390, 4, 420, 393, 161, 4, - 161, 425, 4, 137, 400, 139, 140, 102, 103, 104, - 444, 4, 390, 4, 410, 393, 4, 162, 4, 4, - 4, 4, 400, 4, 420, 4, 4, 161, 4, 425, - 162, 4, 410, 37, 38, 39, 40, 162, 42, 162, - 44, 45, 4, 162, 4, 4, 4, 4, 444, 162, - 4, 4, 4, 4, 4, 4, 4, 44, 62, 63, - 4, 65, 66, 4, 68, 69, 4, 4, 162, 4, - 454, 455, 456, 164, 78, 62, 63, 81, 4, 4, - 4, 4, 4, 4, 4, 89, 164, 4, 4, 549, - 77, 4, 162, 4, 554, 4, 83, 84, 85, 86, - 87, 88, 162, 162, 4, 4, 4, 4, 4, 4, - 4, 571, 572, 573, 4, 162, 4, 4, 4, 4, - 554, 164, 4, 164, 164, 4, 62, 63, 4, 164, - 4, 162, 4, 162, 162, 4, 4, 571, 572, 573, - 164, 4, 164, 4, 4, 529, 164, 4, 7, 7, - 130, 7, 7, 7, 5, 5, 5, 161, 554, 5, - 7, 161, 5, 5, 548, 5, 5, 5, 5, 161, - 3, 7, 7, 7, 161, 571, 572, 573, 114, 115, + 80, 81, 573, 568, 72, 73, 74, 75, 76, 79, + 78, 79, 557, 81, 78, 79, 799, 73, 799, 73, + 73, 73, 74, 75, 76, 799, 799, 799, 799, 10, + 5, 79, 7, 3, 9, 0, 6, 92, 93, 7, + 62, 63, 72, 73, 74, 75, 76, 3, 78, 79, + 45, 81, 8, 11, 85, 73, 14, 15, 16, 74, + 75, 12, 13, 74, 75, 3, 83, 62, 63, 161, + 8, 7, 16, 90, 131, 132, 133, 134, 7, 37, + 38, 39, 40, 41, 42, 43, 44, 497, 3, 111, + 112, 6, 17, 95, 96, 97, 98, 99, 100, 509, + 510, 511, 7, 3, 62, 63, 161, 164, 8, 92, + 93, 62, 63, 44, 45, 73, 74, 75, 76, 77, + 45, 7, 47, 48, 82, 7, 51, 52, 53, 3, + 161, 62, 63, 91, 8, 3, 94, 62, 63, 161, + 8, 3, 137, 101, 139, 140, 8, 3, 79, 80, + 6, 109, 110, 3, 135, 113, 3, 44, 8, 17, + 43, 8, 7, 144, 145, 146, 161, 138, 26, 3, + 141, 142, 143, 3, 8, 62, 63, 136, 8, 7, + 161, 7, 965, 7, 965, 7, 161, 162, 163, 164, + 77, 965, 965, 965, 965, 7, 83, 84, 85, 86, + 87, 88, 3, 161, 62, 63, 17, 8, 128, 129, + 161, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 3, 44, 3, 7, + 161, 8, 3, 8, 45, 3, 161, 8, 55, 3, + 805, 6, 787, 4, 8, 62, 63, 105, 106, 107, + 108, 3, 37, 38, 39, 40, 8, 3, 829, 44, + 3, 78, 8, 3, 81, 8, 346, 8, 8, 54, + 3, 56, 44, 3, 161, 8, 6, 62, 63, 64, + 65, 66, 67, 68, 69, 57, 58, 59, 60, 61, + 62, 63, 3, 78, 374, 3, 81, 82, 378, 4, + 8, 4, 3, 161, 89, 4, 78, 8, 3, 81, + 378, 391, 3, 8, 394, 391, 4, 8, 4, 3, + 3, 401, 4, 391, 8, 8, 394, 85, 86, 3, + 88, 411, 6, 401, 4, 391, 4, 391, 391, 391, + 3, 421, 394, 411, 161, 4, 426, 4, 378, 401, + 161, 4, 8, 421, 4, 4, 426, 421, 426, 411, + 8, 391, 426, 4, 394, 445, 18, 19, 20, 21, + 4, 401, 8, 391, 4, 3, 161, 445, 426, 394, + 4, 411, 8, 394, 3, 161, 401, 4, 4, 161, + 401, 421, 336, 337, 4, 4, 426, 37, 38, 39, + 40, 4, 42, 4, 44, 45, 70, 71, 72, 102, + 103, 104, 4, 4, 4, 445, 45, 46, 47, 48, + 49, 50, 62, 63, 4, 65, 66, 4, 68, 69, + 4, 4, 4, 62, 63, 4, 4, 162, 78, 162, + 162, 81, 162, 162, 4, 4, 4, 4, 4, 89, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 4, 4, 4, 4, 4, 4, + 550, 4, 4, 4, 4, 555, 4, 162, 4, 4, + 4, 4, 4, 164, 4, 162, 164, 555, 4, 4, + 4, 4, 4, 573, 574, 575, 62, 63, 4, 4, + 162, 162, 162, 4, 4, 573, 574, 575, 4, 4, + 4, 455, 456, 457, 4, 4, 4, 4, 162, 4, + 4, 161, 4, 4, 4, 555, 164, 164, 4, 164, + 4, 164, 161, 4, 4, 162, 4, 162, 4, 162, + 4, 4, 164, 573, 574, 575, 164, 4, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 7, 5, 5, 5, - 5, 3, 5, 7, 161, 161, 161, 7, 161, 161, - 7, 161, 161, 7, 7, 161, 7, 161, 161, 161, - 161, 161, 161, 161, 161, 7, 7, 7, 7, 7, - 7, 4, 161, 161, 4, 4, 161, 161, 4, 161, - 4, 161, 4, 4, 4, 4, 4, 161, 164, 6, - 6, 6, 3, 6, 3, 3, 6, 470, 3, 6, - 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 3, 162, 6, 3, 6, 6, 3, 162, 4, 8, - 4, 4, 4, 164, 4, 162, 162, 162, 4, 4, - 162, 4, 4, 4, 3, 566, 6, 4, 4, 162, - 8, 3, 164, 8, 162, 8, 4, 162, 162, 8, - 4, 162, 4, 4, 7, 5, 4, 4, 4, 789, - 162, 162, 792, 789, 162, 795, 162, 162, 798, 161, - 795, 161, 798, 789, 789, 789, 806, 795, 161, 809, - 161, 161, 798, 798, 798, 789, 161, 161, 792, 161, - 4, 795, 161, 345, 798, 825, 549, 554, 792, 829, - 161, 795, 806, 162, 798, 835, 798, 372, 838, 164, - 162, 841, 806, 161, 161, 164, 846, 798, 162, 788, - 783, 825, 801, 789, 804, 829, 792, 161, 811, 795, - 818, 835, 798, 809, 838, 376, 791, 841, 789, 428, - 806, 789, 846, 835, 800, 390, 838, 964, 77, 794, - 798, 792, 846, 420, 835, 795, 425, 838, 806, 825, - 797, 835, 837, 829, 400, 838, 843, 393, 840, 835, - 841, 410, 838, 807, 588, 841, 969, 829, 825, 573, - 846, 447, 550, 847, 444, 986, 1020, 835, 1003, -1, - 838, -1, -1, 841, -1, -1, -1, -1, -1, -1, + 126, 127, 164, 4, 7, 7, 161, 7, 7, 7, + 5, 5, 5, 5, 161, 5, 7, 5, 5, 5, + 5, 5, 5, 161, 5, 7, 530, 7, 7, 7, + 5, 5, 5, 4, 161, 161, 161, 7, 161, 161, + 161, 130, 7, 7, 7, 549, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 7, 7, 7, 7, 7, 7, 7, 7, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 3, 471, + 6, 3, 6, 6, 3, 6, 3, 3, 6, 567, + 3, 6, 6, 3, 6, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 161, 3, 6, 6, 3, 162, + 4, 8, 4, 4, 4, 4, 4, 4, 164, 162, + 4, 4, 4, 4, 162, 164, 6, 162, 3, 162, + 162, 8, 8, 162, 4, 8, 161, 164, 3, 8, + 162, 162, 162, 162, 162, 4, 162, 162, 162, 162, + 790, 161, 161, 793, 790, 161, 796, 161, 4, 799, + 4, 4, 790, 799, 161, 793, 796, 807, 796, 793, + 810, 799, 796, 813, 790, 799, 790, 790, 790, 807, + 5, 7, 810, 807, 161, 799, 799, 799, 796, 829, + 162, 4, 161, 833, 161, 807, 164, 4, 810, 839, + 790, 829, 842, 793, 161, 833, 796, 847, 161, 799, + 161, 839, 790, 4, 842, 4, 164, 807, 374, 847, + 810, 799, 346, 847, 799, 162, 162, 839, 799, 555, + 842, 550, 378, 789, 784, 802, 805, 813, 429, 829, + 792, 161, 815, 833, 790, 965, 391, 801, 822, 839, + 77, 795, 842, 793, 421, 426, 798, 847, 796, 839, + 841, 844, 401, 394, 839, 812, 589, 842, 839, 411, + 842, 842, 808, 810, 970, 833, 829, 575, 551, 445, + 448, 987, 848, 1004, 1021, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 964, -1, -1, -1, 964, 969, - -1, -1, -1, -1, -1, -1, -1, -1, 964, 964, - 964, -1, -1, -1, -1, -1, 986, -1, -1, -1, - 964, -1, -1, -1, -1, 969, -1, -1, -1, -1, - 964, -1, 964, -1, -1, 969, -1, -1, -1, -1, - -1, -1, 986, 964, -1, -1, -1, -1, -1, -1, - -1, -1, 986, -1, -1, -1, -1, -1, 964, -1, - -1, -1, -1, 969, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 964, -1, -1, -1, - 986, 969 + -1, -1, -1, -1, -1, 965, -1, -1, -1, 965, + 970, -1, -1, -1, -1, -1, -1, 965, -1, -1, + -1, 965, 970, -1, -1, -1, 970, 987, -1, -1, + -1, 965, 965, 965, -1, -1, -1, -1, 970, 987, + -1, -1, -1, 987, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 965, -1, -1, -1, -1, + 970, -1, -1, -1, -1, -1, -1, 965, -1, -1, + 965, -1, -1, -1, 965, -1, -1, 987 }; const unsigned short int @@ -4268,97 +4264,97 @@ namespace isc { namespace dhcp { 135, 144, 145, 146, 161, 196, 199, 200, 201, 498, 500, 502, 504, 11, 14, 15, 16, 37, 38, 39, 40, 41, 42, 43, 44, 62, 63, 73, 74, 75, - 76, 77, 91, 94, 101, 109, 110, 113, 196, 205, - 206, 207, 208, 209, 210, 211, 212, 221, 223, 225, - 258, 264, 270, 272, 286, 296, 321, 329, 355, 385, - 387, 436, 448, 460, 461, 469, 12, 13, 196, 216, - 217, 218, 220, 385, 387, 54, 56, 64, 65, 66, - 67, 68, 69, 78, 81, 82, 89, 196, 207, 208, - 209, 210, 304, 305, 306, 308, 310, 312, 314, 316, - 319, 320, 355, 373, 385, 387, 389, 406, 431, 55, - 196, 312, 314, 355, 381, 382, 383, 385, 387, 57, - 58, 59, 60, 61, 196, 312, 314, 355, 385, 387, - 397, 398, 399, 401, 402, 404, 405, 77, 83, 84, - 85, 86, 87, 88, 196, 355, 385, 387, 414, 415, - 416, 417, 419, 421, 423, 425, 427, 429, 329, 17, - 45, 47, 48, 51, 52, 53, 196, 243, 339, 340, - 341, 342, 343, 344, 345, 347, 349, 351, 352, 354, - 385, 387, 46, 49, 50, 196, 243, 343, 349, 363, - 364, 365, 366, 367, 369, 370, 371, 372, 385, 387, - 92, 93, 196, 280, 281, 282, 284, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 196, 385, 387, 473, 474, 475, 476, 478, 480, - 481, 483, 484, 485, 488, 490, 491, 492, 493, 496, - 136, 508, 509, 510, 6, 3, 4, 8, 3, 202, - 505, 499, 501, 503, 4, 3, 8, 213, 222, 224, - 226, 4, 4, 4, 4, 4, 297, 330, 356, 386, - 388, 322, 259, 271, 265, 437, 273, 287, 449, 4, - 462, 470, 3, 8, 219, 4, 3, 8, 374, 390, - 307, 309, 311, 4, 4, 317, 315, 313, 407, 432, - 3, 8, 384, 3, 8, 400, 4, 403, 4, 4, - 3, 8, 430, 418, 420, 422, 424, 426, 428, 8, - 3, 8, 346, 244, 4, 350, 348, 353, 4, 8, - 3, 368, 4, 4, 8, 3, 283, 285, 3, 8, - 4, 477, 479, 4, 482, 4, 4, 486, 489, 4, - 4, 4, 494, 497, 3, 8, 511, 3, 8, 181, - 181, 161, 4, 4, 4, 4, 4, 200, 4, 4, - 4, 4, 162, 162, 162, 162, 162, 4, 4, 4, + 76, 77, 82, 91, 94, 101, 109, 110, 113, 196, + 205, 206, 207, 208, 209, 210, 211, 212, 221, 223, + 225, 258, 264, 270, 272, 286, 296, 321, 329, 355, + 385, 387, 406, 436, 448, 460, 461, 469, 12, 13, + 196, 216, 217, 218, 220, 385, 387, 54, 56, 64, + 65, 66, 67, 68, 69, 78, 81, 89, 196, 207, + 208, 209, 210, 304, 305, 306, 308, 310, 312, 314, + 316, 319, 320, 355, 373, 385, 387, 389, 406, 431, + 55, 196, 312, 314, 355, 381, 382, 383, 385, 387, + 57, 58, 59, 60, 61, 196, 312, 314, 355, 385, + 387, 397, 398, 399, 401, 402, 404, 405, 77, 83, + 84, 85, 86, 87, 88, 196, 355, 385, 387, 414, + 415, 416, 417, 419, 421, 423, 425, 427, 429, 329, + 17, 45, 47, 48, 51, 52, 53, 196, 243, 339, + 340, 341, 342, 343, 344, 345, 347, 349, 351, 352, + 354, 385, 387, 46, 49, 50, 196, 243, 343, 349, + 363, 364, 365, 366, 367, 369, 370, 371, 372, 385, + 387, 92, 93, 196, 280, 281, 282, 284, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 196, 385, 387, 473, 474, 475, 476, 478, + 480, 481, 483, 484, 485, 488, 490, 491, 492, 493, + 496, 136, 508, 509, 510, 6, 3, 4, 8, 3, + 202, 505, 499, 501, 503, 4, 3, 8, 213, 222, + 224, 226, 4, 4, 4, 4, 4, 297, 330, 356, + 386, 388, 322, 259, 271, 265, 437, 407, 273, 287, + 449, 4, 462, 470, 3, 8, 219, 4, 3, 8, + 374, 390, 307, 309, 311, 4, 4, 317, 315, 313, + 432, 3, 8, 384, 3, 8, 400, 4, 403, 4, + 4, 3, 8, 430, 418, 420, 422, 424, 426, 428, + 8, 3, 8, 346, 244, 4, 350, 348, 353, 4, + 8, 3, 368, 4, 4, 8, 3, 283, 285, 3, + 8, 4, 477, 479, 4, 482, 4, 4, 486, 489, + 4, 4, 4, 494, 497, 3, 8, 511, 3, 8, + 181, 181, 161, 4, 4, 4, 4, 4, 200, 4, + 4, 4, 4, 162, 162, 162, 162, 162, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 162, 4, 4, 206, 4, 164, 217, 4, 4, 4, - 4, 4, 162, 164, 4, 4, 4, 4, 4, 305, - 4, 382, 4, 162, 4, 162, 162, 398, 4, 4, - 4, 4, 4, 4, 4, 416, 4, 4, 162, 4, - 4, 4, 164, 341, 4, 164, 164, 365, 4, 4, - 281, 164, 4, 4, 162, 4, 162, 162, 4, 4, - 164, 164, 164, 4, 4, 474, 4, 509, 4, 7, - 7, 181, 181, 181, 7, 7, 7, 5, 5, 5, - 5, 183, 185, 161, 5, 5, 5, 5, 5, 5, - 7, 7, 7, 7, 5, 192, 5, 5, 161, 161, - 161, 70, 71, 72, 318, 192, 161, 5, 7, 161, - 161, 161, 192, 192, 192, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 181, 161, 161, 161, - 128, 129, 487, 130, 131, 132, 133, 134, 164, 495, - 161, 5, 181, 205, 508, 216, 17, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 196, 231, 232, 233, 236, 238, 240, 242, - 243, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 255, 256, 231, 7, 227, 228, 229, 7, 298, 299, - 300, 7, 333, 334, 335, 7, 357, 358, 359, 7, - 323, 324, 325, 85, 161, 260, 261, 262, 263, 190, - 86, 88, 262, 266, 267, 268, 269, 7, 438, 439, - 7, 274, 275, 276, 95, 96, 97, 98, 99, 100, - 288, 289, 290, 291, 292, 293, 294, 295, 17, 105, - 106, 107, 108, 196, 245, 385, 387, 450, 451, 452, - 455, 456, 458, 459, 111, 112, 196, 385, 387, 463, - 464, 465, 467, 473, 193, 7, 375, 376, 377, 7, - 391, 392, 393, 7, 408, 409, 410, 90, 417, 433, - 434, 7, 512, 513, 8, 8, 8, 234, 237, 239, - 241, 4, 4, 4, 4, 4, 254, 4, 4, 257, - 4, 4, 4, 3, 8, 8, 230, 6, 3, 301, - 6, 3, 336, 6, 3, 360, 6, 3, 326, 6, - 3, 3, 6, 6, 3, 6, 440, 3, 6, 277, - 6, 3, 4, 4, 4, 4, 4, 4, 3, 8, - 453, 457, 4, 4, 4, 3, 8, 466, 468, 3, - 8, 8, 161, 194, 195, 378, 6, 3, 394, 6, - 3, 411, 6, 3, 435, 8, 514, 3, 6, 4, - 4, 4, 4, 162, 164, 162, 164, 162, 4, 162, - 162, 4, 162, 162, 164, 232, 231, 229, 304, 300, - 339, 335, 363, 359, 196, 207, 208, 209, 210, 243, - 296, 308, 310, 312, 314, 316, 320, 327, 328, 355, - 385, 387, 431, 325, 261, 267, 79, 80, 196, 243, - 355, 385, 387, 441, 442, 443, 444, 445, 447, 439, - 280, 276, 162, 162, 162, 162, 162, 162, 289, 4, - 4, 162, 162, 162, 451, 4, 4, 464, 6, 3, - 381, 377, 397, 393, 414, 410, 4, 137, 139, 140, - 196, 243, 385, 387, 515, 516, 517, 518, 520, 513, - 18, 19, 20, 21, 235, 161, 161, 161, 161, 161, - 8, 8, 8, 8, 3, 8, 446, 4, 8, 3, - 8, 102, 103, 104, 454, 161, 161, 161, 161, 8, - 8, 8, 161, 521, 4, 519, 3, 8, 328, 4, - 164, 443, 4, 162, 4, 516, 161, 5, 161, 7, - 522, 523, 524, 3, 6, 138, 141, 142, 143, 525, - 526, 527, 529, 530, 531, 523, 528, 4, 4, 4, - 3, 8, 4, 164, 162, 162, 526, 161 + 4, 4, 162, 4, 4, 206, 4, 164, 217, 4, + 4, 4, 4, 4, 162, 164, 4, 4, 4, 4, + 305, 4, 382, 4, 162, 4, 162, 162, 398, 4, + 4, 4, 4, 4, 4, 4, 416, 4, 4, 162, + 4, 4, 4, 164, 341, 4, 164, 164, 365, 4, + 4, 281, 164, 4, 4, 162, 4, 162, 162, 4, + 4, 164, 164, 164, 4, 4, 474, 4, 509, 4, + 7, 7, 181, 181, 181, 7, 7, 7, 5, 5, + 5, 5, 183, 185, 161, 5, 5, 5, 5, 5, + 5, 5, 7, 7, 7, 7, 5, 192, 5, 5, + 161, 161, 161, 70, 71, 72, 318, 192, 161, 7, + 161, 161, 161, 192, 192, 192, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 181, 161, 161, + 161, 128, 129, 487, 130, 131, 132, 133, 134, 164, + 495, 161, 5, 181, 205, 508, 216, 17, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 196, 231, 232, 233, 236, 238, 240, + 242, 243, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 255, 256, 231, 7, 227, 228, 229, 7, 298, + 299, 300, 7, 333, 334, 335, 7, 357, 358, 359, + 7, 323, 324, 325, 85, 161, 260, 261, 262, 263, + 190, 86, 88, 262, 266, 267, 268, 269, 7, 438, + 439, 7, 408, 409, 410, 7, 274, 275, 276, 95, + 96, 97, 98, 99, 100, 288, 289, 290, 291, 292, + 293, 294, 295, 17, 105, 106, 107, 108, 196, 245, + 385, 387, 450, 451, 452, 455, 456, 458, 459, 111, + 112, 196, 385, 387, 463, 464, 465, 467, 473, 193, + 7, 375, 376, 377, 7, 391, 392, 393, 90, 417, + 433, 434, 7, 512, 513, 8, 8, 8, 234, 237, + 239, 241, 4, 4, 4, 4, 4, 254, 4, 4, + 257, 4, 4, 4, 3, 8, 8, 230, 6, 3, + 301, 6, 3, 336, 6, 3, 360, 6, 3, 326, + 6, 3, 3, 6, 6, 3, 6, 440, 3, 6, + 411, 6, 3, 277, 6, 3, 4, 4, 4, 4, + 4, 4, 3, 8, 453, 457, 4, 4, 4, 3, + 8, 466, 468, 3, 8, 8, 161, 194, 195, 378, + 6, 3, 394, 6, 3, 435, 8, 514, 3, 6, + 4, 4, 4, 4, 162, 164, 162, 164, 162, 4, + 162, 162, 4, 162, 162, 164, 232, 231, 229, 304, + 300, 339, 335, 363, 359, 196, 207, 208, 209, 210, + 243, 296, 308, 310, 312, 314, 316, 320, 327, 328, + 355, 385, 387, 431, 325, 261, 267, 79, 80, 196, + 243, 355, 385, 387, 441, 442, 443, 444, 445, 447, + 439, 414, 410, 280, 276, 162, 162, 162, 162, 162, + 162, 289, 4, 4, 162, 162, 162, 451, 4, 4, + 464, 6, 3, 381, 377, 397, 393, 4, 137, 139, + 140, 196, 243, 385, 387, 515, 516, 517, 518, 520, + 513, 18, 19, 20, 21, 235, 161, 161, 161, 161, + 161, 8, 8, 8, 8, 3, 8, 446, 4, 8, + 3, 8, 8, 102, 103, 104, 454, 161, 161, 161, + 161, 8, 8, 161, 521, 4, 519, 3, 8, 328, + 4, 164, 443, 4, 162, 4, 516, 161, 5, 161, + 7, 522, 523, 524, 3, 6, 138, 141, 142, 143, + 525, 526, 527, 529, 530, 531, 523, 528, 4, 4, + 4, 3, 8, 4, 164, 162, 162, 526, 161 }; const unsigned short int @@ -4374,60 +4370,60 @@ namespace isc { namespace dhcp { 204, 203, 205, 205, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 207, 208, 209, 210, 211, 213, 212, 215, 214, 216, - 216, 217, 217, 217, 217, 217, 219, 218, 220, 222, - 221, 224, 223, 226, 225, 227, 227, 228, 228, 230, - 229, 231, 231, 232, 232, 232, 232, 232, 232, 232, + 206, 207, 208, 209, 210, 211, 213, 212, 215, 214, + 216, 216, 217, 217, 217, 217, 217, 219, 218, 220, + 222, 221, 224, 223, 226, 225, 227, 227, 228, 228, + 230, 229, 231, 231, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 234, 233, 235, 235, 235, 235, 237, 236, 239, - 238, 241, 240, 242, 244, 243, 245, 246, 247, 248, - 249, 250, 251, 252, 254, 253, 255, 257, 256, 259, - 258, 260, 260, 261, 261, 262, 263, 265, 264, 266, - 266, 267, 267, 267, 268, 269, 271, 270, 273, 272, - 274, 274, 275, 275, 277, 276, 279, 278, 280, 280, - 280, 281, 281, 283, 282, 285, 284, 287, 286, 288, - 288, 289, 289, 289, 289, 289, 289, 290, 291, 292, - 293, 294, 295, 297, 296, 298, 298, 299, 299, 301, - 300, 303, 302, 304, 304, 305, 305, 305, 305, 305, + 232, 232, 234, 233, 235, 235, 235, 235, 237, 236, + 239, 238, 241, 240, 242, 244, 243, 245, 246, 247, + 248, 249, 250, 251, 252, 254, 253, 255, 257, 256, + 259, 258, 260, 260, 261, 261, 262, 263, 265, 264, + 266, 266, 267, 267, 267, 268, 269, 271, 270, 273, + 272, 274, 274, 275, 275, 277, 276, 279, 278, 280, + 280, 280, 281, 281, 283, 282, 285, 284, 287, 286, + 288, 288, 289, 289, 289, 289, 289, 289, 290, 291, + 292, 293, 294, 295, 297, 296, 298, 298, 299, 299, + 301, 300, 303, 302, 304, 304, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 307, 306, 309, 308, 311, - 310, 313, 312, 315, 314, 317, 316, 318, 318, 318, - 319, 320, 322, 321, 323, 323, 324, 324, 326, 325, - 327, 327, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 330, - 329, 332, 331, 333, 333, 334, 334, 336, 335, 338, - 337, 339, 339, 340, 340, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 342, 343, 344, 346, 345, - 348, 347, 350, 349, 351, 353, 352, 354, 356, 355, - 357, 357, 358, 358, 360, 359, 362, 361, 363, 363, - 364, 364, 365, 365, 365, 365, 365, 365, 365, 365, - 365, 366, 368, 367, 369, 370, 371, 372, 374, 373, - 375, 375, 376, 376, 378, 377, 380, 379, 381, 381, - 382, 382, 382, 382, 382, 382, 382, 384, 383, 386, - 385, 388, 387, 390, 389, 391, 391, 392, 392, 394, - 393, 396, 395, 397, 397, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 400, 399, 401, 403, - 402, 404, 405, 407, 406, 408, 408, 409, 409, 411, - 410, 413, 412, 414, 414, 415, 415, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, 418, 417, - 420, 419, 422, 421, 424, 423, 426, 425, 428, 427, - 430, 429, 432, 431, 433, 433, 435, 434, 437, 436, - 438, 438, 440, 439, 441, 441, 442, 442, 443, 443, - 443, 443, 443, 443, 443, 444, 446, 445, 447, 449, - 448, 450, 450, 451, 451, 451, 451, 451, 451, 451, - 451, 451, 453, 452, 454, 454, 454, 455, 457, 456, - 458, 459, 460, 462, 461, 463, 463, 464, 464, 464, - 464, 464, 466, 465, 468, 467, 470, 469, 472, 471, - 473, 473, 474, 474, 474, 474, 474, 474, 474, 474, - 474, 474, 474, 474, 474, 474, 474, 474, 474, 475, - 477, 476, 479, 478, 480, 482, 481, 483, 484, 486, - 485, 487, 487, 489, 488, 490, 491, 492, 494, 493, - 495, 495, 495, 495, 495, 497, 496, 499, 498, 501, - 500, 503, 502, 505, 504, 507, 506, 508, 508, 509, - 511, 510, 512, 512, 514, 513, 515, 515, 516, 516, - 516, 516, 516, 516, 516, 517, 519, 518, 521, 520, - 522, 522, 524, 523, 525, 525, 526, 526, 526, 526, - 528, 527, 529, 530, 531 + 305, 305, 305, 305, 305, 305, 307, 306, 309, 308, + 311, 310, 313, 312, 315, 314, 317, 316, 318, 318, + 318, 319, 320, 322, 321, 323, 323, 324, 324, 326, + 325, 327, 327, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, + 330, 329, 332, 331, 333, 333, 334, 334, 336, 335, + 338, 337, 339, 339, 340, 340, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 342, 343, 344, 346, + 345, 348, 347, 350, 349, 351, 353, 352, 354, 356, + 355, 357, 357, 358, 358, 360, 359, 362, 361, 363, + 363, 364, 364, 365, 365, 365, 365, 365, 365, 365, + 365, 365, 366, 368, 367, 369, 370, 371, 372, 374, + 373, 375, 375, 376, 376, 378, 377, 380, 379, 381, + 381, 382, 382, 382, 382, 382, 382, 382, 384, 383, + 386, 385, 388, 387, 390, 389, 391, 391, 392, 392, + 394, 393, 396, 395, 397, 397, 398, 398, 398, 398, + 398, 398, 398, 398, 398, 398, 398, 400, 399, 401, + 403, 402, 404, 405, 407, 406, 408, 408, 409, 409, + 411, 410, 413, 412, 414, 414, 415, 415, 416, 416, + 416, 416, 416, 416, 416, 416, 416, 416, 416, 418, + 417, 420, 419, 422, 421, 424, 423, 426, 425, 428, + 427, 430, 429, 432, 431, 433, 433, 435, 434, 437, + 436, 438, 438, 440, 439, 441, 441, 442, 442, 443, + 443, 443, 443, 443, 443, 443, 444, 446, 445, 447, + 449, 448, 450, 450, 451, 451, 451, 451, 451, 451, + 451, 451, 451, 453, 452, 454, 454, 454, 455, 457, + 456, 458, 459, 460, 462, 461, 463, 463, 464, 464, + 464, 464, 464, 466, 465, 468, 467, 470, 469, 472, + 471, 473, 473, 474, 474, 474, 474, 474, 474, 474, + 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, + 475, 477, 476, 479, 478, 480, 482, 481, 483, 484, + 486, 485, 487, 487, 489, 488, 490, 491, 492, 494, + 493, 495, 495, 495, 495, 495, 497, 496, 499, 498, + 501, 500, 503, 502, 505, 504, 507, 506, 508, 508, + 509, 511, 510, 512, 512, 514, 513, 515, 515, 516, + 516, 516, 516, 516, 516, 516, 517, 519, 518, 521, + 520, 522, 522, 524, 523, 525, 525, 526, 526, 526, + 526, 528, 527, 529, 530, 531 }; const unsigned char @@ -4443,60 +4439,60 @@ namespace isc { namespace dhcp { 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 3, 3, 3, 3, 0, 6, 0, 4, 1, - 3, 1, 1, 1, 1, 1, 0, 4, 3, 0, - 6, 0, 6, 0, 6, 0, 1, 1, 3, 0, - 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 3, 0, 6, 0, 4, + 1, 3, 1, 1, 1, 1, 1, 0, 4, 3, + 0, 6, 0, 6, 0, 6, 0, 1, 1, 3, + 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 4, 1, 1, 1, 1, 0, 4, 0, - 4, 0, 4, 3, 0, 4, 3, 3, 3, 3, - 3, 3, 3, 3, 0, 4, 3, 0, 4, 0, - 6, 1, 3, 1, 1, 1, 1, 0, 6, 1, - 3, 1, 1, 1, 1, 1, 0, 6, 0, 6, - 0, 1, 1, 3, 0, 4, 0, 4, 1, 3, - 1, 1, 1, 0, 4, 0, 4, 0, 6, 1, - 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, - 3, 3, 3, 0, 6, 0, 1, 1, 3, 0, - 4, 0, 4, 1, 3, 1, 1, 1, 1, 1, + 1, 1, 0, 4, 1, 1, 1, 1, 0, 4, + 0, 4, 0, 4, 3, 0, 4, 3, 3, 3, + 3, 3, 3, 3, 3, 0, 4, 3, 0, 4, + 0, 6, 1, 3, 1, 1, 1, 1, 0, 6, + 1, 3, 1, 1, 1, 1, 1, 0, 6, 0, + 6, 0, 1, 1, 3, 0, 4, 0, 4, 1, + 3, 1, 1, 1, 0, 4, 0, 4, 0, 6, + 1, 3, 1, 1, 1, 1, 1, 1, 3, 3, + 3, 3, 3, 3, 0, 6, 0, 1, 1, 3, + 0, 4, 0, 4, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 0, 4, + 0, 4, 0, 4, 0, 4, 0, 4, 1, 1, + 1, 3, 3, 0, 6, 0, 1, 1, 3, 0, + 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 0, 4, 1, 1, 1, - 3, 3, 0, 6, 0, 1, 1, 3, 0, 4, - 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 6, 0, 4, 0, 1, 1, 3, 0, 4, + 0, 4, 0, 1, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 1, 0, + 4, 0, 4, 0, 4, 1, 0, 4, 3, 0, + 6, 0, 1, 1, 3, 0, 4, 0, 4, 0, + 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 4, 1, 1, 3, 3, 0, + 6, 0, 1, 1, 3, 0, 4, 0, 4, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 0, 4, 0, 4, 0, 6, 0, 1, 1, 3, + 0, 4, 0, 4, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 4, 3, + 0, 4, 3, 3, 0, 6, 0, 1, 1, 3, + 0, 4, 0, 4, 0, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 6, 0, 4, 0, 1, 1, 3, 0, 4, 0, - 4, 0, 1, 1, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 1, 0, 4, - 0, 4, 0, 4, 1, 0, 4, 3, 0, 6, - 0, 1, 1, 3, 0, 4, 0, 4, 0, 1, - 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 1, 1, 3, 3, 0, 6, - 0, 1, 1, 3, 0, 4, 0, 4, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 0, 4, 0, - 4, 0, 4, 0, 6, 0, 1, 1, 3, 0, - 4, 0, 4, 1, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 4, 3, 0, - 4, 3, 3, 0, 6, 0, 1, 1, 3, 0, - 4, 0, 4, 0, 1, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, - 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, - 0, 4, 0, 6, 1, 1, 0, 4, 0, 6, - 1, 3, 0, 4, 0, 1, 1, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 4, 3, 0, - 6, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 1, 1, 1, 3, 0, 4, - 3, 3, 3, 0, 6, 1, 3, 1, 1, 1, - 1, 1, 0, 4, 0, 4, 0, 6, 0, 4, - 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 0, 4, 0, 4, 3, 0, 4, 3, 3, 0, - 4, 1, 1, 0, 4, 3, 3, 3, 0, 4, - 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 6, 0, 4, 1, 3, 1, - 0, 6, 1, 3, 0, 4, 1, 3, 1, 1, - 1, 1, 1, 1, 1, 3, 0, 4, 0, 6, - 1, 3, 0, 4, 1, 3, 1, 1, 1, 1, - 0, 4, 3, 3, 3 + 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 4, 0, 4, 0, 6, 1, 1, 0, 4, 0, + 6, 1, 3, 0, 4, 0, 1, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 4, 3, + 0, 6, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 4, 1, 1, 1, 3, 0, + 4, 3, 3, 3, 0, 6, 1, 3, 1, 1, + 1, 1, 1, 0, 4, 0, 4, 0, 6, 0, + 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 0, 4, 0, 4, 3, 0, 4, 3, 3, + 0, 4, 1, 1, 0, 4, 3, 3, 3, 0, + 4, 1, 1, 1, 1, 1, 0, 4, 0, 4, + 0, 4, 0, 4, 0, 6, 0, 4, 1, 3, + 1, 0, 6, 1, 3, 0, 4, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 3, 0, 4, 0, + 6, 1, 3, 0, 4, 1, 3, 1, 1, 1, + 1, 0, 4, 3, 3, 3 }; @@ -4656,60 +4652,60 @@ namespace isc { namespace dhcp { 411, 411, 420, 421, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 454, 459, 464, 469, 474, 479, 479, 490, 490, 499, - 500, 503, 504, 505, 506, 507, 510, 510, 520, 526, - 526, 538, 538, 550, 550, 560, 561, 564, 565, 568, - 568, 578, 579, 582, 583, 584, 585, 586, 587, 588, + 452, 455, 460, 465, 470, 475, 480, 480, 491, 491, + 500, 501, 504, 505, 506, 507, 508, 511, 511, 521, + 527, 527, 539, 539, 551, 551, 561, 562, 565, 566, + 569, 569, 579, 580, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 602, 602, 609, 610, 611, 612, 615, 615, 623, - 623, 631, 631, 639, 644, 644, 652, 657, 662, 667, - 672, 677, 682, 687, 692, 692, 700, 705, 705, 714, - 714, 724, 725, 728, 729, 732, 737, 742, 742, 752, - 753, 756, 757, 758, 761, 766, 773, 773, 783, 783, - 793, 794, 797, 798, 801, 801, 811, 811, 821, 822, - 823, 826, 827, 830, 830, 838, 838, 846, 846, 857, - 858, 861, 862, 863, 864, 865, 866, 869, 874, 879, - 884, 889, 894, 902, 902, 915, 916, 919, 920, 927, - 927, 953, 953, 964, 965, 969, 970, 971, 972, 973, + 599, 600, 603, 603, 610, 611, 612, 613, 616, 616, + 624, 624, 632, 632, 640, 645, 645, 653, 658, 663, + 668, 673, 678, 683, 688, 693, 693, 701, 706, 706, + 715, 715, 725, 726, 729, 730, 733, 738, 743, 743, + 753, 754, 757, 758, 759, 762, 767, 774, 774, 784, + 784, 794, 795, 798, 799, 802, 802, 812, 812, 822, + 823, 824, 827, 828, 831, 831, 839, 839, 847, 847, + 858, 859, 862, 863, 864, 865, 866, 867, 870, 875, + 880, 885, 890, 895, 903, 903, 916, 917, 920, 921, + 928, 928, 954, 954, 965, 966, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, - 984, 985, 986, 987, 988, 991, 991, 999, 999, 1007, - 1007, 1015, 1015, 1023, 1023, 1033, 1033, 1040, 1041, 1042, - 1045, 1050, 1058, 1058, 1069, 1070, 1074, 1075, 1078, 1078, - 1086, 1087, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, - 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1113, - 1113, 1126, 1126, 1135, 1136, 1139, 1140, 1145, 1145, 1160, - 1160, 1174, 1175, 1178, 1179, 1182, 1183, 1184, 1185, 1186, - 1187, 1188, 1189, 1190, 1191, 1194, 1196, 1201, 1203, 1203, - 1211, 1211, 1219, 1219, 1227, 1229, 1229, 1237, 1246, 1246, - 1258, 1259, 1264, 1265, 1270, 1270, 1282, 1282, 1294, 1295, - 1300, 1301, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, - 1314, 1317, 1319, 1319, 1327, 1329, 1331, 1336, 1344, 1344, - 1356, 1357, 1360, 1361, 1364, 1364, 1374, 1374, 1383, 1384, - 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1396, 1396, 1404, - 1404, 1429, 1429, 1459, 1459, 1471, 1472, 1475, 1476, 1479, - 1479, 1491, 1491, 1503, 1504, 1507, 1508, 1509, 1510, 1511, - 1512, 1513, 1514, 1515, 1516, 1517, 1520, 1520, 1528, 1533, - 1533, 1541, 1546, 1554, 1554, 1564, 1565, 1568, 1569, 1572, - 1572, 1581, 1581, 1590, 1591, 1594, 1595, 1599, 1600, 1601, - 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1612, 1612, - 1622, 1622, 1632, 1632, 1640, 1640, 1648, 1648, 1656, 1656, - 1664, 1664, 1677, 1677, 1687, 1688, 1691, 1691, 1702, 1702, - 1712, 1713, 1716, 1716, 1726, 1727, 1730, 1731, 1734, 1735, - 1736, 1737, 1738, 1739, 1740, 1743, 1745, 1745, 1753, 1761, - 1761, 1773, 1774, 1777, 1778, 1779, 1780, 1781, 1782, 1783, - 1784, 1785, 1788, 1788, 1795, 1796, 1797, 1800, 1805, 1805, - 1813, 1818, 1825, 1832, 1832, 1842, 1843, 1846, 1847, 1848, - 1849, 1850, 1853, 1853, 1861, 1861, 1871, 1871, 1883, 1883, - 1893, 1894, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, - 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1916, - 1921, 1921, 1929, 1929, 1937, 1942, 1942, 1950, 1955, 1960, - 1960, 1968, 1969, 1972, 1972, 1980, 1985, 1990, 1995, 1995, - 2003, 2006, 2009, 2012, 2015, 2021, 2021, 2031, 2031, 2038, - 2038, 2045, 2045, 2058, 2058, 2068, 2068, 2079, 2080, 2084, - 2088, 2088, 2100, 2101, 2105, 2105, 2113, 2114, 2117, 2118, - 2119, 2120, 2121, 2122, 2123, 2126, 2131, 2131, 2139, 2139, - 2149, 2150, 2153, 2153, 2161, 2162, 2165, 2166, 2167, 2168, - 2171, 2171, 2179, 2184, 2189 + 984, 985, 986, 987, 988, 989, 992, 992, 1000, 1000, + 1008, 1008, 1016, 1016, 1024, 1024, 1034, 1034, 1041, 1042, + 1043, 1046, 1051, 1059, 1059, 1070, 1071, 1075, 1076, 1079, + 1079, 1087, 1088, 1091, 1092, 1093, 1094, 1095, 1096, 1097, + 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, + 1114, 1114, 1127, 1127, 1136, 1137, 1140, 1141, 1146, 1146, + 1161, 1161, 1175, 1176, 1179, 1180, 1183, 1184, 1185, 1186, + 1187, 1188, 1189, 1190, 1191, 1192, 1195, 1197, 1202, 1204, + 1204, 1212, 1212, 1220, 1220, 1228, 1230, 1230, 1238, 1247, + 1247, 1259, 1260, 1265, 1266, 1271, 1271, 1283, 1283, 1295, + 1296, 1301, 1302, 1307, 1308, 1309, 1310, 1311, 1312, 1313, + 1314, 1315, 1318, 1320, 1320, 1328, 1330, 1332, 1337, 1345, + 1345, 1357, 1358, 1361, 1362, 1365, 1365, 1375, 1375, 1384, + 1385, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1397, 1397, + 1405, 1405, 1430, 1430, 1460, 1460, 1472, 1473, 1476, 1477, + 1480, 1480, 1492, 1492, 1504, 1505, 1508, 1509, 1510, 1511, + 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1521, 1521, 1529, + 1534, 1534, 1542, 1547, 1555, 1555, 1565, 1566, 1569, 1570, + 1573, 1573, 1582, 1582, 1591, 1592, 1595, 1596, 1600, 1601, + 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1613, + 1613, 1623, 1623, 1633, 1633, 1641, 1641, 1649, 1649, 1657, + 1657, 1665, 1665, 1678, 1678, 1688, 1689, 1692, 1692, 1703, + 1703, 1713, 1714, 1717, 1717, 1727, 1728, 1731, 1732, 1735, + 1736, 1737, 1738, 1739, 1740, 1741, 1744, 1746, 1746, 1754, + 1762, 1762, 1774, 1775, 1778, 1779, 1780, 1781, 1782, 1783, + 1784, 1785, 1786, 1789, 1789, 1796, 1797, 1798, 1801, 1806, + 1806, 1814, 1819, 1826, 1833, 1833, 1843, 1844, 1847, 1848, + 1849, 1850, 1851, 1854, 1854, 1862, 1862, 1872, 1872, 1884, + 1884, 1894, 1895, 1898, 1899, 1900, 1901, 1902, 1903, 1904, + 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, + 1917, 1922, 1922, 1930, 1930, 1938, 1943, 1943, 1951, 1956, + 1961, 1961, 1969, 1970, 1973, 1973, 1981, 1986, 1991, 1996, + 1996, 2004, 2007, 2010, 2013, 2016, 2022, 2022, 2032, 2032, + 2039, 2039, 2046, 2046, 2059, 2059, 2069, 2069, 2080, 2081, + 2085, 2089, 2089, 2101, 2102, 2106, 2106, 2114, 2115, 2118, + 2119, 2120, 2121, 2122, 2123, 2124, 2127, 2132, 2132, 2140, + 2140, 2150, 2151, 2154, 2154, 2162, 2163, 2166, 2167, 2168, + 2169, 2172, 2172, 2180, 2185, 2190 }; // Print the state stack on the debug stream. @@ -4744,8 +4740,8 @@ namespace isc { namespace dhcp { #line 14 "dhcp6_parser.yy" // lalr1.cc:1167 } } // isc::dhcp -#line 4748 "dhcp6_parser.cc" // lalr1.cc:1167 -#line 2194 "dhcp6_parser.yy" // lalr1.cc:1168 +#line 4744 "dhcp6_parser.cc" // lalr1.cc:1167 +#line 2195 "dhcp6_parser.yy" // lalr1.cc:1168 void diff --git a/src/bin/dhcp6/dhcp6_parser.h b/src/bin/dhcp6/dhcp6_parser.h index 9d54ba18e6..aebc8d41eb 100644 --- a/src/bin/dhcp6/dhcp6_parser.h +++ b/src/bin/dhcp6/dhcp6_parser.h @@ -1480,7 +1480,7 @@ namespace isc { namespace dhcp { enum { yyeof_ = 0, - yylast_ = 981, ///< Last index in yytable_. + yylast_ = 967, ///< Last index in yytable_. yynnts_ = 367, ///< Number of nonterminal symbols. yyfinal_ = 30, ///< Termination state number. yyterror_ = 1, diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy index 32febb744a..1984e52feb 100644 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@ -448,6 +448,7 @@ global_param: preferred_lifetime | dhcp_ddns | user_context | comment + | reservations | unknown_map_entry ; diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index 70ce51c59a..f283efea61 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -582,6 +582,17 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set, continue; } + if (config_pair.first == "reservations") { + HostCollection hosts; + HostReservationsListParser parser; + parser.parse(SUBNET_ID_GLOBAL, config_pair.second, hosts); + for (auto h = hosts.begin(); h != hosts.end(); ++h) { + srv_config->getCfgHosts()->add(*h); + } + + continue; + } + // Timers are not used in the global scope. Their values are derived // to specific subnets (see SimpleParser6::deriveParameters). // decline-probation-period, dhcp4o6-port and user-context diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc index 70b6cdee04..4af287e129 100644 --- a/src/bin/dhcp6/tests/config_parser_unittest.cc +++ b/src/bin/dhcp6/tests/config_parser_unittest.cc @@ -6643,7 +6643,7 @@ TEST_F(Dhcp6ParserTest, comments) { EXPECT_EQ(Host::IDENT_HWADDR, host->getIdentifierType()); EXPECT_EQ("aa:bb:cc:dd:ee:ff", host->getHWAddress()->toText(false)); EXPECT_FALSE(host->getDuid()); - EXPECT_EQ(0, host->getIPv4SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, host->getIPv4SubnetID()); EXPECT_EQ(100, host->getIPv6SubnetID()); EXPECT_EQ("foo.example.com", host->getHostname()); @@ -6685,4 +6685,143 @@ TEST_F(Dhcp6ParserTest, comments) { EXPECT_EQ("\"No dynamic DNS\"", ctx_d2->get("comment")->str()); } +// This test verifies that the global host reservations can be specified. +TEST_F(Dhcp6ParserTest, globalReservations) { + ConstElementPtr x; + string config = "{ " + genIfaceConfig() + ",\n" + "\"rebind-timer\": 2000, \n" + "\"renew-timer\": 1000, \n" + "\"reservations\": [\n" + " {\n" + " \"duid\": \"01:02:03:04:05:06:07:08:09:0A\",\n" + " \"ip-addresses\": [ \"2001:db8:2::1234\" ],\n" + " \"hostname\": \"\",\n" + " \"option-data\": [\n" + " {\n" + " \"name\": \"dns-servers\",\n" + " \"data\": \"2001:db8:2::1111\"\n" + " },\n" + " {\n" + " \"name\": \"preference\",\n" + " \"data\": \"11\"\n" + " }\n" + " ]\n" + " },\n" + " {\n" + " \"hw-address\": \"01:02:03:04:05:06\",\n" + " \"ip-addresses\": [ \"2001:db8:2::abcd\" ],\n" + " \"hostname\": \"\",\n" + " \"option-data\": [\n" + " {\n" + " \"name\": \"dns-servers\",\n" + " \"data\": \"2001:db8:2::abbc\"\n" + " },\n" + " {\n" + " \"name\": \"preference\",\n" + " \"data\": \"25\"\n" + " }\n" + " ]\n" + " }\n" + "],\n" + "\"subnet6\": [ \n" + " { \n" + " \"pools\": [ { \"pool\": \"2001:db8:1::/80\" } ],\n" + " \"subnet\": \"2001:db8:1::/64\", \n" + " \"id\": 123,\n" + " \"reservations\": [\n" + " ]\n" + " },\n" + " {\n" + " \"pools\": [ ],\n" + " \"subnet\": \"2001:db8:2::/64\", \n" + " \"id\": 234\n" + " },\n" + " {\n" + " \"pools\": [ ],\n" + " \"subnet\": \"2001:db8:3::/64\", \n" + " \"id\": 542\n" + " }\n" + "],\n" + "\"preferred-lifetime\": 3000,\n" + "\"valid-lifetime\": 4000 }\n"; + + ConstElementPtr json; + (json = parseDHCP6(config)); + ASSERT_NO_THROW(json = parseDHCP6(config)); + extractConfig(config); + + EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json)); + checkResult(x, 0); + + // Make sure all subnets have been successfully configured. There is no + // need to sanity check the subnet properties because it should have + // been already tested by other tests. + const Subnet6Collection* subnets = + CfgMgr::instance().getStagingCfg()->getCfgSubnets6()->getAll(); + ASSERT_TRUE(subnets); + ASSERT_EQ(3, subnets->size()); + + // Hosts configuration must be available. + CfgHostsPtr hosts_cfg = CfgMgr::instance().getStagingCfg()->getCfgHosts(); + ASSERT_TRUE(hosts_cfg); + + // Let's create an object holding hardware address of the host having + // a reservation in the subnet having id of 234. For simplicity the + // address is a collection of numbers from 1 to 6. + std::vector hwaddr; + for (unsigned int i = 1; i < 7; ++i) { + hwaddr.push_back(static_cast(i)); + } + // Retrieve the reservation and sanity check the address reserved. + ConstHostPtr host = hosts_cfg->get6(SUBNET_ID_GLOBAL, Host::IDENT_HWADDR, + &hwaddr[0], hwaddr.size()); + ASSERT_TRUE(host); + IPv6ResrvRange resrv = host->getIPv6Reservations(IPv6Resrv::TYPE_NA); + ASSERT_EQ(1, std::distance(resrv.first, resrv.second)); + EXPECT_TRUE(reservationExists(IPv6Resrv(IPv6Resrv::TYPE_NA, + IOAddress("2001:db8:2::abcd")), + resrv)); + // This reservation should be solely assigned to the subnet 234, + // and not to other two. + EXPECT_FALSE(hosts_cfg->get6(123, Host::IDENT_HWADDR, + &hwaddr[0], hwaddr.size())); + EXPECT_FALSE(hosts_cfg->get6(542, Host::IDENT_HWADDR, + &hwaddr[0], hwaddr.size())); + // Check that options are assigned correctly. + Option6AddrLstPtr opt_dns = + retrieveOption(*host, D6O_NAME_SERVERS); + ASSERT_TRUE(opt_dns); + Option6AddrLst::AddressContainer dns_addrs = opt_dns->getAddresses(); + ASSERT_EQ(1, dns_addrs.size()); + EXPECT_EQ("2001:db8:2::abbc", dns_addrs[0].toText()); + OptionUint8Ptr opt_prf = + retrieveOption(*host, D6O_PREFERENCE); + ASSERT_TRUE(opt_prf); + EXPECT_EQ(25, static_cast(opt_prf->getValue())); + + // Do the same test for the DUID based reservation. + std::vector duid; + for (unsigned int i = 1; i < 0xb; ++i) { + duid.push_back(static_cast(i)); + } + host = hosts_cfg->get6(SUBNET_ID_GLOBAL, Host::IDENT_DUID, &duid[0], duid.size()); + ASSERT_TRUE(host); + resrv = host->getIPv6Reservations(IPv6Resrv::TYPE_NA); + ASSERT_EQ(1, std::distance(resrv.first, resrv.second)); + EXPECT_TRUE(reservationExists(IPv6Resrv(IPv6Resrv::TYPE_NA, + IOAddress("2001:db8:2::1234")), + resrv)); + EXPECT_FALSE(hosts_cfg->get6(123, Host::IDENT_DUID, &duid[0], duid.size())); + EXPECT_FALSE(hosts_cfg->get6(542, Host::IDENT_DUID, &duid[0], duid.size())); + // Check that options are assigned correctly. + opt_dns = retrieveOption(*host, D6O_NAME_SERVERS); + ASSERT_TRUE(opt_dns); + dns_addrs = opt_dns->getAddresses(); + ASSERT_EQ(1, dns_addrs.size()); + EXPECT_EQ("2001:db8:2::1111", dns_addrs[0].toText()); + opt_prf = retrieveOption(*host, D6O_PREFERENCE); + ASSERT_TRUE(opt_prf); + EXPECT_EQ(11, static_cast(opt_prf->getValue())); +} + }; diff --git a/src/lib/dhcpsrv/alloc_engine.cc b/src/lib/dhcpsrv/alloc_engine.cc index c48f3857f5..90b9058de4 100644 --- a/src/lib/dhcpsrv/alloc_engine.cc +++ b/src/lib/dhcpsrv/alloc_engine.cc @@ -2628,6 +2628,14 @@ hasAddressReservation(AllocEngine::ClientContext4& ctx) { Subnet4Ptr subnet = ctx.subnet_; while (subnet) { + if (subnet->getHostReservationMode() == Network::HR_GLOBAL) { + auto host = ctx.hosts_.find(SUBNET_ID_GLOBAL); + return (host != ctx.hosts_.end() && + !(host->second->getIPv4Reservation().isV4Zero())); + // if we want global + other modes we would need to + // return only if true, else continue + } + auto host = ctx.hosts_.find(subnet->getID()); if ((host != ctx.hosts_.end()) && !(host->second->getIPv4Reservation().isV4Zero()) && @@ -2811,7 +2819,10 @@ AllocEngine::ClientContext4::ClientContext4(const Subnet4Ptr& subnet, ConstHostPtr AllocEngine::ClientContext4::currentHost() const { if (subnet_) { - auto host = hosts_.find(subnet_->getID()); + SubnetID id = (subnet_->getHostReservationMode() == Network::HR_GLOBAL ? + SUBNET_ID_GLOBAL : subnet_->getID()); + + auto host = hosts_.find(id); if (host != hosts_.cend()) { return (host->second); } @@ -2878,6 +2889,17 @@ AllocEngine::findReservation(ClientContext4& ctx) { SharedNetwork4Ptr network; subnet->getSharedNetwork(network); + if (subnet->getHostReservationMode() == Network::HR_GLOBAL) { + ConstHostPtr ghost = findGlobalReservation(ctx); + if (ghost) { + ctx.hosts_[SUBNET_ID_GLOBAL] = ghost; + + // @todo In theory, to support global as part of HR_ALL, + // we would just keep going, instead of returning. + return; + } + } + // If the subnet belongs to a shared network it is usually going to be // more efficient to make a query for all reservations for a particular // client rather than a query for each subnet within this shared network. @@ -2942,6 +2964,24 @@ AllocEngine::findReservation(ClientContext4& ctx) { } } +ConstHostPtr +AllocEngine::findGlobalReservation(ClientContext4& ctx) { + ConstHostPtr host; + BOOST_FOREACH(const IdentifierPair& id_pair, ctx.host_identifiers_) { + // Attempt to find a host using a specified identifier. + host = HostMgr::instance().get4(SUBNET_ID_GLOBAL, id_pair.first, + &id_pair.second[0], id_pair.second.size()); + + // If we found matching global host we're done. + if (host) { + break; + } + } + + return (host); +} + + Lease4Ptr AllocEngine::discoverLease4(AllocEngine::ClientContext4& ctx) { // Find an existing lease for this client. This function will return true diff --git a/src/lib/dhcpsrv/alloc_engine.h b/src/lib/dhcpsrv/alloc_engine.h index 3a64eb91a4..198e32c9cd 100644 --- a/src/lib/dhcpsrv/alloc_engine.h +++ b/src/lib/dhcpsrv/alloc_engine.h @@ -1299,6 +1299,17 @@ public: /// @param ctx Client context holding various information about the client. static void findReservation(ClientContext4& ctx); + /// @brief Attempts to find the host reservation for the client. + /// + /// This method attempts to find a "global" host reservation matching the + /// client identifier. It will return the first global reservation that matches + /// per the configured list of host identifiers, or an empty pointer if no + /// matches are found. + /// + /// @param ctx Client context holding various information about the client. + /// @return Pointer to the reservation found, or an empty pointer. + static ConstHostPtr findGlobalReservation(ClientContext4& ctx); + private: /// @brief Offers the lease. diff --git a/src/lib/dhcpsrv/cfg_hosts.cc b/src/lib/dhcpsrv/cfg_hosts.cc index d673cdc3b1..9725920d9d 100644 --- a/src/lib/dhcpsrv/cfg_hosts.cc +++ b/src/lib/dhcpsrv/cfg_hosts.cc @@ -446,8 +446,9 @@ CfgHosts::add(const HostPtr& host) { " is added to the configuration"); } - // At least one subnet ID must be non-zero - if (host->getIPv4SubnetID() == 0 && host->getIPv6SubnetID() == 0) { + // At least one subnet ID must be used + if (host->getIPv4SubnetID() == SUBNET_ID_UNUSED && + host->getIPv6SubnetID() == SUBNET_ID_UNUSED) { isc_throw(BadValue, "must not use both IPv4 and IPv6 subnet ids of" " 0 when adding new host reservation"); } @@ -489,7 +490,7 @@ CfgHosts::add4(const HostPtr& host) { } // Check for duplicates for the specified IPv4 subnet. - if (host->getIPv4SubnetID() > 0) { + if (host->getIPv4SubnetID() != SUBNET_ID_UNUSED) { if (hwaddr && !hwaddr->hwaddr_.empty() && get4(host->getIPv4SubnetID(), Host::IDENT_HWADDR, &hwaddr->hwaddr_[0], hwaddr->hwaddr_.size())) { @@ -507,7 +508,7 @@ CfgHosts::add4(const HostPtr& host) { << "' as this host has already been added"); } // Check for duplicates for the specified IPv6 subnet. - } else if (host->getIPv6SubnetID()) { + } else if (host->getIPv6SubnetID() != SUBNET_ID_UNUSED) { if (duid && !duid->getDuid().empty() && get6(host->getIPv6SubnetID(), Host::IDENT_DUID, &duid->getDuid()[0], duid->getDuid().size())) { @@ -528,7 +529,7 @@ CfgHosts::add4(const HostPtr& host) { // Check if the address is already reserved for the specified IPv4 subnet. if (!host->getIPv4Reservation().isV4Zero() && - (host->getIPv4SubnetID() > 0) && + (host->getIPv4SubnetID() != SUBNET_ID_UNUSED) && get4(host->getIPv4SubnetID(), host->getIPv4Reservation())) { isc_throw(ReservedAddress, "failed to add new host using the HW" " address '" << (hwaddr ? hwaddr->toText(false) : "(null)") @@ -540,7 +541,7 @@ CfgHosts::add4(const HostPtr& host) { // Check if the (identifier type, identifier) tuple is already used. const std::vector& id = host->getIdentifier(); - if ((host->getIPv4SubnetID() > 0) && !id.empty()) { + if ((host->getIPv4SubnetID() != SUBNET_ID_UNUSED) && !id.empty()) { if (get4(host->getIPv4SubnetID(), host->getIdentifierType(), &id[0], id.size())) { isc_throw(DuplicateHost, "failed to add duplicate IPv4 host using identifier: " @@ -556,7 +557,7 @@ CfgHosts::add4(const HostPtr& host) { void CfgHosts::add6(const HostPtr& host) { - if (host->getIPv6SubnetID() == 0) { + if (host->getIPv6SubnetID() == SUBNET_ID_UNUSED) { // This is IPv4-only host. No need to add it to v6 tables. return; } diff --git a/src/lib/dhcpsrv/host.cc b/src/lib/dhcpsrv/host.cc index 38b29c13f0..d5416f1d9a 100644 --- a/src/lib/dhcpsrv/host.cc +++ b/src/lib/dhcpsrv/host.cc @@ -535,13 +535,13 @@ Host::toText() const { // Add HW address or DUID. s << getIdentifierAsText(); - // Add IPv4 subnet id if exists (non-zero). - if (ipv4_subnet_id_) { + // Add IPv4 subnet id if exists. + if (ipv4_subnet_id_ != SUBNET_ID_UNUSED) { s << " ipv4_subnet_id=" << ipv4_subnet_id_; } - // Add IPv6 subnet id if exists (non-zero). - if (ipv6_subnet_id_) { + // Add IPv6 subnet id if exists. + if (ipv6_subnet_id_ != SUBNET_ID_UNUSED) { s << " ipv6_subnet_id=" << ipv6_subnet_id_; } diff --git a/src/lib/dhcpsrv/host_mgr.cc b/src/lib/dhcpsrv/host_mgr.cc index 6792a73f8e..87770db6bc 100644 --- a/src/lib/dhcpsrv/host_mgr.cc +++ b/src/lib/dhcpsrv/host_mgr.cc @@ -181,7 +181,7 @@ HostMgr::get4(const SubnetID& subnet_id, if (host && host->getNegative()) { return (ConstHostPtr()); } else if (!host && negative_caching_) { - cacheNegative(subnet_id, SubnetID(0), + cacheNegative(subnet_id, SubnetID(SUBNET_ID_UNUSED), identifier_type, identifier_begin, identifier_len); } return (host); @@ -295,7 +295,7 @@ HostMgr::get6(const SubnetID& subnet_id, if (host && host->getNegative()) { return (ConstHostPtr()); } else if (!host && negative_caching_) { - cacheNegative(SubnetID(0), subnet_id, + cacheNegative(SubnetID(SUBNET_ID_UNUSED), subnet_id, identifier_type, identifier_begin, identifier_len); } return (host); diff --git a/src/lib/dhcpsrv/mysql_host_data_source.cc b/src/lib/dhcpsrv/mysql_host_data_source.cc index 37eb903b5d..0073f12f21 100644 --- a/src/lib/dhcpsrv/mysql_host_data_source.cc +++ b/src/lib/dhcpsrv/mysql_host_data_source.cc @@ -126,7 +126,8 @@ public: bind_(columns_num_), columns_(columns_num_), error_(columns_num_, MLM_FALSE), host_id_(0), dhcp_identifier_length_(0), dhcp_identifier_type_(0), - dhcp4_subnet_id_(0), dhcp6_subnet_id_(0), ipv4_address_(0), + dhcp4_subnet_id_(SUBNET_ID_UNUSED), + dhcp6_subnet_id_(SUBNET_ID_UNUSED), ipv4_address_(0), hostname_length_(0), dhcp4_client_classes_length_(0), dhcp6_client_classes_length_(0), user_context_length_(0), @@ -307,7 +308,7 @@ public: // Can't take an address of intermediate object, so let's store it // in dhcp4_subnet_id_ dhcp4_subnet_id_ = host->getIPv4SubnetID(); - dhcp4_subnet_id_null_ = host->getIPv4SubnetID() == 0 ? MLM_TRUE : MLM_FALSE; + dhcp4_subnet_id_null_ = host->getIPv4SubnetID() == SUBNET_ID_UNUSED ? MLM_TRUE : MLM_FALSE; bind_[3].buffer_type = MYSQL_TYPE_LONG; bind_[3].buffer = reinterpret_cast(&dhcp4_subnet_id_); bind_[3].is_unsigned = MLM_TRUE; @@ -317,7 +318,7 @@ public: // Can't take an address of intermediate object, so let's store it // in dhcp6_subnet_id_ dhcp6_subnet_id_ = host->getIPv6SubnetID(); - dhcp6_subnet_id_null_ = host->getIPv6SubnetID() == 0 ? MLM_TRUE : MLM_FALSE; + dhcp6_subnet_id_null_ = host->getIPv6SubnetID() == SUBNET_ID_UNUSED ? MLM_TRUE : MLM_FALSE; bind_[4].buffer_type = MYSQL_TYPE_LONG; bind_[4].buffer = reinterpret_cast(&dhcp6_subnet_id_); bind_[4].is_unsigned = MLM_TRUE; @@ -549,14 +550,14 @@ public: // Set DHCPv4 subnet ID to the value returned. If NULL returned, // set to 0. - SubnetID ipv4_subnet_id(0); + SubnetID ipv4_subnet_id(SUBNET_ID_UNUSED); if (dhcp4_subnet_id_null_ == MLM_FALSE) { ipv4_subnet_id = static_cast(dhcp4_subnet_id_); } // Set DHCPv6 subnet ID to the value returned. If NULL returned, // set to 0. - SubnetID ipv6_subnet_id(0); + SubnetID ipv6_subnet_id(SUBNET_ID_UNUSED); if (dhcp6_subnet_id_null_ == MLM_FALSE) { ipv6_subnet_id = static_cast(dhcp6_subnet_id_); } @@ -1705,7 +1706,7 @@ public: : type_(0), value_len_(0), formatted_value_len_(0), space_(), space_len_(0), persistent_(false), user_context_(), user_context_len_(0), client_class_(), client_class_len_(0), - subnet_id_(0), host_id_(0), option_() { + subnet_id_(SUBNET_ID_UNUSED), host_id_(0), option_() { BOOST_STATIC_ASSERT(9 < OPTION_COLUMNS); } diff --git a/src/lib/dhcpsrv/network.cc b/src/lib/dhcpsrv/network.cc index cb996a387d..376e2568d8 100644 --- a/src/lib/dhcpsrv/network.cc +++ b/src/lib/dhcpsrv/network.cc @@ -169,6 +169,9 @@ Network::toElement() const { case HR_OUT_OF_POOL: mode = "out-of-pool"; break; + case HR_GLOBAL: + mode = "global"; + break; case HR_ALL: mode = "all"; break; diff --git a/src/lib/dhcpsrv/network.h b/src/lib/dhcpsrv/network.h index 5b51732b4b..ce253cb758 100644 --- a/src/lib/dhcpsrv/network.h +++ b/src/lib/dhcpsrv/network.h @@ -96,11 +96,16 @@ public: /// dealing with with addresses that are in pool. HR_OUT_OF_POOL, + /// Only global reservations are allowed. This mode + /// instructs AllocEngine to only look at global reservations. + HR_GLOBAL, + /// Both out-of-pool and in-pool reservations are allowed. This is the /// most flexible mode, where sysadmin have biggest liberty. However, /// there is a non-trivial performance penalty for it, as the /// AllocEngine code has to check whether there are reservations, even /// when dealing with reservations from within the dynamic pools. + /// @todo - should ALL include global? HR_ALL } HRMode; diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc index 6f6209620c..9a9596a224 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc @@ -526,6 +526,8 @@ SubnetConfigParser::hrModeFromText(const std::string& txt) { return (Network::HR_DISABLED); } else if (txt.compare("out-of-pool") == 0) { return (Network::HR_OUT_OF_POOL); + } else if (txt.compare("global") == 0) { + return (Network::HR_GLOBAL); } else if (txt.compare("all") == 0) { return (Network::HR_ALL); } else { diff --git a/src/lib/dhcpsrv/parsers/host_reservation_parser.cc b/src/lib/dhcpsrv/parsers/host_reservation_parser.cc index 3ec3fd5cca..2bf08f4dc3 100644 --- a/src/lib/dhcpsrv/parsers/host_reservation_parser.cc +++ b/src/lib/dhcpsrv/parsers/host_reservation_parser.cc @@ -158,8 +158,8 @@ HostReservationParser::parseInternal(const SubnetID&, } // Create a host object from the basic parameters we already parsed. - host.reset(new Host(identifier, identifier_name, SubnetID(0), - SubnetID(0), IOAddress("0.0.0.0"), hostname)); + host.reset(new Host(identifier, identifier_name, SUBNET_ID_UNUSED, + SUBNET_ID_UNUSED, IOAddress("0.0.0.0"), hostname)); // Add user context if (user_context) { diff --git a/src/lib/dhcpsrv/pgsql_host_data_source.cc b/src/lib/dhcpsrv/pgsql_host_data_source.cc index f11ab16c9e..076d968d37 100644 --- a/src/lib/dhcpsrv/pgsql_host_data_source.cc +++ b/src/lib/dhcpsrv/pgsql_host_data_source.cc @@ -66,11 +66,12 @@ const size_t DHCP_IDENTIFIER_MAX_LEN = 128; /// listed below: /// - zero or null IPv4 address indicates that there is no reservation for the /// IPv4 address for the host, -/// - zero or null subnet identifier (either IPv4 or IPv6) indicates that +/// - null subnet identifier (either IPv4 or IPv6) indicates that /// this subnet identifier must be ignored. Specifically, this is the case /// when host reservation is created for the DHCPv4 server, the IPv6 subnet id /// should be ignored. Conversely, when host reservation is created for the /// DHCPv6 server, the IPv4 subnet id should be ignored. +/// NOTE! Zero is a the "global" subnet id as Kea 1.5.0 /// /// To exclude those special case values, the Postgres backend uses partial /// indexes, i.e. the only values that are included in the index are those that @@ -206,10 +207,20 @@ public: bind_array->add(host->getIdentifierType()); // dhcp4_subnet_id : INT NULL - bind_array->add(host->getIPv4SubnetID()); + if (host->getIPv4SubnetID() == SUBNET_ID_UNUSED) { + bind_array->addNull(); + } + else { + bind_array->add(host->getIPv4SubnetID()); + } // dhcp6_subnet_id : INT NULL - bind_array->add(host->getIPv6SubnetID()); + if (host->getIPv6SubnetID() == SUBNET_ID_UNUSED) { + bind_array->addNull(); + } + else { + bind_array->add(host->getIPv6SubnetID()); + } // ipv4_address : BIGINT NULL bind_array->add((host->getIPv4Reservation())); @@ -316,14 +327,14 @@ public: static_cast(type); // dhcp4_subnet_id : INT NULL - uint32_t subnet_id(0); + uint32_t subnet_id(SUBNET_ID_UNUSED); if (!isColumnNull(r, row, DHCP4_SUBNET_ID_COL)) { getColumnValue(r, row, DHCP4_SUBNET_ID_COL, subnet_id); } SubnetID dhcp4_subnet_id = static_cast(subnet_id); // dhcp6_subnet_id : INT NULL - subnet_id = 0; + subnet_id = SUBNET_ID_UNUSED; if (!isColumnNull(r, row, DHCP6_SUBNET_ID_COL)) { getColumnValue(r, row, DHCP6_SUBNET_ID_COL, subnet_id); } diff --git a/src/lib/dhcpsrv/srv_config.cc b/src/lib/dhcpsrv/srv_config.cc index c2e53b073c..5ef061f956 100644 --- a/src/lib/dhcpsrv/srv_config.cc +++ b/src/lib/dhcpsrv/srv_config.cc @@ -339,9 +339,18 @@ SrvConfig::toElement() const { } } } - // Insert reservations + + // Host reservations CfgHostsList resv_list; resv_list.internalize(cfg_hosts_->toElement()); + + // Insert global reservations + ConstElementPtr global_resvs = resv_list.get(SUBNET_ID_GLOBAL); + if (global_resvs->size() > 0) { + dhcp->set("reservations", global_resvs); + } + + // Insert subnet reservations for (std::vector::const_iterator subnet = sn_list.cbegin(); subnet != sn_list.cend(); ++subnet) { ConstElementPtr id = (*subnet)->get("id"); @@ -352,6 +361,7 @@ SrvConfig::toElement() const { ConstElementPtr resvs = resv_list.get(subnet_id); (*subnet)->set("reservations", resvs); } + // Set expired-leases-processing ConstElementPtr expired = cfg_expiration_->toElement(); dhcp->set("expired-leases-processing", expired); diff --git a/src/lib/dhcpsrv/subnet.h b/src/lib/dhcpsrv/subnet.h index 176e3dbb43..140a521bf6 100644 --- a/src/lib/dhcpsrv/subnet.h +++ b/src/lib/dhcpsrv/subnet.h @@ -315,6 +315,10 @@ protected: /// /// @return the next unique Subnet-ID static SubnetID generateNextID() { + if (static_id_ == SUBNET_ID_MAX) { + resetSubnetID(); + } + return (static_id_++); } diff --git a/src/lib/dhcpsrv/subnet_id.h b/src/lib/dhcpsrv/subnet_id.h index 318dcd9b0c..77c2adf71d 100644 --- a/src/lib/dhcpsrv/subnet_id.h +++ b/src/lib/dhcpsrv/subnet_id.h @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2014-2018 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -9,6 +9,7 @@ #include #include +#include namespace isc { namespace dhcp { @@ -21,6 +22,13 @@ namespace dhcp { /// type. typedef uint32_t SubnetID; +/// @brief Special value is used for storing/recognizing global host reservations. +static const SubnetID SUBNET_ID_GLOBAL = 0; +/// @brief The largest valid value for auto-generated subnet IDs. +static const SubnetID SUBNET_ID_MAX = std::numeric_limits::max()-1; +/// @brief Special value used to signify that a SubnetID is "not set" +static const SubnetID SUBNET_ID_UNUSED = std::numeric_limits::max(); + /// @brief Exception thrown upon attempt to add subnet with an ID that belongs /// to the subnet that already exists. class DuplicateSubnetID : public Exception { diff --git a/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc b/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc index 72e7d70896..a898717244 100644 --- a/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc +++ b/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc @@ -740,7 +740,7 @@ TEST_F(SharedNetworkAlloc4Test, discoverSharedNetworkClassification) { // lease from subnet2. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet1_->getID(), - SubnetID(0), IOAddress("192.0.2.17"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.17"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); AllocEngine::findReservation(ctx); @@ -810,7 +810,7 @@ TEST_F(SharedNetworkAlloc4Test, discoverSharedNetworkReservations) { // Create reservation for the client. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet2_->getID(), - SubnetID(0), IOAddress("10.2.3.23"))); + SUBNET_ID_UNUSED, IOAddress("10.2.3.23"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1066,7 +1066,7 @@ TEST_F(SharedNetworkAlloc4Test, requestSharedNetworkReservations) { // Create reservation for the client. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet2_->getID(), - SubnetID(0), IOAddress("10.2.3.23"))); + SUBNET_ID_UNUSED, IOAddress("10.2.3.23"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1498,7 +1498,7 @@ TEST_F(AllocEngine4Test, reservedAddressNoHint) { // Create reservation for the client. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1537,7 +1537,7 @@ TEST_F(AllocEngine4Test,reservedAddressNoHintFakeAllocation) { // Create reservation for the client. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1578,7 +1578,7 @@ TEST_F(AllocEngine4Test,reservedAddressNoHintFakeAllocation) { TEST_F(AllocEngine4Test, reservedAddressHint) { HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1627,7 +1627,7 @@ TEST_F(AllocEngine4Test, reservedAddressHintFakeAllocation) { // Create a reservation for the client. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1666,7 +1666,7 @@ TEST_F(AllocEngine4Test, reservedAddressExistingLease) { // Create the reservation for the client. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1717,7 +1717,7 @@ TEST_F(AllocEngine4Test, reservedAddressHijacked) { // Create host reservation for the client B. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1775,7 +1775,7 @@ TEST_F(AllocEngine4Test, reservedAddressHijackedFakeAllocation) { // Create a reservation for the client B. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1835,7 +1835,7 @@ TEST_F(AllocEngine4Test, reservedAddressExistingLeaseInvalidHint) { // Create a reservation for the client. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1889,7 +1889,7 @@ TEST_F(AllocEngine4Test, reservedAddressExistingLeaseFakeAllocation) { // Create a reservation for the client. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -1954,7 +1954,7 @@ TEST_F(AllocEngine4Test, reservedAddressExistingLeaseNoHint) { // Create a reservation. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -2006,7 +2006,7 @@ TEST_F(AllocEngine4Test, reservedAddressExistingLeaseNoHintFakeAllocation) { // Create a reservation. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -2070,7 +2070,7 @@ TEST_F(AllocEngine4Test, reservedAddressConflictResolution) { // Create a reservation for client B. HostPtr host(new Host(&hwaddr2_->hwaddr_[0], hwaddr2_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.101"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.101"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -2162,7 +2162,7 @@ TEST_F(AllocEngine4Test, reservedAddressVsDynamicPool) { // Create a reservation for the client. HostPtr host(new Host(&hwaddr2_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.100"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.100"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -2194,7 +2194,7 @@ TEST_F(AllocEngine4Test, reservedAddressHintUsedByOtherClient) { // Create a reservation for the client. HostPtr host(new Host(&hwaddr2_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.100"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.100"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -2236,7 +2236,7 @@ TEST_F(AllocEngine4Test, reservedAddressShortPool) { // Reserve the address for a different client. HostPtr host(new Host(&hwaddr2_->hwaddr_[0], hwaddr2_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.100"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.100"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -2277,7 +2277,7 @@ TEST_F(AllocEngine4Test, reservedHostname) { // indicates that there is no reservation. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress::IPV4_ZERO_ADDRESS(), + SUBNET_ID_UNUSED, IOAddress::IPV4_ZERO_ADDRESS(), "foo.example.org")); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -2323,7 +2323,7 @@ TEST_F(AllocEngine4Test, findReservation) { // Create a reservation for the client. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.100"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.100"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -2347,7 +2347,7 @@ TEST_F(AllocEngine4Test, findReservation) { host.reset(new Host(&clientid_->getClientId()[0], clientid_->getClientId().size(), Host::IDENT_DUID, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.101"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.101"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -2366,7 +2366,7 @@ TEST_F(AllocEngine4Test, findReservation) { ctx.subnet_ = subnet_; host.reset(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID() + 1, - SubnetID(0), IOAddress("192.0.2.100"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.100"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -2444,7 +2444,7 @@ TEST_F(AllocEngine4Test, reservedAddressExistingLeaseStat) { // Create the reservation for the client. HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), Host::IDENT_HWADDR, subnet_->getID(), - SubnetID(0), IOAddress("192.0.2.123"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.123"))); CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); CfgMgr::instance().commit(); @@ -2486,6 +2486,207 @@ TEST_F(AllocEngine4Test, reservedAddressExistingLeaseStat) { EXPECT_FALSE(ctx.fake_allocation_); } +// This test checks the behavior of the allocation engine in the following +// scenario: +// - Client has no lease in the database. +// - Client has a global reservation. +// - Client sends DISCOVER +// - Client is allocated the reserved address. +// - Lease is not added to the lease database +TEST_F(AllocEngine4Test, globalReservationReservedAddressDiscover) { + // Create reservation for the client. + HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), + Host::IDENT_HWADDR, SUBNET_ID_GLOBAL, + SUBNET_ID_UNUSED, IOAddress("192.0.77.123"))); + CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); + CfgMgr::instance().commit(); + + AllocEngine engine(AllocEngine::ALLOC_ITERATIVE, 0, false); + + subnet_->setHostReservationMode(Network::HR_GLOBAL); + + // Query allocation engine for the lease to be assigned to this + // client without specifying the address to be assigned. + AllocEngine::ClientContext4 ctx(subnet_, clientid_, hwaddr_, + IOAddress("0.0.0.0"), false, false, + "", true); + ctx.query_.reset(new Pkt4(DHCPDISCOVER, 1234)); + + // Look up the host. + AllocEngine::findReservation(ctx); + + // We should have the correct current host + EXPECT_TRUE(ctx.currentHost()); + EXPECT_EQ(ctx.currentHost()->getHostname(), host->getHostname()); + EXPECT_EQ(ctx.currentHost()->getIPv4Reservation(), host->getIPv4Reservation()); + + // We should allocate the reserverd address. + Lease4Ptr lease = engine.allocateLease4(ctx); + ASSERT_TRUE(lease); + EXPECT_EQ("192.0.77.123", lease->addr_.toText()); + + // This is a "fake" allocation so the returned lease should not be committed + // to the lease database. + EXPECT_FALSE(LeaseMgrFactory::instance().getLease4(lease->addr_)); + + // Client had no lease in the database, so the old lease returned should + // be NULL. + EXPECT_FALSE(ctx.old_lease_); +} + +// This test checks the behavior of the allocation engine in the following +// scenario: +// - Client has no lease in the database. +// - Client has a global reservation. +// - Client sends REQUEST +// - Client is allocated the reserved address. +// - Lease is added to the lease database +TEST_F(AllocEngine4Test, globalReservationReservedAddressRequest) { + // Create reservation for the client. + HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), + Host::IDENT_HWADDR, SUBNET_ID_GLOBAL, + SUBNET_ID_UNUSED, IOAddress("192.0.77.123"))); + CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); + CfgMgr::instance().commit(); + + AllocEngine engine(AllocEngine::ALLOC_ITERATIVE, 0, false); + + subnet_->setHostReservationMode(Network::HR_GLOBAL); + + // Query allocation engine for the lease to be assigned to this + // client without specifying the address to be assigned. + AllocEngine::ClientContext4 ctx(subnet_, clientid_, hwaddr_, + IOAddress("0.0.0.0"), false, false, + "", false); + ctx.query_.reset(new Pkt4(DHCPREQUEST, 1234)); + + // Look up the host. + AllocEngine::findReservation(ctx); + + // We should have the correct current host + EXPECT_TRUE(ctx.currentHost()); + EXPECT_EQ(ctx.currentHost()->getHostname(), host->getHostname()); + EXPECT_EQ(ctx.currentHost()->getIPv4Reservation(), host->getIPv4Reservation()); + + // We should allocate the reserverd address. + Lease4Ptr lease = engine.allocateLease4(ctx); + ASSERT_TRUE(lease); + EXPECT_EQ("192.0.77.123", lease->addr_.toText()); + + // Check that the lease is indeed in LeaseMgr + Lease4Ptr from_mgr = LeaseMgrFactory::instance().getLease4(lease->addr_); + ASSERT_TRUE(from_mgr); + + // Now check that the lease in LeaseMgr has the same parameters + detailCompareLease(lease, from_mgr); + + // Client had no lease in the database, so the old lease returned should + // be NULL. + EXPECT_FALSE(ctx.old_lease_); +} + + +// This test checks the behavior of the allocation engine in the following +// scenario: +// - Client has no lease in the database. +// - Client has a global reservation. +// - Client sends DISCOVER +// - Client is allocated a dynamic address from matched subnet +// - Lease is not added to the lease database +TEST_F(AllocEngine4Test, globalReservationDynamicDiscover) { + // Create reservation for the client. + HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), + Host::IDENT_HWADDR, SUBNET_ID_GLOBAL, + SUBNET_ID_UNUSED, IOAddress::IPV4_ZERO_ADDRESS(), + "foo.example.org")); + CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); + CfgMgr::instance().commit(); + + AllocEngine engine(AllocEngine::ALLOC_ITERATIVE, 0, false); + + subnet_->setHostReservationMode(Network::HR_GLOBAL); + + // Query allocation engine for the lease to be assigned to this + // client without specifying the address to be assigned. + AllocEngine::ClientContext4 ctx(subnet_, clientid_, hwaddr_, + IOAddress("0.0.0.0"), false, false, + "", true); + ctx.query_.reset(new Pkt4(DHCPDISCOVER, 1234)); + + // Look up the host. + AllocEngine::findReservation(ctx); + + // We should have the correct current host + EXPECT_TRUE(ctx.currentHost()); + EXPECT_EQ(ctx.currentHost()->getHostname(), host->getHostname()); + EXPECT_EQ(ctx.currentHost()->getIPv4Reservation(), host->getIPv4Reservation()); + + // We should allocate a dynamic address. + Lease4Ptr lease = engine.allocateLease4(ctx); + ASSERT_TRUE(lease); + EXPECT_EQ("192.0.2.100", lease->addr_.toText()); + + // This is a "fake" allocation so the returned lease should not be committed + // to the lease database. + EXPECT_FALSE(LeaseMgrFactory::instance().getLease4(lease->addr_)); + + // Client had no lease in the database, so the old lease returned should + // be NULL. + EXPECT_FALSE(ctx.old_lease_); +} + +// This test checks the behavior of the allocation engine in the following +// scenario: +// - Client has no lease in the database. +// - Client has a global reservation. +// - Client sends REQUEST +// - Client is allocated a dynamic address from matched subnet +// - Lease is added to the lease database +TEST_F(AllocEngine4Test, globalReservationDynamicRequest) { + // Create reservation for the client. + HostPtr host(new Host(&hwaddr_->hwaddr_[0], hwaddr_->hwaddr_.size(), + Host::IDENT_HWADDR, SUBNET_ID_GLOBAL, + SUBNET_ID_UNUSED, IOAddress::IPV4_ZERO_ADDRESS(), + "foo.example.org")); + CfgMgr::instance().getStagingCfg()->getCfgHosts()->add(host); + CfgMgr::instance().commit(); + + AllocEngine engine(AllocEngine::ALLOC_ITERATIVE, 0, false); + + subnet_->setHostReservationMode(Network::HR_GLOBAL); + + // Query allocation engine for the lease to be assigned to this + // client without specifying the address to be assigned. + AllocEngine::ClientContext4 ctx(subnet_, clientid_, hwaddr_, + IOAddress("0.0.0.0"), false, false, + "", false); + ctx.query_.reset(new Pkt4(DHCPREQUEST, 1234)); + + // Look up the host. + AllocEngine::findReservation(ctx); + + // We should have the correct current host + EXPECT_TRUE(ctx.currentHost()); + EXPECT_EQ(ctx.currentHost()->getHostname(), host->getHostname()); + EXPECT_EQ(ctx.currentHost()->getIPv4Reservation(), host->getIPv4Reservation()); + + // We should allocate a dynamic address. + Lease4Ptr lease = engine.allocateLease4(ctx); + ASSERT_TRUE(lease); + EXPECT_EQ("192.0.2.100", lease->addr_.toText()); + + // Check that the lease is indeed in LeaseMgr + Lease4Ptr from_mgr = LeaseMgrFactory::instance().getLease4(lease->addr_); + ASSERT_TRUE(from_mgr); + + // Now check that the lease in LeaseMgr has the same parameters + detailCompareLease(lease, from_mgr); + + // Client had no lease in the database, so the old lease returned should + // be NULL. + EXPECT_FALSE(ctx.old_lease_); +} + }; // namespace test }; // namespace dhcp }; // namespace isc diff --git a/src/lib/dhcpsrv/tests/alloc_engine_utils.cc b/src/lib/dhcpsrv/tests/alloc_engine_utils.cc index 30ac73677b..8fa12fa838 100644 --- a/src/lib/dhcpsrv/tests/alloc_engine_utils.cc +++ b/src/lib/dhcpsrv/tests/alloc_engine_utils.cc @@ -194,7 +194,7 @@ AllocEngine6Test::createHost6HWAddr(bool add_to_host_mgr, IPv6Resrv::Type type, HWAddrPtr& hwaddr, const asiolink::IOAddress& addr, uint8_t prefix_len) { HostPtr host(new Host(&hwaddr->hwaddr_[0], hwaddr->hwaddr_.size(), - Host::IDENT_HWADDR, SubnetID(0), subnet_->getID(), + Host::IDENT_HWADDR, SUBNET_ID_UNUSED, subnet_->getID(), asiolink::IOAddress("0.0.0.0"))); IPv6Resrv resv(type, addr, prefix_len); host->addReservation(resv); diff --git a/src/lib/dhcpsrv/tests/cfg_hosts_unittest.cc b/src/lib/dhcpsrv/tests/cfg_hosts_unittest.cc index 2496048e9c..9503c7a147 100644 --- a/src/lib/dhcpsrv/tests/cfg_hosts_unittest.cc +++ b/src/lib/dhcpsrv/tests/cfg_hosts_unittest.cc @@ -215,12 +215,12 @@ TEST_F(CfgHostsTest, getAll4ByAddress) { // Add host identified by the HW address. cfg.add(HostPtr(new Host(hwaddrs_[i]->toText(false), "hw-address", - SubnetID(1 + i), SubnetID(0), + SubnetID(1 + i), SUBNET_ID_UNUSED, IOAddress("192.0.2.5")))); // Add host identified by the DUID. cfg.add(HostPtr(new Host(duids_[i]->toText(), "duid", - SubnetID(1 + i), SubnetID(0), + SubnetID(1 + i), SUBNET_ID_UNUSED, IOAddress("192.0.2.10")))); } @@ -520,7 +520,7 @@ TEST_F(CfgHostsTest, get6ByAddr) { // Add host identified by DUID. HostPtr host = HostPtr(new Host(duids_[i]->toText(), "duid", - SubnetID(0), SubnetID(1 + i % 2), + SUBNET_ID_UNUSED, SubnetID(1 + i % 2), IOAddress("0.0.0.0"))); host->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA, increase(IOAddress("2001:db8:2::1"), @@ -553,7 +553,7 @@ TEST_F(CfgHostsTest, get6MultipleAddrs) { // Add host identified by DUID. HostPtr host = HostPtr(new Host(duids_[i]->toText(), "duid", - SubnetID(0), SubnetID(1 + i % 2), + SUBNET_ID_UNUSED, SubnetID(1 + i % 2), IOAddress("0.0.0.0"))); // Generate 5 unique addresses for this host. @@ -603,7 +603,7 @@ TEST_F(CfgHostsTest, add4AlreadyReserved) { // First host has a reservation for address 192.0.2.1 HostPtr host1 = HostPtr(new Host(hwaddrs_[0]->toText(false), "hw-address", - SubnetID(1), SubnetID(0), + SubnetID(1), SubnetID(SUBNET_ID_UNUSED), IOAddress("192.0.2.1"))); // Adding this should work. EXPECT_NO_THROW(cfg.add(host1)); @@ -611,7 +611,7 @@ TEST_F(CfgHostsTest, add4AlreadyReserved) { // The second host has a reservation for the same address. HostPtr host2 = HostPtr(new Host(hwaddrs_[1]->toText(false), "hw-address", - SubnetID(1), SubnetID(0), + SubnetID(1), SUBNET_ID_UNUSED, IOAddress("192.0.2.1"))); // This second host has a reservation for an address that is already @@ -626,7 +626,7 @@ TEST_F(CfgHostsTest, add6Invalid2Hosts) { // First host has a reservation for address 2001:db8::1 HostPtr host1 = HostPtr(new Host(duids_[0]->toText(), "duid", - SubnetID(0), SubnetID(1), + SUBNET_ID_UNUSED, SubnetID(1), IOAddress("0.0.0.0"))); host1->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA, IOAddress("2001:db8::1"))); @@ -635,7 +635,7 @@ TEST_F(CfgHostsTest, add6Invalid2Hosts) { // The second host has a reservation for the same address. HostPtr host2 = HostPtr(new Host(duids_[1]->toText(), "duid", - SubnetID(0), SubnetID(1), + SUBNET_ID_UNUSED, SubnetID(1), IOAddress("0.0.0.0"))); host2->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA, IOAddress("2001:db8::1"))); @@ -645,13 +645,24 @@ TEST_F(CfgHostsTest, add6Invalid2Hosts) { EXPECT_THROW(cfg.add(host2), isc::dhcp::DuplicateHost); } +// Check that no error is reported when adding a host with subnet +// ids equal to global. +TEST_F(CfgHostsTest, globalSubnetIDs) { + CfgHosts cfg; + ASSERT_NO_THROW(cfg.add(HostPtr(new Host(hwaddrs_[0]->toText(false), + "hw-address", + SUBNET_ID_GLOBAL, SUBNET_ID_GLOBAL, + IOAddress("10.0.0.1"))))); +} + + // Check that error is reported when trying to add a host with subnet -// ids equal to zero. -TEST_F(CfgHostsTest, zeroSubnetIDs) { +// ids equal to unused. +TEST_F(CfgHostsTest, unusedSubnetIDs) { CfgHosts cfg; ASSERT_THROW(cfg.add(HostPtr(new Host(hwaddrs_[0]->toText(false), "hw-address", - SubnetID(0), SubnetID(0), + SUBNET_ID_UNUSED, SUBNET_ID_UNUSED, IOAddress("10.0.0.1")))), isc::BadValue); } @@ -663,21 +674,21 @@ TEST_F(CfgHostsTest, duplicatesSubnet4HWAddr) { // Add a host. ASSERT_NO_THROW(cfg.add(HostPtr(new Host(hwaddrs_[0]->toText(false), "hw-address", - SubnetID(10), SubnetID(0), + SubnetID(10), SUBNET_ID_UNUSED, IOAddress("10.0.0.1"))))); // Try to add the host with the same HW address to the same subnet. The fact // that the IP address is different here shouldn't really matter. EXPECT_THROW(cfg.add(HostPtr(new Host(hwaddrs_[0]->toText(false), "hw-address", - SubnetID(10), SubnetID(0), + SubnetID(10), SUBNET_ID_UNUSED, IOAddress("10.0.0.10")))), isc::dhcp::DuplicateHost); // Now try to add it to a different subnet. It should go through. EXPECT_NO_THROW(cfg.add(HostPtr(new Host(hwaddrs_[0]->toText(false), "hw-address", - SubnetID(11), SubnetID(0), + SubnetID(11), SUBNET_ID_UNUSED, IOAddress("10.0.0.10"))))); } @@ -688,21 +699,21 @@ TEST_F(CfgHostsTest, duplicatesSubnet4DUID) { // Add a host. ASSERT_NO_THROW(cfg.add(HostPtr(new Host(duids_[0]->toText(), "duid", - SubnetID(10), SubnetID(0), + SubnetID(10), SUBNET_ID_UNUSED, IOAddress("10.0.0.1"))))); // Try to add the host with the same DUID to the same subnet. The fact // that the IP address is different here shouldn't really matter. EXPECT_THROW(cfg.add(HostPtr(new Host(duids_[0]->toText(), "duid", - SubnetID(10), SubnetID(0), + SubnetID(10), SUBNET_ID_UNUSED, IOAddress("10.0.0.10")))), isc::dhcp::DuplicateHost); // Now try to add it to a different subnet. It should go through. EXPECT_NO_THROW(cfg.add(HostPtr(new Host(duids_[0]->toText(), "duid", - SubnetID(11), SubnetID(0), + SubnetID(11), SUBNET_ID_UNUSED, IOAddress("10.0.0.10"))))); } @@ -713,7 +724,7 @@ TEST_F(CfgHostsTest, duplicatesSubnet6HWAddr) { // Add a host. ASSERT_NO_THROW(cfg.add(HostPtr(new Host(hwaddrs_[0]->toText(false), "hw-address", - SubnetID(0), SubnetID(1), + SUBNET_ID_UNUSED, SubnetID(1), IOAddress("0.0.0.0"), "foo.example.com")))); @@ -721,7 +732,7 @@ TEST_F(CfgHostsTest, duplicatesSubnet6HWAddr) { // that the IP address is different here shouldn't really matter. EXPECT_THROW(cfg.add(HostPtr(new Host(hwaddrs_[0]->toText(false), "hw-address", - SubnetID(0), SubnetID(1), + SUBNET_ID_UNUSED, SubnetID(1), IOAddress("0.0.0.0"), "foo.example.com"))), isc::dhcp::DuplicateHost); @@ -729,7 +740,7 @@ TEST_F(CfgHostsTest, duplicatesSubnet6HWAddr) { // Now try to add it to a different subnet. It should go through. EXPECT_NO_THROW(cfg.add(HostPtr(new Host(hwaddrs_[0]->toText(false), "hw-address", - SubnetID(0), SubnetID(2), + SUBNET_ID_UNUSED, SubnetID(2), IOAddress("0.0.0.0"), "foo.example.com")))); } @@ -741,7 +752,7 @@ TEST_F(CfgHostsTest, duplicatesSubnet6DUID) { // Add a host. ASSERT_NO_THROW(cfg.add(HostPtr(new Host(duids_[0]->toText(), "duid", - SubnetID(0), SubnetID(1), + SUBNET_ID_UNUSED, SubnetID(1), IOAddress("0.0.0.0"), "foo.example.com")))); @@ -749,7 +760,7 @@ TEST_F(CfgHostsTest, duplicatesSubnet6DUID) { // that the IP address is different here shouldn't really matter. EXPECT_THROW(cfg.add(HostPtr(new Host(duids_[0]->toText(), "duid", - SubnetID(0), SubnetID(1), + SUBNET_ID_UNUSED, SubnetID(1), IOAddress("0.0.0.0"), "foo.example.com"))), isc::dhcp::DuplicateHost); @@ -757,7 +768,7 @@ TEST_F(CfgHostsTest, duplicatesSubnet6DUID) { // Now try to add it to a different subnet. It should go through. EXPECT_NO_THROW(cfg.add(HostPtr(new Host(duids_[0]->toText(), "duid", - SubnetID(0), SubnetID(2), + SUBNET_ID_UNUSED, SubnetID(2), IOAddress("0.0.0.0"), "foo.example.com")))); } diff --git a/src/lib/dhcpsrv/tests/cql_host_data_source_unittest.cc b/src/lib/dhcpsrv/tests/cql_host_data_source_unittest.cc index 46c21e5337..18eb98b4a9 100644 --- a/src/lib/dhcpsrv/tests/cql_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/tests/cql_host_data_source_unittest.cc @@ -662,4 +662,30 @@ TEST_F(CqlHostDataSourceTest, testMultipleHosts6) { testMultipleHosts6(); } +// Verifies that IPv4 host reservation with options can have a the global +// subnet id value +TEST_F(CqlHostDataSourceTest, globalSubnetId4) { + testGlobalSubnetId4(); +} + +// Verifies that IPv6 host reservation with options can have a the global +// subnet id value +TEST_F(CqlHostDataSourceTest, globalSubnetId6) { + testGlobalSubnetId6(); +} + +// Verifies that IPv4 host reservation with options can have a max value +// for dhcp4_subnet id +TEST_F(CqlHostDataSourceTest, maxSubnetId4) { + testMaxSubnetId4(); +} + +// Verifies that IPv6 host reservation with options can have a max value +// for dhcp6_subnet id +TEST_F(CqlHostDataSourceTest, maxSubnetId6) { + testMaxSubnetId6(); +} + + + } // namespace diff --git a/src/lib/dhcpsrv/tests/host_mgr_unittest.cc b/src/lib/dhcpsrv/tests/host_mgr_unittest.cc index f4bca8ad9a..9432ae9468 100644 --- a/src/lib/dhcpsrv/tests/host_mgr_unittest.cc +++ b/src/lib/dhcpsrv/tests/host_mgr_unittest.cc @@ -187,7 +187,7 @@ HostMgrTest::addHost4(BaseHostDataSource& data_source, const SubnetID& subnet_id, const IOAddress& address) { data_source.add(HostPtr(new Host(hwaddr->toText(false), - "hw-address", subnet_id, SubnetID(0), + "hw-address", subnet_id, SUBNET_ID_UNUSED, address))); } @@ -330,7 +330,7 @@ HostMgrTest::testGet4Any() { // Add new host to the database. HostPtr new_host(new Host(duids_[0]->toText(), "duid", SubnetID(1), - SubnetID(0), IOAddress("192.0.2.5"))); + SUBNET_ID_UNUSED, IOAddress("192.0.2.5"))); // Abuse of the server's configuration. getCfgHosts()->add(new_host); @@ -543,7 +543,7 @@ TEST_F(HostMgrTest, addNoDataSource) { HostMgr::create(); HostPtr host(new Host(hwaddrs_[0]->toText(false), "hw-address", - SubnetID(1), SubnetID(0), IOAddress("192.0.2.5"))); + SubnetID(1), SUBNET_ID_UNUSED, IOAddress("192.0.2.5"))); EXPECT_THROW(HostMgr::instance().add(host), NoHostDataSourceManager); } diff --git a/src/lib/dhcpsrv/tests/host_reservation_parser_unittest.cc b/src/lib/dhcpsrv/tests/host_reservation_parser_unittest.cc index 4712450137..a608136b3a 100644 --- a/src/lib/dhcpsrv/tests/host_reservation_parser_unittest.cc +++ b/src/lib/dhcpsrv/tests/host_reservation_parser_unittest.cc @@ -154,7 +154,7 @@ protected: ASSERT_TRUE(host); EXPECT_EQ(10, host->getIPv4SubnetID()); - EXPECT_EQ(0, host->getIPv6SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, host->getIPv6SubnetID()); EXPECT_EQ("192.0.2.112", host->getIPv4Reservation().toText()); EXPECT_TRUE(host->getHostname().empty()); } @@ -370,7 +370,7 @@ TEST_F(HostReservationParserTest, dhcp4NoHostname) { ASSERT_EQ(1, hosts.size()); EXPECT_EQ(10, hosts[0]->getIPv4SubnetID()); - EXPECT_EQ(0, hosts[0]->getIPv6SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, hosts[0]->getIPv6SubnetID()); EXPECT_EQ("192.0.2.10", hosts[0]->getIPv4Reservation().toText()); EXPECT_TRUE(hosts[0]->getHostname().empty()); @@ -563,7 +563,7 @@ TEST_F(HostReservationParserTest, noIPAddress) { ASSERT_EQ(1, hosts.size()); EXPECT_EQ(10, hosts[0]->getIPv4SubnetID()); - EXPECT_EQ(0, hosts[0]->getIPv6SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, hosts[0]->getIPv6SubnetID()); EXPECT_EQ("0.0.0.0", hosts[0]->getIPv4Reservation().toText()); EXPECT_EQ("foo.example.com", hosts[0]->getHostname()); @@ -676,7 +676,7 @@ TEST_F(HostReservationParserTest, dhcp6HWaddr) { hwaddr_->hwaddr_.size())); ASSERT_EQ(1, hosts.size()); - EXPECT_EQ(0, hosts[0]->getIPv4SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, hosts[0]->getIPv4SubnetID()); EXPECT_EQ(10, hosts[0]->getIPv6SubnetID()); EXPECT_EQ("foo.example.com", hosts[0]->getHostname()); @@ -746,7 +746,7 @@ TEST_F(HostReservationParserTest, dhcp6DUID) { duid_->getDuid().size())); ASSERT_EQ(1, hosts.size()); - EXPECT_EQ(0, hosts[0]->getIPv4SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, hosts[0]->getIPv4SubnetID()); EXPECT_EQ(12, hosts[0]->getIPv6SubnetID()); EXPECT_EQ("foo.example.com", hosts[0]->getHostname()); @@ -827,7 +827,7 @@ TEST_F(HostReservationParserTest, dhcp6NoHostname) { duid_->getDuid().size())); ASSERT_EQ(1, hosts.size()); - EXPECT_EQ(0, hosts[0]->getIPv4SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, hosts[0]->getIPv4SubnetID()); EXPECT_EQ(12, hosts[0]->getIPv6SubnetID()); EXPECT_TRUE(hosts[0]->getHostname().empty()); diff --git a/src/lib/dhcpsrv/tests/host_reservations_list_parser_unittest.cc b/src/lib/dhcpsrv/tests/host_reservations_list_parser_unittest.cc index 80583aa6e0..5827c0234b 100644 --- a/src/lib/dhcpsrv/tests/host_reservations_list_parser_unittest.cc +++ b/src/lib/dhcpsrv/tests/host_reservations_list_parser_unittest.cc @@ -180,7 +180,7 @@ TEST_F(HostReservationsListParserTest, ipv4Reservations) { ASSERT_EQ(1, hosts.size()); EXPECT_EQ(1, hosts[0]->getIPv4SubnetID()); - EXPECT_EQ(0, hosts[0]->getIPv6SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, hosts[0]->getIPv6SubnetID()); EXPECT_EQ("192.0.2.134", hosts[0]->getIPv4Reservation().toText()); EXPECT_EQ("foo.example.com", hosts[0]->getHostname()); @@ -191,7 +191,7 @@ TEST_F(HostReservationsListParserTest, ipv4Reservations) { ASSERT_EQ(1, hosts.size()); EXPECT_EQ(1, hosts[0]->getIPv4SubnetID()); - EXPECT_EQ(0, hosts[0]->getIPv6SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, hosts[0]->getIPv6SubnetID()); EXPECT_EQ("192.0.2.110", hosts[0]->getIPv4Reservation().toText()); EXPECT_EQ("bar.example.com", hosts[0]->getHostname()); @@ -205,7 +205,7 @@ TEST_F(HostReservationsListParserTest, ipv4Reservations) { runToElementTest("[ ]", cfg_subnet6); CfgMgr::instance().setFamily(AF_INET); - CfgHostsSubnet cfg_subnet1(cfg_hosts, SubnetID(0)); + CfgHostsSubnet cfg_subnet1(cfg_hosts, SUBNET_ID_UNUSED); runToElementTest("[ ]", cfg_subnet1); } @@ -292,7 +292,7 @@ TEST_F(HostReservationsListParserTest, ipv6Reservations) { ASSERT_EQ(1, hosts.size()); // Make sure it belongs to a valid subnet. - EXPECT_EQ(0, hosts[0]->getIPv4SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, hosts[0]->getIPv4SubnetID()); EXPECT_EQ(2, hosts[0]->getIPv6SubnetID()); // Get the reserved addresses for the host. There should be exactly one @@ -311,7 +311,7 @@ TEST_F(HostReservationsListParserTest, ipv6Reservations) { duid_->getDuid().size())); ASSERT_EQ(1, hosts.size()); - EXPECT_EQ(0, hosts[0]->getIPv4SubnetID()); + EXPECT_EQ(SUBNET_ID_UNUSED, hosts[0]->getIPv4SubnetID()); EXPECT_EQ(2, hosts[0]->getIPv6SubnetID()); // This reservation was for a prefix, instead of an IPv6 address. diff --git a/src/lib/dhcpsrv/tests/host_unittest.cc b/src/lib/dhcpsrv/tests/host_unittest.cc index 674bca8009..e817a3a23f 100644 --- a/src/lib/dhcpsrv/tests/host_unittest.cc +++ b/src/lib/dhcpsrv/tests/host_unittest.cc @@ -983,7 +983,7 @@ TEST_F(HostTest, toText) { // Reset some of the data and make sure that the output is affected. host->setHostname(""); host->removeIPv4Reservation(); - host->setIPv4SubnetID(0); + host->setIPv4SubnetID(SUBNET_ID_UNUSED); host->setNegative(true); EXPECT_EQ("hwaddr=010203040506 ipv6_subnet_id=2" @@ -1001,7 +1001,7 @@ TEST_F(HostTest, toText) { // Create host identified by DUID, instead of HWADDR, with a very // basic configuration. ASSERT_NO_THROW(host.reset(new Host("11:12:13:14:15", "duid", - SubnetID(0), SubnetID(0), + SUBNET_ID_UNUSED, SUBNET_ID_UNUSED, IOAddress::IPV4_ZERO_ADDRESS(), "myhost"))); @@ -1035,6 +1035,20 @@ TEST_F(HostTest, toText) { " dhcp4_class0=modem dhcp4_class1=router" " dhcp6_class0=hub dhcp6_class1=device", host->toText()); + + // Create global host identified by DUID, with a very basic configuration. + ASSERT_NO_THROW(host.reset(new Host("11:12:13:14:15", "duid", + SUBNET_ID_GLOBAL, SUBNET_ID_GLOBAL, + IOAddress::IPV4_ZERO_ADDRESS(), + "myhost"))); + + EXPECT_EQ("duid=1112131415 ipv4_subnet_id=0 ipv6_subnet_id=0 " + "hostname=myhost ipv4_reservation=(no)" + " siaddr=(no)" + " sname=(empty)" + " file=(empty)" + " ipv6_reservations=(none)", host->toText()); + } // This test checks that Host object is correctly unparsed, @@ -1089,7 +1103,7 @@ TEST_F(HostTest, unparse) { // Reset some of the data and make sure that the output is affected. host->setHostname(""); host->removeIPv4Reservation(); - host->setIPv4SubnetID(0); + host->setIPv4SubnetID(SUBNET_ID_UNUSED); EXPECT_EQ("{ " "\"boot-file-name\": \"\", " @@ -1117,7 +1131,7 @@ TEST_F(HostTest, unparse) { // Create host identified by DUID, instead of HWADDR, with a very // basic configuration. ASSERT_NO_THROW(host.reset(new Host("11:12:13:14:15", "duid", - SubnetID(0), SubnetID(0), + SUBNET_ID_UNUSED, SUBNET_ID_UNUSED, IOAddress::IPV4_ZERO_ADDRESS(), "myhost"))); diff --git a/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc b/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc index 92ceff5dcc..8c88716993 100644 --- a/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc @@ -285,6 +285,18 @@ TEST_F(MySqlHostDataSourceTest, basic4HWAddr) { testBasic4(Host::IDENT_HWADDR); } +// Verifies that IPv4 host reservation with options can have a the global +// subnet id value +TEST_F(MySqlHostDataSourceTest, globalSubnetId4) { + testGlobalSubnetId4(); +} + +// Verifies that IPv6 host reservation with options can have a the global +// subnet id value +TEST_F(MySqlHostDataSourceTest, globalSubnetId6) { + testGlobalSubnetId6(); +} + // Verifies that IPv4 host reservation with options can have a max value // for dhcp4_subnet id TEST_F(MySqlHostDataSourceTest, maxSubnetId4) { diff --git a/src/lib/dhcpsrv/tests/pgsql_host_data_source_unittest.cc b/src/lib/dhcpsrv/tests/pgsql_host_data_source_unittest.cc index df2122d475..54bc8166af 100644 --- a/src/lib/dhcpsrv/tests/pgsql_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/tests/pgsql_host_data_source_unittest.cc @@ -270,6 +270,18 @@ TEST_F(PgSqlHostDataSourceTest, basic4HWAddr) { testBasic4(Host::IDENT_HWADDR); } +// Verifies that IPv4 host reservation with options can have a the global +// subnet id value +TEST_F(PgSqlHostDataSourceTest, globalSubnetId4) { + testGlobalSubnetId4(); +} + +// Verifies that IPv6 host reservation with options can have a the global +// subnet id value +TEST_F(PgSqlHostDataSourceTest, globalSubnetId6) { + testGlobalSubnetId6(); +} + // Verifies that IPv4 host reservation with options can have a max value // for dhcp4_subnet id TEST_F(PgSqlHostDataSourceTest, maxSubnetId4) { diff --git a/src/lib/dhcpsrv/tests/srv_config_unittest.cc b/src/lib/dhcpsrv/tests/srv_config_unittest.cc index 4d8fae1b62..421caf8758 100644 --- a/src/lib/dhcpsrv/tests/srv_config_unittest.cc +++ b/src/lib/dhcpsrv/tests/srv_config_unittest.cc @@ -582,14 +582,20 @@ TEST_F(SrvConfigTest, unparseHR) { def_triplet, def_triplet, 4000, s_id)); network4->add(ssubnet4); + // Add a v4 global host reservation to the plain subnet + HostPtr ghost4(new Host("AA:01:02:03:04:05", "hw-address", + SUBNET_ID_GLOBAL, SUBNET_ID_UNUSED, + IOAddress("192.0.3.1"))); + conf4.getCfgHosts()->add(ghost4); + // Add a host reservation to the plain subnet HostPtr phost4(new Host("00:01:02:03:04:05", "hw-address", - p_id, SubnetID(0), IOAddress("192.0.1.1"))); + p_id, SUBNET_ID_UNUSED, IOAddress("192.0.1.1"))); conf4.getCfgHosts()->add(phost4); // Add a host reservation to the shared subnet HostPtr shost4(new Host("00:05:04:03:02:01", "hw-address", - s_id, SubnetID(0), IOAddress("192.0.2.1"))); + s_id, SUBNET_ID_UNUSED, IOAddress("192.0.2.1"))); conf4.getCfgHosts()->add(shost4); // Unparse the config @@ -603,8 +609,25 @@ TEST_F(SrvConfigTest, unparseHR) { ASSERT_TRUE(dhcp4); ASSERT_EQ(Element::map, dhcp4->getType()); - // Get plain subnets + // Get global host reservations ConstElementPtr check; + ASSERT_NO_THROW(check = dhcp4->get("reservations")); + ASSERT_TRUE(check); + ASSERT_EQ(Element::list, check->getType()); + EXPECT_EQ(1, check->size()); + + // Get the global host reservation + ASSERT_NO_THROW(check = check->get(0)); + ASSERT_TRUE(check); + ASSERT_EQ(Element::map, check->getType()); + + // Check the reserved address + ASSERT_NO_THROW(check = check->get("ip-address")); + ASSERT_TRUE(check); + ASSERT_EQ(Element::string, check->getType()); + EXPECT_EQ("192.0.3.1", check->stringValue()); + + // Get plain subnets ASSERT_NO_THROW(check = dhcp4->get("subnet4")); ASSERT_TRUE(check); ASSERT_EQ(Element::list, check->getType()); @@ -708,14 +731,21 @@ TEST_F(SrvConfigTest, unparseHR) { 1000, 2000, 3000, 4000, s_id)); network6->add(ssubnet6); + // Add a v6 global host reservation + HostPtr ghost6(new Host("ff:b2:c3:d4:e5:f6", "duid", SUBNET_ID_UNUSED, + SUBNET_ID_GLOBAL, IOAddress::IPV4_ZERO_ADDRESS(), + "global.example.org")); + conf6.getCfgHosts()->add(ghost6); + // Add a host reservation to the plain subnet - HostPtr phost6(new Host("a1:b2:c3:d4:e5:f6", "duid", SubnetID(0), + HostPtr phost6(new Host("a1:b2:c3:d4:e5:f6", "duid", SUBNET_ID_UNUSED, p_id, IOAddress::IPV4_ZERO_ADDRESS(), "foo.example.org")); + conf6.getCfgHosts()->add(phost6); // Add a host reservation to the shared subnet - HostPtr shost6(new Host("f6:e5:d4:c3:b2:a1", "duid", SubnetID(0), + HostPtr shost6(new Host("f6:e5:d4:c3:b2:a1", "duid", SUBNET_ID_UNUSED, s_id, IOAddress::IPV4_ZERO_ADDRESS(), "bar.example.org")); conf6.getCfgHosts()->add(shost6); @@ -731,6 +761,23 @@ TEST_F(SrvConfigTest, unparseHR) { ASSERT_TRUE(dhcp6); ASSERT_EQ(Element::map, dhcp6->getType()); + // Get global host reservations + ASSERT_NO_THROW(check = dhcp6->get("reservations")); + ASSERT_TRUE(check); + ASSERT_EQ(Element::list, check->getType()); + EXPECT_EQ(1, check->size()); + + // Get the global host reservation + ASSERT_NO_THROW(check = check->get(0)); + ASSERT_TRUE(check); + ASSERT_EQ(Element::map, check->getType()); + + // Check the host name + ASSERT_NO_THROW(check = check->get("hostname")); + ASSERT_TRUE(check); + ASSERT_EQ(Element::string, check->getType()); + EXPECT_EQ("global.example.org", check->stringValue()); + // Get plain subnets ASSERT_NO_THROW(check = dhcp6->get("subnet6")); ASSERT_TRUE(check); diff --git a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc index 2e7ef08ad8..3ee71e0fff 100644 --- a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc @@ -259,14 +259,77 @@ GenericHostDataSourceTest::testBasic4(const Host::IdentifierType& id) { HostDataSourceUtils::compareHosts(host, from_hds); } +void +GenericHostDataSourceTest::testGlobalSubnetId4() { + std::vector ident; + + ident = HostDataSourceUtils::generateIdentifier(); + SubnetID subnet_id4 = SUBNET_ID_GLOBAL; + HostPtr host(new Host(&ident[0], ident.size(), Host::IDENT_DUID, + subnet_id4, SUBNET_ID_UNUSED, IOAddress("0.0.0.0"))); + + ASSERT_NO_THROW(addTestOptions(host, true, DHCP4_ONLY)); + (hdsptr_->add(host)); + //ASSERT_NO_THROW(hdsptr_->add(host)); + + // get4(subnet_id, identifier_type, identifier, identifier_size) + ConstHostPtr host_by_id = hdsptr_->get4(subnet_id4, + host->getIdentifierType(), + &host->getIdentifier()[0], + host->getIdentifier().size()); + + ASSERT_NO_FATAL_FAILURE(HostDataSourceUtils::compareHosts(host, host_by_id)); + + // Now try to delete it: del4(subnet4-id, identifier-type, identifier) + EXPECT_TRUE(hdsptr_->del4(subnet_id4, Host::IDENT_DUID, &ident[0], + ident.size())); + + host_by_id = hdsptr_->get4(subnet_id4, host->getIdentifierType(), + &host->getIdentifier()[0], + host->getIdentifier().size()); + + EXPECT_FALSE(host_by_id); +} + +void GenericHostDataSourceTest::testGlobalSubnetId6() { + std::vector ident; + + ident = HostDataSourceUtils::generateIdentifier(); + SubnetID subnet_id6 = SUBNET_ID_GLOBAL; + HostPtr host(new Host(&ident[0], ident.size(), Host::IDENT_DUID, + SUBNET_ID_UNUSED, subnet_id6, IOAddress("0.0.0.0"))); + + ASSERT_NO_THROW(addTestOptions(host, true, DHCP6_ONLY)); + ASSERT_NO_THROW(hdsptr_->add(host)); + + // get6(subnet_id, identifier_type, identifier, identifier_size) + ConstHostPtr host_by_id = hdsptr_->get6(subnet_id6, + host->getIdentifierType(), + &host->getIdentifier()[0], + host->getIdentifier().size()); + + ASSERT_NO_FATAL_FAILURE(HostDataSourceUtils::compareHosts(host, host_by_id)); + + // Now try to delete it: del6(subnet6-id, identifier-type, identifier) + EXPECT_TRUE(hdsptr_->del6(subnet_id6, Host::IDENT_DUID, &ident[0], + ident.size())); + + host_by_id = hdsptr_->get4(subnet_id6, host->getIdentifierType(), + &host->getIdentifier()[0], + host->getIdentifier().size()); + + EXPECT_FALSE(host_by_id); +} + + void GenericHostDataSourceTest::testMaxSubnetId4() { std::vector ident; ident = HostDataSourceUtils::generateIdentifier(); - SubnetID subnet_id4 = numeric_limits::max(); + SubnetID subnet_id4 = SUBNET_ID_MAX; HostPtr host(new Host(&ident[0], ident.size(), Host::IDENT_DUID, - subnet_id4, 0, IOAddress("0.0.0.0"))); + subnet_id4, SUBNET_ID_UNUSED, IOAddress("0.0.0.0"))); ASSERT_NO_THROW(addTestOptions(host, true, DHCP4_ONLY)); ASSERT_NO_THROW(hdsptr_->add(host)); @@ -294,9 +357,9 @@ void GenericHostDataSourceTest::testMaxSubnetId6() { std::vector ident; ident = HostDataSourceUtils::generateIdentifier(); - SubnetID subnet_id6 = numeric_limits::max(); + SubnetID subnet_id6 = SUBNET_ID_MAX; HostPtr host(new Host(&ident[0], ident.size(), Host::IDENT_DUID, - 0, subnet_id6, IOAddress("0.0.0.0"))); + SUBNET_ID_UNUSED, subnet_id6, IOAddress("0.0.0.0"))); ASSERT_NO_THROW(addTestOptions(host, true, DHCP6_ONLY)); ASSERT_NO_THROW(hdsptr_->add(host)); @@ -558,13 +621,11 @@ GenericHostDataSourceTest::testMultipleSubnets(int subnets, ASSERT_TRUE(hdsptr_); HostPtr host = HostDataSourceUtils::initializeHost4("192.0.2.1", id); - host->setIPv6SubnetID(0); + host->setIPv6SubnetID(SUBNET_ID_UNUSED); for (int i = 0; i < subnets; ++i) { host->setIPv4SubnetID(i + 1000); - - // Check that the same host can have reservations in multiple subnets. - EXPECT_NO_THROW(hdsptr_->add(host)); + ASSERT_NO_THROW(hdsptr_->add(host)); } // Now check that the reservations can be retrieved by IPv4 address from @@ -1496,7 +1557,7 @@ GenericHostDataSourceTest::testMultipleHostsNoAddress4() { // Create a host with zero IPv4 address. HostPtr host1 = HostDataSourceUtils::initializeHost4("0.0.0.0", Host::IDENT_HWADDR); host1->setIPv4SubnetID(1); - host1->setIPv6SubnetID(0); + host1->setIPv6SubnetID(SUBNET_ID_UNUSED); // Add the host to the database. ASSERT_NO_THROW(hdsptr_->add(host1)); @@ -1509,7 +1570,7 @@ GenericHostDataSourceTest::testMultipleHostsNoAddress4() { // in the unique index. HostPtr host2 = HostDataSourceUtils::initializeHost4("0.0.0.0", Host::IDENT_HWADDR); host2->setIPv4SubnetID(1); - host2->setIPv6SubnetID(0); + host2->setIPv6SubnetID(SUBNET_ID_UNUSED); ASSERT_NO_THROW(hdsptr_->add(host2)); } @@ -1520,7 +1581,7 @@ GenericHostDataSourceTest::testMultipleHosts6() { // Create first host. HostPtr host1 = HostDataSourceUtils::initializeHost6("2001:db8::1", Host::IDENT_DUID, false); - host1->setIPv4SubnetID(0); + host1->setIPv4SubnetID(SUBNET_ID_UNUSED); host1->setIPv6SubnetID(1); // Add the host to the database. ASSERT_NO_THROW(hdsptr_->add(host1)); @@ -1530,7 +1591,7 @@ GenericHostDataSourceTest::testMultipleHosts6() { ASSERT_THROW(hdsptr_->add(host1), DuplicateEntry); HostPtr host2 = HostDataSourceUtils::initializeHost6("2001:db8::2", Host::IDENT_DUID, false); - host2->setIPv4SubnetID(0); + host2->setIPv4SubnetID(SUBNET_ID_UNUSED); host2->setIPv6SubnetID(1); // Add the host to the database. ASSERT_NO_THROW(hdsptr_->add(host2)); diff --git a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.h b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.h index 250943f5f1..46653bb382 100644 --- a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.h +++ b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.h @@ -312,8 +312,19 @@ public: /// @param id Identifier type. void testBasic4(const Host::IdentifierType& id); + /// @brief Test that verifies that an IPv4 host reservation with + /// options can have the global subnet id value. + /// + /// Uses gtest macros to report failures. + void testGlobalSubnetId4(); + + /// @brief Test that verifies that an IPv6 host reservation with + /// options can have the global subnet id value. + /// + /// Uses gtest macros to report failures. + void testGlobalSubnetId6(); - /// @brief Test that Verifies that an IPv4 host reservation with + /// @brief Test that verifies that an IPv4 host reservation with /// options can have a max value for dhcp4_subnet id /// /// Uses gtest macros to report failures.