Kea issueshttps://gitlab.isc.org/isc-projects/kea/-/issues2024-03-27T13:50:40Zhttps://gitlab.isc.org/isc-projects/kea/-/issues/3225when applying MT settings from CB the libs compatibility is not rechecked2024-03-27T13:50:40ZRazvan Becheriuwhen applying MT settings from CB the libs compatibility is not recheckedMT disabled -\> check libs (success) -\> load libs -\> CB load config -\> MT enabled -\> no checking of libs -\> could end up with non MT compatible libs loaded and used in MTMT disabled -\> check libs (success) -\> load libs -\> CB load config -\> MT enabled -\> no checking of libs -\> could end up with non MT compatible libs loaded and used in MTnext-stable-3.0https://gitlab.isc.org/isc-projects/kea/-/issues/3224CB commands should use processDhcp[4|6]Config to validate content of global p...2024-02-01T14:46:08ZRazvan BecheriuCB commands should use processDhcp[4|6]Config to validate content of global parameterssetting global parameters using CB commands does not check if values are valid. They are merged into the current config with no check. this could have an undesired effect on the running server.
global scalar parameters v4:
```plaintext...setting global parameters using CB commands does not check if values are valid. They are merged into the current config with no check. this could have an undesired effect on the running server.
global scalar parameters v4:
```plaintext
if ( (config_pair.first == "renew-timer") ||
(config_pair.first == "rebind-timer") ||
(config_pair.first == "valid-lifetime") ||
(config_pair.first == "min-valid-lifetime") ||
(config_pair.first == "max-valid-lifetime") ||
(config_pair.first == "decline-probation-period") ||
(config_pair.first == "dhcp4o6-port") ||
(config_pair.first == "echo-client-id") ||
(config_pair.first == "match-client-id") ||
(config_pair.first == "authoritative") ||
(config_pair.first == "next-server") ||
(config_pair.first == "server-hostname") ||
(config_pair.first == "boot-file-name") ||
(config_pair.first == "server-tag") ||
(config_pair.first == "reservation-mode") ||
(config_pair.first == "reservations-global") ||
(config_pair.first == "reservations-in-subnet") ||
(config_pair.first == "reservations-out-of-pool") ||
(config_pair.first == "calculate-tee-times") ||
(config_pair.first == "t1-percent") ||
(config_pair.first == "t2-percent") ||
(config_pair.first == "cache-threshold") ||
(config_pair.first == "cache-max-age") ||
(config_pair.first == "hostname-char-set") ||
(config_pair.first == "hostname-char-replacement") ||
(config_pair.first == "ddns-send-updates") ||
(config_pair.first == "ddns-override-no-update") ||
(config_pair.first == "ddns-override-client-update") ||
(config_pair.first == "ddns-replace-client-name") ||
(config_pair.first == "ddns-generated-prefix") ||
(config_pair.first == "ddns-qualifying-suffix") ||
(config_pair.first == "ddns-update-on-renew") ||
(config_pair.first == "ddns-use-conflict-resolution") ||
(config_pair.first == "ddns-conflict-resolution-mode") ||
(config_pair.first == "ddns-ttl-percent") ||
(config_pair.first == "store-extended-info") ||
(config_pair.first == "statistic-default-sample-count") ||
(config_pair.first == "statistic-default-sample-age") ||
(config_pair.first == "early-global-reservations-lookup") ||
(config_pair.first == "ip-reservations-unique") ||
(config_pair.first == "reservations-lookup-first") ||
(config_pair.first == "parked-packet-limit") ||
(config_pair.first == "allocator") ||
(config_pair.first == "offer-lifetime") ) {
CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first,
config_pair.second);
continue;
}
```
global scalar parameters v6:
```plaintext
if ( (config_pair.first == "renew-timer") ||
(config_pair.first == "rebind-timer") ||
(config_pair.first == "preferred-lifetime") ||
(config_pair.first == "min-preferred-lifetime") ||
(config_pair.first == "max-preferred-lifetime") ||
(config_pair.first == "valid-lifetime") ||
(config_pair.first == "min-valid-lifetime") ||
(config_pair.first == "max-valid-lifetime") ||
(config_pair.first == "decline-probation-period") ||
(config_pair.first == "dhcp4o6-port") ||
(config_pair.first == "server-tag") ||
(config_pair.first == "reservation-mode") ||
(config_pair.first == "reservations-global") ||
(config_pair.first == "reservations-in-subnet") ||
(config_pair.first == "reservations-out-of-pool") ||
(config_pair.first == "calculate-tee-times") ||
(config_pair.first == "t1-percent") ||
(config_pair.first == "t2-percent") ||
(config_pair.first == "cache-threshold") ||
(config_pair.first == "cache-max-age") ||
(config_pair.first == "hostname-char-set") ||
(config_pair.first == "hostname-char-replacement") ||
(config_pair.first == "ddns-send-updates") ||
(config_pair.first == "ddns-override-no-update") ||
(config_pair.first == "ddns-override-client-update") ||
(config_pair.first == "ddns-replace-client-name") ||
(config_pair.first == "ddns-generated-prefix") ||
(config_pair.first == "ddns-qualifying-suffix") ||
(config_pair.first == "ddns-update-on-renew") ||
(config_pair.first == "ddns-use-conflict-resolution") ||
(config_pair.first == "ddns-conflict-resolution-mode") ||
(config_pair.first == "ddns-ttl-percent") ||
(config_pair.first == "store-extended-info") ||
(config_pair.first == "statistic-default-sample-count") ||
(config_pair.first == "statistic-default-sample-age") ||
(config_pair.first == "early-global-reservations-lookup") ||
(config_pair.first == "ip-reservations-unique") ||
(config_pair.first == "reservations-lookup-first") ||
(config_pair.first == "parked-packet-limit") ||
(config_pair.first == "allocator") ||
(config_pair.first == "pd-allocator") ) {
CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first,
config_pair.second);
continue;
}
```
lists might not be complete. need to check.
only few parameters are checked - one is valid-lifetime:
```plaintext
void
sanityChecks(const SrvConfigPtr& cfg, const ConstElementPtr& global) {
/// Global lifetime sanity checks
cfg->sanityChecksLifetime("valid-lifetime");
/// Shared network sanity checks
const SharedNetwork4Collection* networks = cfg->getCfgSharedNetworks4()->getAll();
if (networks) {
sharedNetworksSanityChecks(*networks, global->get("shared-networks"));
}
}
```
some are not checked even by processDhcp\[4|6\]Config:
```plaintext
if (allow_packet_park) {
// Get the parking limit. Parsing should ensure the value is present.
uint32_t parked_packet_limit = 0;
data::ConstElementPtr ppl = CfgMgr::instance().getCurrentCfg()->
getConfiguredGlobal(CfgGlobals::PARKED_PACKET_LIMIT);
if (ppl) {
parked_packet_limit = ppl->intValue();
}
if (parked_packet_limit) {
auto const& parking_lot =
ServerHooks::getServerHooks().getParkingLotPtr(hook_label);
if (parking_lot && (parking_lot->size() >= parked_packet_limit)) {
// We can't park it so we're going to throw it on the floor.
LOG_DEBUG(packet4_logger, DBGLVL_PKT_HANDLING, parking_lot_full_msg)
.arg(parked_packet_limit)
.arg(query->getLabel());
isc::stats::StatsMgr::instance().addValue("pkt4-receive-drop",
static_cast<int64_t>(1));
rsp.reset();
return;
}
}
```backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/3137Audit revision conflicts between IPv4 and IPv6 due to shared session variable2023-11-23T14:37:03ZMaurice MakaayAudit revision conflicts between IPv4 and IPv6 due to shared session variable**Describe the bug**
For creating audit revisions, separate paths exists for DHCP4 and DHCP6 auditing. The paths are not fully separated though. The two implementations make use of some shared session variables, amongst which `audit_rev...**Describe the bug**
For creating audit revisions, separate paths exists for DHCP4 and DHCP6 auditing. The paths are not fully separated though. The two implementations make use of some shared session variables, amongst which `audit_revision_id`. These session variables tightly couple the two paths, which can lead to conflicts.
**To Reproduce**
Here's an example scenario for a conflict:
```
kea=# SELECT createAuditRevisionDHCP4(CURRENT_TIMESTAMP,'all','test', true); -- audit_revision_id = 1
kea=# SELECT createAuditRevisionDHCP6(CURRENT_TIMESTAMP,'all','test', true); -- audit_revision_id = 1
kea=# SELECT createAuditRevisionDHCP4(CURRENT_TIMESTAMP,'all','test', true); -- audit_revision_id = 2
kea=# INSERT INTO dhcp4_client_class (name) VALUES ('something'); -- uses audit_revision_id = 2, ok
kea=# INSERT INTO dhcp6_client_class (name) VALUES ('something'); -- uses audit_revision_id = 2, fail
```
Because the global revision id now points at 2, but only `dhcp6_audit` with id 1 exists, we get:
```
ERROR: insert or update on table "dhcp6_audit" violates foreign key constraint "fk_dhcp6_audit_revision"
DETAIL: Key (revision_id)=(2) is not present in table "dhcp6_audit_revision".
CONTEXT: SQL statement "INSERT INTO dhcp6_audit (object_type, object_id, modification_type, revision_id)
VALUES (object_type_val, object_id_val,
(SELECT id FROM modification WHERE modification_type = modification_type_val),
audit_revision_id)"
PL/pgSQL function createauditentrydhcp6(character varying,bigint,character varying) line 11 at SQL statement
SQL statement "SELECT createAuditEntryDHCP6('dhcp6_client_class', NEW.id, 'create')"
PL/pgSQL function func_dhcp6_client_class_ains() line 4 at PERFORM
```
In this case, the INSERT breaks, because the DHCP6 audit record points to a non-existent `dhcp6_audit_revision` id.
Another scenario is possible, where coincidentally the incorrect revision id does exist. In that case, the audit will be assigned to an old revision in the audit trail, changing history. An example scenario for this one:
```
kea=# SELECT createAuditRevisionDHCP4(CURRENT_TIMESTAMP,'all','test', true); -- audit_revision_id = 1
kea=# INSERT INTO dhcp4_client_class (name) VALUES ('one'); -- uses audit_revision_id = 1, ok
kea=# SELECT createAuditRevisionDHCP4(CURRENT_TIMESTAMP,'all','test', true); -- audit_revision_id = 2
kea=# INSERT INTO dhcp4_client_class (name) VALUES ('two'); -- uses audit_revision_id = 2, ok
kea=# SELECT createAuditRevisionDHCP6(CURRENT_TIMESTAMP,'all','test', true); -- audit_revision_id = 1
kea=# INSERT INTO dhcp6_client_class (name) VALUES ('something'); -- uses audit_revision_id = 1, ok
kea=# INSERT INTO dhcp4_client_class (name) VALUES ('three'); -- uses audit_revision_id = 1, fail
```
**Expected behavior**
The audit revisions should be independent and use their own specific session variables, instead of shared ones.
When running the first scenario from the reproduction scenario:
- It must not fail
- The DHCP6 change must be logged in `dhcp6_audit` with `revision_id` = 1
- The DHCP4 change must be logged in `dhcp4_audit` with `revision_id` = 2
When running the second scenario:
- DHCP4 client class 'one' must be related to `dhcp4_audit' with `revision_id` = 1
- DHCP4 client class 'two' must be related to `dhcp4_audit' with `revision_id` = 2
- DHCP4 client class 'three' must be related to `dhcp4_audit' with `revision_id` = 2
- DHCP6 client class 'something' must be related to `dhcp6_audit' with `revision_id` = 1
**Environment:**
- Kea version: 2.5.3 and before
- Affects both MySQL and PostgreSQL
**Work-around**
To prevent issues with the current database schema, make sure that DHCP4 and DHCP6 updates are separated in the query sequence:
- create DHCP4 audit revision
- perform all DHCP4 updates
- create DHCP6 audit revision
- perform all DHCP6 updates
**Contacting you**
You can reach me at account-gitlab-isc@makaay.nloutstandinghttps://gitlab.isc.org/isc-projects/kea/-/issues/2777Add ddns-update-on-renew ddns-use-conflict-resolution support to CB2023-07-31T13:40:08ZThomas MarkwalderAdd ddns-update-on-renew ddns-use-conflict-resolution support to CBConfig backend does not support the following DDNS behavioral parameters. They need to be added.
ddns-update-on-renew
ddns-use-conflict-resolution
This work could be combined with related #225 which would add TTL calculation knob(s) a...Config backend does not support the following DDNS behavioral parameters. They need to be added.
ddns-update-on-renew
ddns-use-conflict-resolution
This work could be combined with related #225 which would add TTL calculation knob(s) and a knob to suppress DHCID generation when conflict resolution is disabled #455 & #2276. This ticket could be used to add the knobs through to CB and the schema(s), implementing the behavior would be done in their respective tickets.next-stable-2.6https://gitlab.isc.org/isc-projects/kea/-/issues/2641Kea 2.0.3 - Error to build custom options when set config with data from data...2023-07-31T14:08:36Zpablitobckpbl.mendez@gmail.comKea 2.0.3 - Error to build custom options when set config with data from database (Config Backend)When we set custom options from Ctrl Agent config-set end-point (server-tag empty), by example:
```json
{
"option-def": [{
"array": false,
"code": 1,
"encapsulate": "",
"name": "primar...When we set custom options from Ctrl Agent config-set end-point (server-tag empty), by example:
```json
{
"option-def": [{
"array": false,
"code": 1,
"encapsulate": "",
"name": "primary-dhcp-server",
"record-types": "",
"space": "cablelabs-client-configuration",
"type": "ipv4-address"
},
{
"array": false,
"code": 2,
"encapsulate": "",
"name": "secondary-dhcp-server",
"record-types": "",
"space": "cablelabs-client-configuration",
"type": "ipv4-address"
},
{
"array": false,
"code": 122,
"encapsulate": "cablelabs-client-configuration",
"name": "cablelabs-client-configuration",
"record-types": "",
"space": "dhcp4",
"type": "empty"
}
]
}
```
```json
{
"shared-networks": [{
"calculate-tee-times": true,
"client-class": "CM-63",
"name": "CM-63",
"next-server": "10.0.2.8",
"option-data": [{
"always-send": true,
"code": 1,
"csv-format": true,
"data": "10.0.0.123",
"space": "cablelabs-client-configuration"
},
{
"always-send": true,
"code": 2,
"csv-format": true,
"data": "10.0.0.216",
"space": "cablelabs-client-configuration"
},
{
"always-send": false,
"code": 122,
"csv-format": false,
"data": "",
"space": "dhcp4"
}]
}
]
}
}
```
When we execute a config-get, we receive same like this, work fine, and send option 122.1 and 122.2 to Cable Modem:
```json
{
"shared-networks": [{
"calculate-tee-times": true,
"client-class": "CM-63",
"name": "CM-63",
"next-server": "10.0.2.8",
"option-data": [{
"always-send": true,
"code": 1,
"csv-format": true,
"data": "10.0.0.123",
"name": "primary-dhcp-server",
"space": "cablelabs-client-configuration"
},
{
"always-send": true,
"code": 2,
"csv-format": true,
"data": "10.0.0.216",
"name": "secondary-dhcp-server",
"space": "cablelabs-client-configuration"
},
{
"always-send": false,
"code": 122,
"csv-format": false,
"data": "01040A00007B02040A0000D8",
"name": "cablelabs-client-configuration",
"space": "dhcp4"
}
]
}]
}
```
But if we set parameters by config backend with same data (on config-set set server-tag = "KEA" to indicate to build from database config), server not send 122.1 and 122.2 to Cable Modem whe this put option 122 on require list on Discover.
Config-get return this:
```json
{
"shared-networks": [
{
"calculate-tee-times": true,
"client-class": "CM-63",
"name": "CM-63",
"next-server": "10.0.2.8",
"option-data": [
{
"always-send": true,
"code": 1,
"csv-format": true,
"data": "10.0.0.123",
"space": "cablelabs-client-configuration"
},
{
"always-send": true,
"code": 2,
"csv-format": true,
"data": "10.0.0.216",
"space": "cablelabs-client-configuration"
},
{
"always-send": false,
"code": 122,
"csv-format": false,
"data": "",
"space": "dhcp4"
}
]
}
```
**Problems:**
- option 122 -> parameter data is not present, and parameter name is not present
- option 122.1 and 122.2 -> parameter name is not present
**Note:** When we insert configuration on database config backend, whe use Auditrevision to inform Kea the config are changed.
I thinks Kea build bad config when load this from database, and build Ok when we set by config-set and not set any server-tag.
**Any suggestions?**next-stable-2.6https://gitlab.isc.org/isc-projects/kea/-/issues/2603add support for template-classes in CB2023-07-31T12:45:46ZRazvan Becheriuadd support for template-classes in CBNow that template classes are implemented, it would be good to extend the Config Backend support to cover them.Now that template classes are implemented, it would be good to extend the Config Backend support to cover them.backlogRazvan BecheriuRazvan Becheriuhttps://gitlab.isc.org/isc-projects/kea/-/issues/2416Add support for storing long options in backends2023-07-31T12:45:46ZRazvan BecheriuAdd support for storing long options in backendsRelated to #2227.
the host manager and config backend should support storing long options.
to achieve this we need to call split before writing to database and call fuse after reading from the databaseRelated to #2227.
the host manager and config backend should support storing long options.
to achieve this we need to call split before writing to database and call fuse after reading from the databasebackloghttps://gitlab.isc.org/isc-projects/kea/-/issues/2343CB migration assistant2024-03-21T12:21:07ZPeter DaviesCB migration assistant---
name: CB migration assistant
about: A method to migrate to CB
---
When users need to migrate from a file-based json configuration to the Configuration Backend, or to migrate between the supported databases, it would be useful if **...---
name: CB migration assistant
about: A method to migrate to CB
---
When users need to migrate from a file-based json configuration to the Configuration Backend, or to migrate between the supported databases, it would be useful if **Kea** provided some tool to support this.
Possible methods could:
The implementation of two new **CB** commands ie:
**remote-server4-config-get**
and
**remote-server4-config-set**
Or alternatively the enhancement of the **kea-admin** tool to provide this functionality.
[RT #17095](https://support.isc.org/Ticket/Display.html?id=17095)
[RT #20167](https://support.isc.org/Ticket/Display.html?id=20167)
[RT #21508](https://support.isc.org/Ticket/Display.html?id=21508)
Requested migrations: MySQL -> Postgres, also config to MySQL, config to PostgreSQL.next-stable-3.0https://gitlab.isc.org/isc-projects/kea/-/issues/2307use reference when calling getTags2022-05-30T11:19:30ZRazvan Becheriuuse reference when calling getTagsthe following code should be optimised:
```
auto tags = server_selector.getTags();
for (auto tag : tags) {
```
to
```
const auto& tags = server_selector.getTags();
for (const auto& tag : tags) {
```
the ge...the following code should be optimised:
```
auto tags = server_selector.getTags();
for (auto tag : tags) {
```
to
```
const auto& tags = server_selector.getTags();
for (const auto& tag : tags) {
```
the getTags returns a copy of a set:
```
std::set<data::ServerTag> getTags() const {
return (tags_);
}
```outstandinghttps://gitlab.isc.org/isc-projects/kea/-/issues/2029Readonly Mysql configuration backend2023-07-17T13:58:20ZVitalij OsypenkoReadonly Mysql configuration backendHi, it is not possible to set CB as readonly, it breaks using views with data from different database. E.g.:
```
ERROR [kea-dhcp4.dhcp4/87919.139919704906176] DHCP4_CONFIG_LOAD_FAIL configuration error using file: /etc/kea/kea-dhcp4.conf...Hi, it is not possible to set CB as readonly, it breaks using views with data from different database. E.g.:
```
ERROR [kea-dhcp4.dhcp4/87919.139919704906176] DHCP4_CONFIG_LOAD_FAIL configuration error using file: /etc/kea/kea-dhcp4.conf, reason: during update from config backend database: unable to prepare MySQL statement <INSERT INTO dhcp4_options ( code, value, formatted_value, space, persistent, dhcp_client_class, dhcp4_subnet_id, scope_id, user_context, shared_network_name, pool_id, modification_ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)>, reason: The target table dhcp4_options of the INSERT is not insertable-into
```
Kea DHCPv4 server version 1.9.10outstandinghttps://gitlab.isc.org/isc-projects/kea/-/issues/1803Inheritance for DHCPv6 options to work like DHCPv4 (shared network vs global HR)2021-05-13T15:09:49ZVicky Riskvicky@isc.orgInheritance for DHCPv6 options to work like DHCPv4 (shared network vs global HR)**Problem**
DHCP options for host reservations in a backend database can be specified by “shared-network-name” to override a global host reservation, however this does not appear to work for V6.
**Desired Solution**
V6 options for share...**Problem**
DHCP options for host reservations in a backend database can be specified by “shared-network-name” to override a global host reservation, however this does not appear to work for V6.
**Desired Solution**
V6 options for shared network name should override any definition that may be present in the global host reservation, as is currently the case for v4.
I tried to find related issues - possibly #39, #1253 might be relatedoutstandinghttps://gitlab.isc.org/isc-projects/kea/-/issues/1600option with all server tag are not revealed after deleting similar option wit...2022-11-02T15:10:20ZMichal Nowikowskioption with all server tag are not revealed after deleting similar option with another tag that was covering itscenario:
1. add option with tag all
2. add option with tag abc
3. set server to pull config with tag abc
4. get config - it shows option with tag abc
5. delete option with tag abc
6. get config - it should show option with tag all but i...scenario:
1. add option with tag all
2. add option with tag abc
3. set server to pull config with tag abc
4. get config - it shows option with tag abc
5. delete option with tag abc
6. get config - it should show option with tag all but it shows no options
Forge tests:
- tests/dhcpv4/kea_only/config_backend/test_cb_v4_server_tag.py::test_server_tag_global_option4
- tests/dhcpv6/kea_only/config_backend/test_cb_v6_server_tag.py::test_server_tag_global_optionbacklogMarcin SiodelskiMarcin Siodelskihttps://gitlab.isc.org/isc-projects/kea/-/issues/1253subnet inheritance inconsistencies2022-11-02T15:10:18ZFrancis Dupontsubnet inheritance inconsistenciesThere are some inconsistencies (nothing critical so not a bug but lost opportunities to simplify code and improve performance) in the way subnets are handles for at least relay, interface name and v6 interface id:
- relay is a direct fi...There are some inconsistencies (nothing critical so not a bug but lost opportunities to simplify code and improve performance) in the way subnets are handles for at least relay, interface name and v6 interface id:
- relay is a direct field of Network, is derived in syntax parsing and checked for both subnet and parent shared network for subnet selection.
- interface name (getIface) is inherited using getProperty, checked in sharedNetworksSanityChecks after syntax parsing and checked for both subnet and parent shared network for subnet selection.
- interface id (v6 option) is inherited using getProperty and subject of #652.
Ideas are:
- get rid of the syntax derivation when possible (in particular when the other inheritance mechanism applies)
- avoid spurious inheritance in CB cmds (aka #652)
- apply a subset of sharedNetworksSanityChecks in merging
- at the opposite use inheritance to make only subnet level checks in subnet selection (note this means a subnet should be attached to its parent shared network before being added to the global subnet container)
Related to #513 (sharedNetworksSanityChecks not applied to config backend) and #554 (select subnet performance).backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/1099Support for hostname-char like parameters in the CB2022-11-02T15:10:19ZMarcin SiodelskiSupport for hostname-char like parameters in the CBThe ticket #946 added support for some DDNS specific parameters into the Config Backend. However, it did not include the following two:
- hostname-char-replacement
- hostname-char-set
Those two must be added as well at global, subnet an...The ticket #946 added support for some DDNS specific parameters into the Config Backend. However, it did not include the following two:
- hostname-char-replacement
- hostname-char-set
Those two must be added as well at global, subnet and shared network level.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/995500 IPv4 address limit2022-11-02T15:10:17ZGhost User500 IPv4 address limit**Describe the bug**
When more than 500 IPv4 addresses are configured on NICs that KEA uses, no configuration changes can be made using hooks. kea-dhcp4 goes to 100% CPU load.
**To Reproduce**
Steps to reproduce the behavior:
1. Run Kea...**Describe the bug**
When more than 500 IPv4 addresses are configured on NICs that KEA uses, no configuration changes can be made using hooks. kea-dhcp4 goes to 100% CPU load.
**To Reproduce**
Steps to reproduce the behavior:
1. Run Kea (dhcpv4) with MySQL backend for CB, leases and hosts and configured to use a NIC with 500+ IPv4 addresses on it
2. Try to change configuration for example like:
curl -X POST -H "Content-Type: application/json" -d '{ "command": "remote-network4-set", "service": [ "dhcp4" ], "arguments": { "shared-networks": [ { "name": "test-1", "interface": "ens37", "valid-lifetime": 60 } ], "remote": { "type": "mysql" }, "server-tags": [ "all" ] } }' http://localhost:8080/
or
curl -X POST -H "Content-Type: application/json" -d '{ "command": "reservation-add", "service": [ "dhcp4" ], "arguments": { "reservation": { "subnet-id": 20001, "hw-address": "1a:2b:3c:4d:5e:6f", "ip-address": "10.0.1.2" } } }' http://localhost:8080/
3. The server then goes to 100% CPU load and does not change the configuration as requested.
4. Response: [ { "result": 1, "text": "unable to forward command to the dhcp4 service: Operation canceled. The server is likely to be offline" } ]
**Expected behavior**
A clear and concise description of what you expected to happen:
The server should change the configuration as requested and not keep using 100% CPU.
**Environment:**
- Kea version: 1.6.0
- OS: Debian 10.1 x64
- MySQL backend 8.2, library 10.3.17, Memfile backend 2.1
- libdhcp_mysql_cb.so, libdhcp_cb_cmds.so, libdhcp_host_cmds.so are loaded
**Additional Information**
Everything works as expected with up to 499 IPv4 addresses on the NIC used by KEA. We did not test IPv6. We also did not test if the server is still able to answer to DHCP requests in the failed state.
**Contacting you**
You can send me an e-mail to stephan@bahr-it.combackloghttps://gitlab.isc.org/isc-projects/kea/-/issues/902Configuration Backend in DHCPv4 dhcp4_subnet not display2019-10-03T19:12:39ZGhost UserConfiguration Backend in DHCPv4 dhcp4_subnet not display![image](/uploads/78df9669353f2e41db6aac33097f6b65/image.png)
this is sql dhcp4_options tables
this is post confi-get , not code 3 display in subnet id 216,99
"subnet4": [
{
"4o6-interface": "...![image](/uploads/78df9669353f2e41db6aac33097f6b65/image.png)
this is sql dhcp4_options tables
this is post confi-get , not code 3 display in subnet id 216,99
"subnet4": [
{
"4o6-interface": "",
"4o6-interface-id": "",
"4o6-subnet": "",
"id": 99,
"option-data": [
{
"always-send": false,
"code": 3,
"csv-format": true,
"data": "192.168.0.1",
"name": "routers",
"space": "dhcp4"
}
],
"pools": [
{
"option-data": [],
"pool": "192.168.0.10-192.168.0.100"
}
],
"relay": {
"ip-addresses": []
},
"reservations": [],
"subnet": "192.168.0.0/24"
},
{
"4o6-interface": "",
"4o6-interface-id": "",
"4o6-subnet": "",
"id": 100,
"option-data": [],
"pools": [
{
"option-data": [],
"pool": "192.168.1.10-192.168.1.100"
}
],
"relay": {
"ip-addresses": []
},
"reservations": [],
"subnet": "192.168.1.0/24"
},
{
"4o6-interface": "",
"4o6-interface-id": "",
"4o6-subnet": "",
"id": 216,
"option-data": [
{
"always-send": false,
"code": 6,
"csv-format": true,
"data": "172.22.1.253",
"name": "domain-name-servers",
"space": "dhcp4"
},
{
"always-send": false,
"code": 4,
"csv-format": true,
"data": "10.10.10.50",
"name": "time-servers",
"space": "dhcp4"
}
],
"pools": [
{
"option-data": [],
"pool": "172.30.216.10-172.30.216.20"
}
],
"relay": {
"ip-addresses": []
},
"reservations": [],
"subnet": "172.30.216.0/21"
}
],outstandinghttps://gitlab.isc.org/isc-projects/kea/-/issues/849Kea MySQL CB accepts an option for non-existing subnet2022-11-02T15:10:18ZMarcin SiodelskiKea MySQL CB accepts an option for non-existing subnetIt is possible to set a DHCP option with the `remote-option4-subnet-set` for non-existing subnet. It is possible that the same issue is present for other similar commands.It is possible to set a DHCP option with the `remote-option4-subnet-set` for non-existing subnet. It is possible that the same issue is present for other similar commands.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/822Consider returning a list of shared networks, subnets etc for which options h...2022-11-02T15:10:17ZMarcin SiodelskiConsider returning a list of shared networks, subnets etc for which options have been setThe #418 introduced commands that allow for adding new option within the shared network, subnet etc. The response contains a list of options that have been set but it lacks the list of parent objects. We may consider also returning the p...The #418 introduced commands that allow for adding new option within the shared network, subnet etc. The response contains a list of options that have been set but it lacks the list of parent objects. We may consider also returning the parent objects but this is not critical in 1.6.0 release. Therefore, creating this ticket to address this in the future.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/808server-tag is itself a global parameter2021-10-20T09:44:18ZFrancis Dupontserver-tag is itself a global parameterserver-tag is itself a global parameter so someone could have the bad idea to manage it using the config backend.
The sanity check fro global parameters in CB must check the global parameter is not server-tag. Note this applies for all ...server-tag is itself a global parameter so someone could have the bad idea to manage it using the config backend.
The sanity check fro global parameters in CB must check the global parameter is not server-tag. Note this applies for all global parameter commands even get will not lead to a disaster...outstandinghttps://gitlab.isc.org/isc-projects/kea/-/issues/739More metadata checks in MySQL CB unit tests2019-08-08T16:23:54ZFrancis DupontMore metadata checks in MySQL CB unit testsAs we already do in CB cmds hook add more metadata checks in MySQL CB unit tests (reference https://gitlab.isc.org/isc-projects/kea/merge_requests/424#note_68391)As we already do in CB cmds hook add more metadata checks in MySQL CB unit tests (reference https://gitlab.isc.org/isc-projects/kea/merge_requests/424#note_68391)outstanding