# Kea 1.7.1, October 30th 2019, Release Notes

Welcome to Kea 1.7.1, the second monthly development release of Kea. This 
release is the next step towards having fully multi-threaded DHCP servers, 
which will eventually become available as 1.8.0. This is a development 
release. Use with caution! Development releases are not recommended for 
production use. 

Changes introduced in this version:

1. **Fine grained DNS Updates**. Prior to 1.7.1, Kea allowed you to 
configure DNS Update parameters globally. Starting with this release, it is 
possible to specify many DNS behavioral parameters at the global, shared 
network and subnet levels. In particular, it is possible to specify whether 
to send the updates or not (ddns-send-updates), control whether to sanity 
check the client update (ddns-replace-client-name, hostname-char-set, 
hostname-char-replacement), replace (ddns-generated-prefix) or expand it 
(ddns-qualifying-suffix) on a per shared network or subnet basis. This 
should give users much better flexibility over what updates are done and 
when (#35).

2. **Flexible options**. Prior to 1.7.1, Kea allowed to you to specify 
option values in a fixed way. It was possible to specify option values on 
per shared network, subnet, class or host, but the values were always 
constant. Sometimes it is useful to generate the option values based on 
certain criteria, such as incoming option values, the client's MAC address 
or some other condition. This is now possible with a new open source hook 
called Flexible option. For details, see a new section "Flexible Option for 
Option value settings" in the Kea Administrator Reference Manual (#219).

3. **New API command: reservation-get-by-hostname**. Our premium hook 
*host_cmds* has been extended with a new API command 
reservation-get-by-hostname. It allows you to search existing hosts 
reservations for those reserved with a specific hostname. This is useful if 
you want to check if a certain hostname is reserved for anyone or not. Also, 
it lets you to find a reservation if the only information available is the 
hostname, but the typical MAC addresses or reserved IPv4/IPv6 address is 
unknown. (#392)

4. **New API commands to search for host reservations**. Our premium hook 
*host_cmds* has been extended with the ability to search for host 
reservations using MAC address, client-id, hostname or DUID. New commands 
(lease4-get-by-client-id, lease4-get-by-hostname, 
lease4-get-by-hw-address, lease6-get-by-duid, lease6-get-by-hostname) 
are now available. One particularly useful feature of those new commands is 
that they don't require specifying the subnet-id and they search through all 
existing reservations (#393).

5. **New API to trigger Config Backend update**. Kea 1.6.0 introduced the 
config backend mechanism that allows storing configuration in a database 
that is periodically polled to retrieve configuration changes. This allows 
for completely autonomous deployment of new configuration changes, but has 
the downside of needless DB load when there are no changes. A new command 
config-backend-pull has been introduced to the subscriber only *cb_cmds* 
hook that lets you trigger the configuration retrieval on demand. It can be 
used with the regular periodic updates (i.e. when you don't want to wait and 
the configuration should be retrieved immediately) or you can disable the 
periodic checks altogether and trigger the retrieval only when needed (#904).

6. **Compilation options**. This is a small, but useful feature. Kea now 
remembers the compilation options it was compiled with. Please use -W 
command line switch to retrieve parameters passed to configure script (#869).

7. **Experimental packages for Alpine and CentOS 8**. ISC has prepared 
packages for Alpine Linux and recently published CentOS8. Since we did not 
have enough resources to test them yet, they're not publicly available yet. 
However, if you are interested, please get in touch and we'll be happy to 
provide them for early adopters. The packages are expected to be publicly 
available with the next development release (#934, #772).

8. **Multi-threading improvements**. While there are no clearly user-visible 
changes yet, our team continues its work towards making Kea fully 
multi-threaded one day. This month we did many code cleanups (#497, #907, 
#918, #919, #930) and preparatory work (#962).

## Changes to Release Model
The Kea project has been in development for several years now, and it 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, including some 
new powerful, but difficult to implement, features. As a result, we decided 
to change the release cycle. Starting from 1.6.0, there are two series of 
releases: stable and development.

Stable releases are what you would expect: stable, released infrequently, 
without new features or significant changes, very well-tested. Those can be 
identified by the middle version number being even. The current stable 
release is 1.6.0. If we discover important bugs that require fixing, we may 
release 1.6.1, 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.

Our team continues development of new features. In particular, we're 
tackling the difficult problem of being able to use all available CPU cores 
simultaneously. The multi-threading implementation is a complex task and it 
is unknown how long it will take before the solution is stable and ready for 
production environment. At the same time, we continue to receive a stream of 
requests for small features and bug fixes. We don't want to force users to 
wait half a year or more for the fixes and features that are already done. 
Therefore, we have decided to start issuing development releases on a 
monthly basis. Those are slightly less well-tested and may have features 
that are not complete; a good example may be multi-threading. It is possible 
that one of the next releases will provide a configuration knob to specify 
the number of threads, but the actual code won't be extended yet to spawn 
those threads.

The development releases can be easily identified by the middle version 
number being odd; for example, 1.7.1 is a development release. In November 
2019 we will release 1.7.2, the next development version. Once 1.8.0 is out, 
we will continue our development work on 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/v1/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 fully 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 hook 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/downloads

The signature was generated with the ISC code signing key which is available 
at:

   https://www.isc.org/pgpkeys

ISC provides detailed documentation, including installation instructions and 
usage tutorials, in the Kea Administrator Reference Manual. Documentation is 
included with the installation 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, wiki, 
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.1).

1681.	[func]		fdupont
	Added new command config-backend-pull which forces the server
	to immediately poll the configuration updates from the
	configuration backend
	(Gitlab #904)

1680.	[bug,build]	Kristoffer Larsen
	A bug in Makefile has been fixed. The changes made to
	src/lib/dhcpsrv/alloc_engine_messages.mes are now picked up
	properly.
	(Gitlab #752)

1679.	[func]		fdupont
	Added new commands to the lease_cmds hooks library to search for
	leases by hardware address, client-id, DUID and hostname. Now
	hostnames are stored in lower case within the lease database.
	(Gitlab #393)

1678.	[build]		fdupont
	The arguments passed to configure are now stored and are available
	using -W command line option.
	(Gitlab #869)

1677.	[doc]		wlodek
	Sample configs now all use the same paths for control sockets.
	(Gitlab #795)

1676.	[func]		fdupont
	A new hook - flex-option - has been developed. It allows setting
	up DHCPv4 and DHCPv6 option values dynamically, using expression.
	This capability is very useful when you want to generate option
	value procedurally. For details, see new section "Flexible Option
	for Option value settings" in the Kea Administrator Reference
	Manual.
	(Gitlab #219,!523, git 2bf854c029b9b07ee6161bc1fcb4dfdc9846ee42)

1675.	[func]		fdupont
	Both DHCPv4 and DHCPv6 can now listen on and send responses
	to a custom UDP port, as specified with the -p command line
	option. This capability is mostly useful for testing.
	(Gitlab #677,!548, git 47e709fb7b89464d4473e8c7cb138f539042d68b)

1674.	[perf]		fdupont
	Added a Multi Threading Manager singleton class in the util library.
	(Gitlab #962,!566, git 66b090e54b45bdeefda266ddd62e42b46ed48d1d)

1673.	[bug]		tmark
	Fixed a bug introduced in Kea 1.6.0 (see #539) that caused
	kea-dhcp4 and kea-dhcp6 to discard inbound packets containing
	string options that consist solely of nulls.  The servers
	will now quietly omit empty or all-null string options from
	inbound packets.
	(Gitlab #900,!561, git c75a7c10bde74f59d481a7717b4e03b9cb2268a6)

1672.	[build]		fdupont
	Deprecated bind1st and bind2nd templates were replaced with
	lambda expressions or plain bind templates.
	(Gitlab #919,!521, git b12fa3374454c9c0d749557d5532aab55dbc58d9)

1671.	[bug]		tmark
	Corrected an issue in kea-dhcp6 where the server would fail
	to extend the expiry of a existing dynamic lease assigned to
	client with host reservation.
	(Gitlab #754,!558, git c223380012b82c93292528b593002c2b80b5361b)

1670.	[func]		fdupont
	Added searches for host reservations by hostname and by hostname
	and subnet.
	(Gitlan #392,!529, git 50068ada6b277c9251de9062501d8c478a8f5529)

1669.	[func]		tmark
	Rather than within the 'dhcp-ddns' section, DDNS behavioral
	parameters may now be specified at global, shared-network,
	and subnet scopes.  Implemented for both kea-dhcp4 and
	kea-dhcp6.  Not yet supported by Config Backend or Netconf.
	(Gitlab #35,!517, git 49ce6286f5d00f99c1c890f12cbc0fd633c9dbf6)

1668.	[build]		fdupont
	The Kea util thread library was removed.
	(Gitlab #907,!519, git 1b27dc52aae23753643461086f0950b125bf9c93)

1667.	[build]		fdupont
	The availability of C++11 thread, mutex, condition variable and
	atomic libraries is now checked by ./configure.
	(Gitlab #918,!520, git baf4097520c1cd38366ee4f33a95dde040906e9e)

1666.	[doc]		tmark
	Added note in ARM about manually admining cb data being possible
	but not supported.
	(Gitlab #917,!518, git f242e5c2e0e14331172671477dce3a6597691b55)

Thank you again to everyone who assisted us in making this release possible. 

We look forward to receiving your feedback.