]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5535] kea-dhcp6 parsing now supports relay "ip-addresses"
authorThomas Markwalder <tmark@isc.org>
Thu, 26 Apr 2018 18:24:46 +0000 (14:24 -0400)
committerThomas Markwalder <tmark@isc.org>
Thu, 26 Apr 2018 18:24:46 +0000 (14:24 -0400)
src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_parser.yy
    Modified to support "ip-address" and
    "ip-addresses" under "relay"

src/bin/dhcp6/tests/get_config_unittest.cc
    Updated per process.

src/bin/dhcp6/tests/config_parser_unittest.cc
    void checkResult() - modified to output parsing error text

    TEST_F(Dhcp6ParserTest, subnetRelayInfo)
    TEST_F(Dhcp6ParserTest, sharedNetworksDerive)
    - updated to use new Network methods

    TEST_F(Dhcp6ParserTest, subnetRelayInfoList) - new test
    to verify a list of addresses in relay

src/bin/dhcp6/dhcp6_lexer.cc
src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/dhcp6_parser.h
src/bin/dhcp6/dhcp6_parser.yy
src/bin/dhcp6/location.hh
src/bin/dhcp6/position.hh
src/bin/dhcp6/stack.hh
src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/get_config_unittest.cc

index 60ac92295d175d7be40a78e508983a2ea5747eb5..25d548e897cd346106feb1192267fa050fe9847c 100644 (file)
@@ -1,27 +1,22 @@
-#line 1 "dhcp6_lexer.cc"
+#line 2 "dhcp6_lexer.cc"
 
-#line 3 "dhcp6_lexer.cc"
+#line 4 "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_scan_buffer parser6__scan_buffer
-#define yy_scan_string parser6__scan_string
-#define yy_scan_bytes parser6__scan_bytes
+#define yy_flex_debug parser6__flex_debug
 #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
@@ -41,7 +36,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 4
+#define YY_FLEX_SUBMINOR_VERSION 0
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
 /* %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. */
@@ -365,39 +127,50 @@ 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 */
 
-/* TODO: this is always defined, so inline it */
-#define yyconst const
+#ifdef __cplusplus
 
-#if defined(__GNUC__) && __GNUC__ >= 3
-#define yynoreturn __attribute__((__noreturn__))
+/* 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
+#define yyconst const
 #else
-#define yynoreturn
+#define yyconst
 #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
- *   integer in range [0..255] for use as an array index.
+
+/* 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.
  */
-#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
 /* %ok-for-header */
 
 /* %if-reentrant */
@@ -412,16 +185,20 @@ 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 yyrestart( yyin  )
+#define YY_NEW_FILE parser6_restart(parser6_in  )
+
 #define YY_END_OF_BUFFER_CHAR 0
 
 /* Size of default input buffer. */
@@ -452,19 +229,19 @@ typedef size_t yy_size_t;
 #endif
 
 /* %if-not-reentrant */
-extern int yyleng;
+extern yy_size_t parser6_leng;
 /* %endif */
 
 /* %if-c-only */
 /* %if-not-reentrant */
-extern FILE *yyin, *yyout;
+extern FILE *parser6_in, *parser6_out;
 /* %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)
     
@@ -472,15 +249,16 @@ extern FILE *yyin, *yyout;
 #define yyless(n) \
        do \
                { \
-               /* Undo effects of setting up yytext. */ \
+               /* Undo effects of setting up parser6_text. */ \
         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 yytext again */ \
+               YY_DO_BEFORE_ACTION; /* set up parser6_text again */ \
                } \
        while ( 0 )
+
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -500,7 +278,7 @@ struct yy_buffer_state
        /* Size of input buffer in bytes, not including room for EOB
         * characters.
         */
-       int yy_buf_size;
+       yy_size_t yy_buf_size;
 
        /* Number of characters read into yy_ch_buf, not including EOB
         * characters.
@@ -528,7 +306,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.
         */
@@ -545,8 +323,8 @@ struct yy_buffer_state
         * possible backing-up.
         *
         * When we actually see the EOF, we change the status to "new"
-        * (via yyrestart()), so that the user can continue scanning by
-        * just pointing yyin at a new input file.
+        * (via parser6_restart()), so that the user can continue scanning by
+        * just pointing parser6_in at a new input file.
         */
 #define YY_BUFFER_EOF_PENDING 2
 
@@ -555,12 +333,13 @@ 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 = NULL; /**< Stack as an array. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 /* %endif */
 /* %ok-for-header */
 
@@ -575,6 +354,7 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< 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.
  */
@@ -584,112 +364,123 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 
 /* %if-not-reentrant */
 /* %not-for-header */
-/* yy_hold_char holds the character lost when yytext is formed. */
+
+/* yy_hold_char holds the character lost when parser6_text is formed. */
 static char yy_hold_char;
 static int yy_n_chars;         /* number of characters read into yy_ch_buf */
-int yyleng;
+yy_size_t parser6_leng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = NULL;
+static char *yy_c_buf_p = (char *) 0;
 static int yy_init = 0;                /* whether we need to initialize */
 static int yy_start = 0;       /* start state number */
 
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin.  A bit of a hack ...
+/* 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 ...
  */
 static int yy_did_buffer_switch_on_eof;
 /* %ok-for-header */
 
 /* %endif */
 
-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 );
+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  );
 
-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 parser6__flush_buffer(YY_CURRENT_BUFFER )
 
-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  );
+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  );
 
 /* %endif */
 
-void *yyalloc ( yy_size_t  );
-void *yyrealloc ( void *, yy_size_t  );
-void yyfree ( void *  );
+void *parser6_alloc (yy_size_t  );
+void *parser6_realloc (void *,yy_size_t  );
+void parser6_free (void *  );
+
+#define yy_new_buffer parser6__create_buffer
 
-#define yy_new_buffer yy_create_buffer
 #define yy_set_interactive(is_interactive) \
        { \
        if ( ! YY_CURRENT_BUFFER ){ \
-        yyensure_buffer_stack (); \
+        parser6_ensure_buffer_stack (); \
                YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            parser6__create_buffer(parser6_in,YY_BUF_SIZE ); \
        } \
        YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
        }
