dhcp6_parser.cc 116 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519
  1. // A Bison parser, made by GNU Bison 3.0.4.
  2. // Skeleton implementation for Bison LALR(1) parsers in C++
  3. // Copyright (C) 2002-2015 Free Software Foundation, Inc.
  4. // This program is free software: you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation, either version 3 of the License, or
  7. // (at your option) any later version.
  8. // This program is distributed in the hope that it will be useful,
  9. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. // GNU General Public License for more details.
  12. // You should have received a copy of the GNU General Public License
  13. // along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. // As a special exception, you may create a larger work that contains
  15. // part or all of the Bison parser skeleton and distribute that work
  16. // under terms of your choice, so long as that work isn't itself a
  17. // parser generator using the skeleton or a modified version thereof
  18. // as a parser skeleton. Alternatively, if you modify or redistribute
  19. // the parser skeleton itself, you may (at your option) remove this
  20. // special exception, which will cause the skeleton and the resulting
  21. // Bison output files to be licensed under the GNU General Public
  22. // License without this special exception.
  23. // This special exception was added by the Free Software Foundation in
  24. // version 2.2 of Bison.
  25. // Take the name prefix into account.
  26. #define yylex parser6_lex
  27. // First part of user declarations.
  28. #line 39 "dhcp6_parser.cc" // lalr1.cc:404
  29. # ifndef YY_NULLPTR
  30. # if defined __cplusplus && 201103L <= __cplusplus
  31. # define YY_NULLPTR nullptr
  32. # else
  33. # define YY_NULLPTR 0
  34. # endif
  35. # endif
  36. #include "dhcp6_parser.h"
  37. // User implementation prologue.
  38. #line 53 "dhcp6_parser.cc" // lalr1.cc:412
  39. // Unqualified %code blocks.
  40. #line 34 "dhcp6_parser.yy" // lalr1.cc:413
  41. #include <dhcp6/parser_context.h>
  42. #line 59 "dhcp6_parser.cc" // lalr1.cc:413
  43. #ifndef YY_
  44. # if defined YYENABLE_NLS && YYENABLE_NLS
  45. # if ENABLE_NLS
  46. # include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
  47. # define YY_(msgid) dgettext ("bison-runtime", msgid)
  48. # endif
  49. # endif
  50. # ifndef YY_
  51. # define YY_(msgid) msgid
  52. # endif
  53. #endif
  54. #define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
  55. /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
  56. If N is 0, then set CURRENT to the empty location which ends
  57. the previous symbol: RHS[0] (always defined). */
  58. # ifndef YYLLOC_DEFAULT
  59. # define YYLLOC_DEFAULT(Current, Rhs, N) \
  60. do \
  61. if (N) \
  62. { \
  63. (Current).begin = YYRHSLOC (Rhs, 1).begin; \
  64. (Current).end = YYRHSLOC (Rhs, N).end; \
  65. } \
  66. else \
  67. { \
  68. (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \
  69. } \
  70. while (/*CONSTCOND*/ false)
  71. # endif
  72. // Suppress unused-variable warnings by "using" E.
  73. #define YYUSE(E) ((void) (E))
  74. // Enable debugging if requested.
  75. #if PARSER6_DEBUG
  76. // A pseudo ostream that takes yydebug_ into account.
  77. # define YYCDEBUG if (yydebug_) (*yycdebug_)
  78. # define YY_SYMBOL_PRINT(Title, Symbol) \
  79. do { \
  80. if (yydebug_) \
  81. { \
  82. *yycdebug_ << Title << ' '; \
  83. yy_print_ (*yycdebug_, Symbol); \
  84. *yycdebug_ << std::endl; \
  85. } \
  86. } while (false)
  87. # define YY_REDUCE_PRINT(Rule) \
  88. do { \
  89. if (yydebug_) \
  90. yy_reduce_print_ (Rule); \
  91. } while (false)
  92. # define YY_STACK_PRINT() \
  93. do { \
  94. if (yydebug_) \
  95. yystack_print_ (); \
  96. } while (false)
  97. #else // !PARSER6_DEBUG
  98. # define YYCDEBUG if (false) std::cerr
  99. # define YY_SYMBOL_PRINT(Title, Symbol) YYUSE(Symbol)
  100. # define YY_REDUCE_PRINT(Rule) static_cast<void>(0)
  101. # define YY_STACK_PRINT() static_cast<void>(0)
  102. #endif // !PARSER6_DEBUG
  103. #define yyerrok (yyerrstatus_ = 0)
  104. #define yyclearin (yyla.clear ())
  105. #define YYACCEPT goto yyacceptlab
  106. #define YYABORT goto yyabortlab
  107. #define YYERROR goto yyerrorlab
  108. #define YYRECOVERING() (!!yyerrstatus_)
  109. #line 14 "dhcp6_parser.yy" // lalr1.cc:479
  110. namespace isc { namespace dhcp {
  111. #line 145 "dhcp6_parser.cc" // lalr1.cc:479
  112. /* Return YYSTR after stripping away unnecessary quotes and
  113. backslashes, so that it's suitable for yyerror. The heuristic is
  114. that double-quoting is unnecessary unless the string contains an
  115. apostrophe, a comma, or backslash (other than backslash-backslash).
  116. YYSTR is taken from yytname. */
  117. std::string
  118. Dhcp6Parser::yytnamerr_ (const char *yystr)
  119. {
  120. if (*yystr == '"')
  121. {
  122. std::string yyr = "";
  123. char const *yyp = yystr;
  124. for (;;)
  125. switch (*++yyp)
  126. {
  127. case '\'':
  128. case ',':
  129. goto do_not_strip_quotes;
  130. case '\\':
  131. if (*++yyp != '\\')
  132. goto do_not_strip_quotes;
  133. // Fall through.
  134. default:
  135. yyr += *yyp;
  136. break;
  137. case '"':
  138. return yyr;
  139. }
  140. do_not_strip_quotes: ;
  141. }
  142. return yystr;
  143. }
  144. /// Build a parser object.
  145. Dhcp6Parser::Dhcp6Parser (isc::dhcp::Parser6Context& ctx_yyarg)
  146. :
  147. #if PARSER6_DEBUG
  148. yydebug_ (false),
  149. yycdebug_ (&std::cerr),
  150. #endif
  151. ctx (ctx_yyarg)
  152. {}
  153. Dhcp6Parser::~Dhcp6Parser ()
  154. {}
  155. /*---------------.
  156. | Symbol types. |
  157. `---------------*/
  158. // by_state.
  159. inline
  160. Dhcp6Parser::by_state::by_state ()
  161. : state (empty_state)
  162. {}
  163. inline
  164. Dhcp6Parser::by_state::by_state (const by_state& other)
  165. : state (other.state)
  166. {}
  167. inline
  168. void
  169. Dhcp6Parser::by_state::clear ()
  170. {
  171. state = empty_state;
  172. }
  173. inline
  174. void
  175. Dhcp6Parser::by_state::move (by_state& that)
  176. {
  177. state = that.state;
  178. that.clear ();
  179. }
  180. inline
  181. Dhcp6Parser::by_state::by_state (state_type s)
  182. : state (s)
  183. {}
  184. inline
  185. Dhcp6Parser::symbol_number_type
  186. Dhcp6Parser::by_state::type_get () const
  187. {
  188. if (state == empty_state)
  189. return empty_symbol;
  190. else
  191. return yystos_[state];
  192. }
  193. inline
  194. Dhcp6Parser::stack_symbol_type::stack_symbol_type ()
  195. {}
  196. inline
  197. Dhcp6Parser::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that)
  198. : super_type (s, that.location)
  199. {
  200. switch (that.type_get ())
  201. {
  202. case 116: // value
  203. value.move< ElementPtr > (that.value);
  204. break;
  205. case 102: // "boolean"
  206. value.move< bool > (that.value);
  207. break;
  208. case 101: // "floating point"
  209. value.move< double > (that.value);
  210. break;
  211. case 100: // "integer"
  212. value.move< int64_t > (that.value);
  213. break;
  214. case 99: // "constant string"
  215. value.move< std::string > (that.value);
  216. break;
  217. default:
  218. break;
  219. }
  220. // that is emptied.
  221. that.type = empty_symbol;
  222. }
  223. inline
  224. Dhcp6Parser::stack_symbol_type&
  225. Dhcp6Parser::stack_symbol_type::operator= (const stack_symbol_type& that)
  226. {
  227. state = that.state;
  228. switch (that.type_get ())
  229. {
  230. case 116: // value
  231. value.copy< ElementPtr > (that.value);
  232. break;
  233. case 102: // "boolean"
  234. value.copy< bool > (that.value);
  235. break;
  236. case 101: // "floating point"
  237. value.copy< double > (that.value);
  238. break;
  239. case 100: // "integer"
  240. value.copy< int64_t > (that.value);
  241. break;
  242. case 99: // "constant string"
  243. value.copy< std::string > (that.value);
  244. break;
  245. default:
  246. break;
  247. }
  248. location = that.location;
  249. return *this;
  250. }
  251. template <typename Base>
  252. inline
  253. void
  254. Dhcp6Parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
  255. {
  256. if (yymsg)
  257. YY_SYMBOL_PRINT (yymsg, yysym);
  258. }
  259. #if PARSER6_DEBUG
  260. template <typename Base>
  261. void
  262. Dhcp6Parser::yy_print_ (std::ostream& yyo,
  263. const basic_symbol<Base>& yysym) const
  264. {
  265. std::ostream& yyoutput = yyo;
  266. YYUSE (yyoutput);
  267. symbol_number_type yytype = yysym.type_get ();
  268. // Avoid a (spurious) G++ 4.8 warning about "array subscript is
  269. // below array bounds".
  270. if (yysym.empty ())
  271. std::abort ();
  272. yyo << (yytype < yyntokens_ ? "token" : "nterm")
  273. << ' ' << yytname_[yytype] << " ("
  274. << yysym.location << ": ";
  275. switch (yytype)
  276. {
  277. case 99: // "constant string"
  278. #line 189 "dhcp6_parser.yy" // lalr1.cc:636
  279. { yyoutput << yysym.value.template as< std::string > (); }
  280. #line 352 "dhcp6_parser.cc" // lalr1.cc:636
  281. break;
  282. case 100: // "integer"
  283. #line 189 "dhcp6_parser.yy" // lalr1.cc:636
  284. { yyoutput << yysym.value.template as< int64_t > (); }
  285. #line 359 "dhcp6_parser.cc" // lalr1.cc:636
  286. break;
  287. case 101: // "floating point"
  288. #line 189 "dhcp6_parser.yy" // lalr1.cc:636
  289. { yyoutput << yysym.value.template as< double > (); }
  290. #line 366 "dhcp6_parser.cc" // lalr1.cc:636
  291. break;
  292. case 102: // "boolean"
  293. #line 189 "dhcp6_parser.yy" // lalr1.cc:636
  294. { yyoutput << yysym.value.template as< bool > (); }
  295. #line 373 "dhcp6_parser.cc" // lalr1.cc:636
  296. break;
  297. case 116: // value
  298. #line 189 "dhcp6_parser.yy" // lalr1.cc:636
  299. { yyoutput << yysym.value.template as< ElementPtr > (); }
  300. #line 380 "dhcp6_parser.cc" // lalr1.cc:636
  301. break;
  302. default:
  303. break;
  304. }
  305. yyo << ')';
  306. }
  307. #endif
  308. inline
  309. void
  310. Dhcp6Parser::yypush_ (const char* m, state_type s, symbol_type& sym)
  311. {
  312. stack_symbol_type t (s, sym);
  313. yypush_ (m, t);
  314. }
  315. inline
  316. void
  317. Dhcp6Parser::yypush_ (const char* m, stack_symbol_type& s)
  318. {
  319. if (m)
  320. YY_SYMBOL_PRINT (m, s);
  321. yystack_.push (s);
  322. }
  323. inline
  324. void
  325. Dhcp6Parser::yypop_ (unsigned int n)
  326. {
  327. yystack_.pop (n);
  328. }
  329. #if PARSER6_DEBUG
  330. std::ostream&
  331. Dhcp6Parser::debug_stream () const
  332. {
  333. return *yycdebug_;
  334. }
  335. void
  336. Dhcp6Parser::set_debug_stream (std::ostream& o)
  337. {
  338. yycdebug_ = &o;
  339. }
  340. Dhcp6Parser::debug_level_type
  341. Dhcp6Parser::debug_level () const
  342. {
  343. return yydebug_;
  344. }
  345. void
  346. Dhcp6Parser::set_debug_level (debug_level_type l)
  347. {
  348. yydebug_ = l;
  349. }
  350. #endif // PARSER6_DEBUG
  351. inline Dhcp6Parser::state_type
  352. Dhcp6Parser::yy_lr_goto_state_ (state_type yystate, int yysym)
  353. {
  354. int yyr = yypgoto_[yysym - yyntokens_] + yystate;
  355. if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
  356. return yytable_[yyr];
  357. else
  358. return yydefgoto_[yysym - yyntokens_];
  359. }
  360. inline bool
  361. Dhcp6Parser::yy_pact_value_is_default_ (int yyvalue)
  362. {
  363. return yyvalue == yypact_ninf_;
  364. }
  365. inline bool
  366. Dhcp6Parser::yy_table_value_is_error_ (int yyvalue)
  367. {
  368. return yyvalue == yytable_ninf_;
  369. }
  370. int
  371. Dhcp6Parser::parse ()
  372. {
  373. // State.
  374. int yyn;
  375. /// Length of the RHS of the rule being reduced.
  376. int yylen = 0;
  377. // Error handling.
  378. int yynerrs_ = 0;
  379. int yyerrstatus_ = 0;
  380. /// The lookahead symbol.
  381. symbol_type yyla;
  382. /// The locations where the error started and ended.
  383. stack_symbol_type yyerror_range[3];
  384. /// The return value of parse ().
  385. int yyresult;
  386. // FIXME: This shoud be completely indented. It is not yet to
  387. // avoid gratuitous conflicts when merging into the master branch.
  388. try
  389. {
  390. YYCDEBUG << "Starting parse" << std::endl;
  391. /* Initialize the stack. The initial state will be set in
  392. yynewstate, since the latter expects the semantical and the
  393. location values to have been already stored, initialize these
  394. stacks with a primary value. */
  395. yystack_.clear ();
  396. yypush_ (YY_NULLPTR, 0, yyla);
  397. // A new symbol was pushed on the stack.
  398. yynewstate:
  399. YYCDEBUG << "Entering state " << yystack_[0].state << std::endl;
  400. // Accept?
  401. if (yystack_[0].state == yyfinal_)
  402. goto yyacceptlab;
  403. goto yybackup;
  404. // Backup.
  405. yybackup:
  406. // Try to take a decision without lookahead.
  407. yyn = yypact_[yystack_[0].state];
  408. if (yy_pact_value_is_default_ (yyn))
  409. goto yydefault;
  410. // Read a lookahead token.
  411. if (yyla.empty ())
  412. {
  413. YYCDEBUG << "Reading a token: ";
  414. try
  415. {
  416. symbol_type yylookahead (yylex (ctx));
  417. yyla.move (yylookahead);
  418. }
  419. catch (const syntax_error& yyexc)
  420. {
  421. error (yyexc);
  422. goto yyerrlab1;
  423. }
  424. }
  425. YY_SYMBOL_PRINT ("Next token is", yyla);
  426. /* If the proper action on seeing token YYLA.TYPE is to reduce or
  427. to detect an error, take that action. */
  428. yyn += yyla.type_get ();
  429. if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
  430. goto yydefault;
  431. // Reduce or error.
  432. yyn = yytable_[yyn];
  433. if (yyn <= 0)
  434. {
  435. if (yy_table_value_is_error_ (yyn))
  436. goto yyerrlab;
  437. yyn = -yyn;
  438. goto yyreduce;
  439. }
  440. // Count tokens shifted since error; after three, turn off error status.
  441. if (yyerrstatus_)
  442. --yyerrstatus_;
  443. // Shift the lookahead token.
  444. yypush_ ("Shifting", yyn, yyla);
  445. goto yynewstate;
  446. /*-----------------------------------------------------------.
  447. | yydefault -- do the default action for the current state. |
  448. `-----------------------------------------------------------*/
  449. yydefault:
  450. yyn = yydefact_[yystack_[0].state];
  451. if (yyn == 0)
  452. goto yyerrlab;
  453. goto yyreduce;
  454. /*-----------------------------.
  455. | yyreduce -- Do a reduction. |
  456. `-----------------------------*/
  457. yyreduce:
  458. yylen = yyr2_[yyn];
  459. {
  460. stack_symbol_type yylhs;
  461. yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);
  462. /* Variants are always initialized to an empty instance of the
  463. correct type. The default '$$ = $1' action is NOT applied
  464. when using variants. */
  465. switch (yyr1_[yyn])
  466. {
  467. case 116: // value
  468. yylhs.value.build< ElementPtr > ();
  469. break;
  470. case 102: // "boolean"
  471. yylhs.value.build< bool > ();
  472. break;
  473. case 101: // "floating point"
  474. yylhs.value.build< double > ();
  475. break;
  476. case 100: // "integer"
  477. yylhs.value.build< int64_t > ();
  478. break;
  479. case 99: // "constant string"
  480. yylhs.value.build< std::string > ();
  481. break;
  482. default:
  483. break;
  484. }
  485. // Compute the default @$.
  486. {
  487. slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
  488. YYLLOC_DEFAULT (yylhs.location, slice, yylen);
  489. }
  490. // Perform the reduction.
  491. YY_REDUCE_PRINT (yyn);
  492. try
  493. {
  494. switch (yyn)
  495. {
  496. case 2:
  497. #line 198 "dhcp6_parser.yy" // lalr1.cc:859
  498. { ctx.ctx_ = ctx.NO_KEYWORD; }
  499. #line 620 "dhcp6_parser.cc" // lalr1.cc:859
  500. break;
  501. case 4:
  502. #line 199 "dhcp6_parser.yy" // lalr1.cc:859
  503. { ctx.ctx_ = ctx.CONFIG; }
  504. #line 626 "dhcp6_parser.cc" // lalr1.cc:859
  505. break;
  506. case 6:
  507. #line 200 "dhcp6_parser.yy" // lalr1.cc:859
  508. { ctx.ctx_ = ctx.DHCP6; }
  509. #line 632 "dhcp6_parser.cc" // lalr1.cc:859
  510. break;
  511. case 8:
  512. #line 201 "dhcp6_parser.yy" // lalr1.cc:859
  513. { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
  514. #line 638 "dhcp6_parser.cc" // lalr1.cc:859
  515. break;
  516. case 10:
  517. #line 202 "dhcp6_parser.yy" // lalr1.cc:859
  518. { ctx.ctx_ = ctx.SUBNET6; }
  519. #line 644 "dhcp6_parser.cc" // lalr1.cc:859
  520. break;
  521. case 12:
  522. #line 203 "dhcp6_parser.yy" // lalr1.cc:859
  523. { ctx.ctx_ = ctx.POOLS; }
  524. #line 650 "dhcp6_parser.cc" // lalr1.cc:859
  525. break;
  526. case 14:
  527. #line 204 "dhcp6_parser.yy" // lalr1.cc:859
  528. { ctx.ctx_ = ctx.PD_POOLS; }
  529. #line 656 "dhcp6_parser.cc" // lalr1.cc:859
  530. break;
  531. case 16:
  532. #line 205 "dhcp6_parser.yy" // lalr1.cc:859
  533. { ctx.ctx_ = ctx.RESERVATIONS; }
  534. #line 662 "dhcp6_parser.cc" // lalr1.cc:859
  535. break;
  536. case 18:
  537. #line 206 "dhcp6_parser.yy" // lalr1.cc:859
  538. { ctx.ctx_ = ctx.OPTION_DEF; }
  539. #line 668 "dhcp6_parser.cc" // lalr1.cc:859
  540. break;
  541. case 20:
  542. #line 207 "dhcp6_parser.yy" // lalr1.cc:859
  543. { ctx.ctx_ = ctx.OPTION_DATA; }
  544. #line 674 "dhcp6_parser.cc" // lalr1.cc:859
  545. break;
  546. case 22:
  547. #line 208 "dhcp6_parser.yy" // lalr1.cc:859
  548. { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
  549. #line 680 "dhcp6_parser.cc" // lalr1.cc:859
  550. break;
  551. case 24:
  552. #line 216 "dhcp6_parser.yy" // lalr1.cc:859
  553. { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
  554. #line 686 "dhcp6_parser.cc" // lalr1.cc:859
  555. break;
  556. case 25:
  557. #line 217 "dhcp6_parser.yy" // lalr1.cc:859
  558. { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
  559. #line 692 "dhcp6_parser.cc" // lalr1.cc:859
  560. break;
  561. case 26:
  562. #line 218 "dhcp6_parser.yy" // lalr1.cc:859
  563. { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
  564. #line 698 "dhcp6_parser.cc" // lalr1.cc:859
  565. break;
  566. case 27:
  567. #line 219 "dhcp6_parser.yy" // lalr1.cc:859
  568. { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
  569. #line 704 "dhcp6_parser.cc" // lalr1.cc:859
  570. break;
  571. case 28:
  572. #line 220 "dhcp6_parser.yy" // lalr1.cc:859
  573. { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
  574. #line 710 "dhcp6_parser.cc" // lalr1.cc:859
  575. break;
  576. case 29:
  577. #line 221 "dhcp6_parser.yy" // lalr1.cc:859
  578. { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
  579. #line 716 "dhcp6_parser.cc" // lalr1.cc:859
  580. break;
  581. case 30:
  582. #line 222 "dhcp6_parser.yy" // lalr1.cc:859
  583. { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
  584. #line 722 "dhcp6_parser.cc" // lalr1.cc:859
  585. break;
  586. case 31:
  587. #line 225 "dhcp6_parser.yy" // lalr1.cc:859
  588. {
  589. // Push back the JSON value on the stack
  590. ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
  591. }
  592. #line 731 "dhcp6_parser.cc" // lalr1.cc:859
  593. break;
  594. case 32:
  595. #line 230 "dhcp6_parser.yy" // lalr1.cc:859
  596. {
  597. // This code is executed when we're about to start parsing
  598. // the content of the map
  599. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  600. ctx.stack_.push_back(m);
  601. }
  602. #line 742 "dhcp6_parser.cc" // lalr1.cc:859
  603. break;
  604. case 33:
  605. #line 235 "dhcp6_parser.yy" // lalr1.cc:859
  606. {
  607. // map parsing completed. If we ever want to do any wrap up
  608. // (maybe some sanity checking), this would be the best place
  609. // for it.
  610. }
  611. #line 752 "dhcp6_parser.cc" // lalr1.cc:859
  612. break;
  613. case 36:
  614. #line 246 "dhcp6_parser.yy" // lalr1.cc:859
  615. {
  616. // map containing a single entry
  617. ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
  618. }
  619. #line 761 "dhcp6_parser.cc" // lalr1.cc:859
  620. break;
  621. case 37:
  622. #line 250 "dhcp6_parser.yy" // lalr1.cc:859
  623. {
  624. // map consisting of a shorter map followed by
  625. // comma and string:value
  626. ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
  627. }
  628. #line 771 "dhcp6_parser.cc" // lalr1.cc:859
  629. break;
  630. case 38:
  631. #line 257 "dhcp6_parser.yy" // lalr1.cc:859
  632. {
  633. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  634. ctx.stack_.push_back(l);
  635. }
  636. #line 780 "dhcp6_parser.cc" // lalr1.cc:859
  637. break;
  638. case 39:
  639. #line 260 "dhcp6_parser.yy" // lalr1.cc:859
  640. {
  641. // list parsing complete. Put any sanity checking here
  642. }
  643. #line 788 "dhcp6_parser.cc" // lalr1.cc:859
  644. break;
  645. case 40:
  646. #line 265 "dhcp6_parser.yy" // lalr1.cc:859
  647. {
  648. // List parsing about to start
  649. }
  650. #line 796 "dhcp6_parser.cc" // lalr1.cc:859
  651. break;
  652. case 41:
  653. #line 267 "dhcp6_parser.yy" // lalr1.cc:859
  654. {
  655. // list parsing complete. Put any sanity checking here
  656. //ctx.stack_.pop_back();
  657. }
  658. #line 805 "dhcp6_parser.cc" // lalr1.cc:859
  659. break;
  660. case 44:
  661. #line 276 "dhcp6_parser.yy" // lalr1.cc:859
  662. {
  663. // List consisting of a single element.
  664. ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
  665. }
  666. #line 814 "dhcp6_parser.cc" // lalr1.cc:859
  667. break;
  668. case 45:
  669. #line 280 "dhcp6_parser.yy" // lalr1.cc:859
  670. {
  671. // List ending with , and a value.
  672. ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
  673. }
  674. #line 823 "dhcp6_parser.cc" // lalr1.cc:859
  675. break;
  676. case 46:
  677. #line 291 "dhcp6_parser.yy" // lalr1.cc:859
  678. {
  679. const std::string& where = ctx.contextName();
  680. const std::string& keyword = yystack_[1].value.as< std::string > ();
  681. error(yystack_[1].location,
  682. "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
  683. }
  684. #line 834 "dhcp6_parser.cc" // lalr1.cc:859
  685. break;
  686. case 47:
  687. #line 301 "dhcp6_parser.yy" // lalr1.cc:859
  688. {
  689. // This code is executed when we're about to start parsing
  690. // the content of the map
  691. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  692. ctx.stack_.push_back(m);
  693. }
  694. #line 845 "dhcp6_parser.cc" // lalr1.cc:859
  695. break;
  696. case 48:
  697. #line 306 "dhcp6_parser.yy" // lalr1.cc:859
  698. {
  699. // map parsing completed. If we ever want to do any wrap up
  700. // (maybe some sanity checking), this would be the best place
  701. // for it.
  702. }
  703. #line 855 "dhcp6_parser.cc" // lalr1.cc:859
  704. break;
  705. case 56:
  706. #line 325 "dhcp6_parser.yy" // lalr1.cc:859
  707. {
  708. // This code is executed when we're about to start parsing
  709. // the content of the map
  710. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  711. ctx.stack_.back()->set("Dhcp6", m);
  712. ctx.stack_.push_back(m);
  713. ctx.enter(ctx.DHCP6);
  714. }
  715. #line 868 "dhcp6_parser.cc" // lalr1.cc:859
  716. break;
  717. case 57:
  718. #line 332 "dhcp6_parser.yy" // lalr1.cc:859
  719. {
  720. // map parsing completed. If we ever want to do any wrap up
  721. // (maybe some sanity checking), this would be the best place
  722. // for it.
  723. ctx.stack_.pop_back();
  724. ctx.leave();
  725. }
  726. #line 880 "dhcp6_parser.cc" // lalr1.cc:859
  727. break;
  728. case 58:
  729. #line 342 "dhcp6_parser.yy" // lalr1.cc:859
  730. {
  731. // Parse the Dhcp6 map
  732. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  733. ctx.stack_.push_back(m);
  734. }
  735. #line 890 "dhcp6_parser.cc" // lalr1.cc:859
  736. break;
  737. case 59:
  738. #line 346 "dhcp6_parser.yy" // lalr1.cc:859
  739. {
  740. // parsing completed
  741. }
  742. #line 898 "dhcp6_parser.cc" // lalr1.cc:859
  743. break;
  744. case 84:
  745. #line 380 "dhcp6_parser.yy" // lalr1.cc:859
  746. {
  747. ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  748. ctx.stack_.back()->set("preferred-lifetime", prf);
  749. }
  750. #line 907 "dhcp6_parser.cc" // lalr1.cc:859
  751. break;
  752. case 85:
  753. #line 385 "dhcp6_parser.yy" // lalr1.cc:859
  754. {
  755. ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  756. ctx.stack_.back()->set("valid-lifetime", prf);
  757. }
  758. #line 916 "dhcp6_parser.cc" // lalr1.cc:859
  759. break;
  760. case 86:
  761. #line 390 "dhcp6_parser.yy" // lalr1.cc:859
  762. {
  763. ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  764. ctx.stack_.back()->set("renew-timer", prf);
  765. }
  766. #line 925 "dhcp6_parser.cc" // lalr1.cc:859
  767. break;
  768. case 87:
  769. #line 395 "dhcp6_parser.yy" // lalr1.cc:859
  770. {
  771. ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  772. ctx.stack_.back()->set("rebind-timer", prf);
  773. }
  774. #line 934 "dhcp6_parser.cc" // lalr1.cc:859
  775. break;
  776. case 88:
  777. #line 400 "dhcp6_parser.yy" // lalr1.cc:859
  778. {
  779. ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  780. ctx.stack_.back()->set("decline-probation-period", dpp);
  781. }
  782. #line 943 "dhcp6_parser.cc" // lalr1.cc:859
  783. break;
  784. case 89:
  785. #line 405 "dhcp6_parser.yy" // lalr1.cc:859
  786. {
  787. ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
  788. ctx.stack_.back()->set("interfaces-config", i);
  789. ctx.stack_.push_back(i);
  790. ctx.enter(ctx.INTERFACES_CONFIG);
  791. }
  792. #line 954 "dhcp6_parser.cc" // lalr1.cc:859
  793. break;
  794. case 90:
  795. #line 410 "dhcp6_parser.yy" // lalr1.cc:859
  796. {
  797. ctx.stack_.pop_back();
  798. ctx.leave();
  799. }
  800. #line 963 "dhcp6_parser.cc" // lalr1.cc:859
  801. break;
  802. case 91:
  803. #line 415 "dhcp6_parser.yy" // lalr1.cc:859
  804. {
  805. // Parse the interfaces-config map
  806. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  807. ctx.stack_.push_back(m);
  808. }
  809. #line 973 "dhcp6_parser.cc" // lalr1.cc:859
  810. break;
  811. case 92:
  812. #line 419 "dhcp6_parser.yy" // lalr1.cc:859
  813. {
  814. // parsing completed
  815. }
  816. #line 981 "dhcp6_parser.cc" // lalr1.cc:859
  817. break;
  818. case 93:
  819. #line 423 "dhcp6_parser.yy" // lalr1.cc:859
  820. {
  821. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  822. ctx.stack_.back()->set("interfaces", l);
  823. ctx.stack_.push_back(l);
  824. ctx.enter(ctx.NO_KEYWORD);
  825. }
  826. #line 992 "dhcp6_parser.cc" // lalr1.cc:859
  827. break;
  828. case 94:
  829. #line 428 "dhcp6_parser.yy" // lalr1.cc:859
  830. {
  831. ctx.stack_.pop_back();
  832. ctx.leave();
  833. }
  834. #line 1001 "dhcp6_parser.cc" // lalr1.cc:859
  835. break;
  836. case 95:
  837. #line 433 "dhcp6_parser.yy" // lalr1.cc:859
  838. {
  839. ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
  840. ctx.stack_.back()->set("lease-database", i);
  841. ctx.stack_.push_back(i);
  842. ctx.enter(ctx.LEASE_DATABASE);
  843. }
  844. #line 1012 "dhcp6_parser.cc" // lalr1.cc:859
  845. break;
  846. case 96:
  847. #line 438 "dhcp6_parser.yy" // lalr1.cc:859
  848. {
  849. ctx.stack_.pop_back();
  850. ctx.leave();
  851. }
  852. #line 1021 "dhcp6_parser.cc" // lalr1.cc:859
  853. break;
  854. case 97:
  855. #line 443 "dhcp6_parser.yy" // lalr1.cc:859
  856. {
  857. ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
  858. ctx.stack_.back()->set("hosts-database", i);
  859. ctx.stack_.push_back(i);
  860. ctx.enter(ctx.HOSTS_DATABASE);
  861. }
  862. #line 1032 "dhcp6_parser.cc" // lalr1.cc:859
  863. break;
  864. case 98:
  865. #line 448 "dhcp6_parser.yy" // lalr1.cc:859
  866. {
  867. ctx.stack_.pop_back();
  868. ctx.leave();
  869. }
  870. #line 1041 "dhcp6_parser.cc" // lalr1.cc:859
  871. break;
  872. case 110:
  873. #line 468 "dhcp6_parser.yy" // lalr1.cc:859
  874. {
  875. ctx.enter(ctx.NO_KEYWORD);
  876. }
  877. #line 1049 "dhcp6_parser.cc" // lalr1.cc:859
  878. break;
  879. case 111:
  880. #line 470 "dhcp6_parser.yy" // lalr1.cc:859
  881. {
  882. ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  883. ctx.stack_.back()->set("type", prf);
  884. ctx.leave();
  885. }
  886. #line 1059 "dhcp6_parser.cc" // lalr1.cc:859
  887. break;
  888. case 112:
  889. #line 476 "dhcp6_parser.yy" // lalr1.cc:859
  890. {
  891. ctx.enter(ctx.NO_KEYWORD);
  892. }
  893. #line 1067 "dhcp6_parser.cc" // lalr1.cc:859
  894. break;
  895. case 113:
  896. #line 478 "dhcp6_parser.yy" // lalr1.cc:859
  897. {
  898. ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  899. ctx.stack_.back()->set("user", user);
  900. ctx.leave();
  901. }
  902. #line 1077 "dhcp6_parser.cc" // lalr1.cc:859
  903. break;
  904. case 114:
  905. #line 484 "dhcp6_parser.yy" // lalr1.cc:859
  906. {
  907. ctx.enter(ctx.NO_KEYWORD);
  908. }
  909. #line 1085 "dhcp6_parser.cc" // lalr1.cc:859
  910. break;
  911. case 115:
  912. #line 486 "dhcp6_parser.yy" // lalr1.cc:859
  913. {
  914. ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  915. ctx.stack_.back()->set("password", pwd);
  916. ctx.leave();
  917. }
  918. #line 1095 "dhcp6_parser.cc" // lalr1.cc:859
  919. break;
  920. case 116:
  921. #line 492 "dhcp6_parser.yy" // lalr1.cc:859
  922. {
  923. ctx.enter(ctx.NO_KEYWORD);
  924. }
  925. #line 1103 "dhcp6_parser.cc" // lalr1.cc:859
  926. break;
  927. case 117:
  928. #line 494 "dhcp6_parser.yy" // lalr1.cc:859
  929. {
  930. ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  931. ctx.stack_.back()->set("host", h);
  932. ctx.leave();
  933. }
  934. #line 1113 "dhcp6_parser.cc" // lalr1.cc:859
  935. break;
  936. case 118:
  937. #line 500 "dhcp6_parser.yy" // lalr1.cc:859
  938. {
  939. ctx.enter(ctx.NO_KEYWORD);
  940. }
  941. #line 1121 "dhcp6_parser.cc" // lalr1.cc:859
  942. break;
  943. case 119:
  944. #line 502 "dhcp6_parser.yy" // lalr1.cc:859
  945. {
  946. ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  947. ctx.stack_.back()->set("name", name);
  948. ctx.leave();
  949. }
  950. #line 1131 "dhcp6_parser.cc" // lalr1.cc:859
  951. break;
  952. case 120:
  953. #line 508 "dhcp6_parser.yy" // lalr1.cc:859
  954. {
  955. ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
  956. ctx.stack_.back()->set("persist", n);
  957. }
  958. #line 1140 "dhcp6_parser.cc" // lalr1.cc:859
  959. break;
  960. case 121:
  961. #line 513 "dhcp6_parser.yy" // lalr1.cc:859
  962. {
  963. ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  964. ctx.stack_.back()->set("lfc-interval", n);
  965. }
  966. #line 1149 "dhcp6_parser.cc" // lalr1.cc:859
  967. break;
  968. case 122:
  969. #line 518 "dhcp6_parser.yy" // lalr1.cc:859
  970. {
  971. ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
  972. ctx.stack_.back()->set("readonly", n);
  973. }
  974. #line 1158 "dhcp6_parser.cc" // lalr1.cc:859
  975. break;
  976. case 123:
  977. #line 523 "dhcp6_parser.yy" // lalr1.cc:859
  978. {
  979. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  980. ctx.stack_.back()->set("mac-sources", l);
  981. ctx.stack_.push_back(l);
  982. ctx.enter(ctx.MAC_SOURCES);
  983. }
  984. #line 1169 "dhcp6_parser.cc" // lalr1.cc:859
  985. break;
  986. case 124:
  987. #line 528 "dhcp6_parser.yy" // lalr1.cc:859
  988. {
  989. ctx.stack_.pop_back();
  990. ctx.leave();
  991. }
  992. #line 1178 "dhcp6_parser.cc" // lalr1.cc:859
  993. break;
  994. case 129:
  995. #line 541 "dhcp6_parser.yy" // lalr1.cc:859
  996. {
  997. ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
  998. ctx.stack_.back()->add(duid);
  999. }
  1000. #line 1187 "dhcp6_parser.cc" // lalr1.cc:859
  1001. break;
  1002. case 130:
  1003. #line 546 "dhcp6_parser.yy" // lalr1.cc:859
  1004. {
  1005. ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1006. ctx.stack_.back()->add(duid);
  1007. }
  1008. #line 1196 "dhcp6_parser.cc" // lalr1.cc:859
  1009. break;
  1010. case 131:
  1011. #line 551 "dhcp6_parser.yy" // lalr1.cc:859
  1012. {
  1013. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1014. ctx.stack_.back()->set("host-reservation-identifiers", l);
  1015. ctx.stack_.push_back(l);
  1016. ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
  1017. }
  1018. #line 1207 "dhcp6_parser.cc" // lalr1.cc:859
  1019. break;
  1020. case 132:
  1021. #line 556 "dhcp6_parser.yy" // lalr1.cc:859
  1022. {
  1023. ctx.stack_.pop_back();
  1024. ctx.leave();
  1025. }
  1026. #line 1216 "dhcp6_parser.cc" // lalr1.cc:859
  1027. break;
  1028. case 137:
  1029. #line 569 "dhcp6_parser.yy" // lalr1.cc:859
  1030. {
  1031. ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
  1032. ctx.stack_.back()->add(hwaddr);
  1033. }
  1034. #line 1225 "dhcp6_parser.cc" // lalr1.cc:859
  1035. break;
  1036. case 138:
  1037. #line 574 "dhcp6_parser.yy" // lalr1.cc:859
  1038. {
  1039. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1040. ctx.stack_.back()->set("relay-supplied-options", l);
  1041. ctx.stack_.push_back(l);
  1042. ctx.enter(ctx.NO_KEYWORD);
  1043. }
  1044. #line 1236 "dhcp6_parser.cc" // lalr1.cc:859
  1045. break;
  1046. case 139:
  1047. #line 579 "dhcp6_parser.yy" // lalr1.cc:859
  1048. {
  1049. ctx.stack_.pop_back();
  1050. ctx.leave();
  1051. }
  1052. #line 1245 "dhcp6_parser.cc" // lalr1.cc:859
  1053. break;
  1054. case 140:
  1055. #line 584 "dhcp6_parser.yy" // lalr1.cc:859
  1056. {
  1057. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1058. ctx.stack_.back()->set("hooks-libraries", l);
  1059. ctx.stack_.push_back(l);
  1060. ctx.enter(ctx.HOOKS_LIBRARIES);
  1061. }
  1062. #line 1256 "dhcp6_parser.cc" // lalr1.cc:859
  1063. break;
  1064. case 141:
  1065. #line 589 "dhcp6_parser.yy" // lalr1.cc:859
  1066. {
  1067. ctx.stack_.pop_back();
  1068. ctx.leave();
  1069. }
  1070. #line 1265 "dhcp6_parser.cc" // lalr1.cc:859
  1071. break;
  1072. case 146:
  1073. #line 602 "dhcp6_parser.yy" // lalr1.cc:859
  1074. {
  1075. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1076. ctx.stack_.back()->add(m);
  1077. ctx.stack_.push_back(m);
  1078. }
  1079. #line 1275 "dhcp6_parser.cc" // lalr1.cc:859
  1080. break;
  1081. case 147:
  1082. #line 606 "dhcp6_parser.yy" // lalr1.cc:859
  1083. {
  1084. ctx.stack_.pop_back();
  1085. }
  1086. #line 1283 "dhcp6_parser.cc" // lalr1.cc:859
  1087. break;
  1088. case 148:
  1089. #line 610 "dhcp6_parser.yy" // lalr1.cc:859
  1090. {
  1091. // Parse the hooks-libraries list entry map
  1092. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1093. ctx.stack_.push_back(m);
  1094. }
  1095. #line 1293 "dhcp6_parser.cc" // lalr1.cc:859
  1096. break;
  1097. case 149:
  1098. #line 614 "dhcp6_parser.yy" // lalr1.cc:859
  1099. {
  1100. // parsing completed
  1101. }
  1102. #line 1301 "dhcp6_parser.cc" // lalr1.cc:859
  1103. break;
  1104. case 155:
  1105. #line 627 "dhcp6_parser.yy" // lalr1.cc:859
  1106. {
  1107. ctx.enter(ctx.NO_KEYWORD);
  1108. }
  1109. #line 1309 "dhcp6_parser.cc" // lalr1.cc:859
  1110. break;
  1111. case 156:
  1112. #line 629 "dhcp6_parser.yy" // lalr1.cc:859
  1113. {
  1114. ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1115. ctx.stack_.back()->set("library", lib);
  1116. ctx.leave();
  1117. }
  1118. #line 1319 "dhcp6_parser.cc" // lalr1.cc:859
  1119. break;
  1120. case 157:
  1121. #line 635 "dhcp6_parser.yy" // lalr1.cc:859
  1122. {
  1123. ctx.enter(ctx.NO_KEYWORD);
  1124. }
  1125. #line 1327 "dhcp6_parser.cc" // lalr1.cc:859
  1126. break;
  1127. case 158:
  1128. #line 637 "dhcp6_parser.yy" // lalr1.cc:859
  1129. {
  1130. ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
  1131. ctx.leave();
  1132. }
  1133. #line 1336 "dhcp6_parser.cc" // lalr1.cc:859
  1134. break;
  1135. case 159:
  1136. #line 643 "dhcp6_parser.yy" // lalr1.cc:859
  1137. {
  1138. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1139. ctx.stack_.back()->set("expired-leases-processing", m);
  1140. ctx.stack_.push_back(m);
  1141. ctx.enter(ctx.NO_KEYWORD);
  1142. }
  1143. #line 1347 "dhcp6_parser.cc" // lalr1.cc:859
  1144. break;
  1145. case 160:
  1146. #line 648 "dhcp6_parser.yy" // lalr1.cc:859
  1147. {
  1148. ctx.stack_.pop_back();
  1149. ctx.leave();
  1150. }
  1151. #line 1356 "dhcp6_parser.cc" // lalr1.cc:859
  1152. break;
  1153. case 163:
  1154. #line 660 "dhcp6_parser.yy" // lalr1.cc:859
  1155. {
  1156. ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  1157. ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), value);
  1158. }
  1159. #line 1365 "dhcp6_parser.cc" // lalr1.cc:859
  1160. break;
  1161. case 164:
  1162. #line 668 "dhcp6_parser.yy" // lalr1.cc:859
  1163. {
  1164. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1165. ctx.stack_.back()->set("subnet6", l);
  1166. ctx.stack_.push_back(l);
  1167. ctx.enter(ctx.SUBNET6);
  1168. }
  1169. #line 1376 "dhcp6_parser.cc" // lalr1.cc:859
  1170. break;
  1171. case 165:
  1172. #line 673 "dhcp6_parser.yy" // lalr1.cc:859
  1173. {
  1174. ctx.stack_.pop_back();
  1175. ctx.leave();
  1176. }
  1177. #line 1385 "dhcp6_parser.cc" // lalr1.cc:859
  1178. break;
  1179. case 170:
  1180. #line 693 "dhcp6_parser.yy" // lalr1.cc:859
  1181. {
  1182. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1183. ctx.stack_.back()->add(m);
  1184. ctx.stack_.push_back(m);
  1185. }
  1186. #line 1395 "dhcp6_parser.cc" // lalr1.cc:859
  1187. break;
  1188. case 171:
  1189. #line 697 "dhcp6_parser.yy" // lalr1.cc:859
  1190. {
  1191. // Once we reached this place, the subnet parsing is now complete.
  1192. // If we want to, we can implement default values here.
  1193. // In particular we can do things like this:
  1194. // if (!ctx.stack_.back()->get("interface")) {
  1195. // ctx.stack_.back()->set("interface", StringElement("loopback"));
  1196. // }
  1197. //
  1198. // We can also stack up one level (Dhcp6) and copy over whatever
  1199. // global parameters we want to:
  1200. // if (!ctx.stack_.back()->get("renew-timer")) {
  1201. // ElementPtr renew = ctx_stack_[...].get("renew-timer");
  1202. // if (renew) {
  1203. // ctx.stack_.back()->set("renew-timer", renew);
  1204. // }
  1205. // }
  1206. ctx.stack_.pop_back();
  1207. }
  1208. #line 1418 "dhcp6_parser.cc" // lalr1.cc:859
  1209. break;
  1210. case 172:
  1211. #line 716 "dhcp6_parser.yy" // lalr1.cc:859
  1212. {
  1213. // Parse the subnet6 list entry map
  1214. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1215. ctx.stack_.push_back(m);
  1216. }
  1217. #line 1428 "dhcp6_parser.cc" // lalr1.cc:859
  1218. break;
  1219. case 173:
  1220. #line 720 "dhcp6_parser.yy" // lalr1.cc:859
  1221. {
  1222. // parsing completed
  1223. }
  1224. #line 1436 "dhcp6_parser.cc" // lalr1.cc:859
  1225. break;
  1226. case 193:
  1227. #line 749 "dhcp6_parser.yy" // lalr1.cc:859
  1228. {
  1229. ctx.enter(ctx.NO_KEYWORD);
  1230. }
  1231. #line 1444 "dhcp6_parser.cc" // lalr1.cc:859
  1232. break;
  1233. case 194:
  1234. #line 751 "dhcp6_parser.yy" // lalr1.cc:859
  1235. {
  1236. ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1237. ctx.stack_.back()->set("subnet", subnet);
  1238. ctx.leave();
  1239. }
  1240. #line 1454 "dhcp6_parser.cc" // lalr1.cc:859
  1241. break;
  1242. case 195:
  1243. #line 757 "dhcp6_parser.yy" // lalr1.cc:859
  1244. {
  1245. ctx.enter(ctx.NO_KEYWORD);
  1246. }
  1247. #line 1462 "dhcp6_parser.cc" // lalr1.cc:859
  1248. break;
  1249. case 196:
  1250. #line 759 "dhcp6_parser.yy" // lalr1.cc:859
  1251. {
  1252. ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1253. ctx.stack_.back()->set("interface", iface);
  1254. ctx.leave();
  1255. }
  1256. #line 1472 "dhcp6_parser.cc" // lalr1.cc:859
  1257. break;
  1258. case 197:
  1259. #line 765 "dhcp6_parser.yy" // lalr1.cc:859
  1260. {
  1261. ctx.enter(ctx.NO_KEYWORD);
  1262. }
  1263. #line 1480 "dhcp6_parser.cc" // lalr1.cc:859
  1264. break;
  1265. case 198:
  1266. #line 767 "dhcp6_parser.yy" // lalr1.cc:859
  1267. {
  1268. ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1269. ctx.stack_.back()->set("interface-id", iface);
  1270. ctx.leave();
  1271. }
  1272. #line 1490 "dhcp6_parser.cc" // lalr1.cc:859
  1273. break;
  1274. case 199:
  1275. #line 773 "dhcp6_parser.yy" // lalr1.cc:859
  1276. {
  1277. ctx.enter(ctx.CLIENT_CLASS);
  1278. }
  1279. #line 1498 "dhcp6_parser.cc" // lalr1.cc:859
  1280. break;
  1281. case 200:
  1282. #line 775 "dhcp6_parser.yy" // lalr1.cc:859
  1283. {
  1284. ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1285. ctx.stack_.back()->set("client-class", cls);
  1286. ctx.leave();
  1287. }
  1288. #line 1508 "dhcp6_parser.cc" // lalr1.cc:859
  1289. break;
  1290. case 201:
  1291. #line 781 "dhcp6_parser.yy" // lalr1.cc:859
  1292. {
  1293. ctx.enter(ctx.NO_KEYWORD);
  1294. }
  1295. #line 1516 "dhcp6_parser.cc" // lalr1.cc:859
  1296. break;
  1297. case 202:
  1298. #line 783 "dhcp6_parser.yy" // lalr1.cc:859
  1299. {
  1300. ElementPtr rm(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1301. ctx.stack_.back()->set("reservation-mode", rm);
  1302. ctx.leave();
  1303. }
  1304. #line 1526 "dhcp6_parser.cc" // lalr1.cc:859
  1305. break;
  1306. case 203:
  1307. #line 789 "dhcp6_parser.yy" // lalr1.cc:859
  1308. {
  1309. ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  1310. ctx.stack_.back()->set("id", id);
  1311. }
  1312. #line 1535 "dhcp6_parser.cc" // lalr1.cc:859
  1313. break;
  1314. case 204:
  1315. #line 794 "dhcp6_parser.yy" // lalr1.cc:859
  1316. {
  1317. ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
  1318. ctx.stack_.back()->set("rapid-commit", rc);
  1319. }
  1320. #line 1544 "dhcp6_parser.cc" // lalr1.cc:859
  1321. break;
  1322. case 205:
  1323. #line 803 "dhcp6_parser.yy" // lalr1.cc:859
  1324. {
  1325. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1326. ctx.stack_.back()->set("option-def", l);
  1327. ctx.stack_.push_back(l);
  1328. ctx.enter(ctx.OPTION_DEF);
  1329. }
  1330. #line 1555 "dhcp6_parser.cc" // lalr1.cc:859
  1331. break;
  1332. case 206:
  1333. #line 808 "dhcp6_parser.yy" // lalr1.cc:859
  1334. {
  1335. ctx.stack_.pop_back();
  1336. ctx.leave();
  1337. }
  1338. #line 1564 "dhcp6_parser.cc" // lalr1.cc:859
  1339. break;
  1340. case 211:
  1341. #line 825 "dhcp6_parser.yy" // lalr1.cc:859
  1342. {
  1343. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1344. ctx.stack_.back()->add(m);
  1345. ctx.stack_.push_back(m);
  1346. }
  1347. #line 1574 "dhcp6_parser.cc" // lalr1.cc:859
  1348. break;
  1349. case 212:
  1350. #line 829 "dhcp6_parser.yy" // lalr1.cc:859
  1351. {
  1352. ctx.stack_.pop_back();
  1353. }
  1354. #line 1582 "dhcp6_parser.cc" // lalr1.cc:859
  1355. break;
  1356. case 213:
  1357. #line 836 "dhcp6_parser.yy" // lalr1.cc:859
  1358. {
  1359. // Parse the option-def list entry map
  1360. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1361. ctx.stack_.push_back(m);
  1362. }
  1363. #line 1592 "dhcp6_parser.cc" // lalr1.cc:859
  1364. break;
  1365. case 214:
  1366. #line 840 "dhcp6_parser.yy" // lalr1.cc:859
  1367. {
  1368. // parsing completed
  1369. }
  1370. #line 1600 "dhcp6_parser.cc" // lalr1.cc:859
  1371. break;
  1372. case 228:
  1373. #line 866 "dhcp6_parser.yy" // lalr1.cc:859
  1374. {
  1375. ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  1376. ctx.stack_.back()->set("code", code);
  1377. }
  1378. #line 1609 "dhcp6_parser.cc" // lalr1.cc:859
  1379. break;
  1380. case 231:
  1381. #line 875 "dhcp6_parser.yy" // lalr1.cc:859
  1382. {
  1383. ctx.enter(ctx.NO_KEYWORD);
  1384. }
  1385. #line 1617 "dhcp6_parser.cc" // lalr1.cc:859
  1386. break;
  1387. case 232:
  1388. #line 877 "dhcp6_parser.yy" // lalr1.cc:859
  1389. {
  1390. ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1391. ctx.stack_.back()->set("record-types", rtypes);
  1392. ctx.leave();
  1393. }
  1394. #line 1627 "dhcp6_parser.cc" // lalr1.cc:859
  1395. break;
  1396. case 233:
  1397. #line 883 "dhcp6_parser.yy" // lalr1.cc:859
  1398. {
  1399. ctx.enter(ctx.NO_KEYWORD);
  1400. }
  1401. #line 1635 "dhcp6_parser.cc" // lalr1.cc:859
  1402. break;
  1403. case 234:
  1404. #line 885 "dhcp6_parser.yy" // lalr1.cc:859
  1405. {
  1406. ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1407. ctx.stack_.back()->set("space", space);
  1408. ctx.leave();
  1409. }
  1410. #line 1645 "dhcp6_parser.cc" // lalr1.cc:859
  1411. break;
  1412. case 236:
  1413. #line 893 "dhcp6_parser.yy" // lalr1.cc:859
  1414. {
  1415. ctx.enter(ctx.NO_KEYWORD);
  1416. }
  1417. #line 1653 "dhcp6_parser.cc" // lalr1.cc:859
  1418. break;
  1419. case 237:
  1420. #line 895 "dhcp6_parser.yy" // lalr1.cc:859
  1421. {
  1422. ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1423. ctx.stack_.back()->set("encapsulate", encap);
  1424. ctx.leave();
  1425. }
  1426. #line 1663 "dhcp6_parser.cc" // lalr1.cc:859
  1427. break;
  1428. case 238:
  1429. #line 901 "dhcp6_parser.yy" // lalr1.cc:859
  1430. {
  1431. ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
  1432. ctx.stack_.back()->set("array", array);
  1433. }
  1434. #line 1672 "dhcp6_parser.cc" // lalr1.cc:859
  1435. break;
  1436. case 239:
  1437. #line 910 "dhcp6_parser.yy" // lalr1.cc:859
  1438. {
  1439. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1440. ctx.stack_.back()->set("option-data", l);
  1441. ctx.stack_.push_back(l);
  1442. ctx.enter(ctx.OPTION_DATA);
  1443. }
  1444. #line 1683 "dhcp6_parser.cc" // lalr1.cc:859
  1445. break;
  1446. case 240:
  1447. #line 915 "dhcp6_parser.yy" // lalr1.cc:859
  1448. {
  1449. ctx.stack_.pop_back();
  1450. ctx.leave();
  1451. }
  1452. #line 1692 "dhcp6_parser.cc" // lalr1.cc:859
  1453. break;
  1454. case 245:
  1455. #line 934 "dhcp6_parser.yy" // lalr1.cc:859
  1456. {
  1457. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1458. ctx.stack_.back()->add(m);
  1459. ctx.stack_.push_back(m);
  1460. }
  1461. #line 1702 "dhcp6_parser.cc" // lalr1.cc:859
  1462. break;
  1463. case 246:
  1464. #line 938 "dhcp6_parser.yy" // lalr1.cc:859
  1465. {
  1466. ctx.stack_.pop_back();
  1467. }
  1468. #line 1710 "dhcp6_parser.cc" // lalr1.cc:859
  1469. break;
  1470. case 247:
  1471. #line 945 "dhcp6_parser.yy" // lalr1.cc:859
  1472. {
  1473. // Parse the option-data list entry map
  1474. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1475. ctx.stack_.push_back(m);
  1476. }
  1477. #line 1720 "dhcp6_parser.cc" // lalr1.cc:859
  1478. break;
  1479. case 248:
  1480. #line 949 "dhcp6_parser.yy" // lalr1.cc:859
  1481. {
  1482. // parsing completed
  1483. }
  1484. #line 1728 "dhcp6_parser.cc" // lalr1.cc:859
  1485. break;
  1486. case 260:
  1487. #line 978 "dhcp6_parser.yy" // lalr1.cc:859
  1488. {
  1489. ctx.enter(ctx.NO_KEYWORD);
  1490. }
  1491. #line 1736 "dhcp6_parser.cc" // lalr1.cc:859
  1492. break;
  1493. case 261:
  1494. #line 980 "dhcp6_parser.yy" // lalr1.cc:859
  1495. {
  1496. ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1497. ctx.stack_.back()->set("data", data);
  1498. ctx.leave();
  1499. }
  1500. #line 1746 "dhcp6_parser.cc" // lalr1.cc:859
  1501. break;
  1502. case 264:
  1503. #line 990 "dhcp6_parser.yy" // lalr1.cc:859
  1504. {
  1505. ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
  1506. ctx.stack_.back()->set("csv-format", space);
  1507. }
  1508. #line 1755 "dhcp6_parser.cc" // lalr1.cc:859
  1509. break;
  1510. case 265:
  1511. #line 998 "dhcp6_parser.yy" // lalr1.cc:859
  1512. {
  1513. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1514. ctx.stack_.back()->set("pools", l);
  1515. ctx.stack_.push_back(l);
  1516. ctx.enter(ctx.POOLS);
  1517. }
  1518. #line 1766 "dhcp6_parser.cc" // lalr1.cc:859
  1519. break;
  1520. case 266:
  1521. #line 1003 "dhcp6_parser.yy" // lalr1.cc:859
  1522. {
  1523. ctx.stack_.pop_back();
  1524. ctx.leave();
  1525. }
  1526. #line 1775 "dhcp6_parser.cc" // lalr1.cc:859
  1527. break;
  1528. case 271:
  1529. #line 1018 "dhcp6_parser.yy" // lalr1.cc:859
  1530. {
  1531. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1532. ctx.stack_.back()->add(m);
  1533. ctx.stack_.push_back(m);
  1534. }
  1535. #line 1785 "dhcp6_parser.cc" // lalr1.cc:859
  1536. break;
  1537. case 272:
  1538. #line 1022 "dhcp6_parser.yy" // lalr1.cc:859
  1539. {
  1540. ctx.stack_.pop_back();
  1541. }
  1542. #line 1793 "dhcp6_parser.cc" // lalr1.cc:859
  1543. break;
  1544. case 273:
  1545. #line 1026 "dhcp6_parser.yy" // lalr1.cc:859
  1546. {
  1547. // Parse the pool list entry map
  1548. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1549. ctx.stack_.push_back(m);
  1550. }
  1551. #line 1803 "dhcp6_parser.cc" // lalr1.cc:859
  1552. break;
  1553. case 274:
  1554. #line 1030 "dhcp6_parser.yy" // lalr1.cc:859
  1555. {
  1556. // parsing completed
  1557. }
  1558. #line 1811 "dhcp6_parser.cc" // lalr1.cc:859
  1559. break;
  1560. case 280:
  1561. #line 1043 "dhcp6_parser.yy" // lalr1.cc:859
  1562. {
  1563. ctx.enter(ctx.NO_KEYWORD);
  1564. }
  1565. #line 1819 "dhcp6_parser.cc" // lalr1.cc:859
  1566. break;
  1567. case 281:
  1568. #line 1045 "dhcp6_parser.yy" // lalr1.cc:859
  1569. {
  1570. ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1571. ctx.stack_.back()->set("pool", pool);
  1572. ctx.leave();
  1573. }
  1574. #line 1829 "dhcp6_parser.cc" // lalr1.cc:859
  1575. break;
  1576. case 282:
  1577. #line 1054 "dhcp6_parser.yy" // lalr1.cc:859
  1578. {
  1579. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1580. ctx.stack_.back()->set("pd-pools", l);
  1581. ctx.stack_.push_back(l);
  1582. ctx.enter(ctx.PD_POOLS);
  1583. }
  1584. #line 1840 "dhcp6_parser.cc" // lalr1.cc:859
  1585. break;
  1586. case 283:
  1587. #line 1059 "dhcp6_parser.yy" // lalr1.cc:859
  1588. {
  1589. ctx.stack_.pop_back();
  1590. ctx.leave();
  1591. }
  1592. #line 1849 "dhcp6_parser.cc" // lalr1.cc:859
  1593. break;
  1594. case 288:
  1595. #line 1074 "dhcp6_parser.yy" // lalr1.cc:859
  1596. {
  1597. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1598. ctx.stack_.back()->add(m);
  1599. ctx.stack_.push_back(m);
  1600. }
  1601. #line 1859 "dhcp6_parser.cc" // lalr1.cc:859
  1602. break;
  1603. case 289:
  1604. #line 1078 "dhcp6_parser.yy" // lalr1.cc:859
  1605. {
  1606. ctx.stack_.pop_back();
  1607. }
  1608. #line 1867 "dhcp6_parser.cc" // lalr1.cc:859
  1609. break;
  1610. case 290:
  1611. #line 1082 "dhcp6_parser.yy" // lalr1.cc:859
  1612. {
  1613. // Parse the pd-pool list entry map
  1614. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1615. ctx.stack_.push_back(m);
  1616. }
  1617. #line 1877 "dhcp6_parser.cc" // lalr1.cc:859
  1618. break;
  1619. case 291:
  1620. #line 1086 "dhcp6_parser.yy" // lalr1.cc:859
  1621. {
  1622. // parsing completed
  1623. }
  1624. #line 1885 "dhcp6_parser.cc" // lalr1.cc:859
  1625. break;
  1626. case 301:
  1627. #line 1103 "dhcp6_parser.yy" // lalr1.cc:859
  1628. {
  1629. ctx.enter(ctx.NO_KEYWORD);
  1630. }
  1631. #line 1893 "dhcp6_parser.cc" // lalr1.cc:859
  1632. break;
  1633. case 302:
  1634. #line 1105 "dhcp6_parser.yy" // lalr1.cc:859
  1635. {
  1636. ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1637. ctx.stack_.back()->set("prefix", prf);
  1638. ctx.leave();
  1639. }
  1640. #line 1903 "dhcp6_parser.cc" // lalr1.cc:859
  1641. break;
  1642. case 303:
  1643. #line 1111 "dhcp6_parser.yy" // lalr1.cc:859
  1644. {
  1645. ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  1646. ctx.stack_.back()->set("prefix-len", prf);
  1647. }
  1648. #line 1912 "dhcp6_parser.cc" // lalr1.cc:859
  1649. break;
  1650. case 304:
  1651. #line 1116 "dhcp6_parser.yy" // lalr1.cc:859
  1652. {
  1653. ctx.enter(ctx.NO_KEYWORD);
  1654. }
  1655. #line 1920 "dhcp6_parser.cc" // lalr1.cc:859
  1656. break;
  1657. case 305:
  1658. #line 1118 "dhcp6_parser.yy" // lalr1.cc:859
  1659. {
  1660. ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1661. ctx.stack_.back()->set("excluded-prefix", prf);
  1662. ctx.leave();
  1663. }
  1664. #line 1930 "dhcp6_parser.cc" // lalr1.cc:859
  1665. break;
  1666. case 306:
  1667. #line 1124 "dhcp6_parser.yy" // lalr1.cc:859
  1668. {
  1669. ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  1670. ctx.stack_.back()->set("excluded-prefix-len", prf);
  1671. }
  1672. #line 1939 "dhcp6_parser.cc" // lalr1.cc:859
  1673. break;
  1674. case 307:
  1675. #line 1129 "dhcp6_parser.yy" // lalr1.cc:859
  1676. {
  1677. ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  1678. ctx.stack_.back()->set("delegated-len", deleg);
  1679. }
  1680. #line 1948 "dhcp6_parser.cc" // lalr1.cc:859
  1681. break;
  1682. case 308:
  1683. #line 1137 "dhcp6_parser.yy" // lalr1.cc:859
  1684. {
  1685. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1686. ctx.stack_.back()->set("reservations", l);
  1687. ctx.stack_.push_back(l);
  1688. ctx.enter(ctx.RESERVATIONS);
  1689. }
  1690. #line 1959 "dhcp6_parser.cc" // lalr1.cc:859
  1691. break;
  1692. case 309:
  1693. #line 1142 "dhcp6_parser.yy" // lalr1.cc:859
  1694. {
  1695. ctx.stack_.pop_back();
  1696. ctx.leave();
  1697. }
  1698. #line 1968 "dhcp6_parser.cc" // lalr1.cc:859
  1699. break;
  1700. case 314:
  1701. #line 1155 "dhcp6_parser.yy" // lalr1.cc:859
  1702. {
  1703. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1704. ctx.stack_.back()->add(m);
  1705. ctx.stack_.push_back(m);
  1706. }
  1707. #line 1978 "dhcp6_parser.cc" // lalr1.cc:859
  1708. break;
  1709. case 315:
  1710. #line 1159 "dhcp6_parser.yy" // lalr1.cc:859
  1711. {
  1712. ctx.stack_.pop_back();
  1713. }
  1714. #line 1986 "dhcp6_parser.cc" // lalr1.cc:859
  1715. break;
  1716. case 316:
  1717. #line 1163 "dhcp6_parser.yy" // lalr1.cc:859
  1718. {
  1719. // Parse the reservations list entry map
  1720. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1721. ctx.stack_.push_back(m);
  1722. }
  1723. #line 1996 "dhcp6_parser.cc" // lalr1.cc:859
  1724. break;
  1725. case 317:
  1726. #line 1167 "dhcp6_parser.yy" // lalr1.cc:859
  1727. {
  1728. // parsing completed
  1729. }
  1730. #line 2004 "dhcp6_parser.cc" // lalr1.cc:859
  1731. break;
  1732. case 330:
  1733. #line 1190 "dhcp6_parser.yy" // lalr1.cc:859
  1734. {
  1735. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1736. ctx.stack_.back()->set("ip-addresses", l);
  1737. ctx.stack_.push_back(l);
  1738. ctx.enter(ctx.NO_KEYWORD);
  1739. }
  1740. #line 2015 "dhcp6_parser.cc" // lalr1.cc:859
  1741. break;
  1742. case 331:
  1743. #line 1195 "dhcp6_parser.yy" // lalr1.cc:859
  1744. {
  1745. ctx.stack_.pop_back();
  1746. ctx.leave();
  1747. }
  1748. #line 2024 "dhcp6_parser.cc" // lalr1.cc:859
  1749. break;
  1750. case 332:
  1751. #line 1200 "dhcp6_parser.yy" // lalr1.cc:859
  1752. {
  1753. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1754. ctx.stack_.back()->set("prefixes", l);
  1755. ctx.stack_.push_back(l);
  1756. ctx.enter(ctx.NO_KEYWORD);
  1757. }
  1758. #line 2035 "dhcp6_parser.cc" // lalr1.cc:859
  1759. break;
  1760. case 333:
  1761. #line 1205 "dhcp6_parser.yy" // lalr1.cc:859
  1762. {
  1763. ctx.stack_.pop_back();
  1764. ctx.leave();
  1765. }
  1766. #line 2044 "dhcp6_parser.cc" // lalr1.cc:859
  1767. break;
  1768. case 334:
  1769. #line 1210 "dhcp6_parser.yy" // lalr1.cc:859
  1770. {
  1771. ctx.enter(ctx.NO_KEYWORD);
  1772. }
  1773. #line 2052 "dhcp6_parser.cc" // lalr1.cc:859
  1774. break;
  1775. case 335:
  1776. #line 1212 "dhcp6_parser.yy" // lalr1.cc:859
  1777. {
  1778. ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1779. ctx.stack_.back()->set("duid", d);
  1780. ctx.leave();
  1781. }
  1782. #line 2062 "dhcp6_parser.cc" // lalr1.cc:859
  1783. break;
  1784. case 336:
  1785. #line 1218 "dhcp6_parser.yy" // lalr1.cc:859
  1786. {
  1787. ctx.enter(ctx.NO_KEYWORD);
  1788. }
  1789. #line 2070 "dhcp6_parser.cc" // lalr1.cc:859
  1790. break;
  1791. case 337:
  1792. #line 1220 "dhcp6_parser.yy" // lalr1.cc:859
  1793. {
  1794. ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1795. ctx.stack_.back()->set("hw-address", hw);
  1796. ctx.leave();
  1797. }
  1798. #line 2080 "dhcp6_parser.cc" // lalr1.cc:859
  1799. break;
  1800. case 338:
  1801. #line 1226 "dhcp6_parser.yy" // lalr1.cc:859
  1802. {
  1803. ctx.enter(ctx.NO_KEYWORD);
  1804. }
  1805. #line 2088 "dhcp6_parser.cc" // lalr1.cc:859
  1806. break;
  1807. case 339:
  1808. #line 1228 "dhcp6_parser.yy" // lalr1.cc:859
  1809. {
  1810. ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1811. ctx.stack_.back()->set("hostname", host);
  1812. ctx.leave();
  1813. }
  1814. #line 2098 "dhcp6_parser.cc" // lalr1.cc:859
  1815. break;
  1816. case 340:
  1817. #line 1234 "dhcp6_parser.yy" // lalr1.cc:859
  1818. {
  1819. ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1820. ctx.stack_.back()->set("client-classes", c);
  1821. ctx.stack_.push_back(c);
  1822. ctx.enter(ctx.NO_KEYWORD);
  1823. }
  1824. #line 2109 "dhcp6_parser.cc" // lalr1.cc:859
  1825. break;
  1826. case 341:
  1827. #line 1239 "dhcp6_parser.yy" // lalr1.cc:859
  1828. {
  1829. ctx.stack_.pop_back();
  1830. ctx.leave();
  1831. }
  1832. #line 2118 "dhcp6_parser.cc" // lalr1.cc:859
  1833. break;
  1834. case 342:
  1835. #line 1247 "dhcp6_parser.yy" // lalr1.cc:859
  1836. {
  1837. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1838. ctx.stack_.back()->set("relay", m);
  1839. ctx.stack_.push_back(m);
  1840. ctx.enter(ctx.RELAY);
  1841. }
  1842. #line 2129 "dhcp6_parser.cc" // lalr1.cc:859
  1843. break;
  1844. case 343:
  1845. #line 1252 "dhcp6_parser.yy" // lalr1.cc:859
  1846. {
  1847. ctx.stack_.pop_back();
  1848. ctx.leave();
  1849. }
  1850. #line 2138 "dhcp6_parser.cc" // lalr1.cc:859
  1851. break;
  1852. case 344:
  1853. #line 1257 "dhcp6_parser.yy" // lalr1.cc:859
  1854. {
  1855. ctx.enter(ctx.NO_KEYWORD);
  1856. }
  1857. #line 2146 "dhcp6_parser.cc" // lalr1.cc:859
  1858. break;
  1859. case 345:
  1860. #line 1259 "dhcp6_parser.yy" // lalr1.cc:859
  1861. {
  1862. ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1863. ctx.stack_.back()->set("ip-address", ip);
  1864. ctx.leave();
  1865. }
  1866. #line 2156 "dhcp6_parser.cc" // lalr1.cc:859
  1867. break;
  1868. case 346:
  1869. #line 1268 "dhcp6_parser.yy" // lalr1.cc:859
  1870. {
  1871. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  1872. ctx.stack_.back()->set("client-classes", l);
  1873. ctx.stack_.push_back(l);
  1874. ctx.enter(ctx.CLIENT_CLASSES);
  1875. }
  1876. #line 2167 "dhcp6_parser.cc" // lalr1.cc:859
  1877. break;
  1878. case 347:
  1879. #line 1273 "dhcp6_parser.yy" // lalr1.cc:859
  1880. {
  1881. ctx.stack_.pop_back();
  1882. ctx.leave();
  1883. }
  1884. #line 2176 "dhcp6_parser.cc" // lalr1.cc:859
  1885. break;
  1886. case 350:
  1887. #line 1282 "dhcp6_parser.yy" // lalr1.cc:859
  1888. {
  1889. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1890. ctx.stack_.back()->add(m);
  1891. ctx.stack_.push_back(m);
  1892. }
  1893. #line 2186 "dhcp6_parser.cc" // lalr1.cc:859
  1894. break;
  1895. case 351:
  1896. #line 1286 "dhcp6_parser.yy" // lalr1.cc:859
  1897. {
  1898. ctx.stack_.pop_back();
  1899. }
  1900. #line 2194 "dhcp6_parser.cc" // lalr1.cc:859
  1901. break;
  1902. case 361:
  1903. #line 1306 "dhcp6_parser.yy" // lalr1.cc:859
  1904. {
  1905. ctx.enter(ctx.NO_KEYWORD);
  1906. }
  1907. #line 2202 "dhcp6_parser.cc" // lalr1.cc:859
  1908. break;
  1909. case 362:
  1910. #line 1308 "dhcp6_parser.yy" // lalr1.cc:859
  1911. {
  1912. ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1913. ctx.stack_.back()->set("test", test);
  1914. ctx.leave();
  1915. }
  1916. #line 2212 "dhcp6_parser.cc" // lalr1.cc:859
  1917. break;
  1918. case 363:
  1919. #line 1317 "dhcp6_parser.yy" // lalr1.cc:859
  1920. {
  1921. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1922. ctx.stack_.back()->set("server-id", m);
  1923. ctx.stack_.push_back(m);
  1924. ctx.enter(ctx.SERVER_ID);
  1925. }
  1926. #line 2223 "dhcp6_parser.cc" // lalr1.cc:859
  1927. break;
  1928. case 364:
  1929. #line 1322 "dhcp6_parser.yy" // lalr1.cc:859
  1930. {
  1931. ctx.stack_.pop_back();
  1932. ctx.leave();
  1933. }
  1934. #line 2232 "dhcp6_parser.cc" // lalr1.cc:859
  1935. break;
  1936. case 374:
  1937. #line 1340 "dhcp6_parser.yy" // lalr1.cc:859
  1938. {
  1939. ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  1940. ctx.stack_.back()->set("htype", htype);
  1941. }
  1942. #line 2241 "dhcp6_parser.cc" // lalr1.cc:859
  1943. break;
  1944. case 375:
  1945. #line 1345 "dhcp6_parser.yy" // lalr1.cc:859
  1946. {
  1947. ctx.enter(ctx.NO_KEYWORD);
  1948. }
  1949. #line 2249 "dhcp6_parser.cc" // lalr1.cc:859
  1950. break;
  1951. case 376:
  1952. #line 1347 "dhcp6_parser.yy" // lalr1.cc:859
  1953. {
  1954. ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  1955. ctx.stack_.back()->set("identifier", id);
  1956. ctx.leave();
  1957. }
  1958. #line 2259 "dhcp6_parser.cc" // lalr1.cc:859
  1959. break;
  1960. case 377:
  1961. #line 1353 "dhcp6_parser.yy" // lalr1.cc:859
  1962. {
  1963. ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  1964. ctx.stack_.back()->set("time", time);
  1965. }
  1966. #line 2268 "dhcp6_parser.cc" // lalr1.cc:859
  1967. break;
  1968. case 378:
  1969. #line 1358 "dhcp6_parser.yy" // lalr1.cc:859
  1970. {
  1971. ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  1972. ctx.stack_.back()->set("enterprise-id", time);
  1973. }
  1974. #line 2277 "dhcp6_parser.cc" // lalr1.cc:859
  1975. break;
  1976. case 379:
  1977. #line 1365 "dhcp6_parser.yy" // lalr1.cc:859
  1978. {
  1979. ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  1980. ctx.stack_.back()->set("dhcp4o6-port", time);
  1981. }
  1982. #line 2286 "dhcp6_parser.cc" // lalr1.cc:859
  1983. break;
  1984. case 380:
  1985. #line 1372 "dhcp6_parser.yy" // lalr1.cc:859
  1986. {
  1987. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  1988. ctx.stack_.back()->set("control-socket", m);
  1989. ctx.stack_.push_back(m);
  1990. ctx.enter(ctx.CONTROL_SOCKET);
  1991. }
  1992. #line 2297 "dhcp6_parser.cc" // lalr1.cc:859
  1993. break;
  1994. case 381:
  1995. #line 1377 "dhcp6_parser.yy" // lalr1.cc:859
  1996. {
  1997. ctx.stack_.pop_back();
  1998. ctx.leave();
  1999. }
  2000. #line 2306 "dhcp6_parser.cc" // lalr1.cc:859
  2001. break;
  2002. case 386:
  2003. #line 1390 "dhcp6_parser.yy" // lalr1.cc:859
  2004. {
  2005. ctx.enter(ctx.NO_KEYWORD);
  2006. }
  2007. #line 2314 "dhcp6_parser.cc" // lalr1.cc:859
  2008. break;
  2009. case 387:
  2010. #line 1392 "dhcp6_parser.yy" // lalr1.cc:859
  2011. {
  2012. ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  2013. ctx.stack_.back()->set("socket-type", stype);
  2014. ctx.leave();
  2015. }
  2016. #line 2324 "dhcp6_parser.cc" // lalr1.cc:859
  2017. break;
  2018. case 388:
  2019. #line 1398 "dhcp6_parser.yy" // lalr1.cc:859
  2020. {
  2021. ctx.enter(ctx.NO_KEYWORD);
  2022. }
  2023. #line 2332 "dhcp6_parser.cc" // lalr1.cc:859
  2024. break;
  2025. case 389:
  2026. #line 1400 "dhcp6_parser.yy" // lalr1.cc:859
  2027. {
  2028. ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  2029. ctx.stack_.back()->set("socket-name", name);
  2030. ctx.leave();
  2031. }
  2032. #line 2342 "dhcp6_parser.cc" // lalr1.cc:859
  2033. break;
  2034. case 390:
  2035. #line 1408 "dhcp6_parser.yy" // lalr1.cc:859
  2036. {
  2037. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  2038. ctx.stack_.back()->set("dhcp-ddns", m);
  2039. ctx.stack_.push_back(m);
  2040. ctx.enter(ctx.NO_KEYWORD);
  2041. }
  2042. #line 2353 "dhcp6_parser.cc" // lalr1.cc:859
  2043. break;
  2044. case 391:
  2045. #line 1413 "dhcp6_parser.yy" // lalr1.cc:859
  2046. {
  2047. ctx.stack_.pop_back();
  2048. ctx.leave();
  2049. }
  2050. #line 2362 "dhcp6_parser.cc" // lalr1.cc:859
  2051. break;
  2052. case 392:
  2053. #line 1420 "dhcp6_parser.yy" // lalr1.cc:859
  2054. {
  2055. ctx.enter(ctx.NO_KEYWORD);
  2056. }
  2057. #line 2370 "dhcp6_parser.cc" // lalr1.cc:859
  2058. break;
  2059. case 393:
  2060. #line 1422 "dhcp6_parser.yy" // lalr1.cc:859
  2061. {
  2062. ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
  2063. ctx.leave();
  2064. }
  2065. #line 2379 "dhcp6_parser.cc" // lalr1.cc:859
  2066. break;
  2067. case 394:
  2068. #line 1427 "dhcp6_parser.yy" // lalr1.cc:859
  2069. {
  2070. ctx.enter(ctx.NO_KEYWORD);
  2071. }
  2072. #line 2387 "dhcp6_parser.cc" // lalr1.cc:859
  2073. break;
  2074. case 395:
  2075. #line 1429 "dhcp6_parser.yy" // lalr1.cc:859
  2076. {
  2077. ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
  2078. ctx.leave();
  2079. }
  2080. #line 2396 "dhcp6_parser.cc" // lalr1.cc:859
  2081. break;
  2082. case 396:
  2083. #line 1439 "dhcp6_parser.yy" // lalr1.cc:859
  2084. {
  2085. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  2086. ctx.stack_.back()->set("Logging", m);
  2087. ctx.stack_.push_back(m);
  2088. ctx.enter(ctx.LOGGING);
  2089. }
  2090. #line 2407 "dhcp6_parser.cc" // lalr1.cc:859
  2091. break;
  2092. case 397:
  2093. #line 1444 "dhcp6_parser.yy" // lalr1.cc:859
  2094. {
  2095. ctx.stack_.pop_back();
  2096. ctx.leave();
  2097. }
  2098. #line 2416 "dhcp6_parser.cc" // lalr1.cc:859
  2099. break;
  2100. case 401:
  2101. #line 1461 "dhcp6_parser.yy" // lalr1.cc:859
  2102. {
  2103. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  2104. ctx.stack_.back()->set("loggers", l);
  2105. ctx.stack_.push_back(l);
  2106. ctx.enter(ctx.LOGGERS);
  2107. }
  2108. #line 2427 "dhcp6_parser.cc" // lalr1.cc:859
  2109. break;
  2110. case 402:
  2111. #line 1466 "dhcp6_parser.yy" // lalr1.cc:859
  2112. {
  2113. ctx.stack_.pop_back();
  2114. ctx.leave();
  2115. }
  2116. #line 2436 "dhcp6_parser.cc" // lalr1.cc:859
  2117. break;
  2118. case 405:
  2119. #line 1478 "dhcp6_parser.yy" // lalr1.cc:859
  2120. {
  2121. ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
  2122. ctx.stack_.back()->add(l);
  2123. ctx.stack_.push_back(l);
  2124. }
  2125. #line 2446 "dhcp6_parser.cc" // lalr1.cc:859
  2126. break;
  2127. case 406:
  2128. #line 1482 "dhcp6_parser.yy" // lalr1.cc:859
  2129. {
  2130. ctx.stack_.pop_back();
  2131. }
  2132. #line 2454 "dhcp6_parser.cc" // lalr1.cc:859
  2133. break;
  2134. case 414:
  2135. #line 1497 "dhcp6_parser.yy" // lalr1.cc:859
  2136. {
  2137. ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
  2138. ctx.stack_.back()->set("debuglevel", dl);
  2139. }
  2140. #line 2463 "dhcp6_parser.cc" // lalr1.cc:859
  2141. break;
  2142. case 415:
  2143. #line 1501 "dhcp6_parser.yy" // lalr1.cc:859
  2144. {
  2145. ctx.enter(ctx.NO_KEYWORD);
  2146. }
  2147. #line 2471 "dhcp6_parser.cc" // lalr1.cc:859
  2148. break;
  2149. case 416:
  2150. #line 1503 "dhcp6_parser.yy" // lalr1.cc:859
  2151. {
  2152. ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  2153. ctx.stack_.back()->set("severity", sev);
  2154. ctx.leave();
  2155. }
  2156. #line 2481 "dhcp6_parser.cc" // lalr1.cc:859
  2157. break;
  2158. case 417:
  2159. #line 1509 "dhcp6_parser.yy" // lalr1.cc:859
  2160. {
  2161. ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
  2162. ctx.stack_.back()->set("output_options", l);
  2163. ctx.stack_.push_back(l);
  2164. ctx.enter(ctx.OUTPUT_OPTIONS);
  2165. }
  2166. #line 2492 "dhcp6_parser.cc" // lalr1.cc:859
  2167. break;
  2168. case 418:
  2169. #line 1514 "dhcp6_parser.yy" // lalr1.cc:859
  2170. {
  2171. ctx.stack_.pop_back();
  2172. ctx.leave();
  2173. }
  2174. #line 2501 "dhcp6_parser.cc" // lalr1.cc:859
  2175. break;
  2176. case 421:
  2177. #line 1523 "dhcp6_parser.yy" // lalr1.cc:859
  2178. {
  2179. ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
  2180. ctx.stack_.back()->add(m);
  2181. ctx.stack_.push_back(m);
  2182. }
  2183. #line 2511 "dhcp6_parser.cc" // lalr1.cc:859
  2184. break;
  2185. case 422:
  2186. #line 1527 "dhcp6_parser.yy" // lalr1.cc:859
  2187. {
  2188. ctx.stack_.pop_back();
  2189. }
  2190. #line 2519 "dhcp6_parser.cc" // lalr1.cc:859
  2191. break;
  2192. case 425:
  2193. #line 1535 "dhcp6_parser.yy" // lalr1.cc:859
  2194. {
  2195. ctx.enter(ctx.NO_KEYWORD);
  2196. }
  2197. #line 2527 "dhcp6_parser.cc" // lalr1.cc:859
  2198. break;
  2199. case 426:
  2200. #line 1537 "dhcp6_parser.yy" // lalr1.cc:859
  2201. {
  2202. ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
  2203. ctx.stack_.back()->set("output", sev);
  2204. ctx.leave();
  2205. }
  2206. #line 2537 "dhcp6_parser.cc" // lalr1.cc:859
  2207. break;
  2208. #line 2541 "dhcp6_parser.cc" // lalr1.cc:859
  2209. default:
  2210. break;
  2211. }
  2212. }
  2213. catch (const syntax_error& yyexc)
  2214. {
  2215. error (yyexc);
  2216. YYERROR;
  2217. }
  2218. YY_SYMBOL_PRINT ("-> $$ =", yylhs);
  2219. yypop_ (yylen);
  2220. yylen = 0;
  2221. YY_STACK_PRINT ();
  2222. // Shift the result of the reduction.
  2223. yypush_ (YY_NULLPTR, yylhs);
  2224. }
  2225. goto yynewstate;
  2226. /*--------------------------------------.
  2227. | yyerrlab -- here on detecting error. |
  2228. `--------------------------------------*/
  2229. yyerrlab:
  2230. // If not already recovering from an error, report this error.
  2231. if (!yyerrstatus_)
  2232. {
  2233. ++yynerrs_;
  2234. error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla));
  2235. }
  2236. yyerror_range[1].location = yyla.location;
  2237. if (yyerrstatus_ == 3)
  2238. {
  2239. /* If just tried and failed to reuse lookahead token after an
  2240. error, discard it. */
  2241. // Return failure if at end of input.
  2242. if (yyla.type_get () == yyeof_)
  2243. YYABORT;
  2244. else if (!yyla.empty ())
  2245. {
  2246. yy_destroy_ ("Error: discarding", yyla);
  2247. yyla.clear ();
  2248. }
  2249. }
  2250. // Else will try to reuse lookahead token after shifting the error token.
  2251. goto yyerrlab1;
  2252. /*---------------------------------------------------.
  2253. | yyerrorlab -- error raised explicitly by YYERROR. |
  2254. `---------------------------------------------------*/
  2255. yyerrorlab:
  2256. /* Pacify compilers like GCC when the user code never invokes
  2257. YYERROR and the label yyerrorlab therefore never appears in user
  2258. code. */
  2259. if (false)
  2260. goto yyerrorlab;
  2261. yyerror_range[1].location = yystack_[yylen - 1].location;
  2262. /* Do not reclaim the symbols of the rule whose action triggered
  2263. this YYERROR. */
  2264. yypop_ (yylen);
  2265. yylen = 0;
  2266. goto yyerrlab1;
  2267. /*-------------------------------------------------------------.
  2268. | yyerrlab1 -- common code for both syntax error and YYERROR. |
  2269. `-------------------------------------------------------------*/
  2270. yyerrlab1:
  2271. yyerrstatus_ = 3; // Each real token shifted decrements this.
  2272. {
  2273. stack_symbol_type error_token;
  2274. for (;;)
  2275. {
  2276. yyn = yypact_[yystack_[0].state];
  2277. if (!yy_pact_value_is_default_ (yyn))
  2278. {
  2279. yyn += yyterror_;
  2280. if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
  2281. {
  2282. yyn = yytable_[yyn];
  2283. if (0 < yyn)
  2284. break;
  2285. }
  2286. }
  2287. // Pop the current state because it cannot handle the error token.
  2288. if (yystack_.size () == 1)
  2289. YYABORT;
  2290. yyerror_range[1].location = yystack_[0].location;
  2291. yy_destroy_ ("Error: popping", yystack_[0]);
  2292. yypop_ ();
  2293. YY_STACK_PRINT ();
  2294. }
  2295. yyerror_range[2].location = yyla.location;
  2296. YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
  2297. // Shift the error token.
  2298. error_token.state = yyn;
  2299. yypush_ ("Shifting", error_token);
  2300. }
  2301. goto yynewstate;
  2302. // Accept.
  2303. yyacceptlab:
  2304. yyresult = 0;
  2305. goto yyreturn;
  2306. // Abort.
  2307. yyabortlab:
  2308. yyresult = 1;
  2309. goto yyreturn;
  2310. yyreturn:
  2311. if (!yyla.empty ())
  2312. yy_destroy_ ("Cleanup: discarding lookahead", yyla);
  2313. /* Do not reclaim the symbols of the rule whose action triggered
  2314. this YYABORT or YYACCEPT. */
  2315. yypop_ (yylen);
  2316. while (1 < yystack_.size ())
  2317. {
  2318. yy_destroy_ ("Cleanup: popping", yystack_[0]);
  2319. yypop_ ();
  2320. }
  2321. return yyresult;
  2322. }
  2323. catch (...)
  2324. {
  2325. YYCDEBUG << "Exception caught: cleaning lookahead and stack"
  2326. << std::endl;
  2327. // Do not try to display the values of the reclaimed symbols,
  2328. // as their printer might throw an exception.
  2329. if (!yyla.empty ())
  2330. yy_destroy_ (YY_NULLPTR, yyla);
  2331. while (1 < yystack_.size ())
  2332. {
  2333. yy_destroy_ (YY_NULLPTR, yystack_[0]);
  2334. yypop_ ();
  2335. }
  2336. throw;
  2337. }
  2338. }
  2339. void
  2340. Dhcp6Parser::error (const syntax_error& yyexc)
  2341. {
  2342. error (yyexc.location, yyexc.what());
  2343. }
  2344. // Generate an error message.
  2345. std::string
  2346. Dhcp6Parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
  2347. {
  2348. // Number of reported tokens (one for the "unexpected", one per
  2349. // "expected").
  2350. size_t yycount = 0;
  2351. // Its maximum.
  2352. enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
  2353. // Arguments of yyformat.
  2354. char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
  2355. /* There are many possibilities here to consider:
  2356. - If this state is a consistent state with a default action, then
  2357. the only way this function was invoked is if the default action
  2358. is an error action. In that case, don't check for expected
  2359. tokens because there are none.
  2360. - The only way there can be no lookahead present (in yyla) is
  2361. if this state is a consistent state with a default action.
  2362. Thus, detecting the absence of a lookahead is sufficient to
  2363. determine that there is no unexpected or expected token to
  2364. report. In that case, just report a simple "syntax error".
  2365. - Don't assume there isn't a lookahead just because this state is
  2366. a consistent state with a default action. There might have
  2367. been a previous inconsistent state, consistent state with a
  2368. non-default action, or user semantic action that manipulated
  2369. yyla. (However, yyla is currently not documented for users.)
  2370. - Of course, the expected token list depends on states to have
  2371. correct lookahead information, and it depends on the parser not
  2372. to perform extra reductions after fetching a lookahead from the
  2373. scanner and before detecting a syntax error. Thus, state
  2374. merging (from LALR or IELR) and default reductions corrupt the
  2375. expected token list. However, the list is correct for
  2376. canonical LR with one exception: it will still contain any
  2377. token that will not be accepted due to an error action in a
  2378. later state.
  2379. */
  2380. if (!yyla.empty ())
  2381. {
  2382. int yytoken = yyla.type_get ();
  2383. yyarg[yycount++] = yytname_[yytoken];
  2384. int yyn = yypact_[yystate];
  2385. if (!yy_pact_value_is_default_ (yyn))
  2386. {
  2387. /* Start YYX at -YYN if negative to avoid negative indexes in
  2388. YYCHECK. In other words, skip the first -YYN actions for
  2389. this state because they are default actions. */
  2390. int yyxbegin = yyn < 0 ? -yyn : 0;
  2391. // Stay within bounds of both yycheck and yytname.
  2392. int yychecklim = yylast_ - yyn + 1;
  2393. int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
  2394. for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
  2395. if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
  2396. && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
  2397. {
  2398. if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
  2399. {
  2400. yycount = 1;
  2401. break;
  2402. }
  2403. else
  2404. yyarg[yycount++] = yytname_[yyx];
  2405. }
  2406. }
  2407. }
  2408. char const* yyformat = YY_NULLPTR;
  2409. switch (yycount)
  2410. {
  2411. #define YYCASE_(N, S) \
  2412. case N: \
  2413. yyformat = S; \
  2414. break
  2415. YYCASE_(0, YY_("syntax error"));
  2416. YYCASE_(1, YY_("syntax error, unexpected %s"));
  2417. YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
  2418. YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
  2419. YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
  2420. YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
  2421. #undef YYCASE_
  2422. }
  2423. std::string yyres;
  2424. // Argument number.
  2425. size_t yyi = 0;
  2426. for (char const* yyp = yyformat; *yyp; ++yyp)
  2427. if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
  2428. {
  2429. yyres += yytnamerr_ (yyarg[yyi++]);
  2430. ++yyp;
  2431. }
  2432. else
  2433. yyres += *yyp;
  2434. return yyres;
  2435. }
  2436. const short int Dhcp6Parser::yypact_ninf_ = -428;
  2437. const signed char Dhcp6Parser::yytable_ninf_ = -1;
  2438. const short int
  2439. Dhcp6Parser::yypact_[] =
  2440. {
  2441. 110, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2442. -428, -428, 28, 22, 34, 47, 51, 60, 63, 67,
  2443. 87, 106, 119, 128, -428, -428, -428, -428, -428, -428,
  2444. -428, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2445. -428, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2446. -428, -428, -428, -428, -428, -428, 22, -1, 16, 64,
  2447. 150, 15, 56, 39, 91, 112, 2, 32, -428, 135,
  2448. 161, 170, 174, 181, -428, -428, -428, -428, 228, -428,
  2449. 68, -428, -428, -428, -428, -428, -428, -428, -428, 240,
  2450. 243, 254, 255, 257, -428, -428, -428, -428, -428, -428,
  2451. -428, -428, -428, -428, 260, -428, -428, -428, 129, -428,
  2452. -428, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2453. -428, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2454. -428, -428, 185, -428, -428, -428, -428, -428, -428, 261,
  2455. 262, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2456. 157, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2457. -428, -428, -428, -428, -428, -428, -428, 158, -428, -428,
  2458. -428, 264, -428, 265, 266, -428, -428, 167, -428, -428,
  2459. -428, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2460. -428, -428, 222, 268, -428, -428, -428, -428, -428, -428,
  2461. -428, -428, -428, 269, -428, -428, -428, 271, -428, -428,
  2462. -428, 270, 274, -428, -428, -428, -428, -428, -428, -428,
  2463. -428, -428, -428, -428, 275, -428, -428, -428, -428, 272,
  2464. 278, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2465. 168, -428, -428, -428, -428, 22, 22, -428, 183, 279,
  2466. 280, 281, 282, -428, 16, -428, 283, 284, 285, 172,
  2467. 190, 191, 192, 193, 290, 291, 292, 293, 294, 295,
  2468. 296, 297, 298, 299, 204, 301, 302, 64, -428, 303,
  2469. -428, 13, 304, 305, 306, 307, 308, 213, 212, 311,
  2470. 312, 313, 314, 15, -428, 315, 56, -428, 316, 221,
  2471. 318, 223, 224, 39, -428, 321, 322, 323, 324, 325,
  2472. 326, -428, 91, 327, 328, 235, 329, 330, 332, 238,
  2473. -428, 112, 333, 239, -428, 2, 338, 339, 38, -428,
  2474. -428, -428, 340, 341, 342, 22, 22, -428, 343, 344,
  2475. 347, -428, -428, -428, -428, -428, 350, 351, 352, 353,
  2476. 356, 357, 358, 359, 360, 361, -428, 362, 365, -428,
  2477. 356, -428, -428, -428, -428, 337, 363, -428, -428, -428,
  2478. 368, 369, 247, 248, 276, -428, -428, 277, 287, 373,
  2479. 372, -428, 288, -428, 289, -428, 300, -428, -428, -428,
  2480. 356, 356, 356, 309, 310, 317, -428, 319, 320, -428,
  2481. 331, 334, 335, -428, -428, 336, -428, -428, 345, 22,
  2482. -428, 22, 64, 346, -428, -428, 150, 30, 30, 374,
  2483. 375, 376, -2, -428, -428, 180, 50, 377, 348, 37,
  2484. 173, -1, -428, 385, -428, 13, 383, 384, -428, -428,
  2485. -428, -428, -428, 386, 355, -428, -428, -428, -428, -428,
  2486. -428, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2487. -428, -428, -428, 169, -428, 175, -428, -428, 387, -428,
  2488. -428, -428, 388, 390, 392, -428, 177, -428, -428, -428,
  2489. -428, -428, -428, -428, -428, -428, 178, -428, 391, 395,
  2490. -428, -428, 394, 398, -428, -428, 396, 400, -428, -428,
  2491. -428, 122, -428, -428, -428, 22, -428, -428, 188, -428,
  2492. -428, -428, 189, -428, 399, 401, -428, 402, 206, -428,
  2493. -428, 403, 406, 407, -428, -428, -428, 207, -428, -428,
  2494. -428, -428, -428, -428, -428, 209, -428, -428, -428, 210,
  2495. 349, -428, -428, 409, 410, -428, -428, 411, 418, -428,
  2496. -428, 416, 420, -428, -428, 417, -428, 422, 346, -428,
  2497. -428, 424, 425, 427, 263, 354, 364, 30, -428, -428,
  2498. 15, -428, 374, 112, -428, 375, 2, -428, 376, -2,
  2499. -428, 426, 180, -428, 50, -428, 32, -428, 377, 367,
  2500. 348, -428, 432, 370, 371, 378, 37, -428, 433, 434,
  2501. 173, -428, -428, -428, 56, -428, 383, 39, -428, 384,
  2502. 91, -428, 386, 435, -428, 419, -428, 366, 380, 381,
  2503. -428, -428, -428, -428, 216, -428, 437, -428, 438, -428,
  2504. -428, -428, -428, -428, 217, -428, -428, -428, 382, -428,
  2505. -428, -428, -428, 389, 393, -428, 218, -428, 219, -428,
  2506. 441, -428, 397, 436, -428, -428, -428, -428, -428, -428,
  2507. -428, -428, -428, -428, -428, -428, -428, -428, -428, 233,
  2508. -428, 74, 436, -428, -428, 446, -428, -428, -428, 225,
  2509. -428, -428, -428, -428, -428, 447, 404, 448, 74, -428,
  2510. 450, -428, 408, -428, 449, -428, -428, 234, -428, 379,
  2511. 449, -428, -428, 226, -428, -428, 453, 379, -428, 414,
  2512. -428, -428
  2513. };
  2514. const unsigned short int
  2515. Dhcp6Parser::yydefact_[] =
  2516. {
  2517. 0, 2, 4, 6, 8, 10, 12, 14, 16, 18,
  2518. 20, 22, 0, 0, 0, 0, 0, 0, 0, 0,
  2519. 0, 0, 0, 0, 1, 38, 32, 28, 27, 24,
  2520. 25, 26, 31, 3, 29, 30, 47, 5, 58, 7,
  2521. 91, 9, 172, 11, 273, 13, 290, 15, 316, 17,
  2522. 213, 19, 247, 21, 148, 23, 42, 34, 0, 0,
  2523. 0, 0, 0, 0, 318, 215, 249, 0, 44, 0,
  2524. 43, 0, 0, 35, 56, 396, 392, 394, 0, 55,
  2525. 0, 49, 51, 53, 54, 52, 89, 95, 97, 0,
  2526. 0, 0, 0, 0, 164, 205, 239, 123, 138, 131,
  2527. 346, 140, 159, 363, 0, 380, 390, 83, 0, 60,
  2528. 62, 63, 64, 65, 66, 68, 69, 70, 71, 73,
  2529. 72, 77, 78, 67, 75, 76, 74, 79, 80, 81,
  2530. 82, 93, 0, 350, 265, 282, 193, 195, 197, 0,
  2531. 0, 201, 199, 308, 342, 192, 176, 177, 178, 179,
  2532. 0, 174, 183, 184, 185, 188, 190, 186, 187, 180,
  2533. 181, 182, 189, 191, 280, 279, 278, 0, 275, 277,
  2534. 301, 0, 304, 0, 0, 300, 297, 0, 292, 294,
  2535. 295, 298, 299, 296, 340, 330, 332, 334, 336, 338,
  2536. 329, 328, 0, 319, 320, 324, 325, 322, 326, 327,
  2537. 323, 110, 118, 0, 233, 231, 236, 0, 226, 230,
  2538. 227, 0, 216, 217, 219, 229, 220, 221, 222, 235,
  2539. 223, 224, 225, 260, 0, 258, 259, 262, 263, 0,
  2540. 250, 251, 253, 254, 255, 256, 257, 155, 157, 152,
  2541. 0, 150, 153, 154, 39, 0, 0, 33, 0, 0,
  2542. 0, 0, 0, 46, 0, 48, 0, 0, 0, 0,
  2543. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2544. 0, 0, 0, 0, 0, 0, 0, 0, 59, 0,
  2545. 92, 352, 0, 0, 0, 0, 0, 0, 0, 0,
  2546. 0, 0, 0, 0, 173, 0, 0, 274, 0, 0,
  2547. 0, 0, 0, 0, 291, 0, 0, 0, 0, 0,
  2548. 0, 317, 0, 0, 0, 0, 0, 0, 0, 0,
  2549. 214, 0, 0, 0, 248, 0, 0, 0, 0, 149,
  2550. 45, 36, 0, 0, 0, 0, 0, 50, 0, 0,
  2551. 0, 84, 85, 86, 87, 88, 0, 0, 0, 0,
  2552. 0, 0, 0, 0, 0, 0, 379, 0, 0, 61,
  2553. 0, 361, 359, 360, 358, 0, 353, 354, 356, 357,
  2554. 0, 0, 0, 0, 0, 203, 204, 0, 0, 0,
  2555. 0, 175, 0, 276, 0, 303, 0, 306, 307, 293,
  2556. 0, 0, 0, 0, 0, 0, 321, 0, 0, 228,
  2557. 0, 0, 0, 238, 218, 0, 264, 252, 0, 0,
  2558. 151, 0, 0, 0, 393, 395, 0, 0, 0, 166,
  2559. 207, 241, 0, 40, 139, 0, 0, 142, 0, 0,
  2560. 0, 0, 94, 0, 351, 0, 267, 284, 194, 196,
  2561. 198, 202, 200, 310, 0, 281, 302, 305, 341, 331,
  2562. 333, 335, 337, 339, 111, 119, 234, 232, 237, 261,
  2563. 156, 158, 37, 0, 401, 0, 398, 400, 0, 112,
  2564. 114, 116, 0, 0, 0, 109, 0, 99, 101, 102,
  2565. 103, 104, 105, 106, 107, 108, 0, 170, 0, 167,
  2566. 168, 211, 0, 208, 209, 245, 0, 242, 243, 129,
  2567. 130, 0, 125, 127, 128, 42, 137, 135, 0, 133,
  2568. 136, 348, 0, 146, 0, 143, 144, 0, 0, 161,
  2569. 375, 0, 0, 0, 373, 367, 372, 0, 365, 370,
  2570. 368, 369, 371, 386, 388, 0, 382, 384, 385, 0,
  2571. 0, 355, 271, 0, 268, 269, 288, 0, 285, 286,
  2572. 314, 0, 311, 312, 344, 0, 57, 0, 0, 397,
  2573. 90, 0, 0, 0, 0, 0, 0, 0, 96, 98,
  2574. 0, 165, 0, 215, 206, 0, 249, 240, 0, 0,
  2575. 124, 0, 0, 132, 0, 347, 0, 141, 0, 0,
  2576. 0, 160, 0, 0, 0, 0, 0, 364, 0, 0,
  2577. 0, 381, 391, 362, 0, 266, 0, 0, 283, 0,
  2578. 318, 309, 0, 0, 343, 0, 399, 0, 0, 0,
  2579. 120, 121, 122, 100, 0, 169, 0, 210, 0, 244,
  2580. 126, 41, 134, 349, 0, 145, 163, 162, 0, 374,
  2581. 377, 378, 366, 0, 0, 383, 0, 270, 0, 287,
  2582. 0, 313, 0, 0, 113, 115, 117, 171, 212, 246,
  2583. 147, 376, 387, 389, 272, 289, 315, 345, 405, 0,
  2584. 403, 0, 0, 402, 417, 0, 415, 413, 409, 0,
  2585. 407, 411, 412, 410, 404, 0, 0, 0, 0, 406,
  2586. 0, 414, 0, 408, 0, 416, 421, 0, 419, 0,
  2587. 0, 418, 425, 0, 423, 420, 0, 0, 422, 0,
  2588. 424, 426
  2589. };
  2590. const short int
  2591. Dhcp6Parser::yypgoto_[] =
  2592. {
  2593. -428, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2594. -428, -428, -428, 3, -428, -428, -428, -428, 9, -428,
  2595. -428, -203, -428, -125, -428, -58, -428, -428, -428, 187,
  2596. -428, -428, -428, -428, 41, 165, -41, -38, -37, -36,
  2597. -428, -428, -428, -428, -428, 42, -428, -428, -428, -428,
  2598. -428, 43, -108, -399, -428, -428, -428, -428, -428, -428,
  2599. -428, -65, -428, -427, -428, -428, -428, -428, -428, -119,
  2600. -415, -428, -428, -428, -428, -118, -428, -428, -428, -428,
  2601. -428, -428, -428, -120, -428, -428, -428, -123, 141, -428,
  2602. -428, -428, -428, -428, -428, -428, -117, -428, -428, -428,
  2603. -428, -100, -428, -428, -428, -96, 182, -428, -428, -428,
  2604. -428, -428, -428, -405, -428, -428, -428, -428, -428, -428,
  2605. -428, -428, -428, -99, -428, -428, -428, -91, -428, 156,
  2606. -428, -51, -428, -428, -428, -428, -49, -428, -428, -428,
  2607. -428, -428, -50, -428, -428, -428, -95, -428, -428, -428,
  2608. -92, -428, 160, -428, -428, -428, -428, -428, -428, -428,
  2609. -428, -428, -428, -116, -428, -428, -428, -115, 195, -428,
  2610. -428, -428, -428, -428, -428, -122, -428, -428, -428, -121,
  2611. 194, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2612. -428, -428, -114, -428, -428, -428, -111, -428, 196, -428,
  2613. -428, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2614. -428, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2615. -428, 58, -428, -428, -428, -428, -428, -428, -102, -428,
  2616. -428, -428, -428, -428, -428, -428, -428, -428, -105, -428,
  2617. -428, -428, -428, -428, -428, -428, -428, -428, -428, -428,
  2618. -428, -428, -57, -428, -428, -428, -172, -428, -428, -185,
  2619. -428, -428, -428, -428, -428, -428, -195, -428, -428, -201,
  2620. -428
  2621. };
  2622. const short int
  2623. Dhcp6Parser::yydefgoto_[] =
  2624. {
  2625. -1, 12, 13, 14, 15, 16, 17, 18, 19, 20,
  2626. 21, 22, 23, 68, 33, 34, 57, 72, 73, 35,
  2627. 56, 424, 505, 69, 70, 107, 37, 58, 80, 81,
  2628. 82, 249, 39, 59, 108, 109, 110, 111, 112, 113,
  2629. 114, 115, 256, 41, 60, 132, 279, 116, 257, 117,
  2630. 258, 476, 477, 209, 313, 479, 561, 480, 562, 481,
  2631. 563, 210, 314, 483, 484, 485, 118, 267, 501, 502,
  2632. 503, 504, 119, 269, 508, 509, 510, 120, 268, 121,
  2633. 271, 514, 515, 516, 586, 55, 67, 240, 241, 242,
  2634. 326, 243, 327, 122, 272, 518, 519, 123, 264, 488,
  2635. 489, 490, 570, 43, 61, 150, 151, 152, 284, 153,
  2636. 285, 154, 286, 155, 290, 156, 289, 157, 158, 124,
  2637. 265, 492, 493, 494, 573, 51, 65, 211, 212, 213,
  2638. 214, 215, 216, 217, 218, 317, 219, 316, 220, 221,
  2639. 318, 222, 125, 266, 496, 497, 498, 576, 53, 66,
  2640. 229, 230, 231, 232, 233, 322, 234, 235, 236, 160,
  2641. 282, 543, 544, 545, 604, 45, 62, 167, 168, 169,
  2642. 295, 161, 283, 547, 548, 549, 607, 47, 63, 177,
  2643. 178, 179, 298, 180, 181, 300, 182, 183, 162, 291,
  2644. 551, 552, 553, 610, 49, 64, 192, 193, 194, 195,
  2645. 306, 196, 307, 197, 308, 198, 309, 199, 310, 200,
  2646. 305, 163, 292, 555, 613, 126, 270, 512, 281, 365,
  2647. 366, 367, 368, 369, 433, 127, 273, 527, 528, 529,
  2648. 530, 592, 531, 532, 128, 129, 275, 535, 536, 537,
  2649. 598, 538, 599, 130, 276, 83, 251, 84, 252, 85,
  2650. 250, 465, 466, 467, 557, 669, 670, 671, 679, 680,
  2651. 681, 682, 687, 683, 685, 697, 698, 699, 703, 704,
  2652. 706
  2653. };
  2654. const unsigned short int
  2655. Dhcp6Parser::yytable_[] =
  2656. {
  2657. 79, 226, 526, 145, 165, 175, 190, 208, 225, 239,
  2658. 507, 159, 166, 176, 191, 227, 32, 228, 478, 478,
  2659. 146, 511, 133, 147, 148, 149, 74, 25, 24, 26,
  2660. 525, 27, 202, 223, 203, 204, 224, 89, 90, 91,
  2661. 92, 36, 96, 202, 96, 201, 469, 470, 471, 472,
  2662. 473, 474, 201, 134, 38, 135, 472, 133, 40, 499,
  2663. 202, 136, 137, 138, 139, 140, 141, 42, 96, 361,
  2664. 44, 254, 142, 143, 46, 86, 255, 87, 88, 144,
  2665. 170, 171, 172, 173, 174, 96, 89, 90, 91, 92,
  2666. 93, 94, 95, 96, 48, 164, 75, 500, 71, 237,
  2667. 238, 78, 76, 77, 202, 237, 238, 142, 520, 521,
  2668. 522, 523, 78, 50, 78, 78, 97, 98, 99, 100,
  2669. 96, 28, 29, 30, 31, 579, 52, 201, 580, 78,
  2670. 101, 78, 277, 102, 103, 54, 78, 278, 78, 104,
  2671. 105, 244, 202, 106, 203, 204, 184, 205, 206, 207,
  2672. 185, 186, 187, 188, 189, 78, 674, 432, 675, 676,
  2673. 293, 296, 131, 78, 245, 294, 297, 507, 478, 526,
  2674. 303, 328, 277, 78, 246, 304, 329, 556, 558, 633,
  2675. 567, 567, 247, 559, 248, 568, 569, 448, 449, 450,
  2676. 78, 582, 584, 280, 583, 585, 79, 525, 1, 2,
  2677. 3, 4, 5, 6, 7, 8, 9, 10, 11, 590,
  2678. 596, 78, 600, 248, 591, 597, 363, 601, 602, 293,
  2679. 328, 296, 303, 362, 657, 660, 664, 665, 688, 707,
  2680. 311, 364, 253, 689, 708, 145, 672, 700, 165, 673,
  2681. 701, 499, 506, 159, 259, 175, 166, 260, 330, 331,
  2682. 533, 534, 146, 176, 190, 147, 148, 149, 261, 262,
  2683. 226, 263, 191, 208, 274, 287, 288, 225, 299, 301,
  2684. 302, 312, 341, 315, 227, 319, 228, 321, 320, 323,
  2685. 324, 325, 332, 333, 334, 335, 336, 338, 339, 340,
  2686. 342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
  2687. 352, 353, 354, 355, 356, 357, 358, 360, 370, 371,
  2688. 372, 373, 374, 375, 376, 377, 378, 379, 380, 382,
  2689. 384, 385, 386, 387, 388, 390, 391, 392, 393, 394,
  2690. 395, 397, 398, 400, 401, 399, 402, 405, 414, 415,
  2691. 403, 406, 408, 409, 411, 434, 438, 439, 412, 413,
  2692. 416, 417, 482, 482, 418, 419, 420, 421, 422, 475,
  2693. 475, 423, 425, 426, 427, 620, 435, 428, 429, 430,
  2694. 363, 524, 431, 436, 437, 440, 441, 362, 443, 444,
  2695. 581, 487, 491, 495, 513, 364, 442, 445, 446, 540,
  2696. 542, 546, 564, 550, 565, 560, 566, 571, 572, 447,
  2697. 574, 575, 577, 578, 588, 587, 589, 593, 451, 452,
  2698. 594, 595, 461, 606, 462, 605, 453, 608, 454, 455,
  2699. 554, 609, 611, 612, 653, 614, 615, 464, 617, 618,
  2700. 456, 619, 631, 457, 458, 459, 638, 643, 644, 652,
  2701. 539, 337, 359, 668, 460, 658, 659, 517, 603, 666,
  2702. 686, 690, 692, 463, 621, 694, 696, 709, 468, 623,
  2703. 630, 486, 702, 634, 632, 654, 622, 636, 635, 410,
  2704. 639, 640, 625, 637, 624, 381, 627, 404, 641, 655,
  2705. 656, 661, 626, 629, 628, 407, 648, 649, 662, 646,
  2706. 647, 383, 663, 541, 642, 645, 667, 389, 651, 650,
  2707. 684, 616, 482, 693, 691, 705, 710, 695, 396, 475,
  2708. 0, 226, 145, 711, 0, 208, 0, 0, 225, 0,
  2709. 159, 0, 0, 0, 0, 227, 0, 228, 239, 146,
  2710. 0, 0, 147, 148, 149, 0, 0, 0, 524, 0,
  2711. 0, 0, 0, 0, 0, 0, 165, 0, 0, 175,
  2712. 0, 0, 190, 0, 166, 0, 0, 176, 0, 0,
  2713. 191, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2714. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2715. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2716. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2717. 0, 0, 0, 0, 0, 0, 678, 0, 0, 0,
  2718. 0, 0, 0, 677, 0, 0, 0, 0, 0, 0,
  2719. 0, 0, 0, 678, 0, 0, 0, 0, 0, 0,
  2720. 677
  2721. };
  2722. const short int
  2723. Dhcp6Parser::yycheck_[] =
  2724. {
  2725. 58, 66, 429, 61, 62, 63, 64, 65, 66, 67,
  2726. 425, 61, 62, 63, 64, 66, 13, 66, 417, 418,
  2727. 61, 426, 7, 61, 61, 61, 10, 5, 0, 7,
  2728. 429, 9, 30, 31, 32, 33, 34, 22, 23, 24,
  2729. 25, 7, 29, 30, 29, 15, 16, 17, 18, 19,
  2730. 20, 21, 15, 38, 7, 40, 19, 7, 7, 61,
  2731. 30, 46, 47, 48, 49, 50, 51, 7, 29, 56,
  2732. 7, 3, 57, 58, 7, 11, 8, 13, 14, 64,
  2733. 41, 42, 43, 44, 45, 29, 22, 23, 24, 25,
  2734. 26, 27, 28, 29, 7, 39, 80, 99, 99, 67,
  2735. 68, 99, 86, 87, 30, 67, 68, 57, 71, 72,
  2736. 73, 74, 99, 7, 99, 99, 52, 53, 54, 55,
  2737. 29, 99, 100, 101, 102, 3, 7, 15, 6, 99,
  2738. 66, 99, 3, 69, 70, 7, 99, 8, 99, 75,
  2739. 76, 6, 30, 79, 32, 33, 55, 35, 36, 37,
  2740. 59, 60, 61, 62, 63, 99, 82, 360, 84, 85,
  2741. 3, 3, 12, 99, 3, 8, 8, 582, 567, 596,
  2742. 3, 3, 3, 99, 4, 8, 8, 8, 3, 584,
  2743. 3, 3, 8, 8, 3, 8, 8, 390, 391, 392,
  2744. 99, 3, 3, 8, 6, 6, 254, 596, 88, 89,
  2745. 90, 91, 92, 93, 94, 95, 96, 97, 98, 3,
  2746. 3, 99, 3, 3, 8, 8, 281, 8, 8, 3,
  2747. 3, 3, 3, 281, 8, 8, 8, 8, 3, 3,
  2748. 8, 281, 4, 8, 8, 293, 3, 3, 296, 6,
  2749. 6, 61, 62, 293, 4, 303, 296, 4, 245, 246,
  2750. 77, 78, 293, 303, 312, 293, 293, 293, 4, 4,
  2751. 325, 4, 312, 321, 4, 4, 4, 325, 4, 4,
  2752. 4, 3, 100, 4, 325, 4, 325, 3, 8, 4,
  2753. 8, 3, 99, 4, 4, 4, 4, 4, 4, 4,
  2754. 100, 100, 100, 100, 4, 4, 4, 4, 4, 4,
  2755. 4, 4, 4, 4, 100, 4, 4, 4, 4, 4,
  2756. 4, 4, 4, 100, 102, 4, 4, 4, 4, 4,
  2757. 4, 100, 4, 100, 100, 4, 4, 4, 4, 4,
  2758. 4, 4, 4, 4, 4, 100, 4, 4, 335, 336,
  2759. 102, 102, 4, 4, 4, 8, 99, 99, 7, 7,
  2760. 7, 7, 417, 418, 7, 5, 5, 5, 5, 417,
  2761. 418, 5, 5, 5, 5, 102, 3, 7, 7, 7,
  2762. 435, 429, 7, 5, 5, 99, 99, 435, 5, 7,
  2763. 505, 7, 7, 7, 7, 435, 99, 99, 99, 4,
  2764. 7, 7, 4, 7, 4, 8, 4, 6, 3, 99,
  2765. 6, 3, 6, 3, 3, 6, 4, 4, 99, 99,
  2766. 4, 4, 409, 3, 411, 6, 99, 6, 99, 99,
  2767. 65, 3, 6, 3, 5, 8, 4, 81, 4, 4,
  2768. 99, 4, 6, 99, 99, 99, 4, 4, 4, 4,
  2769. 431, 254, 277, 7, 99, 8, 8, 99, 99, 8,
  2770. 4, 4, 4, 412, 100, 5, 7, 4, 416, 567,
  2771. 579, 418, 83, 586, 582, 99, 102, 100, 588, 328,
  2772. 100, 100, 572, 590, 570, 293, 575, 321, 100, 99,
  2773. 99, 99, 573, 578, 576, 325, 607, 609, 99, 604,
  2774. 606, 296, 99, 435, 596, 600, 99, 303, 612, 610,
  2775. 672, 558, 567, 688, 100, 700, 707, 99, 312, 567,
  2776. -1, 576, 570, 99, -1, 573, -1, -1, 576, -1,
  2777. 570, -1, -1, -1, -1, 576, -1, 576, 586, 570,
  2778. -1, -1, 570, 570, 570, -1, -1, -1, 596, -1,
  2779. -1, -1, -1, -1, -1, -1, 604, -1, -1, 607,
  2780. -1, -1, 610, -1, 604, -1, -1, 607, -1, -1,
  2781. 610, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2782. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2783. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2784. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2785. -1, -1, -1, -1, -1, -1, 671, -1, -1, -1,
  2786. -1, -1, -1, 671, -1, -1, -1, -1, -1, -1,
  2787. -1, -1, -1, 688, -1, -1, -1, -1, -1, -1,
  2788. 688
  2789. };
  2790. const unsigned short int
  2791. Dhcp6Parser::yystos_[] =
  2792. {
  2793. 0, 88, 89, 90, 91, 92, 93, 94, 95, 96,
  2794. 97, 98, 104, 105, 106, 107, 108, 109, 110, 111,
  2795. 112, 113, 114, 115, 0, 5, 7, 9, 99, 100,
  2796. 101, 102, 116, 117, 118, 122, 7, 129, 7, 135,
  2797. 7, 146, 7, 206, 7, 268, 7, 280, 7, 297,
  2798. 7, 228, 7, 251, 7, 188, 123, 119, 130, 136,
  2799. 147, 207, 269, 281, 298, 229, 252, 189, 116, 126,
  2800. 127, 99, 120, 121, 10, 80, 86, 87, 99, 128,
  2801. 131, 132, 133, 348, 350, 352, 11, 13, 14, 22,
  2802. 23, 24, 25, 26, 27, 28, 29, 52, 53, 54,
  2803. 55, 66, 69, 70, 75, 76, 79, 128, 137, 138,
  2804. 139, 140, 141, 142, 143, 144, 150, 152, 169, 175,
  2805. 180, 182, 196, 200, 222, 245, 318, 328, 337, 338,
  2806. 346, 12, 148, 7, 38, 40, 46, 47, 48, 49,
  2807. 50, 51, 57, 58, 64, 128, 139, 140, 141, 142,
  2808. 208, 209, 210, 212, 214, 216, 218, 220, 221, 245,
  2809. 262, 274, 291, 314, 39, 128, 245, 270, 271, 272,
  2810. 41, 42, 43, 44, 45, 128, 245, 282, 283, 284,
  2811. 286, 287, 289, 290, 55, 59, 60, 61, 62, 63,
  2812. 128, 245, 299, 300, 301, 302, 304, 306, 308, 310,
  2813. 312, 15, 30, 32, 33, 35, 36, 37, 128, 156,
  2814. 164, 230, 231, 232, 233, 234, 235, 236, 237, 239,
  2815. 241, 242, 244, 31, 34, 128, 164, 234, 239, 253,
  2816. 254, 255, 256, 257, 259, 260, 261, 67, 68, 128,
  2817. 190, 191, 192, 194, 6, 3, 4, 8, 3, 134,
  2818. 353, 349, 351, 4, 3, 8, 145, 151, 153, 4,
  2819. 4, 4, 4, 4, 201, 223, 246, 170, 181, 176,
  2820. 319, 183, 197, 329, 4, 339, 347, 3, 8, 149,
  2821. 8, 321, 263, 275, 211, 213, 215, 4, 4, 219,
  2822. 217, 292, 315, 3, 8, 273, 3, 8, 285, 4,
  2823. 288, 4, 4, 3, 8, 313, 303, 305, 307, 309,
  2824. 311, 8, 3, 157, 165, 4, 240, 238, 243, 4,
  2825. 8, 3, 258, 4, 8, 3, 193, 195, 3, 8,
  2826. 116, 116, 99, 4, 4, 4, 4, 132, 4, 4,
  2827. 4, 100, 100, 100, 100, 100, 4, 4, 4, 4,
  2828. 4, 4, 4, 4, 4, 4, 100, 4, 4, 138,
  2829. 4, 56, 128, 164, 245, 322, 323, 324, 325, 326,
  2830. 4, 4, 4, 4, 4, 100, 102, 4, 4, 4,
  2831. 4, 209, 4, 271, 4, 100, 4, 100, 100, 283,
  2832. 4, 4, 4, 4, 4, 4, 301, 4, 4, 100,
  2833. 4, 4, 4, 102, 232, 4, 102, 255, 4, 4,
  2834. 191, 4, 7, 7, 116, 116, 7, 7, 7, 5,
  2835. 5, 5, 5, 5, 124, 5, 5, 5, 7, 7,
  2836. 7, 7, 124, 327, 8, 3, 5, 5, 99, 99,
  2837. 99, 99, 99, 5, 7, 99, 99, 99, 124, 124,
  2838. 124, 99, 99, 99, 99, 99, 99, 99, 99, 99,
  2839. 99, 116, 116, 137, 81, 354, 355, 356, 148, 16,
  2840. 17, 18, 19, 20, 21, 128, 154, 155, 156, 158,
  2841. 160, 162, 164, 166, 167, 168, 154, 7, 202, 203,
  2842. 204, 7, 224, 225, 226, 7, 247, 248, 249, 61,
  2843. 99, 171, 172, 173, 174, 125, 62, 173, 177, 178,
  2844. 179, 216, 320, 7, 184, 185, 186, 99, 198, 199,
  2845. 71, 72, 73, 74, 128, 156, 166, 330, 331, 332,
  2846. 333, 335, 336, 77, 78, 340, 341, 342, 344, 121,
  2847. 4, 324, 7, 264, 265, 266, 7, 276, 277, 278,
  2848. 7, 293, 294, 295, 65, 316, 8, 357, 3, 8,
  2849. 8, 159, 161, 163, 4, 4, 4, 3, 8, 8,
  2850. 205, 6, 3, 227, 6, 3, 250, 6, 3, 3,
  2851. 6, 126, 3, 6, 3, 6, 187, 6, 3, 4,
  2852. 3, 8, 334, 4, 4, 4, 3, 8, 343, 345,
  2853. 3, 8, 8, 99, 267, 6, 3, 279, 6, 3,
  2854. 296, 6, 3, 317, 8, 4, 355, 4, 4, 4,
  2855. 102, 100, 102, 155, 208, 204, 230, 226, 253, 249,
  2856. 172, 6, 178, 216, 190, 186, 100, 199, 4, 100,
  2857. 100, 100, 331, 4, 4, 341, 270, 266, 282, 278,
  2858. 299, 295, 4, 5, 99, 99, 99, 8, 8, 8,
  2859. 8, 99, 99, 99, 8, 8, 8, 99, 7, 358,
  2860. 359, 360, 3, 6, 82, 84, 85, 128, 164, 361,
  2861. 362, 363, 364, 366, 359, 367, 4, 365, 3, 8,
  2862. 4, 100, 4, 362, 5, 99, 7, 368, 369, 370,
  2863. 3, 6, 83, 371, 372, 369, 373, 3, 8, 4,
  2864. 372, 99
  2865. };
  2866. const unsigned short int
  2867. Dhcp6Parser::yyr1_[] =
  2868. {
  2869. 0, 103, 105, 104, 106, 104, 107, 104, 108, 104,
  2870. 109, 104, 110, 104, 111, 104, 112, 104, 113, 104,
  2871. 114, 104, 115, 104, 116, 116, 116, 116, 116, 116,
  2872. 116, 117, 119, 118, 120, 120, 121, 121, 123, 122,
  2873. 125, 124, 126, 126, 127, 127, 128, 130, 129, 131,
  2874. 131, 132, 132, 132, 132, 132, 134, 133, 136, 135,
  2875. 137, 137, 138, 138, 138, 138, 138, 138, 138, 138,
  2876. 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
  2877. 138, 138, 138, 138, 139, 140, 141, 142, 143, 145,
  2878. 144, 147, 146, 149, 148, 151, 150, 153, 152, 154,
  2879. 154, 155, 155, 155, 155, 155, 155, 155, 155, 155,
  2880. 157, 156, 159, 158, 161, 160, 163, 162, 165, 164,
  2881. 166, 167, 168, 170, 169, 171, 171, 172, 172, 173,
  2882. 174, 176, 175, 177, 177, 178, 178, 179, 181, 180,
  2883. 183, 182, 184, 184, 185, 185, 187, 186, 189, 188,
  2884. 190, 190, 190, 191, 191, 193, 192, 195, 194, 197,
  2885. 196, 198, 198, 199, 201, 200, 202, 202, 203, 203,
  2886. 205, 204, 207, 206, 208, 208, 209, 209, 209, 209,
  2887. 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
  2888. 209, 209, 209, 211, 210, 213, 212, 215, 214, 217,
  2889. 216, 219, 218, 220, 221, 223, 222, 224, 224, 225,
  2890. 225, 227, 226, 229, 228, 230, 230, 231, 231, 232,
  2891. 232, 232, 232, 232, 232, 232, 232, 233, 234, 235,
  2892. 236, 238, 237, 240, 239, 241, 243, 242, 244, 246,
  2893. 245, 247, 247, 248, 248, 250, 249, 252, 251, 253,
  2894. 253, 254, 254, 255, 255, 255, 255, 255, 255, 256,
  2895. 258, 257, 259, 260, 261, 263, 262, 264, 264, 265,
  2896. 265, 267, 266, 269, 268, 270, 270, 271, 271, 271,
  2897. 273, 272, 275, 274, 276, 276, 277, 277, 279, 278,
  2898. 281, 280, 282, 282, 283, 283, 283, 283, 283, 283,
  2899. 283, 285, 284, 286, 288, 287, 289, 290, 292, 291,
  2900. 293, 293, 294, 294, 296, 295, 298, 297, 299, 299,
  2901. 300, 300, 301, 301, 301, 301, 301, 301, 301, 301,
  2902. 303, 302, 305, 304, 307, 306, 309, 308, 311, 310,
  2903. 313, 312, 315, 314, 317, 316, 319, 318, 320, 320,
  2904. 321, 216, 322, 322, 323, 323, 324, 324, 324, 324,
  2905. 325, 327, 326, 329, 328, 330, 330, 331, 331, 331,
  2906. 331, 331, 331, 331, 332, 334, 333, 335, 336, 337,
  2907. 339, 338, 340, 340, 341, 341, 343, 342, 345, 344,
  2908. 347, 346, 349, 348, 351, 350, 353, 352, 354, 354,
  2909. 355, 357, 356, 358, 358, 360, 359, 361, 361, 362,
  2910. 362, 362, 362, 362, 363, 365, 364, 367, 366, 368,
  2911. 368, 370, 369, 371, 371, 373, 372
  2912. };
  2913. const unsigned char
  2914. Dhcp6Parser::yyr2_[] =
  2915. {
  2916. 0, 2, 0, 3, 0, 3, 0, 3, 0, 3,
  2917. 0, 3, 0, 3, 0, 3, 0, 3, 0, 3,
  2918. 0, 3, 0, 3, 1, 1, 1, 1, 1, 1,
  2919. 1, 1, 0, 4, 0, 1, 3, 5, 0, 4,
  2920. 0, 4, 0, 1, 1, 3, 2, 0, 4, 1,
  2921. 3, 1, 1, 1, 1, 1, 0, 6, 0, 4,
  2922. 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
  2923. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  2924. 1, 1, 1, 1, 3, 3, 3, 3, 3, 0,
  2925. 6, 0, 4, 0, 4, 0, 6, 0, 6, 1,
  2926. 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  2927. 0, 4, 0, 4, 0, 4, 0, 4, 0, 4,
  2928. 3, 3, 3, 0, 6, 1, 3, 1, 1, 1,
  2929. 1, 0, 6, 1, 3, 1, 1, 1, 0, 4,
  2930. 0, 6, 0, 1, 1, 3, 0, 4, 0, 4,
  2931. 1, 3, 1, 1, 1, 0, 4, 0, 4, 0,
  2932. 6, 1, 3, 3, 0, 6, 0, 1, 1, 3,
  2933. 0, 4, 0, 4, 1, 3, 1, 1, 1, 1,
  2934. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  2935. 1, 1, 1, 0, 4, 0, 4, 0, 4, 0,
  2936. 4, 0, 4, 3, 3, 0, 6, 0, 1, 1,
  2937. 3, 0, 4, 0, 4, 0, 1, 1, 3, 1,
  2938. 1, 1, 1, 1, 1, 1, 1, 1, 3, 1,
  2939. 1, 0, 4, 0, 4, 1, 0, 4, 3, 0,
  2940. 6, 0, 1, 1, 3, 0, 4, 0, 4, 0,
  2941. 1, 1, 3, 1, 1, 1, 1, 1, 1, 1,
  2942. 0, 4, 1, 1, 3, 0, 6, 0, 1, 1,
  2943. 3, 0, 4, 0, 4, 1, 3, 1, 1, 1,
  2944. 0, 4, 0, 6, 0, 1, 1, 3, 0, 4,
  2945. 0, 4, 1, 3, 1, 1, 1, 1, 1, 1,
  2946. 1, 0, 4, 3, 0, 4, 3, 3, 0, 6,
  2947. 0, 1, 1, 3, 0, 4, 0, 4, 0, 1,
  2948. 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
  2949. 0, 4, 0, 4, 0, 4, 0, 4, 0, 4,
  2950. 0, 4, 0, 6, 0, 4, 0, 6, 1, 3,
  2951. 0, 4, 0, 1, 1, 3, 1, 1, 1, 1,
  2952. 1, 0, 4, 0, 6, 1, 3, 1, 1, 1,
  2953. 1, 1, 1, 1, 3, 0, 4, 3, 3, 3,
  2954. 0, 6, 1, 3, 1, 1, 0, 4, 0, 4,
  2955. 0, 6, 0, 4, 0, 4, 0, 6, 1, 3,
  2956. 1, 0, 6, 1, 3, 0, 4, 1, 3, 1,
  2957. 1, 1, 1, 1, 3, 0, 4, 0, 6, 1,
  2958. 3, 0, 4, 1, 3, 0, 4
  2959. };
  2960. // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
  2961. // First, the terminals, then, starting at \a yyntokens_, nonterminals.
  2962. const char*
  2963. const Dhcp6Parser::yytname_[] =
  2964. {
  2965. "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"",
  2966. "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"",
  2967. "\"interfaces-config\"", "\"interfaces\"", "\"lease-database\"",
  2968. "\"hosts-database\"", "\"type\"", "\"user\"", "\"password\"", "\"host\"",
  2969. "\"persist\"", "\"lfc-interval\"", "\"readonly\"",
  2970. "\"preferred-lifetime\"", "\"valid-lifetime\"", "\"renew-timer\"",
  2971. "\"rebind-timer\"", "\"decline-probation-period\"", "\"subnet6\"",
  2972. "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"",
  2973. "\"space\"", "\"csv-format\"", "\"record-types\"", "\"encapsulate\"",
  2974. "\"array\"", "\"pools\"", "\"pool\"", "\"pd-pools\"", "\"prefix\"",
  2975. "\"prefix-len\"", "\"excluded-prefix\"", "\"excluded-prefix-len\"",
  2976. "\"delegated-len\"", "\"subnet\"", "\"interface\"", "\"interface-id\"",
  2977. "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", "\"mac-sources\"",
  2978. "\"relay-supplied-options\"", "\"host-reservation-identifiers\"",
  2979. "\"client-classes\"", "\"test\"", "\"client-class\"", "\"reservations\"",
  2980. "\"ip-addresses\"", "\"prefixes\"", "\"duid\"", "\"hw-address\"",
  2981. "\"hostname\"", "\"relay\"", "\"ip-address\"", "\"hooks-libraries\"",
  2982. "\"library\"", "\"parameters\"", "\"expired-leases-processing\"",
  2983. "\"server-id\"", "\"identifier\"", "\"htype\"", "\"time\"",
  2984. "\"enterprise-id\"", "\"dhcp4o6-port\"", "\"control-socket\"",
  2985. "\"socket-type\"", "\"socket-name\"", "\"dhcp-ddns\"", "\"Logging\"",
  2986. "\"loggers\"", "\"output_options\"", "\"output\"", "\"debuglevel\"",
  2987. "\"severity\"", "\"Dhcp4\"", "\"DhcpDdns\"", "TOPLEVEL_JSON",
  2988. "TOPLEVEL_DHCP6", "SUB_DHCP6", "SUB_INTERFACES6", "SUB_SUBNET6",
  2989. "SUB_POOL6", "SUB_PD_POOL", "SUB_RESERVATION", "SUB_OPTION_DEF",
  2990. "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", "\"constant string\"",
  2991. "\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start",
  2992. "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10",
  2993. "$@11", "value", "sub_json", "map2", "$@12", "map_content",
  2994. "not_empty_map", "list_generic", "$@13", "list2", "$@14", "list_content",
  2995. "not_empty_list", "unknown_map_entry", "syntax_map", "$@15",
  2996. "global_objects", "global_object", "dhcp6_object", "$@16", "sub_dhcp6",
  2997. "$@17", "global_params", "global_param", "preferred_lifetime",
  2998. "valid_lifetime", "renew_timer", "rebind_timer",
  2999. "decline_probation_period", "interfaces_config", "$@18",
  3000. "sub_interfaces6", "$@19", "interface_config_map", "$@20",
  3001. "lease_database", "$@21", "hosts_database", "$@22",
  3002. "database_map_params", "database_map_param", "type", "$@23", "user",
  3003. "$@24", "password", "$@25", "host", "$@26", "name", "$@27", "persist",
  3004. "lfc_interval", "readonly", "mac_sources", "$@28", "mac_sources_list",
  3005. "mac_sources_value", "duid_id", "string_id",
  3006. "host_reservation_identifiers", "$@29",
  3007. "host_reservation_identifiers_list", "host_reservation_identifier",
  3008. "hw_address_id", "relay_supplied_options", "$@30", "hooks_libraries",
  3009. "$@31", "hooks_libraries_list", "not_empty_hooks_libraries_list",
  3010. "hooks_library", "$@32", "sub_hooks_library", "$@33", "hooks_params",
  3011. "hooks_param", "library", "$@34", "parameters", "$@35",
  3012. "expired_leases_processing", "$@36", "expired_leases_params",
  3013. "expired_leases_param", "subnet6_list", "$@37", "subnet6_list_content",
  3014. "not_empty_subnet6_list", "subnet6", "$@38", "sub_subnet6", "$@39",
  3015. "subnet6_params", "subnet6_param", "subnet", "$@40", "interface", "$@41",
  3016. "interface_id", "$@42", "client_class", "$@43", "reservation_mode",
  3017. "$@44", "id", "rapid_commit", "option_def_list", "$@45",
  3018. "option_def_list_content", "not_empty_option_def_list",
  3019. "option_def_entry", "$@46", "sub_option_def", "$@47",
  3020. "option_def_params", "not_empty_option_def_params", "option_def_param",
  3021. "option_def_name", "code", "option_def_code", "option_def_type",
  3022. "option_def_record_types", "$@48", "space", "$@49", "option_def_space",
  3023. "option_def_encapsulate", "$@50", "option_def_array", "option_data_list",
  3024. "$@51", "option_data_list_content", "not_empty_option_data_list",
  3025. "option_data_entry", "$@52", "sub_option_data", "$@53",
  3026. "option_data_params", "not_empty_option_data_params",
  3027. "option_data_param", "option_data_name", "option_data_data", "$@54",
  3028. "option_data_code", "option_data_space", "option_data_csv_format",
  3029. "pools_list", "$@55", "pools_list_content", "not_empty_pools_list",
  3030. "pool_list_entry", "$@56", "sub_pool6", "$@57", "pool_params",
  3031. "pool_param", "pool_entry", "$@58", "pd_pools_list", "$@59",
  3032. "pd_pools_list_content", "not_empty_pd_pools_list", "pd_pool_entry",
  3033. "$@60", "sub_pd_pool", "$@61", "pd_pool_params", "pd_pool_param",
  3034. "pd_prefix", "$@62", "pd_prefix_len", "excluded_prefix", "$@63",
  3035. "excluded_prefix_len", "pd_delegated_len", "reservations", "$@64",
  3036. "reservations_list", "not_empty_reservations_list", "reservation",
  3037. "$@65", "sub_reservation", "$@66", "reservation_params",
  3038. "not_empty_reservation_params", "reservation_param", "ip_addresses",
  3039. "$@67", "prefixes", "$@68", "duid", "$@69", "hw_address", "$@70",
  3040. "hostname", "$@71", "reservation_client_classes", "$@72", "relay",
  3041. "$@73", "relay_map", "$@74", "client_classes", "$@75",
  3042. "client_classes_list", "$@76", "client_class_params",
  3043. "not_empty_client_class_params", "client_class_param",
  3044. "client_class_name", "client_class_test", "$@77", "server_id", "$@78",
  3045. "server_id_params", "server_id_param", "htype", "identifier", "$@79",
  3046. "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@80",
  3047. "control_socket_params", "control_socket_param", "socket_type", "$@81",
  3048. "socket_name", "$@82", "dhcp_ddns", "$@83", "dhcp4_json_object", "$@84",
  3049. "dhcpddns_json_object", "$@85", "logging_object", "$@86",
  3050. "logging_params", "logging_param", "loggers", "$@87", "loggers_entries",
  3051. "logger_entry", "$@88", "logger_params", "logger_param", "debuglevel",
  3052. "severity", "$@89", "output_options_list", "$@90",
  3053. "output_options_list_content", "output_entry", "$@91", "output_params",
  3054. "output_param", "$@92", YY_NULLPTR
  3055. };
  3056. #if PARSER6_DEBUG
  3057. const unsigned short int
  3058. Dhcp6Parser::yyrline_[] =
  3059. {
  3060. 0, 198, 198, 198, 199, 199, 200, 200, 201, 201,
  3061. 202, 202, 203, 203, 204, 204, 205, 205, 206, 206,
  3062. 207, 207, 208, 208, 216, 217, 218, 219, 220, 221,
  3063. 222, 225, 230, 230, 242, 243, 246, 250, 257, 257,
  3064. 265, 265, 272, 273, 276, 280, 291, 301, 301, 313,
  3065. 314, 318, 319, 320, 321, 322, 325, 325, 342, 342,
  3066. 350, 351, 356, 357, 358, 359, 360, 361, 362, 363,
  3067. 364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
  3068. 374, 375, 376, 377, 380, 385, 390, 395, 400, 405,
  3069. 405, 415, 415, 423, 423, 433, 433, 443, 443, 453,
  3070. 454, 457, 458, 459, 460, 461, 462, 463, 464, 465,
  3071. 468, 468, 476, 476, 484, 484, 492, 492, 500, 500,
  3072. 508, 513, 518, 523, 523, 533, 534, 537, 538, 541,
  3073. 546, 551, 551, 561, 562, 565, 566, 569, 574, 574,
  3074. 584, 584, 594, 595, 598, 599, 602, 602, 610, 610,
  3075. 618, 619, 620, 623, 624, 627, 627, 635, 635, 643,
  3076. 643, 653, 654, 660, 668, 668, 681, 682, 685, 686,
  3077. 693, 693, 716, 716, 725, 726, 730, 731, 732, 733,
  3078. 734, 735, 736, 737, 738, 739, 740, 741, 742, 743,
  3079. 744, 745, 746, 749, 749, 757, 757, 765, 765, 773,
  3080. 773, 781, 781, 789, 794, 803, 803, 815, 816, 819,
  3081. 820, 825, 825, 836, 836, 846, 847, 850, 851, 854,
  3082. 855, 856, 857, 858, 859, 860, 861, 864, 866, 871,
  3083. 873, 875, 875, 883, 883, 891, 893, 893, 901, 910,
  3084. 910, 922, 923, 928, 929, 934, 934, 945, 945, 956,
  3085. 957, 962, 963, 968, 969, 970, 971, 972, 973, 976,
  3086. 978, 978, 986, 988, 990, 998, 998, 1010, 1011, 1014,
  3087. 1015, 1018, 1018, 1026, 1026, 1034, 1035, 1038, 1039, 1040,
  3088. 1043, 1043, 1054, 1054, 1066, 1067, 1070, 1071, 1074, 1074,
  3089. 1082, 1082, 1090, 1091, 1094, 1095, 1096, 1097, 1098, 1099,
  3090. 1100, 1103, 1103, 1111, 1116, 1116, 1124, 1129, 1137, 1137,
  3091. 1147, 1148, 1151, 1152, 1155, 1155, 1163, 1163, 1171, 1172,
  3092. 1175, 1176, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187,
  3093. 1190, 1190, 1200, 1200, 1210, 1210, 1218, 1218, 1226, 1226,
  3094. 1234, 1234, 1247, 1247, 1257, 1257, 1268, 1268, 1278, 1279,
  3095. 1282, 1282, 1290, 1291, 1294, 1295, 1298, 1299, 1300, 1301,
  3096. 1304, 1306, 1306, 1317, 1317, 1327, 1328, 1331, 1332, 1333,
  3097. 1334, 1335, 1336, 1337, 1340, 1345, 1345, 1353, 1358, 1365,
  3098. 1372, 1372, 1382, 1383, 1386, 1387, 1390, 1390, 1398, 1398,
  3099. 1408, 1408, 1420, 1420, 1427, 1427, 1439, 1439, 1452, 1453,
  3100. 1457, 1461, 1461, 1473, 1474, 1478, 1478, 1486, 1487, 1490,
  3101. 1491, 1492, 1493, 1494, 1497, 1501, 1501, 1509, 1509, 1519,
  3102. 1520, 1523, 1523, 1531, 1532, 1535, 1535
  3103. };
  3104. // Print the state stack on the debug stream.
  3105. void
  3106. Dhcp6Parser::yystack_print_ ()
  3107. {
  3108. *yycdebug_ << "Stack now";
  3109. for (stack_type::const_iterator
  3110. i = yystack_.begin (),
  3111. i_end = yystack_.end ();
  3112. i != i_end; ++i)
  3113. *yycdebug_ << ' ' << i->state;
  3114. *yycdebug_ << std::endl;
  3115. }
  3116. // Report on the debug stream that the rule \a yyrule is going to be reduced.
  3117. void
  3118. Dhcp6Parser::yy_reduce_print_ (int yyrule)
  3119. {
  3120. unsigned int yylno = yyrline_[yyrule];
  3121. int yynrhs = yyr2_[yyrule];
  3122. // Print the symbols being reduced, and their result.
  3123. *yycdebug_ << "Reducing stack by rule " << yyrule - 1
  3124. << " (line " << yylno << "):" << std::endl;
  3125. // The symbols being reduced.
  3126. for (int yyi = 0; yyi < yynrhs; yyi++)
  3127. YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
  3128. yystack_[(yynrhs) - (yyi + 1)]);
  3129. }
  3130. #endif // PARSER6_DEBUG
  3131. #line 14 "dhcp6_parser.yy" // lalr1.cc:1167
  3132. } } // isc::dhcp
  3133. #line 3511 "dhcp6_parser.cc" // lalr1.cc:1167
  3134. #line 1543 "dhcp6_parser.yy" // lalr1.cc:1168
  3135. void
  3136. isc::dhcp::Dhcp6Parser::error(const location_type& loc,
  3137. const std::string& what)
  3138. {
  3139. ctx.error(loc, what);
  3140. }