From: Francis Dupont Date: Mon, 11 Mar 2019 15:01:04 +0000 (+0100) Subject: [430-configure-location-of-datadir] Forked all-keys.json files into stable and curren... X-Git-Tag: Kea-1.6.0-beta~371 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=29cd23f3af1458ecc8b08df67f575de91b33717d;p=thirdparty%2Fkea.git [430-configure-location-of-datadir] Forked all-keys.json files into stable and current versions --- diff --git a/doc/Makefile.am b/doc/Makefile.am index 192f64d44c..c884546ea5 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -19,7 +19,8 @@ nobase_dist_doc_DATA += examples/https/httpd2/kea-httpd2.conf nobase_dist_doc_DATA += examples/https/nginx/kea-nginx.conf nobase_dist_doc_DATA += examples/https/shell/kea-stunnel.conf nobase_dist_doc_DATA += examples/kea4/advanced.json -nobase_dist_doc_DATA += examples/kea4/all-keys.json +nobase_dist_doc_DATA += examples/kea4/all-keys-current.json +nobase_dist_doc_DATA += examples/kea4/all-keys-stable.json nobase_dist_doc_DATA += examples/kea4/backends.json nobase_dist_doc_DATA += examples/kea4/cassandra.json nobase_dist_doc_DATA += examples/kea4/classify.json @@ -40,7 +41,8 @@ nobase_dist_doc_DATA += examples/kea4/shared-network.json nobase_dist_doc_DATA += examples/kea4/single-subnet.json nobase_dist_doc_DATA += examples/kea4/with-ddns.json nobase_dist_doc_DATA += examples/kea6/advanced.json -nobase_dist_doc_DATA += examples/kea6/all-keys.json +nobase_dist_doc_DATA += examples/kea6/all-keys-current.json +nobase_dist_doc_DATA += examples/kea6/all-keys-stable.json nobase_dist_doc_DATA += examples/kea6/backends.json nobase_dist_doc_DATA += examples/kea6/cassandra.json nobase_dist_doc_DATA += examples/kea6/classify.json diff --git a/doc/examples/kea4/all-keys-current.json b/doc/examples/kea4/all-keys-current.json new file mode 100644 index 0000000000..9db98c9abb --- /dev/null +++ b/doc/examples/kea4/all-keys-current.json @@ -0,0 +1,748 @@ +// WARNING: This example configuration is not meant for production use. +// The Kea DHCPv4 server will refuse this configuration because it contains +// mutually exclusive configuration parameters. +// +// The primary purpose of the example file is to provide a comprehensive +// list of parameters supported by Kea DHCPv4 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. +{ + // Kea DHCPv4 server configuration begins here. + "Dhcp4": { + // Global bootfile name to be set in the 'file' field. + "boot-file-name": "/dev/null", + + // Ordered list of client classes used by the DHCPv4 server. + "client-classes": [ + { + // Class specific bootfile name to be set in the 'file' field. + "boot-file-name": "/tmp/bootfile.efi", + + // Class name. + "name": "phones_server1", + + // Class specific next server address to use in bootstrap, which + // is set in 'siaddr' field. + "next-server": "10.2.3.4", + + // Class specific DHCPv4 options list. + "option-data": [], + + // Class specific DHCPv4 option definitions, i.e. custom formats + // specified for non-standard options. + "option-def": [], + + // Class specific optional server hostname, which is set in + // 'sname' field. + "server-hostname": "", + + // Class selection expression. The DHCP packet is assigned to this + // class when the given expression evaluates to true. + "test": "member('HA_server1')" + }, + { + // Default value of the class specific bootfile name. Empty name + // means that the bootfile name is unspecified. + "boot-file-name": "", + + // Second class name. + "name": "phones_server2", + + // Default value of the class specific next server address. The + // zero IPv4 address means that it is unspecified. + "next-server": "0.0.0.0", + + // Class specific DHCPv4 options list. + "option-data": [], + + // Class specific DHCPv4 option definitions, i.e. custom formats + // specified for non-standard options. + "option-def": [], + + // Class specific optional server hostname, which is set in + // 'sname' field. + "server-hostname": "", + + // Class selection expression. The DHCP packet is assigned to this + // class when the given expression evaluates to true. + "test": "member('HA_server2')" + }, + + { + // 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 + // includes this class name in its "require-client-classes" list. The + // default value false means that the class test expression must + // always be evaluated. + "only-if-required": true, + + // Class selection expression. + "test": "member('ALL')" + } + ], + + // Command control socket configuration parameters for 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 + // local server administrator. + "socket-name": "/tmp/kea-dhcp4-ctrl.sock", + + // Control socket type used by the Kea DHCPv4 server. The 'unix' + // socket is currently the only supported type. + "socket-type": "unix" + }, + + // 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 DHCPv4 server. + // NCRs are sent to Kea D2 module to update DNS upon allocation of the + // DHCP leases. + "dhcp-ddns": { + // Boolean flag indicating if Kea DHCPv4 server must generate NCRs. + // By default NCRs are not generated. + "enable-updates": false, + + // Specifies a prefix to be prepended to the generated Client FQDN. + "generated-prefix": "myhost", + + // String of zero or more characters with which to replace each + // invalid character in the hostname or Client FQDN. The default + // value is an empty string which will cause invalid characters + // to be omitted rather than replaced. + "hostname-char-replacement": "x", + + // Regular expression describing the invalid character set in + // the hostname or Client FQDN. + "hostname-char-set": "[^A-Za-z0-9.-]", + + // Specifies maximum number of NCRs to queue waiting to be sent + // to Kea D2 server. + "max-queue-size": 1024, + + // Packet format to use when sending NCRs to Kea D2 server. + // Currently, only JSON format is supported. + "ncr-format": "JSON", + + // Socket protocol to use when sending NCRs to D2. Currently, + // only UDP is supported. + "ncr-protocol": "UDP", + + // Boolean flag indicating that 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. + "override-client-update": false, + + // Boolean flag indicating that the server should override 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. + "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. + "qualifying-suffix": "", + + // Enumeration specifying whether the server should honor + // 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 + // 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". + "replace-client-name": "never", + + // IP address that Kea DHCPv4 server should use to send + // NCRs to D2. Default value of zero indicates that Kea + // should pick suitable address. + "sender-ip": "0.0.0.0", + + // Port number that Kea DHCPv4 server should use to send + // NCRs to D2. Default value of zero indicates that Kea + // should pick suitable port. + "sender-port": 0, + + // IP address on which D2 listens for NCRs. + "server-ip": "127.0.0.1", + + // Port number on which D2 listens for NCRs. + "server-port": 53001 + }, + + // Specifies the first of the two consecutive ports of the UDP + // sockets used for communication between DHCPv6 and DHCPv4 + // servers. See RFC 7341. + "dhcp4o6-port": 6767, + + // Boolean flag indicating whether or not the Kea DHCPv4 server + // should send back 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 + // backward compatibility with older DHCP specifications which + // stated that Client Identifier must not be sent back. + "echo-client-id": true, + + // 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. + "flush-reclaimed-timer-wait-time": 25, + + // Specifies the time period in seconds to keep expired + // leases in the lease database (lease affinity). + "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 + // 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. + "max-reclaim-time": 250, + + // Specifies the time period in seconds since last attempt + // to process expired leases to initiate 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. + "unwarned-reclaim-cycles": 5 + }, + + // List of hooks libraries and their specific configuration parameters + // to be loaded by Kea DHCPv4 server. + "hooks-libraries": [ + { + // Location of the hooks library to be loaded. + "library": "/opt/lib/hooks/libdhcp_lease_cmds.so", + + // Hook library specific configuration parameters. + "parameters": { } + } + ], + + // List of access credentials to external sources of IPv4 reservations, + "hosts-databases": [ + { + // Name of the database to connect to. + "name": "kea", + + // Host on which the database resides. + "host": "localhost", + + // Database password. + "password": "kea", + + // Port on which the database is available. + "port": 3306, + + // Type of the database, e.g. "mysql", "pgsql", "cql". + "type": "mysql", + + // User name to be used to access the database. + "user": "kea" + } + ], + + // List of host reservation identifier types to be used by the + // Kea DHCPv4 server to fetch static reservations for the + // 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 + // here to prevent unnecessary queries to the database. + "host-reservation-identifiers": [ + "hw-address", + "duid", + "circuit-id", + "client-id", + "flex-id" + ], + + // Specifies configuration of interfaces on which the Kea DHCPv4 + // server is listening to the DHCP queries. + "interfaces-config": { + // Specifies whether the server should use "udp" socket or + // "raw" sockets to listen to the DHCP traffic. The "raw" + // sockets are useful when direct DHCP traffic is being + // received. + "dhcp-socket-type": "udp", + + // Specifies a list of interfaces on which the Kea DHCPv4 + // server should listen to the DHCP requests. + "interfaces": [ + "ethX" + ], + + // Enumeration which indicates what interface should be used + // to send DHCP response 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 + // Kea server should use kernel's routing table to find the + // suitable interface. + "outbound-interface": "same-as-inbound", + + // Boolean flag indicating if the available interfaces should + // be re-detected upon server reconfiguration. The default value + // is true which means that the interfaces are always + // re-detected. + "re-detect": 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 + // infinitely). + "lfc-interval": 3600, + + // Name of the lease file. In case of database it specifies the + // database name. + "name": "/tmp/kea-dhcp4.csv", + + // 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 + // 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. + "persist": true, + + // Lease database backend type, i.e. "memfile", "mysql", "pgsql" + // or "cql". + "type": "memfile" + }, + + // Boolean value indicating if the Kea DHCPv4 server should use client + // identifier value sent by the client or ignore it. The default value + // is true which indicate that the server should use client identifier + // and that it takes precedence over 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. + // This is specifically useful when clients don't generate unique + // identifiers or these identifiers are not stable etc. + "match-client-id": false, + + // Global value of the next server address set in 'siaddr' field. + // The global value may be overriden in lower level configuration + // scopes. + "next-server": "192.0.2.123", + + // List of global DHCP options that Kea DHCPv4 server assigns to the + // clients. + "option-data": [ + { + // Boolean flag indicating if the given option is always + // send in response or only when requested. The default + // value of false indicates that it is only sent when + // requested. + "always-send": false, + + // Option code. It is not required if the option name is + // provided. + "code": 6, + + // 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. + "csv-format": true, + + // Option data to be stored in the option payload. + "data": "192.0.3.1, 192.0.3.2", + + // Option name. It is not required of the option code is + // provided. + "name": "domain-name-servers", + + // Option space. The default is the "dhcp4" option space which + // groups top level DHCPv4 options. + "space": "dhcp4" + } + ], + + // List of global option definitions, i.e. option formats, that the + // Kea DHCPv4 server is using. + "option-def": [ + { + // Boolean flag indicating if the option definition comprises + // an array of values of some type, e.g. array of IPv4 addresses. + // The default value of false means that the option does not + // comprise an array of values. + "array": false, + + // Option code. + "code": 6, + + // 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 + // option doesn't encapsulate any option. + "encapsulate": "", + + // Option name. + "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 + // this option comprises two fields, 1 byte and 2 bytes long. + "record-types": "uint8, uint16", + + // Name of the option space to which this option belongs. + "space": "my-space", + + // Option type. All possible types are listed in the Kea + // Administrator Reference Manual. + "type": "record" + } + ], + + // 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. + "rebind-timer": 40, + + // Global value for the renew timer, i.e. the timer after which the + // DHCP client renews the lease. + "renew-timer": 30, + + // Governs how the Kea DHCPv4 server should deal with the invalid + // data received from the client. + "sanity-checks": { + // Specifies how the Kea DHCPv4 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 + // 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 + // to "fix" but delete the lease if no suitable subnet found), + // "del" (delete the lease if the lease has invalid subnet + // identifier value). + "lease-checks": "warn" + }, + + // List of shared networks used by Kea DHCPv4 server. The shared + // networks group subnets together. + "shared-networks": [ + { + // Shared network level bootfile name. + "boot-file-name": "/dev/null", + + // Restricts this shared network to allow only clients + // that belong to the particular client class. If an + // empty string is provided, no restriction is applied. + "client-class": "", + + // Specifies that this shared network is selected for the + // requests received on the particular interface. + "interface": "ethX", + + // 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 + // to be sent in 'siaddr'. + "next-server": "192.0.2.123", + + // List of shared network specific DHCP options. + "option-data": [], + + // List of IPv4 relay addresses for which this shared + // network is selected. + "relay": { + "ip-addresses": [] + }, + + // Shared network level rebind timer. + "rebind-timer": 41, + + // Shared network level renew timer. + "renew-timer": 31, + + // Enumeration specifying server's mode of operation when it + // fetches host reservations. + "reservation-mode": "all", + + // List of client classes which must be evaluated when this shared + // network is selected for client assignments. + "require-client-classes": [ "late" ], + + // Shared network level server hostname set in 'sname' field. + "server-hostname": "", + + // List of IPv4 subnets belonging to this shared network. + "subnet4": [ + { + // Interface name matched against inbound interface name. + // Used in DHCPv4o6. See RFC 7341. + "4o6-interface": "", + + // Interface ID option value. See RFC 7341. + "4o6-interface-id": "", + + // Prefix matched against source address. See RFC7341. + "4o6-subnet": "2001:db8:1:1::/64", + + // Subnet level bootfile name, set in 'file' field. + "boot-file-name": "", + + // Restricts this subnet to allow only clients that belong + // to the particular client class. If an empty string is + // provided, no restriction is applied. + "client-class": "", + + // Subnet unique identifier. + "id": 1, + + // Specifies that this subnet is selected for the requests + // received on the particular interface. + "interface": "ethX", + + // Subnet level flag specifying whether the client identifier + // should be used for identifying clients. + "match-client-id": true, + + // Subnet level specification of the next server to be sent + // in 'siaddr'. + "next-server": "0.0.0.0", + + // Subnet level list of DHCP options. + "option-data": [ + { + // Boolean flag indicating if 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 human + // readable CSV value. + "csv-format": true, + + // Option data to be included in the option payload. + "data": "192.0.3.1", + + // Option name. + "name": "routers", + + // Option space. The default value "dhcp4" designates the + // top level option space. + "space": "dhcp4" + } + ], + + // List of IP address pools belonging to the subnet. + "pools": [ + { + // Restricts this pool to be only used for the client + // requests belonging to a particular client class. + "client-class": "phones_server1", + + // Pool level list of DHCP options. + "option-data": [], + + // Address range used for client assignments. + "pool": "192.1.0.1 - 192.1.0.200", + + // List of client classes which must be evaluated when this pool + // is selected for client assignments. + "require-client-classes": [ "late" ] + }, + { + // Restricts this pool to be only used for the client + // requests belonging to a particular client class. + "client-class": "phones_server2", + + // Pool level list of DHCP options. + "option-data": [], + + // Address range used for client assignments. + "pool": "192.3.0.1 - 192.3.0.200", + + // List of client classes which must be evaluated when this pool + // is selected for client assignments. + "require-client-classes": [] + } + ], + + // Subnet level value of the rebind timer. + "rebind-timer": 40, + + // List of IPv4 relay addresses for which this subnet is + // selected. + "relay": { + "ip-addresses": [ + "192.168.56.1" + ] + }, + + // Subnet level value of the renew timer. + "renew-timer": 30, + + // Enumeration specifying server's mode of operation when it + // fetches host reservations. + "reservation-mode": "all", + + // List of static IPv4 reservations assigned to the clients belonging + // to this subnet. For detailed example see reservations.json. + "reservations": [ + { + // Identifier used for client matching. Supported values are + // "hw-address", "client-id", "duid", "circuit-id", "flex-id". + "circuit-id": "01:11:22:33:44:55:66", + + // Reserved IP address. + "ip-address": "192.0.2.204", + + // Reservation specific option data. + "option-data": [ + { + // Option name. + "name": "vivso-suboptions", + + // Option data. + "data": "4491" + } + ] + } + ], + + // List of client classes which must be evaluated when this subnet + // is selected for client assignments. + "require-client-classes": [ "late" ], + + // Subnet level server hostname set in 'sname' field. + "server-hostname": "", + + // Subnet prefix. + "subnet": "192.0.0.0/8", + + // Subnet level valid lifetime. + "valid-lifetime": 6000 + } + ], + + // Shared network level valid lifetime. + "valid-lifetime": 6001 + } + ], + + // Global server hostname set in the 'sname' field. + "server-hostname": "", + + // List of IPv4 subnets which don't belong to any shared network. + "subnet4": [], + + // Global valid lifetime value. + "valid-lifetime": 6000, + + // Reservations (examples are in other files). + "reservations": [], + + // Configuration control (currently not used, i.e. this syntax + // is already defined but corresponding feature is not implemented). + "config-control": + { + // Only configuration databases entry is defined. + "config-databases": [ + { + // Name of the database to connect to. + "name": "config", + + // Type of the database, e.g. "mysql", "pgsql", "cql". + "type": "mysql" + } + ] + }, + + // Server tag. + "server-tag": "my DHCPv4 server", + + // DHCP queue control parameters. + "dhcp-queue-control": + { + // Enable queue is mandatory. + "enable-queue": true, + + // Queue type was mandatory. + "queue-type": "kea-ring4" + }, + + // Fetches host reservations. + "reservation-mode": "all", + + // Compute T1 and T2 timers. + "calculate-tee-times": true, + + // T1 = valid lifetime * .5. + "t1-percent": .5, + + // T2 = valid lifetime * .75. + "t2-percent": .75 + + }, + + // Logging configuration begins here. + "Logging": { + + // List of loggers used by the servers using this configuration file. + "loggers": [ + { + // Debug level, a value between 0..99. The greater the value + // the more detailed debug log. + "debuglevel": 99, + + // Name of the logger. + "name": "kea-dhcp4", + + // Configures how the log should be output. + "output_options": [ + { + // Determines whether the log should flushed to a file. + "flush": true, + + // Specifies maximum filesize before the file is being rotated. + "maxsize": 10240000, + + // Specifies the maximum number of rotated files being kept. + "maxver": 1, + + // Specifies logging destination. + "output": "stdout" + } + ], + + // Specifies logging severity, i.e. "ERROR", "WARN", "INFO", "DEBUG". + "severity": "INFO" + } + ] + } +} diff --git a/doc/examples/kea4/all-keys.json b/doc/examples/kea4/all-keys-stable.json similarity index 99% rename from doc/examples/kea4/all-keys.json rename to doc/examples/kea4/all-keys-stable.json index 6c889c924c..4c2da4b82e 100644 --- a/doc/examples/kea4/all-keys.json +++ b/doc/examples/kea4/all-keys-stable.json @@ -5,6 +5,9 @@ // The primary purpose of the example file is to provide a comprehensive // list of parameters supported by Kea DHCPv4 server along with the brief // description of each parameter. +// +// This stable version is used for YANG as we do not want to update code +// and models each time a keyword is added to the syntax. { // Kea DHCPv4 server configuration begins here. "Dhcp4": { diff --git a/doc/examples/kea6/all-keys-current.json b/doc/examples/kea6/all-keys-current.json new file mode 100644 index 0000000000..ae2ce29c3e --- /dev/null +++ b/doc/examples/kea6/all-keys-current.json @@ -0,0 +1,697 @@ +// WARNING: This example configuration is not meant for production use. +// The Kea DHCPv6 server will refuse this configuration because it contains +// 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 +// 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. +{ + // Kea DHCPv6 server configuration begins here. + "Dhcp6": { + // Ordered list of client classes used by the DHCPv6 server. + "client-classes": [ + { + // Class name. + "name": "phones_server1", + + // Class specific DHCPv6 options list. + "option-data": [], + + // Class selection expression. The DHCP packet is assigned to this + // class when the given expression evaluates to true. + "test": "member('HA_server1')" + }, + { + // Second class name. + "name": "phones_server2", + + // Class specific DHCPv6 options list. + "option-data": [], + + // Class selection expression. The DHCP packet is assigned to this + // class when the given expression evaluates to true. + "test": "member('HA_server2')" + }, + { + // 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 + // includes this class name in its "require-client-classes" list. The + // default value false means that the class test expression must + // always be evaluated. + "only-if-required": true, + + // Class selection expression. + "test": "member('ALL')" + } + ], + + // Command control socket configuration parameters for Kea DHCPv6 server. + "control-socket": { + // 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/kea-dhcp6-ctrl.sock", + + // Control socket type used by the Kea DHCPv6 server. The 'unix' + // socket is currently the only supported type. + "socket-type": "unix" + }, + + // 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 + // DHCP leases. + "dhcp-ddns": { + // Boolean flag indicating if Kea DHCPv6 server must generate NCRs. + // By default NCRs are not generated. + "enable-updates": false, + + // Specifies a prefix to be prepended to the generated Client FQDN. + "generated-prefix": "myhost", + + // String of zero or more characters with which to replace each + // invalid character in the hostname or Client FQDN. The default + // value is an empty string which will cause invalid characters + // to be omitted rather than replaced. + "hostname-char-replacement": "x", + + // Regular expression describing the invalid character set in + // the hostname or Client FQDN. + "hostname-char-set": "[^A-Za-z0-9.-]", + + // Specifies maximum number of NCRs to queue waiting to be sent + // to Kea D2 server. + "max-queue-size": 1024, + + // Packet format to use when sending NCRs to Kea D2 server. + // Currently, only JSON format is supported. + "ncr-format": "JSON", + + // Socket protocol to use when sending NCRs to D2. Currently, + // only UDP is supported. + "ncr-protocol": "UDP", + + // Boolean flag indicating that 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. + "override-client-update": false, + + // Boolean flag indicating that the server should override 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. + "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. + "qualifying-suffix": "", + + // Enumeration specifying whether the server should honor + // 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 + // 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". + "replace-client-name": "never", + + // IP address that Kea DHCPv6 server should use to send + // NCRs to D2. Default value of zero indicates that Kea + // should pick 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. + "sender-port": 0, + + // IP address on which D2 listens for NCRs. + "server-ip": "::1", + + // Port number on which D2 listens for NCRs. + "server-port": 53001 + }, + + // Specifies the first of the two consecutive ports of the UDP + // sockets used for communication between DHCPv6 and DHCPv4 + // servers. See RFC 7341. + "dhcp4o6-port": 0, + + // 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. + "flush-reclaimed-timer-wait-time": 25, + + // Specifies the time period in seconds to keep expired + // leases in the lease database (lease affinity). + "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 + // 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. + "max-reclaim-time": 250, + + // Specifies the time period in seconds since last attempt + // to process expired leases to initiate 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. + "unwarned-reclaim-cycles": 5 + }, + + // List of hooks libraries and their specific configuration parameters + // to be loaded by Kea DHCPv4 server. + "hooks-libraries": [ + { + // Location of the hooks library to be loaded. + "library": "/opt/lib/hooks/libdhcp_lease_cmds.so", + + // Hook library specific configuration parameters. + "parameters": { } + } + ], + + // List of access credentials to external sources of IPv6 reservations, + "hosts-databases": [ + { + // Name of the database to connect to. + "name": "kea", + + // Host on which the database resides. + "host": "localhost", + + // Database password. + "password": "kea", + + // Port on which the database is available. + "port": 3306, + + // Type of the database, e.g. "mysql", "pgsql", "cql". + "type": "mysql", + + // User name to be used to access the database. + "user": "kea" + } + ], + + // List of host reservation identifier types to be used by the + // Kea DHCPv6 server to fetch static reservations for the + // 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 + // here to prevent unnecessary queries to the database. + "host-reservation-identifiers": [ + "hw-address", + "duid", + "flex-id" + ], + + // Specifies configuration of interfaces on which the Kea DHCPv6 + // 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. + "interfaces": [ + "ethX" + ], + + // Boolean flag indicating if the available interfaces should + // be re-detected upon server reconfiguration. The default value + // is true which means that the interfaces are always + // re-detected. + "re-detect": 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 + // infinitely). + "lfc-interval": 3600, + + // Name of the lease file. In case of database it specifies the + // database name. + "name": "/tmp/kea-dhcp6.csv", + + // 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 + // 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. + "persist": true, + + // Lease database backend type, i.e. "memfile", "mysql", "pgsql" + // or "cql". + "type": "memfile" + }, + + // List of parameters indicating how the client's MAC address can be + // inferred from the DHCP query. Supported values are listed in the + // Kea Administrator Reference Manual. + "mac-sources": [ "duid" ], + + // List of global DHCP options that Kea DHCPv6 server assigns to the + // clients. + "option-data": [ + { + // Boolean flag indicating if the given option is always + // send in response or only when requested. The default + // value of false indicates that it is only sent when + // requested. + "always-send": false, + + // Option code. It is not required if the option name is + // provided. + "code": 23, + + // 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. + "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 + // provided. + "name": "dns-servers", + + // Option space. The default is the "dhcp6" option space which + // groups top level DHCPv6 options. + "space": "dhcp6" + } + ], + + // List of global option definitions, i.e. option formats, that the + // 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. + // The default value of false means that the option does not + // comprise an array of values. + "array": false, + + // Option code. + "code": 6, + + // 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 + // option doesn't encapsulate any option. + "encapsulate": "", + + // Option name. + "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 + // this option comprises two fields, 1 byte and 2 bytes long. + "record-types": "uint8, uint16", + + // Name of the option space to which this option belongs. + "space": "my-space", + + // Option type. All possible types are listed in the Kea + // Administrator Reference Manual. + "type": "record" + } + ], + + // Global value of the preferred lifetime. + "preferred-lifetime": 50, + + // 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. + "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 + // DHCP client renews the lease. + "renew-timer": 30, + + // Governs how the Kea DHCPv6 server should deal with the 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 + // 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 + // to "fix" but delete the lease if no suitable subnet found), + // "del" (delete the lease if the lease has invalid subnet + // identifier value). + "lease-checks": "warn" + }, + + // Custom DUID used by the DHCPv6 server. + "server-id": { + // Type of the DUID. Possible values are "LLT", "EN", and "LL". + "type": "EN", + + // Enterprise id used for "EN" duid. + "enterprise-id": 2495, + + // Identifier part of the DUID. + "identifier": "0123456789", + + // Boolean flag indicating if the DUID should be persisted on + // disk. + "persist": false + }, + + // List of shared networks used by 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 + // empty string is provided, no restriction is applied. + "client-class": "", + + // Specifies that this shared network is selected for the + // requests received on the particular interface. + "interface": "ethX", + + // Specifies the content of the interface-id option used + // by relays to identify the interface on the relay to + // which the response is sent. + "interface-id": "", + + // Shared network name. + "name": "my-secret-network", + + // List of shared network specific DHCP options. + "option-data": [], + + // Shared network specific preferred lifetime. + "preferred-lifetime": 2000, + + // Boolen flag indicating if the server can respond to + // a Solicit message including a Rapid Commit option with + // the Reply message (See DHCPv6 rapid commit). + "rapid-commit": false, + + // List of IPv6 relay addresses for which this shared + // network is selected. + "relay": { + "ip-addresses": [] + }, + + // Shared network level rebind timer. + "rebind-timer": 41, + + // Shared network level renew timer. + "renew-timer": 31, + + // Enumeration specifying server's mode of operation when it + // fetches host reservations. + "reservation-mode": "all", + + // List of client classes which must be evaluated when this shared + // network is selected for client assignments. + "require-client-classes": [ "late" ], + + // 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 + // provided, no restriction is applied. + "client-class": "", + + // Subnet unique identifier. + "id": 1, + + // Specifies that this subnet is selected for the requests + // received on the particular interface. + "interface": "ethX", + + // Specifies the content of the interface-id option used + // by relays to identify the interface on the relay to + // which the response is sent. + "interface-id": "", + + // Subnet level list of DHCP options. + "option-data": [ + { + // Boolean flag indicating if 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. + "csv-format": false, + + // Option data to be included in the option payload. + "data": "0xf0", + + // Option name. + "name": "preference", + + // Option space. The default value "dhcp6" designates the + // top level option space. + "space": "dhcp6" + } + ], + + // List of pools from which delegated prefixes are assigned to the + // clients. + "pd-pools": [ + { + "client-class": "phones_server1", + "delegated-len": 64, + "excluded-prefix": "2001:db8::", + "excluded-prefix-len": 48, + "option-data": [], + "prefix": "2001:db8::", + "prefix-len": 40, + "require-client-classes": [] + } + ], + + "pools": [ + { + // Restricts this pool to be only used for the client + // requests belonging to a particular client class. + "client-class": "phones_server1", + + // Pool level list of DHCP options. + "option-data": [], + + // Address range used for client assignments. + "pool": "2001:db8:0:1::/64", + + // List of client classes which must be evaluated when this pool + // is selected for client assignments. + "require-client-classes": [ "late" ] + }, + { + // Restricts this pool to be only used for the client + // requests belonging to a particular client class. + "client-class": "phones_server2", + + // Pool level list of DHCP options. + "option-data": [], + + // Address range used for client assignments. + "pool": "2001:db8:0:3::/64", + + // List of client classes which must be evaluated when this pool + // is selected for client assignments. + "require-client-classes": [] + } + ], + + // Subnet specific preferred lifetime. + "preferred-lifetime": 2000, + + // Boolen flag indicating if 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. + "rebind-timer": 40, + + // List of IPv4 relay addresses for which this subnet + // is selected. + "relay": { + "ip-addresses": [ + "2001:db8:0:f::1" + ] + }, + + // Subnet level renew timer. + "renew-timer": 30, + + // Enumeration specifying server's mode of operation when it + // fetches host reservations. + "reservation-mode": "all", + + // List of static IPv6 reservations assigned to the clients belonging + // to this subnet. For detailed example see reservations.json. + "reservations": [ + { + // Identifier used for client matching. Supported values are + // "duid", "hw-address" and "flex-id". + "duid": "01:02:03:04:05:06:07:08:09:0A", + + // List of reserved IPv6 addresses. + "ip-addresses": [ "2001:db8:1:cafe::1" ], + + // List of reserved IPv6 prefixes. + "prefixes": [ "2001:db8:2:abcd::/64" ], + + // Reserved hostname. + "hostname": "foo.example.com", + + // Reservation specific option data. + "option-data": [ + { + // Option name. + "name": "vendor-opts", + + // Option value. + "data": "4491" + } + ] + } + ], + + // List of client classes which must be evaluated when this subnet + // is selected for client assignments. + "require-client-classes": [ "late" ], + + // Subnet prefix. + "subnet": "2001:db8::/32", + + // Subnet level valid lifetime. + "valid-lifetime": 6000 + } + ], + + // Shared network level valid lifetime. + "valid-lifetime": 6001 + } + ], + + // List of IPv6 subnets which don't belong to any shared network. + "subnet6": [], + + // Global valid lifetime value. + "valid-lifetime": 6000, + + // Reservations (examples are in other files). + "reservations": [], + + // Configuration control (currently not used, i.e. this syntax + // is already defined but corresponding feature is not implemented). + "config-control": + { + // Only configuration databases entry is defined. + "config-databases": [ + { + // Name of the database to connect to. + "name": "config", + + // Type of the database, e.g. "mysql", "pgsql", "cql". + "type": "mysql" + } + ] + }, + + // Server tag. + "server-tag": "my DHCPv6 server", + + // DHCP queue control parameters. + "dhcp-queue-control": + { + // Enable queue is mandatory. + "enable-queue": true, + + // Queue type was mandatory. + "queue-type": "kea-ring6" + }, + + // Fetches host reservations. + "reservation-mode": "all", + + // Data directory. + "data-directory": "/tmp" + }, + + // Logging configuration begins here. + "Logging": { + + // List of loggers used by the servers using this configuration file. + "loggers": [ + { + // Debug level, a value between 0..99. The greater the value + // the more detailed debug log. + "debuglevel": 99, + + // Name of the logger. + "name": "kea-dhcp6", + + // Configures how the log should be output. + "output_options": [ + { + // Determines whether the log should flushed to a file. + "flush": true, + + // Specifies maximum filesize before the file is being rotated. + "maxsize": 10240000, + + // Specifies the maximum number of rotated files being kept. + "maxver": 1, + + // Specifies logging destination. + "output": "stdout" + } + ], + + // Specifies logging severity, i.e. "ERROR", "WARN", "INFO", "DEBUG". + "severity": "INFO" + } + ] + } +} diff --git a/doc/examples/kea6/all-keys.json b/doc/examples/kea6/all-keys-stable.json similarity index 99% rename from doc/examples/kea6/all-keys.json rename to doc/examples/kea6/all-keys-stable.json index 0d5c312f70..8f54bbdf32 100644 --- a/doc/examples/kea6/all-keys.json +++ b/doc/examples/kea6/all-keys-stable.json @@ -5,6 +5,9 @@ // The primary purpose of the example file is to provide a comprehensive // list of parameters supported by 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 +// and models each time a keyword is added to the syntax. { // Kea DHCPv6 server configuration begins here. "Dhcp6": { @@ -645,7 +648,6 @@ // Queue type was mandatory. "queue-type": "kea-ring6" } - // missing data-directory }, // Logging configuration begins here. diff --git a/src/bin/dhcp4/tests/parser_unittest.cc b/src/bin/dhcp4/tests/parser_unittest.cc index 61ff0b1173..b7c3133027 100644 --- a/src/bin/dhcp4/tests/parser_unittest.cc +++ b/src/bin/dhcp4/tests/parser_unittest.cc @@ -264,7 +264,7 @@ void testFile(const std::string& fname) { // the second time with Parser4. Both JSON trees are then compared. TEST(ParserTest, file) { vector configs = { "advanced.json" , - "all-keys.json", + "all-keys-current.json", "backends.json", "cassandra.json", "classify.json", diff --git a/src/bin/dhcp6/tests/parser_unittest.cc b/src/bin/dhcp6/tests/parser_unittest.cc index 84ab706ec4..0ce3c96e32 100644 --- a/src/bin/dhcp6/tests/parser_unittest.cc +++ b/src/bin/dhcp6/tests/parser_unittest.cc @@ -270,7 +270,7 @@ void testFile(const std::string& fname) { TEST(ParserTest, file) { vector configs; configs.push_back("advanced.json"); - configs.push_back("all-keys.json"); + configs.push_back("all-keys-current.json"); configs.push_back("backends.json"); configs.push_back("cassandra.json"); configs.push_back("classify.json"); diff --git a/src/lib/yang/tests/adaptor_config_unittests.cc b/src/lib/yang/tests/adaptor_config_unittests.cc index 91a31daef2..742d822bd9 100644 --- a/src/lib/yang/tests/adaptor_config_unittests.cc +++ b/src/lib/yang/tests/adaptor_config_unittests.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2018-2019 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -62,7 +62,7 @@ void testFile(const std::string& fname, bool v6, ElementPtr& result) { TEST_F(AdaptorConfigTest, loadExamples4) { vector configs = { "advanced.json", - "all-keys.json", + "all-keys-stable.json", "backends.json", "cassandra.json", "classify.json", @@ -92,7 +92,7 @@ TEST_F(AdaptorConfigTest, loadExamples4) { TEST_F(AdaptorConfigTest, loadExamples6) { vector configs = { "advanced.json", - "all-keys.json", + "all-keys-stable.json", "backends.json", "cassandra.json", "classify.json", diff --git a/src/lib/yang/tests/config_unittests.cc b/src/lib/yang/tests/config_unittests.cc index dfde222c93..e15bc0429c 100644 --- a/src/lib/yang/tests/config_unittests.cc +++ b/src/lib/yang/tests/config_unittests.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2018-2019 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -328,7 +328,7 @@ TEST_F(ConfigTest, examples4) { vector examples = { "advanced.json", - "all-keys.json", + "all-keys-stable.json", "backends.json", "cassandra.json", "classify.json", @@ -366,7 +366,7 @@ TEST_F(ConfigTest, examples6) { vector examples = { "advanced.json", - "all-keys.json", + "all-keys-stable.json", "backends.json", "cassandra.json", "classify.json",