12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694 |
- /* Copyright (C) 2016-2017 Internet Systems Consortium, Inc. ("ISC")
- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- %{ /* -*- C++ -*- */
- #include <cerrno>
- #include <climits>
- #include <cstdlib>
- #include <string>
- #include <dhcp6/parser_context.h>
- #include <asiolink/io_address.h>
- #include <boost/lexical_cast.hpp>
- #include <exceptions/exceptions.h>
- /* Please avoid C++ style comments (// ... eol) as they break flex 2.6.2 */
- /* Work around an incompatibility in flex (at least versions
- 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
- namespace {
- bool start_token_flag = false;
- isc::dhcp::Parser6Context::ParserType start_token_value;
- unsigned int comment_start_line = 0;
- };
- /* To avoid the call to exit... oops! */
- #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg)
- %}
- /* 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
- implementation that always returns 1 anyway. */
- %option noyywrap
- /* nounput simplifies the lexer, by removing support for putting a character
- back into the input stream. We never use such capability anyway. */
- %option nounput
- /* batch means that we'll never use the generated lexer interactively. */
- %option batch
- /* 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. */
- %option debug
- /* 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. */
- %option noinput
- %x COMMENT
- %x DIR_ENTER DIR_INCLUDE DIR_EXIT
- /* 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. */
- int \-?[0-9]+
- blank [ \t\r]
- UnicodeEscapeSequence u[0-9A-Fa-f]{4}
- JSONEscapeCharacter ["\\/bfnrt]
- JSONEscapeSequence {JSONEscapeCharacter}|{UnicodeEscapeSequence}
- JSONStandardCharacter [^\x00-\x1f"\\]
- JSONStringCharacter {JSONStandardCharacter}|\\{JSONEscapeSequence}
- JSONString \"{JSONStringCharacter}*\"
- /* for errors */
- BadUnicodeEscapeSequence u[0-9A-Fa-f]{0,3}[^0-9A-Fa-f]
- BadJSONEscapeSequence [^"\\/bfnrtu]|{BadUnicodeEscapeSequence}
- ControlCharacter [\x00-\x1f]
- ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
- %{
- /* 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
- currently matched token. */
- #define YY_USER_ACTION driver.loc_.columns(yyleng);
- %}
- %%
- %{
- /* This part of the code is copied over to the verbatim to the top
- of the generated yylex function. Explanation:
- http://www.gnu.org/software/bison/manual/html_node/Multiple-start_002dsymbols.html */
- /* Code run each time yylex is called. */
- driver.loc_.step();
- if (start_token_flag) {
- start_token_flag = false;
- switch (start_token_value) {
- case Parser6Context::PARSER_JSON:
- default:
- return isc::dhcp::Dhcp6Parser::make_TOPLEVEL_JSON(driver.loc_);
- case Parser6Context::PARSER_DHCP6:
- return isc::dhcp::Dhcp6Parser::make_TOPLEVEL_DHCP6(driver.loc_);
- case Parser6Context::SUBPARSER_DHCP6:
- return isc::dhcp::Dhcp6Parser::make_SUB_DHCP6(driver.loc_);
- case Parser6Context::PARSER_INTERFACES:
- return isc::dhcp::Dhcp6Parser::make_SUB_INTERFACES6(driver.loc_);
- case Parser6Context::PARSER_SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_SUB_SUBNET6(driver.loc_);
- case Parser6Context::PARSER_POOL6:
- return isc::dhcp::Dhcp6Parser::make_SUB_POOL6(driver.loc_);
- case Parser6Context::PARSER_PD_POOL:
- return isc::dhcp::Dhcp6Parser::make_SUB_PD_POOL(driver.loc_);
- case Parser6Context::PARSER_HOST_RESERVATION:
- return isc::dhcp::Dhcp6Parser::make_SUB_RESERVATION(driver.loc_);
- case Parser6Context::PARSER_OPTION_DEFS:
- return isc::dhcp::Dhcp6Parser::make_SUB_OPTION_DEFS(driver.loc_);
- case Parser6Context::PARSER_OPTION_DEF:
- return isc::dhcp::Dhcp6Parser::make_SUB_OPTION_DEF(driver.loc_);
- case Parser6Context::PARSER_OPTION_DATA:
- return isc::dhcp::Dhcp6Parser::make_SUB_OPTION_DATA(driver.loc_);
- case Parser6Context::PARSER_HOOKS_LIBRARY:
- return isc::dhcp::Dhcp6Parser::make_SUB_HOOKS_LIBRARY(driver.loc_);
- case Parser6Context::PARSER_DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_SUB_DHCP_DDNS(driver.loc_);
- }
- }
- %}
- #.* ;
- "//"(.*) ;
- "/*" {
- BEGIN(COMMENT);
- comment_start_line = driver.loc_.end.line;;
- }
- <COMMENT>"*/" BEGIN(INITIAL);
- <COMMENT>. ;
- <COMMENT><<EOF>> {
- isc_throw(Dhcp6ParseError, "Comment not closed. (/* in line " << comment_start_line);
- }
- "<?" BEGIN(DIR_ENTER);
- <DIR_ENTER>"include" BEGIN(DIR_INCLUDE);
- <DIR_INCLUDE>\"([^\"\n])+\" {
- /* Include directive. */
- /* Extract the filename. */
- std::string tmp(yytext+1);
- tmp.resize(tmp.size() - 1);
- driver.includeFile(tmp);
- }
- <DIR_ENTER,DIR_INCLUDE,DIR_EXIT><<EOF>> {
- isc_throw(Dhcp6ParseError, "Directive not closed.");
- }
- <DIR_EXIT>"?>" BEGIN(INITIAL);
- <*>{blank}+ {
- /* Ok, we found a with space. Let's ignore it and update loc variable. */
- driver.loc_.step();
- }
- <*>[\n]+ {
- /* Newline found. Let's update the location and continue. */
- driver.loc_.lines(yyleng);
- driver.loc_.step();
- }
- \"enable-updates\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_ENABLE_UPDATES(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("enable-updates", driver.loc_);
- }
- }
- \"qualifying-suffix\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_QUALIFYING_SUFFIX(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("qualifying-suffix", driver.loc_);
- }
- }
- \"server-ip\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_SERVER_IP(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("server-ip", driver.loc_);
- }
- }
- \"server-port\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_SERVER_PORT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("server-port", driver.loc_);
- }
- }
- \"sender-ip\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_SENDER_IP(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("sender-ip", driver.loc_);
- }
- }
- \"sender-port\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_SENDER_PORT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("sender-port", driver.loc_);
- }
- }
- \"max-queue-size\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_MAX_QUEUE_SIZE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("max-queue-size", driver.loc_);
- }
- }
- \"ncr-protocol\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_NCR_PROTOCOL(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("ncr-protocol", driver.loc_);
- }
- }
- \"ncr-format\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_NCR_FORMAT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("ncr-format", driver.loc_);
- }
- }
- \"always-include-fqdn\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_ALWAYS_INCLUDE_FQDN(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("always-include-fqdn", driver.loc_);
- }
- }
- \"override-no-update\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_OVERRIDE_NO_UPDATE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("override-no-update", driver.loc_);
- }
- }
- \"override-client-update\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_OVERRIDE_CLIENT_UPDATE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("override-client-update", driver.loc_);
- }
- }
- \"replace-client-name\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_REPLACE_CLIENT_NAME(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("replace-client-name", driver.loc_);
- }
- }
- \"generated-prefix\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP_DDNS:
- return isc::dhcp::Dhcp6Parser::make_GENERATED_PREFIX(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("generated-prefix", driver.loc_);
- }
- }
- (?i:\"UDP\") {
- /* 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);
- tmp.resize(tmp.size() - 1);
- return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
- }
- (?i:\"TCP\") {
- /* 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);
- tmp.resize(tmp.size() - 1);
- return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
- }
- (?i:\"JSON\") {
- /* 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);
- tmp.resize(tmp.size() - 1);
- return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
- }
- (?i:\"when-present\") {
- /* 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);
- tmp.resize(tmp.size() - 1);
- return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
- }
- (?i:\"true\") {
- /* 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);
- tmp.resize(tmp.size() - 1);
- return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
- }
- (?i:\"never\") {
- /* 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);
- tmp.resize(tmp.size() - 1);
- return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
- }
- (?i:\"false\") {
- /* 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);
- tmp.resize(tmp.size() - 1);
- return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
- }
- (?i:\"always\") {
- /* 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);
- tmp.resize(tmp.size() - 1);
- return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
- }
- (?i:\"when-not-present\") {
- /* 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);
- tmp.resize(tmp.size() - 1);
- return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
- }
- \"Dhcp6\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::CONFIG:
- return isc::dhcp::Dhcp6Parser::make_DHCP6(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("Dhcp6", driver.loc_);
- }
- }
- \"interfaces-config\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_INTERFACES_CONFIG(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("interfaces-config", driver.loc_);
- }
- }
- \"interfaces\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
- return isc::dhcp::Dhcp6Parser::make_INTERFACES(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("interfaces", driver.loc_);
- }
- }
- \"re-detect\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
- return isc::dhcp::Dhcp6Parser::make_RE_DETECT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("re-detect", driver.loc_);
- }
- }
- \"lease-database\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_LEASE_DATABASE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("lease-database", driver.loc_);
- }
- }
- \"hosts-database\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_HOSTS_DATABASE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("hosts-database", driver.loc_);
- }
- }
- \"readonly\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- return isc::dhcp::Dhcp6Parser::make_READONLY(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("readonly", driver.loc_);
- }
- }
- \"type\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LEASE_DATABASE:
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- case isc::dhcp::Parser6Context::OPTION_DEF:
- case isc::dhcp::Parser6Context::SERVER_ID:
- return isc::dhcp::Dhcp6Parser::make_TYPE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("type", driver.loc_);
- }
- }
- \"memfile\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DATABASE_TYPE:
- return isc::dhcp::Dhcp6Parser::make_MEMFILE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("memfile", driver.loc_);
- }
- }
- \"mysql\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DATABASE_TYPE:
- return isc::dhcp::Dhcp6Parser::make_MYSQL(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("mysql", driver.loc_);
- }
- }
- \"postgresql\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DATABASE_TYPE:
- return isc::dhcp::Dhcp6Parser::make_POSTGRESQL(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("postgresql", driver.loc_);
- }
- }
- \"cql\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DATABASE_TYPE:
- return isc::dhcp::Dhcp6Parser::make_CQL(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("cql", driver.loc_);
- }
- }
- \"user\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LEASE_DATABASE:
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- return isc::dhcp::Dhcp6Parser::make_USER(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("user", driver.loc_);
- }
- }
- \"password\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LEASE_DATABASE:
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- return isc::dhcp::Dhcp6Parser::make_PASSWORD(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("password", driver.loc_);
- }
- }
- \"host\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LEASE_DATABASE:
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- return isc::dhcp::Dhcp6Parser::make_HOST(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("host", driver.loc_);
- }
- }
- \"port\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LEASE_DATABASE:
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- return isc::dhcp::Dhcp6Parser::make_PORT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("port", driver.loc_);
- }
- }
- \"persist\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LEASE_DATABASE:
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- case isc::dhcp::Parser6Context::SERVER_ID:
- return isc::dhcp::Dhcp6Parser::make_PERSIST(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("persist", driver.loc_);
- }
- }
- \"lfc-interval\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LEASE_DATABASE:
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- return isc::dhcp::Dhcp6Parser::make_LFC_INTERVAL(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("lfc-interval", driver.loc_);
- }
- }
- \"connect-timeout\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LEASE_DATABASE:
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- return isc::dhcp::Dhcp6Parser::make_CONNECT_TIMEOUT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("connect-timeout", driver.loc_);
- }
- }
- \"keyspace\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LEASE_DATABASE:
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- return isc::dhcp::Dhcp6Parser::make_KEYSPACE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("keyspace", driver.loc_);
- }
- }
- \"contact-points\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LEASE_DATABASE:
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- return isc::dhcp::Dhcp6Parser::make_CONTACT_POINTS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("contact-points", driver.loc_);
- }
- }
- \"preferred-lifetime\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_PREFERRED_LIFETIME(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("preferred-lifetime", driver.loc_);
- }
- }
- \"valid-lifetime\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_VALID_LIFETIME(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("valid-lifetime", driver.loc_);
- }
- }
- \"renew-timer\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_RENEW_TIMER(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("renew-timer", driver.loc_);
- }
- }
- \"rebind-timer\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_REBIND_TIMER(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("rebind-timer", driver.loc_);
- }
- }
- \"decline-probation-period\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_DECLINE_PROBATION_PERIOD(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("decline-probation-period", driver.loc_);
- }
- }
- \"subnet6\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_SUBNET6(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("subnet6", driver.loc_);
- }
- }
- \"option-def\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_OPTION_DEF(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("option-def", driver.loc_);
- }
- }
- \"option-data\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- case isc::dhcp::Parser6Context::SUBNET6:
- case isc::dhcp::Parser6Context::POOLS:
- case isc::dhcp::Parser6Context::PD_POOLS:
- case isc::dhcp::Parser6Context::RESERVATIONS:
- case isc::dhcp::Parser6Context::CLIENT_CLASSES:
- case isc::dhcp::Parser6Context::CLIENT_CLASS:
- return isc::dhcp::Dhcp6Parser::make_OPTION_DATA(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("option-data", driver.loc_);
- }
- }
- \"name\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LEASE_DATABASE:
- case isc::dhcp::Parser6Context::HOSTS_DATABASE:
- case isc::dhcp::Parser6Context::OPTION_DEF:
- case isc::dhcp::Parser6Context::OPTION_DATA:
- case isc::dhcp::Parser6Context::CLIENT_CLASSES:
- case isc::dhcp::Parser6Context::CLIENT_CLASS:
- case isc::dhcp::Parser6Context::LOGGERS:
- return isc::dhcp::Dhcp6Parser::make_NAME(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("name", driver.loc_);
- }
- }
- \"data\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OPTION_DATA:
- return isc::dhcp::Dhcp6Parser::make_DATA(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("data", driver.loc_);
- }
- }
- \"always-send\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OPTION_DATA:
- return isc::dhcp::Dhcp6Parser::make_ALWAYS_SEND(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("always-send", driver.loc_);
- }
- }
- \"pools\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_POOLS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("pools", driver.loc_);
- }
- }
- \"pd-pools\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_PD_POOLS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("pd-pools", driver.loc_);
- }
- }
- \"prefix\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::PD_POOLS:
- return isc::dhcp::Dhcp6Parser::make_PREFIX(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("prefix", driver.loc_);
- }
- }
- \"prefix-len\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::PD_POOLS:
- return isc::dhcp::Dhcp6Parser::make_PREFIX_LEN(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("prefix-len", driver.loc_);
- }
- }
- \"excluded-prefix\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::PD_POOLS:
- return isc::dhcp::Dhcp6Parser::make_EXCLUDED_PREFIX(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("excluded-prefix", driver.loc_);
- }
- }
- \"excluded-prefix-len\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::PD_POOLS:
- return isc::dhcp::Dhcp6Parser::make_EXCLUDED_PREFIX_LEN(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("excluded-prefix-len", driver.loc_);
- }
- }
- \"delegated-len\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::PD_POOLS:
- return isc::dhcp::Dhcp6Parser::make_DELEGATED_LEN(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("delegated-len", driver.loc_);
- }
- }
- \"pool\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::POOLS:
- return isc::dhcp::Dhcp6Parser::make_POOL(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("pool", driver.loc_);
- }
- }
- \"user-context\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::POOLS:
- case isc::dhcp::Parser6Context::PD_POOLS:
- return isc::dhcp::Dhcp6Parser::make_USER_CONTEXT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("user-context", driver.loc_);
- }
- }
- \"subnet\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_SUBNET(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("subnet", driver.loc_);
- }
- }
- \"interface\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_INTERFACE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("interface", driver.loc_);
- }
- }
- \"interface-id\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_INTERFACE_ID(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("interface-id", driver.loc_);
- }
- }
- \"id\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_ID(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("id", driver.loc_);
- }
- }
- \"rapid-commit\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_RAPID_COMMIT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("rapid-commit", driver.loc_);
- }
- }
- \"reservation-mode\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_RESERVATION_MODE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("reservation-mode", driver.loc_);
- }
- }
- \"disabled\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::RESERVATION_MODE:
- return isc::dhcp::Dhcp6Parser::make_DISABLED(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("disabled", driver.loc_);
- }
- }
- \"off\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::RESERVATION_MODE:
- return isc::dhcp::Dhcp6Parser::make_DISABLED(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("off", driver.loc_);
- }
- }
- \"out-of-pool\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::RESERVATION_MODE:
- return isc::dhcp::Dhcp6Parser::make_OUT_OF_POOL(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("out-of-pool", driver.loc_);
- }
- }
- \"all\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::RESERVATION_MODE:
- return isc::dhcp::Dhcp6Parser::make_ALL(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("all", driver.loc_);
- }
- }
- \"code\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OPTION_DEF:
- case isc::dhcp::Parser6Context::OPTION_DATA:
- return isc::dhcp::Dhcp6Parser::make_CODE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("code", driver.loc_);
- }
- }
- \"mac-sources\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_MAC_SOURCES(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("mac-sources", driver.loc_);
- }
- }
- \"relay-supplied-options\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_RELAY_SUPPLIED_OPTIONS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("relay-supplied-options", driver.loc_);
- }
- }
- \"host-reservation-identifiers\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_HOST_RESERVATION_IDENTIFIERS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("host-reservation-identifiers", driver.loc_);
- }
- }
- \"Logging\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::CONFIG:
- return isc::dhcp::Dhcp6Parser::make_LOGGING(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("Logging", driver.loc_);
- }
- }
- \"loggers\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LOGGING:
- return isc::dhcp::Dhcp6Parser::make_LOGGERS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("loggers", driver.loc_);
- }
- }
- \"output_options\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LOGGERS:
- return isc::dhcp::Dhcp6Parser::make_OUTPUT_OPTIONS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("output_options", driver.loc_);
- }
- }
- \"output\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
- return isc::dhcp::Dhcp6Parser::make_OUTPUT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("output", driver.loc_);
- }
- }
- \"flush\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
- return isc::dhcp::Dhcp6Parser::make_FLUSH(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("flush", driver.loc_);
- }
- }
- \"maxsize\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
- return isc::dhcp::Dhcp6Parser::make_MAXSIZE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("maxsize", driver.loc_);
- }
- }
- \"maxver\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
- return isc::dhcp::Dhcp6Parser::make_MAXVER(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("maxver", driver.loc_);
- }
- }
- \"debuglevel\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LOGGERS:
- return isc::dhcp::Dhcp6Parser::make_DEBUGLEVEL(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("debuglevel", driver.loc_);
- }
- }
- \"severity\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::LOGGERS:
- return isc::dhcp::Dhcp6Parser::make_SEVERITY(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("severity", driver.loc_);
- }
- }
- \"client-classes\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- case isc::dhcp::Parser6Context::RESERVATIONS:
- return isc::dhcp::Dhcp6Parser::make_CLIENT_CLASSES(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("client-classes", driver.loc_);
- }
- }
- \"client-class\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SUBNET6:
- case isc::dhcp::Parser6Context::CLIENT_CLASSES:
- return isc::dhcp::Dhcp6Parser::make_CLIENT_CLASS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("client-class", driver.loc_);
- }
- }
- \"test\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::CLIENT_CLASSES:
- case isc::dhcp::Parser6Context::CLIENT_CLASS:
- return isc::dhcp::Dhcp6Parser::make_TEST(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("test", driver.loc_);
- }
- }
- \"reservations\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_RESERVATIONS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("reservations", driver.loc_);
- }
- }
- \"ip-addresses\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::RESERVATIONS:
- return isc::dhcp::Dhcp6Parser::make_IP_ADDRESSES(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("ip-addresses", driver.loc_);
- }
- }
- \"prefixes\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::RESERVATIONS:
- return isc::dhcp::Dhcp6Parser::make_PREFIXES(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("prefixes", driver.loc_);
- }
- }
- \"duid\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::MAC_SOURCES:
- case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
- case isc::dhcp::Parser6Context::RESERVATIONS:
- return isc::dhcp::Dhcp6Parser::make_DUID(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("duid", driver.loc_);
- }
- }
- \"hw-address\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
- case isc::dhcp::Parser6Context::RESERVATIONS:
- return isc::dhcp::Dhcp6Parser::make_HW_ADDRESS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("hw-address", driver.loc_);
- }
- }
- \"hostname\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::RESERVATIONS:
- return isc::dhcp::Dhcp6Parser::make_HOSTNAME(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("hostname", driver.loc_);
- }
- }
- \"flex-id\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
- case isc::dhcp::Parser6Context::RESERVATIONS:
- return isc::dhcp::Dhcp6Parser::make_FLEX_ID(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("flex-id", driver.loc_);
- }
- }
- \"space\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OPTION_DEF:
- case isc::dhcp::Parser6Context::OPTION_DATA:
- return isc::dhcp::Dhcp6Parser::make_SPACE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("space", driver.loc_);
- }
- }
- \"csv-format\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OPTION_DATA:
- return isc::dhcp::Dhcp6Parser::make_CSV_FORMAT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("csv-format", driver.loc_);
- }
- }
- \"record-types\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OPTION_DEF:
- return isc::dhcp::Dhcp6Parser::make_RECORD_TYPES(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("record-types", driver.loc_);
- }
- }
- \"encapsulate\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OPTION_DEF:
- return isc::dhcp::Dhcp6Parser::make_ENCAPSULATE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("encapsulate", driver.loc_);
- }
- }
- \"array\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::OPTION_DEF:
- return isc::dhcp::Dhcp6Parser::make_ARRAY(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("array", driver.loc_);
- }
- }
- \"relay\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SUBNET6:
- return isc::dhcp::Dhcp6Parser::make_RELAY(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("relay", driver.loc_);
- }
- }
- \"ip-address\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::RELAY:
- return isc::dhcp::Dhcp6Parser::make_IP_ADDRESS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("ip-address", driver.loc_);
- }
- }
- \"hooks-libraries\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_HOOKS_LIBRARIES(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("hooks-libraries", driver.loc_);
- }
- }
- \"parameters\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
- return isc::dhcp::Dhcp6Parser::make_PARAMETERS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("parameters", driver.loc_);
- }
- }
- \"library\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
- return isc::dhcp::Dhcp6Parser::make_LIBRARY(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("library", driver.loc_);
- }
- }
- \"server-id\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_SERVER_ID(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("server-id", driver.loc_);
- }
- }
- \"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\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SERVER_ID:
- return isc::dhcp::Dhcp6Parser::make_IDENTIFIER(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("identifier", driver.loc_);
- }
- }
- \"htype\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SERVER_ID:
- return isc::dhcp::Dhcp6Parser::make_HTYPE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("htype", driver.loc_);
- }
- }
- \"time\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SERVER_ID:
- return isc::dhcp::Dhcp6Parser::make_TIME(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("time", driver.loc_);
- }
- }
- \"enterprise-id\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::SERVER_ID:
- return isc::dhcp::Dhcp6Parser::make_ENTERPRISE_ID(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("enterprise-id", driver.loc_);
- }
- }
- \"expired-leases-processing\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_EXPIRED_LEASES_PROCESSING(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("expired-leases-processing", driver.loc_);
- }
- }
- \"reclaim-timer-wait-time\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
- return isc::dhcp::Dhcp6Parser::make_RECLAIM_TIMER_WAIT_TIME(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("reclaim-timer-wait-time", driver.loc_);
- }
- }
- \"flush-reclaimed-timer-wait-time\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
- return isc::dhcp::Dhcp6Parser::make_FLUSH_RECLAIMED_TIMER_WAIT_TIME(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("flush-reclaimed-timer-wait-time", driver.loc_);
- }
- }
- \"hold-reclaimed-time\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
- return isc::dhcp::Dhcp6Parser::make_HOLD_RECLAIMED_TIME(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("hold-reclaimed-time", driver.loc_);
- }
- }
- \"max-reclaim-leases\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
- return isc::dhcp::Dhcp6Parser::make_MAX_RECLAIM_LEASES(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("max-reclaim-leases", driver.loc_);
- }
- }
- \"max-reclaim-time\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
- return isc::dhcp::Dhcp6Parser::make_MAX_RECLAIM_TIME(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("max-reclaim-time", driver.loc_);
- }
- }
- \"unwarned-reclaim-cycles\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
- return isc::dhcp::Dhcp6Parser::make_UNWARNED_RECLAIM_CYCLES(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("unwarned-reclaim-cycles", driver.loc_);
- }
- }
- \"dhcp4o6-port\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_DHCP4O6_PORT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("dhcp4o6-port", driver.loc_);
- }
- }
- \"control-socket\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_CONTROL_SOCKET(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("control-socket", driver.loc_);
- }
- }
- \"socket-type\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::CONTROL_SOCKET:
- return isc::dhcp::Dhcp6Parser::make_SOCKET_TYPE(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("socket-type", driver.loc_);
- }
- }
- \"socket-name\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::CONTROL_SOCKET:
- return isc::dhcp::Dhcp6Parser::make_SOCKET_NAME(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("socket-name", driver.loc_);
- }
- }
- \"dhcp-ddns\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::DHCP6:
- return isc::dhcp::Dhcp6Parser::make_DHCP_DDNS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("dhcp-ddns", driver.loc_);
- }
- }
- \"Dhcp4\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::CONFIG:
- return isc::dhcp::Dhcp6Parser::make_DHCP4(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("Dhcp4", driver.loc_);
- }
- }
- \"DhcpDdns\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::CONFIG:
- return isc::dhcp::Dhcp6Parser::make_DHCPDDNS(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("DhcpDdns", driver.loc_);
- }
- }
- \"Control-agent\" {
- switch(driver.ctx_) {
- case isc::dhcp::Parser6Context::CONFIG:
- return isc::dhcp::Dhcp6Parser::make_CONTROL_AGENT(driver.loc_);
- default:
- return isc::dhcp::Dhcp6Parser::make_STRING("Control-agent", driver.loc_);
- }
- }
- {JSONString} {
- /* 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);
- size_t len = raw.size() - 1;
- raw.resize(len);
- std::string decoded;
- decoded.reserve(len);
- for (size_t pos = 0; pos < len; ++pos) {
- int b = 0;
- char c = raw[pos];
- switch (c) {
- case '"':
- /* impossible condition */
- driver.error(driver.loc_, "Bad quote in \"" + raw + "\"");
- case '\\':
- ++pos;
- if (pos >= len) {
- /* impossible condition */
- driver.error(driver.loc_, "Overflow escape in \"" + raw + "\"");
- }
- c = raw[pos];
- switch (c) {
- case '"':
- case '\\':
- case '/':
- decoded.push_back(c);
- break;
- case 'b':
- decoded.push_back('\b');
- break;
- case 'f':
- decoded.push_back('\f');
- break;
- case 'n':
- decoded.push_back('\n');
- break;
- case 'r':
- decoded.push_back('\r');
- break;
- case 't':
- decoded.push_back('\t');
- break;
- case 'u':
- /* support only \u0000 to \u00ff */
- ++pos;
- if (pos + 4 > len) {
- /* impossible condition */
- driver.error(driver.loc_,
- "Overflow unicode escape in \"" + raw + "\"");
- }
- if ((raw[pos] != '0') || (raw[pos + 1] != '0')) {
- driver.error(driver.loc_, "Unsupported unicode escape in \"" + raw + "\"");
- }
- pos += 2;
- c = raw[pos];
- if ((c >= '0') && (c <= '9')) {
- b = (c - '0') << 4;
- } else if ((c >= 'A') && (c <= 'F')) {
- b = (c - 'A' + 10) << 4;
- } else if ((c >= 'a') && (c <= 'f')) {
- b = (c - 'a' + 10) << 4;
- } else {
- /* impossible condition */
- driver.error(driver.loc_, "Not hexadecimal in unicode escape in \"" + raw + "\"");
- }
- pos++;
- c = raw[pos];
- if ((c >= '0') && (c <= '9')) {
- b |= c - '0';
- } else if ((c >= 'A') && (c <= 'F')) {
- b |= c - 'A' + 10;
- } else if ((c >= 'a') && (c <= 'f')) {
- b |= c - 'a' + 10;
- } else {
- /* impossible condition */
- driver.error(driver.loc_, "Not hexadecimal in unicode escape in \"" + raw + "\"");
- }
- decoded.push_back(static_cast<char>(b & 0xff));
- break;
- default:
- /* impossible condition */
- driver.error(driver.loc_, "Bad escape in \"" + raw + "\"");
- }
- break;
- default:
- if ((c >= 0) && (c < 0x20)) {
- /* impossible condition */
- driver.error(driver.loc_, "Invalid control in \"" + raw + "\"");
- }
- decoded.push_back(c);
- }
- }
- return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_);
- }
- \"{JSONStringCharacter}*{ControlCharacter}{ControlCharacterFill}*\" {
- /* Bad string with a forbidden control character inside */
- driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
- }
- \"{JSONStringCharacter}*\\{BadJSONEscapeSequence}[^\x00-\x1f"]*\" {
- /* Bad string with a bad escape inside */
- driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
- }
- \"{JSONStringCharacter}*\\\" {
- /* Bad string with an open escape at the end */
- driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
- }
- "[" { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
- "]" { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
- "{" { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
- "}" { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
- "," { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
- ":" { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
- {int} {
- /* An integer was found. */
- std::string tmp(yytext);
- int64_t integer = 0;
- try {
- /* In substring we want to use negative values (e.g. -1).
- In enterprise-id we need to use values up to 0xffffffff.
- To cover both of those use cases, we need at least
- int64_t. */
- integer = boost::lexical_cast<int64_t>(tmp);
- } catch (const boost::bad_lexical_cast &) {
- driver.error(driver.loc_, "Failed to convert " + tmp + " to an integer.");
- }
- /* The parser needs the string form as double conversion is no lossless */
- return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_);
- }
- [-+]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)? {
- /* A floating point was found. */
- std::string tmp(yytext);
- double fp = 0.0;
- try {
- fp = boost::lexical_cast<double>(tmp);
- } catch (const boost::bad_lexical_cast &) {
- driver.error(driver.loc_, "Failed to convert " + tmp + " to a floating point.");
- }
- return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_);
- }
- true|false {
- string tmp(yytext);
- return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
- }
- null {
- return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
- }
- (?i:true) driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
- (?i:false) driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
- (?i:null) driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
- <*>. driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
- <<EOF>> {
- if (driver.states_.empty()) {
- return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
- }
- driver.loc_ = driver.locs_.back();
- driver.locs_.pop_back();
- driver.file_ = driver.files_.back();
- driver.files_.pop_back();
- if (driver.sfile_) {
- fclose(driver.sfile_);
- driver.sfile_ = 0;
- }
- if (!driver.sfiles_.empty()) {
- driver.sfile_ = driver.sfiles_.back();
- driver.sfiles_.pop_back();
- }
- parser6__delete_buffer(YY_CURRENT_BUFFER);
- parser6__switch_to_buffer(driver.states_.back());
- driver.states_.pop_back();
- BEGIN(DIR_EXIT);
- }
- %%
- using namespace isc::dhcp;
- void
- Parser6Context::scanStringBegin(const std::string& str, ParserType parser_type)
- {
- start_token_flag = true;
- start_token_value = parser_type;
- file_ = "<string>";
- sfile_ = 0;
- loc_.initialize(&file_);
- yy_flex_debug = trace_scanning_;
- YY_BUFFER_STATE buffer;
- buffer = parser6__scan_bytes(str.c_str(), str.size());
- if (!buffer) {
- fatal("cannot scan string");
- /* fatal() throws an exception so this can't be reached */
- }
- }
- void
- Parser6Context::scanFileBegin(FILE * f,
- const std::string& filename,
- ParserType parser_type)
- {
- start_token_flag = true;
- start_token_value = parser_type;
- file_ = filename;
- sfile_ = f;
- loc_.initialize(&file_);
- yy_flex_debug = trace_scanning_;
- YY_BUFFER_STATE buffer;
- /* See dhcp6_lexer.cc header for available definitions */
- buffer = parser6__create_buffer(f, 65536 /*buffer size*/);
- if (!buffer) {
- fatal("cannot scan file " + filename);
- }
- parser6__switch_to_buffer(buffer);
- }
- void
- Parser6Context::scanEnd() {
- if (sfile_)
- fclose(sfile_);
- sfile_ = 0;
- static_cast<void>(parser6_lex_destroy());
- /* Close files */
- while (!sfiles_.empty()) {
- FILE* f = sfiles_.back();
- if (f) {
- fclose(f);
- }
- sfiles_.pop_back();
- }
- /* Delete states */
- while (!states_.empty()) {
- parser6__delete_buffer(states_.back());
- states_.pop_back();
- }
- }
- void
- Parser6Context::includeFile(const std::string& filename) {
- if (states_.size() > 10) {
- fatal("Too many nested include.");
- }
- FILE* f = fopen(filename.c_str(), "r");
- if (!f) {
- fatal("Can't open include file " + filename);
- }
- if (sfile_) {
- sfiles_.push_back(sfile_);
- }
- sfile_ = f;
- states_.push_back(YY_CURRENT_BUFFER);
- YY_BUFFER_STATE buffer;
- buffer = parser6__create_buffer(f, 65536 /*buffer size*/);
- if (!buffer) {
- fatal( "Can't scan include file " + filename);
- }
- parser6__switch_to_buffer(buffer);
- files_.push_back(file_);
- file_ = filename;
- locs_.push_back(loc_);
- loc_.initialize(&file_);
- BEGIN(INITIAL);
- }
- namespace {
- /** To avoid unused function error */
- class Dummy {
- /* cppcheck-suppress unusedPrivateFunction */
- void dummy() { yy_fatal_error("Fix me: how to disable its definition?"); }
- };
- }
|