+
 #define yy_set_bol(at_bol) \
        { \
        if ( ! YY_CURRENT_BUFFER ){\
-        yyensure_buffer_stack (); \
+        parser6_ensure_buffer_stack (); \
                YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            parser6__create_buffer(parser6_in,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] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
+/* %% [1.0] parser6_text/parser6_in/parser6_out/yy_state_type/parser6_lineno 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;
 
-FILE *yyin = NULL, *yyout = NULL;
+typedef unsigned char YY_CHAR;
+
+FILE *parser6_in = (FILE *) 0, *parser6_out = (FILE *) 0;
 
 typedef int yy_state_type;
 
-extern int yylineno;
-int yylineno = 1;
+extern int parser6_lineno;
 
-extern char *yytext;
+int parser6_lineno = 1;
+
+extern char *parser6_text;
 #ifdef yytext_ptr
 #undef yytext_ptr
 #endif
-#define yytext_ptr yytext
+#define yytext_ptr parser6_text
 
 /* %% [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 );
-static void yynoreturn yy_fatal_error ( const 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 );
+#if defined(__GNUC__) && __GNUC__ >= 3
+__attribute__((__noreturn__))
+#endif
+static void yy_fatal_error (yyconst char msg[]  );
 
 /* %endif */
 
 /* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
+ * corresponding action - sets up parser6_text.
  */
 #define YY_DO_BEFORE_ACTION \
        (yytext_ptr) = yy_bp; \
-/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-       yyleng = (int) (yy_cp - yy_bp); \
+/* %% [2.0] code to fiddle parser6_text and parser6_leng for yymore() goes here \ */\
+       parser6_leng = (size_t) (yy_cp - yy_bp); \
        (yy_hold_char) = *yy_cp; \
        *yy_cp = '\0'; \
-/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
+/* %% [3.0] code to copy yytext_ptr to parser6_text[] 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
@@ -700,7 +491,7 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[1378] =
+static yyconst 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,
@@ -855,7 +646,7 @@ static const flex_int16_t yy_accept[1378] =
         0,    0,   98,    0,    0,  140,    0
     } ;
 
-static const YY_CHAR yy_ec[256] =
+static yyconst 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,
@@ -887,7 +678,7 @@ static const YY_CHAR yy_ec[256] =
         5,    5,    5,    5,    5
     } ;
 
-static const YY_CHAR yy_meta[72] =
+static yyconst 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,
@@ -899,7 +690,7 @@ static const YY_CHAR yy_meta[72] =
         3
     } ;
 
-static const flex_int16_t yy_base[1390] =
+static yyconst flex_uint16_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,
@@ -1055,7 +846,7 @@ static const flex_int16_t yy_base[1390] =
      1220, 1225, 1230, 1235, 1238, 1212, 1217, 1219, 1232
     } ;
 
-static const flex_int16_t yy_def[1390] =
+static yyconst 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,
@@ -1211,7 +1002,7 @@ static const flex_int16_t yy_def[1390] =
      1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377
     } ;
 
-static const flex_int16_t yy_nxt[1815] =
+static yyconst flex_uint16_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,
@@ -1415,7 +1206,7 @@ static const flex_int16_t yy_nxt[1815] =
      1377, 1377, 1377, 1377
     } ;
 
-static const flex_int16_t yy_chk[1815] =
+static yyconst 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,
@@ -1622,24 +1413,24 @@ static const flex_int16_t yy_chk[1815] =
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
 
-extern int yy_flex_debug;
-int yy_flex_debug = 1;
+extern int parser6__flex_debug;
+int parser6__flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[171] =
+static yyconst flex_int16_t yy_rule_linenum[171] =
     {   0,
-      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, 1197, 1206, 1215, 1226, 1236, 1245, 1255,
+      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,
@@ -1654,7 +1445,7 @@ static const 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 *yytext;
+char *parser6_text;
 #line 1 "dhcp6_lexer.ll"
 /* Copyright (C) 2016-2018 Internet Systems Consortium, Inc. ("ISC")
 
@@ -1681,8 +1472,8 @@ char *yytext;
    2.5.31 through 2.5.33): it generates code that does
    not conform to C89.  See Debian bug 333231
    <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */
-# undef yywrap
-# define yywrap() 1
+# undef parser6_wrap
+# define parser6_wrap() 1
 
 namespace {
 
@@ -1697,10 +1488,9 @@ 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 yywrap requires linking with -lfl, which provides the default yywrap
+   using parser6_wrap requires linking with -lfl, which provides the default parser6_wrap
    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. */
@@ -1708,23 +1498,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
-   yy_flex_debug to 1, then the debug messages will be printed on stderr. */
+   parser6__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 yyleng bytes. yyleng specifies the length of the
+   by moving it ahead by parser6_leng bytes. parser6_leng specifies the length of the
    currently matched token. */
-#define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 1726 "dhcp6_lexer.cc"
-#line 1727 "dhcp6_lexer.cc"
+#define YY_USER_ACTION  driver.loc_.columns(parser6_leng);
+#line 1518 "dhcp6_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1752,7 +1542,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 */
@@ -1762,31 +1552,31 @@ static int yy_init_globals ( void );
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
-int yylex_destroy ( void );
+int parser6_lex_destroy (void );
 
-int yyget_debug ( void );
+int parser6_get_debug (void );
 
-void yyset_debug ( int debug_flag  );
+void parser6_set_debug (int debug_flag  );
 
-YY_EXTRA_TYPE yyget_extra ( void );
+YY_EXTRA_TYPE parser6_get_extra (void );
 
-void yyset_extra ( YY_EXTRA_TYPE user_defined  );
+void parser6_set_extra (YY_EXTRA_TYPE user_defined  );
 
-FILE *yyget_in ( void );
+FILE *parser6_get_in (void );
 
-void yyset_in  ( FILE * _in_str  );
+void parser6_set_in  (FILE * _in_str  );
 
-FILE *yyget_out ( void );
+FILE *parser6_get_out (void );
 
-void yyset_out  ( FILE * _out_str  );
+void parser6_set_out  (FILE * _out_str  );
 
-                       int yyget_leng ( void );
+yy_size_t parser6_get_leng (void );
 
-char *yyget_text ( void );
+char *parser6_get_text (void );
 
-int yyget_lineno ( void );
+int parser6_get_lineno (void );
 
-void yyset_lineno ( int _line_number  );
+void parser6_set_lineno (int _line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -1797,13 +1587,14 @@ void yyset_lineno ( int _line_number  );
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int yywrap ( void );
+extern "C" int parser6_wrap (void );
 #else
-extern int yywrap ( void );
+extern int parser6_wrap (void );
 #endif
 #endif
 
 /* %not-for-header */
+
 #ifndef YY_NO_UNPUT
     
 #endif
@@ -1812,20 +1603,21 @@ extern int yywrap ( void );
 /* %endif */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy ( char *, const char *, int );
+static void yy_flex_strncpy (char *,yyconst char *,int );
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen ( const char * );
+static int yy_flex_strlen (yyconst 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 */
 
@@ -1852,7 +1644,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( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
+#define ECHO do { if (fwrite( parser6_text, parser6_leng, 1, parser6_out )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -1867,20 +1659,20 @@ static int input ( void );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               int n; \
+               size_t n; \
                for ( n = 0; n < max_size && \
-                            (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+                            (c = getc( parser6_in )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
                if ( c == '\n' ) \
                        buf[n++] = (char) c; \
-               if ( c == EOF && ferror( yyin ) ) \
+               if ( c == EOF && ferror( parser6_in ) ) \
                        YY_FATAL_ERROR( "input in flex scanner failed" ); \
                result = n; \
                } \
        else \
                { \
                errno=0; \
-               while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
+               while ( (result = fread(buf, 1, max_size, parser6_in))==0 && ferror(parser6_in)) \
                        { \
                        if( errno != EINTR) \
                                { \
@@ -1888,7 +1680,7 @@ static int input ( void );
                                break; \
                                } \
                        errno=0; \
-                       clearerr(yyin); \
+                       clearerr(parser6_in); \
                        } \
                }\
 \
@@ -1921,9 +1713,11 @@ 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 */
@@ -1937,15 +1731,15 @@ static int input ( void );
 #define YY_DECL_IS_OURS 1
 /* %if-c-only Standard (non-C++) definition */
 
-extern int yylex (void);
+extern int parser6_lex (void);
 
-#define YY_DECL int yylex (void)
+#define YY_DECL int parser6_lex (void)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
 #endif /* !YY_DECL */
 
-/* Code executed at the beginning of each rule, after yytext and yyleng
+/* Code executed at the beginning of each rule, after parser6_text and parser6_leng
  * have been set up.
  */
 #ifndef YY_USER_ACTION
@@ -1962,6 +1756,7 @@ extern int yylex (void);
        YY_USER_ACTION
 
 /* %not-for-header */
+
 /** The main scanner function which does all the work.
  */
 YY_DECL
@@ -1981,27 +1776,27 @@ YY_DECL
                if ( ! (yy_start) )
                        (yy_start) = 1; /* first start state */
 
-               if ( ! yyin )
+               if ( ! parser6_in )
 /* %if-c-only */
-                       yyin = stdin;
+                       parser6_in = stdin;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
-               if ( ! yyout )
+               if ( ! parser6_out )
 /* %if-c-only */
-                       yyout = stdout;
+                       parser6_out = stdout;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
                if ( ! YY_CURRENT_BUFFER ) {
-                       yyensure_buffer_stack ();
+                       parser6_ensure_buffer_stack ();
                        YY_CURRENT_BUFFER_LVALUE =
-                               yy_create_buffer( yyin, YY_BUF_SIZE );
+                               parser6__create_buffer(parser6_in,YY_BUF_SIZE );
                }
 
-               yy_load_buffer_state(  );
+               parser6__load_buffer_state( );
                }
 
        {
@@ -2010,12 +1805,11 @@ YY_DECL
 
 
 
-#line 104 "dhcp6_lexer.ll"
     /* This part of the code is copied over to the verbatim to the top
-       of the generated yylex function. Explanation:
+       of the generated parser6_lex function. Explanation:
        http://www.gnu.org/software/bison/manual/html_node/Multiple-start_002dsymbols.html */
 
-    /* Code run each time yylex is called. */
+    /* Code run each time parser6_lex is called. */
     driver.loc_.step();
 
     if (start_token_flag) {
@@ -2054,14 +1848,14 @@ YY_DECL
     }
 
 
-#line 2057 "dhcp6_lexer.cc"
+#line 1852 "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 yytext. */
+               /* Support of parser6_text. */
                *yy_cp = (yy_hold_char);
 
                /* yy_bp points to the position in yy_ch_buf of the start of
@@ -2084,9 +1878,9 @@ yy_match:
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
                                if ( yy_current_state >= 1378 )
-                                       yy_c = yy_meta[yy_c];
+                                       yy_c = yy_meta[(unsigned int) yy_c];
                                }
-                       yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
                while ( yy_current_state != 1377 );
@@ -2099,21 +1893,21 @@ yy_find_action:
 
                YY_DO_BEFORE_ACTION;
 
-/* %% [11.0] code for yylineno update goes here */
+/* %% [11.0] code for parser6_lineno update goes here */
 
 do_action:     /* This label is used only to access EOF actions. */
 
 /* %% [12.0] debug code goes here */
-               if ( yy_flex_debug )
+               if ( parser6__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], yytext );
+                                        (long)yy_rule_linenum[yy_act], parser6_text );
                        else if ( yy_act == 171 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
-                                        yytext );
+                                        parser6_text );
                        else if ( yy_act == 172 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
@@ -2132,17 +1926,17 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 147 "dhcp6_lexer.ll"
+#line 146 "dhcp6_lexer.ll"
 ;
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 149 "dhcp6_lexer.ll"
+#line 148 "dhcp6_lexer.ll"
 ;
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 151 "dhcp6_lexer.ll"
+#line 150 "dhcp6_lexer.ll"
 {
   BEGIN(COMMENT);
   comment_start_line = driver.loc_.end.line;;
@@ -2150,38 +1944,38 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 156 "dhcp6_lexer.ll"
+#line 155 "dhcp6_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 157 "dhcp6_lexer.ll"
+#line 156 "dhcp6_lexer.ll"
 ;
        YY_BREAK
 case YY_STATE_EOF(COMMENT):
-#line 158 "dhcp6_lexer.ll"
+#line 157 "dhcp6_lexer.ll"
 {
     isc_throw(Dhcp6ParseError, "Comment not closed. (/* in line " << comment_start_line);
 }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 162 "dhcp6_lexer.ll"
+#line 161 "dhcp6_lexer.ll"
 BEGIN(DIR_ENTER);
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 163 "dhcp6_lexer.ll"
+#line 162 "dhcp6_lexer.ll"
 BEGIN(DIR_INCLUDE);
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 164 "dhcp6_lexer.ll"
+#line 163 "dhcp6_lexer.ll"
 {
     /* Include directive. */
 
     /* Extract the filename. */
-    std::string tmp(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
 
     driver.includeFile(tmp);
@@ -2190,19 +1984,19 @@ YY_RULE_SETUP
 case YY_STATE_EOF(DIR_ENTER):
 case YY_STATE_EOF(DIR_INCLUDE):
 case YY_STATE_EOF(DIR_EXIT):
-#line 173 "dhcp6_lexer.ll"
+#line 172 "dhcp6_lexer.ll"
 {
     isc_throw(Dhcp6ParseError, "Directive not closed.");
 }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 176 "dhcp6_lexer.ll"
+#line 175 "dhcp6_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 179 "dhcp6_lexer.ll"
+#line 178 "dhcp6_lexer.ll"
 {
     /* Ok, we found a with space. Let's ignore it and update loc variable. */
     driver.loc_.step();
@@ -2211,16 +2005,16 @@ YY_RULE_SETUP
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
-#line 184 "dhcp6_lexer.ll"
+#line 183 "dhcp6_lexer.ll"
 {
     /* Newline found. Let's update the location and continue. */
-    driver.loc_.lines(yyleng);
+    driver.loc_.lines(parser6_leng);
     driver.loc_.step();
 }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 191 "dhcp6_lexer.ll"
+#line 190 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2232,7 +2026,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 200 "dhcp6_lexer.ll"
+#line 199 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2244,7 +2038,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 209 "dhcp6_lexer.ll"
+#line 208 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2256,7 +2050,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 218 "dhcp6_lexer.ll"
+#line 217 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2268,7 +2062,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 227 "dhcp6_lexer.ll"
+#line 226 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2280,7 +2074,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 236 "dhcp6_lexer.ll"
+#line 235 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2292,7 +2086,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 245 "dhcp6_lexer.ll"
+#line 244 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2304,7 +2098,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 254 "dhcp6_lexer.ll"
+#line 253 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2316,7 +2110,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 263 "dhcp6_lexer.ll"
+#line 262 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2328,7 +2122,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 272 "dhcp6_lexer.ll"
+#line 271 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2340,7 +2134,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 281 "dhcp6_lexer.ll"
+#line 280 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2352,7 +2146,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 290 "dhcp6_lexer.ll"
+#line 289 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2364,7 +2158,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 299 "dhcp6_lexer.ll"
+#line 298 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2376,7 +2170,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 308 "dhcp6_lexer.ll"
+#line 307 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2388,72 +2182,72 @@ YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 317 "dhcp6_lexer.ll"
+#line 316 "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(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 327 "dhcp6_lexer.ll"
+#line 326 "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(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 337 "dhcp6_lexer.ll"
+#line 336 "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(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 347 "dhcp6_lexer.ll"
+#line 346 "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(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 357 "dhcp6_lexer.ll"
+#line 356 "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(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 367 "dhcp6_lexer.ll"
+#line 366 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME:
@@ -2465,59 +2259,59 @@ YY_RULE_SETUP
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 376 "dhcp6_lexer.ll"
+#line 375 "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(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 386 "dhcp6_lexer.ll"
+#line 385 "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(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 396 "dhcp6_lexer.ll"
+#line 395 "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(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 406 "dhcp6_lexer.ll"
+#line 405 "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(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 416 "dhcp6_lexer.ll"
+#line 415 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -2529,7 +2323,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 425 "dhcp6_lexer.ll"
+#line 424 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2541,7 +2335,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 434 "dhcp6_lexer.ll"
+#line 433 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
@@ -2553,7 +2347,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 443 "dhcp6_lexer.ll"
+#line 442 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
@@ -2565,7 +2359,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 452 "dhcp6_lexer.ll"
+#line 451 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2577,7 +2371,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 461 "dhcp6_lexer.ll"
+#line 460 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2589,7 +2383,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 470 "dhcp6_lexer.ll"
+#line 469 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2601,7 +2395,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 479 "dhcp6_lexer.ll"
+#line 478 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
@@ -2613,7 +2407,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 488 "dhcp6_lexer.ll"
+#line 487 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2628,7 +2422,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 500 "dhcp6_lexer.ll"
+#line 499 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2640,7 +2434,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 509 "dhcp6_lexer.ll"
+#line 508 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2652,7 +2446,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 518 "dhcp6_lexer.ll"
+#line 517 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2664,7 +2458,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 527 "dhcp6_lexer.ll"
+#line 526 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2676,7 +2470,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 536 "dhcp6_lexer.ll"
+#line 535 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2689,7 +2483,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 546 "dhcp6_lexer.ll"
+#line 545 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2702,7 +2496,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 556 "dhcp6_lexer.ll"
+#line 555 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2715,7 +2509,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 566 "dhcp6_lexer.ll"
+#line 565 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2728,7 +2522,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 576 "dhcp6_lexer.ll"
+#line 575 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2742,7 +2536,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 587 "dhcp6_lexer.ll"
+#line 586 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2755,7 +2549,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 597 "dhcp6_lexer.ll"
+#line 596 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2768,7 +2562,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 607 "dhcp6_lexer.ll"
+#line 606 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2781,7 +2575,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 617 "dhcp6_lexer.ll"
+#line 616 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2794,7 +2588,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 627 "dhcp6_lexer.ll"
+#line 626 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2807,7 +2601,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 637 "dhcp6_lexer.ll"
+#line 636 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2820,7 +2614,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 647 "dhcp6_lexer.ll"
+#line 646 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2833,7 +2627,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 657 "dhcp6_lexer.ll"
+#line 656 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2846,7 +2640,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 667 "dhcp6_lexer.ll"
+#line 666 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2859,7 +2653,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 677 "dhcp6_lexer.ll"
+#line 676 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2873,7 +2667,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 688 "dhcp6_lexer.ll"
+#line 687 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2887,7 +2681,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 699 "dhcp6_lexer.ll"
+#line 698 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2901,7 +2695,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 710 "dhcp6_lexer.ll"
+#line 709 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2915,7 +2709,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 721 "dhcp6_lexer.ll"
+#line 720 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2927,7 +2721,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 730 "dhcp6_lexer.ll"
+#line 729 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2940,7 +2734,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 740 "dhcp6_lexer.ll"
+#line 739 "dhcp6_lexer.ll"
 {
     switch (driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2952,7 +2746,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 749 "dhcp6_lexer.ll"
+#line 748 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2964,7 +2758,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 758 "dhcp6_lexer.ll"
+#line 757 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2982,7 +2776,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 773 "dhcp6_lexer.ll"
+#line 772 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3000,7 +2794,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 788 "dhcp6_lexer.ll"
+#line 787 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3012,7 +2806,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 797 "dhcp6_lexer.ll"
+#line 796 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3024,7 +2818,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 806 "dhcp6_lexer.ll"
+#line 805 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3036,7 +2830,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 815 "dhcp6_lexer.ll"
+#line 814 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3048,7 +2842,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 824 "dhcp6_lexer.ll"
+#line 823 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3060,7 +2854,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 833 "dhcp6_lexer.ll"
+#line 832 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3072,7 +2866,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 842 "dhcp6_lexer.ll"
+#line 841 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3084,7 +2878,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 851 "dhcp6_lexer.ll"
+#line 850 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3096,7 +2890,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 860 "dhcp6_lexer.ll"
+#line 859 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3108,7 +2902,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 869 "dhcp6_lexer.ll"
+#line 868 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::POOLS:
@@ -3120,7 +2914,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 878 "dhcp6_lexer.ll"
+#line 877 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3145,7 +2939,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 900 "dhcp6_lexer.ll"
+#line 899 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3170,7 +2964,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 922 "dhcp6_lexer.ll"
+#line 921 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3182,7 +2976,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 931 "dhcp6_lexer.ll"
+#line 930 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3195,7 +2989,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 941 "dhcp6_lexer.ll"
+#line 940 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3208,7 +3002,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 951 "dhcp6_lexer.ll"
+#line 950 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3220,7 +3014,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 960 "dhcp6_lexer.ll"
+#line 959 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3233,7 +3027,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 970 "dhcp6_lexer.ll"
+#line 969 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3246,7 +3040,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 980 "dhcp6_lexer.ll"
+#line 979 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3258,7 +3052,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 989 "dhcp6_lexer.ll"
+#line 988 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3270,7 +3064,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 998 "dhcp6_lexer.ll"
+#line 997 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3282,7 +3076,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 1007 "dhcp6_lexer.ll"
+#line 1006 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3294,7 +3088,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 1016 "dhcp6_lexer.ll"
+#line 1015 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3307,7 +3101,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 1026 "dhcp6_lexer.ll"
+#line 1025 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3319,7 +3113,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 1035 "dhcp6_lexer.ll"
+#line 1034 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3331,7 +3125,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 1044 "dhcp6_lexer.ll"
+#line 1043 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3343,7 +3137,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 1053 "dhcp6_lexer.ll"
+#line 1052 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3355,7 +3149,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 1062 "dhcp6_lexer.ll"
+#line 1061 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGING:
@@ -3367,7 +3161,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 1071 "dhcp6_lexer.ll"
+#line 1070 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3379,7 +3173,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 1080 "dhcp6_lexer.ll"
+#line 1079 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3391,7 +3185,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 1089 "dhcp6_lexer.ll"
+#line 1088 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3403,7 +3197,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 1098 "dhcp6_lexer.ll"
+#line 1097 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3415,7 +3209,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 1107 "dhcp6_lexer.ll"
+#line 1106 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3427,7 +3221,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 1117 "dhcp6_lexer.ll"
+#line 1116 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3439,7 +3233,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 1126 "dhcp6_lexer.ll"
+#line 1125 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3451,7 +3245,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 1135 "dhcp6_lexer.ll"
+#line 1134 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3464,7 +3258,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 1145 "dhcp6_lexer.ll"
+#line 1144 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3479,7 +3273,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 1157 "dhcp6_lexer.ll"
+#line 1156 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3495,7 +3289,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 1170 "dhcp6_lexer.ll"
+#line 1169 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -3507,7 +3301,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 1179 "dhcp6_lexer.ll"
+#line 1178 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -3519,7 +3313,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 1188 "dhcp6_lexer.ll"
+#line 1187 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3531,10 +3325,11 @@ YY_RULE_SETUP
        YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 1197 "dhcp6_lexer.ll"
+#line 1196 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
+    case isc::dhcp::Parser6Context::RELAY:
         return isc::dhcp::Dhcp6Parser::make_IP_ADDRESSES(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("ip-addresses", driver.loc_);
@@ -4010,7 +3805,7 @@ YY_RULE_SETUP
     /* 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(yytext+1);
+    std::string raw(parser6_text+1);
     size_t len = raw.size() - 1;
     raw.resize(len);
     std::string decoded;
@@ -4111,7 +3906,7 @@ YY_RULE_SETUP
 #line 1655 "dhcp6_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
-    driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
+    driver.error(driver.loc_, "Invalid control in " + std::string(parser6_text));
 }
        YY_BREAK
 case 155:
@@ -4120,7 +3915,7 @@ YY_RULE_SETUP
 #line 1660 "dhcp6_lexer.ll"
 {
     /* Bad string with a bad escape inside */
-    driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
+    driver.error(driver.loc_, "Bad escape in " + std::string(parser6_text));
 }
        YY_BREAK
 case 156:
@@ -4128,7 +3923,7 @@ YY_RULE_SETUP
 #line 1665 "dhcp6_lexer.ll"
 {
     /* Bad string with an open escape at the end */
-    driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
+    driver.error(driver.loc_, "Overflow escape in " + std::string(parser6_text));
 }
        YY_BREAK
 case 157:
@@ -4166,7 +3961,7 @@ YY_RULE_SETUP
 #line 1677 "dhcp6_lexer.ll"
 {
     /* An integer was found. */
-    std::string tmp(yytext);
+    std::string tmp(parser6_text);
     int64_t integer = 0;
     try {
         /* In substring we want to use negative values (e.g. -1).
@@ -4187,7 +3982,7 @@ YY_RULE_SETUP
 #line 1695 "dhcp6_lexer.ll"
 {
     /* A floating point was found. */
-    std::string tmp(yytext);
+    std::string tmp(parser6_text);
     double fp = 0.0;
     try {
         fp = boost::lexical_cast<double>(tmp);
@@ -4202,7 +3997,7 @@ case 165:
 YY_RULE_SETUP
 #line 1708 "dhcp6_lexer.ll"
 {
-    string tmp(yytext);
+    string tmp(parser6_text);
     return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
@@ -4231,7 +4026,7 @@ driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
 case 170:
 YY_RULE_SETUP
 #line 1723 "dhcp6_lexer.ll"
-driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
+driver.error (driver.loc_, "Invalid character: " + std::string(parser6_text));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 #line 1725 "dhcp6_lexer.ll"
@@ -4263,7 +4058,7 @@ YY_RULE_SETUP
 #line 1748 "dhcp6_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4266 "dhcp6_lexer.cc"
+#line 4062 "dhcp6_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4278,8 +4073,8 @@ ECHO;
                        {
                        /* We're scanning a new file or input source.  It's
                         * possible that this happened because the user
-                        * just pointed yyin at a new source and called
-                        * yylex().  If so, then we have to assure
+                        * just pointed parser6_in at a new source and called
+                        * parser6_lex().  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
@@ -4287,7 +4082,7 @@ ECHO;
                         */
                        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
 /* %if-c-only */
-                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = parser6_in;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4345,11 +4140,11 @@ ECHO;
                                {
                                (yy_did_buffer_switch_on_eof) = 0;
 
-                               if ( yywrap(  ) )
+                               if ( parser6_wrap( ) )
                                        {
                                        /* Note: because we've taken care in
                                         * yy_get_next_buffer() to have set up
-                                        * yytext, we can now set up
+                                        * parser6_text, 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
@@ -4399,11 +4194,12 @@ ECHO;
        } /* end of action switch */
                } /* end of scanning one token */
        } /* end of user's declarations */
-} /* end of yylex */
+} /* end of parser6_lex */
 /* %ok-for-header */
 
 /* %if-c++-only */
 /* %not-for-header */
+
 /* %ok-for-header */
 
 /* %endif */
@@ -4423,7 +4219,7 @@ static int yy_get_next_buffer (void)
 {
        char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
        char *source = (yytext_ptr);
-       int number_to_move, i;
+       yy_size_t number_to_move, i;
        int ret_val;
 
        if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -4452,7 +4248,7 @@ static int yy_get_next_buffer (void)
        /* Try to read more data. */
 
        /* First move last chars to start of buffer. */
-       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
+       number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
 
        for ( i = 0; i < number_to_move; ++i )
                *(dest++) = *(source++);
@@ -4465,7 +4261,7 @@ static int yy_get_next_buffer (void)
 
        else
                {
-                       int num_to_read =
+                       yy_size_t num_to_read =
                        YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
                while ( num_to_read <= 0 )
@@ -4479,7 +4275,7 @@ static int yy_get_next_buffer (void)
 
                        if ( b->yy_is_our_buffer )
                                {
-                               int new_size = b->yy_buf_size * 2;
+                               yy_size_t new_size = b->yy_buf_size * 2;
 
                                if ( new_size <= 0 )
                                        b->yy_buf_size += b->yy_buf_size / 8;
@@ -4488,12 +4284,11 @@ static int yy_get_next_buffer (void)
 
                                b->yy_ch_buf = (char *)
                                        /* Include room in for 2 EOB chars. */
-                                       yyrealloc( (void *) b->yy_ch_buf,
-                                                        (yy_size_t) (b->yy_buf_size + 2)  );
+                                       parser6_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
                                }
                        else
                                /* Can't grow it, we don't own it. */
-                               b->yy_ch_buf = NULL;
+                               b->yy_ch_buf = 0;
 
                        if ( ! b->yy_ch_buf )
                                YY_FATAL_ERROR(
@@ -4521,7 +4316,7 @@ static int yy_get_next_buffer (void)
                if ( number_to_move == YY_MORE_ADJ )
                        {
                        ret_val = EOB_ACT_END_OF_FILE;
-                       yyrestart( yyin  );
+                       parser6_restart(parser6_in  );
                        }
 
                else
@@ -4535,15 +4330,12 @@ static int yy_get_next_buffer (void)
        else
                ret_val = EOB_ACT_CONTINUE_SCAN;
 
-       if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+       if ((int) ((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 *) yyrealloc(
-                       (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size  );
+               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) parser6_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,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;
@@ -4559,6 +4351,7 @@ 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 */
@@ -4583,9 +4376,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[yy_c];
+                               yy_c = yy_meta[(unsigned int) yy_c];
                        }
-               yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                }
 
        return yy_current_state;
@@ -4616,9 +4409,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[yy_c];
+                       yy_c = yy_meta[(unsigned int) yy_c];
                }
-       yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
        yy_is_jam = (yy_current_state == 1377);
 
                return yy_is_jam ? 0 : yy_current_state;
@@ -4658,7 +4451,7 @@ static int yy_get_next_buffer (void)
 
                else
                        { /* need more input */
-                       int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
+                       yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
                        ++(yy_c_buf_p);
 
                        switch ( yy_get_next_buffer(  ) )
@@ -4675,14 +4468,14 @@ static int yy_get_next_buffer (void)
                                         */
 
                                        /* Reset buffer status. */
-                                       yyrestart( yyin );
+                                       parser6_restart(parser6_in );
 
                                        /*FALLTHROUGH*/
 
                                case EOB_ACT_END_OF_FILE:
                                        {
-                                       if ( yywrap(  ) )
-                                               return 0;
+                                       if ( parser6_wrap( ) )
+                                               return EOF;
 
                                        if ( ! (yy_did_buffer_switch_on_eof) )
                                                YY_NEW_FILE;
@@ -4701,10 +4494,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 yytext */
+       *(yy_c_buf_p) = '\0';   /* preserve parser6_text */
        (yy_hold_char) = *++(yy_c_buf_p);
 
-/* %% [19.0] update BOL and yylineno */
+/* %% [19.0] update BOL and parser6_lineno */
 
        return c;
 }
@@ -4718,20 +4511,20 @@ static int yy_get_next_buffer (void)
  * @note This function does not reset the start condition to @c INITIAL .
  */
 /* %if-c-only */
-    void yyrestart  (FILE * input_file )
+    void parser6_restart  (FILE * input_file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
     
        if ( ! YY_CURRENT_BUFFER ){
-        yyensure_buffer_stack ();
+        parser6_ensure_buffer_stack ();
                YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer( yyin, YY_BUF_SIZE );
+            parser6__create_buffer(parser6_in,YY_BUF_SIZE );
        }
 
-       yy_init_buffer( YY_CURRENT_BUFFER, input_file );
-       yy_load_buffer_state(  );
+       parser6__init_buffer(YY_CURRENT_BUFFER,input_file );
+       parser6__load_buffer_state( );
 }
 
 /* %if-c++-only */
@@ -4742,7 +4535,7 @@ static int yy_get_next_buffer (void)
  * 
  */
 /* %if-c-only */
-    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+    void parser6__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4750,10 +4543,10 @@ static int yy_get_next_buffer (void)
     
        /* TODO. We should be able to replace this entire function body
         * with
-        *              yypop_buffer_state();
-        *              yypush_buffer_state(new_buffer);
+        *              parser6_pop_buffer_state();
+        *              parser6_push_buffer_state(new_buffer);
      */
-       yyensure_buffer_stack ();
+       parser6_ensure_buffer_stack ();
        if ( YY_CURRENT_BUFFER == new_buffer )
                return;
 
@@ -4766,18 +4559,18 @@ static int yy_get_next_buffer (void)
                }
 
        YY_CURRENT_BUFFER_LVALUE = new_buffer;
-       yy_load_buffer_state(  );
+       parser6__load_buffer_state( );
 
        /* We don't actually know whether we did this switch during
-        * EOF (yywrap()) processing, but the only time this flag
-        * is looked at is after yywrap() is called, so it's safe
+        * EOF (parser6_wrap()) processing, but the only time this flag
+        * is looked at is after parser6_wrap() 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 yy_load_buffer_state  (void)
+static void parser6__load_buffer_state  (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4785,7 +4578,7 @@ static void yy_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 */
-       yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+       parser6_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4799,29 +4592,29 @@ static void yy_load_buffer_state  (void)
  * @return the allocated buffer state.
  */
 /* %if-c-only */
-    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
+    YY_BUFFER_STATE parser6__create_buffer  (FILE * file, int  size )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
        YY_BUFFER_STATE b;
     
-       b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
+       b = (YY_BUFFER_STATE) parser6_alloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser6__create_buffer()" );
 
-       b->yy_buf_size = size;
+       b->yy_buf_size = (yy_size_t)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 *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
+       b->yy_ch_buf = (char *) parser6_alloc(b->yy_buf_size + 2  );
        if ( ! b->yy_ch_buf )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser6__create_buffer()" );
 
        b->yy_is_our_buffer = 1;
 
-       yy_init_buffer( b, file );
+       parser6__init_buffer(b,file );
 
        return b;
 }
@@ -4830,11 +4623,11 @@ static void yy_load_buffer_state  (void)
 /* %endif */
 
 /** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
+ * @param b a buffer created with parser6__create_buffer()
  * 
  */
 /* %if-c-only */
-    void yy_delete_buffer (YY_BUFFER_STATE  b )
+    void parser6__delete_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4847,17 +4640,17 @@ static void yy_load_buffer_state  (void)
                YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
        if ( b->yy_is_our_buffer )
-               yyfree( (void *) b->yy_ch_buf  );
+               parser6_free((void *) b->yy_ch_buf  );
 
-       yyfree( (void *) b  );
+       parser6_free((void *) b  );
 }
 
 /* Initializes or reinitializes a buffer.
  * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
+ * such as during a parser6_restart() or at EOF.
  */
 /* %if-c-only */
-    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+    static void parser6__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4865,7 +4658,7 @@ static void yy_load_buffer_state  (void)
 {
        int oerrno = errno;
     
-       yy_flush_buffer( b );
+       parser6__flush_buffer(b );
 
 /* %if-c-only */
        b->yy_input_file = file;
@@ -4874,8 +4667,8 @@ static void yy_load_buffer_state  (void)
 /* %endif */
        b->yy_fill_buffer = 1;
 
-    /* If b is the current buffer, then yy_init_buffer was _probably_
-     * called from yyrestart() or through yy_get_next_buffer.
+    /* If b is the current buffer, then parser6__init_buffer was _probably_
+     * called from parser6_restart() or through yy_get_next_buffer.
      * In that case, we don't want to reset the lineno or column.
      */
     if (b != YY_CURRENT_BUFFER){
@@ -4898,7 +4691,7 @@ static void yy_load_buffer_state  (void)
  * 
  */
 /* %if-c-only */
-    void yy_flush_buffer (YY_BUFFER_STATE  b )
+    void parser6__flush_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4921,7 +4714,7 @@ static void yy_load_buffer_state  (void)
        b->yy_buffer_status = YY_BUFFER_NEW;
 
        if ( b == YY_CURRENT_BUFFER )
-               yy_load_buffer_state(  );
+               parser6__load_buffer_state( );
 }
 
 /* %if-c-or-c++ */
@@ -4932,7 +4725,7 @@ static void yy_load_buffer_state  (void)
  *  
  */
 /* %if-c-only */
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+void parser6_push_buffer_state (YY_BUFFER_STATE new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4940,9 +4733,9 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
        if (new_buffer == NULL)
                return;
 
-       yyensure_buffer_stack();
+       parser6_ensure_buffer_stack();
 
-       /* This block is copied from yy_switch_to_buffer. */
+       /* This block is copied from parser6__switch_to_buffer. */
        if ( YY_CURRENT_BUFFER )
                {
                /* Flush out information for old buffer. */
@@ -4956,8 +4749,8 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
                (yy_buffer_stack_top)++;
        YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
-       /* copied from yy_switch_to_buffer. */
-       yy_load_buffer_state(  );
+       /* copied from parser6__switch_to_buffer. */
+       parser6__load_buffer_state( );
        (yy_did_buffer_switch_on_eof) = 1;
 }
 /* %endif */
@@ -4968,7 +4761,7 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
  *  
  */
 /* %if-c-only */
-void yypop_buffer_state (void)
+void parser6_pop_buffer_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4976,13 +4769,13 @@ void yypop_buffer_state (void)
        if (!YY_CURRENT_BUFFER)
                return;
 
-       yy_delete_buffer(YY_CURRENT_BUFFER );
+       parser6__delete_buffer(YY_CURRENT_BUFFER );
        YY_CURRENT_BUFFER_LVALUE = NULL;
        if ((yy_buffer_stack_top) > 0)
                --(yy_buffer_stack_top);
 
        if (YY_CURRENT_BUFFER) {
-               yy_load_buffer_state(  );
+               parser6__load_buffer_state( );
                (yy_did_buffer_switch_on_eof) = 1;
        }
 }
@@ -4993,7 +4786,7 @@ void yypop_buffer_state (void)
  *  Guarantees space for at least one push.
  */
 /* %if-c-only */
-static void yyensure_buffer_stack (void)
+static void parser6_ensure_buffer_stack (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -5006,15 +4799,15 @@ static void yyensure_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**)yyalloc
+               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 * sizeof(struct yy_buffer_state*)
                                                                );
                if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
+                       YY_FATAL_ERROR( "out of dynamic memory in parser6_ensure_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;
@@ -5026,12 +4819,12 @@ static void yyensure_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**)yyrealloc
+               (yy_buffer_stack) = (struct yy_buffer_state**)parser6_realloc
                                                                ((yy_buffer_stack),
                                                                num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
                if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+                       YY_FATAL_ERROR( "out of dynamic memory in parser6_ensure_buffer_stack()" );
 
                /* zero only the new slots.*/
                memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -5045,9 +4838,9 @@ static void yyensure_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 yy_scan_buffer  (char * base, yy_size_t  size )
+YY_BUFFER_STATE parser6__scan_buffer  (char * base, yy_size_t  size )
 {
        YY_BUFFER_STATE b;
     
@@ -5055,73 +4848,73 @@ YY_BUFFER_STATE yy_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 NULL;
+               return 0;
 
-       b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
+       b = (YY_BUFFER_STATE) parser6_alloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser6__scan_buffer()" );
 
-       b->yy_buf_size = (int) (size - 2);      /* "- 2" to take care of EOB's */
+       b->yy_buf_size = 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 = NULL;
+       b->yy_input_file = 0;
        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;
 
-       yy_switch_to_buffer( b  );
+       parser6__switch_to_buffer(b  );
 
        return b;
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan a string. The next call to yylex() will
+/** Setup the input buffer state to scan a string. The next call to parser6_lex() 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
- *       yy_scan_bytes() instead.
+ *       parser6__scan_bytes() instead.
  */
-YY_BUFFER_STATE yy_scan_string (const char * yystr )
+YY_BUFFER_STATE parser6__scan_string (yyconst char * yystr )
 {
     
-       return yy_scan_bytes( yystr, (int) strlen(yystr) );
+       return parser6__scan_bytes(yystr,strlen(yystr) );
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+/** Setup the input buffer state to scan the given bytes. The next call to parser6_lex() 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 yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE parser6__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
        YY_BUFFER_STATE b;
        char *buf;
        yy_size_t n;
-       int i;
+       yy_size_t i;
     
        /* Get memory for full buffer, including space for trailing EOB's. */
-       n = (yy_size_t) (_yybytes_len + 2);
-       buf = (char *) yyalloc( n  );
+       n = _yybytes_len + 2;
+       buf = (char *) parser6_alloc(n  );
        if ( ! buf )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser6__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 = yy_scan_buffer( buf, n );
+       b = parser6__scan_buffer(buf,n );
        if ( ! b )
-               YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+               YY_FATAL_ERROR( "bad buffer in parser6__scan_bytes()" );
 
        /* It's okay to grow etc. this buffer, and we should throw it
         * away when we're done.
@@ -5137,9 +4930,9 @@ YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
 #endif
 
 /* %if-c-only */
-static void yynoreturn yy_fatal_error (const char* msg )
+static void yy_fatal_error (yyconst char* msg )
 {
-                       fprintf( stderr, "%s\n", msg );
+                       (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -5152,14 +4945,14 @@ static void yynoreturn yy_fatal_error (const char* msg )
 #define yyless(n) \
        do \
                { \
-               /* Undo effects of setting up yytext. */ \
+               /* Undo effects of setting up parser6_text. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-               yytext[yyleng] = (yy_hold_char); \
-               (yy_c_buf_p) = yytext + yyless_macro_arg; \
+               parser6_text[parser6_leng] = (yy_hold_char); \
+               (yy_c_buf_p) = parser6_text + yyless_macro_arg; \
                (yy_hold_char) = *(yy_c_buf_p); \
                *(yy_c_buf_p) = '\0'; \
-               yyleng = yyless_macro_arg; \
+               parser6_leng = yyless_macro_arg; \
                } \
        while ( 0 )
 
@@ -5172,43 +4965,43 @@ static void yynoreturn yy_fatal_error (const char* msg )
 /** Get the current line number.
  * 
  */
-int yyget_lineno  (void)
+int parser6_get_lineno  (void)
 {
-    
-    return yylineno;
+        
+    return parser6_lineno;
 }
 
 /** Get the input stream.
  * 
  */
-FILE *yyget_in  (void)
+FILE *parser6_get_in  (void)
 {
-        return yyin;
+        return parser6_in;
 }
 
 /** Get the output stream.
  * 
  */
-FILE *yyget_out  (void)
+FILE *parser6_get_out  (void)
 {
-        return yyout;
+        return parser6_out;
 }
 
 /** Get the length of the current token.
  * 
  */
-int yyget_leng  (void)
+yy_size_t parser6_get_leng  (void)
 {
-        return yyleng;
+        return parser6_leng;
 }
 
 /** Get the current token.
  * 
  */
 
-char *yyget_text  (void)
+char *parser6_get_text  (void)
 {
-        return yytext;
+        return parser6_text;
 }
 
 /* %if-reentrant */
@@ -5218,36 +5011,36 @@ char *yyget_text  (void)
  * @param _line_number line number
  * 
  */
-void yyset_lineno (int  _line_number )
+void parser6_set_lineno (int  _line_number )
 {
     
-    yylineno = _line_number;
+    parser6_lineno = _line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
  * @param _in_str A readable stream.
  * 
- * @see yy_switch_to_buffer
+ * @see parser6__switch_to_buffer
  */
-void yyset_in (FILE *  _in_str )
+void parser6_set_in (FILE *  _in_str )
 {
-        yyin = _in_str ;
+        parser6_in = _in_str ;
 }
 
-void yyset_out (FILE *  _out_str )
+void parser6_set_out (FILE *  _out_str )
 {
-        yyout = _out_str ;
+        parser6_out = _out_str ;
 }
 
-int yyget_debug  (void)
+int parser6_get_debug  (void)
 {
-        return yy_flex_debug;
+        return parser6__flex_debug;
 }
 
-void yyset_debug (int  _bdebug )
+void parser6_set_debug (int  _bdebug )
 {
-        yy_flex_debug = _bdebug ;
+        parser6__flex_debug = _bdebug ;
 }
 
 /* %endif */
@@ -5261,50 +5054,50 @@ void yyset_debug (int  _bdebug )
 static int yy_init_globals (void)
 {
         /* Initialization is the same as for the non-reentrant scanner.
-     * This function is called from yylex_destroy(), so don't allocate here.
+     * This function is called from parser6_lex_destroy(), so don't allocate here.
      */
 
-    (yy_buffer_stack) = NULL;
+    (yy_buffer_stack) = 0;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = NULL;
+    (yy_c_buf_p) = (char *) 0;
     (yy_init) = 0;
     (yy_start) = 0;
 
 /* Defined in main.c */
 #ifdef YY_STDINIT
-    yyin = stdin;
-    yyout = stdout;
+    parser6_in = stdin;
+    parser6_out = stdout;
 #else
-    yyin = NULL;
-    yyout = NULL;
+    parser6_in = (FILE *) 0;
+    parser6_out = (FILE *) 0;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
-     * yylex_init()
+     * parser6_lex_init()
      */
     return 0;
 }
 /* %endif */
 
 /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
-/* yylex_destroy is for both reentrant and non-reentrant scanners. */
-int yylex_destroy  (void)
+/* parser6_lex_destroy is for both reentrant and non-reentrant scanners. */
+int parser6_lex_destroy  (void)
 {
     
     /* Pop the buffer stack, destroying each element. */
        while(YY_CURRENT_BUFFER){
-               yy_delete_buffer( YY_CURRENT_BUFFER  );
+               parser6__delete_buffer(YY_CURRENT_BUFFER  );
                YY_CURRENT_BUFFER_LVALUE = NULL;
-               yypop_buffer_state();
+               parser6_pop_buffer_state();
        }
 
        /* Destroy the stack itself. */
-       yyfree((yy_buffer_stack) );
+       parser6_free((yy_buffer_stack) );
        (yy_buffer_stack) = NULL;
 
     /* Reset the globals. This is important in a non-reentrant scanner so the next time
-     * yylex() is called, initialization will occur. */
+     * parser6_lex() is called, initialization will occur. */
     yy_init_globals( );
 
 /* %if-reentrant */
@@ -5318,7 +5111,7 @@ int yylex_destroy  (void)
  */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, const char * s2, int n )
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
                
        int i;
@@ -5328,7 +5121,7 @@ static void yy_flex_strncpy (char* s1, const char * s2, int n )
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (const char * s )
+static int yy_flex_strlen (yyconst char * s )
 {
        int n;
        for ( n = 0; s[n]; ++n )
@@ -5338,12 +5131,12 @@ static int yy_flex_strlen (const char * s )
 }
 #endif
 
-void *yyalloc (yy_size_t  size )
+void *parser6_alloc (yy_size_t  size )
 {
-                       return malloc(size);
+                       return (void *) malloc( size );
 }
 
-void *yyrealloc  (void * ptr, yy_size_t  size )
+void *parser6_realloc  (void * ptr, yy_size_t  size )
 {
                
        /* The cast to (char *) in the following accommodates both
@@ -5353,12 +5146,12 @@ void *yyrealloc  (void * ptr, yy_size_t  size )
         * any pointer type to void*, and deal with argument conversions
         * as though doing an assignment.
         */
-       return realloc(ptr, size);
+       return (void *) realloc( (char *) ptr, size );
 }
 
-void yyfree (void * ptr )
+void parser6_free (void * ptr )
 {
-                       free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
+                       free( (char *) ptr );   /* see parser6_realloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -5371,6 +5164,7 @@ void yyfree (void * ptr )
 #line 1748 "dhcp6_lexer.ll"
 
 
+
 using namespace isc::dhcp;
 
 void
@@ -5382,7 +5176,7 @@ Parser6Context::scanStringBegin(const std::string& str, ParserType parser_type)
     file_ = "<string>";
     sfile_ = 0;
     loc_.initialize(&file_);
-    yy_flex_debug = trace_scanning_;
+    parser6__flex_debug = trace_scanning_;
     YY_BUFFER_STATE buffer;
     buffer = parser6__scan_bytes(str.c_str(), str.size());
     if (!buffer) {
@@ -5402,7 +5196,7 @@ Parser6Context::scanFileBegin(FILE * f,
     file_ = filename;
     sfile_ = f;
     loc_.initialize(&file_);
-    yy_flex_debug = trace_scanning_;
+    parser6__flex_debug = trace_scanning_;
     YY_BUFFER_STATE buffer;
 
     /* See dhcp6_lexer.cc header for available definitions */
index f02b9b58b688f437edf38ebafd2fbbab2ece7992..a6194d8ea38a64bef8d4d1c91358bc4f13f2412a 100644 (file)
@@ -1196,6 +1196,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
 \"ip-addresses\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
+    case isc::dhcp::Parser6Context::RELAY:
         return isc::dhcp::Dhcp6Parser::make_IP_ADDRESSES(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("ip-addresses", driver.loc_);
index 82f21804d5f05b21fe73da789199a8ea9c9a9f5c..cc4ce305f05637b1c425335bedc69ca895d6ff05 100644 (file)
@@ -257,9 +257,9 @@ namespace isc { namespace dhcp {
       case 185: // map_value
       case 235: // db_type
       case 318: // hr_mode
-      case 453: // duid_type
-      case 486: // ncr_protocol_value
-      case 494: // replace_client_name_value
+      case 454: // duid_type
+      case 487: // ncr_protocol_value
+      case 495: // replace_client_name_value
         value.move< ElementPtr > (that.value);
         break;
 
@@ -298,9 +298,9 @@ namespace isc { namespace dhcp {
       case 185: // map_value
       case 235: // db_type
       case 318: // hr_mode
-      case 453: // duid_type
-      case 486: // ncr_protocol_value
-      case 494: // replace_client_name_value
+      case 454: // duid_type
+      case 487: // ncr_protocol_value
+      case 495: // replace_client_name_value
         value.copy< ElementPtr > (that.value);
         break;
 
@@ -412,21 +412,21 @@ namespace isc { namespace dhcp {
 #line 413 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 453: // duid_type
+      case 454: // duid_type
 
 #line 237 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 420 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 486: // ncr_protocol_value
+      case 487: // ncr_protocol_value
 
 #line 237 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 427 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 494: // replace_client_name_value
+      case 495: // replace_client_name_value
 
 #line 237 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
@@ -634,9 +634,9 @@ namespace isc { namespace dhcp {
       case 185: // map_value
       case 235: // db_type
       case 318: // hr_mode
-      case 453: // duid_type
-      case 486: // ncr_protocol_value
-      case 494: // replace_client_name_value
+      case 454: // duid_type
+      case 487: // ncr_protocol_value
+      case 495: // replace_client_name_value
         yylhs.value.build< ElementPtr > ();
         break;
 
@@ -2714,26 +2714,26 @@ namespace isc { namespace dhcp {
 #line 2715 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 474:
-#line 1687 "dhcp6_parser.yy" // lalr1.cc:859
+  case 476:
+#line 1691 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2723 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 475:
-#line 1689 "dhcp6_parser.yy" // lalr1.cc:859
+  case 477:
+#line 1693 "dhcp6_parser.yy" // lalr1.cc:859
     {
-    ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("ip-address", ip);
+    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 2733 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 476:
-#line 1698 "dhcp6_parser.yy" // lalr1.cc:859
+  case 478:
+#line 1702 "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 477:
-#line 1703 "dhcp6_parser.yy" // lalr1.cc:859
+  case 479:
+#line 1707 "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 480:
-#line 1712 "dhcp6_parser.yy" // lalr1.cc:859
+  case 482:
+#line 1716 "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 481:
-#line 1716 "dhcp6_parser.yy" // lalr1.cc:859
+  case 483:
+#line 1720 "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 494:
-#line 1741 "dhcp6_parser.yy" // lalr1.cc:859
+  case 496:
+#line 1745 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2781 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 495:
-#line 1743 "dhcp6_parser.yy" // lalr1.cc:859
+  case 497:
+#line 1747 "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 496:
-#line 1749 "dhcp6_parser.yy" // lalr1.cc:859
+  case 498:
+#line 1753 "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 497:
-#line 1757 "dhcp6_parser.yy" // lalr1.cc:859
+  case 499:
+#line 1761 "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 498:
-#line 1762 "dhcp6_parser.yy" // lalr1.cc:859
+  case 500:
+#line 1766 "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 510:
-#line 1784 "dhcp6_parser.yy" // lalr1.cc:859
+  case 512:
+#line 1788 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DUID_TYPE);
 }
 #line 2830 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 511:
-#line 1786 "dhcp6_parser.yy" // lalr1.cc:859
+  case 513:
+#line 1790 "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 512:
-#line 1791 "dhcp6_parser.yy" // lalr1.cc:859
+  case 514:
+#line 1795 "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 513:
-#line 1792 "dhcp6_parser.yy" // lalr1.cc:859
+  case 515:
+#line 1796 "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 514:
-#line 1793 "dhcp6_parser.yy" // lalr1.cc:859
+  case 516:
+#line 1797 "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 515:
-#line 1796 "dhcp6_parser.yy" // lalr1.cc:859
+  case 517:
+#line 1800 "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 516:
-#line 1801 "dhcp6_parser.yy" // lalr1.cc:859
+  case 518:
+#line 1805 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2874 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 517:
-#line 1803 "dhcp6_parser.yy" // lalr1.cc:859
+  case 519:
+#line 1807 "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 518:
-#line 1809 "dhcp6_parser.yy" // lalr1.cc:859
+  case 520:
+#line 1813 "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 519:
-#line 1814 "dhcp6_parser.yy" // lalr1.cc:859
+  case 521:
+#line 1818 "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 520:
-#line 1821 "dhcp6_parser.yy" // lalr1.cc:859
+  case 522:
+#line 1825 "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 521:
-#line 1828 "dhcp6_parser.yy" // lalr1.cc:859
+  case 523:
+#line 1832 "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 522:
-#line 1833 "dhcp6_parser.yy" // lalr1.cc:859
+  case 524:
+#line 1837 "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 530:
-#line 1849 "dhcp6_parser.yy" // lalr1.cc:859
+  case 532:
+#line 1853 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2939 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 531:
-#line 1851 "dhcp6_parser.yy" // lalr1.cc:859
+  case 533:
+#line 1855 "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 532:
-#line 1857 "dhcp6_parser.yy" // lalr1.cc:859
+  case 534:
+#line 1861 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2957 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 533:
-#line 1859 "dhcp6_parser.yy" // lalr1.cc:859
+  case 535:
+#line 1863 "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 534:
-#line 1867 "dhcp6_parser.yy" // lalr1.cc:859
+  case 536:
+#line 1871 "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 535:
-#line 1872 "dhcp6_parser.yy" // lalr1.cc:859
+  case 537:
+#line 1876 "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 536:
-#line 1879 "dhcp6_parser.yy" // lalr1.cc:859
+  case 538:
+#line 1883 "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 537:
-#line 1883 "dhcp6_parser.yy" // lalr1.cc:859
+  case 539:
+#line 1887 "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 557:
-#line 1912 "dhcp6_parser.yy" // lalr1.cc:859
+  case 559:
+#line 1916 "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 558:
-#line 1917 "dhcp6_parser.yy" // lalr1.cc:859
+  case 560:
+#line 1921 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3026 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 559:
-#line 1919 "dhcp6_parser.yy" // lalr1.cc:859
+  case 561:
+#line 1923 "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 560:
-#line 1925 "dhcp6_parser.yy" // lalr1.cc:859
+  case 562:
+#line 1929 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3044 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 561:
-#line 1927 "dhcp6_parser.yy" // lalr1.cc:859
+  case 563:
+#line 1931 "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 562:
-#line 1933 "dhcp6_parser.yy" // lalr1.cc:859
+  case 564:
+#line 1937 "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 563:
-#line 1938 "dhcp6_parser.yy" // lalr1.cc:859
+  case 565:
+#line 1942 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3071 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 564:
-#line 1940 "dhcp6_parser.yy" // lalr1.cc:859
+  case 566:
+#line 1944 "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 565:
-#line 1946 "dhcp6_parser.yy" // lalr1.cc:859
+  case 567:
+#line 1950 "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 566:
-#line 1951 "dhcp6_parser.yy" // lalr1.cc:859
+  case 568:
+#line 1955 "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 567:
-#line 1956 "dhcp6_parser.yy" // lalr1.cc:859
+  case 569:
+#line 1960 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
 #line 3107 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 568:
-#line 1958 "dhcp6_parser.yy" // lalr1.cc:859
+  case 570:
+#line 1962 "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 569:
-#line 1964 "dhcp6_parser.yy" // lalr1.cc:859
+  case 571:
+#line 1968 "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 570:
-#line 1965 "dhcp6_parser.yy" // lalr1.cc:859
+  case 572:
+#line 1969 "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 571:
-#line 1968 "dhcp6_parser.yy" // lalr1.cc:859
+  case 573:
+#line 1972 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
 #line 3136 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 572:
-#line 1970 "dhcp6_parser.yy" // lalr1.cc:859
+  case 574:
+#line 1974 "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 573:
-#line 1976 "dhcp6_parser.yy" // lalr1.cc:859
+  case 575:
+#line 1980 "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 574:
-#line 1981 "dhcp6_parser.yy" // lalr1.cc:859
+  case 576:
+#line 1985 "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 575:
-#line 1986 "dhcp6_parser.yy" // lalr1.cc:859
+  case 577:
+#line 1990 "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 576:
-#line 1991 "dhcp6_parser.yy" // lalr1.cc:859
+  case 578:
+#line 1995 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
 #line 3181 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 577:
-#line 1993 "dhcp6_parser.yy" // lalr1.cc:859
+  case 579:
+#line 1997 "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 578:
-#line 1999 "dhcp6_parser.yy" // lalr1.cc:859
+  case 580:
+#line 2003 "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 579:
-#line 2002 "dhcp6_parser.yy" // lalr1.cc:859
+  case 581:
+#line 2006 "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 580:
-#line 2005 "dhcp6_parser.yy" // lalr1.cc:859
+  case 582:
+#line 2009 "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 581:
-#line 2008 "dhcp6_parser.yy" // lalr1.cc:859
+  case 583:
+#line 2012 "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 582:
-#line 2011 "dhcp6_parser.yy" // lalr1.cc:859
+  case 584:
+#line 2015 "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 583:
-#line 2017 "dhcp6_parser.yy" // lalr1.cc:859
+  case 585:
+#line 2021 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3239 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 584:
-#line 2019 "dhcp6_parser.yy" // lalr1.cc:859
+  case 586:
+#line 2023 "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 585:
-#line 2027 "dhcp6_parser.yy" // lalr1.cc:859
+  case 587:
+#line 2031 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3257 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 586:
-#line 2029 "dhcp6_parser.yy" // lalr1.cc:859
+  case 588:
+#line 2033 "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 587:
-#line 2034 "dhcp6_parser.yy" // lalr1.cc:859
+  case 589:
+#line 2038 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3274 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 588:
-#line 2036 "dhcp6_parser.yy" // lalr1.cc:859
+  case 590:
+#line 2040 "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 589:
-#line 2041 "dhcp6_parser.yy" // lalr1.cc:859
+  case 591:
+#line 2045 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3291 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 590:
-#line 2043 "dhcp6_parser.yy" // lalr1.cc:859
+  case 592:
+#line 2047 "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 591:
-#line 2054 "dhcp6_parser.yy" // lalr1.cc:859
+  case 593:
+#line 2058 "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 592:
-#line 2059 "dhcp6_parser.yy" // lalr1.cc:859
+  case 594:
+#line 2063 "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 593:
-#line 2064 "dhcp6_parser.yy" // lalr1.cc:859
+  case 595:
+#line 2068 "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 594:
-#line 2068 "dhcp6_parser.yy" // lalr1.cc:859
+  case 596:
+#line 2072 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
 #line 3338 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 598:
-#line 2084 "dhcp6_parser.yy" // lalr1.cc:859
+  case 600:
+#line 2088 "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 599:
-#line 2089 "dhcp6_parser.yy" // lalr1.cc:859
+  case 601:
+#line 2093 "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 602:
-#line 2101 "dhcp6_parser.yy" // lalr1.cc:859
+  case 604:
+#line 2105 "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 603:
-#line 2105 "dhcp6_parser.yy" // lalr1.cc:859
+  case 605:
+#line 2109 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
 #line 3376 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 613:
-#line 2122 "dhcp6_parser.yy" // lalr1.cc:859
+  case 615:
+#line 2126 "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 614:
-#line 2127 "dhcp6_parser.yy" // lalr1.cc:859
+  case 616:
+#line 2131 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3393 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 615:
-#line 2129 "dhcp6_parser.yy" // lalr1.cc:859
+  case 617:
+#line 2133 "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 616:
-#line 2135 "dhcp6_parser.yy" // lalr1.cc:859
+  case 618:
+#line 2139 "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 617:
-#line 2140 "dhcp6_parser.yy" // lalr1.cc:859
+  case 619:
+#line 2144 "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 620:
-#line 2149 "dhcp6_parser.yy" // lalr1.cc:859
+  case 622:
+#line 2153 "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 621:
-#line 2153 "dhcp6_parser.yy" // lalr1.cc:859
+  case 623:
+#line 2157 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
 #line 3441 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 628:
-#line 2167 "dhcp6_parser.yy" // lalr1.cc:859
+  case 630:
+#line 2171 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3449 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 629:
-#line 2169 "dhcp6_parser.yy" // lalr1.cc:859
+  case 631:
+#line 2173 "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 630:
-#line 2175 "dhcp6_parser.yy" // lalr1.cc:859
+  case 632:
+#line 2179 "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 631:
-#line 2180 "dhcp6_parser.yy" // lalr1.cc:859
+  case 633:
+#line 2184 "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 632:
-#line 2185 "dhcp6_parser.yy" // lalr1.cc:859
+  case 634:
+#line 2189 "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_ = -781;
+  const short int Dhcp6Parser::yypact_ninf_ = -783;
 
   const signed char Dhcp6Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp6Parser::yypact_[] =
   {
-     435,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,    38,    41,    40,    42,    85,
-      92,   101,   107,   108,   116,   124,   128,   146,   158,   174,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,    41,    -2,
-      17,    63,    27,   214,    67,   227,   403,   140,    65,   266,
-     -41,   454,    64,  -781,   215,   220,   221,   239,   256,  -781,
-    -781,  -781,  -781,  -781,   259,  -781,    33,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,   265,   269,   270,
-     287,   297,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,   303,  -781,  -781,  -781,    68,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,   306,  -781,   138,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-     315,   321,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,   139,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,   148,  -781,  -781,  -781,  -781,  -781,
-     323,  -781,   327,   333,  -781,  -781,  -781,  -781,  -781,  -781,
-     152,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,   290,   348,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,   310,  -781,
-    -781,   359,  -781,  -781,  -781,   367,  -781,  -781,   357,   370,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,   373,   374,  -781,  -781,  -781,  -781,   372,
-     379,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,   172,  -781,  -781,  -781,   381,  -781,  -781,
-     385,  -781,   388,   389,  -781,  -781,   394,   395,   397,  -781,
-    -781,  -781,  -781,  -781,   219,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,   233,  -781,  -781,  -781,    41,    41,  -781,   222,   399,
-     402,   404,   405,   406,  -781,    17,  -781,   407,   409,   411,
-     412,   228,   245,   255,   258,   267,   414,   417,   428,   429,
-     430,   431,   432,   433,   436,   437,   438,   439,   440,   277,
-     441,   442,    63,  -781,   446,   289,    27,  -781,   452,   453,
-     455,   459,   464,   296,   305,   466,   467,   468,   469,   470,
-     214,  -781,   472,    67,  -781,   473,   316,   477,   320,   331,
-     227,  -781,   479,   481,   488,   490,   491,   492,   493,  -781,
-     403,  -781,   494,   495,   338,   500,   501,   502,   343,  -781,
-      65,   504,   345,   347,  -781,   266,   508,   509,   -28,  -781,
-     355,   510,   511,   356,   516,   360,   362,   517,   519,   366,
-     368,   369,   521,   522,   454,  -781,   527,    64,  -781,  -781,
-    -781,   530,   529,   531,    41,    41,    41,  -781,   532,   533,
-     534,   537,  -781,  -781,  -781,  -781,  -781,   538,   539,   540,
-     542,   376,   541,   545,   546,   547,   548,   550,   549,   551,
-    -781,   552,   553,  -781,   556,  -781,  -781,   557,   558,   396,
-     443,   444,  -781,  -781,   -15,   556,   445,   591,   590,  -781,
-     447,  -781,   448,  -781,   449,  -781,  -781,  -781,   556,   556,
-     556,   450,   451,   456,   457,  -781,   458,   460,  -781,   461,
-     462,   463,  -781,  -781,   465,  -781,  -781,  -781,   471,    41,
-    -781,  -781,   474,   475,  -781,   476,  -781,  -781,   -45,   483,
-    -781,  -781,  -781,   -73,   478,  -781,   593,  -781,    41,    63,
-      64,  -781,  -781,  -781,    27,   184,   184,   592,   594,   595,
-     596,  -781,  -781,  -781,   600,   -52,    41,    99,   607,   609,
-     135,   132,    32,   454,  -781,  -781,   613,   618,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,   620,   543,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,   621,  -781,   247,   253,   254,  -781,  -781,  -781,  -781,
-     625,   626,   627,   630,   634,  -781,   636,   637,  -781,   638,
-     639,   640,  -781,   257,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,   264,  -781,   641,   597,  -781,  -781,   642,   643,
-    -781,  -781,   644,   646,  -781,  -781,   645,   649,  -781,  -781,
-     647,   651,  -781,  -781,  -781,    90,  -781,  -781,  -781,   650,
-    -781,  -781,  -781,   118,  -781,  -781,  -781,  -781,   171,  -781,
-    -781,   652,   654,  -781,   655,   656,   657,   658,   659,   660,
-     291,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-     661,   662,   663,  -781,  -781,  -781,  -781,   301,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,   314,
-    -781,  -781,  -781,   318,   484,  -781,   664,   665,  -781,  -781,
-     666,   668,  -781,  -781,   667,   671,  -781,  -781,   669,  -781,
-     243,  -781,  -781,  -781,  -781,   672,   674,   675,   676,   507,
-     518,   513,   520,   523,   677,   524,   525,   679,   526,   528,
-     535,   184,  -781,  -781,   184,  -781,   592,   214,  -781,   594,
-      65,  -781,   595,   266,  -781,   596,   386,  -781,   600,   -52,
-    -781,  -781,    99,  -781,    18,   607,  -781,   -41,  -781,   609,
-     536,   544,   554,   560,   562,   563,   135,  -781,   685,   687,
-     565,   567,   574,   132,  -781,   688,   689,    32,  -781,  -781,
-    -781,   690,   691,    67,  -781,   613,   227,  -781,   618,   403,
-    -781,   620,   693,  -781,   105,   621,  -781,   178,   577,   578,
-     583,  -781,  -781,  -781,  -781,  -781,   584,  -781,  -781,   586,
-    -781,  -781,  -781,  -781,   330,  -781,   336,  -781,   692,  -781,
-     694,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,   340,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,   697,  -781,  -781,  -781,  -781,
-    -781,   695,   701,  -781,  -781,  -781,  -781,  -781,   344,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,   293,   587,  -781,
-    -781,  -781,  -781,   589,   604,  -781,  -781,   606,   350,  -781,
-     351,  -781,   699,  -781,   610,  -781,   704,  -781,  -781,  -781,
-    -781,  -781,   354,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,   386,  -781,   705,   555,  -781,    18,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,   706,   599,   707,   105,  -781,  -781,   611,  -781,  -781,
-     700,  -781,   612,  -781,  -781,   648,  -781,  -781,   294,  -781,
-      28,   648,  -781,  -781,   708,   709,   710,   361,  -781,  -781,
-    -781,  -781,  -781,  -781,   711,   614,   615,   623,    28,  -781,
-     619,  -781,  -781,  -781,  -781,  -781
+     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
   };
 
   const unsigned short int
@@ -3862,13 +3862,13 @@ namespace isc { namespace dhcp {
        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,   536,    27,   593,    29,    47,    41,
+     356,    23,   206,    25,   538,    27,   595,    29,    47,    41,
        0,     0,     0,     0,     0,     0,   443,     0,   321,   358,
        0,     0,     0,    49,     0,    48,     0,     0,    42,    68,
-     591,   585,   587,   589,     0,    67,     0,    60,    62,    64,
+     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,   476,   198,   217,   497,     0,   521,   534,    99,     0,
+     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,
@@ -3885,11 +3885,11 @@ namespace isc { namespace dhcp {
      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,   558,   560,
-       0,   563,     0,     0,   567,   571,     0,     0,     0,   576,
-     583,   556,   554,   555,     0,   538,   540,   541,   542,   543,
-     544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
-     598,     0,   595,   597,    46,     0,     0,    39,     0,     0,
+     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,
+     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,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -3900,107 +3900,107 @@ namespace isc { namespace dhcp {
        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,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   537,     0,     0,   594,    50,
+       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,     0,     0,     0,     0,     0,     0,     0,     0,
-     520,     0,     0,    73,     0,   118,   110,     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,   557,     0,     0,   562,     0,   565,   566,     0,     0,
-     573,   574,   575,     0,     0,   539,     0,   596,     0,     0,
-       0,   586,   588,   590,     0,     0,     0,   125,   235,   313,
+     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,   559,   561,   564,
-     569,   570,   568,   572,   578,   579,   580,   581,   582,   577,
-     584,     0,    44,     0,     0,     0,   151,   157,   159,   161,
+     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,   480,     0,   478,
+     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,   510,   516,
-       0,     0,     0,   509,   506,   507,   508,     0,   499,   501,
-     504,   502,   503,   505,   530,   532,   529,   527,   528,     0,
-     523,   525,   526,     0,    53,   384,     0,   381,   382,   409,
-       0,   406,   407,   439,     0,   436,   437,   474,     0,   602,
-       0,   600,    69,   592,   106,     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,     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,   482,     0,   477,     0,   199,     0,
-       0,     0,     0,     0,     0,     0,     0,   218,     0,     0,
-       0,     0,     0,     0,   498,     0,     0,     0,   522,   535,
-      55,     0,    54,     0,   379,     0,     0,   404,     0,   443,
-     434,     0,     0,   473,     0,     0,   599,     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,   494,     0,   492,   493,   489,   490,
-     491,     0,   483,   484,   486,   487,   488,   479,     0,   203,
-     227,   228,   229,   230,   231,   232,   220,     0,     0,   515,
-     518,   519,   500,     0,     0,   524,    52,     0,     0,   383,
-       0,   408,     0,   438,     0,   616,     0,   614,   612,   606,
-     610,   611,     0,   604,   608,   609,   607,   601,   153,   154,
-     155,   156,   152,   158,   160,   162,   175,   178,   130,   240,
-     318,   355,     0,   289,     0,     0,   481,     0,   205,   512,
-     513,   514,   511,   517,   531,   533,    56,   385,   410,   440,
-     475,     0,     0,     0,     0,   603,   291,     0,   496,   485,
-       0,   613,     0,   605,   495,     0,   615,   620,     0,   618,
-       0,     0,   617,   628,     0,     0,     0,     0,   622,   624,
-     625,   626,   627,   619,     0,     0,     0,     0,     0,   621,
-       0,   630,   631,   632,   623,   629
+       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
   };
 
   const short int
   Dhcp6Parser::yypgoto_[] =
   {
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,     6,  -781,   225,  -781,
-    -781,  -781,  -781,  -781,  -781,   185,  -781,  -376,  -781,  -781,
-    -781,   -70,  -781,  -781,  -781,   410,  -781,  -781,  -781,  -781,
-     169,   382,   -66,   -56,   -55,   -54,  -781,  -781,  -781,  -781,
-    -781,   204,   392,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,   -10,  -781,  -541,     1,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,   -34,  -781,
-    -559,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,   -13,  -554,  -781,  -781,
-    -781,  -781,   -14,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,   -18,  -781,  -781,  -781,   -11,   365,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,   -22,  -781,  -781,  -781,  -781,  -781,
-    -781,  -780,  -781,  -781,  -781,     8,  -781,  -781,  -781,    15,
-     413,  -781,  -781,  -776,  -781,  -773,  -781,   -32,  -781,   -21,
-    -781,  -772,  -781,  -781,  -781,  -771,  -781,  -781,  -781,  -781,
-       7,  -781,  -781,  -156,   730,  -781,  -781,  -781,  -781,  -781,
-      19,  -781,  -781,  -781,    23,  -781,   398,  -781,   -65,  -781,
-    -781,  -781,  -781,  -781,   -58,  -781,  -781,  -781,  -781,  -781,
-      12,  -781,  -781,  -781,    14,  -781,  -781,  -781,    21,  -781,
-     400,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,   -16,  -781,  -781,  -781,    -9,   427,  -781,  -781,
-     -44,  -781,    -6,  -781,  -781,  -781,  -781,  -781,   -12,  -781,
-    -781,  -781,    -8,   422,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,    -7,  -781,  -781,  -781,    -4,
-    -781,   419,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -770,  -781,  -781,  -781,
-    -781,  -781,  -781,    26,  -781,  -781,  -781,  -144,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,     9,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,    10,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,   263,   408,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,  -781,
-    -781,  -781,   292,   393,  -781,  -781,  -781,    -1,  -781,  -781,
-    -145,  -781,  -781,  -781,  -781,  -781,  -781,  -160,  -781,  -781,
-    -175,  -781,  -781,  -781,  -781,  -781
+    -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
   };
 
   const short int
@@ -4008,156 +4008,157 @@ 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,   831,
-     832,   642,    43,    70,    96,    97,    98,   339,    45,    71,
+     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,   784,   643,   644,   645,   765,
-     952,   646,   766,   647,   767,   648,   768,   649,   650,   413,
-     651,   652,   653,   654,   655,   656,   657,   658,   659,   774,
-     660,   661,   777,   140,   362,   685,   686,   687,   688,   141,
+     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,   807,    63,    80,   293,   294,   295,   426,   296,
+     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,   787,    49,    73,   182,
+     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,   796,   885,   886,   147,   357,    57,    77,   672,   673,
-     674,   790,    59,    78,   258,   259,   260,   261,   262,   263,
+     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,   793,    61,    79,   279,   280,
+     148,   358,   676,   677,   678,   795,    61,    79,   279,   280,
      281,   282,   283,   421,   284,   285,   286,   287,   193,   378,
-     746,   747,   748,   833,    51,    74,   204,   205,   206,   392,
-     149,   359,   150,   360,   196,   379,   750,   751,   752,   836,
+     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,   839,    55,    76,   238,
+     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,   758,   842,
-     151,   365,   698,   699,   804,   901,   902,   903,   904,   905,
-     964,   906,   152,   368,   727,   728,   729,   818,   972,   730,
-     731,   819,   732,   733,   153,   154,   370,   739,   740,   741,
-     825,   742,   826,   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,   760,   761,   844,   942,
-     943,   944,   945,   983,   946,   981,   998,   999,  1000,  1007,
-    1008,  1009,  1014,  1010,  1011,  1012
+     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
   };
 
   const unsigned short int
   Dhcp6Parser::yytable_[] =
   {
       95,   128,   158,   177,   200,   214,   234,   178,   256,   275,
-     292,   311,   724,   692,   277,   662,   878,   179,   180,   181,
-     879,   278,    38,   880,   883,   884,   890,    89,   163,   194,
+     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,    44,
-      33,   290,   291,   202,   216,   581,   582,   583,   614,   615,
-     616,   617,   114,   250,   290,   291,   164,   195,   208,   219,
+     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,   799,   115,   116,   800,   894,   895,    48,
+     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,   802,   199,    56,   803,   115,   116,   115,   116,   115,
+      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,
-     250,   393,    90,    62,   122,   400,   394,   123,   631,    86,
-     401,    91,    92,    93,   124,    64,  1003,   115,   116,  1004,
-    1005,  1006,   125,   126,   805,   428,   127,   806,    94,    94,
-     429,    66,   878,   113,   683,   690,   879,   691,    94,   880,
-     883,   884,   890,    94,   115,   116,   948,   949,   950,   951,
-     330,   626,    34,    35,    36,    37,   627,   628,   629,   630,
+     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,   334,   444,   335,    94,   336,    94,   445,    94,   250,
-     704,   705,   706,   707,   708,   709,   447,   719,   720,   721,
-     722,   448,   935,   864,   936,   937,   845,   337,   692,   846,
-     372,   107,   108,   109,   110,   762,   447,   376,   114,   338,
-     781,   763,   764,   344,   724,   782,    94,   781,   165,   351,
-     166,   114,   783,   352,   353,    95,   115,   116,   167,   168,
+     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,   816,   174,   175,  1001,   409,   817,
-    1002,   355,   128,   176,   823,   173,   158,   369,   174,   824,
-     375,   250,   272,   251,   252,   273,   274,   827,   411,   383,
-     177,   444,   828,   200,   178,   384,   829,   396,   115,   116,
-     214,   398,   163,   781,   179,   180,   181,   399,   958,   390,
-     234,   449,   450,   962,   959,    94,   194,   428,   963,   207,
-     256,   410,   968,   393,   400,   275,   218,   984,   977,   978,
-     277,   201,   985,   414,  1018,   419,   236,   278,   215,  1019,
-     164,   418,   202,   420,   311,    94,   270,   422,   423,   216,
-     424,   288,   425,   451,   195,   430,   257,   208,    94,   433,
-     462,   276,   435,   436,   219,   969,   970,   971,   439,   440,
-     312,   441,   192,   452,   237,   203,   453,   463,   454,   455,
-     456,   458,   217,   459,   271,   460,   461,   464,   467,   289,
-     465,   468,   235,   107,   108,   109,   110,    94,   112,   466,
-     114,   250,   469,   470,   471,   472,   473,   474,   313,   480,
-     475,   476,   477,   478,   479,   481,   482,   114,   115,   116,
-     484,   168,   169,   485,   171,   172,   487,   488,   492,   489,
-     551,   552,   553,   490,   173,   115,   116,   174,   491,   493,
-     494,   495,   496,   497,   498,   176,   500,   502,   503,   128,
-     227,   504,   505,   508,   158,   509,   228,   229,   230,   231,
-     232,   233,   510,   506,   511,   512,   513,   514,   516,   517,
-     518,   723,   736,   311,   519,   520,   521,   522,   524,   525,
-     163,   526,   528,   529,   532,   533,   115,   116,   534,   531,
-     535,   538,   536,   539,   537,   543,   544,   725,   737,   312,
-     540,   546,   541,   542,   548,   606,   549,   563,   550,   554,
-     555,   556,   557,   558,   559,   560,   564,    94,   164,    32,
-     565,   566,   567,   568,   622,   569,   570,   578,   571,   572,
-     573,   574,   576,   577,    94,   726,   738,   313,   297,   298,
+     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,   587,   588,   621,   663,
-     786,   667,   671,   675,   579,   580,   586,   679,   589,   590,
-     591,   595,   596,   613,   697,    94,   700,   597,   598,   599,
-     745,   600,   601,   602,   603,   749,   604,   753,   759,   769,
-     770,   771,   605,   757,   772,   607,   608,   609,   773,   620,
-     775,   776,   778,   779,   780,   830,   789,   785,   788,   792,
-     791,   794,   795,   797,   798,   997,   801,   809,   808,   810,
-     811,   812,   813,   814,   815,   820,   821,   822,   835,   851,
-     834,   838,   837,   840,   841,   853,   847,   843,   848,   849,
-     850,   856,   852,   859,   854,   855,   857,   858,   860,   917,
-     861,   918,   923,   924,   927,   561,   926,   934,   910,   862,
-     960,   965,   961,   966,   967,   995,   911,   979,   982,   987,
-     990,   992,  1015,  1016,  1017,  1020,   912,   177,   623,   988,
-     256,   178,   913,   275,   914,   915,   872,   919,   277,   920,
-     873,   179,   180,   181,   896,   278,   921,   292,   953,   954,
-     874,   875,   876,   194,   955,   956,   270,   957,   973,   288,
-     974,   689,   888,   723,   483,   457,   257,   736,   625,   276,
-     899,   991,   877,   200,   881,   975,   214,   976,   486,   234,
-     897,   980,   994,   996,   938,   882,   865,  1022,  1021,   725,
-    1025,   195,   863,   737,   271,  1023,   892,   289,   893,   207,
-     889,   909,   218,   530,   916,   236,   908,   867,   900,   192,
-     940,   201,   866,   499,   215,   891,   986,   248,   887,   871,
-     939,   869,   202,   868,   870,   216,   898,   726,   523,   929,
-     501,   738,   507,   989,   928,   527,   931,   208,   930,   515,
-     219,   907,   922,   237,   933,   932,   743,   925,   941,   993,
-     547,  1013,   624,  1024,   947,   203,     0,     0,   217,     0,
-       0,   235,   545,     0,     0,     0,     0,     0,     0,     0,
+       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,
        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,   872,     0,     0,     0,   873,   896,     0,     0,
-       0,     0,     0,     0,     0,     0,   874,   875,   876,     0,
-       0,     0,     0,     0,   938,     0,     0,     0,   888,     0,
-       0,     0,     0,   899,     0,     0,     0,     0,   877,     0,
-     881,     0,     0,   897,     0,     0,     0,     0,     0,     0,
-     940,   882,     0,     0,     0,     0,     0,     0,     0,     0,
-     939,     0,     0,     0,     0,     0,   889,     0,     0,     0,
-       0,   900,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   887,     0,     0,     0,   941,   898
+       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
   };
 
   const short int
   Dhcp6Parser::yycheck_[] =
   {
       70,    71,    72,    73,    74,    75,    76,    73,    78,    79,
-      80,    81,   571,   567,    79,   556,   796,    73,    73,    73,
-     796,    79,    16,   796,   796,   796,   796,    10,    72,    73,
+      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,     7,
-       9,    92,    93,    74,    75,    70,    71,    72,   131,   132,
-     133,   134,    44,    45,    92,    93,    72,    73,    74,    75,
+      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,
@@ -4166,89 +4167,90 @@ namespace isc { namespace dhcp {
      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,
-      45,     3,   135,     7,    91,     3,     8,    94,    26,   161,
-       8,   144,   145,   146,   101,     7,   138,    62,    63,   141,
-     142,   143,   109,   110,     3,     3,   113,     6,   161,   161,
-       8,     7,   962,    43,    85,    86,   962,    88,   161,   962,
-     962,   962,   962,   161,    62,    63,    18,    19,    20,    21,
-     136,    17,   161,   162,   163,   164,    22,    23,    24,    25,
+       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,     6,     3,     3,   161,     4,   161,     8,   161,    45,
-      95,    96,    97,    98,    99,   100,     3,   105,   106,   107,
-     108,     8,   137,   784,   139,   140,     3,     8,   802,     6,
-       3,    37,    38,    39,    40,     8,     3,     3,    44,     3,
-       3,     8,     8,     4,   823,     8,   161,     3,    54,     4,
+      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,     4,   372,    89,     3,    78,   376,     4,    81,     8,
-       4,    45,    46,    47,    48,    49,    50,     3,     8,     4,
-     390,     3,     8,   393,   390,     4,     8,     4,    62,    63,
-     400,     4,   376,     3,   390,   390,   390,     4,     8,     3,
-     410,   335,   336,     3,     8,   161,   390,     3,     8,   393,
-     420,     3,     8,     3,     3,   425,   400,     3,     8,     8,
-     425,   393,     8,     4,     3,     8,   410,   425,   400,     8,
-     376,     4,   393,     3,   444,   161,   420,     4,     4,   400,
-       8,   425,     3,   161,   390,     4,   420,   393,   161,     4,
-     162,   425,     4,     4,   400,   102,   103,   104,     4,     4,
+       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,   162,     4,   425,
-     162,     4,   410,    37,    38,    39,    40,   161,    42,   162,
-      44,    45,     4,     4,     4,     4,     4,     4,   444,   162,
+       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,   164,    68,    69,     4,     4,   162,     4,
-     454,   455,   456,     4,    78,    62,    63,    81,     4,   164,
-       4,     4,     4,     4,     4,    89,     4,     4,   162,   549,
+       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,     4,   162,     4,     4,     4,     4,     4,     4,
-     162,   571,   572,   573,     4,     4,     4,   164,     4,   164,
-     554,   164,     4,     4,     4,     4,    62,    63,   162,   164,
-       4,     4,   162,     4,   162,     4,     4,   571,   572,   573,
-     164,     4,   164,   164,     4,   529,     7,   161,     7,     7,
-       7,     7,     5,     5,     5,     5,     5,   161,   554,     7,
-       5,     5,     5,     5,   548,     5,     7,   161,     7,     7,
-       7,     5,     5,     5,   161,   571,   572,   573,   114,   115,
+      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,
      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,     5,     7,     5,     7,
-       3,     7,     7,     7,   161,   161,   161,     7,   161,   161,
-     161,   161,   161,   130,     7,   161,     7,   161,   161,   161,
-       7,   161,   161,   161,   161,     7,   161,     7,     7,     4,
-       4,     4,   161,    90,     4,   161,   161,   161,     4,   161,
-       4,     4,     4,     4,     4,   161,     3,     6,     6,     3,
-       6,     6,     3,     6,     3,     7,     6,     3,     6,     4,
-       4,     4,     4,     4,     4,     4,     4,     4,     3,   162,
-       6,     3,     6,     6,     3,   162,     4,     8,     4,     4,
-       4,     4,   164,     4,   164,   162,   162,   162,   162,     4,
-     162,     4,     4,     4,     3,   470,     6,     4,   162,   164,
-       8,     4,     8,     8,     3,     5,   162,     8,     4,     4,
-       4,     4,     4,     4,     4,     4,   162,   787,   549,   164,
-     790,   787,   162,   793,   162,   162,   796,   162,   793,   162,
-     796,   787,   787,   787,   804,   793,   162,   807,   161,   161,
-     796,   796,   796,   787,   161,   161,   790,   161,   161,   793,
-     161,   566,   796,   823,   372,   345,   790,   827,   554,   793,
-     804,   162,   796,   833,   796,   161,   836,   161,   376,   839,
-     804,   161,   161,   161,   844,   796,   786,   162,   164,   823,
-     161,   787,   781,   827,   790,   162,   799,   793,   802,   833,
-     796,   809,   836,   428,   816,   839,   807,   789,   804,   787,
-     844,   833,   787,   390,   836,   798,   962,    77,   796,   795,
-     844,   792,   833,   790,   793,   836,   804,   823,   420,   835,
-     393,   827,   400,   967,   833,   425,   838,   833,   836,   410,
-     836,   805,   823,   839,   841,   839,   573,   827,   844,   984,
-     447,  1001,   550,  1018,   845,   833,    -1,    -1,   836,    -1,
-      -1,   839,   444,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     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,
       -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,   962,    -1,    -1,    -1,   962,   967,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   962,   962,   962,    -1,
-      -1,    -1,    -1,    -1,   984,    -1,    -1,    -1,   962,    -1,
-      -1,    -1,    -1,   967,    -1,    -1,    -1,    -1,   962,    -1,
-     962,    -1,    -1,   967,    -1,    -1,    -1,    -1,    -1,    -1,
-     984,   962,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     984,    -1,    -1,    -1,    -1,    -1,   962,    -1,    -1,    -1,
-      -1,   967,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   962,    -1,    -1,    -1,   984,   967
+      -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
   };
 
   const unsigned short int
@@ -4260,16 +4262,16 @@ namespace isc { namespace dhcp {
        0,     5,     7,     9,   161,   162,   163,   164,   181,   182,
      183,   188,     7,   197,     7,   203,     7,   214,     7,   302,
        7,   379,     7,   395,     7,   412,     7,   331,     7,   337,
-       7,   361,     7,   278,     7,   470,     7,   505,   189,   184,
+       7,   361,     7,   278,     7,   471,     7,   506,   189,   184,
      198,   204,   215,   303,   380,   396,   413,   332,   338,   362,
-     279,   471,   506,   181,   190,   191,   161,   186,   187,    10,
-     135,   144,   145,   146,   161,   196,   199,   200,   201,   497,
-     499,   501,   503,    11,    14,    15,    16,    37,    38,    39,
+     279,   472,   507,   181,   190,   191,   161,   186,   187,    10,
+     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,   435,   447,   459,   460,   468,    12,    13,   196,   216,
+     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,
@@ -4285,20 +4287,20 @@ namespace isc { namespace dhcp {
      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,   472,   473,   474,   475,   477,   479,
-     480,   482,   483,   484,   487,   489,   490,   491,   492,   495,
-     136,   507,   508,   509,     6,     3,     4,     8,     3,   202,
-     504,   498,   500,   502,     4,     3,     8,   213,   222,   224,
+     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,   436,   273,   287,   448,     4,
-     461,   469,     3,     8,   219,     4,     3,     8,   374,   390,
+     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,   476,   478,     4,   481,     4,     4,   485,   488,     4,
-       4,     4,   493,   496,     3,     8,   510,     3,     8,   181,
+       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,     4,
@@ -4308,55 +4310,55 @@ namespace isc { namespace dhcp {
        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,   473,     4,   508,     4,     7,
+     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,   486,   130,   131,   132,   133,   134,   164,   494,
-     161,     5,   181,   205,   507,   216,    17,    22,    23,    24,
+     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,   437,   438,
+      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,   449,   450,   451,
-     454,   455,   457,   458,   111,   112,   196,   385,   387,   462,
-     463,   464,   466,   472,   193,     7,   375,   376,   377,     7,
-     391,   392,   393,     7,   408,   409,   410,    90,   433,     7,
-     511,   512,     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,   439,     3,     6,   277,     6,     3,
-       4,     4,     4,     4,     4,     4,     3,     8,   452,   456,
-       4,     4,     4,     3,     8,   465,   467,     3,     8,     8,
-     161,   194,   195,   378,     6,     3,   394,     6,     3,   411,
-       6,     3,   434,     8,   513,     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,   440,   441,   442,   443,   444,   446,   438,   280,   276,
-     162,   162,   162,   162,   162,   162,   289,     4,     4,   162,
-     162,   162,   450,     4,     4,   463,     6,     3,   381,   377,
-     397,   393,   414,   410,     4,   137,   139,   140,   196,   243,
-     385,   387,   514,   515,   516,   517,   519,   512,    18,    19,
-      20,    21,   235,   161,   161,   161,   161,   161,     8,     8,
-       8,     8,     3,     8,   445,     4,     8,     3,     8,   102,
-     103,   104,   453,   161,   161,   161,   161,     8,     8,     8,
-     161,   520,     4,   518,     3,     8,   328,     4,   164,   442,
-       4,   162,     4,   515,   161,     5,   161,     7,   521,   522,
-     523,     3,     6,   138,   141,   142,   143,   524,   525,   526,
-     528,   529,   530,   522,   527,     4,     4,     4,     3,     8,
-       4,   164,   162,   162,   525,   161
+     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
   };
 
   const unsigned short int
@@ -4409,23 +4411,23 @@ namespace isc { namespace dhcp {
      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,   434,   433,   436,   435,   437,   437,
-     439,   438,   440,   440,   441,   441,   442,   442,   442,   442,
-     442,   442,   442,   443,   445,   444,   446,   448,   447,   449,
-     449,   450,   450,   450,   450,   450,   450,   450,   450,   450,
-     452,   451,   453,   453,   453,   454,   456,   455,   457,   458,
-     459,   461,   460,   462,   462,   463,   463,   463,   463,   463,
-     465,   464,   467,   466,   469,   468,   471,   470,   472,   472,
-     473,   473,   473,   473,   473,   473,   473,   473,   473,   473,
-     473,   473,   473,   473,   473,   473,   473,   474,   476,   475,
-     478,   477,   479,   481,   480,   482,   483,   485,   484,   486,
-     486,   488,   487,   489,   490,   491,   493,   492,   494,   494,
-     494,   494,   494,   496,   495,   498,   497,   500,   499,   502,
-     501,   504,   503,   506,   505,   507,   507,   508,   510,   509,
-     511,   511,   513,   512,   514,   514,   515,   515,   515,   515,
-     515,   515,   515,   516,   518,   517,   520,   519,   521,   521,
-     523,   522,   524,   524,   525,   525,   525,   525,   527,   526,
-     528,   529,   530
+     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
@@ -4478,23 +4480,23 @@ namespace isc { namespace dhcp {
        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,     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,
+       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,
-       1,     1,     1,     3,     0,     4,     0,     6,     1,     3,
-       0,     4,     1,     3,     1,     1,     1,     1,     0,     4,
-       3,     3,     3
+       0,     4,     3,     3,     3
   };
 
 
@@ -4615,7 +4617,7 @@ namespace isc { namespace dhcp {
   "$@81", "prefixes", "$@82", "duid", "$@83", "hw_address", "$@84",
   "hostname", "$@85", "flex_id_value", "$@86",
   "reservation_client_classes", "$@87", "relay", "$@88", "relay_map",
-  "$@89", "client_classes", "$@90", "client_classes_list",
+  "ip_address", "$@89", "client_classes", "$@90", "client_classes_list",
   "client_class_entry", "$@91", "client_class_params",
   "not_empty_client_class_params", "client_class_param",
   "client_class_name", "client_class_test", "$@92", "only_if_required",
@@ -4691,23 +4693,23 @@ namespace isc { namespace dhcp {
     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,  1687,  1698,  1698,  1708,  1709,
-    1712,  1712,  1722,  1723,  1726,  1727,  1730,  1731,  1732,  1733,
-    1734,  1735,  1736,  1739,  1741,  1741,  1749,  1757,  1757,  1769,
-    1770,  1773,  1774,  1775,  1776,  1777,  1778,  1779,  1780,  1781,
-    1784,  1784,  1791,  1792,  1793,  1796,  1801,  1801,  1809,  1814,
-    1821,  1828,  1828,  1838,  1839,  1842,  1843,  1844,  1845,  1846,
-    1849,  1849,  1857,  1857,  1867,  1867,  1879,  1879,  1889,  1890,
-    1893,  1894,  1895,  1896,  1897,  1898,  1899,  1900,  1901,  1902,
-    1903,  1904,  1905,  1906,  1907,  1908,  1909,  1912,  1917,  1917,
-    1925,  1925,  1933,  1938,  1938,  1946,  1951,  1956,  1956,  1964,
-    1965,  1968,  1968,  1976,  1981,  1986,  1991,  1991,  1999,  2002,
-    2005,  2008,  2011,  2017,  2017,  2027,  2027,  2034,  2034,  2041,
-    2041,  2054,  2054,  2064,  2064,  2075,  2076,  2080,  2084,  2084,
-    2096,  2097,  2101,  2101,  2109,  2110,  2113,  2114,  2115,  2116,
-    2117,  2118,  2119,  2122,  2127,  2127,  2135,  2135,  2145,  2146,
-    2149,  2149,  2157,  2158,  2161,  2162,  2163,  2164,  2167,  2167,
-    2175,  2180,  2185
+    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
   };
 
   // Print the state stack on the debug stream.
@@ -4742,8 +4744,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4746 "dhcp6_parser.cc" // lalr1.cc:1167
-#line 2190 "dhcp6_parser.yy" // lalr1.cc:1168
+#line 4748 "dhcp6_parser.cc" // lalr1.cc:1167
+#line 2194 "dhcp6_parser.yy" // lalr1.cc:1168
 
 
 void
index 43e675e6048615325ccfbc4b2662c974edb34d61..9d54ba18e6f5af02aafb92404cdb59958fe95cb2 100644 (file)
@@ -1480,8 +1480,8 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 979,     ///< Last index in yytable_.
-      yynnts_ = 366,  ///< Number of nonterminal symbols.
+      yylast_ = 981,     ///< Last index in yytable_.
+      yynnts_ = 367,  ///< Number of nonterminal symbols.
       yyfinal_ = 30, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
@@ -1582,9 +1582,9 @@ namespace isc { namespace dhcp {
       case 185: // map_value
       case 235: // db_type
       case 318: // hr_mode
-      case 453: // duid_type
-      case 486: // ncr_protocol_value
-      case 494: // replace_client_name_value
+      case 454: // duid_type
+      case 487: // ncr_protocol_value
+      case 495: // replace_client_name_value
         value.copy< ElementPtr > (other.value);
         break;
 
@@ -1625,9 +1625,9 @@ namespace isc { namespace dhcp {
       case 185: // map_value
       case 235: // db_type
       case 318: // hr_mode
-      case 453: // duid_type
-      case 486: // ncr_protocol_value
-      case 494: // replace_client_name_value
+      case 454: // duid_type
+      case 487: // ncr_protocol_value
+      case 495: // replace_client_name_value
         value.copy< ElementPtr > (v);
         break;
 
@@ -1727,9 +1727,9 @@ namespace isc { namespace dhcp {
       case 185: // map_value
       case 235: // db_type
       case 318: // hr_mode
-      case 453: // duid_type
-      case 486: // ncr_protocol_value
-      case 494: // replace_client_name_value
+      case 454: // duid_type
+      case 487: // ncr_protocol_value
+      case 495: // replace_client_name_value
         value.template destroy< ElementPtr > ();
         break;
 
@@ -1776,9 +1776,9 @@ namespace isc { namespace dhcp {
       case 185: // map_value
       case 235: // db_type
       case 318: // hr_mode
-      case 453: // duid_type
-      case 486: // ncr_protocol_value
-      case 494: // replace_client_name_value
+      case 454: // duid_type
+      case 487: // ncr_protocol_value
+      case 495: // replace_client_name_value
         value.move< ElementPtr > (s.value);
         break;
 
index 38337d8bde98df34be99ba13dd73dc1e2e728d00..32febb744a4fe80e4535066a5d716b5b28487ee3 100644 (file)
@@ -1684,11 +1684,15 @@ relay: RELAY {
     ctx.leave();
 };
 
-relay_map: IP_ADDRESS {
+relay_map: ip_address
+         | ip_addresses
+         ;
+
+ip_address: IP_ADDRESS {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
-    ElementPtr ip(new StringElement($4, ctx.loc2pos(@4)));
-    ctx.stack_.back()->set("ip-address", ip);
+    ElementPtr addr(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("ip-address", addr);
     ctx.leave();
 };
 
index 1e2f5db4bd92639a2bc0ee4ebf86c3ed49863c0f..239704683c8fa2193dfd7c1bd8641c8df96d8a39 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111534
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index c37a989a18c62abf618ebafcafb2901895c932f2..2ee80e6d0a22726887dabd52d10789130b8e5d56 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111534
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index d690601d9b8f404217808f1c2311636fe457d1b7..db2863a06ef4a89243bf39cc72557573857e8cf7 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111534
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++
index 120e41d27a9d4a1a04d9ce1129526f5cae234a14..e3c03f1befce03c3db57b0c1744d1b7f5e952725 100644 (file)
@@ -4142,7 +4142,43 @@ TEST_F(Dhcp6ParserTest, subnetRelayInfo) {
     Subnet6Ptr subnet = CfgMgr::instance().getStagingCfg()->getCfgSubnets6()->
         selectSubnet(IOAddress("2001:db8:1::1"), classify_);
     ASSERT_TRUE(subnet);
-    EXPECT_EQ("2001:db8:1::abcd", subnet->getRelayInfo().addr_.toText());
+
+    EXPECT_TRUE(subnet->hasRelays());
+    EXPECT_TRUE(subnet->hasRelayAddress(IOAddress("2001:db8:1::abcd")));
+}
+
+// This test checks if it is possible to specify a list of relays
+TEST_F(Dhcp6ParserTest, subnetRelayInfoList) {
+    // A config with relay information.
+    string config = "{ " + genIfaceConfig() + ","
+        "\"rebind-timer\": 2000, "
+        "\"renew-timer\": 1000, "
+        "\"subnet6\": [ { "
+        "    \"pools\": [ { \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\" } ],"
+        "    \"relay\": { "
+        "        \"ip-addresses\": [ \"2001:db8:1::abcd\", \"2001:db8:1::abce\" ]"
+        "    },"
+        "    \"subnet\": \"2001:db8:1::/64\" } ],"
+        "\"preferred-lifetime\": 3000, "
+        "\"valid-lifetime\": 4000 }";
+
+    ConstElementPtr json;
+    ASSERT_NO_THROW(json = parseDHCP6(config));
+    extractConfig(config);
+
+    ConstElementPtr status;
+    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+
+    // returned value should be 0 (configuration success)
+    checkResult(status, 0);
+
+    Subnet6Ptr subnet = CfgMgr::instance().getStagingCfg()->getCfgSubnets6()->
+        selectSubnet(IOAddress("2001:db8:1::1"), classify_);
+    ASSERT_TRUE(subnet);
+
+    EXPECT_TRUE(subnet->hasRelays());
+    EXPECT_TRUE(subnet->hasRelayAddress(IOAddress("2001:db8:1::abcd")));
+    EXPECT_TRUE(subnet->hasRelayAddress(IOAddress("2001:db8:1::abce")));
 }
 
 // Goal of this test is to verify that multiple subnets can be configured
@@ -6008,7 +6044,7 @@ TEST_F(Dhcp6ParserTest, sharedNetworksDerive) {
     ASSERT_TRUE(s);
     ASSERT_TRUE(s->getInterfaceId());
     EXPECT_TRUE(iface_id1.equals(s->getInterfaceId()));
-    EXPECT_EQ(IOAddress("1111::1"), s->getRelayInfo().addr_);
+    EXPECT_TRUE(s->hasRelayAddress(IOAddress("1111::1")));
     EXPECT_TRUE(s->getRapidCommit());
     EXPECT_EQ(Network::HR_DISABLED, s->getHostReservationMode());
 
@@ -6019,7 +6055,7 @@ TEST_F(Dhcp6ParserTest, sharedNetworksDerive) {
     s = checkSubnet(*subs, "2001:db2::/48", 100, 200, 300, 400);
     ASSERT_TRUE(s->getInterfaceId());
     EXPECT_TRUE(iface_id2.equals(s->getInterfaceId()));
-    EXPECT_EQ(IOAddress("2222::2"), s->getRelayInfo().addr_);
+    EXPECT_TRUE(s->hasRelayAddress(IOAddress("2222::2")));
     EXPECT_TRUE(s->getRapidCommit());
     EXPECT_EQ(Network::HR_OUT_OF_POOL, s->getHostReservationMode());
 
@@ -6034,7 +6070,7 @@ TEST_F(Dhcp6ParserTest, sharedNetworksDerive) {
     // This subnet should derive its renew-timer from global scope.
     s = checkSubnet(*subs, "2001:db3::/48", 1, 2, 3, 4);
     EXPECT_FALSE(s->getInterfaceId());
-    EXPECT_EQ(IOAddress("::"), s->getRelayInfo().addr_);
+    EXPECT_FALSE(s->hasRelays());
     EXPECT_FALSE(s->getRapidCommit());
     EXPECT_EQ(Network::HR_ALL, s->getHostReservationMode());
 }
index 5f3ddccdd6b9fee714d6e862905084a343135a29..46db37bf34384a09dce5ff27e257a28241ece320 100644 (file)
@@ -978,6 +978,30 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"renew-timer\": 1000,\n"
 "        \"subnet6\": [\n"
 "            {\n"
+"                \"pools\": [\n"
+"                    {\n"
+"                        \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
+"                    }\n"
+"                ],\n"
+"                \"relay\": {\n"
+"                    \"ip-addresses\": [ \"2001:db8:1::abcd\", \"2001:db8:1::abce\" ]\n"
+"                },\n"
+"                \"subnet\": \"2001:db8:1::/64\"\n"
+"            }\n"
+"        ],\n"
+"        \"valid-lifetime\": 4000\n"
+"    }\n",
+    // CONFIGURATION 32
+"{\n"
+"        \"interfaces-config\": {\n"
+"            \"interfaces\": [ \"*\" ],\n"
+"            \"re-detect\": false\n"
+"        },\n"
+"        \"preferred-lifetime\": 3000,\n"
+"        \"rebind-timer\": 2000,\n"
+"        \"renew-timer\": 1000,\n"
+"        \"subnet6\": [\n"
+"            {\n"
 "                \"client-class\": \"alpha\",\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -1015,7 +1039,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 32
+    // CONFIGURATION 33
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1048,7 +1072,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 33
+    // CONFIGURATION 34
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1089,7 +1113,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 34
+    // CONFIGURATION 35
 "{\n"
 "        \"dhcp-ddns\": {\n"
 "            \"always-include-fqdn\": true,\n"
@@ -1126,7 +1150,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 35
+    // CONFIGURATION 36
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1213,7 +1237,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 36
+    // CONFIGURATION 37
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1253,7 +1277,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 37
+    // CONFIGURATION 38
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1266,7 +1290,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"subnet6\": [ ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 38
+    // CONFIGURATION 39
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1279,7 +1303,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"subnet6\": [ ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 39
+    // CONFIGURATION 40
 "{\n"
 "        \"preferred-lifetime\": 3000,\n"
 "        \"rebind-timer\": 2000,\n"
@@ -1323,7 +1347,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 40
+    // CONFIGURATION 41
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1336,7 +1360,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"subnet6\": [ ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 41
+    // CONFIGURATION 42
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1344,7 +1368,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 42
+    // CONFIGURATION 43
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1352,7 +1376,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 43
+    // CONFIGURATION 44
 "{\n"
 "        \"decline-probation-period\": 12345,\n"
 "        \"interfaces-config\": {\n"
@@ -1361,7 +1385,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 44
+    // CONFIGURATION 45
 "{\n"
 "        \"expired-leases-processing\": {\n"
 "            \"flush-reclaimed-timer-wait-time\": 35,\n"
@@ -1377,7 +1401,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 45
+    // CONFIGURATION 46
 "{\n"
 "        \"client-classes\": [\n"
 "            {\n"
@@ -1409,7 +1433,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 46
+    // CONFIGURATION 47
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1430,7 +1454,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 47
+    // CONFIGURATION 48
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1452,7 +1476,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 48
+    // CONFIGURATION 49
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1479,7 +1503,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 49
+    // CONFIGURATION 50
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1506,7 +1530,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 50
+    // CONFIGURATION 51
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1529,7 +1553,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 51
+    // CONFIGURATION 52
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1553,7 +1577,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 52
+    // CONFIGURATION 53
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1582,7 +1606,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 53
+    // CONFIGURATION 54
 "{\n"
 "        \"hosts-databases\": [\n"
 "            {\n"
@@ -1607,7 +1631,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"renew-timer\": 1000,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 54
+    // CONFIGURATION 55
 "{\n"
 "        \"comment\": \"A DHCPv6 server\",\n"
 "        \"client-classes\": [\n"
@@ -1825,7 +1849,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -1900,7 +1924,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -1922,7 +1946,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -1944,7 +1968,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -1966,7 +1990,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2041,7 +2065,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2063,7 +2087,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2085,7 +2109,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2107,7 +2131,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2182,7 +2206,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2204,7 +2228,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2226,7 +2250,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2248,7 +2272,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2323,7 +2347,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2399,7 +2423,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2475,7 +2499,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2554,7 +2578,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2580,7 +2604,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2655,7 +2679,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2732,7 +2756,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2811,7 +2835,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2905,7 +2929,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -2982,7 +3006,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3393,7 +3417,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3485,7 +3509,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3587,7 +3611,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3803,7 +3827,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3887,7 +3911,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -3918,7 +3942,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4046,7 +4070,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4136,7 +4160,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4230,7 +4254,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4409,7 +4433,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"2001:db8:1::abcd\"\n"
+"                    \"ip-addresses\": [ \"2001:db8:1::abcd\" ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4471,6 +4495,81 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet6\": [\n"
 "            {\n"
+"                \"id\": 1,\n"
+"                \"option-data\": [ ],\n"
+"                \"pd-pools\": [ ],\n"
+"                \"pools\": [\n"
+"                    {\n"
+"                        \"option-data\": [ ],\n"
+"                        \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
+"                    }\n"
+"                ],\n"
+"                \"preferred-lifetime\": 3000,\n"
+"                \"rapid-commit\": false,\n"
+"                \"rebind-timer\": 2000,\n"
+"                \"relay\": {\n"
+"                    \"ip-addresses\": [ \"2001:db8:1::abcd\", \"2001:db8:1::abce\" ]\n"
+"                },\n"
+"                \"renew-timer\": 1000,\n"
+"                \"reservation-mode\": \"all\",\n"
+"                \"reservations\": [ ],\n"
+"                \"subnet\": \"2001:db8:1::/64\",\n"
+"                \"valid-lifetime\": 4000\n"
+"            }\n"
+"        ]\n"
+"    }\n",
+    // CONFIGURATION 32
+"{\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"
+"        \"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\" ],\n"
+"        \"interfaces-config\": {\n"
+"            \"interfaces\": [ \"*\" ],\n"
+"            \"re-detect\": false\n"
+"        },\n"
+"        \"lease-database\": {\n"
+"            \"type\": \"memfile\"\n"
+"        },\n"
+"        \"mac-sources\": [ \"any\" ],\n"
+"        \"option-data\": [ ],\n"
+"        \"option-def\": [ ],\n"
+"        \"relay-supplied-options\": [ \"65\" ],\n"
+"        \"server-id\": {\n"
+"            \"enterprise-id\": 0,\n"
+"            \"htype\": 0,\n"
+"            \"identifier\": \"\",\n"
+"            \"persist\": true,\n"
+"            \"time\": 0,\n"
+"            \"type\": \"LLT\"\n"
+"        },\n"
+"        \"shared-networks\": [ ],\n"
+"        \"subnet6\": [\n"
+"            {\n"
 "                \"client-class\": \"alpha\",\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
@@ -4485,7 +4584,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4508,7 +4607,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4531,7 +4630,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4553,7 +4652,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4563,7 +4662,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 32
+    // CONFIGURATION 33
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -4643,7 +4742,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4653,7 +4752,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 33
+    // CONFIGURATION 34
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -4741,7 +4840,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4751,7 +4850,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 34
+    // CONFIGURATION 35
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -4816,7 +4915,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4826,7 +4925,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 35
+    // CONFIGURATION 36
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -4891,7 +4990,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4908,7 +5007,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -4976,7 +5075,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5020,7 +5119,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 36
+    // CONFIGURATION 37
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5090,7 +5189,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5118,7 +5217,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 37
+    // CONFIGURATION 38
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5170,7 +5269,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 38
+    // CONFIGURATION 39
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5222,7 +5321,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 39
+    // CONFIGURATION 40
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5287,7 +5386,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5309,7 +5408,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"out-of-pool\",\n"
@@ -5331,7 +5430,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"disabled\",\n"
@@ -5353,7 +5452,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5363,7 +5462,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 40
+    // CONFIGURATION 41
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5415,7 +5514,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 41
+    // CONFIGURATION 42
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5467,7 +5566,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 42
+    // CONFIGURATION 43
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5519,7 +5618,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 43
+    // CONFIGURATION 44
 "{\n"
 "        \"decline-probation-period\": 12345,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5571,7 +5670,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 44
+    // CONFIGURATION 45
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5623,7 +5722,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 45
+    // CONFIGURATION 46
 "{\n"
 "        \"client-classes\": [\n"
 "            {\n"
@@ -5702,7 +5801,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5712,7 +5811,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 46
+    // CONFIGURATION 47
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5777,7 +5876,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5787,7 +5886,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 47
+    // CONFIGURATION 48
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5853,7 +5952,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5863,7 +5962,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 48
+    // CONFIGURATION 49
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -5934,7 +6033,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -5944,7 +6043,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 49
+    // CONFIGURATION 50
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6015,7 +6114,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6025,7 +6124,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 50
+    // CONFIGURATION 51
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6092,7 +6191,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6102,7 +6201,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 51
+    // CONFIGURATION 52
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6170,7 +6269,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6180,7 +6279,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 52
+    // CONFIGURATION 53
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6253,7 +6352,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 2000,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 1000,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6263,7 +6362,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 53
+    // CONFIGURATION 54
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -6329,7 +6428,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"shared-networks\": [ ],\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 54
+    // CONFIGURATION 55
 "{\n"
 "        \"comment\": \"A DHCPv6 server\",\n"
 "        \"client-classes\": [\n"
@@ -6437,7 +6536,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"rapid-commit\": false,\n"
 "                \"rebind-timer\": 0,\n"
 "                \"relay\": {\n"
-"                    \"ip-address\": \"::\"\n"
+"                    \"ip-addresses\": [ ]\n"
 "                },\n"
 "                \"renew-timer\": 0,\n"
 "                \"reservation-mode\": \"all\",\n"
@@ -6466,7 +6565,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                        \"rapid-commit\": false,\n"
 "                        \"rebind-timer\": 1800,\n"
 "                        \"relay\": {\n"
-"                            \"ip-address\": \"::\"\n"
+"                            \"ip-addresses\": [ ]\n"
 "                        },\n"
 "                        \"renew-timer\": 900,\n"
 "                        \"reservation-mode\": \"all\",\n"
@@ -6747,12 +6846,17 @@ TEST_P(Dhcp6GetConfigTest, run) {
         ASSERT_NO_THROW(outputFormatted(dhcp->str()));
     } else {
         expected = UNPARSED_CONFIGS[config_counter];
+        // get the expected config using the dhcpv6 syntax parser
         ElementPtr jsond;
         ASSERT_NO_THROW(jsond = parseDHCP6(expected, true));
+        // get the expected config using the generic JSON syntax parser
         ElementPtr jsonj;
         ASSERT_NO_THROW(jsonj = parseJSON(expected));
-        EXPECT_TRUE(isEquivalent(dhcp, jsonj));
+        // the generic JSON parser does not handle comments
         EXPECT_TRUE(isEquivalent(jsond, moveComments(jsonj)));
+        // check that unparsed and expected values match
+        EXPECT_TRUE(isEquivalent(dhcp, jsonj));
+        // check on pretty prints too
         std::string current = prettyPrint(dhcp, 4, 4) + "\n";
         EXPECT_EQ(expected, current);
         if (expected != current) {