}
}
+\"user-context\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser4Context::POOLS:
+ return isc::dhcp::Dhcp4Parser::make_USER_CONTEXT(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp4Parser::make_STRING("user-context", driver.loc_);
+ }
+}
+
\"subnet\" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
POOLS "pools"
POOL "pool"
+ USER_CONTEXT "user-context"
SUBNET "subnet"
INTERFACE "interface"
%token <bool> BOOLEAN "boolean"
%type <ElementPtr> value
+%type <ElementPtr> map_value
%type <ElementPtr> socket_type
%printer { yyoutput << $$; } <*>;
// for it.
};
+map_value: map2 { $$ = ctx.stack_.back(); ctx.stack_.pop_back(); };
+
// Assignments rule
map_content: %empty // empty map
| not_empty_map
pool_param: pool_entry
| option_data_list
+ | user_context
| unknown_map_entry
;
ctx.leave();
};
+user_context: USER_CONTEXT {
+ ctx.enter(ctx.NO_KEYWORD);
+} COLON map_value {
+ ctx.stack_.back()->set("user-context", $4);
+ ctx.leave();
+};
+
// --- end of pools definition -------------------------------
// --- reservations ------------------------------------------
-// Copyright (C) 2012-2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2012-2017 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
void getPool(const std::string& config, size_t subnet_index,
size_t pool_index, PoolPtr& pool) {
ConstElementPtr status;
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ EXPECT_NO_THROW(json = parseDHCP4(config, true));
EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
ASSERT_TRUE(status);
checkResult(status, 0);
}
}
+\"user-context\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser6Context::POOLS:
+ case isc::dhcp::Parser6Context::PD_POOLS:
+ return isc::dhcp::Dhcp6Parser::make_USER_CONTEXT(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp6Parser::make_STRING("user-context", driver.loc_);
+ }
+}
+
\"subnet\" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
EXCLUDED_PREFIX "excluded-prefix"
EXCLUDED_PREFIX_LEN "excluded-prefix-len"
DELEGATED_LEN "delegated-len"
+ USER_CONTEXT "user-context"
SUBNET "subnet"
INTERFACE "interface"
%token <bool> BOOLEAN "boolean"
%type <ElementPtr> value
+%type <ElementPtr> map_value
%type <ElementPtr> duid_type
%printer { yyoutput << $$; } <*>;
// for it.
};
+map_value: map2 { $$ = ctx.stack_.back(); ctx.stack_.pop_back(); };
+
// Assignments rule
map_content: %empty // empty map
| not_empty_map
pool_param: pool_entry
| option_data_list
+ | user_context
| unknown_map_entry
;
ctx.leave();
};
+user_context: USER_CONTEXT {
+ ctx.enter(ctx.NO_KEYWORD);
+} COLON map_value {
+ ctx.stack_.back()->set("user-context", $4);
+ ctx.leave();
+};
+
// --- end of pools definition -------------------------------
// --- pd-pools ----------------------------------------------
| option_data_list
| excluded_prefix
| excluded_prefix_len
+ | user_context
| unknown_map_entry
;
void getPool(const std::string& config, size_t subnet_index,
size_t pool_index, Lease::Type type, PoolPtr& pool) {
ConstElementPtr status;
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ EXPECT_NO_THROW(json = parseDHCP6(config, true));
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
ASSERT_TRUE(status);
checkResult(status, 0);