Kea issueshttps://gitlab.isc.org/isc-projects/kea/-/issues2022-11-02T15:08:41Zhttps://gitlab.isc.org/isc-projects/kea/-/issues/37revamp subnet sanity checks2022-11-02T15:08:41ZGhost Userrevamp subnet sanity checksOn one side decides what should be checked:
- interface in shared network
- "same subnet" (cf #5423)
- malformed prefix
etc
And apply this to documentation and code in:
- plain subnet configuration
- in shared network subnet config...On one side decides what should be checked:
- interface in shared network
- "same subnet" (cf #5423)
- malformed prefix
etc
And apply this to documentation and code in:
- plain subnet configuration
- in shared network subnet configuration
- subnet REST API
Should be done after #5423 (definition of "same subnet") and client-class in pools.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/3310Documentation should include more examples with IPv6 addresses in URLs2024-03-25T12:34:33ZFrancis DupontDocumentation should include more examples with IPv6 addresses in URLsThe reason is the syntax is no so trivial... I suggest to add at least one in ARM (hooks-ha.rst) and in kea6 examples.The reason is the syntax is no so trivial... I suggest to add at least one in ARM (hooks-ha.rst) and in kea6 examples.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/3160Too many nullable fields in DB schema?2023-11-23T14:48:53ZDavid KraeutmannToo many nullable fields in DB schema?I'm writing an admin tool for the Kea DB and noticed that a lot of fields in lease4/lease6 are nullable even when they shouldn't be. This adds a lot of handling overhead.
For example, in lease4, most of the columns are nullable, but onl...I'm writing an admin tool for the Kea DB and noticed that a lot of fields in lease4/lease6 are nullable even when they shouldn't be. This adds a lot of handling overhead.
For example, in lease4, most of the columns are nullable, but only relay_id and remote_id are actually possibly set to NULL in the Kea code.
What is the design decision behind that?backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/3018motd (message of the day) in kea2023-08-24T13:35:43ZTomek Mrugalskimotd (message of the day) in keaWe could implement a message in Kea, the if configured, would be logged when Kea is started or reconfigured. Trivial to implement.
This would be useful in Docker. We need to put some config file in a Docker image, with the expectation t...We could implement a message in Kea, the if configured, would be logged when Kea is started or reconfigured. Trivial to implement.
This would be useful in Docker. We need to put some config file in a Docker image, with the expectation that the user will replace it with a real config. If the user doesn't, Kea should start, but print something like "please edit your config file, map your volume when starting Docker image, etc.". The text would be configurable in a config file.
This is similar to Unix idea of `/etc/motd` (its content is printed as a welcome message to the user every time he/she logs in).backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/2875perfdhcp enhancements: do not allow -6 -J usage without -A2023-06-15T16:13:14ZPiotrek Zadrogaperfdhcp enhancements: do not allow -6 -J usage without -AWhile working on #2834 it occurred to me that using `perfdhcp -6 -J` without `-A1` makes no sense.
It could be considered as an exception and some nice hint could be returned to the user.While working on #2834 it occurred to me that using `perfdhcp -6 -J` without `-A1` makes no sense.
It could be considered as an exception and some nice hint could be returned to the user.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/2747unrecognized compiler flags2023-09-26T14:30:24ZAndrei Pavelandrei@isc.orgunrecognized compiler flagsCompiling Kea with the GNU compiler (`g++`) mentions an unrecognized flag because it's not compatible with said compiler:
```
cc1plus: note: unrecognized command-line option ‘-Wno-unused-private-field’ may have been intended to silence ...Compiling Kea with the GNU compiler (`g++`) mentions an unrecognized flag because it's not compatible with said compiler:
```
cc1plus: note: unrecognized command-line option ‘-Wno-unused-private-field’ may have been intended to silence earlier diagnostics
```
This flag is added in a Makefile. There are a few others like this.
Some include it inside the scope of `if USE_GXX`. I would instead remove these flags from Makefiles. Including a flag only for a library is arbitrary. If it should be included, it should either be for the entire repo, or not at all.
People who want to enable custom flags can use the `CXXFLAGS` environment variable which should be set before running `./configure`.
```
export CXXFLAGS="-Wno-unused-private-field"
./configure
```backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/2721naming inconsistency between keactrl parameters and the servers acted upon2023-07-31T12:45:46ZAndrei Pavelandrei@isc.orgnaming inconsistency between keactrl parameters and the servers acted uponIt's unclear what parameter should be specified to, for example, start `kea-dhcp6`. The usage message is not clear on that:
```
$ keactrl
ERROR/keactrl: missing command
usage is keactrl command [-c keactrl-config-file] [-s server[,serve...It's unclear what parameter should be specified to, for example, start `kea-dhcp6`. The usage message is not clear on that:
```
$ keactrl
ERROR/keactrl: missing command
usage is keactrl command [-c keactrl-config-file] [-s server[,server,..]]
commands: start stop reload status version
```
They end up being different than the server names. Without the leading `kea-`, and with dashes turned to underscores:
```
$ keactrl version -s dhcp4,dhcp6,dhcp_ddns,ctrl_agent,netconf
keactrl: 2.3.4-git
kea-dhcp4: 2.3.4-git
kea-dhcp6: 2.3.4-git
kea-dhcp-ddns: 2.3.4-git
kea-ctrl-agent: 2.3.4-git
kea-netconf: 2.3.4-git
```
There is a mention of the parameters in `man keactrl`:
```
-s|--server server[,server,...]
Specifies a subset of the enabled servers to which the command should be issued. The list of servers should be separated by commas, with
no intervening spaces. Acceptable values are:
dhcp4 DHCPv4 server (kea-dhcp4).
dhcp6 DHCPv6 server (kea-dhcp6).
dhcp_ddns
DHCP DDNS server (kea-dhcp-ddns).
ctrl_agent
Control Agent (kea-ctrl-agent).
netconf
NETCONF agent (kea-netconf).
all All servers, including NETCONF if it was configured to be built. This is the default.
```
It would be nice to have the parameter names be the same as the server names to avoid ambiguity.
First reported here: https://lists.isc.org/pipermail/kea-users/2022-July/003497.htmlbackloghttps://gitlab.isc.org/isc-projects/kea/-/issues/2695Regression: configure --with-sysrepo was changed to 4 different arguments.2023-01-19T14:59:24ZFrancis DupontRegression: configure --with-sysrepo was changed to 4 different arguments.The request is to be able to configure libyang and sysrepo with cpp using only one argument, either sysrepo to keep backward compatibility or a new one as --with-netconf (proposed by @andrei)The request is to be able to configure libyang and sysrepo with cpp using only one argument, either sysrepo to keep backward compatibility or a new one as --with-netconf (proposed by @andrei)backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/2540kea4 drops packet when server id option is included twice, but because of wro...2023-04-06T12:02:31ZWlodzimierz Wencelkea4 drops packet when server id option is included twice, but because of wrong reasonWe have pretty complicated test for fqdn sanitisation, we came across weird problem. When Kea gets v4 packet that include server id option twice - it's get dropped but Kea logs:
```
2022-08-19 02:35:41.529 DEBUG [kea-dhcp4.bad-packets/16...We have pretty complicated test for fqdn sanitisation, we came across weird problem. When Kea gets v4 packet that include server id option twice - it's get dropped but Kea logs:
```
2022-08-19 02:35:41.529 DEBUG [kea-dhcp4.bad-packets/169499.139645022918400] DHCP4_PACKET_DROP_0003 [hwtype=1 00:1f:d0:00:00:22], cid=[no info], tid=0x8c57ee, from interface enp0s9: it contains a foreign server identifier
```
interesting part is that value of server id is correct.
packet:
```
###[ Ethernet ]###
dst = ff:ff:ff:ff:ff:ff
src = 08:00:27:6d:ee:67
type = IPv4
###[ IP ]###
version = 4
ihl = None
tos = 0x0
len = None
id = 1
flags =
frag = 0
ttl = 64
proto = udp
chksum = None
src = 0.0.0.0
dst = 255.255.255.255
\options \
###[ UDP ]###
sport = bootpc
dport = bootps
len = None
chksum = None
###[ BOOTP ]###
op = BOOTREQUEST
htype = 1
hlen = 6
hops = 0
xid = 9197550
secs = 0
flags =
ciaddr = 0.0.0.0
yiaddr = 0.0.0.0
siaddr = 0.0.0.0
giaddr = 0.0.0.0
chaddr = b'\x00\x1f\xd0\x00\x00"'
sname = b''
file = b''
options = 'c\\x82Sc'
###[ DHCP options ]###
options = [message-type='request' server_id=192.168.50.252 server_id=192.168.50.252 requested_addr=192.168.50.11 client_FQDN='\x01\x00\x00client2.four.example.com.' end]
```backloghttps://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/2380BSD and Solaris do not bind on ff02::1:2 when joining the multicast group2023-07-17T13:58:20ZRazvan BecheriuBSD and Solaris do not bind on ff02::1:2 when joining the multicast groupRelated to #1716.Related to #1716.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/1933Makefile cleanup: remove workaround for 11yo boost problem2022-11-02T15:10:20ZTomek MrugalskiMakefile cleanup: remove workaround for 11yo boost problemThere's a tradition that doesn't want to die. A long time ago someone added a work around for boost 1.40 problem. The referenced boost ticket was closed 11 years ago.
```
# Some versions of GCC warn about some versions of Boost regardin...There's a tradition that doesn't want to die. A long time ago someone added a work around for boost 1.40 problem. The referenced boost ticket was closed 11 years ago.
```
# Some versions of GCC warn about some versions of Boost regarding
# missing initializer for members in its posix_time.
# https://svn.boost.org/trac/boost/ticket/3477
# But older GCC compilers don't have the flag.
AM_CXXFLAGS += $(WARNING_NO_MISSING_FIELD_INITIALIZERS_CFLAG)
```
Bugs are not whisky... 11yo is bad.
It seems this was cleaned up in the core code, but not in premium.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/1859Coverity complains about some function return value not being checked2022-11-02T15:10:19ZRazvan BecheriuCoverity complains about some function return value not being checked```
/lib/dhcpsrv/alloc_engine.cc
void AllocEngine::reclaimLeaseInDatabase - Calling deleteLease without checking return value (as is done elsewhere 8 out of 9 times).
/src/hooks/dhcp/high_availability/ha_service.cc
HAService::asyncSyncL...```
/lib/dhcpsrv/alloc_engine.cc
void AllocEngine::reclaimLeaseInDatabase - Calling deleteLease without checking return value (as is done elsewhere 8 out of 9 times).
/src/hooks/dhcp/high_availability/ha_service.cc
HAService::asyncSyncLeasesInternal - Calling addLease without checking return value (as is done elsewhere 5 out of 6 times).
/src/lib/asiolink/tcp_socket.h
class TCPSocket isUsable
check_return: - Calling
this->socket_>receive(boost::asio::mutable_buffers_1(boost::asio::buffer(data, 2UL)), 2, ec) without checking return value. This library function may fail and return an error code. [Note: The source code implementation of the function has been overridden by a builtin model.]
socket_.receive(boost::asio::buffer(data, sizeof(data)),
boost::asio::socket_base::message_peek,
ec);
```backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/1841[ISC-support #17393] Feature request - Global v6 PD pools2022-11-02T17:18:51ZCathy Almond[ISC-support #17393] Feature request - Global v6 PD poolsCurrently it is possible to configure overlapping PD pools between v6 subnets (or even use the same exact PD pool entirely for all subnets).
This 'appears' to work OK. Our review of the situation however was that without more extensive...Currently it is possible to configure overlapping PD pools between v6 subnets (or even use the same exact PD pool entirely for all subnets).
This 'appears' to work OK. Our review of the situation however was that without more extensive testing and research, we couldn't say 'this is supported' because what we have here is something that is essentially a happy accident. It looks like it does probably work - but only because the check for whether a PD is already allocated, doesn't check the subnet ID!
The statistics on the other hand, are going to be very peculiar, because they'll have allocations for the same space coming from different subnets. They *might* work if the administrator does a manual combination of them across the subnets, but taken standalone, they won't make much sense.
This is a request for this feature to be tested, stats fixed, and to be properly supported. There is a customer/operational use-case for it explained in [Support Ticket #17393](https://support.isc.org/Ticket/Display.html?id=17393)backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/1640OptionDataDef uses raw pointers (should be strings or smartptrs)2023-07-31T12:45:46ZTomek MrugalskiOptionDataDef uses raw pointers (should be strings or smartptrs)The following structures use raw pointers in `src/lib/dhcp/option_data_types.h`:
```
struct OptionDefParams {
const char* name; // option name
uint16_t code; // option code
cons...The following structures use raw pointers in `src/lib/dhcp/option_data_types.h`:
```
struct OptionDefParams {
const char* name; // option name
uint16_t code; // option code
const char* space; // option space
OptionDataType type; // data type
bool array; // is array
const OptionDataType* records; // record fields
size_t records_size; // number of fields in a record
const char* encapsulates; // option space encapsulated by the
// particular option.
};
/// @brief Encapsulation of option definition parameters and the structure size.
struct OptionDefParamsEncapsulation {
const struct OptionDefParams* optionDefParams; // parameters structure
const int size; // structure size
const char* space; // option space
};
```
Those structures should be converted to a safer approach - either plain std::string or a smartptr if some data sharing is needed.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/1547custom option examples2022-11-02T15:10:19ZTomek Mrugalskicustom option examplesWe should improve the custom option examples. Here are some requests:
1. [custom option 191](https://lists.isc.org/pipermail/kea-users/2019-November/002570.html)We should improve the custom option examples. Here are some requests:
1. [custom option 191](https://lists.isc.org/pipermail/kea-users/2019-November/002570.html)backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/1545perfdhcp command line examples are needed2022-11-02T15:10:19ZTomek Mrugalskiperfdhcp command line examples are neededOne person complained about [lack of perfdhcp command line examples](https://lists.isc.org/pipermail/kea-users/2019-August/002512.html) on kea-users, which gotten a reply with someone pointing out to some ancient document Tomek and Marc...One person complained about [lack of perfdhcp command line examples](https://lists.isc.org/pipermail/kea-users/2019-August/002512.html) on kea-users, which gotten a reply with someone pointing out to some ancient document Tomek and Marcin wrote in 2012.
We should either add a new section to the ARM explaining basics of perfdhcp, or extend current man page. I think long term ARM section would be better, as we may evolve it into performance tips.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/1538missing new global parameters in documentation2022-11-02T15:10:17ZFrancis Dupontmissing new global parameters in documentationIn the DHCPv4 8.14.1. Supported Parameters: authoritative, ddns-use-conflict-resolution, ip-reservations-unique, min and max valid-lifetime, statistic-default-sample-age, statistic-default-sample-count and store-extended-info.
In the DH...In the DHCPv4 8.14.1. Supported Parameters: authoritative, ddns-use-conflict-resolution, ip-reservations-unique, min and max valid-lifetime, statistic-default-sample-age, statistic-default-sample-count and store-extended-info.
In the DHCPv6 9.19.1. Supported Parameters: ddns-use-conflict-resolution, min and max preferred and valid lifetime, ip-reservations-unique, statistic-default-sample-age, statistic-default-sample-count and store-extended-info.
Two other points: I did not put in these lists the server-tag because it is not really settable. And please consider to make the lists sorted in alphabetical order.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/1326Move more code to std::chrono2022-11-02T15:10:19ZFrancis DupontMove more code to std::chronoFollowup of #1174Followup of #1174backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/1317Remove boost code that's available in c++112022-11-02T15:10:17ZTomek MrugalskiRemove boost code that's available in c++11We moved to C++11 quite a long time ago. However, there are still many constructs in the code that use boost equivalents:
- [ ] BOOST_FOREACH => for (var : container)
- [ ] bind placeholdersWe moved to C++11 quite a long time ago. However, there are still many constructs in the code that use boost equivalents:
- [ ] BOOST_FOREACH => for (var : container)
- [ ] bind placeholdersbacklog