# Kea Configuration File Syntax (BNF)

Kea consists of several daemons, each with its own configuration syntax. The following sections provide a complete syntax of all possible parameters, written in Backus-Naur Form (BNF). See this Wikipedia article on BNF for more information.

## BNF Grammar for DHCPv4

This grammar is generated from `dhcp4_parser.yy`. See The DHCPv4 Server for more details.

       1  Grammar
       2
       3  $accept ::= start EOF
       4
       5  start ::= TOPLEVEL_JSON sub_json
       6
       7  start ::= TOPLEVEL_DHCP4 syntax_map
       8
       9  start ::= SUB_DHCP4 sub_dhcp4
      10
      11  start ::= SUB_INTERFACES4 sub_interfaces4
      12
      13  start ::= SUB_SUBNET4 sub_subnet4
      14
      15  start ::= SUB_POOL4 sub_pool4
      16
      17  start ::= SUB_RESERVATION sub_reservation
      18
      19  start ::= SUB_OPTION_DEFS sub_option_def_list
      20
      21  start ::= SUB_OPTION_DEF sub_option_def
      22
      23  start ::= SUB_OPTION_DATA sub_option_data
      24
      25  start ::= SUB_HOOKS_LIBRARY sub_hooks_library
      26
      27  start ::= SUB_DHCP_DDNS sub_dhcp_ddns
      28
      29  start ::= SUB_CONFIG_CONTROL sub_config_control
      30
      31  value ::= INTEGER
      32       | FLOAT
      33       | BOOLEAN
      34       | STRING
      35       | NULL
      36       | map2
      37       | list_generic
      38
      39  sub_json ::= value
      40
      41  map2 ::= "{" map_content "}"
      42
      43  map_value ::= map2
      44
      45  map_content ::=
      46             | not_empty_map
      47
      48  not_empty_map ::= STRING ":" value
      49               | not_empty_map "," STRING ":" value
      50               | not_empty_map ","
      51
      52  list_generic ::= "[" list_content "]"
      53
      54  list_content ::=
      55              | not_empty_list
      56
      57  not_empty_list ::= value
      58                | not_empty_list "," value
      59                | not_empty_list ","
      60
      61  list_strings ::= "[" list_strings_content "]"
      62
      63  list_strings_content ::=
      64                      | not_empty_list_strings
      65
      66  not_empty_list_strings ::= STRING
      67                        | not_empty_list_strings "," STRING
      68                        | not_empty_list_strings ","
      69
      70  unknown_map_entry ::= STRING ":"
      71
      72  syntax_map ::= "{" global_object "}"
      73
      74  global_object ::= "Dhcp4" ":" "{" global_params "}"
      75               | global_object_comma
      76
      77  global_object_comma ::= global_object ","
      78
      79  sub_dhcp4 ::= "{" global_params "}"
      80
      81  global_params ::= global_param
      82               | global_params "," global_param
      83               | global_params ","
      84
      85  global_param ::= valid_lifetime
      86              | min_valid_lifetime
      87              | max_valid_lifetime
      88              | renew_timer
      89              | rebind_timer
      90              | decline_probation_period
      91              | subnet4_list
      92              | shared_networks
      93              | interfaces_config
      94              | lease_database
      95              | hosts_database
      96              | hosts_databases
      97              | host_reservation_identifiers
      98              | client_classes
      99              | option_def_list
     100              | option_data_list
     101              | hooks_libraries
     102              | expired_leases_processing
     103              | dhcp4o6_port
     104              | control_socket
     105              | dhcp_queue_control
     106              | dhcp_ddns
     107              | echo_client_id
     108              | match_client_id
     109              | authoritative
     110              | next_server
     111              | server_hostname
     112              | boot_file_name
     113              | user_context
     114              | comment
     115              | sanity_checks
     116              | reservations
     117              | config_control
     118              | server_tag
     119              | reservation_mode
     120              | reservations_global
     121              | reservations_in_subnet
     122              | reservations_out_of_pool
     123              | calculate_tee_times
     124              | t1_percent
     125              | t2_percent
     126              | cache_threshold
     127              | cache_max_age
     128              | loggers
     129              | hostname_char_set
     130              | hostname_char_replacement
     131              | ddns_send_updates
     132              | ddns_override_no_update
     133              | ddns_override_client_update
     134              | ddns_replace_client_name
     135              | ddns_generated_prefix
     136              | ddns_qualifying_suffix
     137              | ddns_update_on_renew
     138              | ddns_use_conflict_resolution
     139              | ddns_ttl_percent
     140              | store_extended_info
     141              | statistic_default_sample_count
     142              | statistic_default_sample_age
     143              | dhcp_multi_threading
     144              | early_global_reservations_lookup
     145              | ip_reservations_unique
     146              | reservations_lookup_first
     147              | compatibility
     148              | parked_packet_limit
     149              | allocator
     150              | offer_lifetime
     151              | unknown_map_entry
     152
     153  valid_lifetime ::= "valid-lifetime" ":" INTEGER
     154
     155  min_valid_lifetime ::= "min-valid-lifetime" ":" INTEGER
     156
     157  max_valid_lifetime ::= "max-valid-lifetime" ":" INTEGER
     158
     159  renew_timer ::= "renew-timer" ":" INTEGER
     160
     161  rebind_timer ::= "rebind-timer" ":" INTEGER
     162
     163  calculate_tee_times ::= "calculate-tee-times" ":" BOOLEAN
     164
     165  t1_percent ::= "t1-percent" ":" FLOAT
     166
     167  t2_percent ::= "t2-percent" ":" FLOAT
     168
     169  cache_threshold ::= "cache-threshold" ":" FLOAT
     170
     171  cache_max_age ::= "cache-max-age" ":" INTEGER
     172
     173  decline_probation_period ::= "decline-probation-period" ":" INTEGER
     174
     175  server_tag ::= "server-tag" ":" STRING
     176
     177  parked_packet_limit ::= "parked-packet-limit" ":" INTEGER
     178
     179  allocator ::= "allocator" ":" STRING
     180
     181  echo_client_id ::= "echo-client-id" ":" BOOLEAN
     182
     183  match_client_id ::= "match-client-id" ":" BOOLEAN
     184
     185  authoritative ::= "authoritative" ":" BOOLEAN
     186
     187  ddns_send_updates ::= "ddns-send-updates" ":" BOOLEAN
     188
     189  ddns_override_no_update ::= "ddns-override-no-update" ":" BOOLEAN
     190
     191  ddns_override_client_update ::= "ddns-override-client-update" ":" BOOLEAN
     192
     193  ddns_replace_client_name ::= "ddns-replace-client-name" ":" ddns_replace_client_name_value
     194
     195  ddns_replace_client_name_value ::= "when-present"
     196                                | "never"
     197                                | "always"
     198                                | "when-not-present"
     199                                | BOOLEAN
     200
     201  ddns_generated_prefix ::= "ddns-generated-prefix" ":" STRING
     202
     203  ddns_qualifying_suffix ::= "ddns-qualifying-suffix" ":" STRING
     204
     205  ddns_update_on_renew ::= "ddns-update-on-renew" ":" BOOLEAN
     206
     207  ddns_use_conflict_resolution ::= "ddns-use-conflict-resolution" ":" BOOLEAN
     208
     209  ddns_ttl_percent ::= "ddns-ttl-percent" ":" FLOAT
     210
     211  hostname_char_set ::= "hostname-char-set" ":" STRING
     212
     213  hostname_char_replacement ::= "hostname-char-replacement" ":" STRING
     214
     215  store_extended_info ::= "store-extended-info" ":" BOOLEAN
     216
     217  statistic_default_sample_count ::= "statistic-default-sample-count" ":" INTEGER
     218
     219  statistic_default_sample_age ::= "statistic-default-sample-age" ":" INTEGER
     220
     221  early_global_reservations_lookup ::= "early-global-reservations-lookup" ":" BOOLEAN
     222
     223  ip_reservations_unique ::= "ip-reservations-unique" ":" BOOLEAN
     224
     225  reservations_lookup_first ::= "reservations-lookup-first" ":" BOOLEAN
     226
     227  offer_lifetime ::= "offer-lifetime" ":" INTEGER
     228
     229  interfaces_config ::= "interfaces-config" ":" "{" interfaces_config_params "}"
     230
     231  interfaces_config_params ::= interfaces_config_param
     232                          | interfaces_config_params "," interfaces_config_param
     233                          | interfaces_config_params ","
     234
     235  interfaces_config_param ::= interfaces_list
     236                         | dhcp_socket_type
     237                         | outbound_interface
     238                         | re_detect
     239                         | service_sockets_require_all
     240                         | service_sockets_retry_wait_time
     241                         | service_sockets_max_retries
     242                         | user_context
     243                         | comment
     244                         | unknown_map_entry
     245
     246  sub_interfaces4 ::= "{" interfaces_config_params "}"
     247
     248  interfaces_list ::= "interfaces" ":" list_strings
     249
     250  dhcp_socket_type ::= "dhcp-socket-type" ":" socket_type
     251
     252  socket_type ::= "raw"
     253             | "udp"
     254
     255  outbound_interface ::= "outbound-interface" ":" outbound_interface_value
     256
     257  outbound_interface_value ::= "same-as-inbound"
     258                          | "use-routing"
     259
     260  re_detect ::= "re-detect" ":" BOOLEAN
     261
     262  service_sockets_require_all ::= "service-sockets-require-all" ":" BOOLEAN
     263
     264  service_sockets_retry_wait_time ::= "service-sockets-retry-wait-time" ":" INTEGER
     265
     266  service_sockets_max_retries ::= "service-sockets-max-retries" ":" INTEGER
     267
     268  lease_database ::= "lease-database" ":" "{" database_map_params "}"
     269
     270  sanity_checks ::= "sanity-checks" ":" "{" sanity_checks_params "}"
     271
     272  sanity_checks_params ::= sanity_checks_param
     273                      | sanity_checks_params "," sanity_checks_param
     274                      | sanity_checks_params ","
     275
     276  sanity_checks_param ::= lease_checks
     277                     | extended_info_checks
     278
     279  lease_checks ::= "lease-checks" ":" STRING
     280
     281  extended_info_checks ::= "extended-info-checks" ":" STRING
     282
     283  hosts_database ::= "hosts-database" ":" "{" database_map_params "}"
     284
     285  hosts_databases ::= "hosts-databases" ":" "[" database_list "]"
     286
     287  database_list ::=
     288               | not_empty_database_list
     289
     290  not_empty_database_list ::= database
     291                         | not_empty_database_list "," database
     292                         | not_empty_database_list ","
     293
     294  database ::= "{" database_map_params "}"
     295
     296  database_map_params ::= database_map_param
     297                     | database_map_params "," database_map_param
     298                     | database_map_params ","
     299
     300  database_map_param ::= database_type
     301                    | user
     302                    | password
     303                    | host
     304                    | port
     305                    | name
     306                    | persist
     307                    | lfc_interval
     308                    | readonly
     309                    | connect_timeout
     310                    | read_timeout
     311                    | write_timeout
     312                    | tcp_user_timeout
     313                    | max_reconnect_tries
     314                    | reconnect_wait_time
     315                    | on_fail
     316                    | max_row_errors
     317                    | trust_anchor
     318                    | cert_file
     319                    | key_file
     320                    | cipher_list
     321                    | unknown_map_entry
     322
     323  database_type ::= "type" ":" db_type
     324
     325  db_type ::= "memfile"
     326         | "mysql"
     327         | "postgresql"
     328
     329  user ::= "user" ":" STRING
     330
     331  password ::= "password" ":" STRING
     332
     333  host ::= "host" ":" STRING
     334
     335  port ::= "port" ":" INTEGER
     336
     337  name ::= "name" ":" STRING
     338
     339  persist ::= "persist" ":" BOOLEAN
     340
     341  lfc_interval ::= "lfc-interval" ":" INTEGER
     342
     343  readonly ::= "readonly" ":" BOOLEAN
     344
     345  connect_timeout ::= "connect-timeout" ":" INTEGER
     346
     347  read_timeout ::= "read-timeout" ":" INTEGER
     348
     349  write_timeout ::= "write-timeout" ":" INTEGER
     350
     351  tcp_user_timeout ::= "tcp-user-timeout" ":" INTEGER
     352
     353  max_reconnect_tries ::= "max-reconnect-tries" ":" INTEGER
     354
     355  reconnect_wait_time ::= "reconnect-wait-time" ":" INTEGER
     356
     357  on_fail ::= "on-fail" ":" on_fail_mode
     358
     359  on_fail_mode ::= "stop-retry-exit"
     360              | "serve-retry-exit"
     361              | "serve-retry-continue"
     362
     363  max_row_errors ::= "max-row-errors" ":" INTEGER
     364
     365  trust_anchor ::= "trust-anchor" ":" STRING
     366
     367  cert_file ::= "cert-file" ":" STRING
     368
     369  key_file ::= "key-file" ":" STRING
     370
     371  cipher_list ::= "cipher-list" ":" STRING
     372
     373  host_reservation_identifiers ::= "host-reservation-identifiers" ":" "[" host_reservation_identifiers_list "]"
     374
     375  host_reservation_identifiers_list ::= host_reservation_identifier
     376                                   | host_reservation_identifiers_list "," host_reservation_identifier
     377                                   | host_reservation_identifiers_list ","
     378
     379  host_reservation_identifier ::= duid_id
     380                             | hw_address_id
     381                             | circuit_id
     382                             | client_id
     383                             | flex_id
     384
     385  duid_id ::= "duid"
     386
     387  hw_address_id ::= "hw-address"
     388
     389  circuit_id ::= "circuit-id"
     390
     391  client_id ::= "client-id"
     392
     393  flex_id ::= "flex-id"
     394
     395  dhcp_multi_threading ::= "multi-threading" ":" "{" multi_threading_params "}"
     396
     397  multi_threading_params ::= multi_threading_param
     398                        | multi_threading_params "," multi_threading_param
     399                        | multi_threading_params ","
     400
     401  multi_threading_param ::= enable_multi_threading
     402                       | thread_pool_size
     403                       | packet_queue_size
     404                       | user_context
     405                       | comment
     406                       | unknown_map_entry
     407
     408  enable_multi_threading ::= "enable-multi-threading" ":" BOOLEAN
     409
     410  thread_pool_size ::= "thread-pool-size" ":" INTEGER
     411
     412  packet_queue_size ::= "packet-queue-size" ":" INTEGER
     413
     414  hooks_libraries ::= "hooks-libraries" ":" "[" hooks_libraries_list "]"
     415
     416  hooks_libraries_list ::=
     417                      | not_empty_hooks_libraries_list
     418
     419  not_empty_hooks_libraries_list ::= hooks_library
     420                                | not_empty_hooks_libraries_list "," hooks_library
     421                                | not_empty_hooks_libraries_list ","
     422
     423  hooks_library ::= "{" hooks_params "}"
     424
     425  sub_hooks_library ::= "{" hooks_params "}"
     426
     427  hooks_params ::= hooks_param
     428              | hooks_params "," hooks_param
     429              | hooks_params ","
     430              | unknown_map_entry
     431
     432  hooks_param ::= library
     433             | parameters
     434
     435  library ::= "library" ":" STRING
     436
     437  parameters ::= "parameters" ":" map_value
     438
     439  expired_leases_processing ::= "expired-leases-processing" ":" "{" expired_leases_params "}"
     440
     441  expired_leases_params ::= expired_leases_param
     442                       | expired_leases_params "," expired_leases_param
     443                       | expired_leases_params ","
     444
     445  expired_leases_param ::= reclaim_timer_wait_time
     446                      | flush_reclaimed_timer_wait_time
     447                      | hold_reclaimed_time
     448                      | max_reclaim_leases
     449                      | max_reclaim_time
     450                      | unwarned_reclaim_cycles
     451
     452  reclaim_timer_wait_time ::= "reclaim-timer-wait-time" ":" INTEGER
     453
     454  flush_reclaimed_timer_wait_time ::= "flush-reclaimed-timer-wait-time" ":" INTEGER
     455
     456  hold_reclaimed_time ::= "hold-reclaimed-time" ":" INTEGER
     457
     458  max_reclaim_leases ::= "max-reclaim-leases" ":" INTEGER
     459
     460  max_reclaim_time ::= "max-reclaim-time" ":" INTEGER
     461
     462  unwarned_reclaim_cycles ::= "unwarned-reclaim-cycles" ":" INTEGER
     463
     464  subnet4_list ::= "subnet4" ":" "[" subnet4_list_content "]"
     465
     466  subnet4_list_content ::=
     467                      | not_empty_subnet4_list
     468
     469  not_empty_subnet4_list ::= subnet4
     470                        | not_empty_subnet4_list "," subnet4
     471                        | not_empty_subnet4_list ","
     472
     473  subnet4 ::= "{" subnet4_params "}"
     474
     475  sub_subnet4 ::= "{" subnet4_params "}"
     476
     477  subnet4_params ::= subnet4_param
     478                | subnet4_params "," subnet4_param
     479                | subnet4_params ","
     480
     481  subnet4_param ::= valid_lifetime
     482               | min_valid_lifetime
     483               | max_valid_lifetime
     484               | renew_timer
     485               | rebind_timer
     486               | option_data_list
     487               | pools_list
     488               | subnet
     489               | interface
     490               | id
     491               | client_class
     492               | require_client_classes
     493               | reservations
     494               | reservation_mode
     495               | reservations_global
     496               | reservations_in_subnet
     497               | reservations_out_of_pool
     498               | relay
     499               | match_client_id
     500               | authoritative
     501               | next_server
     502               | server_hostname
     503               | boot_file_name
     504               | subnet_4o6_interface
     505               | subnet_4o6_interface_id
     506               | subnet_4o6_subnet
     507               | user_context
     508               | comment
     509               | calculate_tee_times
     510               | t1_percent
     511               | t2_percent
     512               | cache_threshold
     513               | cache_max_age
     514               | ddns_send_updates
     515               | ddns_override_no_update
     516               | ddns_override_client_update
     517               | ddns_replace_client_name
     518               | ddns_generated_prefix
     519               | ddns_qualifying_suffix
     520               | ddns_update_on_renew
     521               | ddns_use_conflict_resolution
     522               | ddns_ttl_percent
     523               | hostname_char_set
     524               | hostname_char_replacement
     525               | store_extended_info
     526               | allocator
     527               | offer_lifetime
     528               | unknown_map_entry
     529
     530  subnet ::= "subnet" ":" STRING
     531
     532  subnet_4o6_interface ::= "4o6-interface" ":" STRING
     533
     534  subnet_4o6_interface_id ::= "4o6-interface-id" ":" STRING
     535
     536  subnet_4o6_subnet ::= "4o6-subnet" ":" STRING
     537
     538  interface ::= "interface" ":" STRING
     539
     540  client_class ::= "client-class" ":" STRING
     541
     542  require_client_classes ::= "require-client-classes" ":" list_strings
     543
     544  reservations_global ::= "reservations-global" ":" BOOLEAN
     545
     546  reservations_in_subnet ::= "reservations-in-subnet" ":" BOOLEAN
     547
     548  reservations_out_of_pool ::= "reservations-out-of-pool" ":" BOOLEAN
     549
     550  reservation_mode ::= "reservation-mode" ":" hr_mode
     551
     552  hr_mode ::= "disabled"
     553         | "out-of-pool"
     554         | "global"
     555         | "all"
     556
     557  id ::= "id" ":" INTEGER
     558
     559  shared_networks ::= "shared-networks" ":" "[" shared_networks_content "]"
     560
     561  shared_networks_content ::=
     562                         | shared_networks_list
     563
     564  shared_networks_list ::= shared_network
     565                      | shared_networks_list "," shared_network
     566                      | shared_networks_list ","
     567
     568  shared_network ::= "{" shared_network_params "}"
     569
     570  shared_network_params ::= shared_network_param
     571                       | shared_network_params "," shared_network_param
     572                       | shared_network_params ","
     573
     574  shared_network_param ::= name
     575                      | subnet4_list
     576                      | interface
     577                      | renew_timer
     578                      | rebind_timer
     579                      | option_data_list
     580                      | match_client_id
     581                      | authoritative
     582                      | next_server
     583                      | server_hostname
     584                      | boot_file_name
     585                      | relay
     586                      | reservation_mode
     587                      | reservations_global
     588                      | reservations_in_subnet
     589                      | reservations_out_of_pool
     590                      | client_class
     591                      | require_client_classes
     592                      | valid_lifetime
     593                      | min_valid_lifetime
     594                      | max_valid_lifetime
     595                      | user_context
     596                      | comment
     597                      | calculate_tee_times
     598                      | t1_percent
     599                      | t2_percent
     600                      | cache_threshold
     601                      | cache_max_age
     602                      | ddns_send_updates
     603                      | ddns_override_no_update
     604                      | ddns_override_client_update
     605                      | ddns_replace_client_name
     606                      | ddns_generated_prefix
     607                      | ddns_qualifying_suffix
     608                      | ddns_update_on_renew
     609                      | ddns_use_conflict_resolution
     610                      | ddns_ttl_percent
     611                      | hostname_char_set
     612                      | hostname_char_replacement
     613                      | store_extended_info
     614                      | allocator
     615                      | offer_lifetime
     616                      | unknown_map_entry
     617
     618  option_def_list ::= "option-def" ":" "[" option_def_list_content "]"
     619
     620  sub_option_def_list ::= "{" option_def_list "}"
     621
     622  option_def_list_content ::=
     623                         | not_empty_option_def_list
     624
     625  not_empty_option_def_list ::= option_def_entry
     626                           | not_empty_option_def_list "," option_def_entry
     627                           | not_empty_option_def_list ","
     628
     629  option_def_entry ::= "{" option_def_params "}"
     630
     631  sub_option_def ::= "{" option_def_params "}"
     632
     633  option_def_params ::=
     634                   | not_empty_option_def_params
     635
     636  not_empty_option_def_params ::= option_def_param
     637                             | not_empty_option_def_params "," option_def_param
     638                             | not_empty_option_def_params ","
     639
     640  option_def_param ::= option_def_name
     641                  | option_def_code
     642                  | option_def_type
     643                  | option_def_record_types
     644                  | option_def_space
     645                  | option_def_encapsulate
     646                  | option_def_array
     647                  | user_context
     648                  | comment
     649                  | unknown_map_entry
     650
     651  option_def_name ::= name
     652
     653  code ::= "code" ":" INTEGER
     654
     655  option_def_code ::= code
     656
     657  option_def_type ::= "type" ":" STRING
     658
     659  option_def_record_types ::= "record-types" ":" STRING
     660
     661  space ::= "space" ":" STRING
     662
     663  option_def_space ::= space
     664
     665  option_def_encapsulate ::= "encapsulate" ":" STRING
     666
     667  option_def_array ::= "array" ":" BOOLEAN
     668
     669  option_data_list ::= "option-data" ":" "[" option_data_list_content "]"
     670
     671  option_data_list_content ::=
     672                          | not_empty_option_data_list
     673
     674  not_empty_option_data_list ::= option_data_entry
     675                            | not_empty_option_data_list "," option_data_entry
     676                            | not_empty_option_data_list ","
     677
     678  option_data_entry ::= "{" option_data_params "}"
     679
     680  sub_option_data ::= "{" option_data_params "}"
     681
     682  option_data_params ::=
     683                    | not_empty_option_data_params
     684
     685  not_empty_option_data_params ::= option_data_param
     686                              | not_empty_option_data_params "," option_data_param
     687                              | not_empty_option_data_params ","
     688
     689  option_data_param ::= option_data_name
     690                   | option_data_data
     691                   | option_data_code
     692                   | option_data_space
     693                   | option_data_csv_format
     694                   | option_data_always_send
     695                   | option_data_never_send
     696                   | user_context
     697                   | comment
     698                   | unknown_map_entry
     699
     700  option_data_name ::= name
     701
     702  option_data_data ::= "data" ":" STRING
     703
     704  option_data_code ::= code
     705
     706  option_data_space ::= space
     707
     708  option_data_csv_format ::= "csv-format" ":" BOOLEAN
     709
     710  option_data_always_send ::= "always-send" ":" BOOLEAN
     711
     712  option_data_never_send ::= "never-send" ":" BOOLEAN
     713
     714  pools_list ::= "pools" ":" "[" pools_list_content "]"
     715
     716  pools_list_content ::=
     717                    | not_empty_pools_list
     718
     719  not_empty_pools_list ::= pool_list_entry
     720                      | not_empty_pools_list "," pool_list_entry
     721                      | not_empty_pools_list ","
     722
     723  pool_list_entry ::= "{" pool_params "}"
     724
     725  sub_pool4 ::= "{" pool_params "}"
     726
     727  pool_params ::= pool_param
     728             | pool_params "," pool_param
     729             | pool_params ","
     730
     731  pool_param ::= pool_entry
     732            | pool_id
     733            | option_data_list
     734            | client_class
     735            | require_client_classes
     736            | user_context
     737            | comment
     738            | unknown_map_entry
     739
     740  pool_entry ::= "pool" ":" STRING
     741
     742  pool_id ::= "pool-id" ":" INTEGER
     743
     744  user_context ::= "user-context" ":" map_value
     745
     746  comment ::= "comment" ":" STRING
     747
     748  reservations ::= "reservations" ":" "[" reservations_list "]"
     749
     750  reservations_list ::=
     751                   | not_empty_reservations_list
     752
     753  not_empty_reservations_list ::= reservation
     754                             | not_empty_reservations_list "," reservation
     755                             | not_empty_reservations_list ","
     756
     757  reservation ::= "{" reservation_params "}"
     758
     759  sub_reservation ::= "{" reservation_params "}"
     760
     761  reservation_params ::=
     762                    | not_empty_reservation_params
     763
     764  not_empty_reservation_params ::= reservation_param
     765                              | not_empty_reservation_params "," reservation_param
     766                              | not_empty_reservation_params ","
     767
     768  reservation_param ::= duid
     769                   | reservation_client_classes
     770                   | client_id_value
     771                   | circuit_id_value
     772                   | flex_id_value
     773                   | ip_address
     774                   | hw_address
     775                   | hostname
     776                   | option_data_list
     777                   | next_server
     778                   | server_hostname
     779                   | boot_file_name
     780                   | user_context
     781                   | comment
     782                   | unknown_map_entry
     783
     784  next_server ::= "next-server" ":" STRING
     785
     786  server_hostname ::= "server-hostname" ":" STRING
     787
     788  boot_file_name ::= "boot-file-name" ":" STRING
     789
     790  ip_address ::= "ip-address" ":" STRING
     791
     792  ip_addresses ::= "ip-addresses" ":" list_strings
     793
     794  duid ::= "duid" ":" STRING
     795
     796  hw_address ::= "hw-address" ":" STRING
     797
     798  client_id_value ::= "client-id" ":" STRING
     799
     800  circuit_id_value ::= "circuit-id" ":" STRING
     801
     802  flex_id_value ::= "flex-id" ":" STRING
     803
     804  hostname ::= "hostname" ":" STRING
     805
     806  reservation_client_classes ::= "client-classes" ":" list_strings
     807
     808  relay ::= "relay" ":" "{" relay_map "}"
     809
     810  relay_map ::= ip_address
     811           | ip_addresses
     812
     813  client_classes ::= "client-classes" ":" "[" client_classes_list "]"
     814
     815  client_classes_list ::= client_class_entry
     816                     | client_classes_list "," client_class_entry
     817                     | client_classes_list ","
     818
     819  client_class_entry ::= "{" client_class_params "}"
     820
     821  client_class_params ::=
     822                     | not_empty_client_class_params
     823
     824  not_empty_client_class_params ::= client_class_param
     825                               | not_empty_client_class_params "," client_class_param
     826                               | not_empty_client_class_params ","
     827
     828  client_class_param ::= client_class_name
     829                    | client_class_test
     830                    | client_class_template_test
     831                    | only_if_required
     832                    | option_def_list
     833                    | option_data_list
     834                    | next_server
     835                    | server_hostname
     836                    | boot_file_name
     837                    | user_context
     838                    | comment
     839                    | unknown_map_entry
     840                    | valid_lifetime
     841                    | min_valid_lifetime
     842                    | max_valid_lifetime
     843                    | offer_lifetime
     844
     845  client_class_name ::= name
     846
     847  client_class_test ::= "test" ":" STRING
     848
     849  client_class_template_test ::= "template-test" ":" STRING
     850
     851  only_if_required ::= "only-if-required" ":" BOOLEAN
     852
     853  dhcp4o6_port ::= "dhcp4o6-port" ":" INTEGER
     854
     855  control_socket ::= "control-socket" ":" "{" control_socket_params "}"
     856
     857  control_socket_params ::= control_socket_param
     858                       | control_socket_params "," control_socket_param
     859                       | control_socket_params ","
     860
     861  control_socket_param ::= control_socket_type
     862                      | control_socket_name
     863                      | user_context
     864                      | comment
     865                      | unknown_map_entry
     866
     867  control_socket_type ::= "socket-type" ":" STRING
     868
     869  control_socket_name ::= "socket-name" ":" STRING
     870
     871  dhcp_queue_control ::= "dhcp-queue-control" ":" "{" queue_control_params "}"
     872
     873  queue_control_params ::= queue_control_param
     874                      | queue_control_params "," queue_control_param
     875                      | queue_control_params ","
     876
     877  queue_control_param ::= enable_queue
     878                     | queue_type
     879                     | capacity
     880                     | user_context
     881                     | comment
     882                     | arbitrary_map_entry
     883
     884  enable_queue ::= "enable-queue" ":" BOOLEAN
     885
     886  queue_type ::= "queue-type" ":" STRING
     887
     888  capacity ::= "capacity" ":" INTEGER
     889
     890  arbitrary_map_entry ::= STRING ":" value
     891
     892  dhcp_ddns ::= "dhcp-ddns" ":" "{" dhcp_ddns_params "}"
     893
     894  sub_dhcp_ddns ::= "{" dhcp_ddns_params "}"
     895
     896  dhcp_ddns_params ::= dhcp_ddns_param
     897                  | dhcp_ddns_params "," dhcp_ddns_param
     898                  | dhcp_ddns_params ","
     899
     900  dhcp_ddns_param ::= enable_updates
     901                 | server_ip
     902                 | server_port
     903                 | sender_ip
     904                 | sender_port
     905                 | max_queue_size
     906                 | ncr_protocol
     907                 | ncr_format
     908                 | dep_override_no_update
     909                 | dep_override_client_update
     910                 | dep_replace_client_name
     911                 | dep_generated_prefix
     912                 | dep_qualifying_suffix
     913                 | dep_hostname_char_set
     914                 | dep_hostname_char_replacement
     915                 | user_context
     916                 | comment
     917                 | unknown_map_entry
     918
     919  enable_updates ::= "enable-updates" ":" BOOLEAN
     920
     921  server_ip ::= "server-ip" ":" STRING
     922
     923  server_port ::= "server-port" ":" INTEGER
     924
     925  sender_ip ::= "sender-ip" ":" STRING
     926
     927  sender_port ::= "sender-port" ":" INTEGER
     928
     929  max_queue_size ::= "max-queue-size" ":" INTEGER
     930
     931  ncr_protocol ::= "ncr-protocol" ":" ncr_protocol_value
     932
     933  ncr_protocol_value ::= "udp"
     934                    | "tcp"
     935
     936  ncr_format ::= "ncr-format" ":" "JSON"
     937
     938  dep_qualifying_suffix ::= "qualifying-suffix" ":" STRING
     939
     940  dep_override_no_update ::= "override-no-update" ":" BOOLEAN
     941
     942  dep_override_client_update ::= "override-client-update" ":" BOOLEAN
     943
     944  dep_replace_client_name ::= "replace-client-name" ":" ddns_replace_client_name_value
     945
     946  dep_generated_prefix ::= "generated-prefix" ":" STRING
     947
     948  dep_hostname_char_set ::= "hostname-char-set" ":" STRING
     949
     950  dep_hostname_char_replacement ::= "hostname-char-replacement" ":" STRING
     951
     952  config_control ::= "config-control" ":" "{" config_control_params "}"
     953
     954  sub_config_control ::= "{" config_control_params "}"
     955
     956  config_control_params ::= config_control_param
     957                       | config_control_params "," config_control_param
     958                       | config_control_params ","
     959
     960  config_control_param ::= config_databases
     961                      | config_fetch_wait_time
     962
     963  config_databases ::= "config-databases" ":" "[" database_list "]"
     964
     965  config_fetch_wait_time ::= "config-fetch-wait-time" ":" INTEGER
     966
     967  loggers ::= "loggers" ":" "[" loggers_entries "]"
     968
     969  loggers_entries ::= logger_entry
     970                 | loggers_entries "," logger_entry
     971                 | loggers_entries ","
     972
     973  logger_entry ::= "{" logger_params "}"
     974
     975  logger_params ::= logger_param
     976               | logger_params "," logger_param
     977               | logger_params ","
     978
     979  logger_param ::= name
     980              | output_options_list
     981              | debuglevel
     982              | severity
     983              | user_context
     984              | comment
     985              | unknown_map_entry
     986
     987  debuglevel ::= "debuglevel" ":" INTEGER
     988
     989  severity ::= "severity" ":" STRING
     990
     991  output_options_list ::= "output_options" ":" "[" output_options_list_content "]"
     992
     993  output_options_list_content ::= output_entry
     994                             | output_options_list_content "," output_entry
     995                             | output_options_list_content ","
     996
     997  output_entry ::= "{" output_params_list "}"
     998
     999  output_params_list ::= output_params
    1000                    | output_params_list "," output_params
    1001                    | output_params_list ","
    1002
    1003  output_params ::= output
    1004               | flush
    1005               | maxsize
    1006               | maxver
    1007               | pattern
    1008
    1009  output ::= "output" ":" STRING
    1010
    1011  flush ::= "flush" ":" BOOLEAN
    1012
    1013  maxsize ::= "maxsize" ":" INTEGER
    1014
    1015  maxver ::= "maxver" ":" INTEGER
    1016
    1017  pattern ::= "pattern" ":" STRING
    1018
    1019  compatibility ::= "compatibility" ":" "{" compatibility_params "}"
    1020
    1021  compatibility_params ::= compatibility_param
    1022                      | compatibility_params "," compatibility_param
    1023                      | compatibility_params ","
    1024
    1025  compatibility_param ::= lenient_option_parsing
    1026                     | ignore_dhcp_server_identifier
    1027                     | ignore_rai_link_selection
    1028                     | exclude_first_last_24
    1029                     | unknown_map_entry
    1030
    1031  lenient_option_parsing ::= "lenient-option-parsing" ":" BOOLEAN
    1032
    1033  ignore_dhcp_server_identifier ::= "ignore-dhcp-server-identifier" ":" BOOLEAN
    1034
    1035  ignore_rai_link_selection ::= "ignore-rai-link-selection" ":" BOOLEAN
    1036
    1037  exclude_first_last_24 ::= "exclude-first-last-24" ":" BOOLEAN

