# Kea 1.7.10, July 29th 2020, Release Notes Welcome to Kea 1.7.10, a monthly development release of Kea and possibly the last development release before the upcoming stable version 1.8.0. As with any other development release, use this with caution. Development releases are not recommended for production use. The most significant changes introduced in this version are: 1. **Packages with Kea Migration Assistant (Keama)**. Keama is a tool that assists migration from ISC DHCP to Kea by using an ISC DHCP config file to generate a JSON config file in a format accepted by Kea. The configuration syntax and some core architectural designs are different, so the conversion does not cover 100% of cases, but at least it gives users a running start. Previously, to get the tool, a manual compilation was necessary, but now it is available as an RPM or DEB package (#1081). 2. **Removed obsolete configuration of top-level logging and other daemons**. Very early Kea versions assumed that configuration for all daemons (DHCPv4, DHCPv6, DDNS, CA) were to be stored in the same file, sharing a top-level logging entry. This was convenient in the early days, but it was fundamentally incompatible when commands such as `config-set` and `config-write` were introduced, as one daemon would overwrite other daemons' configurations. This was deprecated a long time ago, and since 1.6.0, Kea produced warnings when an old configuration was detected. This backward compatibility is now removed and Kea now prints an error if old configurations are detected (#916). 3. **Improved performance of subnet selection**. One of the crucial steps of packet processing in Kea is subnet selection, as Kea needs to determine which subnet to use to allocate leases. Prior to this change, Kea walked through subnets in the order configured, which was fine for a smaller number of subnets, but for large deployments that counted subnets in thousands this was inefficient. The data structure is now a multi-index container, which should help with large deployments. The side effect is that subnets are now evaluated in the order of their subnet-id. This generally should not affect any users, except in cases where people relied on the earlier evaluation order (as specified in the config file) (#553, #1265). 4. **Multithreading tuning**. Two new sections have been added in the ARM regarding DHCPv4 and DHCPv6 performance tuning for multithreading. We also added a link to our performance report that is updated weekly (#1285). Our Developer's Guide has been updated as well (#996, #1264). 5. **Better recovery after failed config**. Kea's configuration process is complex and can fail in various ways. Depending on the type of failure (e.g. syntax error, removal of a dynamic network interface, database connection failure, etc.), Kea may not be able to recover to its working state. Several improvements have been made: Kea now handles the interface misconfiguration better (#1330); when recovery is not possible, Kea clearly reports a critical message that it is unable to provide service; and message documentation now has a better explanation of the available steps needed to recover the service (#1166, #507). 6. **DNS support for lease4-del and lease6-del commands**. Kea previously provided `lease4-del` and `lease6-del` commands. However, when removing leases, there was no way to instruct Kea to clean up the corresponding DNS entries. It is now possible (#544). 7. **Cross-compilation for Raspberry Pi**. We are working on a solution to be able to efficiently run Kea on Pis. This is a long process, but we're getting there, step by step. In this release we improved the makefiles and added a section in the Developer's Guide regarding cross-compilation (#1221). We also updated the parameters to the `./configure` script to better support cross-compilation (#1223). 8. **Better handling for a large number of interfaces**. Believe it or not, there are users who need more than 64k interfaces in their system. Kea previously failed on interfaces with ifindex greater than 65535. It does not anymore (#1302). 9. **LFC process now runs with lower priority**. One user was concerned with high CPU utilization when Lease File Cleanup was running. The LFC process is now being started with lower priority, meaning the OS will deprioritize it. The amount of work needed has not changed, but the load should be spread over a longer period of time, making it less noticeable (#1311). 10. **Negative statistics and getNextRow failed in MySQL** The underlying problem causing some statistics to become negative has been fixed in the 1.7.9 release. However, there was no good way to fix the already-broken statistic after migration to 1.7.9. The `kea-admin` tool now provides the `stats-recount` command to correct the statistics (#1196). 11. **Moved to standard chrono library in C++11**. Previously Kea used the POSIX time library from boost. The code now uses the standard chrono library from C++11. In addition to the benefit of using a standard library, there's a small related performance improvement as the standard lib does fewer conversions (#1174). 12. **Assorted bugfixes and improvements** GNU make-specific features were removed, which should improve compatibility with FreeBSD and possibly other BSD clones (#1248). We fixed a bug in leasequery that could cause some unit-tests to fail (#1344), and fixed a compilation problem with the musl library that affected Apline 3.10 builds (#1337). We fixed a test problem in the stats library that caused the tests to fail if run in a specific order (#1293). The config backend has better time granularity; previously, it could have missed configuration updates if multiple updates were done during the same second (#1247). And we improved the hook libraries unloading routine that previously could have caused a crash on shutdown in some rare cases (#1282, #1279). 13. **Code of conduct**. Kea now has a code of conduct adapted from the Django project. Please see the `code_of_conduct.md` file or use [this link](https://gitlab.isc.org/isc-projects/kea/-/blob/master/code_of_condu ct.md). ## Known Issues Our internal testing is aware of only one outstanding issue, somewhat related to MT and HA: in some specific circumstances (notably, when Kea has received a packet and is still processing it before sending a response while the application is being shut down), the application may fail during shutdown. The underlying problem is related to improper hooks library de-initialization and has existed for a long time; it is not strictly related to MT. The issue is very rarely reproducible in our tests. However, due to the parallel nature of MT, the likelihood of triggering the problem, especially under heavy load, is greater. Details are in ticket #1279. This problem is expected to be fixed before the next stable (1.8.0) version is released. ## Release Model The Kea project has a significant production deployment base with users who are looking for stability, rather than a constant stream of new "bleeding-edge" features. At the same time, we want to continue developing the software and add some new powerful, but difficult-to-implement, features. To meet both of these requirements we have both Stable and Development branches. Stable releases are what you would expect: stable, released infrequently, without new features or significant changes, very well-tested. These can be identified by an even-numbered major version number. The current stable release is 1.6.3, with a major version of 1.6, and minor version 2. If we discover important bugs that require fixing, we may release 1.6.4, but that will be determined on a case-by-case basis. The next major stable version will be 1.8.0, followed by 2.0.0 in the future. Development releases can be easily identified by an odd major version number: for example, 1.7.9 is a development release. In July 2020 we are releasing 1.7.10, the next development version. Once 1.8.0 is out, we will continue our development work with 1.9.0, then 1.9.1, and so on. Our goal is to make the development release available on the last Wednesday of each month. There may be exceptions (such as during holidays), but that's the general plan. We encourage users to test the development releases and report back their findings. For more details on the plan, see ISC's Software Support Policy at https://kb.isc.org/docs/aa-00896. ## Kea overview Kea is a DHCP implementation developed by Internet Systems Consortium, Inc. that features fully functional DHCPv4 and DHCPv6 servers, a dynamic DNS update daemon, a Control Agent (CA) that provides a REST API to control the DHCP and DNS update servers, an example shell client to connect to the CA, a daemon that is able to retrieve YANG configuration and updates from Sysrepo, and a DHCP performance-measurement tool. Both DHCP servers support server discovery, address assignment, renewal, rebinding, release, decline, information request, DNS updates, client classification, and host reservations. The DHCPv6 server also supports prefix delegation. Lease information is stored in a CSV file by default; it can optionally be stored in a MySQL, PostgreSQL, or Cassandra database instead. Host reservations can be stored in a configuration file, or in a MySQL, PostgreSQL, or Cassandra database. They can also be retrieved from a RADIUS server, although this functionality is somewhat limited. Kea DHCPv4 and DHCPv6 daemons provide support for YANG models, which are stored in a Sysrepo datastore and can be configured via the NETCONF protocol. This text references issue numbers. For more details, visit the Kea GitLab page at https://gitlab.isc.org/isc-projects/kea/issues. ## License This version of Kea is released under the Mozilla Public License, version 2.0. https://www.mozilla.org/en-US/MPL/2.0 The premium and subscriber-only hooks libraries are provided in source code form, under the terms of an End User License Agreement (you will get the source code that you can modify freely, but you are not permitted to redistribute it). ## Download Pre-built ISC packages for current versions of the most popular Linux operating systems are available at: https://cloudsmith.io/~isc/repos/ The Kea source and PGP signature for this release may be downloaded from: https://www.isc.org/download The signature was generated with the ISC code signing key which is available at: https://www.isc.org/pgpkey ISC provides detailed documentation, including installation instructions and usage tutorials, in the Kea Administrator Reference Manual. Documentation is included with the installation, at https://kea.readthedocs.io/en/latest/, or via https://kb.isc.org/docs/kea-administrator-reference-manual in HTML, plain text, or PDF formats. ISC maintains a public open source code tree, a wiki, an issue tracking system, milestone planning, and a roadmap at https://gitlab.isc.org/isc-projects/kea. Limitations and known issues with this release can be found at https://gitlab.isc.org/isc-projects/kea/wikis/known-issues-list. We ask users of this software to please let us know how it worked for you and what operating system you tested on. Feel free to share your feedback on the Kea Users mailing list (https://lists.isc.org/mailman/listinfo/kea-users). Also we would like to hear whether the documentation is adequate and accurate. Please open tickets in the Kea GitLab project for bugs, documentation omissions and errors, and enhancement requests. We want to hear from you even if everything worked. ## Support Professional support for Kea is available from ISC. We encourage all professional users to consider this option; Kea development and maintenance are funded with support subscriptions. For more information on ISC's Kea and DHCP software support see https://www.isc.org/support/. Free best-effort support is provided by our user community via a mailing list. Information on all public email lists is available at https://www.isc.org/community/mailing-list. If you have any comments or questions about working with Kea, please share them to the Kea Users List (https://lists.isc.org/mailman/listinfo/kea-users). Bugs and feature requests may be submitted via GitLab at https://gitlab.isc.org/isc-projects/kea/issues. ## Changes The following summarizes changes and important upgrade notes since the previous release (1.7.9). ``` 1780. [doc] wlodek Added a section to Kea ARM about tuning performance for kea-dhcp4 and kea-dhcp6. (Gitlab #1285) 1779. [build] tmark Library version numbers bumped for release. (Gitlab #1346) 1778. [func]* fdupont Changed the order of subnets to follow ascending subnet identifier. (Gitlab #1265) 1777. [doc] fdupont Added in the Developer's Guide an example about how to cross compile Kea for a Raspberry Pi. (Gitlab #1221) 1776. [func] fdupont DHCP servers now log a fatal error message when a reconfiguration attempt left a no longer working server. Documentation was updated tp propose remedy actions. (Gitlab #507,#1166) 1775. [doc] vicky A Code of Conduct has been added. (Gitlab #1143) 1774. [func] tmark leaseX-del commands now support a new parameter, update-ddns, which instructs the server to remove DNS entries for a lease after it has been deleted. (Gitlab #544) 1773. [perf] fdupont Kea statistics now uses standard c++11 chrono library instead of POSIX time library from boost. (Gitlab #1174) 1772. [perf] fdupont Set kea-lfc process priority to lower than default. This change should alleviate CPU utilization spikes caused by LFC process observed on some systems. (Gitlab #1311) 1771. [func] fdupont Added a stats-recount command to kea-admin tool, which recounts cached statistics in MySQL and PostgreSQL lease databases. 1770. [func] fdupont Added kea-admin lease-stat-recount command which recounts cached statistics in MySQL and PostgreSQL lease databases. (Gitlab #1196) 1769. [build] fdupont Added detection of the musl libc which implements dlclose() as a no-operation: this behavior breaks Kea expectations for hook library unloading. (Gitlab #771) 1768. [func]* fdupont Removed the support of the Logging toplevel entry. Now loggers must be defined in each server toplevel entry. (Gitlab #916) 1767. [bug] fdupont Fixed unit tests failing on systems where an interface is named eth0. (Gitlab #1043) 1766. [func] fdupont Optimized the interface manager code and removed the 16 bit limit to interface indexes. (Gitlab #553) 1765. [bug] fdupont Corrected a bug in MySQL Config Backend which occasionally caused the DHCP servers to overlook some configuration changes. This issue could occur when the server fetched configuration changes within one second after they they were applied in the database. (Gitlab #1247) 1764. [doc] fdupont Added thread safety consideration sections to library documentations in the developer guide. (Gitlab #996,#1264) 1763. [bug] fdupont Changed the way hook libraries are unloaded. Now unload is done in two phases: the first phase calls unload() entry points and removes callouts, the second phase unmaps hook library memory spaces. This should lead to fewer problems including fewer crashes at exit time. On the other hand, incorrect libraries can stay in memory until exit and prevent any (re)load. (Gitlab #1282) ``` Thank you again to everyone who assisted us in making this release possible. We look forward to receiving your feedback.