2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-30 13:37:55 +00:00

[#2832] add missing YANG nodes

- allocator
- ddns-ttl-percent
- exclude-first-last-24,
- ignore-dhcp-server-Identifier
- offer-lifetime
- pd-allocator
- read-timeout
- tcp-user-timeout
- write-timeout

Removed obsolete YANG nodes: contact-points, keyspace.
This commit is contained in:
Andrei Pavel
2023-05-10 18:49:45 +03:00
parent 14bcae7fac
commit 2181cef68d
21 changed files with 444 additions and 159 deletions

View File

@@ -11,6 +11,9 @@
{
// Kea DHCPv4 server configuration begins here.
"Dhcp4": {
// Global flag selecting an IP address allocation strategy for all
// subnets. Use "random" for a random allocation strategy.
"allocator": "iterative",
// Global authoritative flag to handle requests by clients for
// unknown IP addresses (ignore if disabled, NAK if enabled).
@@ -54,7 +57,11 @@
"min-valid-lifetime": 4000,
// Class max valid lifetime.
"max-valid-lifetime": 8000
"max-valid-lifetime": 8000,
// If greater than zero, it is the lifetime of leases temporarily allocated
// on DISCOVER. When zero (the default), leases are not allocated on DISCOVER.
"offer-lifetime" : 65
},
{
// Default value of the class-specific bootfile name. An empty name
@@ -110,6 +117,13 @@
// Parameters for triggering behaviors compatible with broken or
// non-compliant clients, relays, or other agents
"compatibility": {
// Ignore DHCP Server Identifier option if set to true.
// Enabling this will cause Kea to accept any query, even
// if the address in the option belongs to another server,
// instead of dropping it. This config option defaults to
// false, as enabling it breaks RFC compliance.
"ignore-dhcp-server-identifier": false,
// Ignore Relay Agent Information Link Selection suboption if set
// to true. Enabling this will cause Kea to use normal subnet
// selection logic instead of attempting to use the subnet
@@ -119,7 +133,13 @@
// Parse options more leniently where fields can be deduced
// deterministically, even if against RFC or common practice.
"lenient-option-parsing": true
"lenient-option-parsing": true,
// Boolean flag indicating whether .0 and .255 addresses
// must be considered as never free in subnets with a prefix length
// of 24 or less. The default is false, as these addresses are not
// special; only the first and the last addresses are.
"exclude-first-last-24": false
},
// Command control socket configuration parameters for the Kea DHCPv4 server.
@@ -193,6 +213,10 @@
// It may be specified at the global, shared-network, and subnet levels.
"ddns-use-conflict-resolution": true,
// When greater than 0.0, it is the percent of the lease's lifetime
// to use for the DNS TTL.
"ddns-ttl-percent": 0.75,
// Time in seconds specifying how long a declined lease should be
// excluded from DHCP assignments. The default value is 86400 (24 hours).
"decline-probation-period": 86400,
@@ -350,7 +374,30 @@
"key-file": "my-key",
// Cipher list (see the OpenSSL ciphers command manual).
"cipher-list": "AES"
"cipher-list": "AES",
// Connection reconnect wait time.
// This parameter governs how long Kea waits before attempting
// to reconnect. Expressed in milliseconds. The default is 0
// (disabled) for MySQL and PostgreSQL.
"reconnect-wait-time": 3000,
// Connection maximum reconnect tries.
"max-reconnect-tries": 3,
// Action to take when connection recovery fails.
// Supported values: stop-retry-exit, serve-retry-exit,
// serve-retry-continue
"on-fail": "stop-retry-exit",
// Connection connect timeout in seconds.
"connect-timeout": 100,
// Timeout of database read operations in seconds.
"read-timeout": 120,
// Timeout of database write operations in seconds.
"write-timeout": 180
},
{
// Name of the database to connect to.
@@ -371,22 +418,9 @@
// Username to be used to access the database.
"user": "keatest",
// Connection reconnect wait time.
// This parameter governs how long Kea waits before attempting
// to reconnect. Expressed in milliseconds. The default is 0
// (disabled) for MySQL and PostgreSQL.
"reconnect-wait-time": 3000,
// Connection maximum reconnect tries.
"max-reconnect-tries": 3,
// Action to take when connection recovery fails.
// Supported values: stop-retry-exit, serve-retry-exit,
// serve-retry-continue
"on-fail": "stop-retry-exit",
// Connection connect timeout in seconds.
"connect-timeout": 100
// TCP user timeout while communicating with the database.
// It is specified in seconds.
"tcp-user-timeout": 100
}
],
@@ -681,6 +715,10 @@
// networks group subnets together.
"shared-networks": [
{
// A flag selecting an IP address allocation strategy for all
// subnets in this shared network.
"allocator": "random",
// Shared-network level authoritative flag.
"authoritative": false,
@@ -716,6 +754,9 @@
// Shared-network level value. See description at the global level.
"ddns-use-conflict-resolution": true,
// Shared-network level value. See description at the global level.
"ddns-ttl-percent": 0.65,
// Shared-network level value. See description at the global level.
"hostname-char-replacement": "x",
@@ -737,6 +778,10 @@
// to be sent in 'siaddr'.
"next-server": "192.0.2.123",
// If greater than zero, it is the lifetime of leases temporarily allocated
// on DISCOVER. When zero (the default), leases are not allocated on DISCOVER.
"offer-lifetime" : 60,
// List of shared network-specific DHCP options.
"option-data": [],
@@ -812,6 +857,10 @@
// Prefix matched against source address. See RFC7341.
"4o6-subnet": "2001:db8:1:1::/64",
// A flag selecting an IP address allocation strategy for
// the subnet.
"allocator": "iterative",
// Subnet-level authoritative flag.
"authoritative": false,
@@ -847,6 +896,9 @@
// Subnet-level value. See description at the global level.
"ddns-use-conflict-resolution": true,
// Subnet-level value. See description at the global level.
"ddns-ttl-percent": 0.55,
// Subnet-level value. See description at the global level.
"hostname-char-replacement": "x",
@@ -868,6 +920,10 @@
// in 'siaddr'.
"next-server": "0.0.0.0",
// If greater than zero, it is the lifetime of leases temporarily allocated
// on DISCOVER. When zero (the default), leases are not allocated on DISCOVER.
"offer-lifetime" : 60,
// Turn on storage of extended information (e.g. relay agent
// information) with each lease for this subnet.
"store-extended-info": true,
@@ -940,8 +996,7 @@
// Subnet-level value of the rebind timer.
"rebind-timer": 40,
// List of IPv4 relay addresses for which this subnet is
// selected.
// List of IPv4 relay addresses for which this subnet is selected.
"relay": {
"ip-addresses": [
"192.168.56.1"
@@ -1035,10 +1090,10 @@
// Shared-network level (default) valid lifetime.
"valid-lifetime": 6001,
// Subnet-level min valid lifetime.
// Shared-network level min valid lifetime.
"min-valid-lifetime": 4001,
// Subnet-level max valid lifetime.
// Shared-network level max valid lifetime.
"max-valid-lifetime": 8001
}
],
@@ -1172,6 +1227,10 @@
}
],
// If greater than zero, it is the lifetime of leases temporarily allocated
// on DISCOVER. When zero (the default), leases are not allocated on DISCOVER.
"offer-lifetime" : 60,
// Look at advanced examples for the use of user-contexts.
"user-context": { }
}

View File

@@ -137,7 +137,7 @@
// Boolean flag indicating whether .0 and .255 addresses
// must be considered as never free in subnets with a prefix length
// less than 24. The default is false, as these addresses are not
// of 24 or less. The default is false, as these addresses are not
// special; only the first and the last addresses are.
"exclude-first-last-24": false
},
@@ -374,46 +374,7 @@
"key-file": "my-key",
// Cipher list (see the OpenSSL ciphers command manual).
"cipher-list": "AES"
},
{
// Name of the database to connect to.
"name": "keatest",
// Host on which the database resides.
"host": "localhost",
// Database password.
"password": "keatest",
// Port on which the database is available.
"port": 5432,
// Type of database, e.g. "mysql", "postgresql".
"type": "postgresql",
// Username to be used to access the database.
"user": "keatest",
// TCP user timeout while communicating with the database.
// It is specified in seconds.
"tcp-user-timeout": 100
},
{
// Name of the database to connect to.
"name": "keatest",
// Database password.
"password": "keatest",
// Port on which the database is available.
"port": 9042,
// Type of database, e.g. "mysql", "postgresql".
"type": "mysql",
// Username to be used to access the database.
"user": "keatest",
"cipher-list": "AES",
// Connection reconnect wait time.
// This parameter governs how long Kea waits before attempting
@@ -437,6 +398,29 @@
// Timeout of database write operations in seconds.
"write-timeout": 180
},
{
// Name of the database to connect to.
"name": "keatest",
// Host on which the database resides.
"host": "localhost",
// Database password.
"password": "keatest",
// Port on which the database is available.
"port": 5432,
// Type of database, e.g. "mysql", "postgresql".
"type": "postgresql",
// Username to be used to access the database.
"user": "keatest",
// TCP user timeout while communicating with the database.
// It is specified in seconds.
"tcp-user-timeout": 100
}
],

View File

