summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRazvan Becheriu <razvan@isc.org>2023-05-11 12:13:21 +0200
committerRazvan Becheriu <razvan@isc.org>2023-05-11 13:01:29 +0200
commitd08426141994dda8eb0d36683d6c343295f8fcc4 (patch)
tree600b8bd7d8788508d3400d06c86f317a8cea9b22
parent[#2827] reverted src/share/api and updated script (diff)
downloadkea-d08426141994dda8eb0d36683d6c343295f8fcc4.tar.xz
kea-d08426141994dda8eb0d36683d6c343295f8fcc4.zip
[#2827] addressed comments
-rw-r--r--doc/sphinx/arm/dhcp4-srv.rst156
-rw-r--r--doc/sphinx/arm/dhcp6-srv.rst41
-rwxr-xr-xtools/check-for-json-errors-in-doc.sh38
3 files changed, 152 insertions, 83 deletions
diff --git a/doc/sphinx/arm/dhcp4-srv.rst b/doc/sphinx/arm/dhcp4-srv.rst
index 9213236b7b..30afb478ea 100644
--- a/doc/sphinx/arm/dhcp4-srv.rst
+++ b/doc/sphinx/arm/dhcp4-srv.rst
@@ -3012,13 +3012,15 @@ configuration looks like this:
"subnet4": [
{
"subnet": "192.0.2.0/24",
- "option-data": [ {
+ "option-data": [
+ {
"name": "domain-name-servers",
"code": 6,
"data": "192.0.2.200,192.0.2.201",
"csv-format": true,
"space": "dhcp4"
- } ]
+ }
+ ]
}
]
}
@@ -4176,23 +4178,29 @@ ISC tested the following configuration:
"valid-lifetime": 4000,
- "subnet4": [ {
+ "subnet4": [
+ {
"subnet": "10.10.10.0/24",
"4o6-interface": "eno33554984",
"4o6-subnet": "2001:db8:1:1::/64",
"pools": [ { "pool": "10.10.10.100 - 10.10.10.199" } ]
- } ],
+ }
+ ],
"dhcp4o6-port": 6767,
- "loggers": [ {
+ "loggers": [
+ {
"name": "kea-dhcp4",
- "output_options": [ {
+ "output_options": [
+ {
"output": "/tmp/kea-dhcp4.log"
- } ],
+ }
+ ],
"severity": "DEBUG",
"debuglevel": 0
- } ]
+ }
+ ]
}
}
@@ -4821,7 +4829,8 @@ configuration:
.. code-block:: json
{
- "subnet4": [ {
+ "subnet4": [
+ {
"subnet": "10.0.0.0/24",
"pools": [ { "pool": "10.0.0.10-10.0.0.100" } ],
"ddns-qualifying-suffix": "example.isc.org.",
@@ -4831,7 +4840,8 @@ configuration:
"hostname": "alice-laptop"
}
]
- }],
+ }
+ ],
"dhcp-ddns": {
"enable-updates": true
}
@@ -4848,7 +4858,8 @@ different clients with different domain names:
.. code-block:: json
{
- "subnet4": [ {
+ "subnet4": [
+ {
"subnet": "10.0.0.0/24",
"pools": [ { "pool": "10.0.0.10-10.0.0.100" } ],
"reservations": [
@@ -4860,9 +4871,9 @@ different clients with different domain names:
"hw-address": "12:34:56:78:99:AA",
"hostname": "mark-desktop.example.org."
}
-
]
- }],
+ }
+ ],
"dhcp-ddns": {
"enable-updates": true
}
@@ -4888,7 +4899,8 @@ example demonstrates how standard options can be defined:
::
{
- "subnet4": [ {
+ "subnet4": [
+ {
"reservations": [
{
"hw-address": "aa:bb:cc:dd:ee:ff",
@@ -4901,9 +4913,12 @@ example demonstrates how standard options can be defined:
{
"name": "log-servers",
"data": "10.1.1.200,10.1.1.201"
- } ]
- } ]
- } ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
}
Vendor-specific options can be reserved in a similar manner:
@@ -4911,7 +4926,8 @@ Vendor-specific options can be reserved in a similar manner:
::
{
- "subnet4": [ {
+ "subnet4": [
+ {
"reservations": [
{
"hw-address": "aa:bb:cc:dd:ee:ff",
@@ -4925,9 +4941,12 @@ Vendor-specific options can be reserved in a similar manner:
"name": "tftp-servers",
"space": "vendor-4491",
"data": "10.1.1.202,10.1.1.203"
- } ]
- } ]
- } ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
}
Options defined at the host level have the highest priority. In other words,
@@ -4951,15 +4970,18 @@ message fields:
::
{
- "subnet4": [ {
+ "subnet4": [
+ {
"reservations": [
{
"hw-address": "aa:bb:cc:dd:ee:ff",
"next-server": "10.1.1.2",
"server-hostname": "server-hostname.example.org",
"boot-file-name": "/tmp/bootfile.efi"
- } ]
- } ]
+ }
+ ]
+ }
+ ]
}
Note that those parameters can be specified in combination with other
@@ -5005,7 +5027,8 @@ to them.
]
}
],
- "subnet4": [ {
+ "subnet4": [
+ {
"subnet": "10.0.0.0/24",
"pools": [ { "pool": "10.0.0.10-10.0.0.100" } ],
"reservations": [
@@ -5016,7 +5039,8 @@ to them.
}
]
- } ]
+ }
+ ]
}
In some cases the host reservations can be used in conjunction with client
@@ -5520,7 +5544,8 @@ following can be used:
}
],
"valid-lifetime": 600,
- "subnet4": [ {
+ "subnet4": [
+ {
"subnet": "10.0.0.0/24",
# It is replaced by the "reservations-global",
# "reservations-in-subnet", and "reservations-out-of-pool"
@@ -5535,7 +5560,8 @@ following can be used:
# is false.
# "reservations-out-of-pool": false,
"pools": [ { "pool": "10.0.0.10-10.0.0.100" } ]
- } ]
+ }
+ ]
}
When using database backends, the global host reservations are
@@ -5580,10 +5606,12 @@ within the subnet as follows:
"subnet4": [
{
"subnet": "192.0.2.0/24",
- "reservations": [{
- "hw-address": "aa:bb:cc:dd:ee:fe",
- "client-classes": [ "reserved_class" ]
- }],
+ "reservations": [
+ {
+ "hw-address": "aa:bb:cc:dd:ee:fe",
+ "client-classes": [ "reserved_class" ]
+ }
+ ],
"pools": [
{
"pool": "192.0.2.10-192.0.2.20",
@@ -5632,10 +5660,12 @@ following example:
"test": "not member('reserved_class')"
}
],
- "reservations": [{
- "hw-address": "aa:bb:cc:dd:ee:fe",
- "client-classes": [ "reserved_class" ]
- }],
+ "reservations": [
+ {
+ "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 look up global reservations.
@@ -5647,7 +5677,8 @@ following example:
# is false, but if specified, it is inherited by "shared-networks"
# and "subnet4" levels.
# "reservations-out-of-pool": false,
- "shared-networks": [{
+ "shared-networks": [
+ {
"subnet4": [
{
"subnet": "192.0.2.0/24",
@@ -5668,7 +5699,8 @@ following example:
]
}
]
- }]
+ }
+ ]
}
This is similar to the example described in
@@ -5952,7 +5984,8 @@ introduced:
{
"Dhcp4": {
- "shared-networks": [ {
+ "shared-networks": [
+ {
# Name of the shared network. It may be an arbitrary string
# and it must be unique among all shared networks.
"name": "my-secret-lair-level-1",
@@ -5974,7 +6007,8 @@ introduced:
"pools": [ { "pool": "192.0.2.100 - 192.0.2.199" } ]
}
]
- } ],
+ }
+ ],
# end of shared-networks
# It is likely that in the network there will be a mix of regular,
@@ -6026,10 +6060,12 @@ then override its value in the subnet scope. For example:
# This option is made available to all subnets in this shared
# network.
- "option-data": [ {
+ "option-data": [
+ {
"name": "log-servers",
"data": "1.2.3.4"
- } ],
+ }
+ ],
"subnet4": [
{
@@ -7266,13 +7302,16 @@ of LED devices could be configured in the following way:
::
"Dhcp4": {
- "subnet4": [{
+ "subnet4": [
+ {
"subnet": "192.0.2.0/24",
- "pools": [{
+ "pools": [
+ {
"pool": "192.0.2.10 - 192.0.2.20",
# This is pool specific user context
"user-context": { "color": "red" }
- } ],
+ }
+ ],
# This is a subnet-specific user context. Any type
# of information can be entered here as long as it is valid JSON.
@@ -7284,7 +7323,8 @@ of LED devices could be configured in the following way:
"devices-registered": 42,
"billing": false
}
- } ]
+ }
+ ]
}
Kea does not interpret or use the user-context information; it simply
@@ -7587,21 +7627,25 @@ database:
"Dhcp4": {
"server-tag": "my DHCPv4 server",
"config-control": {
- "config-databases": [{
+ "config-databases": [
+ {
"type": "mysql",
"name": "kea",
"user": "kea",
"password": "kea",
"host": "192.0.2.1",
"port": 3302
- }],
+ }
+ ],
"config-fetch-wait-time": 20
},
- "hooks-libraries": [{
+ "hooks-libraries": [
+ {
"library": "/usr/local/lib/kea/hooks/libdhcp_mysql_cb.so"
}, {
"library": "/usr/local/lib/kea/hooks/libdhcp_cb_cmds.so"
- }]
+ }
+ ]
}
}
@@ -7624,21 +7668,25 @@ The following snippet illustrates the use of a PostgreSQL database:
"Dhcp4": {
"server-tag": "my DHCPv4 server",
"config-control": {
- "config-databases": [{
+ "config-databases": [
+ {
"type": "postgresql",
"name": "kea",
"user": "kea",
"password": "kea",
"host": "192.0.2.1",
"port": 5432
- }],
+ }
+ ],
"config-fetch-wait-time": 20
},
- "hooks-libraries": [{
+ "hooks-libraries": [
+ {
"library": "/usr/local/lib/kea/hooks/libdhcp_pgsql_cb.so"
}, {
"library": "/usr/local/lib/kea/hooks/libdhcp_cb_cmds.so"
- }]
+ }
+ ]
}
}
diff --git a/doc/sphinx/arm/dhcp6-srv.rst b/doc/sphinx/arm/dhcp6-srv.rst
index 06d97078d5..06197d469b 100644
--- a/doc/sphinx/arm/dhcp6-srv.rst
+++ b/doc/sphinx/arm/dhcp6-srv.rst
@@ -3666,7 +3666,8 @@ pretty-printed for clarity):
"options": "0x00250006010203040506003500086464646464646464",
"remote-id": "010203040506",
"relay-id": "6464646464646464"
- }]
+ }
+ ]
}
}
@@ -4814,10 +4815,12 @@ within the subnet as follows:
"subnet6": [
{
"subnet": "2001:db8:1::/64",
- "reservations": [{
- "hw-address": "aa:bb:cc:dd:ee:fe",
- "client-classes": [ "reserved_class" ]
- }],
+ "reservations": [
+ {
+ "hw-address": "aa:bb:cc:dd:ee:fe",
+ "client-classes": [ "reserved_class" ]
+ }
+ ],
"pools": [
{
"pool": "2001:db8:1::10-2001:db8:1::20",
@@ -4866,10 +4869,12 @@ following example:
"test": "not member('reserved_class')"
}
],
- "reservations": [{
- "hw-address": "aa:bb:cc:dd:ee:fe",
- "client-classes": [ "reserved_class" ]
- }],
+ "reservations": [
+ {
+ "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 look up global reservations.
@@ -4881,7 +4886,8 @@ following example:
# is false, but if specified, it is inherited by "shared-networks"
# and "subnet6" levels.
# "reservations-out-of-pool": false,
- "shared-networks": [{
+ "shared-networks": [
+ {
"subnet6": [
{
"subnet": "2001:db8:1::/64",
@@ -4902,7 +4908,8 @@ following example:
]
}
]
- }]
+ }
+ ]
}
This is similar to the example described in the
@@ -5184,7 +5191,8 @@ introduced:
{
"Dhcp6": {
- "shared-networks": [ {
+ "shared-networks": [
+ {
# Name of the shared network. It may be an arbitrary string
# and it must be unique among all shared networks.
"name": "ipv6-lab-1",
@@ -5202,14 +5210,15 @@ introduced:
"subnet6": [
{
"subnet": "2001:db8::/48",
- "pools": [{ "pool": "2001:db8::1 - 2001:db8::ffff" }]
+ "pools": [ { "pool": "2001:db8::1 - 2001:db8::ffff" } ]
},
{
"subnet": "3ffe:ffe::/64",
- "pools": [{ "pool": "3ffe:ffe::/64" }]
+ "pools": [ { "pool": "3ffe:ffe::/64" } ]
}
]
- } ],
+ }
+ ],
# end of shared-networks
# It is likely that in the network there will be a mix of regular,
@@ -5220,7 +5229,7 @@ introduced:
"subnet6": [
{
"subnet": "2001:db9::/48",
- "pools": [{ "pool": "2001:db9::/64" }],
+ "pools": [ { "pool": "2001:db9::/64" } ],
"relay": {
"ip-addresses": [ "2001:db8:1:2::1" ]
}
diff --git a/tools/check-for-json-errors-in-doc.sh b/tools/check-for-json-errors-in-doc.sh
index 91704b877d..49f40508c8 100755
--- a/tools/check-for-json-errors-in-doc.sh
+++ b/tools/check-for-json-errors-in-doc.sh
@@ -1,34 +1,46 @@
#!/bin/bash
-work_file=`mktemp`
-for file in `find ./ | grep -v "\.git" | grep -v "_build" | grep -v "\/man\/" | grep "\.rst\|\.json" | sort`; do
+# Change directory to the root of the repository.
+script_path=$(cd "$(dirname "${0}")" && pwd)
+cd "${script_path}/.."
+# Parse parameters.
+if test ${#} -gt 0; then
+ files="${*}"
+else
+ files='doc src'
+fi
+
+# Get the files.
+files=$(find ${files} -type f \( -name '*.rst' -or -name '*.json' \) -and -not -path '/_build/*' -and -not -path '/man/*' | sort)
+work_file=$(mktemp)
+for file in $files; do
json=0
comment=0
line_num=0
echo "processing: $file"
- while IFS= read line; do
+ while IFS= read -r line; do
line_num=$((line_num+1))
- if [ $comment -eq 0 -a $json -eq 0 -a `echo "$line" | grep -e "^[A-Za-z]+\|^\s*\\\`" | wc -l` -eq 1 ]; then
+ if [ $comment -eq 0 -a $json -eq 0 -a $(echo "$line" | grep "^[A-Za-z]+\|^\s*\`" | wc -l) -eq 1 ]; then
# ignore line if it starts with 'A-Za-z' or spaces followed by '`'
continue
- elif [ $comment -eq 0 -a `echo "$line" | grep -e "\/\*" | grep -v -e "\*\/" | wc -l` -eq 1 ]; then
+ elif [ $comment -eq 0 -a $(echo "$line" | grep "/\*" | grep -v "\*/" | wc -l) -eq 1 ]; then
# if the line contains /* and it does not contain */ on the same line
comment=1
echo "" >> $work_file
continue
- elif [ $comment -eq 1 -a `echo "$line" | grep "\*\/" | wc -l` -eq 1 ]; then
+ elif [ $comment -eq 1 -a $(echo "$line" | grep "\*/" | wc -l) -eq 1 ]; then
# if the line contains */
comment=0
echo "" >> $work_file
continue
- elif [ $comment -eq 0 -a $json -eq 0 -a `echo "$line" | grep "^\s*{\|^\s*\".*{" | grep -v "}" | grep -v "key\|pre" | wc -l` -eq 1 ]; then
- # if this is not a commend and the line starts with spaces followed by '{' or by '"' followed by "{"
+ elif [ $comment -eq 0 -a $json -eq 0 -a $(echo "$line" | grep "^\s*{\|^\s*\".*{" | grep -v "}" | grep -v "key\|pre" | wc -l) -eq 1 ]; then
+ # if this is not a comment and the line starts with spaces followed by '{' or by '"' followed by "{"
# ignore dns config:
# key "key.four.example.com." {
# algorithm hmac-sha224;
# secret "bZEG7Ow8OgAUPfLWV3aAUQ==";
# };
# ignore detailed html:
- # .. raw:: html
+ # .. raw:: html
# <details><summary>Expand here!</summary>
# <pre>{
# ...
@@ -36,9 +48,9 @@ for file in `find ./ | grep -v "\.git" | grep -v "_build" | grep -v "\/man\/" |
# </details><br>
json=1
# ignore any map name before top level map
- line=`echo "$line" | sed "s/.*{/{/g"`
+ line=$(echo "$line" | sed "s/.*{/{/g")
echo "" > $work_file
- elif [ $comment -eq 0 -a $json -eq 1 -a `echo "$line" | grep -e "^\s*[A-Za-z]\|^\s*\\\`" | wc -l` -eq 1 ]; then
+ elif [ $comment -eq 0 -a $json -eq 1 -a $(echo "$line" | grep "^\s*[A-Za-z]\|^\s*\`" | wc -l) -eq 1 ]; then
# if the line is not a comment and the line starts with spaces followed by 'A-Za-z' or followed by "`" and the parser is processing a json structure
json=0
cat $work_file | jq . > /dev/null
@@ -51,7 +63,7 @@ for file in `find ./ | grep -v "\.git" | grep -v "_build" | grep -v "\/man\/" |
fi
fi
if [ $comment -eq 0 -a $json -eq 1 ]; then
- if [ `echo "$line" | grep -e "^\s*\.\.\s" | wc -l` -eq 1 ]; then
+ if [ $(echo "$line" | grep "^\s*\.\.\s" | wc -l) -eq 1 ]; then
echo "" >> $work_file
else
# if file is .json the following replace in line are done:
@@ -65,7 +77,7 @@ for file in `find ./ | grep -v "\.git" | grep -v "_build" | grep -v "\/man\/" |
# 8. replace ', ... ' with ' '
# 9. replace ' <DATA>' with ' "placeholder": "value"'
# 10. replace ' <DATA>' with ' "placeholder"'
- if [ `echo "$file" | grep "\.json" | wc -l` -eq 0 ]; then
+ if [ $(echo "$file" | grep "\.json" | wc -l) -eq 0 ]; then
echo "$line" | cut -d "#" -f 1 | sed "s/\/\/ .*//g" | sed "s/<?.*?>//g" | sed "s/\[ <\([-A-Za-z0-9 ]*\)> \]/\[ \"<\1>\" \]/g" | sed "s/ <\(.*\)>:/ \"<\1>\":/g" | sed "s/: <\(.*\)>/: \"<\1>\"/g" | sed "s/ \.\.\./ \"placeholder\": \"value\"/g" | sed "s/, \.\.\. / /g" | sed "s/ <\(.*\)>/ \"placeholder\": \"value\"/g" | sed "s/ <\(.*\)>/ \"placeholder\"/g" >> $work_file
else
# if file is .rst the following replace in line are done: