Parcourir la source

[5044fd] Added DUID type tokens within DUID_TYPE context

Francis Dupont il y a 8 ans
Parent
commit
62804a4f7a

+ 28 - 1
src/bin/dhcp6/dhcp6_lexer.ll

@@ -1,4 +1,4 @@
-/* Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
+/* Copyright (C) 2016-2017 Internet Systems Consortium, Inc. ("ISC")
 
 
    This Source Code Form is subject to the terms of the Mozilla Public
    This Source Code Form is subject to the terms of the Mozilla Public
    License, v. 2.0. If a copy of the MPL was not distributed with this
    License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -799,6 +799,33 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
     }
 }
 }
 
 
+\"LLT\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DUID_TYPE:
+        return isc::dhcp::Dhcp6Parser::make_LLT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("LLT", driver.loc_);
+    }
+}
+
+\"EN\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DUID_TYPE:
+        return isc::dhcp::Dhcp6Parser::make_EN(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("EN", driver.loc_);
+    }
+}
+
+\"LL\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DUID_TYPE:
+        return isc::dhcp::Dhcp6Parser::make_LL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("LL", driver.loc_);
+    }
+}
+
 \"identifier\" {
 \"identifier\" {
     switch(driver.ctx_) {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
     case isc::dhcp::Parser6Context::SERVER_ID:

+ 27 - 5
src/bin/dhcp6/dhcp6_parser.yy

@@ -1,4 +1,4 @@
-/* Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
+/* Copyright (C) 2016-2017 Internet Systems Consortium, Inc. ("ISC")
 
 
    This Source Code Form is subject to the terms of the Mozilla Public
    This Source Code Form is subject to the terms of the Mozilla Public
    License, v. 2.0. If a copy of the MPL was not distributed with this
    License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -121,6 +121,9 @@ using namespace std;
   EXPIRED_LEASES_PROCESSING "expired-leases-processing"
   EXPIRED_LEASES_PROCESSING "expired-leases-processing"
 
 
   SERVER_ID "server-id"
   SERVER_ID "server-id"
+  LLT "LLT"
+  EN "EN"
+  LL "LL"
   IDENTIFIER "identifier"
   IDENTIFIER "identifier"
   HTYPE "htype"
   HTYPE "htype"
   TIME "time"
   TIME "time"
@@ -185,6 +188,7 @@ using namespace std;
 %token <bool> BOOLEAN "boolean"
 %token <bool> BOOLEAN "boolean"
 
 
 %type <ElementPtr> value
 %type <ElementPtr> value
+%type <ElementPtr> duid_type
 
 
 %printer { yyoutput << $$; } <*>;
 %printer { yyoutput << $$; } <*>;
 
 
@@ -454,7 +458,7 @@ database_map_params: database_map_param
                    | database_map_params COMMA database_map_param
                    | database_map_params COMMA database_map_param
                    ;
                    ;
 
 
-database_map_param: type
+database_map_param: database_type
                   | user
                   | user
                   | password
                   | password
                   | host
                   | host
@@ -465,7 +469,7 @@ database_map_param: type
                   | unknown_map_entry
                   | unknown_map_entry
 ;
 ;
 
 
-type: TYPE {
+database_type: TYPE {
     ctx.enter(ctx.NO_KEYWORD);
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
 } COLON STRING {
     ElementPtr prf(new StringElement($4, ctx.loc2pos(@4)));
     ElementPtr prf(new StringElement($4, ctx.loc2pos(@4)));
@@ -870,7 +874,13 @@ code: CODE COLON INTEGER {
 
 
 option_def_code: code;
 option_def_code: code;
 
 
-option_def_type: type;
+option_def_type: TYPE {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr prf(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("type", prf);
+    ctx.leave();
+};
 
 
 option_def_record_types: RECORD_TYPES {
 option_def_record_types: RECORD_TYPES {
     ctx.enter(ctx.NO_KEYWORD);
     ctx.enter(ctx.NO_KEYWORD);
@@ -1328,7 +1338,7 @@ server_id_params: server_id_param
                 | server_id_params COMMA server_id_param
                 | server_id_params COMMA server_id_param
                 ;
                 ;
 
 
-server_id_param: type
+server_id_param: server_id_type
                | identifier
                | identifier
                | time
                | time
                | htype
                | htype
@@ -1337,6 +1347,18 @@ server_id_param: type
                | unknown_map_entry
                | unknown_map_entry
                ;
                ;
 
 
+server_id_type: TYPE {
+    ctx.enter(ctx.DUID_TYPE);
+} COLON duid_type {
+    ctx.stack_.back()->set("type", $4);
+    ctx.leave();
+};
+
+duid_type: LLT { $$ = ElementPtr(new StringElement("LLT", ctx.loc2pos(@1))); }
+         | EN { $$ = ElementPtr(new StringElement("EN", ctx.loc2pos(@1))); }
+         | LL { $$ = ElementPtr(new StringElement("LL", ctx.loc2pos(@1))); }
+         ;
+
 htype: HTYPE COLON INTEGER {
 htype: HTYPE COLON INTEGER {
     ElementPtr htype(new IntElement($3, ctx.loc2pos(@3)));
     ElementPtr htype(new IntElement($3, ctx.loc2pos(@3)));
     ctx.stack_.back()->set("htype", htype);
     ctx.stack_.back()->set("htype", htype);

+ 3 - 1
src/bin/dhcp6/parser_context.cc

@@ -1,4 +1,4 @@
-// Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2016-2017 Internet Systems Consortium, Inc. ("ISC")
 //
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -147,6 +147,8 @@ Parser6Context::contextName()
         return ("client-classes");
         return ("client-classes");
     case SERVER_ID:
     case SERVER_ID:
         return ("server-id");
         return ("server-id");
+    case DUID_TYPE:
+        return ("duid-type");
     case CONTROL_SOCKET:
     case CONTROL_SOCKET:
         return ("control-socket");
         return ("control-socket");
     case POOLS:
     case POOLS:

+ 4 - 1
src/bin/dhcp6/parser_context.h

@@ -1,4 +1,4 @@
-// Copyright (C) 2015-2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-2017 Internet Systems Consortium, Inc. ("ISC")
 //
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -228,6 +228,9 @@ public:
         /// Used while parsing Dhcp6/server-id structures.
         /// Used while parsing Dhcp6/server-id structures.
         SERVER_ID,
         SERVER_ID,
 
 
+        /// Used while parsing Dhcp6/server-id/type structures.
+        DUID_TYPE,
+
         /// Used while parsing Dhcp6/control-socket structures.
         /// Used while parsing Dhcp6/control-socket structures.
         CONTROL_SOCKET,
         CONTROL_SOCKET,