@@ -11,6 +11,14 @@
{
// Kea DHCPv6 server configuration begins here.
"Dhcp6": {
// Global flag selecting an IP address allocation strategy for all
// subnets.
"allocator": "iterative",
// Global flag selecting a delegated prefix allocation strategy
// for all subnets.
"pd-allocator": "random",
// Ordered list of client classes used by the DHCPv6 server.
"client-classes": [
{
@@ -156,6 +164,10 @@
// It may be specified at the global, shared-network, and subnet levels.
"ddns-use-conflict-resolution": true,
// When greater than 0.0, it is the percent of the lease's lifetime
// to use for the DNS TTL.
"ddns-ttl-percent": 0.75,
// Time in seconds specifying how long a declined lease should be
// excluded from DHCP assignments. The default value is 24 hours.
"decline-probation-period": 86400,
@@ -304,7 +316,30 @@
"key-file": "my-key",
// Cipher list (see the OpenSSL ciphers command manual).
"cipher-list": "AES"
"cipher-list": "AES",
// Connection reconnect wait time.
// This parameter governs how long Kea waits before attempting
// to reconnect. Expressed in milliseconds. The default is 0
// (disabled) for MySQL and PostgreSQL.
"reconnect-wait-time": 3000,
// Connection maximum reconnect tries.
"max-reconnect-tries": 3,
// Action to take when connection recovery fails.
// Supported values: stop-retry-exit, serve-retry-exit,
// serve-retry-continue
"on-fail": "stop-retry-exit",
// Connection connect timeout in seconds.
"connect-timeout": 100,
// Timeout of database read operations in seconds.
"read-timeout": 120,
// Timeout of database write operations in seconds.
"write-timeout": 180
},
{
// Name of the database to connect to.
@@ -325,22 +360,9 @@
// Username to be used to access the database.
"user": "keatest",
// Connection reconnect wait time.
// This parameter governs how long Kea waits before attempting
// to reconnect. Expressed in milliseconds. The default is 0
// (disabled) for MySQL and PostgreSQL.
"reconnect-wait-time": 3000,
// Connection maximum reconnect tries.
"max-reconnect-tries": 3,
// Action to take when connection recovery fails.
// Supported values: stop-retry-exit, serve-retry-exit,
// serve-retry-continue
"on-fail": "stop-retry-exit",
// Connection connect timeout in seconds.
"connect-timeout": 100
// TCP user timeout while communicating with the database.
// It is specified in seconds.
"tcp-user-timeout": 100
}
],
@@ -638,6 +660,14 @@
// networks group subnets together.
"shared-networks": [
{
// A flag selecting an IP address allocation strategy for all
// subnets in this shared network.
"allocator": "random",
// A flag selecting a delegated prefix allocation strategy for
// all subnets in this shared network.
"pd-allocator": "iterative",
// Restricts this shared network to allow only clients
// that belong to a particular client class. If an
// empty string is provided, no restriction is applied.
@@ -667,6 +697,9 @@
// Shared-network level value. See description at the global level.
"ddns-use-conflict-resolution": true,
// Shared-network level value. See description at the global level.
"ddns-ttl-percent": 0.65,
// Shared-network level value. See description at the global level.
"hostname-char-replacement": "x",
@@ -761,6 +794,14 @@
// List of IPv6 subnets belonging to this shared network.
"subnet6": [
{
// A flag selecting an IP address allocation strategy for
// the subnet.
"allocator": "iterative",
// A flag selecting a delegated prefix allocation strategy
// for the subnet.
"pd-allocator": "iterative",
// Restricts this subnet to allow only clients that belong
// to a particular client class. If an empty string is
// provided, no restriction is applied.
@@ -790,6 +831,9 @@
// Subnet-level value. See description at the global level.
"ddns-use-conflict-resolution": true,
// Subnet-level value. See description at the global level.
"ddns-ttl-percent": 0.55,
// Subnet-level value. See description at the global level.
"hostname-char-replacement": "x",
@@ -875,6 +919,7 @@
}
],
// List of IP address pools belonging to the subnet.
"pools": [
{
// Restricts this pool to only be used for client
@@ -922,11 +967,10 @@
// the Reply message (See DHCPv6 rapid commit).
"rapid-commit": false,
// Subnet-level rebind timer.
// Subnet-level value of the rebind timer.
"rebind-timer": 40,
// List of IPv4 relay addresses for which this subnet
// is selected.
// List of IPv6 relay addresses for which this subnet is selected.
"relay": {
"ip-addresses": [
"2001:db8:0:f::1"

View File

@@ -316,46 +316,7 @@
"key-file": "my-key",
// Cipher list (see the OpenSSL ciphers command manual).
"cipher-list": "AES"
},
{
// Name of the database to connect to.
"name": "keatest",
// Host on which the database resides.
"host": "localhost",
// Database password.
"password": "keatest",
// Port on which the database is available.
"port": 5432,
// Type of database, e.g. "mysql", "postgresql".
"type": "postgresql",
// Username to be used to access the database.
"user": "keatest",
// TCP user timeout while communicating with the database.
// It is specified in seconds.
"tcp-user-timeout": 100
},
{
// Name of the database to connect to.
"name": "keatest",
// Database password.
"password": "keatest",
// Port on which the database is available.
"port": 9042,
// Type of database, e.g. "mysql", "postgresql".
"type": "mysql",
// Username to be used to access the database.
"user": "keatest",
"cipher-list": "AES",
// Connection reconnect wait time.
// This parameter governs how long Kea waits before attempting
@@ -379,6 +340,29 @@
// Timeout of database write operations in seconds.
"write-timeout": 180
},
{
// Name of the database to connect to.
"name": "keatest",
// Host on which the database resides.
"host": "localhost",
// Database password.
"password": "keatest",
// Port on which the database is available.
"port": 5432,
// Type of database, e.g. "mysql", "postgresql".
"type": "postgresql",
// Username to be used to access the database.
"user": "keatest",
// TCP user timeout while communicating with the database.
// It is specified in seconds.
"tcp-user-timeout": 100
}
],

View File

@@ -75,6 +75,7 @@ TranslatorClass::getClassKea(DataNode const& data_node) {
if (model_ == KEA_DHCP4_SERVER) {
checkAndGetLeaf(result, data_node, "boot-file-name");
checkAndGetLeaf(result, data_node, "next-server");
checkAndGetLeaf(result, data_node, "offer-lifetime");
checkAndGetLeaf(result, data_node, "server-hostname");
ConstElementPtr defs = getOptionDefList(data_node);
@@ -127,6 +128,7 @@ TranslatorClass::setClassKea(string const& xpath, ConstElementPtr elem) {
if (model_ == KEA_DHCP4_SERVER) {
checkAndSetLeaf(elem, xpath, "boot-file-name", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "next-server", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "offer-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "server-hostname", LeafBaseType::String);
ConstElementPtr defs = elem->get("option-def");

View File

@@ -187,6 +187,8 @@ ElementPtr
TranslatorConfig::getServerKeaDhcpCommon(DataNode const& data_node) {
ElementPtr result = Element::createMap();
checkAndGetLeaf(result, data_node, "allocator");
checkAndGetLeaf(result, data_node, "cache-max-age");
checkAndGetLeaf(result, data_node, "cache-max-age");
checkAndGetLeaf(result, data_node, "cache-threshold");
checkAndGetLeaf(result, data_node, "calculate-tee-times");
@@ -197,6 +199,7 @@ TranslatorConfig::getServerKeaDhcpCommon(DataNode const& data_node) {
checkAndGetLeaf(result, data_node, "ddns-qualifying-suffix");
checkAndGetLeaf(result, data_node, "ddns-replace-client-name");
checkAndGetLeaf(result, data_node, "ddns-send-updates");
checkAndGetLeaf(result, data_node, "ddns-ttl-percent");
checkAndGetLeaf(result, data_node, "ddns-update-on-renew");
checkAndGetLeaf(result, data_node, "ddns-use-conflict-resolution");
checkAndGetLeaf(result, data_node, "decline-probation-period");
@@ -234,6 +237,8 @@ TranslatorConfig::getServerKeaDhcpCommon(DataNode const& data_node) {
checkAndGet(result, data_node, "compatibility",
[&](DataNode const& node) -> ElementPtr const {
ElementPtr compatibility(Element::createMap());
checkAndGetLeaf(compatibility, node, "exclude-first-last-24");
checkAndGetLeaf(compatibility, node, "ignore-dhcp-server-identifier");
checkAndGetLeaf(compatibility, node, "ignore-rai-link-selection");
checkAndGetLeaf(compatibility, node, "lenient-option-parsing");
return compatibility;
@@ -337,6 +342,7 @@ TranslatorConfig::getServerKeaDhcp4() {
checkAndGetLeaf(result, config, "echo-client-id");
checkAndGetLeaf(result, config, "match-client-id");
checkAndGetLeaf(result, config, "next-server");
checkAndGetLeaf(result, config, "offer-lifetime");
checkAndGetLeaf(result, config, "server-hostname");
// Handle interfaces.
@@ -371,6 +377,7 @@ TranslatorConfig::getServerKeaDhcp6() {
checkAndGetLeaf(result, config, "mac-sources");
checkAndGetLeaf(result, config, "max-preferred-lifetime");
checkAndGetLeaf(result, config, "min-preferred-lifetime");
checkAndGetLeaf(result, config, "pd-allocator");
checkAndGetLeaf(result, config, "preferred-lifetime");
checkAndGetLeaf(result, config, "relay-supplied-options");
@@ -486,6 +493,7 @@ TranslatorConfig::setConfigKea6(ConstElementPtr elem) {
void
TranslatorConfig::setServerKeaDhcpCommon(string const& xpath,
ConstElementPtr elem) {
checkAndSetLeaf(elem, xpath, "allocator", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "cache-max-age", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "cache-threshold", LeafBaseType::Dec64);
checkAndSetLeaf(elem, xpath, "calculate-tee-times", LeafBaseType::Bool);
@@ -495,6 +503,7 @@ TranslatorConfig::setServerKeaDhcpCommon(string const& xpath,
checkAndSetLeaf(elem, xpath, "ddns-qualifying-suffix", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "ddns-replace-client-name", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "ddns-send-updates", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "ddns-ttl-percent", LeafBaseType::Dec64);
checkAndSetLeaf(elem, xpath, "ddns-update-on-renew", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "ddns-use-conflict-resolution", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "dhcp4o6-port", LeafBaseType::Uint16);
@@ -661,8 +670,15 @@ TranslatorConfig::setServerKeaDhcp4(ConstElementPtr elem) {
checkAndSetLeaf(elem, xpath, "echo-client-id", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "match-client-id", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "next-server", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "offer-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "server-hostname", LeafBaseType::String);
ConstElementPtr compatibility(elem->get("compatibility"));
if (compatibility) {
checkAndSetLeaf(compatibility, xpath + "/compatibility", "exclude-first-last-24", LeafBaseType::Bool);
checkAndSetLeaf(compatibility, xpath + "/compatibility", "ignore-dhcp-server-identifier", LeafBaseType::Bool);
}
ConstElementPtr if_config = elem->get("interfaces-config");
if (if_config) {
string const if_cfg_xpath(xpath + "/interfaces-config");
@@ -691,6 +707,7 @@ TranslatorConfig::setServerKeaDhcp6(ConstElementPtr elem) {
checkAndSetLeaf(elem, xpath, "data-directory", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "max-preferred-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "min-preferred-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "pd-allocator", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "preferred-lifetime", LeafBaseType::Uint32);
checkAndSetLeafList(elem, xpath, "mac-sources", LeafBaseType::String);

View File

@@ -66,10 +66,13 @@ TranslatorDatabase::getDatabaseKea(DataNode const& data_node) {
checkAndGetLeaf(result, data_node, "password");
checkAndGetLeaf(result, data_node, "persist");
checkAndGetLeaf(result, data_node, "port");
checkAndGetLeaf(result, data_node, "read-timeout");
checkAndGetLeaf(result, data_node, "readonly");
checkAndGetLeaf(result, data_node, "reconnect-wait-time");
checkAndGetLeaf(result, data_node, "tcp-user-timeout");
checkAndGetLeaf(result, data_node, "trust-anchor");
checkAndGetLeaf(result, data_node, "user");
checkAndGetLeaf(result, data_node, "write-timeout");
checkAndGetAndJsonifyLeaf(result, data_node, "user-context");
@@ -118,9 +121,12 @@ TranslatorDatabase::setDatabaseKea(string const& xpath,
checkAndSetLeaf(elem, xpath, "persist", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "port", LeafBaseType::Uint16);
checkAndSetLeaf(elem, xpath, "readonly", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "read-timeout", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "reconnect-wait-time", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "tcp-user-timeout", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "trust-anchor", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "user", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "write-timeout", LeafBaseType::Uint32);
checkAndSetUserContext(elem, xpath);

View File

@@ -67,6 +67,7 @@ TranslatorSharedNetwork::getSharedNetworkKea(DataNode const& data_node,
getMandatoryLeaf(result, data_node, "name");
checkAndGetLeaf(result, data_node, "allocator");
checkAndGetLeaf(result, data_node, "cache-max-age");
checkAndGetLeaf(result, data_node, "cache-threshold");
checkAndGetLeaf(result, data_node, "calculate-tee-times");
@@ -77,6 +78,7 @@ TranslatorSharedNetwork::getSharedNetworkKea(DataNode const& data_node,
checkAndGetLeaf(result, data_node, "ddns-qualifying-suffix");
checkAndGetLeaf(result, data_node, "ddns-replace-client-name");
checkAndGetLeaf(result, data_node, "ddns-send-updates");
checkAndGetLeaf(result, data_node, "ddns-ttl-percent");
checkAndGetLeaf(result, data_node, "ddns-update-on-renew");
checkAndGetLeaf(result, data_node, "ddns-use-conflict-resolution");
checkAndGetLeaf(result, data_node, "hostname-char-replacement");
@@ -119,6 +121,7 @@ TranslatorSharedNetwork::getSharedNetworkKea(DataNode const& data_node,
checkAndGetLeaf(result, data_node, "interface-id");
checkAndGetLeaf(result, data_node, "max-preferred-lifetime");
checkAndGetLeaf(result, data_node, "min-preferred-lifetime");
checkAndGetLeaf(result, data_node, "pd-allocator");
checkAndGetLeaf(result, data_node, "preferred-lifetime");
checkAndGetLeaf(result, data_node, "rapid-commit");
} else if (subsel == "subnet4") {
@@ -126,6 +129,7 @@ TranslatorSharedNetwork::getSharedNetworkKea(DataNode const& data_node,
checkAndGetLeaf(result, data_node, "boot-file-name");
checkAndGetLeaf(result, data_node, "match-client-id");
checkAndGetLeaf(result, data_node, "next-server");
checkAndGetLeaf(result, data_node, "offer-lifetime");
checkAndGetLeaf(result, data_node, "server-hostname");
}
@@ -158,6 +162,7 @@ TranslatorSharedNetwork::setSharedNetworkKea(string const& xpath,
string const& subsel) {
// Skip key "name".
checkAndSetLeaf(elem, xpath, "allocator", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "cache-max-age", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "cache-threshold", LeafBaseType::Dec64);
checkAndSetLeaf(elem, xpath, "calculate-tee-times", LeafBaseType::Bool);
@@ -168,6 +173,7 @@ TranslatorSharedNetwork::setSharedNetworkKea(string const& xpath,
checkAndSetLeaf(elem, xpath, "ddns-qualifying-suffix", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "ddns-replace-client-name", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "ddns-send-updates", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "ddns-ttl-percent", LeafBaseType::Dec64);
checkAndSetLeaf(elem, xpath, "ddns-update-on-renew", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "ddns-use-conflict-resolution", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "hostname-char-replacement", LeafBaseType::String);
@@ -217,6 +223,7 @@ TranslatorSharedNetwork::setSharedNetworkKea(string const& xpath,
checkAndSetLeaf(elem, xpath, "interface-id", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "max-preferred-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "min-preferred-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "pd-allocator", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "preferred-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "rapid-commit", LeafBaseType::Bool);
} else {
@@ -224,6 +231,7 @@ TranslatorSharedNetwork::setSharedNetworkKea(string const& xpath,
checkAndSetLeaf(elem, xpath, "boot-file-name", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "match-client-id", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "next-server", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "offer-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "server-hostname", LeafBaseType::String);
}
}

View File

@@ -100,6 +100,7 @@ TranslatorSubnet::getSubnetKea(DataNode const& data_node) {
getMandatoryLeaf(result, data_node, "id");
getMandatoryLeaf(result, data_node, "subnet");
checkAndGetLeaf(result, data_node, "allocator");
checkAndGetLeaf(result, data_node, "cache-max-age");
checkAndGetLeaf(result, data_node, "cache-threshold");
checkAndGetLeaf(result, data_node, "calculate-tee-times");
@@ -110,6 +111,7 @@ TranslatorSubnet::getSubnetKea(DataNode const& data_node) {
checkAndGetLeaf(result, data_node, "ddns-qualifying-suffix");
checkAndGetLeaf(result, data_node, "ddns-replace-client-name");
checkAndGetLeaf(result, data_node, "ddns-send-updates");
checkAndGetLeaf(result, data_node, "ddns-ttl-percent");
checkAndGetLeaf(result, data_node, "ddns-update-on-renew");
checkAndGetLeaf(result, data_node, "ddns-use-conflict-resolution");
checkAndGetLeaf(result, data_node, "hostname-char-replacement");
@@ -157,6 +159,7 @@ TranslatorSubnet::getSubnetKea(DataNode const& data_node) {
checkAndGetLeaf(result, data_node, "interface-id");
checkAndGetLeaf(result, data_node, "max-preferred-lifetime");
checkAndGetLeaf(result, data_node, "min-preferred-lifetime");
checkAndGetLeaf(result, data_node, "pd-allocator");
checkAndGetLeaf(result, data_node, "preferred-lifetime");
checkAndGetLeaf(result, data_node, "rapid-commit");
@@ -169,6 +172,7 @@ TranslatorSubnet::getSubnetKea(DataNode const& data_node) {
checkAndGetLeaf(result, data_node, "boot-file-name");
checkAndGetLeaf(result, data_node, "match-client-id");
checkAndGetLeaf(result, data_node, "next-server");
checkAndGetLeaf(result, data_node, "offer-lifetime");
checkAndGetLeaf(result, data_node, "server-hostname");
checkAndGetDivergingLeaf(result, data_node, "4o6-interface", "subnet-4o6-interface");
@@ -240,6 +244,7 @@ TranslatorSubnet::setSubnetKea(string const& xpath, ConstElementPtr elem) {
}
setItem(xpath + "/subnet", subnet, LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "allocator", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "cache-max-age", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "cache-threshold", LeafBaseType::Dec64);
checkAndSetLeaf(elem, xpath, "calculate-tee-times", LeafBaseType::Bool);
@@ -250,6 +255,7 @@ TranslatorSubnet::setSubnetKea(string const& xpath, ConstElementPtr elem) {
checkAndSetLeaf(elem, xpath, "ddns-qualifying-suffix", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "ddns-replace-client-name", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "ddns-send-updates", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "ddns-ttl-percent", LeafBaseType::Dec64);
checkAndSetLeaf(elem, xpath, "ddns-update-on-renew", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "ddns-use-conflict-resolution", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "hostname-char-replacement", LeafBaseType::String);
@@ -299,6 +305,7 @@ TranslatorSubnet::setSubnetKea(string const& xpath, ConstElementPtr elem) {
checkAndSetLeaf(elem, xpath, "interface-id", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "max-preferred-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "min-preferred-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "pd-allocator", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "preferred-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "rapid-commit", LeafBaseType::Bool);
@@ -311,6 +318,7 @@ TranslatorSubnet::setSubnetKea(string const& xpath, ConstElementPtr elem) {
checkAndSetLeaf(elem, xpath, "boot-file-name", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "match-client-id", LeafBaseType::Bool);
checkAndSetLeaf(elem, xpath, "next-server", LeafBaseType::String);
checkAndSetLeaf(elem, xpath, "offer-lifetime", LeafBaseType::Uint32);
checkAndSetLeaf(elem, xpath, "server-hostname", LeafBaseType::String);
checkAndSetDivergingLeaf(elem, xpath, "4o6-interface", "subnet-4o6-interface", LeafBaseType::String);

View File

@@ -22,9 +22,9 @@ static const std::unordered_map<std::string, std::string> YANG_REVISIONS = {
{ "ietf-dhcpv6-options", "2018-09-04" },
{ "ietf-dhcpv6-server", "2018-09-04" },
{ "kea-types", "2019-08-12" },
{ "kea-dhcp-types", "2022-12-27" },
{ "kea-dhcp4-server", "2022-12-27" },
{ "kea-dhcp6-server", "2022-12-27" },
{ "kea-dhcp-types", "2023-05-31" },
{ "kea-dhcp4-server", "2023-05-31" },
{ "kea-dhcp6-server", "2023-05-31" },
{ "kea-ctrl-agent", "2019-08-12" },
{ "kea-dhcp-ddns", "2022-07-27" }
}; // YANG_REVISIONS

View File

@@ -13,9 +13,9 @@ yangmodules_list += ietf-inet-types@2013-07-15.yang
yangmodules_list += ietf-yang-types@2013-07-15.yang
yangmodules_list += kea-ctrl-agent@2019-08-12.yang
yangmodules_list += kea-dhcp-ddns@2022-07-27.yang
yangmodules_list += kea-dhcp-types@2022-12-27.yang
yangmodules_list += kea-dhcp4-server@2022-12-27.yang
yangmodules_list += kea-dhcp6-server@2022-12-27.yang
yangmodules_list += kea-dhcp-types@2023-05-31.yang
yangmodules_list += kea-dhcp4-server@2023-05-31.yang
yangmodules_list += kea-dhcp6-server@2023-05-31.yang
yangmodules_list += kea-types@2019-08-12.yang
yangmodules_list += keatest-module@2022-11-30.yang

View File

@@ -1 +0,0 @@
c7c3d49249be8027851050a5a11e888053253e4ef3863d9acd125062160e7190

View File

@@ -0,0 +1 @@
6dc9841ffdbd2b6af5c3d3fc5b065faf5da5fb2a6e4aa353bd354a912c1a8ff2

View File

@@ -1 +0,0 @@
2bef760a61ec2054c0398c75e31fb20208620d2bf7353cdf3c33fbebca32becb

View File

@@ -0,0 +1 @@
1ca854318d678439af345dec3bc76a784fdc7a07ccb632e17819a4e32183b577

View File

@@ -1 +0,0 @@
25e02b2d4347dd95b58b8f397d3d506bf94483a3b2d85a90eb062aa1e52e3a5a

View File

@@ -0,0 +1 @@
a0d0f5874e8d57775b6b813d448aacf8c0b9eb8056160ecd79f5b597fe80dcf3

View File

@@ -16,6 +16,13 @@ module kea-dhcp-types {
description "This file defines some commonly used Kea DHCP types and
groupings.";
revision 2023-05-31 {
description "Added allocator, ddns-ttl-percent, exclude-first-last-24,
ignore-dhcp-server-identifier, offer-lifetime, pd-allocator,
read-timeout, tcp-user-timeout, write-timeout.
Removed contact-points, keyspace.";
}
revision 2022-12-27 {
description "Added never-send.";
}
@@ -257,15 +264,15 @@ module kea-dhcp-types {
units "milliseconds";
description "Database connection timeout.";
}
leaf contact-points {
type string;
description "Cassandra database contact points, a coma separated list of
IP addresses.";
leaf read-timeout {
type uint32;
units "seconds";
description "timeout for database read operations";
}
leaf keyspace {
type string;
description "Cassandra database keyspace (this is Cassandra's equivalent
of a database name).";
leaf write-timeout {
type uint32;
units "seconds";
description "timeout for database write operations";
}
leaf max-reconnect-tries {
type uint32;
@@ -290,6 +297,11 @@ module kea-dhcp-types {
type boolean;
description "TCP nodelay for the database connection.";
}
leaf tcp-user-timeout {
type uint32;
units "seconds";
description "TCP user timeout while communicating with the database";
}
leaf consistency {
type string;
description "Consistency level.";
@@ -997,11 +1009,10 @@ module kea-dhcp-types {
}
}
grouping compatibility {
container compatibility {
grouping common-compatibility {
description
"parameters for triggering behaviors compatible with broken or
non-compliant clients, relays or other agents";
"parameters that are common to DHCPv4 and DHCPv6 for triggering behaviors compatible
with broken or non-compliant clients, relays or other agents";
leaf ignore-rai-link-selection {
type boolean;
description
@@ -1013,6 +1024,21 @@ module kea-dhcp-types {
"Enable more lenient option parsing.";
}
}
grouping v4-compatibility {
description
"DHCPv4-specific parameters for triggering behaviors compatible
with broken or non-compliant clients, relays or other agents";
leaf exclude-first-last-24 {
type boolean;
description
"Whether .0 and .255 addresses should be excluded from allocation in subnets with a prefix length of 24 or less.";
}
leaf ignore-dhcp-server-identifier {
type boolean;
description
"Whether the DHCP Server Identifier should be ignored in ingress packets.";
}
}
grouping ddns-generated-prefix {
@@ -1064,6 +1090,17 @@ module kea-dhcp-types {
}
}
grouping ddns-ttl-percent {
leaf ddns-ttl-percent {
type decimal64 {
fraction-digits 18;
range "0 .. 1";
}
description
"the percentage of the leases's lifetime to use for the DNS TTL";
}
}
grouping ddns-update-on-renew {
leaf ddns-update-on-renew {
type boolean;
@@ -1178,4 +1215,28 @@ module kea-dhcp-types {
"the maximum number of samples which are kept";
}
}
grouping allocator {
leaf allocator {
type string;
description
"the allocation strategy for IP addresses";
}
}
grouping pd-allocator {
leaf pd-allocator {
type string;
description
"the allocation strategy for delegted prefixes";
}
}
grouping offer-lifetime {
leaf offer-lifetime {
type uint32;
description
"the lifetime of leases temporarily allocated on DISCOVER";
}
}
}

View File

@@ -12,7 +12,7 @@ module kea-dhcp4-server {
}
import kea-dhcp-types {
prefix dhcp;
revision-date 2022-12-27;
revision-date 2023-05-31;
}
organization "Internet Systems Consortium";
@@ -20,6 +20,13 @@ module kea-dhcp4-server {
description "This model defines a YANG data model that can be
used to configure and manage a Kea DHCPv4 server.";
revision 2023-05-31 {
description "Added allocator, ddns-ttl-percent, exclude-first-last-24,
ignore-dhcp-server-identifier, offer-lifetime,
read-timeout, tcp-user-timeout, write-timeout.
Removed contact-points, keyspace.";
}
revision 2022-12-27 {
description "Added never-send to option-data.";
}
@@ -177,6 +184,8 @@ module kea-dhcp4-server {
key id;
ordered-by user;
description "List of IPv4 subnets.";
uses dhcp:allocator;
uses dhcp:offer-lifetime;
uses dhcp:valid-lifetime;
uses dhcp:min-valid-lifetime;
uses dhcp:max-valid-lifetime;
@@ -254,6 +263,7 @@ module kea-dhcp4-server {
uses dhcp:ddns-qualifying-suffix;
uses dhcp:ddns-replace-client-name;
uses dhcp:ddns-send-updates;
uses dhcp:ddns-ttl-percent;
uses dhcp:ddns-update-on-renew;
uses dhcp:ddns-use-conflict-resolution;
uses dhcp:hostname-char-replacement;
@@ -276,6 +286,7 @@ module kea-dhcp4-server {
uses dhcp:class-test;
uses dhcp:template-test;
uses dhcp:class-only-if-required;
uses dhcp:offer-lifetime;
uses option-def-list;
uses option-data-list;
uses next-server;
@@ -344,6 +355,8 @@ module kea-dhcp4-server {
// config true;
description "Contains DHCPv4 server configuration.";
uses dhcp:allocator;
uses dhcp:offer-lifetime;
uses dhcp:valid-lifetime;
uses dhcp:min-valid-lifetime;
uses dhcp:max-valid-lifetime;
@@ -360,6 +373,8 @@ module kea-dhcp4-server {
description "List of IPv4 shared networks.";
uses dhcp:network-name;
uses subnet4-list;
uses dhcp:allocator;
uses dhcp:offer-lifetime;
uses dhcp:network-interface;
uses dhcp:renew-timer;
uses dhcp:rebind-timer;
@@ -390,6 +405,7 @@ module kea-dhcp4-server {
uses dhcp:ddns-qualifying-suffix;
uses dhcp:ddns-replace-client-name;
uses dhcp:ddns-send-updates;
uses dhcp:ddns-ttl-percent;
uses dhcp:ddns-update-on-renew;
uses dhcp:ddns-use-conflict-resolution;
uses dhcp:hostname-char-replacement;
@@ -487,13 +503,17 @@ module kea-dhcp4-server {
uses kea:loggers;
uses dhcp:cache-max-age;
uses dhcp:cache-threshold;
uses dhcp:compatibility;
container compatibility {
uses dhcp:common-compatibility;
uses dhcp:v4-compatibility;
}
uses dhcp:ddns-generated-prefix;
uses dhcp:ddns-override-client-update;
uses dhcp:ddns-override-no-update;
uses dhcp:ddns-qualifying-suffix;
uses dhcp:ddns-replace-client-name;
uses dhcp:ddns-send-updates;
uses dhcp:ddns-ttl-percent;
uses dhcp:ddns-update-on-renew;
uses dhcp:ddns-use-conflict-resolution;
uses dhcp:ip-reservations-unique;

View File

@@ -12,7 +12,7 @@ module kea-dhcp6-server {
}
import kea-dhcp-types {
prefix dhcp;
revision-date 2022-12-27;
revision-date 2023-05-31;
}
organization "Internet Systems Consortium";
@@ -20,6 +20,12 @@ module kea-dhcp6-server {
description "This model defines a YANG data model that can be
used to configure and manage a Kea DHCPv6 server.";
revision 2023-05-31 {
description "Added allocator, ddns-ttl-percent, offer-lifetime,
pd-allocator, read-timeout, tcp-user-timeout, write-timeout.
Removed contact-points, keyspace.";
}
revision 2022-12-27 {
description "Added never-send to option-data.";
}
@@ -180,6 +186,8 @@ module kea-dhcp6-server {
key id;
ordered-by user;
description "List of IPv6 subnets.";
uses dhcp:allocator;
uses dhcp:pd-allocator;
uses preferred-lifetime;
uses min-preferred-lifetime;
uses max-preferred-lifetime;
@@ -289,6 +297,7 @@ module kea-dhcp6-server {
uses dhcp:ddns-qualifying-suffix;
uses dhcp:ddns-replace-client-name;
uses dhcp:ddns-send-updates;
uses dhcp:ddns-ttl-percent;
uses dhcp:ddns-update-on-renew;
uses dhcp:ddns-use-conflict-resolution;
uses dhcp:hostname-char-replacement;
@@ -378,6 +387,8 @@ module kea-dhcp6-server {
// config true;
description "Contains DHCPv6 server configuration.";
uses dhcp:allocator;
uses dhcp:pd-allocator;
uses data-directory;
uses preferred-lifetime;
uses min-preferred-lifetime;
@@ -397,6 +408,8 @@ module kea-dhcp6-server {
key name;
uses dhcp:network-name;
description "List of IPv4 shared networks.";
uses dhcp:allocator;
uses dhcp:pd-allocator;
uses subnet6-list;
uses dhcp:network-interface;
uses interface-id {
@@ -436,6 +449,7 @@ module kea-dhcp6-server {
uses dhcp:ddns-qualifying-suffix;
uses dhcp:ddns-replace-client-name;
uses dhcp:ddns-send-updates;
uses dhcp:ddns-ttl-percent;
uses dhcp:ddns-update-on-renew;
uses dhcp:ddns-use-conflict-resolution;
uses dhcp:hostname-char-replacement;
@@ -551,13 +565,16 @@ module kea-dhcp6-server {
uses kea:loggers;
uses dhcp:cache-max-age;
uses dhcp:cache-threshold;
uses dhcp:compatibility;
container compatibility {
uses dhcp:common-compatibility;
}
uses dhcp:ddns-generated-prefix;
uses dhcp:ddns-override-client-update;
uses dhcp:ddns-override-no-update;
uses dhcp:ddns-qualifying-suffix;
uses dhcp:ddns-replace-client-name;
uses dhcp:ddns-send-updates;
uses dhcp:ddns-ttl-percent;
uses dhcp:ddns-update-on-renew;
uses dhcp:ddns-use-conflict-resolution;
uses dhcp:ip-reservations-unique;

View File

@@ -0,0 +1,75 @@
#!/bin/sh
# Copyright (C) 2023 Internet Systems Consortium, Inc. ("ISC")
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# This script can be used to bump up YANG module revisions.
# Exit with error if commands exit with non-zero and if undefined variables are
# used.
set -eu
# Print usage.
# Expressions don't expand in single quotes, use double quotes for that. [SC2016]
# shellcheck disable=SC2016
print_usage() {
printf \
'Usage: %s {{options}}
Options:
[-d|--debug] enable debug mode, showing every executed command
[-h|--help] print usage (this text)
' \
"$(basename "${0}")"
}
# Parse parameters.
while test ${#} -gt 0; do
case "${1}" in
# [-d|--debug] enable debug mode, showing every executed command
'-d'|'--debug') set -vx ;;
# [-h|--help] print usage (this text)
'-h'|'--help') print_usage; exit 0 ;;
# Unrecognized argument
*)
printf "${red}ERROR: Unrecognized argument '%s'${reset}\\n" "${1}" 1>&2; print_usage; exit 1 ;;
esac; shift
done
#------------------------------------------------------------------------------#
# Get script path.
script_path=$(cd "$(dirname "${0}")" && pwd)
pushd "${script_path}/.."
# Get the last wednesday of the month.
this_month=$(date +%Y-%m)
wednesday=$(date -dwednesday +%Y-%m-%d)
i="${wednesday}"
while test "$(date -d "${i}" +%Y-%m)" == "${this_month}"; do
wednesday="${i}"
i=$(date -d"${wednesday} +7 days" +%Y-%m-%d)
done
# For all modules that were modified in this branch:
# - rename it to the new revision
# - change its name in Makefile.am
# - change its name in yang_revisions.h
ca=$(git merge-base origin/master $(git rev-parse --abbrev-ref HEAD))
for module in $(git diff "${ca}" --name-only . | grep -E '\.yang$'); do
module=$(basename "${module}")
new_module="$(printf '%s' "${module}" | sed "s/@.*\.yang/@${wednesday}.yang/g")"
if test "${module}" != "${new_module}"; then
mv "${module}" "${new_module}"
sed -i "s/${module}/${new_module}/g" ./Makefile.am
sed -i "s/${module}/${new_module}/g" ../../../lib/yang/yang_revisions.h
fi
done
# Regenerate hashes.
rm hashes/*
./utils/check-hashes.sh -a