## BNF Grammar for DHCPv6

This grammar is generated from `dhcp6_parser.yy`. See The DHCPv6 Server for more details.

       1  Grammar
       2
       3  $accept ::= start EOF
       4
       5  start ::= TOPLEVEL_JSON sub_json
       6
       7  start ::= TOPLEVEL_DHCP6 syntax_map
       8
       9  start ::= SUB_DHCP6 sub_dhcp6
      10
      11  start ::= SUB_INTERFACES6 sub_interfaces6
      12
      13  start ::= SUB_SUBNET6 sub_subnet6
      14
      15  start ::= SUB_POOL6 sub_pool6
      16
      17  start ::= SUB_PD_POOL sub_pd_pool
      18
      19  start ::= SUB_RESERVATION sub_reservation
      20
      21  start ::= SUB_OPTION_DEFS sub_option_def_list
      22
      23  start ::= SUB_OPTION_DEF sub_option_def
      24
      25  start ::= SUB_OPTION_DATA sub_option_data
      26
      27  start ::= SUB_HOOKS_LIBRARY sub_hooks_library
      28
      29  start ::= SUB_DHCP_DDNS sub_dhcp_ddns
      30
      31  start ::= SUB_CONFIG_CONTROL sub_config_control
      32
      33  value ::= INTEGER
      34       | FLOAT
      35       | BOOLEAN
      36       | STRING
      37       | NULL
      38       | map2
      39       | list_generic
      40
      41  sub_json ::= value
      42
      43  map2 ::= "{" map_content "}"
      44
      45  map_value ::= map2
      46
      47  map_content ::=
      48             | not_empty_map
      49
      50  not_empty_map ::= STRING ":" value
      51               | not_empty_map "," STRING ":" value
      52               | not_empty_map ","
      53
      54  list_generic ::= "[" list_content "]"
      55
      56  list_content ::=
      57              | not_empty_list
      58
      59  not_empty_list ::= value
      60                | not_empty_list "," value
      61                | not_empty_list ","
      62
      63  list_strings ::= "[" list_strings_content "]"
      64
      65  list_strings_content ::=
      66                      | not_empty_list_strings
      67
      68  not_empty_list_strings ::= STRING
      69                        | not_empty_list_strings "," STRING
      70                        | not_empty_list_strings ","
      71
      72  unknown_map_entry ::= STRING ":"
      73
      74  syntax_map ::= "{" global_object "}"
      75
      76  global_object ::= "Dhcp6" ":" "{" global_params "}"
      77               | global_object_comma
      78
      79  global_object_comma ::= global_object ","
      80
      81  sub_dhcp6 ::= "{" global_params "}"
      82
      83  global_params ::= global_param
      84               | global_params "," global_param
      85               | global_params ","
      86
      87  global_param ::= data_directory
      88              | preferred_lifetime
      89              | min_preferred_lifetime
      90              | max_preferred_lifetime
      91              | valid_lifetime
      92              | min_valid_lifetime
      93              | max_valid_lifetime
      94              | renew_timer
      95              | rebind_timer
      96              | decline_probation_period
      97              | subnet6_list
      98              | shared_networks
      99              | interfaces_config
     100              | lease_database
     101              | hosts_database
     102              | hosts_databases
     103              | mac_sources
     104              | relay_supplied_options
     105              | host_reservation_identifiers
     106              | client_classes
     107              | option_def_list
     108              | option_data_list
     109              | hooks_libraries
     110              | expired_leases_processing
     111              | server_id
     112              | dhcp4o6_port
     113              | control_socket
     114              | dhcp_queue_control
     115              | dhcp_ddns
     116              | user_context
     117              | comment
     118              | sanity_checks
     119              | reservations
     120              | config_control
     121              | server_tag
     122              | reservation_mode
     123              | reservations_global
     124              | reservations_in_subnet
     125              | reservations_out_of_pool
     126              | calculate_tee_times
     127              | t1_percent
     128              | t2_percent
     129              | cache_threshold
     130              | cache_max_age
     131              | loggers
     132              | hostname_char_set
     133              | hostname_char_replacement
     134              | ddns_send_updates
     135              | ddns_override_no_update
     136              | ddns_override_client_update
     137              | ddns_replace_client_name
     138              | ddns_generated_prefix
     139              | ddns_qualifying_suffix
     140              | ddns_update_on_renew
     141              | ddns_use_conflict_resolution
     142              | ddns_ttl_percent
     143              | store_extended_info
     144              | statistic_default_sample_count
     145              | statistic_default_sample_age
     146              | dhcp_multi_threading
     147              | early_global_reservations_lookup
     148              | ip_reservations_unique
     149              | reservations_lookup_first
     150              | compatibility
     151              | parked_packet_limit
     152              | allocator
     153              | pd_allocator
     154              | unknown_map_entry
     155
     156  data_directory ::= "data-directory" ":" STRING
     157
     158  preferred_lifetime ::= "preferred-lifetime" ":" INTEGER
     159
     160  min_preferred_lifetime ::= "min-preferred-lifetime" ":" INTEGER
     161
     162  max_preferred_lifetime ::= "max-preferred-lifetime" ":" INTEGER
     163
     164  valid_lifetime ::= "valid-lifetime" ":" INTEGER
     165
     166  min_valid_lifetime ::= "min-valid-lifetime" ":" INTEGER
     167
     168  max_valid_lifetime ::= "max-valid-lifetime" ":" INTEGER
     169
     170  renew_timer ::= "renew-timer" ":" INTEGER
     171
     172  rebind_timer ::= "rebind-timer" ":" INTEGER
     173
     174  calculate_tee_times ::= "calculate-tee-times" ":" BOOLEAN
     175
     176  t1_percent ::= "t1-percent" ":" FLOAT
     177
     178  t2_percent ::= "t2-percent" ":" FLOAT
     179
     180  cache_threshold ::= "cache-threshold" ":" FLOAT
     181
     182  cache_max_age ::= "cache-max-age" ":" INTEGER
     183
     184  decline_probation_period ::= "decline-probation-period" ":" INTEGER
     185
     186  ddns_send_updates ::= "ddns-send-updates" ":" BOOLEAN
     187
     188  ddns_override_no_update ::= "ddns-override-no-update" ":" BOOLEAN
     189
     190  ddns_override_client_update ::= "ddns-override-client-update" ":" BOOLEAN
     191
     192  ddns_replace_client_name ::= "ddns-replace-client-name" ":" ddns_replace_client_name_value
     193
     194  ddns_replace_client_name_value ::= "when-present"
     195                                | "never"
     196                                | "always"
     197                                | "when-not-present"
     198                                | BOOLEAN
     199
     200  ddns_generated_prefix ::= "ddns-generated-prefix" ":" STRING
     201
     202  ddns_qualifying_suffix ::= "ddns-qualifying-suffix" ":" STRING
     203
     204  ddns_update_on_renew ::= "ddns-update-on-renew" ":" BOOLEAN
     205
     206  ddns_use_conflict_resolution ::= "ddns-use-conflict-resolution" ":" BOOLEAN
     207
     208  ddns_ttl_percent ::= "ddns-ttl-percent" ":" FLOAT
     209
     210  hostname_char_set ::= "hostname-char-set" ":" STRING
     211
     212  hostname_char_replacement ::= "hostname-char-replacement" ":" STRING
     213
     214  store_extended_info ::= "store-extended-info" ":" BOOLEAN
     215
     216  statistic_default_sample_count ::= "statistic-default-sample-count" ":" INTEGER
     217
     218  statistic_default_sample_age ::= "statistic-default-sample-age" ":" INTEGER
     219
     220  server_tag ::= "server-tag" ":" STRING
     221
     222  parked_packet_limit ::= "parked-packet-limit" ":" INTEGER
     223
     224  allocator ::= "allocator" ":" STRING
     225
     226  pd_allocator ::= "pd-allocator" ":" STRING
     227
     228  early_global_reservations_lookup ::= "early-global-reservations-lookup" ":" BOOLEAN
     229
     230  ip_reservations_unique ::= "ip-reservations-unique" ":" BOOLEAN
     231
     232  reservations_lookup_first ::= "reservations-lookup-first" ":" BOOLEAN
     233
     234  interfaces_config ::= "interfaces-config" ":" "{" interfaces_config_params "}"
     235
     236  sub_interfaces6 ::= "{" interfaces_config_params "}"
     237
     238  interfaces_config_params ::= interfaces_config_param
     239                          | interfaces_config_params "," interfaces_config_param
     240                          | interfaces_config_params ","
     241
     242  interfaces_config_param ::= interfaces_list
     243                         | re_detect
     244                         | service_sockets_require_all
     245                         | service_sockets_retry_wait_time
     246                         | service_sockets_max_retries
     247                         | user_context
     248                         | comment
     249                         | unknown_map_entry
     250
     251  interfaces_list ::= "interfaces" ":" list_strings
     252
     253  re_detect ::= "re-detect" ":" BOOLEAN
     254
     255  service_sockets_require_all ::= "service-sockets-require-all" ":" BOOLEAN
     256
     257  service_sockets_retry_wait_time ::= "service-sockets-retry-wait-time" ":" INTEGER
     258
     259  service_sockets_max_retries ::= "service-sockets-max-retries" ":" INTEGER
     260
     261  lease_database ::= "lease-database" ":" "{" database_map_params "}"
     262
     263  hosts_database ::= "hosts-database" ":" "{" database_map_params "}"
     264
     265  hosts_databases ::= "hosts-databases" ":" "[" database_list "]"
     266
     267  database_list ::=
     268               | not_empty_database_list
     269
     270  not_empty_database_list ::= database
     271                         | not_empty_database_list "," database
     272                         | not_empty_database_list ","
     273
     274  database ::= "{" database_map_params "}"
     275
     276  database_map_params ::= database_map_param
     277                     | database_map_params "," database_map_param
     278                     | database_map_params ","
     279
     280  database_map_param ::= database_type
     281                    | user
     282                    | password
     283                    | host
     284                    | port
     285                    | name
     286                    | persist
     287                    | lfc_interval
     288                    | readonly
     289                    | connect_timeout
     290                    | read_timeout
     291                    | write_timeout
     292                    | tcp_user_timeout
     293                    | max_reconnect_tries
     294                    | reconnect_wait_time
     295                    | on_fail
     296                    | max_row_errors
     297                    | trust_anchor
     298                    | cert_file
     299                    | key_file
     300                    | cipher_list
     301                    | unknown_map_entry
     302
     303  database_type ::= "type" ":" db_type
     304
     305  db_type ::= "memfile"
     306         | "mysql"
     307         | "postgresql"
     308
     309  user ::= "user" ":" STRING
     310
     311  password ::= "password" ":" STRING
     312
     313  host ::= "host" ":" STRING
     314
     315  port ::= "port" ":" INTEGER
     316
     317  name ::= "name" ":" STRING
     318
     319  persist ::= "persist" ":" BOOLEAN
     320
     321  lfc_interval ::= "lfc-interval" ":" INTEGER
     322
     323  readonly ::= "readonly" ":" BOOLEAN
     324
     325  connect_timeout ::= "connect-timeout" ":" INTEGER
     326
     327  read_timeout ::= "read-timeout" ":" INTEGER
     328
     329  write_timeout ::= "write-timeout" ":" INTEGER
     330
     331  tcp_user_timeout ::= "tcp-user-timeout" ":" INTEGER
     332
     333  reconnect_wait_time ::= "reconnect-wait-time" ":" INTEGER
     334
     335  on_fail ::= "on-fail" ":" on_fail_mode
     336
     337  on_fail_mode ::= "stop-retry-exit"
     338              | "serve-retry-exit"
     339              | "serve-retry-continue"
     340
     341  max_row_errors ::= "max-row-errors" ":" INTEGER
     342
     343  max_reconnect_tries ::= "max-reconnect-tries" ":" INTEGER
     344
     345  trust_anchor ::= "trust-anchor" ":" STRING
     346
     347  cert_file ::= "cert-file" ":" STRING
     348
     349  key_file ::= "key-file" ":" STRING
     350
     351  cipher_list ::= "cipher-list" ":" STRING
     352
     353  sanity_checks ::= "sanity-checks" ":" "{" sanity_checks_params "}"
     354
     355  sanity_checks_params ::= sanity_checks_param
     356                      | sanity_checks_params "," sanity_checks_param
     357                      | sanity_checks_params ","
     358
     359  sanity_checks_param ::= lease_checks
     360                     | extended_info_checks
     361
     362  lease_checks ::= "lease-checks" ":" STRING
     363
     364  extended_info_checks ::= "extended-info-checks" ":" STRING
     365
     366  mac_sources ::= "mac-sources" ":" "[" mac_sources_list "]"
     367
     368  mac_sources_list ::= mac_sources_value
     369                  | mac_sources_list "," mac_sources_value
     370                  | mac_sources_list ","
     371
     372  mac_sources_value ::= duid_id
     373                   | string_id
     374
     375  duid_id ::= "duid"
     376
     377  string_id ::= STRING
     378
     379  host_reservation_identifiers ::= "host-reservation-identifiers" ":" "[" host_reservation_identifiers_list "]"
     380
     381  host_reservation_identifiers_list ::= host_reservation_identifier
     382                                   | host_reservation_identifiers_list "," host_reservation_identifier
     383                                   | host_reservation_identifiers_list ","
     384
     385  host_reservation_identifier ::= duid_id
     386                             | hw_address_id
     387                             | flex_id
     388
     389  hw_address_id ::= "hw-address"
     390
     391  flex_id ::= "flex-id"
     392
     393  relay_supplied_options ::= "relay-supplied-options" ":" "[" list_content "]"
     394
     395  dhcp_multi_threading ::= "multi-threading" ":" "{" multi_threading_params "}"
     396
     397  multi_threading_params ::= multi_threading_param
     398                        | multi_threading_params "," multi_threading_param
     399                        | multi_threading_params ","
     400
     401  multi_threading_param ::= enable_multi_threading
     402                       | thread_pool_size
     403                       | packet_queue_size
     404                       | user_context
     405                       | comment
     406                       | unknown_map_entry
     407
     408  enable_multi_threading ::= "enable-multi-threading" ":" BOOLEAN
     409
     410  thread_pool_size ::= "thread-pool-size" ":" INTEGER
     411
     412  packet_queue_size ::= "packet-queue-size" ":" INTEGER
     413
     414  hooks_libraries ::= "hooks-libraries" ":" "[" hooks_libraries_list "]"
     415
     416  hooks_libraries_list ::=
     417                      | not_empty_hooks_libraries_list
     418
     419  not_empty_hooks_libraries_list ::= hooks_library
     420                                | not_empty_hooks_libraries_list "," hooks_library
     421                                | not_empty_hooks_libraries_list ","
     422
     423  hooks_library ::= "{" hooks_params "}"
     424
     425  sub_hooks_library ::= "{" hooks_params "}"
     426
     427  hooks_params ::= hooks_param
     428              | hooks_params "," hooks_param
     429              | hooks_params ","
     430              | unknown_map_entry
     431
     432  hooks_param ::= library
     433             | parameters
     434
     435  library ::= "library" ":" STRING
     436
     437  parameters ::= "parameters" ":" map_value
     438
     439  expired_leases_processing ::= "expired-leases-processing" ":" "{" expired_leases_params "}"
     440
     441  expired_leases_params ::= expired_leases_param
     442                       | expired_leases_params "," expired_leases_param
     443                       | expired_leases_params ","
     444
     445  expired_leases_param ::= reclaim_timer_wait_time
     446                      | flush_reclaimed_timer_wait_time
     447                      | hold_reclaimed_time
     448                      | max_reclaim_leases
     449                      | max_reclaim_time
     450                      | unwarned_reclaim_cycles
     451
     452  reclaim_timer_wait_time ::= "reclaim-timer-wait-time" ":" INTEGER
     453
     454  flush_reclaimed_timer_wait_time ::= "flush-reclaimed-timer-wait-time" ":" INTEGER
     455
     456  hold_reclaimed_time ::= "hold-reclaimed-time" ":" INTEGER
     457
     458  max_reclaim_leases ::= "max-reclaim-leases" ":" INTEGER
     459
     460  max_reclaim_time ::= "max-reclaim-time" ":" INTEGER
     461
     462  unwarned_reclaim_cycles ::= "unwarned-reclaim-cycles" ":" INTEGER
     463
     464  subnet6_list ::= "subnet6" ":" "[" subnet6_list_content "]"
     465
     466  subnet6_list_content ::=
     467                      | not_empty_subnet6_list
     468
     469  not_empty_subnet6_list ::= subnet6
     470                        | not_empty_subnet6_list "," subnet6
     471                        | not_empty_subnet6_list ","
     472
     473  subnet6 ::= "{" subnet6_params "}"
     474
     475  sub_subnet6 ::= "{" subnet6_params "}"
     476
     477  subnet6_params ::= subnet6_param
     478                | subnet6_params "," subnet6_param
     479                | subnet6_params ","
     480
     481  subnet6_param ::= preferred_lifetime
     482               | min_preferred_lifetime
     483               | max_preferred_lifetime
     484               | valid_lifetime
     485               | min_valid_lifetime
     486               | max_valid_lifetime
     487               | renew_timer
     488               | rebind_timer
     489               | option_data_list
     490               | pools_list
     491               | pd_pools_list
     492               | subnet
     493               | interface
     494               | interface_id
     495               | id
     496               | rapid_commit
     497               | client_class
     498               | require_client_classes
     499               | reservations
     500               | reservation_mode
     501               | reservations_global
     502               | reservations_in_subnet
     503               | reservations_out_of_pool
     504               | relay
     505               | user_context
     506               | comment
     507               | calculate_tee_times
     508               | t1_percent
     509               | t2_percent
     510               | cache_threshold
     511               | cache_max_age
     512               | hostname_char_set
     513               | hostname_char_replacement
     514               | ddns_send_updates
     515               | ddns_override_no_update
     516               | ddns_override_client_update
     517               | ddns_replace_client_name
     518               | ddns_generated_prefix
     519               | ddns_qualifying_suffix
     520               | ddns_update_on_renew
     521               | ddns_use_conflict_resolution
     522               | ddns_ttl_percent
     523               | store_extended_info
     524               | allocator
     525               | pd_allocator
     526               | unknown_map_entry
     527
     528  subnet ::= "subnet" ":" STRING
     529
     530  interface ::= "interface" ":" STRING
     531
     532  interface_id ::= "interface-id" ":" STRING
     533
     534  client_class ::= "client-class" ":" STRING
     535
     536  require_client_classes ::= "require-client-classes" ":" list_strings
     537
     538  reservations_global ::= "reservations-global" ":" BOOLEAN
     539
     540  reservations_in_subnet ::= "reservations-in-subnet" ":" BOOLEAN
     541
     542  reservations_out_of_pool ::= "reservations-out-of-pool" ":" BOOLEAN
     543
     544  reservation_mode ::= "reservation-mode" ":" hr_mode
     545
     546  hr_mode ::= "disabled"
     547         | "out-of-pool"
     548         | "global"
     549         | "all"
     550
     551  id ::= "id" ":" INTEGER
     552
     553  rapid_commit ::= "rapid-commit" ":" BOOLEAN
     554
     555  shared_networks ::= "shared-networks" ":" "[" shared_networks_content "]"
     556
     557  shared_networks_content ::=
     558                         | shared_networks_list
     559
     560  shared_networks_list ::= shared_network
     561                      | shared_networks_list "," shared_network
     562                      | shared_networks_list ","
     563
     564  shared_network ::= "{" shared_network_params "}"
     565
     566  shared_network_params ::= shared_network_param
     567                       | shared_network_params "," shared_network_param
     568                       | shared_network_params ","
     569
     570  shared_network_param ::= name
     571                      | subnet6_list
     572                      | interface
     573                      | interface_id
     574                      | renew_timer
     575                      | rebind_timer
     576                      | option_data_list
     577                      | relay
     578                      | reservation_mode
     579                      | reservations_global
     580                      | reservations_in_subnet
     581                      | reservations_out_of_pool
     582                      | client_class
     583                      | require_client_classes
     584                      | preferred_lifetime
     585                      | min_preferred_lifetime
     586                      | max_preferred_lifetime
     587                      | rapid_commit
     588                      | valid_lifetime
     589                      | min_valid_lifetime
     590                      | max_valid_lifetime
     591                      | user_context
     592                      | comment
     593                      | calculate_tee_times
     594                      | t1_percent
     595                      | t2_percent
     596                      | cache_threshold
     597                      | cache_max_age
     598                      | hostname_char_set
     599                      | hostname_char_replacement
     600                      | ddns_send_updates
     601                      | ddns_override_no_update
     602                      | ddns_override_client_update
     603                      | ddns_replace_client_name
     604                      | ddns_generated_prefix
     605                      | ddns_qualifying_suffix
     606                      | ddns_update_on_renew
     607                      | ddns_use_conflict_resolution
     608                      | ddns_ttl_percent
     609                      | store_extended_info
     610                      | allocator
     611                      | pd_allocator
     612                      | unknown_map_entry
     613
     614  option_def_list ::= "option-def" ":" "[" option_def_list_content "]"
     615
     616  sub_option_def_list ::= "{" option_def_list "}"
     617
     618  option_def_list_content ::=
     619                         | not_empty_option_def_list
     620
     621  not_empty_option_def_list ::= option_def_entry
     622                           | not_empty_option_def_list "," option_def_entry
     623                           | not_empty_option_def_list ","
     624
     625  option_def_entry ::= "{" option_def_params "}"
     626
     627  sub_option_def ::= "{" option_def_params "}"
     628
     629  option_def_params ::=
     630                   | not_empty_option_def_params
     631
     632  not_empty_option_def_params ::= option_def_param
     633                             | not_empty_option_def_params "," option_def_param
     634                             | not_empty_option_def_params ","
     635
     636  option_def_param ::= option_def_name
     637                  | option_def_code
     638                  | option_def_type
     639                  | option_def_record_types
     640                  | option_def_space
     641                  | option_def_encapsulate
     642                  | option_def_array
     643                  | user_context
     644                  | comment
     645                  | unknown_map_entry
     646
     647  option_def_name ::= name
     648
     649  code ::= "code" ":" INTEGER
     650
     651  option_def_code ::= code
     652
     653  option_def_type ::= "type" ":" STRING
     654
     655  option_def_record_types ::= "record-types" ":" STRING
     656
     657  space ::= "space" ":" STRING
     658
     659  option_def_space ::= space
     660
     661  option_def_encapsulate ::= "encapsulate" ":" STRING
     662
     663  option_def_array ::= "array" ":" BOOLEAN
     664
     665  option_data_list ::= "option-data" ":" "[" option_data_list_content "]"
     666
     667  option_data_list_content ::=
     668                          | not_empty_option_data_list
     669
     670  not_empty_option_data_list ::= option_data_entry
     671                            | not_empty_option_data_list "," option_data_entry
     672                            | not_empty_option_data_list ","
     673
     674  option_data_entry ::= "{" option_data_params "}"
     675
     676  sub_option_data ::= "{" option_data_params "}"
     677
     678  option_data_params ::=
     679                    | not_empty_option_data_params
     680
     681  not_empty_option_data_params ::= option_data_param
     682                              | not_empty_option_data_params "," option_data_param
     683                              | not_empty_option_data_params ","
     684
     685  option_data_param ::= option_data_name
     686                   | option_data_data
     687                   | option_data_code
     688                   | option_data_space
     689                   | option_data_csv_format
     690                   | option_data_always_send
     691                   | option_data_never_send
     692                   | user_context
     693                   | comment
     694                   | unknown_map_entry
     695
     696  option_data_name ::= name
     697
     698  option_data_data ::= "data" ":" STRING
     699
     700  option_data_code ::= code
     701
     702  option_data_space ::= space
     703
     704  option_data_csv_format ::= "csv-format" ":" BOOLEAN
     705
     706  option_data_always_send ::= "always-send" ":" BOOLEAN
     707
     708  option_data_never_send ::= "never-send" ":" BOOLEAN
     709
     710  pools_list ::= "pools" ":" "[" pools_list_content "]"
     711
     712  pools_list_content ::=
     713                    | not_empty_pools_list
     714
     715  not_empty_pools_list ::= pool_list_entry
     716                      | not_empty_pools_list "," pool_list_entry
     717                      | not_empty_pools_list ","
     718
     719  pool_list_entry ::= "{" pool_params "}"
     720
     721  sub_pool6 ::= "{" pool_params "}"
     722
     723  pool_params ::= pool_param
     724             | pool_params "," pool_param
     725             | pool_params ","
     726
     727  pool_param ::= pool_entry
     728            | pool_id
     729            | option_data_list
     730            | client_class
     731            | require_client_classes
     732            | user_context
     733            | comment
     734            | unknown_map_entry
     735
     736  pool_entry ::= "pool" ":" STRING
     737
     738  pool_id ::= "pool-id" ":" INTEGER
     739
     740  user_context ::= "user-context" ":" map_value
     741
     742  comment ::= "comment" ":" STRING
     743
     744  pd_pools_list ::= "pd-pools" ":" "[" pd_pools_list_content "]"
     745
     746  pd_pools_list_content ::=
     747                       | not_empty_pd_pools_list
     748
     749  not_empty_pd_pools_list ::= pd_pool_entry
     750                         | not_empty_pd_pools_list "," pd_pool_entry
     751                         | not_empty_pd_pools_list ","
     752
     753  pd_pool_entry ::= "{" pd_pool_params "}"
     754
     755  sub_pd_pool ::= "{" pd_pool_params "}"
     756
     757  pd_pool_params ::= pd_pool_param
     758                | pd_pool_params "," pd_pool_param
     759                | pd_pool_params ","
     760
     761  pd_pool_param ::= pd_prefix
     762               | pd_prefix_len
     763               | pd_delegated_len
     764               | option_data_list
     765               | client_class
     766               | require_client_classes
     767               | excluded_prefix
     768               | excluded_prefix_len
     769               | user_context
     770               | comment
     771               | unknown_map_entry
     772
     773  pd_prefix ::= "prefix" ":" STRING
     774
     775  pd_prefix_len ::= "prefix-len" ":" INTEGER
     776
     777  excluded_prefix ::= "excluded-prefix" ":" STRING
     778
     779  excluded_prefix_len ::= "excluded-prefix-len" ":" INTEGER
     780
     781  pd_delegated_len ::= "delegated-len" ":" INTEGER
     782
     783  reservations ::= "reservations" ":" "[" reservations_list "]"
     784
     785  reservations_list ::=
     786                   | not_empty_reservations_list
     787
     788  not_empty_reservations_list ::= reservation
     789                             | not_empty_reservations_list "," reservation
     790                             | not_empty_reservations_list ","
     791
     792  reservation ::= "{" reservation_params "}"
     793
     794  sub_reservation ::= "{" reservation_params "}"
     795
     796  reservation_params ::=
     797                    | not_empty_reservation_params
     798
     799  not_empty_reservation_params ::= reservation_param
     800                              | not_empty_reservation_params "," reservation_param
     801                              | not_empty_reservation_params ","
     802
     803  reservation_param ::= duid
     804                   | reservation_client_classes
     805                   | ip_addresses
     806                   | prefixes
     807                   | hw_address
     808                   | hostname
     809                   | flex_id_value
     810                   | option_data_list
     811                   | user_context
     812                   | comment
     813                   | unknown_map_entry
     814
     815  ip_addresses ::= "ip-addresses" ":" list_strings
     816
     817  prefixes ::= "prefixes" ":" list_strings
     818
     819  duid ::= "duid" ":" STRING
     820
     821  hw_address ::= "hw-address" ":" STRING
     822
     823  hostname ::= "hostname" ":" STRING
     824
     825  flex_id_value ::= "flex-id" ":" STRING
     826
     827  reservation_client_classes ::= "client-classes" ":" list_strings
     828
     829  relay ::= "relay" ":" "{" relay_map "}"
     830
     831  relay_map ::= ip_address
     832           | ip_addresses
     833
     834  ip_address ::= "ip-address" ":" STRING
     835
     836  client_classes ::= "client-classes" ":" "[" client_classes_list "]"
     837
     838  client_classes_list ::= client_class_entry
     839                     | client_classes_list "," client_class_entry
     840                     | client_classes_list ","
     841
     842  client_class_entry ::= "{" client_class_params "}"
     843
     844  client_class_params ::=
     845                     | not_empty_client_class_params
     846
     847  not_empty_client_class_params ::= client_class_param
     848                               | not_empty_client_class_params "," client_class_param
     849                               | not_empty_client_class_params ","
     850
     851  client_class_param ::= client_class_name
     852                    | client_class_test
     853                    | client_class_template_test
     854                    | only_if_required
     855                    | option_data_list
     856                    | user_context
     857                    | comment
     858                    | preferred_lifetime
     859                    | min_preferred_lifetime
     860                    | max_preferred_lifetime
     861                    | valid_lifetime
     862                    | min_valid_lifetime
     863                    | max_valid_lifetime
     864                    | unknown_map_entry
     865
     866  client_class_name ::= name
     867
     868  client_class_test ::= "test" ":" STRING
     869
     870  client_class_template_test ::= "template-test" ":" STRING
     871
     872  only_if_required ::= "only-if-required" ":" BOOLEAN
     873
     874  server_id ::= "server-id" ":" "{" server_id_params "}"
     875
     876  server_id_params ::= server_id_param
     877                  | server_id_params "," server_id_param
     878                  | server_id_params ","
     879
     880  server_id_param ::= server_id_type
     881                 | identifier
     882                 | time
     883                 | htype
     884                 | enterprise_id
     885                 | persist
     886                 | user_context
     887                 | comment
     888                 | unknown_map_entry
     889
     890  server_id_type ::= "type" ":" duid_type
     891
     892  duid_type ::= "LLT"
     893           | "EN"
     894           | "LL"
     895
     896  htype ::= "htype" ":" INTEGER
     897
     898  identifier ::= "identifier" ":" STRING
     899
     900  time ::= "time" ":" INTEGER
     901
     902  enterprise_id ::= "enterprise-id" ":" INTEGER
     903
     904  dhcp4o6_port ::= "dhcp4o6-port" ":" INTEGER
     905
     906  control_socket ::= "control-socket" ":" "{" control_socket_params "}"
     907
     908  control_socket_params ::= control_socket_param
     909                       | control_socket_params "," control_socket_param
     910                       | control_socket_params ","
     911
     912  control_socket_param ::= socket_type
     913                      | socket_name
     914                      | user_context
     915                      | comment
     916                      | unknown_map_entry
     917
     918  socket_type ::= "socket-type" ":" STRING
     919
     920  socket_name ::= "socket-name" ":" STRING
     921
     922  dhcp_queue_control ::= "dhcp-queue-control" ":" "{" queue_control_params "}"
     923
     924  queue_control_params ::= queue_control_param
     925                      | queue_control_params "," queue_control_param
     926                      | queue_control_params ","
     927
     928  queue_control_param ::= enable_queue
     929                     | queue_type
     930                     | capacity
     931                     | user_context
     932                     | comment
     933                     | arbitrary_map_entry
     934
     935  enable_queue ::= "enable-queue" ":" BOOLEAN
     936
     937  queue_type ::= "queue-type" ":" STRING
     938
     939  capacity ::= "capacity" ":" INTEGER
     940
     941  arbitrary_map_entry ::= STRING ":" value
     942
     943  dhcp_ddns ::= "dhcp-ddns" ":" "{" dhcp_ddns_params "}"
     944
     945  sub_dhcp_ddns ::= "{" dhcp_ddns_params "}"
     946
     947  dhcp_ddns_params ::= dhcp_ddns_param
     948                  | dhcp_ddns_params "," dhcp_ddns_param
     949                  | dhcp_ddns_params ","
     950
     951  dhcp_ddns_param ::= enable_updates
     952                 | server_ip
     953                 | server_port
     954                 | sender_ip
     955                 | sender_port
     956                 | max_queue_size
     957                 | ncr_protocol
     958                 | ncr_format
     959                 | dep_override_no_update
     960                 | dep_override_client_update
     961                 | dep_replace_client_name
     962                 | dep_generated_prefix
     963                 | dep_qualifying_suffix
     964                 | dep_hostname_char_set
     965                 | dep_hostname_char_replacement
     966                 | user_context
     967                 | comment
     968                 | unknown_map_entry
     969
     970  enable_updates ::= "enable-updates" ":" BOOLEAN
     971
     972  dep_qualifying_suffix ::= "qualifying-suffix" ":" STRING
     973
     974  server_ip ::= "server-ip" ":" STRING
     975
     976  server_port ::= "server-port" ":" INTEGER
     977
     978  sender_ip ::= "sender-ip" ":" STRING
     979
     980  sender_port ::= "sender-port" ":" INTEGER
     981
     982  max_queue_size ::= "max-queue-size" ":" INTEGER
     983
     984  ncr_protocol ::= "ncr-protocol" ":" ncr_protocol_value
     985
     986  ncr_protocol_value ::= "UDP"
     987                    | "TCP"
     988
     989  ncr_format ::= "ncr-format" ":" "JSON"
     990
     991  dep_override_no_update ::= "override-no-update" ":" BOOLEAN
     992
     993  dep_override_client_update ::= "override-client-update" ":" BOOLEAN
     994
     995  dep_replace_client_name ::= "replace-client-name" ":" ddns_replace_client_name_value
     996
     997  dep_generated_prefix ::= "generated-prefix" ":" STRING
     998
     999  dep_hostname_char_set ::= "hostname-char-set" ":" STRING
    1000
    1001  dep_hostname_char_replacement ::= "hostname-char-replacement" ":" STRING
    1002
    1003  config_control ::= "config-control" ":" "{" config_control_params "}"
    1004
    1005  sub_config_control ::= "{" config_control_params "}"
    1006
    1007  config_control_params ::= config_control_param
    1008                       | config_control_params "," config_control_param
    1009                       | config_control_params ","
    1010
    1011  config_control_param ::= config_databases
    1012                      | config_fetch_wait_time
    1013
    1014  config_databases ::= "config-databases" ":" "[" database_list "]"
    1015
    1016  config_fetch_wait_time ::= "config-fetch-wait-time" ":" INTEGER
    1017
    1018  loggers ::= "loggers" ":" "[" loggers_entries "]"
    1019
    1020  loggers_entries ::= logger_entry
    1021                 | loggers_entries "," logger_entry
    1022                 | loggers_entries ","
    1023
    1024  logger_entry ::= "{" logger_params "}"
    1025
    1026  logger_params ::= logger_param
    1027               | logger_params "," logger_param
    1028               | logger_params ","
    1029
    1030  logger_param ::= name
    1031              | output_options_list
    1032              | debuglevel
    1033              | severity
    1034              | user_context
    1035              | comment
    1036              | unknown_map_entry
    1037
    1038  debuglevel ::= "debuglevel" ":" INTEGER
    1039
    1040  severity ::= "severity" ":" STRING
    1041
    1042  output_options_list ::= "output_options" ":" "[" output_options_list_content "]"
    1043
    1044  output_options_list_content ::= output_entry
    1045                             | output_options_list_content "," output_entry
    1046                             | output_options_list_content ","
    1047
    1048  output_entry ::= "{" output_params_list "}"
    1049
    1050  output_params_list ::= output_params
    1051                    | output_params_list "," output_params
    1052                    | output_params_list ","
    1053
    1054  output_params ::= output
    1055               | flush
    1056               | maxsize
    1057               | maxver
    1058               | pattern
    1059
    1060  output ::= "output" ":" STRING
    1061
    1062  flush ::= "flush" ":" BOOLEAN
    1063
    1064  maxsize ::= "maxsize" ":" INTEGER
    1065
    1066  maxver ::= "maxver" ":" INTEGER
    1067
    1068  pattern ::= "pattern" ":" STRING
    1069
    1070  compatibility ::= "compatibility" ":" "{" compatibility_params "}"
    1071
    1072  compatibility_params ::= compatibility_param
    1073                      | compatibility_params "," compatibility_param
    1074                      | compatibility_params ","
    1075
    1076  compatibility_param ::= lenient_option_parsing
    1077                     | unknown_map_entry
    1078
    1079  lenient_option_parsing ::= "lenient-option-parsing" ":" BOOLEAN

## BNF Grammar for Control Agent

This grammar is generated from `agent_parser.yy`. See The Kea Control Agent for more details.

      1  Grammar
      2
      3  $accept ::= start EOF
      4
      5  start ::= START_JSON json
      6
      7  start ::= START_AGENT agent_syntax_map
      8
      9  start ::= START_SUB_AGENT sub_agent
     10
     11  sub_agent ::= "{" global_params "}"
     12
     13  json ::= value
     14
     15  value ::= INTEGER
     16       | FLOAT
     17       | BOOLEAN
     18       | STRING
     19       | NULL
     20       | map
     21       | list_generic
     22
     23  map ::= "{" map_content "}"
     24
     25  map_value ::= map
     26
     27  map_content ::=
     28             | not_empty_map
     29
     30  not_empty_map ::= STRING ":" value
     31               | not_empty_map "," STRING ":" value
     32               | not_empty_map ","
     33
     34  list_generic ::= "[" list_content "]"
     35
     36  list_content ::=
     37              | not_empty_list
     38
     39  not_empty_list ::= value
     40                | not_empty_list "," value
     41                | not_empty_list ","
     42
     43  unknown_map_entry ::= STRING ":"
     44
     45  agent_syntax_map ::= "{" global_object "}"
     46
     47  global_object ::= "Control-agent" ":" "{" global_params "}"
     48               | global_object_comma
     49
     50  global_object_comma ::= global_object ","
     51
     52  global_params ::= global_param
     53               | global_params "," global_param
     54               | global_params ","
     55
     56  global_param ::= http_host
     57              | http_port
     58              | trust_anchor
     59              | cert_file
     60              | key_file
     61              | cert_required
     62              | authentication
     63              | control_sockets
     64              | hooks_libraries
     65              | loggers
     66              | user_context
     67              | comment
     68              | unknown_map_entry
     69
     70  http_host ::= "http-host" ":" STRING
     71
     72  http_port ::= "http-port" ":" INTEGER
     73
     74  trust_anchor ::= "trust-anchor" ":" STRING
     75
     76  cert_file ::= "cert-file" ":" STRING
     77
     78  key_file ::= "key-file" ":" STRING
     79
     80  cert_required ::= "cert-required" ":" BOOLEAN
     81
     82  user_context ::= "user-context" ":" map_value
     83
     84  comment ::= "comment" ":" STRING
     85
     86  hooks_libraries ::= "hooks-libraries" ":" "[" hooks_libraries_list "]"
     87
     88  hooks_libraries_list ::=
     89                      | not_empty_hooks_libraries_list
     90
     91  not_empty_hooks_libraries_list ::= hooks_library
     92                                | not_empty_hooks_libraries_list "," hooks_library
     93                                | not_empty_hooks_libraries_list ","
     94
     95  hooks_library ::= "{" hooks_params "}"
     96
     97  hooks_params ::= hooks_param
     98              | hooks_params "," hooks_param
     99              | hooks_params ","
    100              | unknown_map_entry
    101
    102  hooks_param ::= library
    103             | parameters
    104
    105  library ::= "library" ":" STRING
    106
    107  parameters ::= "parameters" ":" map_value
    108
    109  control_sockets ::= "control-sockets" ":" "{" control_sockets_params "}"
    110
    111  control_sockets_params ::= control_socket
    112                        | control_sockets_params "," control_socket
    113                        | control_sockets_params ","
    114
    115  control_socket ::= dhcp4_server_socket
    116                | dhcp6_server_socket
    117                | d2_server_socket
    118                | unknown_map_entry
    119
    120  dhcp4_server_socket ::= "dhcp4" ":" "{" control_socket_params "}"
    121
    122  dhcp6_server_socket ::= "dhcp6" ":" "{" control_socket_params "}"
    123
    124  d2_server_socket ::= "d2" ":" "{" control_socket_params "}"
    125
    126  control_socket_params ::= control_socket_param
    127                       | control_socket_params "," control_socket_param
    128                       | control_socket_params ","
    129
    130  control_socket_param ::= socket_name
    131                      | socket_type
    132                      | user_context
    133                      | comment
    134                      | unknown_map_entry
    135
    136  socket_name ::= "socket-name" ":" STRING
    137
    138  socket_type ::= "socket-type" ":" socket_type_value
    139
    140  socket_type_value ::= "unix"
    141
    142  authentication ::= "authentication" ":" "{" auth_params "}"
    143
    144  auth_params ::= auth_param
    145             | auth_params "," auth_param
    146             | auth_params ","
    147
    148  auth_param ::= auth_type
    149            | realm
    150            | directory
    151            | clients
    152            | comment
    153            | user_context
    154            | unknown_map_entry
    155
    156  auth_type ::= "type" ":" auth_type_value
    157
    158  auth_type_value ::= "basic"
    159
    160  realm ::= "realm" ":" STRING
    161
    162  directory ::= "directory" ":" STRING
    163
    164  clients ::= "clients" ":" "[" clients_list "]"
    165
    166  clients_list ::=
    167              | not_empty_clients_list
    168
    169  not_empty_clients_list ::= basic_auth
    170                        | not_empty_clients_list "," basic_auth
    171                        | not_empty_clients_list ","
    172
    173  basic_auth ::= "{" clients_params "}"
    174
    175  clients_params ::= clients_param
    176                | clients_params "," clients_param
    177                | clients_params ","
    178
    179  clients_param ::= user
    180               | user_file
    181               | password
    182               | password_file
    183               | user_context
    184               | comment
    185               | unknown_map_entry
    186
    187  user ::= "user" ":" STRING
    188
    189  user_file ::= "user-file" ":" STRING
    190
    191  password ::= "password" ":" STRING
    192
    193  password_file ::= "password-file" ":" STRING
    194
    195  loggers ::= "loggers" ":" "[" loggers_entries "]"
    196
    197  loggers_entries ::= logger_entry
    198                 | loggers_entries "," logger_entry
    199                 | loggers_entries ","
    200
    201  logger_entry ::= "{" logger_params "}"
    202
    203  logger_params ::= logger_param
    204               | logger_params "," logger_param
    205               | logger_params ","
    206
    207  logger_param ::= name
    208              | output_options_list
    209              | debuglevel
    210              | severity
    211              | user_context
    212              | comment
    213              | unknown_map_entry
    214
    215  name ::= "name" ":" STRING
    216
    217  debuglevel ::= "debuglevel" ":" INTEGER
    218
    219  severity ::= "severity" ":" STRING
    220
    221  output_options_list ::= "output_options" ":" "[" output_options_list_content "]"
    222
    223  output_options_list_content ::= output_entry
    224                             | output_options_list_content "," output_entry
    225                             | output_options_list_content ","
    226
    227  output_entry ::= "{" output_params_list "}"
    228
    229  output_params_list ::= output_params
    230                    | output_params_list "," output_params
    231                    | output_params_list ","
    232
    233  output_params ::= output
    234               | flush
    235               | maxsize
    236               | maxver
    237               | pattern
    238
    239  output ::= "output" ":" STRING
    240
    241  flush ::= "flush" ":" BOOLEAN
    242
    243  maxsize ::= "maxsize" ":" INTEGER
    244
    245  maxver ::= "maxver" ":" INTEGER
    246
    247  pattern ::= "pattern" ":" STRING

