1. which were updated? (save results)
1. Do any of the libraries from the current release have lower version than in the previous release?
1. Uninstall Kea, check what left (there should be just configuration files)
- 1. Check if all of the installed binaries has man page
- 1. if not, is it in the tarball?
- 1. are man page up-to-date?
+ 1. Check if each of the installed binaries has a man page.
+ 1. If not, is the binary included in the tarball? That might explain it.
+ 1. Are man pages up to date?
1. Check if documentation is properly formatted, has correct versions and dates.
- 1. it's advised to search for previous version numbers, some of them are statically added in statements that are no longer valid
+ 1. It's advised to search for previous version numbers, some of them are statically added in statements that are no longer valid.
1. [ ] Upload tarballs to repo.isc.org using Jenkins and send sanity checks request.
1. Go to [release-tarball-upload](https://jenkins.aws.isc.org/job/kea-dev/job/release-tarball-upload/) Jenkins job.
- 1. Click "Build with Parameters"
- 1. In field "Tarball" select picked tarball build
+ 1. Click "Build with Parameters".
+ 1. In field "Tarball" select picked tarball build.
1. In field "Release_Candidate" pick:
1. rc1 if this is the first selected build for release, it will push the selected tarballs to repo.isc.org, to a directory suffixed with indicated rc#
1. next rc# if this is a respin after some fixes (note: it is not possible to pick previous rc number - it will result in an error)
in src/bin/dhcp4 and src/bin/dhcp6 directories.<br/><br/>
-# The current JSON parser in @ref
isc::data::Element::fromJSON() has been extended to allow optional
- preprocessing. For now, that capability simply removes whole-line
+ preprocessing. For now, that capability simply removes whole-line
comments starting with the hash character, but it is expected to grow over
time (in-line comments and file inclusions are the obvious envisaged
additions). This is implemented in @ref isc::data::Element::fromJSONFile.<br/><br/>
packets. The capacity of the buffer (i.e. the maximum number of packets the
buffer can contain) is configurable.
-@section custom-implementations Custom Packet Queues
+@section custom-implementations Custom Packet Queues
It is possible to replace the default packet queue implementation with a
custom implementation by registering it with your Kea server via a hook
element "dhcp-queue-control" from the Kea server's configuration. It will
always have the following two values:
--# "enable-queue" - used by isc::dhcp::IfaceMgr to know whether or not
+-# "enable-queue" - used by isc::dhcp::IfaceMgr to know whether
congestion handling is enabled. Your implementation need not do anything
with this value.
keatest=> \q
@endverbatim
- Now we should be able to log into the newly created database using both user
+ Now we should be able to log into the newly created database using both user
names:
@verbatim
$ psql -d keatest -U keatest
// Some libraries may support parameters. Make sure you
// type this section carefully, as the CA does not validate
- // it (because the format is library specific).
+ // it (because the format is library-specific).
"parameters": {
"param1": "foo"
}
// Several additional parameters are possible in addition
// to the typical output. Flush determines whether logger
// flushes output to a file. Maxsize determines maximum
- // filesize before the file is being rotated. maxver
+ // filesize before the file is rotated. maxver
// specifies the maximum number of rotated files being
// kept.
"flush": true,
// it may contain mutually exclusive configuration parameters.
//
// The primary purpose of the example file is to provide a comprehensive
-// list of parameters supported by Kea DHCP-DDNS server along with the
+// list of parameters supported by the Kea DHCP-DDNS server along with the
// brief description of each parameter.
//
// This stable version is used for YANG as we do not want to update code
// Command control socket configuration parameters for Kea DHCP-DDNS server.
"control-socket": {
- // Location of the unix domain socket file the DHCP-DDNS server uses
+ // Location of the UNIX domain socket file the DHCP-DDNS server uses
// to receive control commands from the Kea Control Agent or the
// local server administrator.
"socket-name": "/tmp/kea-ddns-ctrl-socket",
"socket-type": "unix"
},
- // List of hooks libraries and their specific configuration parameters
+ // List of hook libraries and their specific configuration parameters
// to be loaded by Kea DHCP-DDNS server.
"hooks-libraries": [
{
- // Location of the hooks library to be loaded.
+ // Location of the hook library to be loaded.
"library": "/opt/local/ddns-server-commands.so",
- // Hook library specific configuration parameters.
+ // Hook library-specific configuration parameters.
"parameters": { }
}
],
"loggers": [
{
// Debug level, a value between 0..99. The greater the value
- // the more detailed debug log.
+ // the more detailed the debug log.
"debuglevel": 99,
// Name of the logger.
// Configures how the log should be output.
"output_options": [
{
- // Determines whether the log should flushed to a file.
+ // Determines whether the log should be flushed to a file.
"flush": true,
- // Specifies maximum filesize before the file is being rotated.
+ // Specifies maximum filesize before the file is rotated.
"maxsize": 10240000,
- // Specifies the maximum number of rotated files being kept.
+ // Specifies the maximum number of rotated files to be kept.
"maxver": 1,
- // Specifies logging destination.
+ // Specifies the logging destination.
"output": "stdout",
// Specifies log entry content
// it may contain mutually exclusive configuration parameters.
//
// The primary purpose of the example file is to provide a comprehensive
-// list of parameters supported by Kea DHCP-DDNS server along with the
+// list of parameters supported by the Kea DHCP-DDNS server along with the
// brief description of each parameter.
//
// This current version should be up to date, i.e. new keywords should be
-// added in this file at the same time than in the syntax.
+// added in this file at the same time as in the parser specification.
{
// Kea DHCP-DDNS server configuration begins here.
"DhcpDdns": {
// Command control socket configuration parameters for Kea DHCP-DDNS server.
"control-socket": {
- // Location of the unix domain socket file the DHCP-DDNS server uses
+ // Location of the UNIX domain socket file the DHCP-DDNS server uses
// to receive control commands from the Kea Control Agent or the
// local server administrator.
"socket-name": "/tmp/kea-ddns-ctrl-socket",
"socket-type": "unix"
},
- // List of hooks libraries and their specific configuration parameters
+ // List of hook libraries and their specific configuration parameters
// to be loaded by Kea DHCP-DDNS server.
"hooks-libraries": [
{
- // Location of the hooks library to be loaded.
+ // Location of the hook library to be loaded.
"library": "/opt/local/ddns-server-commands.so",
- // Hook library specific configuration parameters.
+ // Hook library-specific configuration parameters.
"parameters": { }
}
],
"loggers": [
{
// Debug level, a value between 0..99. The greater the value
- // the more detailed debug log.
+ // the more detailed the debug log.
"debuglevel": 99,
// Name of the logger.
// Configures how the log should be output.
"output_options": [
{
- // Determines whether the log should flushed to a file.
+ // Determines whether the log should be flushed to a file.
"flush": true,
- // Specifies maximum filesize before the file is being rotated.
+ // Specifies maximum filesize before the file is rotated.
"maxsize": 10240000,
- // Specifies the maximum number of rotated files being kept.
+ // Specifies the maximum number of rotated files to be kept.
"maxver": 1,
- // Specifies logging destination.
+ // Specifies the logging destination.
"output": "stdout",
// Specifies log entry content
// -------------- Global Parameters ----------------
//
// D2 will listen for update requests for Kea DHCP servers at 127.0.0.1
-// on port 53001. Maximum time to we will wait for a DNS server to
+// on port 53001. Maximum time to we will wait for a DNS server to
// respond to us is 1000 ms.
"ip-address": "127.0.0.1",
// Some libraries may support parameters. Make sure you
// type this section carefully, as the CA does not validate
- // it (because the format is library specific).
+ // it (because the format is library-specific).
"parameters":
{
"param1": "foo"
// 1. Zone - "four.example.com.
// It uses TSIG, key name is "d2.md5.key"
// It is served by one DNS server which listens for DDNS requests at
-// 172.16.1.1 on the default port 53 (standard DNS port)
+// 172.16.1.1 on the default port 53 (standard DNS port)
//
// 2. Zone - "six.example.com."
// It does not use TSIG.
// Several additional parameters are possible in addition
// to the typical output. Flush determines whether logger
// flushes output to a file. Maxsize determines maximum
- // filesize before the file is being rotated. maxver
+ // filesize before the file is rotated. maxver
// specifies the maximum number of rotated files being
// kept.
"flush": true,
// interface the query came in. This is the default ("same-as-inbound").
// However, sometimes it is useful to have the ability to send the
// packet as plain UDP packet and let the kernel and the routing tables
- // determine the right interface ("use-routing"). This option only works
+ // determine the right interface ("use-routing"). This option only works
// for "dhcp-socket-type" set to "udp" and is ignored otherwise.
"outbound-interface": "use-routing",
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
- // We'll use memfile because it doesn't require any prior set up.
+ // We'll use memfile because it doesn't require any prior set up.
// For memfile, it's important to always specify lfc-interval, so
// the lease file would not grow without bounds and be sanitized
// once per hour.
// Several additional parameters are possible in addition
// to the typical output. Flush determines whether logger
// flushes output to a file. Maxsize determines maximum
- // filesize before the file is being rotated. maxver
+ // filesize before the file is rotated. maxver
// specifies the maximum number of rotated files being
// kept.
"flush": true,
// Third class name.
"name": "late",
- // Boolean flag indicating that the class expression is only evaluated
+ // Boolean flag indicating whether the class expression is only evaluated
// when the class is required, e.g. the selected address pool configuration
// includes this class name in its "require-client-classes" list. The
// default value false means that the class test expression must
"ignore-rai-link-selection": false,
// Parse options more leniently where fields can be deduced
- // deterministically even if against RFC or common practice.
+ // deterministically, even if against RFC or common practice.
"lenient-option-parsing": true
},
// It may be specified at the global, shared-network, and subnet levels.
"ddns-generated-prefix": "myhost",
- // Boolean flag indicating that the server should ignore DHCP client
+ // Boolean flag indicating whether the server should ignore DHCP client
// wishes to update DNS on its own. With that flag set to true,
// the server will send DNS updates for both forward and
// reverse DNS data. The default value is false, which indicates
- // that the server will delegate DNS update to the client when
+ // that the server will delegate a DNS update to the client when
// requested. It may be specified at the global, shared-network,
// and subnet levels.
"ddns-override-client-update": false,
- // Boolean flag indicating that the server should override the DHCP
+ // Boolean flag indicating whether the server should override the DHCP
// client's wish to not update the DNS. With this parameter
- // set to true, the server will send DNS update even when
+ // set to true, the server will send a DNS update even when
// the client requested no update. It may be specified at the
// global, shared-network, and subnet levels.
"ddns-override-no-update": false,
// Suffix appended to the partial name sent to the DNS. The
- // default value is an empty string which indicates that no
+ // default value is an empty string, which indicates that no
// suffix is appended. It may be specified at the global,
// shared-network, and subnet levels.
"ddns-qualifying-suffix": "",
// Enumeration specifying whether the server should honor
- // hostname or Client FQDN sent by the client, or replace
+ // the hostname or Client FQDN sent by the client or replace
// this name. The acceptable values are: "never" (use the
// name the client sent), "always" (replace the name the
// client sent), "when-present" (replace the name the client
// may be specified at the global, shared-network, and subnet levels.
"ddns-update-on-renew": true,
- // Boolean flag, which is passed to kea-dhcp-ddns with each DDNS
- // update request to indicate whether DNS update conflict
+ // Boolean flag which is passed to kea-dhcp-ddns with each DDNS
+ // update request, to indicate whether DNS update conflict
// resolution as described in RFC 4703 should be employed for the
// given update request. The default value for this flag is true.
// It may be specified at the global, shared-network, and subnet levels.
// excluded from DHCP assignments. The default value is 86400 (24 hours).
"decline-probation-period": 86400,
- // Name Change Request forwarding configuration for Kea DHCPv4 server.
+ // Name Change Request forwarding configuration for the Kea DHCPv4 server.
// NCRs are sent to the Kea D2 module to update DNS upon allocation of
// DHCP leases.
"dhcp-ddns": {
- // Boolean flag indicating if Kea DHCPv4 server should connect to
+ // Boolean flag indicating whether Kea DHCPv4 server should connect to
// kea-dhcp-ddns. This must be true for NCRs to be created and
// sent to kea-dhcp-ddns. By default, NCRs are not generated.
"enable-updates": false,
// only UDP is supported.
"ncr-protocol": "UDP",
- // IP address that Kea DHCPv4 server should use to send
+ // IP address that the Kea DHCPv4 server should use to send
// NCRs to D2. The default value of zero indicates that Kea
// should pick a suitable address.
"sender-ip": "0.0.0.0",
- // Port number that Kea DHCPv4 server should use to send
+ // Port number that the Kea DHCPv4 server should use to send
// NCRs to D2. The default value of zero indicates that Kea
// should pick a suitable port.
"sender-port": 0,
"dhcp4o6-port": 6767,
// Boolean flag indicating whether the Kea DHCPv4 server
- // should send back Client Identifier option in its responses.
+ // should send back the Client Identifier option in its responses.
// The default value is true, which indicates that the option
// must be sent back if the client included it. The false
// value instructs the server to not send this option for
// Collection of Kea DHCPv4 server parameters configuring how
// the server should process expired DHCP leases.
"expired-leases-processing": {
- // Specifies the number of seconds since last removal of
- // the expired leases, when next removal should occur.
+ // Specifies the number of seconds since the last removal of
+ // the expired leases, when the next removal should occur.
// If both "flush-reclaimed-timer-wait-time" and
// "hold-reclaimed-time" are not 0, when the client sends a release
- // message the lease is expired instead of being deleted from the
+ // message the lease is expired instead of being deleted from
// lease storage.
"flush-reclaimed-timer-wait-time": 25,
// leases in the lease database (lease affinity).
// If both "flush-reclaimed-timer-wait-time" and
// "hold-reclaimed-time" are not 0, when the client sends a release
- // message the lease is expired instead of being deleted from the
+ // message the lease is expired instead of being deleted from
// lease storage.
"hold-reclaimed-time": 3600,
// Specifies the maximum number of expired leases that can be
- // processed in a single attempt to clean up the expired
- // leases from the lease database. If there are more
+ // processed in a single attempt to clean up expired leases
+ // from the lease database. If there are more
// expired leases, they will be processed during the next
// cleanup attempt.
"max-reclaim-leases": 100,
- // Specifies the maximum time in milliseconds that a single
- // attempt to cleanup the lease database from the expired
- // leases may take.
+ // Specifies the maximum time in milliseconds that a single attempt
+ // to clean up expired leases from the lease database may take.
"max-reclaim-time": 250,
- // Specifies the time period in seconds since the last attempt
+ // Specifies the length of time in seconds since the last attempt
// to process expired leases before initiating the next attempt.
"reclaim-timer-wait-time": 10,
- // Specifies the maximum number of expired lease-processing
- // cycles which didn't result in full cleanup of expired leases
- // from the lease database, after which a
- // warning message is issued.
+ // Specifies the maximum number of expired lease-processing cycles
+ // which didn't result in full cleanup of exired leases from the
+ // lease database, after which a warning message is issued.
"unwarned-reclaim-cycles": 5
},
// Connection reconnect wait time.
// This parameter governs how long Kea waits before attempting
- // to reconnect, expressed in milliseconds. The default is 0
+ // to reconnect. Expressed in milliseconds. The default is 0
// (disabled) for MySQL and PostgreSQL.
"reconnect-wait-time": 3000,
// serve-retry-continue
"on-fail": "stop-retry-exit",
- // Connection connect timeout.
+ // Connection connect timeout in seconds.
"connect-timeout": 100
}
],
// DHCP clients. All identifiers are used by default, which
// means that the server will issue multiple queries to the
// database to find if there is a reservation for a particular
- // client. If the particular deployment uses only a subset, e.g.
+ // client. If a particular deployment uses only a subset, e.g.
// one identifier type, this identifier should be only listed
// here to prevent unnecessary queries to the database.
"host-reservation-identifiers": [
// server is listening to the DHCP queries.
"interfaces-config": {
// Specifies whether the server should use "udp" sockets or
- // "raw" sockets to listen to the DHCP traffic. The "raw"
+ // "raw" sockets to listen to DHCP traffic. The "raw"
// sockets are useful when direct DHCP traffic is being
// received.
"dhcp-socket-type": "udp",
],
// Enumeration which indicates what interface should be used
- // to send DHCP response to the client. The default value is
+ // to send DHCP responses to the client. The default value is
// "same-as-inbound", which indicates that the response should
// be sent via the interface on which the client's query
// was received. The "use-routing" value indicates that the
// suitable interface.
"outbound-interface": "same-as-inbound",
- // Boolean flag indicating if the available interfaces should
+ // Boolean flag indicating whether the available interfaces should
// be re-detected upon server reconfiguration. The default value
// is true, which means that the interfaces are always
// re-detected.
"type": "memfile"
},
- // Boolean value indicating whether the Kea DHCPv4 server should use client
+ // Boolean value indicating whether the Kea DHCPv4 server should use the client
// identifier value sent by the client or ignore it. The default value
- // is true, which indicates that the server should use a client identifier
+ // is true, which indicates that the server should use the client identifier
// and that it takes precedence over the client's MAC address. In deployments
// where MAC address should take precedence, this value can be set to
// false, in which case the clients will be identified by MAC address.
// kea-dhcp4 from building an insurmountable backlog of updates.
"parked-packet-limit": 128,
- // List of global DHCP options that Kea DHCPv4 server assigns to the
+ // List of global DHCP options that the Kea DHCPv4 server assigns to
// clients.
"option-data": [
{
],
// Global value for the rebind timer, i.e. the time after which the
- // DHCP client enters rebind state if it fails to renew the lease.
+ // DHCP client enters the rebind state if it fails to renew the lease.
"rebind-timer": 40,
// Global value for the renew timer, i.e. the time after which the
// whether to upgrade from the old format. The following values
// are supported: "none" (don't attempt to correct or upgrade
// the extended info), "fix" (fix common inconsistencies and
- // upgrade from old format; this is the default), "strict"
- // (fix inconsistencies with an impact on Lease Query),
+ // upgrade from the old format; this is the default), "strict"
+ // (fix inconsistencies with an impact on Leasequery),
// "pedantic" (enforce full Kea code format).
"extended-info-checks": "fix"
},
// networks group subnets together.
"shared-networks": [
{
- // Shared network-level authoritative flag.
+ // Shared-network level authoritative flag.
"authoritative": false,
- // Shared network-level bootfile name.
+ // Shared-network level bootfile name.
"boot-file-name": "/dev/null",
// Restricts this shared network to allow only clients
// empty string is provided, no restriction is applied.
"client-class": "",
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-generated-prefix": "myhost",
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-override-client-update": false,
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-override-no-update": false,
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-qualifying-suffix": "",
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-replace-client-name": "never",
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-send-updates": true,
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-update-on-renew": true,
- // Shared network-level value. See description at the global level.
+ // 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.
+ // Shared-network level value. See description at the global level.
"hostname-char-replacement": "x",
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"hostname-char-set": "[^A-Za-z0-9.-]",
// Specifies that this shared network is selected for
// requests received on a particular interface.
"interface": "eth0",
- // Shared network-level flag specifying whether the client
+ // Shared-network level flag specifying whether the client
// identifier should be used for identifying clients.
"match-client-id": true,
// Shared network name.
"name": "my-secret-network",
- // Shared network-level specification of the next server
+ // Shared-network level specification of the next server
// to be sent in 'siaddr'.
"next-server": "192.0.2.123",
"ip-addresses": []
},
- // Shared network-level rebind timer.
+ // Shared-network level rebind timer.
"rebind-timer": 41,
- // Shared network-level renew timer.
+ // Shared-network level renew timer.
"renew-timer": 31,
- // Shared network-level compute T1 and T2 timers.
+ // Shared-network level compute T1 and T2 timers.
"calculate-tee-times": true,
// T1 = valid lifetime * .5.
// "reservations-in-subnet", and "reservations-out-of-pool"
// parameters.
- // Specify if server should look up global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should look up in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "subnet4" levels.
// information) with each lease for this shared network.
"store-extended-info": false,
- // Shared network-level server hostname set in 'sname' field.
+ // Shared-network level server hostname set in 'sname' field.
"server-hostname": "",
// List of IPv4 subnets belonging to this shared network.
// Subnet-level list of DHCP options.
"option-data": [
{
- // Boolean flag indicating if the particular option
+ // Boolean flag indicating whether the particular option
// should be always sent or sent only when requested.
"always-send": false,
// Option code.
"code": 3,
- // Boolean flag indicating if the option value specified
- // in "data" is a string of hexadecimal values or a
- // human-readable CSV value.
+ // Boolean flag indicating whether the option value specified
+ // in "data" is a string of hexadecimal values or human-readable
+ // CSV value.
"csv-format": true,
// Option data to be included in the option payload.
// Option name.
"name": "routers",
- // Boolean flag indicating if the given option is never
+ // Boolean flag indicating whether the given option is never
// sent in response.
"never-send": false,
// "reservations-in-subnet", and
// "reservations-out-of-pool" parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved
+ // Specify whether the server can assume that all reserved
// addresses are out-of-pool.
// Ignored when reservations-in-subnet is false.
"reservations-out-of-pool": false,
}
],
- // Shared network-level (default) valid lifetime.
+ // Shared-network level (default) valid lifetime.
"valid-lifetime": 6001,
// Subnet-level min valid lifetime.
// List of IPv4 subnets which don't belong to any shared network.
"subnet4": [],
- // Global valid (default) lifetime value.
+ // Global valid lifetime value.
"valid-lifetime": 6000,
// Global min valid lifetime value.
"type": "mysql"
}
],
- // Intervals between attempts to fetch configuration updates
+ // Interval between attempts to fetch configuration updates
// via the configuration backends used.
"config-fetch-wait-time": 30
},
// It is replaced by the "reservations-global",
// "reservations-in-subnet", and "reservations-out-of-pool" parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "shared-networks" and
// mutually exclusive configuration parameters.
//
// The primary purpose of the example file is to provide a comprehensive
-// list of parameters supported by the Kea DHCPv4 server, along with the brief
+// list of parameters supported by the Kea DHCPv4 server, along with a brief
// description of each parameter.
//
-// This current version should be up-to-date, i.e. new keywords should be
-// added in this file at the same time as in the syntax.
+// This current version should be up to date, i.e. new keywords should be
+// added in this file at the same time as in the parser specification.
{
// 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",
"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.
+ // on DISCOVER. When zero (the default), leases are not allocated on DISCOVER.
"offer-lifetime" : 65
},
{
// Third class name.
"name": "late",
- // Boolean flag indicating that the class expression is only evaluated
+ // Boolean flag indicating whether the class expression is only evaluated
// when the class is required, e.g. the selected address pool configuration
// includes this class name in its "require-client-classes" list. The
// default value false means that the class test expression must
"exclude-first-last-24": false
},
- // Command control socket configuration parameters for Kea DHCPv4 server.
+ // Command control socket configuration parameters for the Kea DHCPv4 server.
"control-socket": {
// Location of the UNIX domain socket file the DHCPv4 server uses
// to receive control commands from the Kea Control Agent or the
// It may be specified at the global, shared-network, and subnet levels.
"ddns-generated-prefix": "myhost",
- // Boolean flag indicating that the server should ignore DHCP client
+ // Boolean flag indicating whether the server should ignore DHCP client
// wishes to update DNS on its own. With that flag set to true,
// the server will send DNS updates for both forward and
// reverse DNS data. The default value is false, which indicates
- // that the server will delegate DNS updates to the client when
+ // that the server will delegate a DNS update to the client when
// requested. It may be specified at the global, shared-network,
// and subnet levels.
"ddns-override-client-update": false,
- // Boolean flag indicating that the server should override a DHCP
+ // Boolean flag indicating whether the server should override the DHCP
// client's wish to not update the DNS. With this parameter
- // set to true, the server will send DNS updates even when
+ // set to true, the server will send a DNS update even when
// the client requested no update. It may be specified at the
// global, shared-network, and subnet levels.
"ddns-override-no-update": false,
// to kea-dhcp-ddns.
"ddns-send-updates": true,
- // Boolean flag which when true instructs the server to always
+ // Boolean flag, which when true instructs the server to always
// update DNS when leases are renewed, even if the DNS information
// has not changed. The server's default behavior (i.e. flag is false)
// is to only update DNS if the DNS information has changed. It
"decline-probation-period": 86400,
// Name Change Request forwarding configuration for the Kea DHCPv4 server.
- // NCRs are sent to the Kea D2 module to update DNS upon allocation of the
+ // NCRs are sent to the Kea D2 module to update DNS upon allocation of
// DHCP leases.
"dhcp-ddns": {
- // Boolean flag indicating if Kea DHCPv4 server should connect to
- // kea-dhcp-ddns. This must be true for NCRs to be created and
+ // Boolean flag indicating whether Kea DHCPv4 server should connect to
+ // kea-dhcp-ddns. This must be true for NCRs to be created and
// sent to kea-dhcp-ddns. By default, NCRs are not generated.
"enable-updates": false,
// only UDP is supported.
"ncr-protocol": "UDP",
- // IP address that Kea DHCPv4 server should use to send
+ // IP address that the Kea DHCPv4 server should use to send
// NCRs to D2. The default value of zero indicates that Kea
// should pick a suitable address.
"sender-ip": "0.0.0.0",
- // Port number that Kea DHCPv4 server should use to send
+ // Port number that the Kea DHCPv4 server should use to send
// NCRs to D2. The default value of zero indicates that Kea
// should pick a suitable port.
"sender-port": 0,
// Port number on which D2 listens for NCRs.
"server-port": 53001,
- // The follow parameters are DEPRECATED. They have been
+ // The following parameters are DEPRECATED. They have been
// replaced with parameters that may be set at the global,
// shared-network, and subnet4 scopes. They are listed here
// as configuration parsing still accepts them. Eventually
// the server should process expired DHCP leases.
"expired-leases-processing": {
// Specifies the number of seconds since the last removal of
- // the expired leases when the next removal should occur.
+ // the expired leases, when the next removal should occur.
// If both "flush-reclaimed-timer-wait-time" and
// "hold-reclaimed-time" are not 0, when the client sends a release
// message the lease is expired instead of being deleted from
// cleanup attempt.
"max-reclaim-leases": 100,
- // Specifies the maximum time in milliseconds that a single
- // attempt to clean up expired leases from the lease
- // database may take.
+ // Specifies the maximum time in milliseconds that a single attempt
+ // to clean up expired leases from the lease database may take.
"max-reclaim-time": 250,
- // Specifies the time period in seconds since the last attempt
+ // Specifies the length of time in seconds since the last attempt
// to process expired leases before initiating the next attempt.
"reclaim-timer-wait-time": 10,
- // Specifies the maximum number of expired lease-processing
- // cycles which didn't result in full cleanup of expired leases
- // from the lease database, after which a
- // warning message is issued.
+ // Specifies the maximum number of expired lease-processing cycles
+ // which didn't result in full cleanup of exired leases from the
+ // lease database, after which a warning message is issued.
"unwarned-reclaim-cycles": 5
},
// Connection reconnect wait time.
// This parameter governs how long Kea waits before attempting
- // to reconnect, expressed in milliseconds. The default is 0
+ // to reconnect. Expressed in milliseconds. The default is 0
// (disabled) for MySQL and PostgreSQL.
"reconnect-wait-time": 3000,
// Connection connect timeout in seconds.
"connect-timeout": 100,
- // Data-read from the database timeout in seconds.
+ // Timeout of database read operations in seconds.
"read-timeout": 120,
- // Data-write to the database timeout in seconds.
+ // Timeout of database write operations in seconds.
"write-timeout": 180
}
],
"dhcp-socket-type": "udp",
// Specifies a list of interfaces on which the Kea DHCPv4
- // server should listen to the DHCP requests.
+ // server should listen to DHCP requests.
"interfaces": [
"eth0"
],
// provided.
"name": "domain-name-servers",
- // Boolean flag indicating whether the given option is never
+ // Boolean flag indicating whether the given option is never
// sent in response. The default value of false indicates
// that it is sent when it should be. When true, the option
// is not sent despite any other setting, i.e. it is
// whether to upgrade from the old format. The following values
// are supported: "none" (don't attempt to correct or upgrade
// the extended info), "fix" (fix common inconsistencies and
- // upgrade from old format; this is the default), "strict"
- // (fix inconsistencies with an impact on Lease Query),
+ // upgrade from the old format; this is the default), "strict"
+ // (fix inconsistencies with an impact on Leasequery),
// "pedantic" (enforce full Kea code format).
"extended-info-checks": "fix"
},
// subnets in this shared network.
"allocator": "random",
- // Shared network-level authoritative flag.
+ // Shared-network level authoritative flag.
"authoritative": false,
- // Shared network-level bootfile name.
+ // Shared-network level bootfile name.
"boot-file-name": "/dev/null",
// Restricts this shared network to allow only clients
// empty string is provided, no restriction is applied.
"client-class": "",
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-generated-prefix": "myhost",
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-override-client-update": false,
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-override-no-update": false,
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-qualifying-suffix": "",
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-replace-client-name": "never",
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-send-updates": true,
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-update-on-renew": true,
- // Shared network-level value. See description at the global level.
+ // 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.
+ // 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.
+ // Shared-network level value. See description at the global level.
"hostname-char-replacement": "x",
- // Shared network-level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"hostname-char-set": "[^A-Za-z0-9.-]",
// Specifies that this shared network is selected for
// requests received on a particular interface.
"interface": "eth0",
- // Shared network-level flag specifying whether the client
+ // Shared-network level flag specifying whether the client
// identifier should be used for identifying clients.
"match-client-id": true,
// Shared network name.
"name": "my-secret-network",
- // Shared network-level specification of the next server
+ // Shared-network level specification of the next server
// 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.
+ // on DISCOVER. When zero (the default), leases are not allocated on DISCOVER.
"offer-lifetime" : 60,
// List of shared network-specific DHCP options.
"ip-addresses": []
},
- // Shared network-level rebind timer.
+ // Shared-network level rebind timer.
"rebind-timer": 41,
- // Shared network-level renew timer.
+ // Shared-network level renew timer.
"renew-timer": 31,
- // Shared network-level compute T1 and T2 timers.
+ // Shared-network level compute T1 and T2 timers.
"calculate-tee-times": true,
// T1 = valid lifetime * .5.
// Cache threshold = valid lifetime * .25.
"cache-threshold": .25,
- // Cache maximum: when the client last transmission time
+ // Cache maximum: when the client last-transmission time
// is close enough, the lease is not renewed and the current
// lease is returned as it was "cached".
"cache-max-age": 1000,
// "reservations-in-subnet", and "reservations-out-of-pool"
// parameters.
- // Specify if server should look up global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should look up in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "subnet4" levels.
// information) with each lease for this shared network.
"store-extended-info": false,
- // Shared network-level server hostname set in 'sname' field.
+ // Shared-network level server hostname set in 'sname' field.
"server-hostname": "",
// List of IPv4 subnets belonging to this shared network.
"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.
+ // 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
// Subnet-level list of DHCP options.
"option-data": [
{
- // Boolean flag indicating if the particular option
+ // Boolean flag indicating whether the particular option
// should be always sent or sent only when requested.
"always-send": false,
// Option code.
"code": 3,
- // Boolean flag indicating if the option value specified
- // in "data" is a string of hexadecimal values or a
- // human-readable CSV value.
+ // Boolean flag indicating whether the option value specified
+ // in "data" is a string of hexadecimal values or human-readable
+ // CSV value.
"csv-format": true,
// Option data to be included in the option payload.
// Option name.
"name": "routers",
- // Boolean flag indicating if the given option is never
+ // Boolean flag indicating whether the given option is never
// sent in response.
"never-send": false,
// 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"
// "reservations-in-subnet", and
// "reservations-out-of-pool" parameters.
- // Specify if server should look up global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should look up in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved
+ // Specify whether the server can assume that all reserved
// addresses are out-of-pool.
// Ignored when reservations-in-subnet is false.
"reservations-out-of-pool": false,
}
],
- // Shared network-level (default) valid lifetime.
+ // 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
}
],
// List of IPv4 subnets which don't belong to any shared network.
"subnet4": [],
- // Global valid (default) lifetime value.
+ // Global valid lifetime value.
"valid-lifetime": 6000,
// Global min valid lifetime value.
// It is replaced by the "reservations-global",
// "reservations-in-subnet", and "reservations-out-of-pool" parameters.
- // Specify if server should look up global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should look up in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "shared-networks" and
// Specifies the maximum number of rotated files to be kept.
"maxver": 1,
- // Specifies logging destination.
+ // Specifies the logging destination.
"output": "stdout",
// Specifies log entry content
// This is an example configuration file for the DHCPv4 server in Kea.
// It demonstrates how to enable Kea Configuration Backend using MySQL.
// It requires that libdhcp_mysql_cb.so library is available and
-// optionally libdhcp_cb_cmds.so hooks library.
+// optionally libdhcp_cb_cmds.so hook library.
{ "Dhcp4":
// This parameter controls how the server accesses the configuration
// database. Currently only one database type is available - "mysql".
- // It requires that libdhcp_mysql_cb.so hooks library is loaded.
+ // It requires that the libdhcp_mysql_cb.so hook library is loaded.
"config-control": {
// A list of database backends to connect to. Currently, it is limited
// to a single backend.
// This directive tells Kea that reservations are global. Note that this
// can also be specified at shared network and/or subnet level.
// "reservation-mode": "global",
-// It is replaced by the "reservations-global", "reservations-in-subnet" and
+// It is replaced by the "reservations-global", "reservations-in-subnet", and
// "reservations-out-of-pool" parameters.
-// Specify if server should lookup global reservations.
+// Specify whether the server should look up global reservations.
"reservations-global": true,
-// Specify if server should lookup in-subnet reservations.
+// Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": false,
-// Specify if server can assume that all reserved addresses
+// Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "shared-networks" and "subnet4" levels.
// This is an example configuration of the Kea DHCPv4 server. It uses High
-// Availability hooks library and Lease Commands hooks library to enable
+// Availability hook library and Lease Commands hook library to enable
// High Availability function for the DHCP server. Note that almost exactly
// the same configuration must be used on the second server (partner).
// The only difference is that "this-server-name" must be set to "server2"
},
// Some phones will be handled by server1. Whether the HA_server1
// or HA_server2 is assigned for the client is a matter of load
- // balancing performed by the HA hooks library.
+ // balancing performed by the HA hook library.
{
"name": "phones_server1",
"test": "member('phones') and member('HA_server1')"
}
],
- // HA requires two hooks libraries to be loaded: libdhcp_lease_cmds.so and
+ // HA requires two hook libraries to be loaded: libdhcp_lease_cmds.so and
// libdhcp_ha.so. The former handles incoming lease updates from the HA peers.
// The latter implements high availability feature for Kea.
"hooks-libraries": [
"parameters": { }
},
{
- // The HA hooks library should be loaded.
+ // The HA hook library should be loaded.
"library": "/opt/lib/kea/hooks/libdhcp_ha.so",
"parameters": {
// High Availability configuration is specified for the HA hook library.
"debuglevel": 0
},
{
- // This section specifies configuration of the HA hooks library specific
+ // This section specifies configuration of the HA hook library-specific
// logger.
"name": "kea-dhcp4.ha-hooks",
"output_options": [
// This is an example configuration of the Kea DHCPv4 server. It uses High
-// Availability hooks library and Lease Commands hooks library to enable
+// Availability hook library and Lease Commands hook library to enable
// High Availability function for the DHCP server. Note that almost exactly
// the same configuration must be used on the second server (partner).
// The only difference is that "this-server-name" must be set to "server1"
},
// Some phones will be handled by server1. Whether the HA_server1
// or HA_server2 is assigned for the client is a matter of load
- // balancing performed by the HA hooks library.
+ // balancing performed by the HA hook library.
{
"name": "phones_server1",
"test": "member('phones') and member('HA_server1')"
}
],
- // HA requires two hooks libraries to be loaded: libdhcp_lease_cmds.so and
+ // HA requires two hook libraries to be loaded: libdhcp_lease_cmds.so and
// libdhcp_ha.so. The former handles incoming lease updates from the HA peers.
// The latter implements high availability feature for Kea.
"hooks-libraries": [
"parameters": { }
},
{
- // The HA hooks library should be loaded.
+ // The HA hook library should be loaded.
"library": "/opt/lib/kea/hooks/libdhcp_ha.so",
"parameters": {
// High Availability configuration is specified for the HA hook library.
"debuglevel": 0
},
{
- // This section specifies configuration of the HA hooks library specific
+ // This section specifies configuration of the HA hook library-specific
// logger.
"name": "kea-dhcp4.ha-hooks",
"output_options": [
// This is an example configuration file for the DHCPv4 server in Kea
-// illustrating the configuration of the RADIUS and Host Cache hooks libraries.
+// illustrating the configuration of the RADIUS and Host Cache hook libraries.
//
// It is not intended to be used as is. It tries to showcase some of the
// parameters available.
]
} ],
- // Set up the hooks libraries.
+ // Set up the hook libraries.
"hooks-libraries": [
{
// Load the flex-id hook library.
// This is an example configuration file for the DHCPv4 server in Kea
-// illustrating the configuration of hooks libraries. It uses a basic scenario
+// illustrating the configuration of hook libraries. It uses a basic scenario
// of one IPv4 subnet configured with the default values for all parameters.
{"Dhcp4":
}
],
-// Set up the hooks libraries. For this example, we assume that two libraries
+// Set up the hook libraries. For this example, we assume that two libraries
// are loaded, called "security" and "charging". Note that order is important:
// "security" is specified first so if both libraries supply a hook function
// for a given hook, the function in "security" will be called before that in
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
// Note, we're setting the maximum number of row read errors to 100,
// (defaults to 0, meaning unlimited).
"lease-database": {
// unreclaimed leases after 10 attempts, a warning message is issued.
// If both "flush-reclaimed-timer-wait-time" and "hold-reclaimed-time" are not
// 0, when the client sends a release message the lease is expired instead of
-// being deleted from the lease storage.
+// being deleted from lease storage.
"expired-leases-processing": {
"reclaim-timer-wait-time": 5,
"hold-reclaimed-time": 1800,
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile"
},
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile"
},
// It is replaced by the "reservations-global", "reservations-in-subnet"
// and "reservations-out-of-pool" parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "shared-networks" and
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile"
},
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and "reservations-out-of-pool"
+ // "reservations-in-subnet", and "reservations-out-of-pool"
// parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "subnet4" levels.
"renew-timer": 10,
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and "reservations-out-of-pool"
+ // "reservations-in-subnet", and "reservations-out-of-pool"
// parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
"reservations-out-of-pool": false,
"renew-timer": 10,
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and "reservations-out-of-pool"
+ // "reservations-in-subnet", and "reservations-out-of-pool"
// parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
"reservations-out-of-pool": false,
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
"option-data": [
{
// vendor-encapsulated-options and defined option on global level should
-// be also configured with proper "data" parameters in "option-data" list.
+// be also configured with proper "data" parameters in "option-data" list.
// Because Kea will send only option that client ask for, and there is no way
// to ask for suboptions, parameter "always-send" with value set
// to true has also be included in all custom suboptions
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
- // We will use memfile because it doesn't require any prior set up.
+ // We will use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
// Several additional parameters are possible in addition
// to the typical output. Flush determines whether logger
// flushes output to a file. Maxsize determines maximum
- // filesize before the file is being rotated. maxver
+ // filesize before the file is rotated. maxver
// specifies the maximum number of rotated files being
// kept.
"flush": true,
// mutually exclusive configuration parameters.
//
// The primary purpose of the example file is to provide a comprehensive
-// list of parameters supported by Kea DHCPv6 server along with the brief
+// list of parameters supported by the Kea DHCPv6 server along with the brief
// description of each parameter.
//
// This stable version is used for YANG as we do not want to update code
// Class name.
"name": "phones_server1",
- // Class specific DHCPv6 options list.
+ // Class-specific DHCPv6 options list.
"option-data": [],
// Class selection expression. The DHCP packet is assigned to this
// Second class name.
"name": "phones_server2",
- // Class specific DHCPv6 options list.
+ // Class-specific DHCPv6 options list.
"option-data": [],
// Class selection expression. The DHCP packet is assigned to this
// Third class name.
"name": "late",
- // Boolean flag indicating that the class expression is only evaluated
- // when the class is required, e.g. selected address pool configuration
+ // Boolean flag indicating whether the class expression is only evaluated
+ // when the class is required, e.g. the selected address pool configuration
// includes this class name in its "require-client-classes" list. The
// default value false means that the class test expression must
// always be evaluated.
],
// Parameters for triggering behaviors compatible with broken or
- // non-compliant clients, relays or other agents
+ // non-compliant clients, relays, or other agents
"compatibility": {
// Parse options more leniently where fields can be deduced
- // deterministically even if against RFC or common practice.
+ // deterministically, even if against RFC or common practice.
"lenient-option-parsing": true
},
- // Command control socket configuration parameters for Kea DHCPv6 server.
+ // Command control socket configuration parameters for the Kea DHCPv6 server.
"control-socket": {
- // Location of the unix domain socket file the DHCPv6 server uses
+ // Location of the UNIX domain socket file the DHCPv6 server uses
// to receive control commands from the Kea Control Agent or the
// local server administrator.
"socket-name": "/tmp/kea6-ctrl-socket",
},
// Specifies a prefix to be prepended to the generated Client FQDN.
- // It may be specified at the global, shared-network and subnet levels.
+ // It may be specified at the global, shared-network, and subnet levels.
"ddns-generated-prefix": "myhost",
- // Boolean flag indicating that server should ignore DHCP client
- // wishes to update DNS on its own. With that flag set to true
+ // Boolean flag indicating whether the server should ignore DHCP client
+ // wishes to update DNS on its own. With that flag set to true,
// the server will send DNS updates for both forward and
// reverse DNS data. The default value is false, which indicates
- // that the server will delegate DNS update to the client when
- // requested. It may be specified at the global, shared-network
+ // that the server will delegate a DNS update to the client when
+ // requested. It may be specified at the global, shared-network,
// and subnet levels.
"ddns-override-client-update": false,
- // Boolean flag indicating that the server should override DHCP
+ // Boolean flag indicating whether the server should override the DHCP
// client's wish to not update the DNS. With this parameter
- // set to true the server will send DNS update even when
- // the client requested no update. It may be specified at the
- // global, shared-network and subnet levels.
+ // set to true, the server will send a DNS update even when
+ // the client requested no update. It may be specified at the
+ // global, shared-network, and subnet levels.
"ddns-override-no-update": false,
// Suffix appended to the partial name sent to the DNS. The
- // default value is an empty string which indicates that no
- // suffix is appended. It may be specified at the global,
- // shared-network and subnet levels.
+ // default value is an empty string, which indicates that no
+ // suffix is appended. It may be specified at the global,
+ // shared-network, and subnet levels.
"ddns-qualifying-suffix": "",
// Enumeration specifying whether the server should honor
- // hostname or Client FQDN sent by the client or replace
+ // the hostname or Client FQDN sent by the client or replace
// this name. The acceptable values are: "never" (use the
// name the client sent), "always" (replace the name the
// client sent), "when-present" (replace the name the client
- // sent, but do not generate one when the client didn't sent
+ // sent, but do not generate one when the client didn't send
// the name), "when-not-present" (generate the name when
// client didn't send one, otherwise leave the name the
- // client sent). The default value is "never". It may be
- // specified at the global, shared-network and subnet levels.
+ // client sent). The default value is "never". It may be
+ // specified at the global, shared-network, and subnet levels.
"ddns-replace-client-name": "never",
- // Boolean flag which enables or disables the DDNS updating. It
- // defaults to true. It may be specified at the global, shared-
- // network and subnet levels. It works in conjunction with
- // dhcp-ddns:enable-updates which must be true to enable connectivity
+ // Boolean flag which enables or disables DDNS updating. It
+ // defaults to true. It may be specified at the global, shared-
+ // network, and subnet levels. It works in conjunction with
+ // dhcp-ddns:enable-updates, which must be true to enable connectivity
// to kea-dhcp-ddns.
"ddns-send-updates": true,
// Boolean flag, which when true instructs the server to always
// update DNS when leases are renewed, even if the DNS information
- // has not changed. The server's default behavior (i.e. flag is false)
- // is to only update DNS if the DNS information has changed. It
- // may be specified at the global, shared-network and subnet levels.
+ // has not changed. The server's default behavior (i.e. flag is false)
+ // is to only update DNS if the DNS information has changed. It
+ // may be specified at the global, shared-network, and subnet levels.
"ddns-update-on-renew": true,
- // Boolean flag, which is passed to kea-dhcp-ddns with each DDNS
- // update request to indicate whether or not DNS update conflict
+ // Boolean flag which is passed to kea-dhcp-ddns with each DDNS
+ // update request, to indicate whether DNS update conflict
// resolution as described in RFC 4703 should be employed for the
- // given update request. The default value for this flag is true.
- // It may be specified at the global, shared-network and subnet levels.
+ // given update request. The default value for this flag is true.
+ // It may be specified at the global, shared-network, and subnet levels.
"ddns-use-conflict-resolution": true,
// 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,
- // Name Change Requests forwarding configuration for Kea DHCPv6 server.
- // NCRs are sent to Kea D2 module to update DNS upon allocation of the
+ // Name Change Request forwarding configuration for the Kea DHCPv6 server.
+ // NCRs are sent to the Kea D2 module to update DNS upon allocation of
// DHCP leases.
"dhcp-ddns": {
- // Boolean flag indicating if Kea DHCPv6 server should connect to
- // kea-dhcp-ddns. This must be true for NCRs to be created and
- // sent to kea-dhcp-ddns. By default NCRs are not generated.
+ // Boolean flag indicating whether Kea DHCPv6 server should connect to
+ // kea-dhcp-ddns. This must be true for NCRs to be created and
+ // sent to kea-dhcp-ddns. By default, NCRs are not generated.
"enable-updates": false,
// Specifies maximum number of NCRs to queue waiting to be sent
- // to Kea D2 server.
+ // to the Kea D2 server.
"max-queue-size": 1024,
- // Packet format to use when sending NCRs to Kea D2 server.
+ // Packet format to use when sending NCRs to the Kea D2 server.
// Currently, only JSON format is supported.
"ncr-format": "JSON",
// only UDP is supported.
"ncr-protocol": "UDP",
- // IP address that Kea DHCPv6 server should use to send
- // NCRs to D2. Default value of zero indicates that Kea
- // should pick suitable address.
+ // IP address that the Kea DHCPv6 server should use to send
+ // NCRs to D2. The default value of zero indicates that Kea
+ // should pick a suitable address.
"sender-ip": "::1",
- // Port number that Kea DHCPv6 server should use to send
- // NCRs to D2. Default value of zero indicates that Kea
- // should pick suitable port.
+ // Port number that the Kea DHCPv6 server should use to send
+ // NCRs to D2. The default value of zero indicates that Kea
+ // should pick a suitable port.
"sender-port": 0,
// IP address on which D2 listens for NCRs.
// Port number on which D2 listens for NCRs.
"server-port": 53001,
- // The follow parameters are DEPRECATED. They have been
+ // The following parameters are DEPRECATED. They have been
// replaced with parameters that may be set at the global,
- // shared-network, and subnet6 scopes. They are listed here
- // as configuration parsing still accepts them. Eventually
+ // shared-network, and subnet6 scopes. They are listed here
+ // as configuration parsing still accepts them. Eventually
// support for them will be removed.
"generated-prefix": "myhost",
"hostname-char-replacement": "x",
// Collection of Kea DHCPv6 server parameters configuring how
// the server should process expired DHCP leases.
"expired-leases-processing": {
- // Specifies the number of seconds since last removal of
- // the expired leases when next removal should occur.
+ // Specifies the number of seconds since the last removal of
+ // the expired leases, when the next removal should occur.
// If both "flush-reclaimed-timer-wait-time" and
// "hold-reclaimed-time" are not 0, when the client sends a release
- // message the lease is expired instead of being deleted from the
+ // message the lease is expired instead of being deleted from
// lease storage.
"flush-reclaimed-timer-wait-time": 25,
- // Specifies the time period in seconds to keep expired
+ // Specifies the length of time in seconds to keep expired
// leases in the lease database (lease affinity).
// If both "flush-reclaimed-timer-wait-time" and
// "hold-reclaimed-time" are not 0, when the client sends a release
- // message the lease is expired instead of being deleted from the
+ // message the lease is expired instead of being deleted from
// lease storage.
"hold-reclaimed-time": 3600,
// Specifies the maximum number of expired leases that can be
- // processed in a single attempt to clean up the lease
- // database from the expired leases. If there are more
+ // processed in a single attempt to clean up expired leases
+ // from the lease database. If there are more
// expired leases, they will be processed during the next
// cleanup attempt.
"max-reclaim-leases": 100,
- // Specifies the maximum time in milliseconds that the single
- // attempt to cleanup the lease database from the expired
- // leases may take.
+ // Specifies the maximum time in milliseconds that a single attempt
+ // to clean up expired leases from the lease database may take.
"max-reclaim-time": 250,
- // Specifies the time period in seconds since last attempt
- // to process expired leases to initiate the next attempt.
+ // Specifies the length of time in seconds since the last attempt
+ // to process expired leases before initiating the next attempt.
"reclaim-timer-wait-time": 10,
- // Specifies the maximum number of expired leases processing
- // cycles which didn't result in full cleanup of the lease
- // database from the expired leases, after which a
- // warning message is issued.
+ // Specifies the maximum number of expired lease-processing cycles
+ // which didn't result in full cleanup of exired leases from the
+ // lease database, after which a warning message is issued.
"unwarned-reclaim-cycles": 5
},
- // List of hooks libraries and their specific configuration parameters
+ // List of hook libraries and their specific configuration parameters
// to be loaded by Kea DHCPv4 server.
"hooks-libraries": [
{
- // Location of the hooks library to be loaded.
+ // Location of the hook library to be loaded.
"library": "/opt/lib/kea/hooks/libdhcp_lease_cmds.so",
- // Hook library specific configuration parameters.
+ // Hook library-specific configuration parameters.
"parameters": { }
}
],
// Port on which the database is available.
"port": 3306,
- // Type of the database, e.g. "mysql", "postgresql".
+ // Type of database, e.g. "mysql", "postgresql".
"type": "mysql",
- // User name to be used to access the database.
+ // Username to be used to access the database.
"user": "keatest",
- // Read only mode.
+ // Read-only mode.
"readonly": false,
- // Next entries are for the OpenSSL support in MySQL.
+ // The next entries are for OpenSSL support in MySQL.
+
// Trust anchor aka certificate authority file or directory.
"trust-anchor": "my-ca",
// Port on which the database is available.
"port": 5432,
- // Type of the database, e.g. "mysql", "postgresql".
+ // Type of database, e.g. "mysql", "postgresql".
"type": "postgresql",
- // User name to be used to access the database.
+ // Username to be used to access the database.
"user": "keatest",
// Connection reconnect wait time.
// serve-retry-continue
"on-fail": "stop-retry-exit",
- // Connection connect timeout.
+ // Connection connect timeout in seconds.
"connect-timeout": 100
}
],
// List of host reservation identifier types to be used by the
- // Kea DHCPv6 server to fetch static reservations for the
+ // Kea DHCPv6 server to fetch static reservations for
// DHCP clients. All identifiers are used by default, which
// means that the server will issue multiple queries to the
- // database to find if there is a reservation for the particular
- // client. If the particular deployment uses only subset, e.g.
- // one, identifier type, this identifier should be only listed
+ // database to find if there is a reservation for a particular
+ // client. If a particular deployment uses only a subset, e.g.
+ // one identifier type, this identifier should be only listed
// here to prevent unnecessary queries to the database.
"host-reservation-identifiers": [
"hw-address",
// server is listening to the DHCP queries.
"interfaces-config": {
// Specifies a list of interfaces on which the Kea DHCPv6
- // server should listen to the DHCP requests.
+ // server should listen to DHCP requests.
"interfaces": [
"eth0"
],
- // Boolean flag indicating if the available interfaces should
+ // Boolean flag indicating whether the available interfaces should
// be re-detected upon server reconfiguration. The default value
- // is true which means that the interfaces are always
+ // is true, which means that the interfaces are always
// re-detected.
"re-detect": true,
- // Kea tries to bind the service sockets during initialization. It may
- // fail due to a port being already opened or misconfiguration. Kea can
- // suppress these errors and only logs them. This flag prevents starting
+ // Kea tries to bind the service sockets during initialization, but it may
+ // fail due to a port being already opened or a misconfiguration. Kea can
+ // suppress these errors and only log them. This flag prevents starting
// the DHCP server without binding all sockets. If unspecified, it
// defaults to false.
"service-sockets-require-all": true,
// Kea tries to bind the service sockets during initialization. This
// option specifies how many times binding to interface will be retried.
- // The default value is 0 which means that the operation will not be
+ // The default value is 0, which means that the operation will not be
// repeated.
"service-sockets-max-retries": 5,
// decision table indexed by reservation identifiers.
"early-global-reservations-lookup": true,
- // Boolean parameter which controls DHCP server's behavior with respect
+ // Boolean parameter which controls the DHCP server's behavior with respect
// to creating host reservations for the same IP address or delegated
// prefix. By default this flag is set to true in which case the server
// prevents creation of multiple host reservations for the same IP address
/// should be performed before lease lookup. This parameter has effect
/// only when multi-threading is disabled. When multi-threading is
/// enabled, host reservations lookup is always performed first to avoid
- /// lease lookup resource locking.
+ /// lease-lookup resource locking.
"reservations-lookup-first": true,
// Specifies credentials to access lease database.
"lease-database": {
- // memfile backend specific parameter specifying the interval
- // in seconds at which lease file should be cleaned up (outdated
- // lease entries are removed to prevent lease file from growing
+ // memfile backend-specific parameter specifying the interval
+ // in seconds at which the lease file should be cleaned up (outdated
+ // lease entries are removed to prevent the lease file from growing
// infinitely).
"lfc-interval": 3600,
- // Maximum number of lease file read errors allowed before
- // loading the file is abandoned. Defaults to 0 (no limit).
+ // Maximum number of lease-file read errors allowed before
+ // loading the file is abandoned. Defaults to 0 (no limit).
"max-row-errors": 100,
- // Name of the lease file. In case of database it specifies the
+ // Name of the lease file. In the case of a database it specifies the
// database name.
"name": "/tmp/kea-dhcp6.csv",
- // memfile specific parameter indicating whether leases should
+ // memfile-specific parameter indicating whether leases should
// be saved on persistent storage (disk) or not. The true value
- // is the default and it indicates that leases are stored in the
+ // is the default and it indicates that leases are stored in
// persistent storage. This setting must be used in production.
// The false value should only be used for testing purposes
- // because non stored leases will be lost upon Kea server restart.
+ // because non-stored leases will be lost upon Kea server restart.
"persist": true,
// Lease database backend type, i.e. "memfile", "mysql" or
// Kea Administrator Reference Manual.
"mac-sources": [ "duid" ],
- // List of global DHCP options that Kea DHCPv6 server assigns to the
+ // List of global DHCP options that the Kea DHCPv6 server assigns to
// clients.
"option-data": [
{
- // Boolean flag indicating if the given option is always
+ // Boolean flag indicating whether the given option is always
// sent in response or only when requested. The default
// value of false indicates that it is only sent when
// requested.
// Boolean value indicating whether the option data specified
// in the "data" field is specified as a string of hexadecimal
- // digits or in human readable CSV format.
+ // digits or in human-readable CSV format.
"csv-format": true,
// Option data to be stored in the option payload.
"data": "2001:db8:2::45, 2001:db8:2::100",
- // Option name. It is not required of the option code is
+ // Option name. It is not required if the option code is
// provided.
"name": "dns-servers",
- // Boolean flag indicating if the given option is never
+ // Boolean flag indicating whether the given option is never
// sent in response. The default value of false indicates
- // that it is sent when it should. When true the option
- // is not sent despite of any other setting, i.e. it is
+ // that it is sent when it should be. When true, the option
+ // is not sent despite any other setting, i.e. it is
// a final flag.
"never-send": false,
// Option space. The default is the "dhcp6" option space which
- // groups top level DHCPv6 options.
+ // groups top-level DHCPv6 options.
"space": "dhcp6"
}
],
// Kea DHCPv6 server is using.
"option-def": [
{
- // Boolean flag indicating if the option definition comprises
- // an array of values of some type, e.g. array of IPv6 addresses.
+ // Boolean flag indicating whether the option definition comprises
+ // an array of values of some type, e.g. an array of IPv6 addresses.
// The default value of false means that the option does not
// comprise an array of values.
"array": false,
// Holds a name of the option space encapsulated by this option.
// All options that belong to this option space will be sent
- // as sub-options of this option. Empty string means that this
+ // as sub-options of this option. An empty string means that this
// option doesn't encapsulate any option.
"encapsulate": "",
"name": "my-option",
// Specifies the types of fields within the option if the option
- // is said to be a "record" (see "type"). in this particular example
+ // is said to be a "record" (see "type"). In this particular example
// this option comprises two fields, 1 byte and 2 bytes long.
"record-types": "uint8, uint16",
// Global value which limits the number of client packets (e.g.
// REQUESTs,RENEWs...) that may be parked while waiting for
// hook library work to complete, prior to a response (e.g. REPLY)
- // being sent back to the client. A typical example is when kea-dhcp6
+ // being sent back to the client. A typical example is when kea-dhcp6
// parks a REQUEST while it sends the lease update(s) to its
// HA peer(s). The packet is unparked once the update(s) have been
// acknowledged. This value limits the number of packets that can
"max-preferred-lifetime": 60,
// Global value for the rebind timer, i.e. the time after which the
- // DHCP client enters rebind state if it fails to renew the lease.
+ // DHCP client enters the rebind state if it fails to renew the lease.
"rebind-timer": 40,
// List of relay supplied option codes. See RFC 6422.
"relay-supplied-options": [ "110", "120", "130" ],
- // Global value for the renew timer, i.e. the timer after which the
+ // Global value for the renew timer, i.e. the time after which the
// DHCP client renews the lease.
"renew-timer": 30,
// Statistics keep some samples per observation point.
// There are two default values: maximum count and maximum age.
- // Set the maximum count to zero disables it.
+ // Setting the maximum count to zero disables it.
"statistic-default-sample-count": 0,
// When the maximum count is 0 the maximum age (in seconds) applies.
// When multi-threading is enabled, Kea will process packets on a
// number of multiple threads configurable through this option. The
- // value must be a positive integer (0 means auto detect).
+ // value must be a positive integer (0 means auto-detect).
"thread-pool-size": 0,
// When multi-threading is enabled, Kea will read packets from the
"packet-queue-size": 0
},
- // Governs how the Kea DHCPv6 server should deal with the invalid
+ // Governs how the Kea DHCPv6 server should deal with invalid
// data received from the client.
"sanity-checks": {
// Specifies how the Kea DHCPv6 server should behave when invalid
// data is read for a lease from the lease file. The following
- // values are supported "none" (don't attempt to correct the
+ // values are supported: "none" (don't attempt to correct the
// lease information), "warn" (print a warning for subnet-id
// related inconsistencies), "fix" (correct the subnet id by
// trying to find the suitable subnet), "fix-del" (similar
// Specifies how Kea DHCPv4 server should behave when invalid
// extended info is read for a lease from the lease file, or
- // whether to upgrade from old format. The following values
- // are supported "none" (don't attempt to correct or upgrade
+ // whether to upgrade from the old format. The following values
+ // are supported: "none" (don't attempt to correct or upgrade
// the extended info), "fix" (fix common inconsistencies and
- // upgrade from old format, this is the default), "strict"
- // (fix inconsistencies with an impact on Lease Query),
+ // upgrade from the old format; this is the default), "strict"
+ // (fix inconsistencies with an impact on Leasequery),
// "pedantic" (enforce full Kea code format).
"extended-info-checks": "fix"
},
// Identifier part of the DUID.
"identifier": "0123456789",
- // Boolean flag indicating if the DUID should be persisted on
+ // Boolean flag indicating whether the DUID should be persisted on
// disk.
"persist": false
},
- // List of shared networks used by Kea DHCPv6 server. The shared
+ // List of shared networks used by the Kea DHCPv6 server. The shared
// networks group subnets together.
"shared-networks": [
{
// Restricts this shared network to allow only clients
- // that belong to the particular client class. If an
+ // that belong to a particular client class. If an
// empty string is provided, no restriction is applied.
"client-class": "",
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-generated-prefix": "myhost",
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-override-client-update": false,
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-override-no-update": false,
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-qualifying-suffix": "",
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-replace-client-name": "never",
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-send-updates": true,
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-update-on-renew": true,
- // Shared network level value. See description at the global level.
+ // 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.
+ // Shared-network level value. See description at the global level.
"hostname-char-replacement": "x",
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"hostname-char-set": "[^A-Za-z0-9.-]",
- // Specifies that this shared network is selected for the
- // requests received on the particular interface.
+ // Specifies that this shared network is selected for
+ // requests received on a particular interface.
"interface": "eth0",
// Specifies the content of the interface-id option used
// Shared network name.
"name": "my-secret-network",
- // List of shared network specific DHCP options.
+ // List of shared network-specific DHCP options.
"option-data": [],
- // Shared network specific (default) preferred lifetime.
+ // Shared network-specific (default) preferred lifetime.
"preferred-lifetime": 2000,
- // Shared network specific min preferred lifetime.
+ // Shared network-specific min preferred lifetime.
"min-preferred-lifetime": 1500,
- // Shared network specific ma xpreferred lifetime.
+ // Shared network-specific ma xpreferred lifetime.
"max-preferred-lifetime": 2500,
- // Boolean flag indicating if the server can respond to
+ // Boolean flag indicating whether the server can respond to
// a Solicit message including a Rapid Commit option with
// the Reply message (See DHCPv6 rapid commit).
"rapid-commit": false,
"ip-addresses": []
},
- // Shared network level rebind timer.
+ // Shared-network level rebind timer.
"rebind-timer": 41,
- // Shared network level renew timer.
+ // Shared-network level renew timer.
"renew-timer": 31,
- // Shared network level compute T1 and T2 timers.
+ // Shared-network level compute T1 and T2 timers.
"calculate-tee-times": true,
// T1 = valid lifetime * .5.
// Cache threshold = valid lifetime * .25.
"cache-threshold": .25,
- // Cache maximum: when the client last transmission time
- // is close enough the lease is not renewed and current
+ // Cache maximum: when the client last-transmission time
+ // is close enough, the lease is not renewed and the current
// lease is returned as it was "cached".
- "cache-max-age": 10,
+ "cache-max-age": 1000,
- // Enumeration specifying server's mode of operation when it
+ // Enumeration specifying the server's mode of operation when it
// fetches host reservations.
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and "reservations-out-of-pool"
+ // "reservations-in-subnet", and "reservations-out-of-pool"
// parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "subnet6" levels.
"require-client-classes": [ "late" ],
// Turn off storage of extended information (e.g. relay agent
- // information) with each lease for this shared-network.
+ // information) with each lease for this shared network.
"store-extended-info": false,
// List of IPv6 subnets belonging to this shared network.
"subnet6": [
{
// Restricts this subnet to allow only clients that belong
- // to the particular client class. If an empty string is
+ // to a particular client class. If an empty string is
// provided, no restriction is applied.
"client-class": "",
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-generated-prefix": "myhost",
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-override-client-update": false,
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-override-no-update": false,
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-qualifying-suffix": "",
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-replace-client-name": "never",
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-send-updates": true,
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-update-on-renew": true,
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-use-conflict-resolution": true,
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"hostname-char-replacement": "x",
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"hostname-char-set": "[^A-Za-z0-9.-]",
// Subnet unique identifier.
"id": 1,
- // Specifies that this subnet is selected for the requests
- // received on the particular interface.
+ // Specifies that this subnet is selected for requests
+ // received on a particular interface.
"interface": "eth0",
// Specifies the content of the interface-id option used
// information) with each lease for this subnet.
"store-extended-info": true,
- // Subnet level list of DHCP options.
+ // Subnet-level list of DHCP options.
"option-data": [
{
- // Boolean flag indicating if the particular option
+ // Boolean flag indicating whether the particular option
// should be always sent or sent only when requested.
"always-send": false,
// Option code.
"code": 7,
- // Boolean flag indicating if the option value specified
- // in "data" is a string of hexadecimal values or human
- // readable CSV value.
+ // Boolean flag indicating whether the option value specified
+ // in "data" is a string of hexadecimal values or human-readable
+ // CSV value.
"csv-format": false,
// Option data to be included in the option payload.
// Option name.
"name": "preference",
- // Boolean flag indicating if the given option is never
+ // Boolean flag indicating whether the given option is never
// sent in response.
"never-send": false,
"pools": [
{
- // Restricts this pool to be only used for the client
+ // Restricts this pool to only be used for client
// requests belonging to a particular client class.
"client-class": "phones_server1",
- // Pool level list of DHCP options.
+ // Pool-level list of DHCP options.
"option-data": [],
// Address range used for client assignments.
"require-client-classes": [ "late" ]
},
{
- // Restricts this pool to be only used for the client
+ // Restricts this pool to only be used for client
// requests belonging to a particular client class.
"client-class": "phones_server2",
- // Pool level list of DHCP options.
+ // Pool-level list of DHCP options.
"option-data": [],
// Address range used for client assignments.
// Subnet specific max referred lifetime.
"max-preferred-lifetime": 2500,
- // Boolean flag indicating if the server can respond to
+ // Boolean flag indicating whether the server can respond to
// a Solicit message including a Rapid Commit option with
// the Reply message (See DHCPv6 rapid commit).
"rapid-commit": false,
- // Subnet level rebind timer.
+ // Subnet-level rebind timer.
"rebind-timer": 40,
// List of IPv4 relay addresses for which this subnet
]
},
- // Subnet level renew timer.
+ // Subnet-level renew timer.
"renew-timer": 30,
- // Enumeration specifying server's mode of operation when it
+ // Enumeration specifying the server's mode of operation when it
// fetches host reservations.
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and
+ // "reservations-in-subnet", and
// "reservations-out-of-pool" parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved
+ // Specify whether the server can assume that all reserved
// addresses are out-of-pool.
// Ignored when reservations-in-subnet is false.
"reservations-out-of-pool": false,
- // Subnet level compute T1 and T2 timers.
+ // Subnet-level compute T1 and T2 timers.
"calculate-tee-times": true,
// T1 = valid lifetime * .5.
// Cache threshold = valid lifetime * .25.
"cache-threshold": .25,
- // Subnet level cache maximum.
- "cache-max-age": 10,
+ // Subnet-level cache maximum.
+ "cache-max-age": 1000,
- // List of static IPv6 reservations assigned to the clients belonging
- // to this subnet. For detailed example see reservations.json.
+ // List of static IPv6 reservations assigned to clients belonging
+ // to this subnet. For a detailed example, see reservations.json.
"reservations": [
{
// Identifier used for client matching. Supported values are
// Reserved hostname.
"hostname": "foo.example.com",
- // Reservation specific option data.
+ // Reservation-specific option data.
"option-data": [
{
// Option name.
// Subnet prefix.
"subnet": "2001:db8::/32",
- // Subnet level (default) valid lifetime.
+ // Subnet-level (default) valid lifetime.
"valid-lifetime": 6000,
- // Subnet level min valid lifetime.
+ // Subnet-level min valid lifetime.
"min-valid-lifetime": 4000,
- // Subnet level max valid lifetime.
+ // Subnet-level max valid lifetime.
"max-valid-lifetime": 8000
}
],
- // Shared network level (default) valid lifetime.
+ // Shared-network level (default) valid lifetime.
"valid-lifetime": 6001,
- // Shared network level min valid lifetime.
+ // Shared-network level min valid lifetime.
"min-valid-lifetime": 4001,
- // Shared network level max valid lifetime.
+ // Shared-network level max valid lifetime.
"max-valid-lifetime": 8001
}
],
// List of IPv6 subnets which don't belong to any shared network.
"subnet6": [],
- // Global (default) valid lifetime value.
+ // Global valid lifetime value.
"valid-lifetime": 6000,
// Global min valid lifetime value.
"reservations": [],
// Configuration control (currently not used, i.e. this syntax
- // is already defined but corresponding feature is not implemented).
+ // is already defined but the corresponding feature is not implemented).
"config-control": {
- // Only configuration databases entry is defined.
+ // Only the configuration databases entry is defined.
"config-databases": [
{
// Name of the database to connect to.
"name": "config",
- // Type of the database, e.g. "mysql", "postgresql".
+ // Type of database, e.g. "mysql", "postgresql".
"type": "mysql"
}
],
- // Intervals between attempts to fetch configuration updates
+ // Interval between attempts to fetch configuration updates
// via the configuration backends used.
"config-fetch-wait-time": 30
},
// Server tag.
"server-tag": "my DHCPv6 server",
- // DHCP queue control parameters.
+ // DHCP queue-control parameters.
"dhcp-queue-control": {
// Enable queue is mandatory.
"enable-queue": true,
- // Queue type was mandatory.
+ // Queue type is mandatory.
"queue-type": "kea-ring6",
// Capacity is optional.
// Fetches host reservations.
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and "reservations-out-of-pool" parameters.
+ // "reservations-in-subnet", and "reservations-out-of-pool" parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "shared-networks" and
"cache-threshold": .25,
// Global cache maximum.
- "cache-max-age": 10,
+ "cache-max-age": 1000,
// String of zero or more characters with which to replace each
// invalid character in the Client FQDN. The default
- // value is an empty string which will cause invalid characters
+ // value is an empty string, which will cause invalid characters
// to be omitted rather than replaced.
"hostname-char-replacement": "x",
"loggers": [
{
// Debug level, a value between 0..99. The greater the value
- // the more detailed debug log.
+ // the more detailed the debug log.
"debuglevel": 99,
// Name of the logger.
// Configures how the log should be output.
"output_options": [
{
- // Determines whether the log should flushed to a file.
+ // Determines whether the log should be flushed to a file.
"flush": true,
- // Specifies maximum filesize before the file is being rotated.
+ // Specifies maximum filesize before the file is rotated.
"maxsize": 10240000,
- // Specifies the maximum number of rotated files being kept.
+ // Specifies the maximum number of rotated files to be kept.
"maxver": 1,
- // Specifies logging destination.
+ // Specifies the logging destination.
"output": "stdout",
// Specifies log entry content
}
],
- // Look at advanced example for the use of user-contexts.
+ // Look at advanced examples for the use of user-contexts.
"user-context": { }
}
}
// mutually exclusive configuration parameters.
//
// The primary purpose of the example file is to provide a comprehensive
-// list of parameters supported by Kea DHCPv6 server along with the brief
+// list of parameters supported by the Kea DHCPv6 server along with the brief
// description of each parameter.
//
// This current version should be up to date, i.e. new keywords should be
-// added in this file at the same time than in the syntax.
+// added in this file at the same time as in the parser specification.
{
// Kea DHCPv6 server configuration begins here.
"Dhcp6": {
// Class name.
"name": "phones_server1",
- // Class specific DHCPv6 options list.
+ // Class-specific DHCPv6 options list.
"option-data": [],
// Class selection expression. The DHCP packet is assigned to this
// Second class name.
"name": "phones_server2",
- // Class specific DHCPv6 options list.
+ // Class-specific DHCPv6 options list.
"option-data": [],
// Class selection expression. The DHCP packet is assigned to this
// Third class name.
"name": "late",
- // Boolean flag indicating that the class expression is only evaluated
- // when the class is required, e.g. selected address pool configuration
+ // Boolean flag indicating whether the class expression is only evaluated
+ // when the class is required, e.g. the selected address pool configuration
// includes this class name in its "require-client-classes" list. The
// default value false means that the class test expression must
// always be evaluated.
],
// Parameters for triggering behaviors compatible with broken or
- // non-compliant clients, relays or other agents
+ // non-compliant clients, relays, or other agents
"compatibility": {
// Parse options more leniently where fields can be deduced
- // deterministically even if against RFC or common practice.
+ // deterministically, even if against RFC or common practice.
"lenient-option-parsing": true
},
- // Command control socket configuration parameters for Kea DHCPv6 server.
+ // Command control socket configuration parameters for the Kea DHCPv6 server.
"control-socket": {
- // Location of the unix domain socket file the DHCPv6 server uses
+ // Location of the UNIX domain socket file the DHCPv6 server uses
// to receive control commands from the Kea Control Agent or the
// local server administrator.
"socket-name": "/tmp/kea6-ctrl-socket",
},
// Specifies a prefix to be prepended to the generated Client FQDN.
- // It may be specified at the global, shared-network and subnet levels.
+ // It may be specified at the global, shared-network, and subnet levels.
"ddns-generated-prefix": "myhost",
- // Boolean flag indicating that server should ignore DHCP client
- // wishes to update DNS on its own. With that flag set to true
+ // Boolean flag indicating whether the server should ignore DHCP client
+ // wishes to update DNS on its own. With that flag set to true,
// the server will send DNS updates for both forward and
// reverse DNS data. The default value is false, which indicates
- // that the server will delegate DNS update to the client when
- // requested. It may be specified at the global, shared-network
+ // that the server will delegate a DNS update to the client when
+ // requested. It may be specified at the global, shared-network,
// and subnet levels.
"ddns-override-client-update": false,
- // Boolean flag indicating that the server should override DHCP
+ // Boolean flag indicating whether the server should override the DHCP
// client's wish to not update the DNS. With this parameter
- // set to true the server will send DNS update even when
- // the client requested no update. It may be specified at the
- // global, shared-network and subnet levels.
+ // set to true, the server will send a DNS update even when
+ // the client requested no update. It may be specified at the
+ // global, shared-network, and subnet levels.
"ddns-override-no-update": false,
// Suffix appended to the partial name sent to the DNS. The
- // default value is an empty string which indicates that no
- // suffix is appended. It may be specified at the global,
- // shared-network and subnet levels.
+ // default value is an empty string, which indicates that no
+ // suffix is appended. It may be specified at the global,
+ // shared-network, and subnet levels.
"ddns-qualifying-suffix": "",
// Enumeration specifying whether the server should honor
- // hostname or Client FQDN sent by the client or replace
+ // the hostname or Client FQDN sent by the client or replace
// this name. The acceptable values are: "never" (use the
// name the client sent), "always" (replace the name the
// client sent), "when-present" (replace the name the client
- // sent, but do not generate one when the client didn't sent
+ // sent, but do not generate one when the client didn't send
// the name), "when-not-present" (generate the name when
// client didn't send one, otherwise leave the name the
- // client sent). The default value is "never". It may be
- // specified at the global, shared-network and subnet levels.
+ // client sent). The default value is "never". It may be
+ // specified at the global, shared-network, and subnet levels.
"ddns-replace-client-name": "never",
- // Boolean flag which enables or disables the DDNS updating. It
- // defaults to true. It may be specified at the global, shared-
- // network and subnet levels. It works in conjunction with
- // dhcp-ddns:enable-updates which must be true to enable connectivity
+ // Boolean flag which enables or disables DDNS updating. It
+ // defaults to true. It may be specified at the global, shared-
+ // network, and subnet levels. It works in conjunction with
+ // dhcp-ddns:enable-updates, which must be true to enable connectivity
// to kea-dhcp-ddns.
"ddns-send-updates": true,
// Boolean flag, which when true instructs the server to always
// update DNS when leases are renewed, even if the DNS information
- // has not changed. The server's default behavior (i.e. flag is false)
- // is to only update DNS if the DNS information has changed. It
- // may be specified at the global, shared-network and subnet levels.
+ // has not changed. The server's default behavior (i.e. flag is false)
+ // is to only update DNS if the DNS information has changed. It
+ // may be specified at the global, shared-network, and subnet levels.
"ddns-update-on-renew": true,
- // Boolean flag, which is passed to kea-dhcp-ddns with each DDNS
- // update request to indicate whether or not DNS update conflict
+ // Boolean flag which is passed to kea-dhcp-ddns with each DDNS
+ // update request, to indicate whether DNS update conflict
// resolution as described in RFC 4703 should be employed for the
- // given update request. The default value for this flag is true.
- // It may be specified at the global, shared-network and subnet levels.
+ // given update request. The default value for this flag is true.
+ // 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
// excluded from DHCP assignments. The default value is 24 hours.
"decline-probation-period": 86400,
- // Name Change Requests forwarding configuration for Kea DHCPv6 server.
- // NCRs are sent to Kea D2 module to update DNS upon allocation of the
+ // Name Change Request forwarding configuration for the Kea DHCPv6 server.
+ // NCRs are sent to the Kea D2 module to update DNS upon allocation of
// DHCP leases.
"dhcp-ddns": {
- // Boolean flag indicating if Kea DHCPv6 server should connect to
- // kea-dhcp-ddns. This must be true for NCRs to be created and
- // sent to kea-dhcp-ddns. By default NCRs are not generated.
+ // Boolean flag indicating whether Kea DHCPv6 server should connect to
+ // kea-dhcp-ddns. This must be true for NCRs to be created and
+ // sent to kea-dhcp-ddns. By default, NCRs are not generated.
"enable-updates": false,
// Specifies maximum number of NCRs to queue waiting to be sent
- // to Kea D2 server.
+ // to the Kea D2 server.
"max-queue-size": 1024,
- // Packet format to use when sending NCRs to Kea D2 server.
+ // Packet format to use when sending NCRs to the Kea D2 server.
// Currently, only JSON format is supported.
"ncr-format": "JSON",
// only UDP is supported.
"ncr-protocol": "UDP",
- // IP address that Kea DHCPv6 server should use to send
- // NCRs to D2. Default value of zero indicates that Kea
- // should pick suitable address.
+ // IP address that the Kea DHCPv6 server should use to send
+ // NCRs to D2. The default value of zero indicates that Kea
+ // should pick a suitable address.
"sender-ip": "::1",
- // Port number that Kea DHCPv6 server should use to send
- // NCRs to D2. Default value of zero indicates that Kea
- // should pick suitable port.
+ // Port number that the Kea DHCPv6 server should use to send
+ // NCRs to D2. The default value of zero indicates that Kea
+ // should pick a suitable port.
"sender-port": 0,
// IP address on which D2 listens for NCRs.
// Port number on which D2 listens for NCRs.
"server-port": 53001,
- // The follow parameters are DEPRECATED. They have been
+ // The following parameters are DEPRECATED. They have been
// replaced with parameters that may be set at the global,
- // shared-network, and subnet6 scopes. They are listed here
- // as configuration parsing still accepts them. Eventually
+ // shared-network, and subnet6 scopes. They are listed here
+ // as configuration parsing still accepts them. Eventually
// support for them will be removed.
"generated-prefix": "myhost",
"hostname-char-replacement": "x",
// Collection of Kea DHCPv6 server parameters configuring how
// the server should process expired DHCP leases.
"expired-leases-processing": {
- // Specifies the number of seconds since last removal of
- // the expired leases when next removal should occur.
+ // Specifies the number of seconds since the last removal of
+ // the expired leases, when the next removal should occur.
// If both "flush-reclaimed-timer-wait-time" and
// "hold-reclaimed-time" are not 0, when the client sends a release
- // message the lease is expired instead of being deleted from the
+ // message the lease is expired instead of being deleted from
// lease storage.
"flush-reclaimed-timer-wait-time": 25,
- // Specifies the time period in seconds to keep expired
+ // Specifies the length of time in seconds to keep expired
// leases in the lease database (lease affinity).
// If both "flush-reclaimed-timer-wait-time" and
// "hold-reclaimed-time" are not 0, when the client sends a release
- // message the lease is expired instead of being deleted from the
+ // message the lease is expired instead of being deleted from
// lease storage.
"hold-reclaimed-time": 3600,
// Specifies the maximum number of expired leases that can be
- // processed in a single attempt to clean up the lease
- // database from the expired leases. If there are more
+ // processed in a single attempt to clean up expired leases
+ // from the lease database. If there are more
// expired leases, they will be processed during the next
// cleanup attempt.
"max-reclaim-leases": 100,
- // Specifies the maximum time in milliseconds that the single
- // attempt to cleanup the lease database from the expired
- // leases may take.
+ // Specifies the maximum time in milliseconds that a single attempt
+ // to clean up expired leases from the lease database may take.
"max-reclaim-time": 250,
- // Specifies the time period in seconds since last attempt
- // to process expired leases to initiate the next attempt.
+ // Specifies the length of time in seconds since the last attempt
+ // to process expired leases before initiating the next attempt.
"reclaim-timer-wait-time": 10,
- // Specifies the maximum number of expired leases processing
- // cycles which didn't result in full cleanup of the lease
- // database from the expired leases, after which a
- // warning message is issued.
+ // Specifies the maximum number of expired lease-processing cycles
+ // which didn't result in full cleanup of exired leases from the
+ // lease database, after which a warning message is issued.
"unwarned-reclaim-cycles": 5
},
- // List of hooks libraries and their specific configuration parameters
+ // List of hook libraries and their specific configuration parameters
// to be loaded by Kea DHCPv4 server.
"hooks-libraries": [
{
- // Location of the hooks library to be loaded.
+ // Location of the hook library to be loaded.
"library": "/opt/lib/kea/hooks/libdhcp_lease_cmds.so",
- // Hook library specific configuration parameters.
+ // Hook library-specific configuration parameters.
"parameters": { }
}
],
// Port on which the database is available.
"port": 3306,
- // Type of the database, e.g. "mysql", "postgresql".
+ // Type of database, e.g. "mysql", "postgresql".
"type": "mysql",
- // User name to be used to access the database.
+ // Username to be used to access the database.
"user": "keatest",
- // Read only mode.
+ // Read-only mode.
"readonly": false,
- // Next entries are for the OpenSSL support in MySQL.
+ // The next entries are for OpenSSL support in MySQL.
+
// Trust anchor aka certificate authority file or directory.
"trust-anchor": "my-ca",
// Port on which the database is available.
"port": 5432,
- // Type of the database, e.g. "mysql", "postgresql".
+ // Type of database, e.g. "mysql", "postgresql".
"type": "postgresql",
- // User name to be used to access the database.
+ // Username to be used to access the database.
"user": "keatest",
// TCP user timeout while communicating with the database.
// Port on which the database is available.
"port": 9042,
- // Type of the database, e.g. "mysql", "postgresql".
+ // Type of database, e.g. "mysql", "postgresql".
"type": "mysql",
- // User name to be used to access the database.
+ // Username to be used to access the database.
"user": "keatest",
// Connection reconnect wait time.
// Connection connect timeout in seconds.
"connect-timeout": 100,
- // Data read from the database timeout in seconds.
+ // Timeout of database read operations in seconds.
"read-timeout": 120,
- // Data write to the database timeout in seconds.
+ // Timeout of database write operations in seconds.
"write-timeout": 180
}
],
// List of host reservation identifier types to be used by the
- // Kea DHCPv6 server to fetch static reservations for the
+ // Kea DHCPv6 server to fetch static reservations for
// DHCP clients. All identifiers are used by default, which
// means that the server will issue multiple queries to the
- // database to find if there is a reservation for the particular
- // client. If the particular deployment uses only subset, e.g.
- // one, identifier type, this identifier should be only listed
+ // database to find if there is a reservation for a particular
+ // client. If a particular deployment uses only a subset, e.g.
+ // one identifier type, this identifier should be only listed
// here to prevent unnecessary queries to the database.
"host-reservation-identifiers": [
"hw-address",
// server is listening to the DHCP queries.
"interfaces-config": {
// Specifies a list of interfaces on which the Kea DHCPv6
- // server should listen to the DHCP requests.
+ // server should listen to DHCP requests.
"interfaces": [
"eth0"
],
- // Boolean flag indicating if the available interfaces should
+ // Boolean flag indicating whether the available interfaces should
// be re-detected upon server reconfiguration. The default value
- // is true which means that the interfaces are always
+ // is true, which means that the interfaces are always
// re-detected.
"re-detect": true,
- // Kea tries to bind the service sockets during initialization. It may
- // fail due to a port being already opened or misconfiguration. Kea can
- // suppress these errors and only logs them. This flag prevents starting
+ // Kea tries to bind the service sockets during initialization, but it may
+ // fail due to a port being already opened or a misconfiguration. Kea can
+ // suppress these errors and only log them. This flag prevents starting
// the DHCP server without binding all sockets. If unspecified, it
// defaults to false.
"service-sockets-require-all": true,
// Kea tries to bind the service sockets during initialization. This
// option specifies how many times binding to interface will be retried.
- // The default value is 0 which means that the operation will not be
+ // The default value is 0, which means that the operation will not be
// repeated.
"service-sockets-max-retries": 5,
// decision table indexed by reservation identifiers.
"early-global-reservations-lookup": true,
- // Boolean parameter which controls DHCP server's behavior with respect
+ // Boolean parameter which controls the DHCP server's behavior with respect
// to creating host reservations for the same IP address or delegated
// prefix. By default this flag is set to true in which case the server
// prevents creation of multiple host reservations for the same IP address
/// should be performed before lease lookup. This parameter has effect
/// only when multi-threading is disabled. When multi-threading is
/// enabled, host reservations lookup is always performed first to avoid
- /// lease lookup resource locking.
+ /// lease-lookup resource locking.
"reservations-lookup-first": true,
// Specifies credentials to access lease database.
"lease-database": {
- // memfile backend specific parameter specifying the interval
- // in seconds at which lease file should be cleaned up (outdated
- // lease entries are removed to prevent lease file from growing
+ // memfile backend-specific parameter specifying the interval
+ // in seconds at which the lease file should be cleaned up (outdated
+ // lease entries are removed to prevent the lease file from growing
// infinitely).
"lfc-interval": 3600,
- // Maximum number of lease file read errors allowed before
- // loading the file is abandoned. Defaults to 0 (no limit).
+ // Maximum number of lease-file read errors allowed before
+ // loading the file is abandoned. Defaults to 0 (no limit).
"max-row-errors": 100,
- // Name of the lease file. In case of database it specifies the
+ // Name of the lease file. In the case of a database it specifies the
// database name.
"name": "/tmp/kea-dhcp6.csv",
- // memfile specific parameter indicating whether leases should
+ // memfile-specific parameter indicating whether leases should
// be saved on persistent storage (disk) or not. The true value
- // is the default and it indicates that leases are stored in the
+ // is the default and it indicates that leases are stored in
// persistent storage. This setting must be used in production.
// The false value should only be used for testing purposes
- // because non stored leases will be lost upon Kea server restart.
+ // because non-stored leases will be lost upon Kea server restart.
"persist": true,
// Lease database backend type, i.e. "memfile", "mysql" or
// Kea Administrator Reference Manual.
"mac-sources": [ "duid" ],
- // List of global DHCP options that Kea DHCPv6 server assigns to the
+ // List of global DHCP options that the Kea DHCPv6 server assigns to
// clients.
"option-data": [
{
- // Boolean flag indicating if the given option is always
+ // Boolean flag indicating whether the given option is always
// sent in response or only when requested. The default
// value of false indicates that it is only sent when
// requested.
// Boolean value indicating whether the option data specified
// in the "data" field is specified as a string of hexadecimal
- // digits or in human readable CSV format.
+ // digits or in human-readable CSV format.
"csv-format": true,
// Option data to be stored in the option payload.
"data": "2001:db8:2::45, 2001:db8:2::100",
- // Option name. It is not required of the option code is
+ // Option name. It is not required if the option code is
// provided.
"name": "dns-servers",
- // Boolean flag indicating if the given option is never
+ // Boolean flag indicating whether the given option is never
// sent in response. The default value of false indicates
- // that it is sent when it should. When true the option
- // is not sent despite of any other setting, i.e. it is
+ // that it is sent when it should be. When true, the option
+ // is not sent despite any other setting, i.e. it is
// a final flag.
"never-send": false,
// Option space. The default is the "dhcp6" option space which
- // groups top level DHCPv6 options.
+ // groups top-level DHCPv6 options.
"space": "dhcp6"
}
],
// Kea DHCPv6 server is using.
"option-def": [
{
- // Boolean flag indicating if the option definition comprises
- // an array of values of some type, e.g. array of IPv6 addresses.
+ // Boolean flag indicating whether the option definition comprises
+ // an array of values of some type, e.g. an array of IPv6 addresses.
// The default value of false means that the option does not
// comprise an array of values.
"array": false,
// Holds a name of the option space encapsulated by this option.
// All options that belong to this option space will be sent
- // as sub-options of this option. Empty string means that this
+ // as sub-options of this option. An empty string means that this
// option doesn't encapsulate any option.
"encapsulate": "",
"name": "my-option",
// Specifies the types of fields within the option if the option
- // is said to be a "record" (see "type"). in this particular example
+ // is said to be a "record" (see "type"). In this particular example
// this option comprises two fields, 1 byte and 2 bytes long.
"record-types": "uint8, uint16",
// Global value which limits the number of client packets (e.g.
// REQUESTs,RENEWs...) that may be parked while waiting for
// hook library work to complete, prior to a response (e.g. REPLY)
- // being sent back to the client. A typical example is when kea-dhcp6
+ // being sent back to the client. A typical example is when kea-dhcp6
// parks a REQUEST while it sends the lease update(s) to its
// HA peer(s). The packet is unparked once the update(s) have been
// acknowledged. This value limits the number of packets that can
"max-preferred-lifetime": 60,
// Global value for the rebind timer, i.e. the time after which the
- // DHCP client enters rebind state if it fails to renew the lease.
+ // DHCP client enters the rebind state if it fails to renew the lease.
"rebind-timer": 40,
// List of relay supplied option codes. See RFC 6422.
"relay-supplied-options": [ "110", "120", "130" ],
- // Global value for the renew timer, i.e. the timer after which the
+ // Global value for the renew timer, i.e. the time after which the
// DHCP client renews the lease.
"renew-timer": 30,
// Statistics keep some samples per observation point.
// There are two default values: maximum count and maximum age.
- // Set the maximum count to zero disables it.
+ // Setting the maximum count to zero disables it.
"statistic-default-sample-count": 0,
// When the maximum count is 0 the maximum age (in seconds) applies.
// When multi-threading is enabled, Kea will process packets on a
// number of multiple threads configurable through this option. The
- // value must be a positive integer (0 means auto detect).
+ // value must be a positive integer (0 means auto-detect).
"thread-pool-size": 0,
// When multi-threading is enabled, Kea will read packets from the
"packet-queue-size": 0
},
- // Governs how the Kea DHCPv6 server should deal with the invalid
+ // Governs how the Kea DHCPv6 server should deal with invalid
// data received from the client.
"sanity-checks": {
// Specifies how the Kea DHCPv6 server should behave when invalid
// data is read for a lease from the lease file. The following
- // values are supported "none" (don't attempt to correct the
+ // values are supported: "none" (don't attempt to correct the
// lease information), "warn" (print a warning for subnet-id
// related inconsistencies), "fix" (correct the subnet id by
// trying to find the suitable subnet), "fix-del" (similar
// Specifies how Kea DHCPv4 server should behave when invalid
// extended info is read for a lease from the lease file, or
- // whether to upgrade from old format. The following values
- // are supported "none" (don't attempt to correct or upgrade
+ // whether to upgrade from the old format. The following values
+ // are supported: "none" (don't attempt to correct or upgrade
// the extended info), "fix" (fix common inconsistencies and
- // upgrade from old format, this is the default), "strict"
- // (fix inconsistencies with an impact on Lease Query),
+ // upgrade from the old format; this is the default), "strict"
+ // (fix inconsistencies with an impact on Leasequery),
// "pedantic" (enforce full Kea code format).
"extended-info-checks": "fix"
},
// Identifier part of the DUID.
"identifier": "0123456789",
- // Boolean flag indicating if the DUID should be persisted on
+ // Boolean flag indicating whether the DUID should be persisted on
// disk.
"persist": false
},
- // List of shared networks used by Kea DHCPv6 server. The shared
+ // List of shared networks used by the Kea DHCPv6 server. The shared
// networks group subnets together.
"shared-networks": [
{
"pd-allocator": "iterative",
// Restricts this shared network to allow only clients
- // that belong to the particular client class. If an
+ // that belong to a particular client class. If an
// empty string is provided, no restriction is applied.
"client-class": "",
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-generated-prefix": "myhost",
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-override-client-update": false,
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-override-no-update": false,
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-qualifying-suffix": "",
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-replace-client-name": "never",
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-send-updates": true,
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"ddns-update-on-renew": true,
- // Shared network level value. See description at the global level.
+ // 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.
+ // 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.
+ // Shared-network level value. See description at the global level.
"hostname-char-replacement": "x",
- // Shared network level value. See description at the global level.
+ // Shared-network level value. See description at the global level.
"hostname-char-set": "[^A-Za-z0-9.-]",
- // Specifies that this shared network is selected for the
- // requests received on the particular interface.
+ // Specifies that this shared network is selected for
+ // requests received on a particular interface.
"interface": "eth0",
// Specifies the content of the interface-id option used
// Shared network name.
"name": "my-secret-network",
- // List of shared network specific DHCP options.
+ // List of shared network-specific DHCP options.
"option-data": [],
- // Shared network specific (default) preferred lifetime.
+ // Shared network-specific (default) preferred lifetime.
"preferred-lifetime": 2000,
- // Shared network specific min preferred lifetime.
+ // Shared network-specific min preferred lifetime.
"min-preferred-lifetime": 1500,
- // Shared network specific ma xpreferred lifetime.
+ // Shared network-specific ma xpreferred lifetime.
"max-preferred-lifetime": 2500,
- // Boolean flag indicating if the server can respond to
+ // Boolean flag indicating whether the server can respond to
// a Solicit message including a Rapid Commit option with
// the Reply message (See DHCPv6 rapid commit).
"rapid-commit": false,
"ip-addresses": []
},
- // Shared network level rebind timer.
+ // Shared-network level rebind timer.
"rebind-timer": 41,
- // Shared network level renew timer.
+ // Shared-network level renew timer.
"renew-timer": 31,
- // Shared network level compute T1 and T2 timers.
+ // Shared-network level compute T1 and T2 timers.
"calculate-tee-times": true,
// T1 = valid lifetime * .5.
// Cache threshold = valid lifetime * .25.
"cache-threshold": .25,
- // Cache maximum: when the client last transmission time
- // is close enough the lease is not renewed and current
+ // Cache maximum: when the client last-transmission time
+ // is close enough, the lease is not renewed and the current
// lease is returned as it was "cached".
- "cache-max-age": 10,
+ "cache-max-age": 1000,
- // Enumeration specifying server's mode of operation when it
+ // Enumeration specifying the server's mode of operation when it
// fetches host reservations.
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and "reservations-out-of-pool"
+ // "reservations-in-subnet", and "reservations-out-of-pool"
// parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "subnet6" levels.
"require-client-classes": [ "late" ],
// Turn off storage of extended information (e.g. relay agent
- // information) with each lease for this shared-network.
+ // information) with each lease for this shared network.
"store-extended-info": false,
// List of IPv6 subnets belonging to this shared network.
"pd-allocator": "iterative",
// Restricts this subnet to allow only clients that belong
- // to the particular client class. If an empty string is
+ // to a particular client class. If an empty string is
// provided, no restriction is applied.
"client-class": "",
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-generated-prefix": "myhost",
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-override-client-update": false,
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-override-no-update": false,
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-qualifying-suffix": "",
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-replace-client-name": "never",
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-send-updates": true,
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-update-on-renew": true,
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-use-conflict-resolution": true,
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"ddns-ttl-percent": 0.55,
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"hostname-char-replacement": "x",
- // Subnet level value. See description at the global level.
+ // Subnet-level value. See description at the global level.
"hostname-char-set": "[^A-Za-z0-9.-]",
// Subnet unique identifier.
"id": 1,
- // Specifies that this subnet is selected for the requests
- // received on the particular interface.
+ // Specifies that this subnet is selected for requests
+ // received on a particular interface.
"interface": "eth0",
// Specifies the content of the interface-id option used
// information) with each lease for this subnet.
"store-extended-info": true,
- // Subnet level list of DHCP options.
+ // Subnet-level list of DHCP options.
"option-data": [
{
- // Boolean flag indicating if the particular option
+ // Boolean flag indicating whether the particular option
// should be always sent or sent only when requested.
"always-send": false,
// Option code.
"code": 7,
- // Boolean flag indicating if the option value specified
- // in "data" is a string of hexadecimal values or human
- // readable CSV value.
+ // Boolean flag indicating whether the option value specified
+ // in "data" is a string of hexadecimal values or human-readable
+ // CSV value.
"csv-format": false,
// Option data to be included in the option payload.
// Option name.
"name": "preference",
- // Boolean flag indicating if the given option is never
+ // Boolean flag indicating whether the given option is never
// sent in response.
"never-send": false,
}
],
+ // List of IP address pools belonging to the subnet.
"pools": [
{
- // Restricts this pool to be only used for the client
+ // Restricts this pool to only be used for client
// requests belonging to a particular client class.
"client-class": "phones_server1",
- // Pool level list of DHCP options.
+ // Pool-level list of DHCP options.
"option-data": [],
// Address range used for client assignments.
"require-client-classes": [ "late" ]
},
{
- // Restricts this pool to be only used for the client
+ // Restricts this pool to only be used for client
// requests belonging to a particular client class.
"client-class": "phones_server2",
- // Pool level list of DHCP options.
+ // Pool-level list of DHCP options.
"option-data": [],
// Address range used for client assignments.
// Subnet specific max referred lifetime.
"max-preferred-lifetime": 2500,
- // Boolean flag indicating if the server can respond to
+ // Boolean flag indicating whether the server can respond to
// a Solicit message including a Rapid Commit option with
// 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"
]
},
- // Subnet level renew timer.
+ // Subnet-level renew timer.
"renew-timer": 30,
- // Enumeration specifying server's mode of operation when it
+ // Enumeration specifying the server's mode of operation when it
// fetches host reservations.
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and
+ // "reservations-in-subnet", and
// "reservations-out-of-pool" parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved
+ // Specify whether the server can assume that all reserved
// addresses are out-of-pool.
// Ignored when reservations-in-subnet is false.
"reservations-out-of-pool": false,
- // Subnet level compute T1 and T2 timers.
+ // Subnet-level compute T1 and T2 timers.
"calculate-tee-times": true,
// T1 = valid lifetime * .5.
// Cache threshold = valid lifetime * .25.
"cache-threshold": .25,
- // Subnet level cache maximum.
- "cache-max-age": 10,
+ // Subnet-level cache maximum.
+ "cache-max-age": 1000,
- // List of static IPv6 reservations assigned to the clients belonging
- // to this subnet. For detailed example see reservations.json.
+ // List of static IPv6 reservations assigned to clients belonging
+ // to this subnet. For a detailed example, see reservations.json.
"reservations": [
{
// Identifier used for client matching. Supported values are
// Reserved hostname.
"hostname": "foo.example.com",
- // Reservation specific option data.
+ // Reservation-specific option data.
"option-data": [
{
// Option name.
// Subnet prefix.
"subnet": "2001:db8::/32",
- // Subnet level (default) valid lifetime.
+ // Subnet-level (default) valid lifetime.
"valid-lifetime": 6000,
- // Subnet level min valid lifetime.
+ // Subnet-level min valid lifetime.
"min-valid-lifetime": 4000,
- // Subnet level max valid lifetime.
+ // Subnet-level max valid lifetime.
"max-valid-lifetime": 8000
}
],
- // Shared network level (default) valid lifetime.
+ // Shared-network level (default) valid lifetime.
"valid-lifetime": 6001,
- // Shared network level min valid lifetime.
+ // Shared-network level min valid lifetime.
"min-valid-lifetime": 4001,
- // Shared network level max valid lifetime.
+ // Shared-network level max valid lifetime.
"max-valid-lifetime": 8001
}
],
// List of IPv6 subnets which don't belong to any shared network.
"subnet6": [],
- // Global (default) valid lifetime value.
+ // Global valid lifetime value.
"valid-lifetime": 6000,
// Global min valid lifetime value.
"reservations": [],
// Configuration control (currently not used, i.e. this syntax
- // is already defined but corresponding feature is not implemented).
+ // is already defined but the corresponding feature is not implemented).
"config-control": {
- // Only configuration databases entry is defined.
+ // Only the configuration databases entry is defined.
"config-databases": [
{
// Name of the database to connect to.
"name": "config",
- // Type of the database, e.g. "mysql", "postgresql".
+ // Type of database, e.g. "mysql", "postgresql".
"type": "mysql"
}
],
- // Intervals between attempts to fetch configuration updates
+ // Interval between attempts to fetch configuration updates
// via the configuration backends used.
"config-fetch-wait-time": 30
},
// Server tag.
"server-tag": "my DHCPv6 server",
- // DHCP queue control parameters.
+ // DHCP queue-control parameters.
"dhcp-queue-control": {
// Enable queue is mandatory.
"enable-queue": true,
- // Queue type was mandatory.
+ // Queue type is mandatory.
"queue-type": "kea-ring6",
// Capacity is optional.
// Fetches host reservations.
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and "reservations-out-of-pool" parameters.
+ // "reservations-in-subnet", and "reservations-out-of-pool" parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "shared-networks" and
"cache-threshold": .25,
// Global cache maximum.
- "cache-max-age": 10,
+ "cache-max-age": 1000,
// String of zero or more characters with which to replace each
// invalid character in the Client FQDN. The default
- // value is an empty string which will cause invalid characters
+ // value is an empty string, which will cause invalid characters
// to be omitted rather than replaced.
"hostname-char-replacement": "x",
"loggers": [
{
// Debug level, a value between 0..99. The greater the value
- // the more detailed debug log.
+ // the more detailed the debug log.
"debuglevel": 99,
// Name of the logger.
// Configures how the log should be output.
"output_options": [
{
- // Determines whether the log should flushed to a file.
+ // Determines whether the log should be flushed to a file.
"flush": true,
- // Specifies maximum filesize before the file is being rotated.
+ // Specifies maximum filesize before the file is rotated.
"maxsize": 10240000,
- // Specifies the maximum number of rotated files being kept.
+ // Specifies the maximum number of rotated files to be kept.
"maxver": 1,
- // Specifies logging destination.
+ // Specifies the logging destination.
"output": "stdout",
// Specifies log entry content
}
],
- // Look at advanced example for the use of user-contexts.
+ // Look at advanced examples for the use of user-contexts.
"user-context": { }
}
}
// This is an example configuration file for the DHCPv4 server in Kea.
// It demonstrates how to enable Kea Configuration Backend using MySQL.
// It requires that libdhcp_mysql_cb.so library is available and
-// optionally libdhcp_cb_cmds.so hooks library.
+// optionally libdhcp_cb_cmds.so hook library.
{ "Dhcp6":
// This parameter controls how the server accesses the configuration
// database. Currently only one database type is available - "mysql".
- // It requires that libdhcp_mysql_cb.so hooks library is loaded.
+ // It requires that libdhcp_mysql_cb.so hook library is loaded.
"config-control": {
// A list of database backends to connect to. Currently, it is limited
// to a single backend.
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
// This directive tells Kea that reservations are global. Note that this
// can also be specified at shared network and/or subnet level.
// "reservation-mode": "global",
-// It is replaced by the "reservations-global", "reservations-in-subnet" and
+// It is replaced by the "reservations-global", "reservations-in-subnet", and
// "reservations-out-of-pool" parameters.
-// Specify if server should lookup global reservations.
+// Specify whether the server should look up global reservations.
"reservations-global": true,
-// Specify if server should lookup in-subnet reservations.
+// Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": false,
-// Specify if server can assume that all reserved addresses
+// Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "shared-networks" and "subnet6" levels.
// This is an example configuration of the Kea DHCPv6 server. It uses High
-// Availability hooks library and Lease Commands hooks library to enable
+// Availability hook library and Lease Commands hook library to enable
// High Availability function for the DHCP server. Note that almost exactly
// the same configuration must be used on the second server (partner).
// The only difference is that "this-server-name" must be set to "server2"
"type": "memfile"
},
- // HA requires two hooks libraries to be loaded: libdhcp_lease_cmds.so and
+ // HA requires two hook libraries to be loaded: libdhcp_lease_cmds.so and
// libdhcp_ha.so. The former handles incoming lease updates from the HA peers.
// The latter implements high availability feature for Kea.
"hooks-libraries": [
"parameters": { }
},
{
- // The HA hooks library should be loaded.
+ // The HA hook library should be loaded.
"library": "/opt/lib/kea/hooks/libdhcp_ha.so",
"parameters": {
// High Availability configuration is specified for the HA hook library.
"debuglevel": 0
},
{
- // This section specifies configuration of the HA hooks library specific
+ // This section specifies configuration of the HA hook library-specific
// logger.
"name": "kea-dhcp6.ha-hooks",
"output_options": [
// This is an example configuration of the Kea DHCPv6 server. It uses High
-// Availability hooks library and Lease Commands hooks library to enable
+// Availability hook library and Lease Commands hook library to enable
// High Availability function for the DHCP server. Note that almost exactly
// the same configuration must be used on the second server (partner).
// The only difference is that "this-server-name" must be set to "server1"
"type": "memfile"
},
- // HA requires two hooks libraries to be loaded: libdhcp_lease_cmds.so and
+ // HA requires two hook libraries to be loaded: libdhcp_lease_cmds.so and
// libdhcp_ha.so. The former handles incoming lease updates from the HA peers.
// The latter implements high availability feature for Kea.
"hooks-libraries": [
"parameters": { }
},
{
- // The HA hooks library should be loaded.
+ // The HA hook library should be loaded.
"library": "/opt/lib/kea/hooks/libdhcp_ha.so",
"parameters": {
// High Availability configuration is specified for the HA hook library.
"debuglevel": 0
},
{
- // This section specifies configuration of the HA hooks library specific
+ // This section specifies configuration of the HA hook library-specific
// logger.
"name": "kea-dhcp6.ha-hooks",
"output_options": [
// This is an example configuration file for the DHCPv6 server in Kea
-// illustrating the configuration of hooks libraries. It uses a basic scenario
+// illustrating the configuration of hook libraries. It uses a basic scenario
// of one IPv6 subnet configured with the default values for all parameters.
{"Dhcp6":
}
],
-// Set up the hooks libraries. For this example, we assume that two libraries
+// Set up the hook libraries. For this example, we assume that two libraries
// are loaded, called "security" and "charging". Note that order is important:
// "security" is specified first so if both libraries supply a hook function
// for a given hook, the function in "security" will be called before that in
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
// Note, we're setting the maximum number of row read errors to 100,
// (defaults to 0, meaning unlimited).
"lease-database": {
// leases after 10 attempts, a warning message is issued.
// If both "flush-reclaimed-timer-wait-time" and "hold-reclaimed-time" are not
// 0, when the client sends a release message the lease is expired instead of
-// being deleted from the lease storage.
+// being deleted from lease storage.
"expired-leases-processing": {
"reclaim-timer-wait-time": 5,
"hold-reclaimed-time": 1800,
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile"
},
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile"
},
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
// It is replaced by the "reservations-global", "reservations-in-subnet"
// and "reservations-out-of-pool" parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "shared-networks" and
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile"
},
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and "reservations-out-of-pool"
+ // "reservations-in-subnet", and "reservations-out-of-pool"
// parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
// If specified, it is inherited by "subnet6" levels.
"renew-timer": 10,
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and "reservations-out-of-pool"
+ // "reservations-in-subnet", and "reservations-out-of-pool"
// parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
"reservations-out-of-pool": false,
"renew-timer": 10,
// "reservation-mode": "all",
// It is replaced by the "reservations-global",
- // "reservations-in-subnet" and "reservations-out-of-pool"
+ // "reservations-in-subnet", and "reservations-out-of-pool"
// parameters.
- // Specify if server should lookup global reservations.
+ // Specify whether the server should look up global reservations.
"reservations-global": false,
- // Specify if server should lookup in-subnet reservations.
+ // Specify whether the server should look up in-subnet reservations.
"reservations-in-subnet": true,
- // Specify if server can assume that all reserved addresses
+ // Specify whether the server can assume that all reserved addresses
// are out-of-pool.
// Ignored when reservations-in-subnet is false.
"reservations-out-of-pool": false,
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile"
},
// We need to specify the database used to store leases. As of
// June 2022, three database backends are supported: MySQL,
// PostgreSQL and the in-memory database, Memfile.
-// We'll use memfile because it doesn't require any prior set up.
+// We'll use memfile because it doesn't require any prior set up.
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
//
// // Some libraries may support parameters. Make sure you
// // type this section carefully, as the CA does not validate
- // // it (because the format is library specific).
+ // // it (because the format is library-specific).
// "parameters": {
// "param1": "foo"
// }
// Several additional parameters are possible in addition
// to the typical output. Flush determines whether logger
// flushes output to a file. Maxsize determines maximum
- // filesize before the file is being rotated. maxver
+ // filesize before the file is rotated. maxver
// specifies the maximum number of rotated files being
// kept.
"flush": true,
//
// // Some libraries may support parameters. Make sure you
// // type this section carefully, as the CA does not validate
- // // it (because the format is library specific).
+ // // it (because the format is library-specific).
// "parameters": {
// "param1": "foo"
// }
// Several additional parameters are possible in addition
// to the typical output. Flush determines whether logger
// flushes output to a file. Maxsize determines maximum
- // filesize before the file is being rotated. maxver
+ // filesize before the file is rotated. maxver
// specifies the maximum number of rotated files being
// kept.
"flush": true,
multi-threading. These templates make the following assumptions:
- The administrator wants to set up High Availability (HA) with multi-threading.
-- The machines running Kea with multi-threading have at least four CPUs.
+- The machines running Kea with multi-threading have at least four CPU cores.
- The connection to the peer is secured using TLS.
The logical setup consists of two hosts, each running a Kea DHCPv4 server and a Control Agent (CA).
// Several additional parameters are possible in addition
// to the typical output. Flush determines whether logger
// flushes output to a file. Maxsize determines maximum
- // filesize before the file is being rotated. maxver
+ // filesize before the file is rotated. maxver
// specifies the maximum number of rotated files being
// kept.
"flush": true,
// Several additional parameters are possible in addition
// to the typical output. Flush determines whether logger
// flushes output to a file. Maxsize determines maximum
- // filesize before the file is being rotated. maxver
+ // filesize before the file is rotated. maxver
// specifies the maximum number of rotated files being
// kept.
"flush": true,
// This is an example configuration of the Kea DHCPv4 server 1:
//
-// - uses High Availability hooks library and Lease Commands hooks library
+// - uses High Availability hook library and Lease Commands hook library
// to enable High Availability function for the DHCP server. This config
// file is for the primary (the active) server.
// - uses memfile, which stores lease data in a local CSV file
// When multi-threading is enabled, Kea will process packets on a
// number of multiple threads configurable through this option. The
- // value must be a positive integer (0 means auto detect).
+ // value must be a positive integer (0 means auto-detect).
"thread-pool-size": 4,
// When multi-threading is enabled, Kea will read packets from the
// use host reservation.
// If both "flush-reclaimed-timer-wait-time" and "hold-reclaimed-time" are
// not 0, when the client sends a release message the lease is expired
- // instead of being deleted from the lease storage.
+ // instead of being deleted from lease storage.
"expired-leases-processing": {
"reclaim-timer-wait-time": 3600,
"hold-reclaimed-time": 172800,
"max-reclaim-time": 0
},
- // HA requires two hooks libraries to be loaded: libdhcp_lease_cmds.so and
+ // HA requires two hook libraries to be loaded: libdhcp_lease_cmds.so and
// libdhcp_ha.so. The former handles incoming lease updates from the HA peers.
// The latter implements high availability feature for Kea. Note the library name
// should be the same, but the path is OS specific.
},
{
- // The HA hooks library should be loaded.
+ // The HA hook library should be loaded.
"library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_ha.so",
"parameters": {
// Each server should have the same HA configuration, except for the
// This is an example configuration of the Kea DHCPv4 server 2:
//
-// - uses High Availability hooks library and Lease Commands hooks library
+// - uses High Availability hook library and Lease Commands hook library
// to enable High Availability function for the DHCP server. This config
// file is for the secondary (the standby) server.
// - uses memfile, which stores lease data in a local CSV file
// When multi-threading is enabled, Kea will process packets on a
// number of multiple threads configurable through this option. The
- // value must be a positive integer (0 means auto detect).
+ // value must be a positive integer (0 means auto-detect).
"thread-pool-size": 4,
// When multi-threading is enabled, Kea will read packets from the
// use host reservation.
// If both "flush-reclaimed-timer-wait-time" and "hold-reclaimed-time" are
// not 0, when the client sends a release message the lease is expired
- // instead of being deleted from the lease storage.
+ // instead of being deleted from lease storage.
"expired-leases-processing": {
"reclaim-timer-wait-time": 3600,
"hold-reclaimed-time": 172800,
"max-reclaim-time": 0
},
- // HA requires two hooks libraries to be loaded: libdhcp_lease_cmds.so and
+ // HA requires two hook libraries to be loaded: libdhcp_lease_cmds.so and
// libdhcp_ha.so. The former handles incoming lease updates from the HA peers.
// The latter implements high availability feature for Kea. Note the library name
// should be the same, but the path is OS specific.
},
{
- // The HA hooks library should be loaded.
+ // The HA hook library should be loaded.
"library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_ha.so",
"parameters": {
// Each server should have the same HA configuration, except for the
To deploy this setup, perform the following steps:
-1. Install the CA and DHCPv4 daemon on host-1, and copy the configuration files to their typical locations.
+1. Install the CA and the DHCPv4 server on host-1, and copy the configuration files to their typical locations.
They are usually in ``/etc/kea`` on Linux and ``/usr/local/etc/kea`` on FreeBSD, and the files are typically called
``kea-ctrl-agent.conf`` and ``kea-dhcp4.conf``. Please consult the startup scripts for any specific system.
4. Verify that communication between the hosts works in the opposite direction as well
(host-2 can connect to host-1), by repeating step 3 from host-2 using host-1's IP address and port.
-5. Install the CA and DHCPv4 daemon on host-2, as in steps 1 and 2. The config file for the
+5. Install the CA and the DHCPv4 server on host-2, as in steps 1 and 2. The config file for the
standby server is very similar to the one on the primary server, other than the definition of
the ``this-server-name`` field (and possibly the interface names).
// Several additional parameters are possible in addition
// to the typical output. Flush determines whether logger
// flushes output to a file. Maxsize determines maximum
- // filesize before the file is being rotated. maxver
+ // filesize before the file is rotated. maxver
// specifies the maximum number of rotated files being
// kept.
"flush": true,
// Several additional parameters are possible in addition
// to the typical output. Flush determines whether logger
// flushes output to a file. Maxsize determines maximum
- // filesize before the file is being rotated. maxver
+ // filesize before the file is rotated. maxver
// specifies the maximum number of rotated files being
// kept.
"flush": true,
// This is an example configuration of the Kea DHCPv4 server 1:
//
-// - uses High Availability hooks library and Lease Commands hooks library
+// - uses High Availability hook library and Lease Commands hook library
// to enable High Availability function for the DHCP server. This config
// file is for the primary (the active) server.
// - uses memfile, which stores lease data in a local CSV file
// use host reservation.
// If both "flush-reclaimed-timer-wait-time" and "hold-reclaimed-time" are
// not 0, when the client sends a release message the lease is expired
- // instead of being deleted from the lease storage.
+ // instead of being deleted from lease storage.
"expired-leases-processing": {
"reclaim-timer-wait-time": 3600,
"hold-reclaimed-time": 172800,
"max-reclaim-time": 0
},
- // HA requires two hooks libraries to be loaded: libdhcp_lease_cmds.so and
+ // HA requires two hook libraries to be loaded: libdhcp_lease_cmds.so and
// libdhcp_ha.so. The former handles incoming lease updates from the HA peers.
// The latter implements high availability feature for Kea. Note the library name
// should be the same, but the path is OS specific.
},
{
- // The HA hooks library should be loaded.
+ // The HA hook library should be loaded.
"library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_ha.so",
"parameters": {
// Each server should have the same HA configuration, except for the
// This is an example configuration of the Kea DHCPv4 server 2:
//
-// - uses High Availability hooks library and Lease Commands hooks library
+// - uses High Availability hook library and Lease Commands hook library
// to enable High Availability function for the DHCP server. This config
// file is for the primary (the active) server.
// - uses memfile, which stores lease data in a local CSV file
// use host reservation.
// If both "flush-reclaimed-timer-wait-time" and "hold-reclaimed-time" are
// not 0, when the client sends a release message the lease is expired
- // instead of being deleted from the lease storage.
+ // instead of being deleted from lease storage.
"expired-leases-processing": {
"reclaim-timer-wait-time": 3600,
"hold-reclaimed-time": 172800,
"max-reclaim-time": 0
},
- // HA requires two hooks libraries to be loaded: libdhcp_lease_cmds.so and
+ // HA requires two hook libraries to be loaded: libdhcp_lease_cmds.so and
// libdhcp_ha.so. The former handles incoming lease updates from the HA peers.
// The latter implements high availability feature for Kea. Note the library name
// should be the same, but the path is OS specific.
},
{
- // The HA hooks library should be loaded.
+ // The HA hook library should be loaded.
"library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_ha.so",
"parameters": {
// Each server should have the same HA configuration, except for the
limits that apply to all packets associated with a class spawned at
runtime, according to the ``template-test`` expression in the parent template
class. For a more detailed description of how to configure limits using the
- limits hooks library, see :ref:`hooks-limits-configuration`.
+ limits hook library, see :ref:`hooks-limits-configuration`.
For example, using the configuration below, ingress DHCPv6 packets that have
client ID values (in the format expressed by the Kea evaluator) ``foobar``
and ``foofoo`` both amount to the same limit of 60 packets per day, while
Using Static Host Reservations in Classification
================================================
-Classes can be statically assigned to the clients using techniques
+Classes can be statically assigned to clients using techniques
described in :ref:`reservation4-client-classes` and
:ref:`reservation6-client-classes`.
If the new configuration proves to be invalid, the server retains its
current configuration; however, in some cases a fatal error message is logged
-indicating that the server no longer provides any service: a working
+indicating that the server is no longer providing any service: a working
configuration must be loaded as soon as possible. If the control channel
is dead, the configuration file can still be reloaded using the ``SIGHUP``
signal. If that is unsuccessful, restart the server.
loads it, checks it, and exits. It performs extra checks beyond what ``-t``
offers, such as establishing database connections (for the lease backend,
host reservations backend, configuration backend, and forensic logging
- backend), loading hook libraries, parsing configurations, etc.
+ backend), loading hook libraries, parsing hook-library configurations, etc.
It does not open UNIX or TCP/UDP sockets, nor does it open or rotate
files, as any of these actions could interfere with a running process on the
same machine.
"interfaces": [ "*" ]
}
...
- },
+ }
The asterisk plays the role of a wildcard and means "listen on all
interfaces." However, it is usually a good idea to explicitly specify
inheritance chain, they are applied - even if they are
disabled in other places which would normally receive a higher priority.
For instance, if one of the flags is enabled in the global scope,
- but disabled at the subnet level, it will be enabled,
+ but disabled at the subnet level, it is enabled,
disregarding the subnet-level setting.
.. note::
configuration syntax to create custom option definitions (formats).
Creation of custom definitions for standard options is generally not
permitted, even if the definition being created matches the actual
-option format defined in the RFCs. There is an exception to this rule
+option format defined in the RFCs. However, there is an exception to this rule
for standard options for which Kea currently does not provide a
definition. To use such options, a server administrator must
create a definition as described in
:ref:`dhcp4-custom-options` in the ``dhcp4`` option space. This
definition should match the option format described in the relevant RFC,
-but the configuration mechanism will allow any option format as it
-currently has no means to validate it.
+but the configuration mechanism allows any option format as there is
+currently no way to validate it.
The currently supported standard DHCPv4 options are listed in
the table below. "Name" and "Code" are the
...
}
-``csv-format`` is set to ``"true"`` to indicate that the ``data`` field
+``csv-format`` is set to ``true`` to indicate that the ``data`` field
comprises a comma-separated list of values. The values in ``data``
must correspond to the types set in the ``record-types`` field of the
option definition.
-When ``array`` is set to ``"true"`` and ``type`` is set to ``"record"``, the
+When ``array`` is set to ``true`` and ``type`` is set to ``"record"``, the
last field is an array, i.e. it can contain more than one value, as in:
::
default if the standard option is meant to convey any sub-options (see
:ref:`dhcp4-vendor-opts`).
-If we want a DHCPv4 option called ``container`` with code
-222, that conveys two sub-options with codes 1 and 2, we first need to
+If we want a DHCPv4 option called ``container`` with code 222,
+that conveys two sub-options with codes 1 and 2, we first need to
define the new sub-options:
::
Support for Long Options
------------------------
-The kea-dhcp4 server partially supports long options (RFC3396).
+The ``kea-dhcp4`` server partially supports long options (RFC3396).
Since Kea 2.1.6, the server accepts configuring long options and sub-options
(longer than 255 bytes). The options and sub-options are stored internally
in their unwrapped form and they can be processed as usual using the parser
Either an IPv4 or IPv6 address may be specified.
- ``server-port`` - This is the port on which D2 listens for requests. The default
- value is 53001.
+ value is ``53001``.
- ``sender-ip`` - This is the IP address which ``kea-dhcp4`` uses to send requests to
D2. The default value is blank, which instructs ``kea-dhcp4`` to select a
suitable address.
- ``sender-port`` - This is the port which ``kea-dhcp4`` uses to send requests to D2.
- The default value of 0 instructs ``kea-dhcp4`` to select a suitable port.
+ The default value of ``0`` instructs ``kea-dhcp4`` to select a suitable port.
- ``max-queue-size`` - This is the maximum number of requests allowed to queue
while waiting to be sent to D2. This value guards against requests
until the queue backlog has been sufficiently reduced. The intent is
to allow the ``kea-dhcp4`` server to continue lease operations without
running the risk that its memory usage grows without limit. The
- default value is 1024.
+ default value is ``1024``.
- ``ncr-protocol`` - This specifies the socket protocol to use when sending requests to
D2. Currently only UDP is supported.
Multi-Threading Settings With Different Database Backends
---------------------------------------------------------
-Both ``kea-dhcp4`` and ``kea-dhcp6`` are tested by ISC to determine which settings
+The Kea DHCPv4 server is benchmarked by ISC to determine which settings
give the best performance. Although this section describes our results, they are merely
recommendations and are very dependent on the particular hardware used
-for testing. We strongly advise that administrators run their own performance tests.
+for benchmarking. We strongly advise that administrators run their own performance benchmarks.
A full report of performance results for the latest stable Kea version can be found
`here <https://reports.kea.isc.org/>`_.
-This includes hardware and test scenario descriptions, as well as
+This includes hardware and benchmark scenario descriptions, as well as
current results.
After enabling multi-threading, the number of threads is set by the ``thread-pool-size``
-parameter. Results from our tests show that the best settings for
+parameter. Results from our experiments show that the best settings for
``kea-dhcp4`` are:
- ``thread-pool-size``: 4 when using ``memfile`` for storing leases.
- ``thread-pool-size``: 8 when using ``postgresql``.
-Another very important parameter is ``packet-queue-size``; in our tests we
+Another very important parameter is ``packet-queue-size``; in our benchmarks we
used it as a multiplier of ``thread-pool-size``. The actual setting strongly depends
on ``thread-pool-size``.
-We saw the best results in our tests with the following settings:
+We saw the best results in our benchmarks with the following settings:
- ``packet-queue-size``: 7 * ``thread-pool-size`` when using ``memfile`` for
storing leases; in our case it was 7 * 4 = 28. This means that at any given
"valid-lifetime": 600,
"subnet4": [ {
"subnet": "10.0.0.0/24",
- # It is replaced by the "reservations-global"
- # "reservations-in-subnet" and "reservations-out-of-pool"
+ # It is replaced by the "reservations-global",
+ # "reservations-in-subnet", and "reservations-out-of-pool"
# parameters.
# "reservation-mode": "global",
- # Specify if the server should lookup global reservations.
+ # Specify if the server should look up global reservations.
"reservations-global": true,
- # Specify if the server should lookup in-subnet reservations.
+ # Specify if the server should look up in-subnet reservations.
"reservations-in-subnet": false,
# Specify if the server can assume that all reserved addresses
# are out-of-pool. It can be ignored because "reservations-in-subnet"
"hw-address": "aa:bb:cc:dd:ee:fe",
"client-classes": [ "reserved_class" ]
}],
- # It is replaced by the "reservations-global"
- # "reservations-in-subnet" and "reservations-out-of-pool" parameters.
- # Specify if the server should lookup global reservations.
+ # It is replaced by the "reservations-global",
+ # "reservations-in-subnet", and "reservations-out-of-pool" parameters.
+ # Specify if the server should look up global reservations.
"reservations-global": true,
- # Specify if the server should lookup in-subnet reservations.
+ # Specify if the server should look up in-subnet reservations.
"reservations-in-subnet": false,
# Specify if the server can assume that all reserved addresses
# are out-of-pool. It can be ignored because "reservations-in-subnet"
# and it must be unique among all shared networks.
"name": "my-secret-lair-level-1",
- # The subnet selector can be specified at the shared network level.
+ # The subnet selector can be specified at the shared-network level.
# Subnets from this shared network will be selected for directly
# connected clients sending requests to the server's "eth0" interface.
"interface": "eth0",
Local and Relayed Traffic in Shared Networks
--------------------------------------------
-It is possible to specify an interface name at the shared network level,
+It is possible to specify an interface name at the shared-network level,
to tell the server that this specific shared network is reachable
directly (not via relays) using the local network interface. As all
subnets in a shared network are expected to be used on the same physical
} ]
}
-Kea does not interpret or use the user-context information; it simply stores it and makes it
-available to the hook libraries. It is up to each hook library to
-extract that information and use it. The parser translates a ``comment``
-entry into a user context with the entry, which allows a comment to be
-attached inside the configuration itself.
+Kea does not interpret or use the user-context information; it simply
+stores it and makes it available to the hook libraries. It is up to each
+hook library to extract that information and use it. The parser
+translates a ``comment`` entry into a user context with the entry, which
+allows a comment to be attached inside the configuration itself.
+
.. _dhcp4-std:
These are the current known limitations of the Kea DHCPv4 server software. Most of
them are reflections of the current stage of development and should be
-treated as “not implemented yet,” rather than as actual limitations.
+treated as “not implemented yet”, rather than as actual limitations.
However, some of them are implications of the design choices made. Those
are clearly marked as such.
for the subnet with ID 2, while the iterative allocation will be used for the subnet
with ID 1.
-The following sections describe the supported allocators and
-their recommended uses.
+The following sections describe the supported allocators and their
+recommended uses.
.. note::
- ``-T file`` - specifies a configuration file to be tested. ``kea-dhcp6``
loads it, checks it, and exits. It performs extra checks beyond what ``-t``
- offers, such as establising database connections (for the lease backend,
+ offers, such as establishing database connections (for the lease backend,
host reservations backend, configuration backend, and forensic logging
- backend), loading hook libraries, parsing configurations, etc.
+ backend), loading hook libraries, parsing hook-library configurations, etc.
It does not open UNIX or TCP/UDP sockets, nor does it open or rotate
files, as any of these actions could interfere with a running process on the
same machine.
See :ref:`tuning-database-timeouts6`.
-
.. _dhcp6-interface-configuration:
Interface Configuration
+-------------------------------------------------------------------------------+---------+------------------------------------------------------------------------------------+
| Prefix delegation pools not matching the subnet prefix | Yes | It is common in many deployments to configure the prefix delegation pools not |
| | | matching the subnet prefix, e.g. a prefix pool of 3000::/96 within the |
- | | | 2001:db8:1::/64 subnet. Such use cases are supported by Kea DHCPv6 server. |
+ | | | 2001:db8:1::/64 subnet. Such use cases are supported by the Kea DHCPv6 server. |
+-------------------------------------------------------------------------------+---------+------------------------------------------------------------------------------------+
.. _dhcp6-std-options:
inheritance chain, they are applied - even if they are
disabled in other places which would normally receive a higher priority.
For instance, if one of the flags is enabled in the global scope,
- but disabled at the subnet level, it will be enabled,
+ but disabled at the subnet level, it is enabled,
disregarding the subnet-level setting.
.. note::
}
Options can also be specified in class or host-reservation scope. The
-current Kea options precedence order is (from most important): host
+current Kea options precedence order is (from most important to least): host
reservation, pool, subnet, shared network, class, global.
When a data field is a string and that string contains the comma (``,``;
U+002C) character, the comma must be escaped with two backslashes (``\\,``;
U+005C). This double escape is required because both the routine
-splitting CSV data into fields and JSON use the same escape character; a
+splitting of CSV data into fields and JSON use the same escape character; a
single escape (``\,``) would make the JSON invalid. For example, the string
"EST5EDT4,M3.2.0/02:00,M11.1.0/02:00" must be represented as:
...
}
-The ``type`` is set to ``record`` to indicate that the option contains
+The ``type`` is set to ``"record"`` to indicate that the option contains
multiple values of different types. These types are given as a
comma-separated list in the ``record-types`` field and should be ones
from those listed in :ref:`dhcp-types`.
must correspond to the types set in the ``record-types`` field of the
option definition.
-When ``array`` is set to ``"true"`` and ``type`` is set to ``"record"``, the
+When ``array`` is set to ``true`` and ``type`` is set to ``"record"``, the
last field is an array, i.e. it can contain more than one value, as in:
::
default if the standard option is meant to convey any sub-options (see
:ref:`dhcp6-vendor-opts`).
-If we want a DHCPv6 option called ``container`` with code
-102, that conveys two sub-options with codes 1 and 2, we first need to
+If we want a DHCPv6 option called ``container`` with code 102,
+that conveys two sub-options with codes 1 and 2, we first need to
define the new sub-options:
::
}
The name of the option space in which the sub-options are defined is set
-in the ``encapsulate`` field. The ``type`` field is set to ``"empty"``,
-to indicate that this option does not carry any data other than
+in the ``encapsulate`` field. The ``type`` field is set to ``"empty"``, to
+indicate that this option does not carry any data other than
sub-options.
Finally, we can set values for the new options:
In some cases it is useful to limit the scope of a class to a
shared network, subnet, or pool. There are two parameters which are used
-to limit the scope of the class by instructing the server to evaluate
-test expressions when required.
+to limit the scope of the class by instructing the server to evaluate test
+expressions when required.
The first one is the per-class ``only-if-required`` flag, which is ``false``
by default. When it is set to ``true``, the test expression of the class
DDNS for DHCPv6
---------------
-As mentioned earlier, kea-dhcp6 can be configured to generate requests
-to the DHCP-DDNS server (referred to here as "D2") to update DNS
-entries. These requests are known as NameChangeRequests or NCRs. Each
-NCR contains the following information:
+As mentioned earlier, ``kea-dhcp6`` can be configured to generate requests
+to the DHCP-DDNS server, ``kea-dhcp-ddns``, (referred to herein as "D2") to
+update DNS entries. These requests are known as NameChangeRequests or
+NCRs. Each NCR contains the following information:
1. Whether it is a request to add (update) or remove DNS entries.
causes the TTL to be calculated as a simple percentage of the lease's
lifetime, using the parameter's value as the percentage. It is specified
as a decimal percent (e.g. .25, .75, 1.00) and may be specified at the
-global, shared-network, and subnet levels. By default it is unspecified.
+global, shared-network, and subnet levels. By default it is unspecified.
.. _dhcpv6-d2-io-config:
control this communication:
- ``enable-updates`` - Enables connectivity to ``kea-dhcp-ddns`` such that DDNS
- updates can be constructed and sent. It must be ``true`` for NCRs to be generated and sent to D2.
+ updates can be constructed and sent.
+ It must be ``true`` for NCRs to be generated and sent to D2.
It defaults to ``false``.
- ``server-ip`` - This is the IP address on which D2 listens for requests. The
Either an IPv4 or IPv6 address may be specified.
- ``server-port`` - This is the port on which D2 listens for requests. The default
- value is 53001.
+ value is ``53001``.
- ``sender-ip`` - This is the IP address which ``kea-dhcp6`` uses to send requests to
D2. The default value is blank, which instructs ``kea-dhcp6`` to select a
suitable address.
- ``sender-port`` - This is the port which ``kea-dhcp6`` uses to send requests to D2.
- The default value of 0 instructs kea-dhcp6 to select a suitable port.
+ The default value of ``0`` instructs ``kea-dhcp6`` to select a suitable port.
- ``max-queue-size`` - This is the maximum number of requests allowed to queue
while waiting to be sent to D2. This value guards against requests
they can be delivered. If the number of requests queued for
transmission reaches this value, DDNS updating is turned off
until the queue backlog has been sufficiently reduced. The intent is
- to allow the ``kea-dhcp6`` server to continue lease operations without running the
- risk that its memory usage grows without limit. The default value is
- 1024.
+ to allow the ``kea-dhcp4`` server to continue lease operations without
+ running the risk that its memory usage grows without limit. The
+ default value is ``1024``.
- ``ncr-protocol`` - This specifies the socket protocol to use when sending requests to
D2. Currently only UDP is supported.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Each NameChangeRequest must of course include the fully qualified
-domain name whose DNS entries are to be affected. kea-dhcp6 can be
+domain name whose DNS entries are to be affected. ``kea-dhcp6`` can be
configured to supply a portion or all of that name, based upon what it
receives from the client in the DHCPREQUEST.
then re-assembled.
If clients are sending values that differ only by characters
- considered as invalid by the hostname-char-set, be aware that
+ considered as invalid by the ``hostname-char-set``, be aware that
scrubbing them will yield identical values. In such cases, DDNS
conflict rules will permit only one of them to register the name.
Multi-Threading Settings With Different Database Backends
---------------------------------------------------------
-Both ``kea-dhcp4`` and ``kea-dhcp6`` are tested by ISC to determine which settings
+The Kea DHCPv6 server is benchmarked by ISC to determine which settings
give the best performance. Although this section describes our results, they are merely
recommendations and are very dependent on the particular hardware used
-for testing. We strongly advise that administrators run their own performance tests.
+for benchmarking. We strongly advise that administrators run their own performance benchmarks.
A full report of performance results for the latest stable Kea version can be found
`here <https://reports.kea.isc.org/>`_.
-This includes hardware and test scenario descriptions, as well as
+This includes hardware and benchmark scenario descriptions, as well as
current results.
After enabling multi-threading, the number of threads is set by the ``thread-pool-size``
-parameter. Results from our tests show that best configurations for
+parameter. Results from our experiments show that the best settings for
``kea-dhcp6`` are:
- ``thread-pool-size``: 4 when using ``memfile`` for storing leases.
- ``thread-pool-size``: 6 when using ``postgresql``.
-Another very important parameter is ``packet-queue-size``; in our tests we
+Another very important parameter is ``packet-queue-size``; in our benchmarks we
used it as a multiplier of ``thread-pool-size``. The actual setting strongly depends
on ``thread-pool-size``.
-We saw the best results in our tests with the following settings:
+We saw the best results in our benchmarks with the following settings:
- ``packet-queue-size``: 150 * ``thread-pool-size`` when using ``memfile`` for
storing leases; in our case it was 150 * 4 = 600. This means that at any given
The two parameters are the ``cache-threshold`` double and the
``cache-max-age`` integer; they have no default setting, i.e. the lease caching
feature must be explicitly enabled. These parameters can be configured
-at the global, shared-network and subnet levels. The subnet level has
+at the global, shared-network, and subnet levels. The subnet level has
the precedence over the shared-network level, while the global level is used
as a last resort. For example:
"valid-lifetime": 600,
"subnet4": [ {
"subnet": "2001:db8:1::/64",
- # It is replaced by the "reservations-global"
- # "reservations-in-subnet" and "reservations-out-of-pool"
+ # It is replaced by the "reservations-global",
+ # "reservations-in-subnet", and "reservations-out-of-pool"
# parameters.
# "reservation-mode": "global",
- # Specify if the server should lookup global reservations.
+ # Specify if the server should look up global reservations.
"reservations-global": true,
- # Specify if the server should lookup in-subnet reservations.
+ # Specify if the server should look up in-subnet reservations.
"reservations-in-subnet": false,
# Specify if the server can assume that all reserved addresses
# are out-of-pool. It can be ignored because "reservations-in-subnet"
"hw-address": "aa:bb:cc:dd:ee:fe",
"client-classes": [ "reserved_class" ]
}],
- # It is replaced by the "reservations-global"
- # "reservations-in-subnet" and "reservations-out-of-pool" parameters.
- # Specify if the server should lookup global reservations.
+ # It is replaced by the "reservations-global",
+ # "reservations-in-subnet", and "reservations-out-of-pool" parameters.
+ # Specify if the server should look up global reservations.
"reservations-global": true,
- # Specify if the server should lookup in-subnet reservations.
+ # Specify if the server should look up in-subnet reservations.
"reservations-in-subnet": false,
# Specify if the server can assume that all reserved addresses
# are out-of-pool. It can be ignored because "reservations-in-subnet"
Local and Relayed Traffic in Shared Networks
--------------------------------------------
-It is possible to specify an interface name at the shared network level,
+It is possible to specify an interface name at the shared-network level,
to tell the server that this specific shared network is reachable
directly (not via relays) using the local network interface. As all
subnets in a shared network are expected to be used on the same physical
DHCPv6 Server Limitations
=========================
-These are the current limitations of the DHCPv6 server software. Most of
+These are the current known limitations of the Kea DHCPv6 server software. Most of
them are reflections of the current stage of development and should be
treated as “not implemented yet”, rather than actual limitations.
The ultimate goal for the CB is to serve as a central configuration
repository for one or multiple Kea servers connected to a database.
In currently supported Kea versions, only a subset of
-the DHCPv6 server parameters can be stored in the database. All other
+the DHCPv6 server parameters can be configured in the database. All other
parameters must be specified in the JSON configuration file, if
required.
-All supported parameters can be configured via ``cb_cmds`` hook library
+All supported parameters can be configured via the ``cb_cmds`` hook library
described in the :ref:`hooks-cb-cmds` section. The general rule is that
scalar global parameters are set using
``remote-global-parameter6-set``; shared-network-specific parameters
-are set using ``remote-network6-set``; and subnet- and pool-level
+are set using ``remote-network6-set``; and subnet-level and pool-level
parameters are set using ``remote-subnet6-set``. Whenever
there is an exception to this general rule, it is highlighted in the
table. Non-scalar global parameters have dedicated commands; for example,
Enabling the Configuration Backend
----------------------------------
-The following configuration snippet demonstrates how to enable the MySQL
-Configuration Backend for the DHCPv6 server:
+Consider the following configuration snippet, which uses a MySQL configuration
+database:
-::
+.. code-block:: json
{
"Dhcp6": {
{
"library": "/usr/local/lib/kea/hooks/libdhcp_cb_cmds.so"
}
- ],
- ...
+ ]
}
}
Finally, lease reclamation must be enabled with a low value of the
``reclaim-timer-wait-time`` parameter, to ensure that the server frequently
collects expired leases and makes them available for allocation via the
-allocator's free lease queue. Expired leases are not considered free by
+free lease queue. Expired leases are not considered free by
the allocator until they are reclaimed by the server. See
:ref:`lease-reclamation` for more details about the lease reclamation process.
// Currently there are no hook points defined in kea-netconf
// processing.
"hooks-libraries": [
- // The hooks libraries list may contain more than one library.
+ // The hook libraries list may contain more than one library.
{
// The only necessary parameter is the library filename.
"library": "/opt/local/netconf-commands.so",
// Flush determines whether logger flushes output
// to a file.
// Maxsize determines maximum filesize before
- // the file is being rotated.
+ // the file is rotated.
// Maxver specifies the maximum number of
- // rotated files being kept.
+ // rotated files to be kept.
"flush": true,
"maxsize": 204800,
"maxver": 4
This hook library is used to manage Kea
servers' configurations in a configuration backend database. This library must
-be used in conjunction with the available CB hooks libraries implementing
+be used in conjunction with the available CB hook libraries implementing
the common APIs to create, read, update, and delete (CRUD) the
configuration information in the respective databases. For example:
-the ``mysql_cb`` hooks library implements this API for MySQL while the
-``pgsql_cg`` hooks library implements this API for PostgreSQL.
+the ``mysql_cb`` hook library implements this API for MySQL while the
+``pgsql_cg`` hook library implements this API for PostgreSQL.
To manage the configuration information in a MySQL database, both the
``mysql_cb`` and ``cb_cmds`` libraries must be loaded by the server used for the
configuration management.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This section describes and gives some examples of the control commands
-implemented by the ``cb_cmds`` hooks library, to manage the
+implemented by the ``cb_cmds`` hook library, to manage the
configuration information of the DHCPv4 and DHCPv6 servers. Many of the
commands are almost identical between DHCPv4 and DHCPv6; they only
differ by the command name. Other commands differ slightly by the
This command includes the ``interface`` parameter, which sets the shared
-network-level interface name. Any remaining shared network-level parameters,
+network-level interface name. Any remaining shared-network level parameters,
which are not specified with the command, will be marked as
"unspecified" in the database. The DHCP server uses the global
values for unspecified parameters or, if the global values are not
shared network, no option is deleted. In particular, the given
option may be present for a subnet belonging to the shared network.
Such an option instance is not affected by this command as this
-command merely deletes the shared-network-level option. To
+command merely deletes the shared-network level option. To
delete a subnet-level option, the ``remote-option[46]-subnet-del``
command must be used instead.
Kea attempts to map link address parameters to the prefixes of configured
subnets. If a given address falls outside all configured subnet prefixes,
- the query fails with a status code of STATUS_NotConfigured. If
+ the query fails with a status code of ``STATUS_NotConfigured``. If
the link address parameter for ``query-by-relay-id`` or ``query-by-remote-id``
is not ``::`` (i.e. not empty), only delegated prefixes that lie within matching
subnet prefixes are returned. Currently, ``query-by-address`` does not
host reservations which are associated with this subnet. The current
implementation of the ``subnet4-del`` command removes neither the leases nor
the host reservations associated with a subnet. This is the safest approach
-because the server does not lose track of leases assigned to the clients
+because the server does not lose track of leases assigned to clients
from this subnet. However, removal of the subnet may still cause
configuration errors and conflicts. For example: after removal of the
subnet, the server administrator may update a new subnet with the ID
host reservations which are associated with this subnet. The current
implementation of the ``subnet6-del`` command removes neither the leases nor
the host reservations associated with a subnet. This is the safest approach
-because the server does not lose track of leases assigned to the clients
+because the server does not lose track of leases assigned to clients
from this subnet. However, removal of the subnet may still cause
configuration errors and conflicts. For example: after removal of the
subnet, the server administrator may add a new subnet with the ID used
},
"renew-timer": 60,
# "reservation-mode": "all",
- # It is replaced by the "reservations-global"
- # "reservations-in-subnet" and "reservations-out-of-pool"
+ # It is replaced by the "reservations-global",
+ # "reservations-in-subnet", and "reservations-out-of-pool"
# parameters.
- # Specify if the server should lookup global reservations.
+ # Specify if the server should look up global reservations.
"reservations-global": false,
- # Specify if the server should lookup in-subnet reservations.
+ # Specify if the server should look up in-subnet reservations.
"reservations-in-subnet": true,
# Specify if the server can assume that all reserved addresses
# are out-of-pool.
| | | leases, and to periodically test whether their partners are |
| | | still operational. The hook library also provides an ability |
| | | to send lease updates to external backup servers, making it |
- | | | much easier to have a replacement that is up-to-date. |
+ | | | much easier to have a replacement that is up to date. |
+-----------------------------------------------------------+--------------+--------------------------------------------------------------+
| :ref:`Host Cache <hooks-host-cache>` | ISC support | Some database backends, such as RADIUS, |
| | customers | may take a long time to respond. Since |
- ``lib/`` — libraries.
-- ``lib/kea/hooks`` — additional hooks libraries.
+- ``lib/kea/hooks`` — additional hook libraries.
- ``sbin/`` — server software and commands used by the system administrator.
``ctrl_agent_srv``, and ``netconf_srv`` parameters should be modified.
The ``kea_verbose`` parameter specifies the verbosity of the servers
-being started. When ``kea_verbose`` is set to "yes," the logging level of
+being started. When ``kea_verbose`` is set to ``yes``, the logging level of
the server is set to DEBUG. Modification of the logging severity in a
configuration file, as described in :ref:`logging`, will have no
effect as long as ``kea_verbose`` is set to "yes." Setting it to
valid, uses the new configuration.
If the new configuration proves to be invalid, the server retains its
current configuration; however, in some cases a fatal error message is logged
-indicating that the server no longer provides any service: a working
+indicating that the server is no longer providing any service: a working
configuration must be loaded as soon as possible.
A reload is executed as follows:
Please refer to :ref:`dhcp-ddns-server` to see how to configure DNS
updates in Kea, and to :ref:`hooks-libraries` for information about
-using hooks libraries.
+using hook libraries.
.. _lease-reclamation-defaults:
often the server initiates the lease reclamation procedure. Expressed in
seconds; the default value is 25. If both ``flush-reclaimed-timer-wait-time``
and ``hold-reclaimed-time`` are not 0, when the client sends a release
- message the lease is expired instead of being deleted from the lease storage.
+ message the lease is expired instead of being deleted from lease storage.
- ``hold-reclaimed-time`` - this parameter governs how long the lease
should be kept after it is reclaimed. This enables lease affinity
when set to a non-zero value. Expressed in seconds; the default value
is 3600. If both ``flush-reclaimed-timer-wait-time`` and
``hold-reclaimed-time`` are not 0, when the client sends a release message
- the lease is expired instead of being deleted from the lease storage.
+ the lease is expired instead of being deleted from lease storage.
- ``max-reclaim-leases`` - this parameter specifies the maximum number
of reclaimed leases that can be processed at one time. Zero means
are held in the database for a specified amount of time rather than removed.
If both ``flush-reclaimed-timer-wait-time`` and ``hold-reclaimed-time`` are
greater than zero, the lease is expired immediately when the client sends a
-release message, instead of being deleted from the lease storage. When the client
+release message, instead of being deleted from lease storage. When the client
returns, the server first verifies whether there are any reclaimed leases
associated with this client and then reassigns them if possible. However, it is
important to note that any reclaimed lease may be assigned to another client if
# apk update
4. Kea is split into various packages. The entire list is available on
- `cloudsmith.io <https://cloudsmith.io/~isc/repos/>`__ or using apt/yum/dnf.
+ `cloudsmith.io <https://cloudsmith.io/~isc/repos/>`__ or using apt/yum/dnf.
For example, on Debian/Ubuntu:
.. code-block:: console
.. code-block:: console
- $ sudo apt install isc-kea*=2.4.0-isc0000920201106154401
+ $ sudo apt install isc-kea*=2.4.0-isc20230531000000
.. note::
Not all package managers support installing packages with a glob (``*``),
It performs extra checks beyond what -t offers, such as establishing
database connections (for the lease backend, host reservations backend,
configuration backend, and forensic logging backend), loading hook libraries,
- parsing configurations, etc. It does not open UNIX or TCP/UDP sockets,
+ parsing hook-library configurations, etc. It does not open UNIX or TCP/UDP sockets,
nor does it open or rotate files, as any of these actions could interfere
with a running process on the same machine.
It performs extra checks beyond what -t offers, such as establishing
database connections (for the lease backend, host reservations backend,
configuration backend, and forensic logging backend), loading hook libraries,
- parsing configurations, etc. It does not open UNIX or TCP/UDP sockets, nor
+ parsing hook-library configurations, etc. It does not open UNIX or TCP/UDP sockets, nor
does it open or rotate files, as any of these actions could interfere with
a running process on the same machine.
% COMMAND_SOCKET_CLOSED_BY_FOREIGN_HOST Closed command socket %1 by foreign host, %2
This is an information message indicating that the command connection has been
-closed by a command control client, and whether or not any partially read data
+closed by a command control client, and whether any partially read data
was discarded.
% COMMAND_SOCKET_CONNECTION_CANCEL_FAIL Failed to cancel read operation on socket %1: %2