From: Francis Dupont Date: Tue, 18 Apr 2017 06:00:00 +0000 (+0200) Subject: [master] Finishing merge of trac4501 (misc unit tests) X-Git-Tag: trac5087_base~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=33235f0d97dfed3059983f679143a07e23cb94fd;p=thirdparty%2Fkea.git [master] Finishing merge of trac4501 (misc unit tests) --- 33235f0d97dfed3059983f679143a07e23cb94fd diff --cc doc/examples/kea6/multiple-options.json index 6080ef15e4,45b249dd7e..e7932b8013 --- a/doc/examples/kea6/multiple-options.json +++ b/doc/examples/kea6/multiple-options.json @@@ -51,31 -51,6 +51,31 @@@ { "code": 12, "data": "2001:db8:1:0:ff00::1" + }, + { + // String options that have a comma in their values need to have + // it escaped (i.e. each comma is predeced by two backslashes). + // That's because commas are reserved for separating fields in + // compound options. At the same time, we need to be conformant + // with JSON spec, that does not allow "\,". Therefore the + // slightly uncommon double backslashes notation is needed. + "name": "new-posix-timezone", + "data": "EST5EDT4\\,M3.2.0/02:00\\,M11.1.0/02:00" + + // Legal JSON escapes are \ followed by "\/bfnrt character + // or \u followed by 4 hexa-decimal numbers (currently Kea + // supports only \u0000 to \u00ff code points). + // CSV processing translates '\\' into '\' and '\,' into ',' + // only so for instance '\x' is translated into '\x'. But + // as it works on a JSON string value each of these '\' + // characters must be doubled on JSON input. + }, + { + // A few options are encoded in (length, string) tuples - // which can be defined using only strings as the CSV - // processing computes lengths. ++ // which can be defined using only strings as the CSV ++ // processing computes lengths. + "name": "bootfile-param", + "data": "root=/dev/sda2, quiet, splash" } ], "pools": [ diff --cc doc/examples/kea6/reservations.json index 73fbc4b2e2,5f90a5a2d3..0b30d637ae --- a/doc/examples/kea6/reservations.json +++ b/doc/examples/kea6/reservations.json @@@ -41,105 -41,91 +41,105 @@@ { "subnet": "2001:db8:1::/48", - "pools": [ { "pool": "2001:db8:1::/80" } ], + "pools": [ { "pool": "2001:db8:1::/120" } ], "pd-pools": [ - { - "prefix": "2001:db8:1:8000::", - "prefix-len": 56, - "delegated-len": 64 - } + { + "prefix": "2001:db8:1:8000::", + "prefix-len": 56, + "delegated-len": 64 + } ], "interface": "ethX", -# Host reservations. Define several reservations, note that -# they are all within the range of the pool of the dynamically -# allocated address. The server will exclude the addresses from this -# pool and only assign them to the client which has a reservation for -# them. + "reservation-mode": "out-of-pool", + +// Host reservations. Define several reservations, note that +// they are all within the range of the pool of the dynamically +// allocated address. The server will exclude the addresses from this +// pool and only assign them to the client which has a reservation for +// them. "reservations": [ -# This is a simple host reservation. The host with DUID matching -# the specified value will get an address of 2001:db8:1::100. +// This is a simple host reservation. The host with DUID matching +// the specified value will get an address of 2001:db8:1::100. - { - "duid": "01:02:03:04:05:0A:0B:0C:0D:0E", - "ip-addresses": [ "2001:db8:1::100" ] - }, + { + "duid": "01:02:03:04:05:0A:0B:0C:0D:0E", + "ip-addresses": [ "2001:db8:1::100" ] + }, -# This is similar to the previous one, but this time the reservation is done -# based on hardware/MAC address. The server will do its best to extract -# the hardware/MAC address from received packets (see 'mac-sources' directive -# for details). This particular reservation also specifies two extra options -# to be available for this client. If there are options with the same code -# specified in a global, subnet or class scope, the values defined at host level -# take precedence. +// This is similar to the previous one, but this time the reservation is done +// based on hardware/MAC address. The server will do its best to extract +// the hardware/MAC address from received packets (see 'mac-sources' directive +// for details). This particular reservation also specifies two extra options +// to be available for this client. If there are options with the same code +// specified in a global, subnet or class scope, the values defined at host level +// take precedence. - { - "hw-address": "00:01:02:03:04:05", - "ip-addresses": [ "2001:db8:1::101" ], - "option-data": [ - { - "name": "dns-servers", - "data": "3000:1::234" - }, - { - "name": "nis-servers", - "data": "3000:1::234" - }], - "client-classes": [ "special_snowflake", "office" ] - }, + { + "hw-address": "00:01:02:03:04:05", + "ip-addresses": [ "2001:db8:1::101" ], + "option-data": [ + { + "name": "dns-servers", + "data": "3000:1::234" + }, + { + "name": "nis-servers", + "data": "3000:1::234" + }], + "client-classes": [ "special_snowflake", "office" ] + }, -# This is a bit more advanced reservation. The client with the specified -# DUID will get a reserved address, a reserved prefix and a hostname. -# This reservation is for an address that it not within the dynamic pool. -# Finally, this reservation features vendor specific options for CableLabs, -# which happen to use enterprise-id 4491. Those particular values will -# be returned only to the client that has a DUID matching this reservation. +// This is a bit more advanced reservation. The client with the specified +// DUID will get a reserved address, a reserved prefix and a hostname. +// This reservation is for an address that it not within the dynamic pool. +// Finally, this reservation features vendor specific options for CableLabs, +// which happen to use enterprise-id 4491. Those particular values will +// be returned only to the client that has a DUID matching this reservation. - { - "duid": "01:02:03:04:05:06:07:08:09:0A", - "ip-addresses": [ "2001:db8:1:cafe::1" ], - "prefixes": [ "2001:db8:2:abcd::/64" ], - "hostname": "foo.example.com", - "option-data": [ { - "name": "vendor-opts", - "data": "4491" - }, - { - "name": "tftp-servers", - "space": "vendor-4491", - "data": "3000:1::234" - } ] + { + "duid": "01:02:03:04:05:06:07:08:09:0A", + "ip-addresses": [ "2001:db8:1:cafe::1" ], + "prefixes": [ "2001:db8:2:abcd::/64" ], + "hostname": "foo.example.com", + "option-data": [ { + "name": "vendor-opts", + "data": "4491" + }, + { + "name": "tftp-servers", + "space": "vendor-4491", + "data": "3000:1::234" + } ] - }, - } ++ }, +// This reservation is using flexible identifier. Instead of relying on specific +// field, sysadmin can define an expression similar to what is used for client +// classification, e.g. substring(relay[0].option[17],0,6). Then, based on the +// value of that expression for incoming packet, the reservation is matched. +// Expression can be specified either as hex or plain text using single +// quotes. +// Note: flexible identifier requires flex_id hook library to be loaded to work. - { - "flex-id": "'somevalue'", - "ip-addresses": [ "2001:db8:1:cafe::2" ] - } ++ { ++ "flex-id": "'somevalue'", ++ "ip-addresses": [ "2001:db8:1:cafe::2" ] ++ } + ] } ] }, -# The following configures logging. It assumes that messages with at least -# informational level (info, warn, error and fatal) should be logged to stdout. +// The following configures logging. It assumes that messages with at least +// informational level (info, warn, error and fatal) should be logged to stdout. "Logging": { "loggers": [ - { - "name": "kea-dhcp6", - "output_options": [ - { - "output": "stdout" - } - ], - "debuglevel": 0, - "severity": "INFO" - } + { + "name": "kea-dhcp6", + "output_options": [ + { + "output": "stdout" + } + ], + "debuglevel": 0, + "severity": "INFO" + } ] }