## BNF Grammar for DHCP-DDNS

This grammar is generated from `d2_parser.yy`. See The DHCP-DDNS Server for more details.

      1  Grammar
      2
      3  $accept ::= start EOF
      4
      5  start ::= TOPLEVEL_JSON sub_json
      6
      7  start ::= TOPLEVEL_DHCPDDNS syntax_map
      8
      9  start ::= SUB_DHCPDDNS sub_dhcpddns
     10
     11  start ::= SUB_TSIG_KEY sub_tsig_key
     12
     13  start ::= SUB_TSIG_KEYS sub_tsig_keys
     14
     15  start ::= SUB_DDNS_DOMAIN sub_ddns_domain
     16
     17  start ::= SUB_DDNS_DOMAINS sub_ddns_domains
     18
     19  start ::= SUB_DNS_SERVER sub_dns_server
     20
     21  start ::= SUB_DNS_SERVERS sub_dns_servers
     22
     23  start ::= SUB_HOOKS_LIBRARY sub_hooks_library
     24
     25  value ::= INTEGER
     26       | FLOAT
     27       | BOOLEAN
     28       | STRING
     29       | NULL
     30       | map2
     31       | list_generic
     32
     33  sub_json ::= value
     34
     35  map2 ::= "{" map_content "}"
     36
     37  map_value ::= map2
     38
     39  map_content ::=
     40             | not_empty_map
     41
     42  not_empty_map ::= STRING ":" value
     43               | not_empty_map "," STRING ":" value
     44               | not_empty_map ","
     45
     46  list_generic ::= "[" list_content "]"
     47
     48  list_content ::=
     49              | not_empty_list
     50
     51  not_empty_list ::= value
     52                | not_empty_list "," value
     53                | not_empty_list ","
     54
     55  unknown_map_entry ::= STRING ":"
     56
     57  syntax_map ::= "{" global_object "}"
     58
     59  global_object ::= "DhcpDdns" ":" "{" dhcpddns_params "}"
     60               | global_object_comma
     61
     62  global_object_comma ::= global_object ","
     63
     64  sub_dhcpddns ::= "{" dhcpddns_params "}"
     65
     66  dhcpddns_params ::= dhcpddns_param
     67                 | dhcpddns_params "," dhcpddns_param
     68                 | dhcpddns_params ","
     69
     70  dhcpddns_param ::= ip_address
     71                | port
     72                | dns_server_timeout
     73                | ncr_protocol
     74                | ncr_format
     75                | forward_ddns
     76                | reverse_ddns
     77                | tsig_keys
     78                | control_socket
     79                | hooks_libraries
     80                | loggers
     81                | user_context
     82                | comment
     83                | unknown_map_entry
     84
     85  ip_address ::= "ip-address" ":" STRING
     86
     87  port ::= "port" ":" INTEGER
     88
     89  dns_server_timeout ::= "dns-server-timeout" ":" INTEGER
     90
     91  ncr_protocol ::= "ncr-protocol" ":" ncr_protocol_value
     92
     93  ncr_protocol_value ::= "UDP"
     94                    | "TCP"
     95
     96  ncr_format ::= "ncr-format" ":" "JSON"
     97
     98  user_context ::= "user-context" ":" map_value
     99
    100  comment ::= "comment" ":" STRING
    101
    102  forward_ddns ::= "forward-ddns" ":" "{" ddns_mgr_params "}"
    103
    104  reverse_ddns ::= "reverse-ddns" ":" "{" ddns_mgr_params "}"
    105
    106  ddns_mgr_params ::=
    107                 | not_empty_ddns_mgr_params
    108
    109  not_empty_ddns_mgr_params ::= ddns_mgr_param
    110                           | ddns_mgr_params "," ddns_mgr_param
    111                           | ddns_mgr_params ","
    112
    113  ddns_mgr_param ::= ddns_domains
    114                | unknown_map_entry
    115
    116  ddns_domains ::= "ddns-domains" ":" "[" ddns_domain_list "]"
    117
    118  sub_ddns_domains ::= "[" ddns_domain_list "]"
    119
    120  ddns_domain_list ::=
    121                  | not_empty_ddns_domain_list
    122
    123  not_empty_ddns_domain_list ::= ddns_domain
    124                            | not_empty_ddns_domain_list "," ddns_domain
    125                            | not_empty_ddns_domain_list ","
    126
    127  ddns_domain ::= "{" ddns_domain_params "}"
    128
    129  sub_ddns_domain ::= "{" ddns_domain_params "}"
    130
    131  ddns_domain_params ::= ddns_domain_param
    132                    | ddns_domain_params "," ddns_domain_param
    133                    | ddns_domain_params ","
    134
    135  ddns_domain_param ::= ddns_domain_name
    136                   | ddns_key_name
    137                   | dns_servers
    138                   | user_context
    139                   | comment
    140                   | unknown_map_entry
    141
    142  ddns_domain_name ::= "name" ":" STRING
    143
    144  ddns_key_name ::= "key-name" ":" STRING
    145
    146  dns_servers ::= "dns-servers" ":" "[" dns_server_list "]"
    147
    148  sub_dns_servers ::= "[" dns_server_list "]"
    149
    150  dns_server_list ::= dns_server
    151                 | dns_server_list "," dns_server
    152                 | dns_server_list ","
    153
    154  dns_server ::= "{" dns_server_params "}"
    155
    156  sub_dns_server ::= "{" dns_server_params "}"
    157
    158  dns_server_params ::= dns_server_param
    159                   | dns_server_params "," dns_server_param
    160                   | dns_server_params ","
    161
    162  dns_server_param ::= dns_server_hostname
    163                  | dns_server_ip_address
    164                  | dns_server_port
    165                  | ddns_key_name
    166                  | user_context
    167                  | comment
    168                  | unknown_map_entry
    169
    170  dns_server_hostname ::= "hostname" ":" STRING
    171
    172  dns_server_ip_address ::= "ip-address" ":" STRING
    173
    174  dns_server_port ::= "port" ":" INTEGER
    175
    176  tsig_keys ::= "tsig-keys" ":" "[" tsig_keys_list "]"
    177
    178  sub_tsig_keys ::= "[" tsig_keys_list "]"
    179
    180  tsig_keys_list ::=
    181                | not_empty_tsig_keys_list
    182
    183  not_empty_tsig_keys_list ::= tsig_key
    184                          | not_empty_tsig_keys_list "," tsig_key
    185                          | not_empty_tsig_keys_list ","
    186
    187  tsig_key ::= "{" tsig_key_params "}"
    188
    189  sub_tsig_key ::= "{" tsig_key_params "}"
    190
    191  tsig_key_params ::= tsig_key_param
    192                 | tsig_key_params "," tsig_key_param
    193                 | tsig_key_params ","
    194
    195  tsig_key_param ::= tsig_key_name
    196                | tsig_key_algorithm
    197                | tsig_key_digest_bits
    198                | tsig_key_secret
    199                | user_context
    200                | comment
    201                | unknown_map_entry
    202
    203  tsig_key_name ::= "name" ":" STRING
    204
    205  tsig_key_algorithm ::= "algorithm" ":" STRING
    206
    207  tsig_key_digest_bits ::= "digest-bits" ":" INTEGER
    208
    209  tsig_key_secret ::= "secret" ":" STRING
    210
    211  control_socket ::= "control-socket" ":" "{" control_socket_params "}"
    212
    213  control_socket_params ::= control_socket_param
    214                       | control_socket_params "," control_socket_param
    215                       | control_socket_params ","
    216
    217  control_socket_param ::= control_socket_type
    218                      | control_socket_name
    219                      | user_context
    220                      | comment
    221                      | unknown_map_entry
    222
    223  control_socket_type ::= "socket-type" ":" STRING
    224
    225  control_socket_name ::= "socket-name" ":" STRING
    226
    227  hooks_libraries ::= "hooks-libraries" ":" "[" hooks_libraries_list "]"
    228
    229  hooks_libraries_list ::=
    230                      | not_empty_hooks_libraries_list
    231
    232  not_empty_hooks_libraries_list ::= hooks_library
    233                                | not_empty_hooks_libraries_list "," hooks_library
    234                                | not_empty_hooks_libraries_list ","
    235
    236  hooks_library ::= "{" hooks_params "}"
    237
    238  sub_hooks_library ::= "{" hooks_params "}"
    239
    240  hooks_params ::= hooks_param
    241              | hooks_params "," hooks_param
    242              | hooks_params ","
    243              | unknown_map_entry
    244
    245  hooks_param ::= library
    246             | parameters
    247
    248  library ::= "library" ":" STRING
    249
    250  parameters ::= "parameters" ":" map_value
    251
    252  loggers ::= "loggers" ":" "[" loggers_entries "]"
    253
    254  loggers_entries ::= logger_entry
    255                 | loggers_entries "," logger_entry
    256                 | loggers_entries ","
    257
    258  logger_entry ::= "{" logger_params "}"
    259
    260  logger_params ::= logger_param
    261               | logger_params "," logger_param
    262               | logger_params ","
    263
    264  logger_param ::= name
    265              | output_options_list
    266              | debuglevel
    267              | severity
    268              | user_context
    269              | comment
    270              | unknown_map_entry
    271
    272  name ::= "name" ":" STRING
    273
    274  debuglevel ::= "debuglevel" ":" INTEGER
    275
    276  severity ::= "severity" ":" STRING
    277
    278  output_options_list ::= "output_options" ":" "[" output_options_list_content "]"
    279
    280  output_options_list_content ::= output_entry
    281                             | output_options_list_content "," output_entry
    282                             | output_options_list_content ","
    283
    284  output_entry ::= "{" output_params_list "}"
    285
    286  output_params_list ::= output_params
    287                    | output_params_list "," output_params
    288                    | output_params_list ","
    289
    290  output_params ::= output
    291               | flush
    292               | maxsize
    293               | maxver
    294               | pattern
    295
    296  output ::= "output" ":" STRING
    297
    298  flush ::= "flush" ":" BOOLEAN
    299
    300  maxsize ::= "maxsize" ":" INTEGER
    301
    302  maxver ::= "maxver" ":" INTEGER
    303
    304  pattern ::= "pattern" ":" STRING

