contact "kea-dev@lists.isc.org";
description "This file defines some commonly used Kea DHCP types and
groupings.";
- revision 2018-11-13 {
+ revision 2018-11-14 {
description "Initial revision";
reference "";
}
}
import kea-dhcp-types {
prefix dhcp;
- revision-date 2018-11-13;
+ revision-date 2018-11-14;
}
import kea-logging {
prefix logging;
description "This model defines a YANG data model that can be
used to configure and manage a Kea DHCPv4 server.";
- revision 2018-11-13 {
+ revision 2018-11-14 {
description "Initial revision";
reference "";
}
grouping option-data-list {
description "Option data list grouping.";
- container option-data-list {
- description "Option data list.";
- list option-data {
- key "code space";
- description "Option data entry.";
- leaf code {
- type uint8;
- mandatory true;
- description "Option code.";
- }
- leaf space {
- type string;
- mandatory true;
- description "Option space.";
- }
- uses dhcp:option-data-name;
- uses dhcp:option-data-data;
- uses dhcp:option-data-csv-format;
- uses dhcp:option-data-always-send;
- uses dhcp:option-data-user-context;
+ list option-data {
+ key "code space";
+ description "Option data entry.";
+ leaf code {
+ type uint8;
+ mandatory true;
+ description "Option code.";
+ }
+ leaf space {
+ type string;
+ mandatory true;
+ description "Option space.";
}
+ uses dhcp:option-data-name;
+ uses dhcp:option-data-data;
+ uses dhcp:option-data-csv-format;
+ uses dhcp:option-data-always-send;
+ uses dhcp:option-data-user-context;
}
}
}
import kea-dhcp-types {
prefix dhcp;
- revision-date 2018-11-13;
+ revision-date 2018-11-14;
}
import kea-logging {
prefix logging;
description "This model defines a YANG data model that can be
used to configure and manage a Kea DHCPv6 server.";
- revision 2018-11-13 {
+ revision 2018-11-14 {
description "Initial revision";
reference "";
}
grouping option-data-list {
description "Option data list grouping.";
- container option-data-list {
- description "Option data list.";
- list option-data {
- key "code space";
- description "Option data entry.";
- leaf code {
- type uint16;
- mandatory true;
- description "Option code.";
- }
- leaf space {
- type string;
- mandatory true;
- description "Option space.";
- }
- uses dhcp:option-data-name;
- uses dhcp:option-data-data;
- uses dhcp:option-data-csv-format;
- uses dhcp:option-data-always-send;
- uses dhcp:option-data-user-context;
+ list option-data {
+ key "code space";
+ description "Option data entry.";
+ leaf code {
+ type uint16;
+ mandatory true;
+ description "Option code.";
+ }
+ leaf space {
+ type string;
+ mandatory true;
+ description "Option space.";
}
+ uses dhcp:option-data-name;
+ uses dhcp:option-data-data;
+ uses dhcp:option-data-csv-format;
+ uses dhcp:option-data-always-send;
+ uses dhcp:option-data-user-context;
}
}
useModel(KEA_DHCP4_SERVER);
// Get the option data list and check if it is empty.
- const string& xpath = "/kea-dhcp4-server:config/option-data-list";
+ const string& xpath = "/kea-dhcp4-server:config";
ConstElementPtr options;
EXPECT_NO_THROW(options = t_obj_->getOptionDataList(xpath));
ASSERT_TRUE(options);
useModel(KEA_DHCP6_SERVER);
// Create the option code 100.
- const string& xpath = "/kea-dhcp6-server:config/option-data-list";
+ const string& xpath = "/kea-dhcp6-server:config";
const string& xoption = xpath + "/option-data[code='100'][space='dns']";
const string& xformat = xoption + "/csv-format";
const string& xdata = xoption + "/data";
useModel(KEA_DHCP4_SERVER);
// Set empty list.
- const string& xpath = "/kea-dhcp4-server:config/option-data-list";
+ const string& xpath = "/kea-dhcp4-server:config";
ConstElementPtr options = Element::createList();
EXPECT_NO_THROW(t_obj_->setOptionDataList(xpath, options));
useModel(KEA_DHCP6_SERVER);
// Set one option data.
- const string& xpath = "/kea-dhcp6-server:config/option-data-list";
+ const string& xpath = "/kea-dhcp6-server:config";
ElementPtr options = Element::createList();
ElementPtr option = Element::createMap();
option->set("code", Element::create(100));
string expected =
"kea-dhcp6-server:config (container)\n"
" |\n"
- " -- option-data-list (container)\n"
+ " -- option-data (list instance)\n"
" |\n"
- " -- option-data (list instance)\n"
- " |\n"
- " -- code = 100\n"
- " |\n"
- " -- space = dns\n"
- " |\n"
- " -- data = 12121212\n"
- " |\n"
- " -- csv-format = false\n"
- " |\n"
- " -- always-send = false\n";
+ " -- code = 100\n"
+ " |\n"
+ " -- space = dns\n"
+ " |\n"
+ " -- data = 12121212\n"
+ " |\n"
+ " -- csv-format = false\n"
+ " |\n"
+ " -- always-send = false\n";
EXPECT_EQ(expected, tree->to_string(100));
// Check it validates.
SR_LIST_T, true },
{ "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/id",
"111", SR_UINT32_T, false },
- { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/option-data-list",
- "", SR_CONTAINER_T, false },
- { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/option-data-list/"
+ { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/"
"option-data[code='100'][space='dns']", "", SR_LIST_T, true },
- { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/option-data-list/"
+ { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/"
"option-data[code='100'][space='dns']/code",
"100", SR_UINT8_T, false },
- { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/option-data-list/"
+ { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/"
"option-data[code='100'][space='dns']/space",
"dns", SR_STRING_T, false },
- { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/option-data-list/"
+ { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/"
"option-data[code='100'][space='dns']/data",
"12121212", SR_STRING_T, true },
- { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/option-data-list/"
+ { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/"
"option-data[code='100'][space='dns']/csv-format",
"false", SR_BOOL_T, true },
- { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/option-data-list/"
+ { "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/"
"option-data[code='100'][space='dns']/always-send",
"false", SR_BOOL_T, true },
{ "/kea-dhcp4-server:config/subnet4/subnet4[id='111']/pools",
"prefix", "2001:db8::1:0/112", SR_STRING_T, true },
{ "/kea-dhcp6-server:config/subnet6/subnet6[id='111']/pools/"
"pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
- "option-data-list", "", SR_CONTAINER_T, false },
- { "/kea-dhcp6-server:config/subnet6/subnet6[id='111']/pools/"
- "pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
- "option-data-list/option-data[code='100'][space='dns']",
+ "option-data[code='100'][space='dns']",
"", SR_LIST_T, true },
{ "/kea-dhcp6-server:config/subnet6/subnet6[id='111']/pools/"
"pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
- "option-data-list/option-data[code='100'][space='dns']/code",
+ "option-data[code='100'][space='dns']/code",
"100", SR_UINT16_T, false },
{ "/kea-dhcp6-server:config/subnet6/subnet6[id='111']/pools/"
"pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
- "option-data-list/option-data[code='100'][space='dns']/space",
+ "option-data[code='100'][space='dns']/space",
"dns", SR_STRING_T, false },
{ "/kea-dhcp6-server:config/subnet6/subnet6[id='111']/pools/"
"pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
- "option-data-list/option-data[code='100'][space='dns']/data",
+ "option-data[code='100'][space='dns']/data",
"12121212", SR_STRING_T, true },
{ "/kea-dhcp6-server:config/subnet6/subnet6[id='111']/pools/"
"pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
- "option-data-list/option-data[code='100'][space='dns']/csv-format",
+ "option-data[code='100'][space='dns']/csv-format",
"false", SR_BOOL_T, true },
{ "/kea-dhcp6-server:config/subnet6/subnet6[id='111']/pools/"
"pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
- "option-data-list/option-data[code='100'][space='dns']/always-send",
+ "option-data[code='100'][space='dns']/always-send",
"false", SR_BOOL_T, true },
{ "/kea-dhcp6-server:config/subnet6/subnet6[id='111']/subnet",
"2001:db8::/48", SR_STRING_T, true }
if (required) {
result->set("only-if-required", required);
}
- ConstElementPtr options = getOptionDataList(xpath + "/option-data-list");
+ ConstElementPtr options = getOptionDataList(xpath);
if (options && (options->size() > 0)) {
result->set("option-data", options);
}
}
ConstElementPtr options = elem->get("option-data");
if (options) {
- setOptionDataList(xpath + "/option-data-list", options);
+ setOptionDataList(xpath, options);
created = true;
}
if (model_ == KEA_DHCP4_SERVER) {
/// +--rw name string
/// +--rw test? string
/// +--rw only-if-required? boolean
-/// +--rw option-data-list option-data*
+/// +--rw option-data*
/// +--rw option-def-list option-def*
/// +--rw next-server? inet:ipv4-address
/// +--rw server-hostname? string
if (defs && !defs->empty()) {
result->set("option-def", defs);
}
- ConstElementPtr options = getOptionDataList(xpath + "/option-data-list");
+ ConstElementPtr options = getOptionDataList(xpath);
if (options && !options->empty()) {
result->set("option-data", options);
}
}
ConstElementPtr options = elem->get("option-data");
if (options && !options->empty()) {
- setOptionDataList(xpath + "/option-data-list", options);
+ setOptionDataList(xpath, options);
}
ConstElementPtr hook_libs = elem->get("hooks-libraries");
if (hook_libs) {
/// +--rw host-reservation-identifiers* enumeration
/// +--rw client-classes client-class*
/// +--rw option-def-list option-def*
-/// +--rw option-data-list option-data*
+/// +--rw option-data*
/// +--rw hook-library*
/// +--rw library string
/// +--rw parameters? string
result->set("prefixes", prefixes);
}
}
- ConstElementPtr options = getOptionDataList(xpath + "/option-data-list");
+ ConstElementPtr options = getOptionDataList(xpath);
if (options && (options->size() > 0)) {
result->set("option-data", options);
}
}
ConstElementPtr options = elem->get("option-data");
if (options && (options->size() > 0)) {
- setOptionDataList(xpath + "/option-data-list", options);
+ setOptionDataList(xpath, options);
}
ConstElementPtr classes = elem->get("client-classes");
if (classes && (classes->size() > 0)) {
/// +--rw identifier-type enumeration
/// +--rw identifier string
/// +--rw hostname? string
-/// +--rw option-data-list option-data*
+/// +--rw option-data*
/// +--rw client-classes* string
/// +--rw user-context? string
/// (DHCPv4 only)
ConstElementPtr
TranslatorOptionDataList::getOptionDataListKea(const string& xpath) {
ElementPtr result = Element::createList();
- S_Iter_Value iter = getIter(xpath + "/*");
+ S_Iter_Value iter = getIter(xpath + "/option-data");
if (!iter) {
// Can't happen.
isc_throw(Unexpected, "getOptionDataListKea: can't get iterator: "
/// @endcode
/// @code
/// /kea-dhcp6-server:config (container)
-/// /kea-dhcp6-server:config/option-data-list (container)
-/// /kea-dhcp6-server:config/option-data-list/
+/// /kea-dhcp6-server:config/
/// option-data[code='100'][space='dns'] (list instance)
-/// /kea-dhcp6-server:config/option-data-list/
+/// /kea-dhcp6-server:config/
/// option-data[code='100'][space='dns']/code = 100
-/// /kea-dhcp6-server:config/option-data-list/
+/// /kea-dhcp6-server:config/
/// option-data[code='100'][space='dns']/space = dns
-/// /kea-dhcp6-server:config/option-data-list/
+/// /kea-dhcp6-server:config/
/// option-data[code='100'][space='dns']/data = 12121212
-/// /kea-dhcp6-server:config/option-data-list/
+/// /kea-dhcp6-server:config/
/// option-data[code='100'][space='dns']/csv-format = false
-/// /kea-dhcp6-server:config/option-data-list/
+/// /kea-dhcp6-server:config/
/// option-data[code='100'][space='dns']/always-send = false
/// @endcode
if (delegated) {
result->set("delegated-len", delegated);
}
- ConstElementPtr options = getOptionDataList(xpath + "/option-data-list");
+ ConstElementPtr options = getOptionDataList(xpath);
if (options && (options->size() > 0)) {
result->set("option-data", options);
}
}
ConstElementPtr options = elem->get("option-data");
if (options && (options->size() > 0)) {
- setOptionDataList(xpath + "/option-data-list", options);
+ setOptionDataList(xpath, options);
created = true;
}
ConstElementPtr guard = elem->get("client-class");
/// +--rw prefix? inet:ipv6-prefix
/// +--rw delegated-len? uint8
/// +--rw excluded-prefix? inet:ipv6-prefix
-/// +--rw option-data-list option-data*
+/// +--rw option-data*
/// +--rw client-class? string
/// +--rw require-client-classes* string
/// +--rw user-context? string
<< end_addr->stringValue();
result->set("pool", Element::create(range.str()));
}
- ConstElementPtr options = getOptionDataList(xpath + "/option-data-list");
+ ConstElementPtr options = getOptionDataList(xpath);
if (options && (options->size() > 0)) {
result->set("option-data", options);
}
// Skip start-address and end-address as are the keys.
ConstElementPtr options = elem->get("option-data");
if (options && (options->size() > 0)) {
- setOptionDataList(xpath + "/option-data-list", options);
+ setOptionDataList(xpath, options);
created = true;
}
ConstElementPtr guard = elem->get("client-class");
/// +--rw prefix? inet:ipv[46]-prefix
/// +--rw start-address inet:ipv[46]-address
/// +--rw end-address inet:ipv[46]-address
-/// +--rw option-data-list option-data*
+/// +--rw option-data*
/// +--rw client-class? string
/// +--rw require-client-classes* string
/// +--rw user-context? string
if (rebind) {
result->set("rebind-timer", rebind);
}
- ConstElementPtr options = getOptionDataList(xpath + "/option-data-list");
+ ConstElementPtr options = getOptionDataList(xpath);
if (options && (options->size() > 0)) {
result->set("option-data", options);
}
}
ConstElementPtr options = elem->get("option-data");
if (options && (options->size() > 0)) {
- setOptionDataList(xpath + "/option-data-list", options);
+ setOptionDataList(xpath, options);
}
ConstElementPtr interface = elem->get("interface");
if (interface) {
/// +--rw valid-lifetime? uint32
/// +--rw renew-timer? uint32
/// +--rw rebind-timer? uint32
-/// +--rw option-data-list option-data*
+/// +--rw option-data*
/// +--rw interface? string
/// +--rw client-class? string
/// +--rw require-client-classes* string
if (rebind) {
result->set("rebind-timer", rebind);
}
- ConstElementPtr options = getOptionDataList(xpath + "/option-data-list");
+ ConstElementPtr options = getOptionDataList(xpath);
if (options && (options->size() > 0)) {
result->set("option-data", options);
}
}
ConstElementPtr options = elem->get("option-data");
if (options && (options->size() > 0)) {
- setOptionDataList(xpath + "/option-data-list", options);
+ setOptionDataList(xpath, options);
}
ConstElementPtr pools = elem->get("pools");
if (pools && (pools->size() > 0)) {
/// +--rw valid-lifetime? uint32
/// +--rw renew-timer? uint32
/// +--rw rebind-timer? uint32
-/// +--rw option-data-list option-data*
+/// +--rw option-data*
/// +--rw pools pool*
/// +--rw subnet inet:ip-prefix
/// +--rw interface? string