From: Thomas Markwalder Date: Tue, 6 Nov 2018 16:22:57 +0000 (-0500) Subject: [#42, !103] General clean up X-Git-Tag: Kea-1.5.0-beta1~12^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c8f4dd4761b3b001963e8ee49f8da47998232e0;p=thirdparty%2Fkea.git [#42, !103] General clean up --- diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc index 2b9a294983..8740789766 100644 --- a/src/bin/dhcp6/dhcp6_parser.cc +++ b/src/bin/dhcp6/dhcp6_parser.cc @@ -3039,7 +3039,7 @@ namespace isc { namespace dhcp { break; case 552: -#line 1926 "dhcp6_parser.yy" // lalr1.cc:859 +#line 1928 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3047,7 +3047,7 @@ namespace isc { namespace dhcp { break; case 553: -#line 1928 "dhcp6_parser.yy" // lalr1.cc:859 +#line 1930 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr qc = yystack_[0].value.as< ElementPtr > (); ctx.stack_.back()->set("queue-control", qc); @@ -3065,7 +3065,7 @@ namespace isc { namespace dhcp { break; case 554: -#line 1944 "dhcp6_parser.yy" // lalr1.cc:859 +#line 1946 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp-ddns", m); @@ -3076,7 +3076,7 @@ namespace isc { namespace dhcp { break; case 555: -#line 1949 "dhcp6_parser.yy" // lalr1.cc:859 +#line 1951 "dhcp6_parser.yy" // lalr1.cc:859 { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); @@ -3087,7 +3087,7 @@ namespace isc { namespace dhcp { break; case 556: -#line 1956 "dhcp6_parser.yy" // lalr1.cc:859 +#line 1958 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3097,7 +3097,7 @@ namespace isc { namespace dhcp { break; case 557: -#line 1960 "dhcp6_parser.yy" // lalr1.cc:859 +#line 1962 "dhcp6_parser.yy" // lalr1.cc:859 { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3107,7 +3107,7 @@ namespace isc { namespace dhcp { break; case 579: -#line 1991 "dhcp6_parser.yy" // lalr1.cc:859 +#line 1993 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-updates", b); @@ -3116,7 +3116,7 @@ namespace isc { namespace dhcp { break; case 580: -#line 1996 "dhcp6_parser.yy" // lalr1.cc:859 +#line 1998 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3124,7 +3124,7 @@ namespace isc { namespace dhcp { break; case 581: -#line 1998 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2000 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("qualifying-suffix", s); @@ -3134,7 +3134,7 @@ namespace isc { namespace dhcp { break; case 582: -#line 2004 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2006 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3142,7 +3142,7 @@ namespace isc { namespace dhcp { break; case 583: -#line 2006 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2008 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-ip", s); @@ -3152,7 +3152,7 @@ namespace isc { namespace dhcp { break; case 584: -#line 2012 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2014 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-port", i); @@ -3161,7 +3161,7 @@ namespace isc { namespace dhcp { break; case 585: -#line 2017 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2019 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3169,7 +3169,7 @@ namespace isc { namespace dhcp { break; case 586: -#line 2019 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2021 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-ip", s); @@ -3179,7 +3179,7 @@ namespace isc { namespace dhcp { break; case 587: -#line 2025 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2027 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-port", i); @@ -3188,7 +3188,7 @@ namespace isc { namespace dhcp { break; case 588: -#line 2030 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2032 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-queue-size", i); @@ -3197,7 +3197,7 @@ namespace isc { namespace dhcp { break; case 589: -#line 2035 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2037 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NCR_PROTOCOL); } @@ -3205,7 +3205,7 @@ namespace isc { namespace dhcp { break; case 590: -#line 2037 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2039 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -3214,19 +3214,19 @@ namespace isc { namespace dhcp { break; case 591: -#line 2043 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2045 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } #line 3220 "dhcp6_parser.cc" // lalr1.cc:859 break; case 592: -#line 2044 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2046 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } #line 3226 "dhcp6_parser.cc" // lalr1.cc:859 break; case 593: -#line 2047 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2049 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NCR_FORMAT); } @@ -3234,7 +3234,7 @@ namespace isc { namespace dhcp { break; case 594: -#line 2049 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2051 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); @@ -3244,7 +3244,7 @@ namespace isc { namespace dhcp { break; case 595: -#line 2055 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2057 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-include-fqdn", b); @@ -3253,7 +3253,7 @@ namespace isc { namespace dhcp { break; case 596: -#line 2060 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2062 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-no-update", b); @@ -3262,7 +3262,7 @@ namespace isc { namespace dhcp { break; case 597: -#line 2065 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2067 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-client-update", b); @@ -3271,7 +3271,7 @@ namespace isc { namespace dhcp { break; case 598: -#line 2070 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2072 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.REPLACE_CLIENT_NAME); } @@ -3279,7 +3279,7 @@ namespace isc { namespace dhcp { break; case 599: -#line 2072 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2074 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -3288,7 +3288,7 @@ namespace isc { namespace dhcp { break; case 600: -#line 2078 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2080 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } @@ -3296,7 +3296,7 @@ namespace isc { namespace dhcp { break; case 601: -#line 2081 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2083 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } @@ -3304,7 +3304,7 @@ namespace isc { namespace dhcp { break; case 602: -#line 2084 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2086 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } @@ -3312,7 +3312,7 @@ namespace isc { namespace dhcp { break; case 603: -#line 2087 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2089 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } @@ -3320,7 +3320,7 @@ namespace isc { namespace dhcp { break; case 604: -#line 2090 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2092 "dhcp6_parser.yy" // lalr1.cc:859 { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); @@ -3329,7 +3329,7 @@ namespace isc { namespace dhcp { break; case 605: -#line 2096 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2098 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3337,7 +3337,7 @@ namespace isc { namespace dhcp { break; case 606: -#line 2098 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2100 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("generated-prefix", s); @@ -3347,7 +3347,7 @@ namespace isc { namespace dhcp { break; case 607: -#line 2104 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2106 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3355,7 +3355,7 @@ namespace isc { namespace dhcp { break; case 608: -#line 2106 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2108 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-set", s); @@ -3365,7 +3365,7 @@ namespace isc { namespace dhcp { break; case 609: -#line 2112 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2114 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3373,7 +3373,7 @@ namespace isc { namespace dhcp { break; case 610: -#line 2114 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2116 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-replacement", s); @@ -3383,7 +3383,7 @@ namespace isc { namespace dhcp { break; case 611: -#line 2122 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2124 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3391,7 +3391,7 @@ namespace isc { namespace dhcp { break; case 612: -#line 2124 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2126 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -3400,7 +3400,7 @@ namespace isc { namespace dhcp { break; case 613: -#line 2129 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2131 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3408,7 +3408,7 @@ namespace isc { namespace dhcp { break; case 614: -#line 2131 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2133 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -3417,7 +3417,7 @@ namespace isc { namespace dhcp { break; case 615: -#line 2136 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2138 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3425,7 +3425,7 @@ namespace isc { namespace dhcp { break; case 616: -#line 2138 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2140 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); @@ -3434,7 +3434,7 @@ namespace isc { namespace dhcp { break; case 617: -#line 2145 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2147 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -3444,7 +3444,7 @@ namespace isc { namespace dhcp { break; case 618: -#line 2149 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2151 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } @@ -3452,7 +3452,7 @@ namespace isc { namespace dhcp { break; case 619: -#line 2154 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2156 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("config-control", i); @@ -3463,7 +3463,7 @@ namespace isc { namespace dhcp { break; case 620: -#line 2159 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2161 "dhcp6_parser.yy" // lalr1.cc:859 { // No config control params are required ctx.stack_.pop_back(); @@ -3473,7 +3473,7 @@ namespace isc { namespace dhcp { break; case 621: -#line 2165 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2167 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the config-control map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3483,7 +3483,7 @@ namespace isc { namespace dhcp { break; case 622: -#line 2169 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2171 "dhcp6_parser.yy" // lalr1.cc:859 { // No config_control params are required // parsing completed @@ -3492,7 +3492,7 @@ namespace isc { namespace dhcp { break; case 627: -#line 2184 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2186 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("config-databases", l); @@ -3503,7 +3503,7 @@ namespace isc { namespace dhcp { break; case 628: -#line 2189 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2191 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -3512,7 +3512,7 @@ namespace isc { namespace dhcp { break; case 629: -#line 2199 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2201 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("Logging", m); @@ -3523,7 +3523,7 @@ namespace isc { namespace dhcp { break; case 630: -#line 2204 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2206 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -3532,7 +3532,7 @@ namespace isc { namespace dhcp { break; case 631: -#line 2209 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2211 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the Logging map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3542,7 +3542,7 @@ namespace isc { namespace dhcp { break; case 632: -#line 2213 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2215 "dhcp6_parser.yy" // lalr1.cc:859 { // parsing completed } @@ -3550,7 +3550,7 @@ namespace isc { namespace dhcp { break; case 636: -#line 2229 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2231 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("loggers", l); @@ -3561,7 +3561,7 @@ namespace isc { namespace dhcp { break; case 637: -#line 2234 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2236 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -3570,7 +3570,7 @@ namespace isc { namespace dhcp { break; case 640: -#line 2246 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2248 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); @@ -3580,7 +3580,7 @@ namespace isc { namespace dhcp { break; case 641: -#line 2250 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2252 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } @@ -3588,7 +3588,7 @@ namespace isc { namespace dhcp { break; case 651: -#line 2267 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2269 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); @@ -3597,7 +3597,7 @@ namespace isc { namespace dhcp { break; case 652: -#line 2272 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2274 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3605,7 +3605,7 @@ namespace isc { namespace dhcp { break; case 653: -#line 2274 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2276 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); @@ -3615,7 +3615,7 @@ namespace isc { namespace dhcp { break; case 654: -#line 2280 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2282 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output_options", l); @@ -3626,7 +3626,7 @@ namespace isc { namespace dhcp { break; case 655: -#line 2285 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2287 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); @@ -3635,7 +3635,7 @@ namespace isc { namespace dhcp { break; case 658: -#line 2294 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2296 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -3645,7 +3645,7 @@ namespace isc { namespace dhcp { break; case 659: -#line 2298 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2300 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } @@ -3653,7 +3653,7 @@ namespace isc { namespace dhcp { break; case 666: -#line 2312 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2314 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } @@ -3661,7 +3661,7 @@ namespace isc { namespace dhcp { break; case 667: -#line 2314 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2316 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); @@ -3671,7 +3671,7 @@ namespace isc { namespace dhcp { break; case 668: -#line 2320 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2322 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); @@ -3680,7 +3680,7 @@ namespace isc { namespace dhcp { break; case 669: -#line 2325 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2327 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); @@ -3689,7 +3689,7 @@ namespace isc { namespace dhcp { break; case 670: -#line 2330 "dhcp6_parser.yy" // lalr1.cc:859 +#line 2332 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); @@ -4963,19 +4963,19 @@ namespace isc { namespace dhcp { 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1845, 1845, 1852, 1853, 1854, 1857, 1862, 1862, 1870, 1875, 1882, 1889, 1889, 1899, 1900, 1903, 1904, 1905, 1906, 1907, 1910, 1910, - 1918, 1918, 1926, 1926, 1944, 1944, 1956, 1956, 1966, 1967, - 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, - 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1991, - 1996, 1996, 2004, 2004, 2012, 2017, 2017, 2025, 2030, 2035, - 2035, 2043, 2044, 2047, 2047, 2055, 2060, 2065, 2070, 2070, - 2078, 2081, 2084, 2087, 2090, 2096, 2096, 2104, 2104, 2112, - 2112, 2122, 2122, 2129, 2129, 2136, 2136, 2145, 2145, 2154, - 2154, 2165, 2165, 2175, 2176, 2180, 2181, 2184, 2184, 2199, - 2199, 2209, 2209, 2220, 2221, 2225, 2229, 2229, 2241, 2242, - 2246, 2246, 2254, 2255, 2258, 2259, 2260, 2261, 2262, 2263, - 2264, 2267, 2272, 2272, 2280, 2280, 2290, 2291, 2294, 2294, - 2302, 2303, 2306, 2307, 2308, 2309, 2312, 2312, 2320, 2325, - 2330 + 1918, 1918, 1928, 1928, 1946, 1946, 1958, 1958, 1968, 1969, + 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, + 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1993, + 1998, 1998, 2006, 2006, 2014, 2019, 2019, 2027, 2032, 2037, + 2037, 2045, 2046, 2049, 2049, 2057, 2062, 2067, 2072, 2072, + 2080, 2083, 2086, 2089, 2092, 2098, 2098, 2106, 2106, 2114, + 2114, 2124, 2124, 2131, 2131, 2138, 2138, 2147, 2147, 2156, + 2156, 2167, 2167, 2177, 2178, 2182, 2183, 2186, 2186, 2201, + 2201, 2211, 2211, 2222, 2223, 2227, 2231, 2231, 2243, 2244, + 2248, 2248, 2256, 2257, 2260, 2261, 2262, 2263, 2264, 2265, + 2266, 2269, 2274, 2274, 2282, 2282, 2292, 2293, 2296, 2296, + 2304, 2305, 2308, 2309, 2310, 2311, 2314, 2314, 2322, 2327, + 2332 }; // Print the state stack on the debug stream. @@ -5011,7 +5011,7 @@ namespace isc { namespace dhcp { #line 14 "dhcp6_parser.yy" // lalr1.cc:1167 } } // isc::dhcp #line 5014 "dhcp6_parser.cc" // lalr1.cc:1167 -#line 2335 "dhcp6_parser.yy" // lalr1.cc:1168 +#line 2337 "dhcp6_parser.yy" // lalr1.cc:1168 void diff --git a/src/lib/dhcp/iface_mgr.cc b/src/lib/dhcp/iface_mgr.cc index b924021c26..896a034e7b 100644 --- a/src/lib/dhcp/iface_mgr.cc +++ b/src/lib/dhcp/iface_mgr.cc @@ -296,13 +296,8 @@ void IfaceMgr::stopDHCPReceiver() { } receiver_error_ = "no error"; - /* if(getPacketQueue4())*/ { - getPacketQueue4()->clear(); - } - - /* if (getPacketQueue6()) */ { - getPacketQueue4()->clear(); - } + getPacketQueue4()->clear(); + getPacketQueue4()->clear(); } diff --git a/src/lib/dhcp/iface_mgr.h b/src/lib/dhcp/iface_mgr.h index 36e6440b81..c5648589a9 100644 --- a/src/lib/dhcp/iface_mgr.h +++ b/src/lib/dhcp/iface_mgr.h @@ -1035,9 +1035,9 @@ public: /// @brief DHCPv4 receiver packet queue. /// /// Incoming packets are read by the receiver thread and - /// added to this queue. @c receive4() dequeues and - /// returns them. - PacketQueue4Ptr getPacketQueue4() { + /// added to this queue. @c receive4() dequeues and + /// returns them. + PacketQueue4Ptr getPacketQueue4() { return (PacketQueueMgr4::instance().getPacketQueue()); } @@ -1060,8 +1060,7 @@ public: /// /// @throw Unexpected if the thread already exists. void startDHCPReceiver(const uint16_t family); - - /// @brief Stops the DHCP packet receiver. +/// @brief Stops the DHCP packet receiver. /// /// Stops the receiver and delete the dedicated thread. void stopDHCPReceiver(); @@ -1186,7 +1185,7 @@ private: /// Loops forever reading DHCPv4 packets from the interface sockets /// and adds them to the packet queue. It monitors the "terminate" /// watch socket, and exits if it is marked ready. This is method - /// is used as the worker function in the thread created by @c + /// is used as the worker function in the thread created by @c /// startDHCP4Receiver(). It currently uses select() to monitor /// socket readiness. If the select errors out (other than EINTR), /// it marks the "error" watch socket as ready. @@ -1195,11 +1194,11 @@ private: /// @brief Receives a single DHCPv4 packet from an interface socket /// /// Called by @c receiveDHPC4Packets when a socket fd is flagged as - /// ready. It uses the DHCPv4 packet filter to receive a single packet - /// from the given interface socket, adds it to the packet queue, and + /// ready. It uses the DHCPv4 packet filter to receive a single packet + /// from the given interface socket, adds it to the packet queue, and /// marks the "receive" watch socket ready. If an error occurs during /// the read, the "error" watch socket is marked ready. - /// + /// /// @param iface interface /// @param socket_info structure holding socket information void receiveDHCP4Packet(Iface& iface, const SocketInfo& socket_info); @@ -1209,7 +1208,7 @@ private: /// Loops forever reading DHCPv6 packets from the interface sockets /// and adds them to the packet queue. It monitors the "terminate" /// watch socket, and exits if it is marked ready. This is method - /// is used as the worker function in the thread created by @c + /// is used as the worker function in the thread created by @c /// startDHCP6Receiver(). It currently uses select() to monitor /// socket readiness. If the select errors out (other than EINTR), /// it marks the "error" watch socket as ready. @@ -1218,11 +1217,11 @@ private: /// @brief Receives a single DHCPv6 packet from an interface socket /// /// Called by @c receiveDHPC6Packets when a socket fd is flagged as - /// ready. It uses the DHCPv6 packet filter to receive a single packet - /// from the given interface socket, adds it to the packet queue, and + /// ready. It uses the DHCPv6 packet filter to receive a single packet + /// from the given interface socket, adds it to the packet queue, and /// marks the "receive" watch socket ready. If an error occurs during /// the read, the "error" watch socket is marked ready. - /// + /// /// @param iface interface /// @param socket_info structure holding socket information void receiveDHCP6Packet(const SocketInfo& socket_info); @@ -1256,7 +1255,7 @@ private: std::string receiver_error_; /// @brief DHCP packet receive error watch socket. - /// Marked as ready when the DHCP packet receiver experiences + /// Marked as ready when the DHCP packet receiver experiences /// an I/O error. isc::util::WatchSocket error_watch_; diff --git a/src/lib/dhcp/packet_queue.h b/src/lib/dhcp/packet_queue.h index fc127c7632..997efeefe2 100644 --- a/src/lib/dhcp/packet_queue.h +++ b/src/lib/dhcp/packet_queue.h @@ -36,17 +36,22 @@ enum class QueueEnd { }; /// @brief Interface for managing a queue of inbound DHCP packets -template +/// +/// This class serves as the abstract interface for packet queue +/// implementations which may be used by @c IfaceMgr to store +/// inbound packets until they are a dequeued for processing. +/// +template class PacketQueue { public: /// @brief Constructor /// - /// @param queue_type name of this queue's implementation type. + /// @param queue_type name of this queue's implementation type. /// Typically this is assigned by the factory that creates the /// queue. It is the logical name used to register queue /// implementations. - PacketQueue(const std::string& queue_type) + PacketQueue(const std::string& queue_type) : queue_type_(queue_type) {} /// Virtual destructor @@ -56,9 +61,9 @@ public: /// /// Calls @c dropPacket to determine if the packet should be queued /// or dropped. If it should be queued it is added to the end of the - /// specified by the "to" parameter. + /// specified by the "to" parameter. /// - /// @param packet packet to enqueue + /// @param packet packet to enqueue /// @param source socket the packet came from - this can be /// @param to end of the queue from which to remove packet(s). /// Defaults to BACK. @@ -92,7 +97,7 @@ public: /// This function is called at the beginning of @enqueuePacket and /// provides an opportunity to examine the packet and its source /// and decide whether it should be dropped or added to the queue. - /// Derivations are expected to provide implementations based on + /// Derivations are expected to provide implementations based on /// their own requirements. Bear in mind that the packet has NOT /// been unpacked at this point. The default implementation simply /// returns false. @@ -102,7 +107,7 @@ public: /// /// @return true if the packet should be dropped, false if it should be /// kept. - virtual bool dropPacket(PacketTypePtr /* packet */, + virtual bool dropPacket(PacketTypePtr /* packet */, const SocketInfo& /* source */) { return (false); } @@ -112,8 +117,8 @@ public: /// This function is called at the beginning of @c dequeuPacket and /// provides an opportunity to examine and discard packets from /// the queue prior to dequeuing the next packet to be - /// processed. Derivations are expected to provide implementations - /// based on their own requirements. The default implemenation is to + /// processed. Derivations are expected to provide implementations + /// based on their own requirements. The default implemenation is to /// to simply returns without skipping any packets. /// /// @param from end of the queue from which packets should discarded @@ -121,7 +126,7 @@ public: /// /// @return The number of packets discarded. virtual int eatPackets(const QueueEnd& /* from */) { - return (0); + return (0); } /// @brief Pushes a packet onto the queue @@ -140,9 +145,9 @@ public: /// @brief Gets the packet currently at one end of the queue /// /// Returns a pointer the packet at the specified end of the - /// queue without dequeuing it. + /// queue without dequeuing it. /// - /// @return A pointer to packet, or an empty pointer if the + /// @return A pointer to packet, or an empty pointer if the /// queue is empty. virtual const PacketTypePtr peek(const QueueEnd& from=QueueEnd::FRONT) const = 0; @@ -156,12 +161,26 @@ public: /// @brief Discards all packets currently in the buffer. virtual void clear() = 0; + /// @brief Fetches operational information about the current state of the queue + /// + /// Creates and returns an ElementPtr containing a single entry, + /// "queue-type". Derivations are expected to call this method first + /// and then add their own values. Since implementations may vary + /// widely on data of interest, this is structured as an ElementPtr + /// for broad latitude. + /// + /// @return an ElementPtr containing elements for values of interest virtual data::ElementPtr getInfo() { data::ElementPtr info = data::Element::createMap(); info->set("queue-type", data::Element::create(queue_type_)); return(info); } + /// @brief Fetches a JSON string representation of queue operational info + /// + /// This method calls @c getInfo() and then converts that into JSON text. + /// + /// @return string of JSON text virtual std::string getInfoStr() { data::ElementPtr info = getInfo(); std::ostringstream os; @@ -169,25 +188,30 @@ public: return (os.str()); } - /// @brief + /// @return Fetches the logical name of the type of this queue. std::string getQueueType() { return (queue_type_); }; private: - /// @brief Name of the this queue's implementation type. + /// @brief Logcial name of the this queue's implementation type. std::string queue_type_; - + }; -/// @brief Defines pointer to the DHCPv4 queue interface used at the application level. +/// @brief Defines pointer to the DHCPv4 queue interface used at the application level. +/// This is the type understood by IfaceMgr and the type that should be returned by +/// DHCPv4 packet queue factories. typedef boost::shared_ptr> PacketQueue4Ptr; -/// @brief Defines pointer to the DHCPv6 queue interface used at the application level. +/// @brief Defines pointer to the DHCPv6 queue interface used at the application level. +/// This is the type understood by IfaceMgr and the type that should be returned by +/// DHCPv6 packet queue factories. typedef boost::shared_ptr> PacketQueue6Ptr; + /// @brief Provides an abstract ring-buffer implementation of the PacketQueue interface. -template +template class PacketQueueRing : public PacketQueue { public: static const size_t MIN_RING_CAPACITY = 5; @@ -196,7 +220,7 @@ public: /// /// @param queue_capacity maximum number of packets the queue can hold PacketQueueRing(const std::string& queue_type, size_t capacity) - : PacketQueue(queue_type) { + : PacketQueue(queue_type) { queue_.set_capacity(capacity); } @@ -241,9 +265,9 @@ public: /// @brief Gets the packet currently at one end of the queue /// /// Returns a pointer the packet at the specified end of the - /// queue without dequeuing it. + /// queue without dequeuing it. /// - /// @return A pointer to packet, or an empty pointer if the + /// @return A pointer to packet, or an empty pointer if the /// queue is empty. virtual const PacketTypePtr peek(const QueueEnd& from=QueueEnd::FRONT) const { PacketTypePtr packet; @@ -257,7 +281,7 @@ public: /// @brief Returns True if the queue is empty. virtual bool empty() const { return(queue_.empty()); - } + } /// @brief Returns the maximum number of packets allowed in the buffer. virtual size_t getCapacity() const { @@ -272,8 +296,8 @@ public: /// @throw BadValue if capacity is too low. virtual void setCapacity(size_t capacity) { if (capacity < MIN_RING_CAPACITY) { - isc_throw(BadValue, "Queue capacity of " << capacity - << " is invalid. It must be at least " + isc_throw(BadValue, "Queue capacity of " << capacity + << " is invalid. It must be at least " << MIN_RING_CAPACITY); } @@ -291,6 +315,7 @@ public: queue_.clear(); } + /// @brief Fetches pertinent information virtual data::ElementPtr getInfo() { data::ElementPtr info = PacketQueue::getInfo(); info->set("capacity", data::Element::create(static_cast(getCapacity()))); @@ -305,44 +330,42 @@ private: }; -/// @brief Default DHCPv4 packet queue buffer implementation +/// @brief DHCPv4 packet queue buffer implementation +/// +/// This implementation does not (currently) add any drop +/// or packet skip logic, it operates as a verbatim ring +/// queue for DHCPv4 packets. +/// class PacketQueueRing4 : public PacketQueueRing { public: - static const size_t DEFAULT_RING_CAPACITY = 500; - /// @brief Constructor /// /// @param capacity maximum number of packets the queue can hold - PacketQueueRing4(const std::string& queue_type, size_t capacity=DEFAULT_RING_CAPACITY) + PacketQueueRing4(const std::string& queue_type, size_t capacity) : PacketQueueRing(queue_type, capacity) { }; /// @brief virtual Destructor virtual ~PacketQueueRing4(){} - - virtual void useDefaults(){ - setCapacity(DEFAULT_RING_CAPACITY); - } }; -/// @brief Default DHCPv6 packet queue buffer implementation +/// @brief DHCPv6 packet queue buffer implementation +/// +/// This implementation does not (currently) add any drop +/// or packet skip logic, it operates as a verbatim ring +/// queue for DHCPv6 packets. +/// class PacketQueueRing6 : public PacketQueueRing { public: - static const size_t DEFAULT_RING_CAPACITY = 500; - /// @brief Constructor /// /// @param capacity maximum number of packets the queue can hold - PacketQueueRing6(const std::string& queue_type, size_t capacity=DEFAULT_RING_CAPACITY) + PacketQueueRing6(const std::string& queue_type, size_t capacity) : PacketQueueRing(queue_type, capacity) { }; /// @brief virtual Destructor virtual ~PacketQueueRing6(){} - - virtual void useDefaults() { - setCapacity(DEFAULT_RING_CAPACITY); - } }; diff --git a/src/lib/dhcp/packet_queue_mgr.h b/src/lib/dhcp/packet_queue_mgr.h index d1ca105391..02d7d917a9 100644 --- a/src/lib/dhcp/packet_queue_mgr.h +++ b/src/lib/dhcp/packet_queue_mgr.h @@ -21,7 +21,7 @@ namespace dhcp { /// @brief Invalid Queue type exception /// -/// Thrown when a packet queue manager doesn't recognize the type of the queue. +/// Thrown when a packet queue manager doesn't recognize the type of the queue. class InvalidQueueType : public Exception { public: InvalidQueueType(const char* file, size_t line, const char* what) : @@ -30,43 +30,11 @@ public: /// @brief Packet Queue Managers (PQM). /// - -/// @todo TKM rewrite this... - -/// Each Kea server supporting Configuration Backend feature implements -/// a "manager" class which holds information about supported and -/// configured backends and provides access to the backends. This is -/// similar to @c HostMgr and @c LeaseMgr singletons being used by the -/// DHCP servers. -/// -/// The Config Backend Managers are typically implemented as singletons -/// which can be accessed from any place within the server code. This -/// includes server configuration, data fetching during normal server -/// operation and data management, including processing of control -/// commands implemented within hooks libraries. -/// -/// The @c BaseConfigBackendMgr is a base class for all PQMs implemented -/// for respective Kea servers. It includes mechanisms to register config -/// backend factory functions and to create instances of the backends using -/// those factory functions as a result of server configuration. The mechanism -/// of factory functions registration is useful in cases when the config -/// backend is implemented within the hook library. Such hook library -/// registers factory function in its @c load function and the server -/// simply calls this function to create the instance of this backend when -/// instructed to do so via configuration. Similar mechanism exists in -/// DHCP @c HostMgr. -/// -/// Unlike @c HostMgr, the PQMs do not directly expose API to fetch and -/// manipulate the data in the database. This is done via, so called, -/// Configuration Backends Pools. See @c BaseConfigBackendPool for -/// details. The @c BaseConfigBackendMgr is provided with the pool type -/// via class template parameter. Respective PQM implementations -/// use their own pools, which provide APIs appropriate for those -/// implementations. +/// Base class to manage the registry of packet queue implemenations +/// and the creation of and access to the current packet queue. /// -/// @tparam ConfgBackendPoolType Type of the configuration backend pool -/// to be used by the manager. It must derive from @c BaseConfigBackendPool -/// template class. +/// @tparam PacktQueueTypePtr Base type of packet queues managed by +/// the manager (e.g. PacketQueue4Ptr, PacketQueue6Ptr). template class PacketQueueMgr { public: @@ -128,10 +96,6 @@ public: // If it's there remove it if (index != factories_.end()) { factories_.erase(index); - // @todo What do we do here, if we only have one queue? - // I think we don't care, as we should be reloading/reconfiging... - // It may be that PQM doesn't retain the instance at all? - // pool_->delAllBackends(db_type); return (true); } @@ -152,7 +116,7 @@ public: /// replaced unless the new queue is successfully created. /// /// @throw InvalidQueueParameter if parameters is not map that contains - /// "queue-type", InvalidQueueType if the queue type requested is not + /// "queue-type", InvalidQueueType if the queue type requested is not /// supported. /// @throw Unexpected if the backend factory function returned NULL. void createPacketQueue(data::ConstElementPtr parameters) { diff --git a/src/lib/dhcp/packet_queue_mgr4.h b/src/lib/dhcp/packet_queue_mgr4.h index 848ad99b84..dc1a26bb77 100644 --- a/src/lib/dhcp/packet_queue_mgr4.h +++ b/src/lib/dhcp/packet_queue_mgr4.h @@ -17,8 +17,8 @@ namespace dhcp { /// @brief Packet Queue Manager for DHPCv4 servers. /// /// Implements the "manager" class which holds information about the -/// supported and packet queues and provides management of the current -/// queue instance. +/// supported DHCPv4 packet queue implementations and provides management +/// of the current queue instance. /// /// It is implemented as a singleton that can be accessed from any place /// within the server code. This includes server configuration, data @@ -46,8 +46,8 @@ public: /// @brief Returns a sole instance of the @c PacketQueueMgr4. /// - /// This method is used to retrieve the instance of the of the - /// @c PacketQueueMgr4 created by the @c create method. If the + /// This method is used to retrieve the instance of the of the + /// @c PacketQueueMgr4 created by the @c create method. If the /// instance doesn't exist yet, it is created using the @c create /// method. static PacketQueueMgr4& instance(); @@ -55,10 +55,11 @@ public: private: /// @brief Private constructor. /// - /// @todo probably will add the open source/default impl(s) + /// It registers a default factory for DHCPv4 queues and creates + /// an default DHCPv4 packet queue. PacketQueueMgr4(); - /// @brief Returns a pointer to the currently used instance of the + /// @brief Returns a pointer to the currently instance of the /// @c PacketQueueMgr4. static boost::scoped_ptr& getPacketQueueMgr4Ptr(); }; diff --git a/src/lib/dhcp/packet_queue_mgr6.h b/src/lib/dhcp/packet_queue_mgr6.h index 8fe76404ee..fb9d4e5057 100644 --- a/src/lib/dhcp/packet_queue_mgr6.h +++ b/src/lib/dhcp/packet_queue_mgr6.h @@ -17,8 +17,8 @@ namespace dhcp { /// @brief Packet Queue Manager for DHPCv6 servers. /// /// Implements the "manager" class which holds information about the -/// supported and packet queues and provides management of the current -/// queue instance. +/// supported DHCPv6 packet queue implementations and provides management +/// of the current queue instance. /// /// It is implemented as a singleton that can be accessed from any place /// within the server code. This includes server configuration, data @@ -56,7 +56,8 @@ public: private: /// @brief Private constructor. /// - /// @todo probably will add the open source/default impl(s) + /// It registers a default factory for DHCPv6 queues and creates + /// an default DHCPv6 packet queue. PacketQueueMgr6(); /// @brief Returns a pointer to the currently used instance of the diff --git a/src/lib/dhcpsrv/parsers/queue_control_parser.h b/src/lib/dhcpsrv/parsers/queue_control_parser.h index e284bc7ae3..0150b96eef 100644 --- a/src/lib/dhcpsrv/parsers/queue_control_parser.h +++ b/src/lib/dhcpsrv/parsers/queue_control_parser.h @@ -18,6 +18,9 @@ namespace dhcp { /// /// This parser parses the "queue-control" parameter which holds the /// the configurable parameters that tailor DHCP packet queue behavior. +/// Currently "queue-control" is treated as a map of arbitrary values, +/// with only one required value, "queue-type". This was done to +/// provide latitude for differing queue implementations. /// /// This parser is used in both DHCPv4 and DHCPv6. Derived parsers /// are not needed. diff --git a/src/lib/dhcpsrv/srv_config.h b/src/lib/dhcpsrv/srv_config.h index 0f74e53b3c..123834ff7b 100644 --- a/src/lib/dhcpsrv/srv_config.h +++ b/src/lib/dhcpsrv/srv_config.h @@ -361,7 +361,7 @@ public: } /// @brief Returns queue control information - /// @return pointer to a queue control information + /// @return pointer to the queue control information const isc::data::ConstElementPtr getQueueControlInfo() const { return (queue_control_); }