## BNF Grammar for the Kea NETCONF Agent

This grammar is generated from `netconf_parser.yy`. See YANG/NETCONF for more details.

      1  Grammar
      2
      3  $accept ::= start EOF
      4
      5  start ::= START_JSON json
      6
      7  start ::= START_NETCONF netconf_syntax_map
      8
      9  start ::= START_SUB_NETCONF sub_netconf
     10
     11  sub_netconf ::= "{" global_params "}"
     12
     13  json ::= value
     14
     15  value ::= INTEGER
     16       | FLOAT
     17       | BOOLEAN
     18       | STRING
     19       | NULL
     20       | map
     21       | list_generic
     22
     23  map ::= "{" map_content "}"
     24
     25  map_value ::= map
     26
     27  map_content ::=
     28             | not_empty_map
     29
     30  not_empty_map ::= STRING ":" value
     31               | not_empty_map "," STRING ":" value
     32               | not_empty_map ","
     33
     34  list_generic ::= "[" list_content "]"
     35
     36  list_content ::=
     37              | not_empty_list
     38
     39  not_empty_list ::= value
     40                | not_empty_list "," value
     41                | not_empty_list ","
     42
     43  unknown_map_entry ::= STRING ":"
     44
     45  netconf_syntax_map ::= "{" global_object "}"
     46
     47  global_object ::= "Netconf" ":" "{" global_params "}"
     48               | global_object_comma
     49
     50  global_object_comma ::= global_object ","
     51
     52  global_params ::=
     53               | not_empty_global_params
     54
     55  not_empty_global_params ::= global_param
     56                         | not_empty_global_params "," global_param
     57                         | not_empty_global_params ","
     58
     59  global_param ::= boot_update
     60              | subscribe_changes
     61              | validate_changes
     62              | managed_servers
     63              | hooks_libraries
     64              | loggers
     65              | user_context
     66              | comment
     67              | unknown_map_entry
     68
     69  boot_update ::= "boot-update" ":" BOOLEAN
     70
     71  subscribe_changes ::= "subscribe-changes" ":" BOOLEAN
     72
     73  validate_changes ::= "validate-changes" ":" BOOLEAN
     74
     75  user_context ::= "user-context" ":" map_value
     76
     77  comment ::= "comment" ":" STRING
     78
     79  hooks_libraries ::= "hooks-libraries" ":" "[" hooks_libraries_list "]"
     80
     81  hooks_libraries_list ::=
     82                      | not_empty_hooks_libraries_list
     83
     84  not_empty_hooks_libraries_list ::= hooks_library
     85                                | not_empty_hooks_libraries_list "," hooks_library
     86                                | not_empty_hooks_libraries_list ","
     87
     88  hooks_library ::= "{" hooks_params "}"
     89
     90  hooks_params ::= hooks_param
     91              | hooks_params "," hooks_param
     92              | hooks_params ","
     93              | unknown_map_entry
     94
     95  hooks_param ::= library
     96             | parameters
     97
     98  library ::= "library" ":" STRING
     99
    100  parameters ::= "parameters" ":" map_value
    101
    102  managed_servers ::= "managed-servers" ":" "{" servers_entries "}"
    103
    104  servers_entries ::=
    105                 | not_empty_servers_entries
    106
    107  not_empty_servers_entries ::= server_entry
    108                           | not_empty_servers_entries "," server_entry
    109                           | not_empty_servers_entries ","
    110
    111  server_entry ::= dhcp4_server
    112              | dhcp6_server
    113              | d2_server
    114              | ca_server
    115              | unknown_map_entry
    116
    117  dhcp4_server ::= "dhcp4" ":" "{" managed_server_params "}"
    118
    119  dhcp6_server ::= "dhcp6" ":" "{" managed_server_params "}"
    120
    121  d2_server ::= "d2" ":" "{" managed_server_params "}"
    122
    123  ca_server ::= "ca" ":" "{" managed_server_params "}"
    124
    125  managed_server_params ::= managed_server_param
    126                       | managed_server_params "," managed_server_param
    127                       | managed_server_params ","
    128
    129  managed_server_param ::= model
    130                      | boot_update
    131                      | subscribe_changes
    132                      | validate_changes
    133                      | control_socket
    134                      | user_context
    135                      | comment
    136                      | unknown_map_entry
    137
    138  model ::= "model" ":" STRING
    139
    140  control_socket ::= "control-socket" ":" "{" control_socket_params "}"
    141
    142  control_socket_params ::= control_socket_param
    143                       | control_socket_params "," control_socket_param
    144                       | control_socket_params ","
    145
    146  control_socket_param ::= socket_type
    147                      | socket_name
    148                      | socket_url
    149                      | user_context
    150                      | comment
    151                      | unknown_map_entry
    152
    153  socket_type ::= "socket-type" ":" socket_type_value
    154
    155  socket_type_value ::= "unix"
    156                   | "http"
    157                   | "stdout"
    158
    159  socket_name ::= "socket-name" ":" STRING
    160
    161  socket_url ::= "socket-url" ":" STRING
    162
    163  loggers ::= "loggers" ":" "[" loggers_entries "]"
    164
    165  loggers_entries ::= logger_entry
    166                 | loggers_entries "," logger_entry
    167                 | loggers_entries ","
    168
    169  logger_entry ::= "{" logger_params "}"
    170
    171  logger_params ::= logger_param
    172               | logger_params "," logger_param
    173               | logger_params ","
    174
    175  logger_param ::= name
    176              | output_options_list
    177              | debuglevel
    178              | severity
    179              | user_context
    180              | comment
    181              | unknown_map_entry
    182
    183  name ::= "name" ":" STRING
    184
    185  debuglevel ::= "debuglevel" ":" INTEGER
    186
    187  severity ::= "severity" ":" STRING
    188
    189  output_options_list ::= "output_options" ":" "[" output_options_list_content "]"
    190
    191  output_options_list_content ::= output_entry
    192                             | output_options_list_content "," output_entry
    193                             | output_options_list_content ","
    194
    195  output_entry ::= "{" output_params_list "}"
    196
    197  output_params_list ::= output_params
    198                    | output_params_list "," output_params
    199                    | output_params_list ","
    200
    201  output_params ::= output
    202               | flush
    203               | maxsize
    204               | maxver
    205               | pattern
    206
    207  output ::= "output" ":" STRING
    208
    209  flush ::= "flush" ":" BOOLEAN
    210
    211  maxsize ::= "maxsize" ":" INTEGER
    212
    213  maxver ::= "maxver" ":" INTEGER
    214
    215  pattern ::= "pattern" ":" STRING