# 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              | control_sockets
     106              | dhcp_queue_control
     107              | dhcp_ddns
     108              | echo_client_id
     109              | match_client_id
     110              | authoritative
     111              | next_server
     112              | server_hostname
     113              | boot_file_name
     114              | user_context
     115              | comment
     116              | sanity_checks
     117              | reservations
     118              | config_control
     119              | server_tag
     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_conflict_resolution_mode
     140              | ddns_ttl_percent
     141              | ddns_ttl
     142              | ddns_ttl_min
     143              | ddns_ttl_max
     144              | store_extended_info
     145              | statistic_default_sample_count
     146              | statistic_default_sample_age
     147              | dhcp_multi_threading
     148              | early_global_reservations_lookup
     149              | ip_reservations_unique
     150              | reservations_lookup_first
     151              | compatibility
     152              | parked_packet_limit
     153              | allocator
     154              | offer_lifetime
     155              | stash_agent_options
     156              | unknown_map_entry
     157
     158  valid_lifetime ::= "valid-lifetime" ":" INTEGER
     159
     160  min_valid_lifetime ::= "min-valid-lifetime" ":" INTEGER
     161
     162  max_valid_lifetime ::= "max-valid-lifetime" ":" INTEGER
     163
     164  renew_timer ::= "renew-timer" ":" INTEGER
     165
     166  rebind_timer ::= "rebind-timer" ":" INTEGER
     167
     168  calculate_tee_times ::= "calculate-tee-times" ":" BOOLEAN
     169
     170  t1_percent ::= "t1-percent" ":" FLOAT
     171
     172  t2_percent ::= "t2-percent" ":" FLOAT
     173
     174  cache_threshold ::= "cache-threshold" ":" FLOAT
     175
     176  cache_max_age ::= "cache-max-age" ":" INTEGER
     177
     178  decline_probation_period ::= "decline-probation-period" ":" INTEGER
     179
     180  server_tag ::= "server-tag" ":" STRING
     181
     182  parked_packet_limit ::= "parked-packet-limit" ":" INTEGER
     183
     184  allocator ::= "allocator" ":" STRING
     185
     186  echo_client_id ::= "echo-client-id" ":" BOOLEAN
     187
     188  match_client_id ::= "match-client-id" ":" BOOLEAN
     189
     190  authoritative ::= "authoritative" ":" BOOLEAN
     191
     192  ddns_send_updates ::= "ddns-send-updates" ":" BOOLEAN
     193
     194  ddns_override_no_update ::= "ddns-override-no-update" ":" BOOLEAN
     195
     196  ddns_override_client_update ::= "ddns-override-client-update" ":" BOOLEAN
     197
     198  ddns_replace_client_name ::= "ddns-replace-client-name" ":" ddns_replace_client_name_value
     199
     200  ddns_replace_client_name_value ::= "when-present"
     201                                | "never"
     202                                | "always"
     203                                | "when-not-present"
     204                                | BOOLEAN
     205
     206  ddns_generated_prefix ::= "ddns-generated-prefix" ":" STRING
     207
     208  ddns_qualifying_suffix ::= "ddns-qualifying-suffix" ":" STRING
     209
     210  ddns_update_on_renew ::= "ddns-update-on-renew" ":" BOOLEAN
     211
     212  ddns_use_conflict_resolution ::= "ddns-use-conflict-resolution" ":" BOOLEAN
     213
     214  ddns_conflict_resolution_mode ::= "ddns-conflict-resolution-mode" ":" ddns_conflict_resolution_mode_value
     215
     216  ddns_conflict_resolution_mode_value ::= "check-with-dhcid"
     217                                     | "no-check-with-dhcid"
     218                                     | "check-exists-with-dhcid"
     219                                     | "no-check-without-dhcid"
     220
     221  ddns_ttl_percent ::= "ddns-ttl-percent" ":" FLOAT
     222
     223  ddns_ttl ::= "ddns-ttl" ":" INTEGER
     224
     225  ddns_ttl_min ::= "ddns-ttl-min" ":" INTEGER
     226
     227  ddns_ttl_max ::= "ddns-ttl-mix" ":" INTEGER
     228
     229  hostname_char_set ::= "hostname-char-set" ":" STRING
     230
     231  hostname_char_replacement ::= "hostname-char-replacement" ":" STRING
     232
     233  store_extended_info ::= "store-extended-info" ":" BOOLEAN
     234
     235  statistic_default_sample_count ::= "statistic-default-sample-count" ":" INTEGER
     236
     237  statistic_default_sample_age ::= "statistic-default-sample-age" ":" INTEGER
     238
     239  early_global_reservations_lookup ::= "early-global-reservations-lookup" ":" BOOLEAN
     240
     241  ip_reservations_unique ::= "ip-reservations-unique" ":" BOOLEAN
     242
     243  reservations_lookup_first ::= "reservations-lookup-first" ":" BOOLEAN
     244
     245  offer_lifetime ::= "offer-lifetime" ":" INTEGER
     246
     247  stash_agent_options ::= "stash-agent-options" ":" BOOLEAN
     248
     249  interfaces_config ::= "interfaces-config" ":" "{" interfaces_config_params "}"
     250
     251  interfaces_config_params ::= interfaces_config_param
     252                          | interfaces_config_params "," interfaces_config_param
     253                          | interfaces_config_params ","
     254
     255  interfaces_config_param ::= interfaces_list
     256                         | dhcp_socket_type
     257                         | outbound_interface
     258                         | re_detect
     259                         | service_sockets_require_all
     260                         | service_sockets_retry_wait_time
     261                         | service_sockets_max_retries
     262                         | user_context
     263                         | comment
     264                         | unknown_map_entry
     265
     266  sub_interfaces4 ::= "{" interfaces_config_params "}"
     267
     268  interfaces_list ::= "interfaces" ":" list_strings
     269
     270  dhcp_socket_type ::= "dhcp-socket-type" ":" socket_type
     271
     272  socket_type ::= "raw"
     273             | "udp"
     274
     275  outbound_interface ::= "outbound-interface" ":" outbound_interface_value
     276
     277  outbound_interface_value ::= "same-as-inbound"
     278                          | "use-routing"
     279
     280  re_detect ::= "re-detect" ":" BOOLEAN
     281
     282  service_sockets_require_all ::= "service-sockets-require-all" ":" BOOLEAN
     283
     284  service_sockets_retry_wait_time ::= "service-sockets-retry-wait-time" ":" INTEGER
     285
     286  service_sockets_max_retries ::= "service-sockets-max-retries" ":" INTEGER
     287
     288  lease_database ::= "lease-database" ":" "{" database_map_params "}"
     289
     290  sanity_checks ::= "sanity-checks" ":" "{" sanity_checks_params "}"
     291
     292  sanity_checks_params ::= sanity_checks_param
     293                      | sanity_checks_params "," sanity_checks_param
     294                      | sanity_checks_params ","
     295
     296  sanity_checks_param ::= lease_checks
     297                     | extended_info_checks
     298
     299  lease_checks ::= "lease-checks" ":" STRING
     300
     301  extended_info_checks ::= "extended-info-checks" ":" STRING
     302
     303  hosts_database ::= "hosts-database" ":" "{" database_map_params "}"
     304
     305  hosts_databases ::= "hosts-databases" ":" "[" database_list "]"
     306
     307  database_list ::=
     308               | not_empty_database_list
     309
     310  not_empty_database_list ::= database
     311                         | not_empty_database_list "," database
     312                         | not_empty_database_list ","
     313
     314  database ::= "{" database_map_params "}"
     315
     316  database_map_params ::= database_map_param
     317                     | database_map_params "," database_map_param
     318                     | database_map_params ","
     319
     320  database_map_param ::= database_type
     321                    | user
     322                    | password
     323                    | host
     324                    | port
     325                    | name
     326                    | persist
     327                    | lfc_interval
     328                    | readonly
     329                    | connect_timeout
     330                    | read_timeout
     331                    | write_timeout
     332                    | tcp_user_timeout
     333                    | max_reconnect_tries
     334                    | reconnect_wait_time
     335                    | on_fail
     336                    | retry_on_startup
     337                    | max_row_errors
     338                    | trust_anchor
     339                    | cert_file
     340                    | key_file
     341                    | cipher_list
     342                    | unknown_map_entry
     343
     344  database_type ::= "type" ":" STRING
     345
     346  user ::= "user" ":" STRING
     347
     348  password ::= "password" ":" STRING
     349
     350  host ::= "host" ":" STRING
     351
     352  port ::= "port" ":" INTEGER
     353
     354  name ::= "name" ":" STRING
     355
     356  persist ::= "persist" ":" BOOLEAN
     357
     358  lfc_interval ::= "lfc-interval" ":" INTEGER
     359
     360  readonly ::= "readonly" ":" BOOLEAN
     361
     362  connect_timeout ::= "connect-timeout" ":" INTEGER
     363
     364  read_timeout ::= "read-timeout" ":" INTEGER
     365
     366  write_timeout ::= "write-timeout" ":" INTEGER
     367
     368  tcp_user_timeout ::= "tcp-user-timeout" ":" INTEGER
     369
     370  max_reconnect_tries ::= "max-reconnect-tries" ":" INTEGER
     371
     372  reconnect_wait_time ::= "reconnect-wait-time" ":" INTEGER
     373
     374  on_fail ::= "on-fail" ":" on_fail_mode
     375
     376  on_fail_mode ::= "stop-retry-exit"
     377              | "serve-retry-exit"
     378              | "serve-retry-continue"
     379
     380  retry_on_startup ::= "retry-on-startup" ":" BOOLEAN
     381
     382  max_row_errors ::= "max-row-errors" ":" INTEGER
     383
     384  trust_anchor ::= "trust-anchor" ":" STRING
     385
     386  cert_file ::= "cert-file" ":" STRING
     387
     388  key_file ::= "key-file" ":" STRING
     389
     390  cipher_list ::= "cipher-list" ":" STRING
     391
     392  host_reservation_identifiers ::= "host-reservation-identifiers" ":" "[" host_reservation_identifiers_list "]"
     393
     394  host_reservation_identifiers_list ::= host_reservation_identifier
     395                                   | host_reservation_identifiers_list "," host_reservation_identifier
     396                                   | host_reservation_identifiers_list ","
     397
     398  host_reservation_identifier ::= duid_id
     399                             | hw_address_id
     400                             | circuit_id
     401                             | client_id
     402                             | flex_id
     403
     404  duid_id ::= "duid"
     405
     406  hw_address_id ::= "hw-address"
     407
     408  circuit_id ::= "circuit-id"
     409
     410  client_id ::= "client-id"
     411
     412  flex_id ::= "flex-id"
     413
     414  dhcp_multi_threading ::= "multi-threading" ":" "{" multi_threading_params "}"
     415
     416  multi_threading_params ::= multi_threading_param
     417                        | multi_threading_params "," multi_threading_param
     418                        | multi_threading_params ","
     419
     420  multi_threading_param ::= enable_multi_threading
     421                       | thread_pool_size
     422                       | packet_queue_size
     423                       | user_context
     424                       | comment
     425                       | unknown_map_entry
     426
     427  enable_multi_threading ::= "enable-multi-threading" ":" BOOLEAN
     428
     429  thread_pool_size ::= "thread-pool-size" ":" INTEGER
     430
     431  packet_queue_size ::= "packet-queue-size" ":" INTEGER
     432
     433  hooks_libraries ::= "hooks-libraries" ":" "[" hooks_libraries_list "]"
     434
     435  hooks_libraries_list ::=
     436                      | not_empty_hooks_libraries_list
     437
     438  not_empty_hooks_libraries_list ::= hooks_library
     439                                | not_empty_hooks_libraries_list "," hooks_library
     440                                | not_empty_hooks_libraries_list ","
     441
     442  hooks_library ::= "{" hooks_params "}"
     443
     444  sub_hooks_library ::= "{" hooks_params "}"
     445
     446  hooks_params ::= hooks_param
     447              | hooks_params "," hooks_param
     448              | hooks_params ","
     449              | unknown_map_entry
     450
     451  hooks_param ::= library
     452             | parameters
     453
     454  library ::= "library" ":" STRING
     455
     456  parameters ::= "parameters" ":" map_value
     457
     458  expired_leases_processing ::= "expired-leases-processing" ":" "{" expired_leases_params "}"
     459
     460  expired_leases_params ::= expired_leases_param
     461                       | expired_leases_params "," expired_leases_param
     462                       | expired_leases_params ","
     463
     464  expired_leases_param ::= reclaim_timer_wait_time
     465                      | flush_reclaimed_timer_wait_time
     466                      | hold_reclaimed_time
     467                      | max_reclaim_leases
     468                      | max_reclaim_time
     469                      | unwarned_reclaim_cycles
     470
     471  reclaim_timer_wait_time ::= "reclaim-timer-wait-time" ":" INTEGER
     472
     473  flush_reclaimed_timer_wait_time ::= "flush-reclaimed-timer-wait-time" ":" INTEGER
     474
     475  hold_reclaimed_time ::= "hold-reclaimed-time" ":" INTEGER
     476
     477  max_reclaim_leases ::= "max-reclaim-leases" ":" INTEGER
     478
     479  max_reclaim_time ::= "max-reclaim-time" ":" INTEGER
     480
     481  unwarned_reclaim_cycles ::= "unwarned-reclaim-cycles" ":" INTEGER
     482
     483  subnet4_list ::= "subnet4" ":" "[" subnet4_list_content "]"
     484
     485  subnet4_list_content ::=
     486                      | not_empty_subnet4_list
     487
     488  not_empty_subnet4_list ::= subnet4
     489                        | not_empty_subnet4_list "," subnet4
     490                        | not_empty_subnet4_list ","
     491
     492  subnet4 ::= "{" subnet4_params "}"
     493
     494  sub_subnet4 ::= "{" subnet4_params "}"
     495
     496  subnet4_params ::= subnet4_param
     497                | subnet4_params "," subnet4_param
     498                | subnet4_params ","
     499
     500  subnet4_param ::= valid_lifetime
     501               | min_valid_lifetime
     502               | max_valid_lifetime
     503               | renew_timer
     504               | rebind_timer
     505               | option_data_list
     506               | pools_list
     507               | subnet
     508               | interface
     509               | id
     510               | client_class
     511               | network_client_classes
     512               | require_client_classes
     513               | evaluate_additional_classes
     514               | reservations
     515               | reservations_global
     516               | reservations_in_subnet
     517               | reservations_out_of_pool
     518               | relay
     519               | match_client_id
     520               | authoritative
     521               | next_server
     522               | server_hostname
     523               | boot_file_name
     524               | subnet_4o6_interface
     525               | subnet_4o6_interface_id
     526               | subnet_4o6_subnet
     527               | user_context
     528               | comment
     529               | calculate_tee_times
     530               | t1_percent
     531               | t2_percent
     532               | cache_threshold
     533               | cache_max_age
     534               | ddns_send_updates
     535               | ddns_override_no_update
     536               | ddns_override_client_update
     537               | ddns_replace_client_name
     538               | ddns_generated_prefix
     539               | ddns_qualifying_suffix
     540               | ddns_update_on_renew
     541               | ddns_use_conflict_resolution
     542               | ddns_conflict_resolution_mode
     543               | ddns_ttl_percent
     544               | ddns_ttl
     545               | ddns_ttl_min
     546               | ddns_ttl_max
     547               | hostname_char_set
     548               | hostname_char_replacement
     549               | store_extended_info
     550               | allocator
     551               | offer_lifetime
     552               | unknown_map_entry
     553
     554  subnet ::= "subnet" ":" STRING
     555
     556  subnet_4o6_interface ::= "4o6-interface" ":" STRING
     557
     558  subnet_4o6_interface_id ::= "4o6-interface-id" ":" STRING
     559
     560  subnet_4o6_subnet ::= "4o6-subnet" ":" STRING
     561
     562  interface ::= "interface" ":" STRING
     563
     564  client_class ::= "client-class" ":" STRING
     565
     566  network_client_classes ::= "client-classes" ":" list_strings
     567
     568  require_client_classes ::= "require-client-classes" ":" list_strings
     569
     570  evaluate_additional_classes ::= "evaluate-additional-classes" ":" list_strings
     571
     572  reservations_global ::= "reservations-global" ":" BOOLEAN
     573
     574  reservations_in_subnet ::= "reservations-in-subnet" ":" BOOLEAN
     575
     576  reservations_out_of_pool ::= "reservations-out-of-pool" ":" BOOLEAN
     577
     578  id ::= "id" ":" INTEGER
     579
     580  shared_networks ::= "shared-networks" ":" "[" shared_networks_content "]"
     581
     582  shared_networks_content ::=
     583                         | shared_networks_list
     584
     585  shared_networks_list ::= shared_network
     586                      | shared_networks_list "," shared_network
     587                      | shared_networks_list ","
     588
     589  shared_network ::= "{" shared_network_params "}"
     590
     591  shared_network_params ::= shared_network_param
     592                       | shared_network_params "," shared_network_param
     593                       | shared_network_params ","
     594
     595  shared_network_param ::= name
     596                      | subnet4_list
     597                      | interface
     598                      | renew_timer
     599                      | rebind_timer
     600                      | option_data_list
     601                      | match_client_id
     602                      | authoritative
     603                      | next_server
     604                      | server_hostname
     605                      | boot_file_name
     606                      | relay
     607                      | reservations_global
     608                      | reservations_in_subnet
     609                      | reservations_out_of_pool
     610                      | client_class
     611                      | network_client_classes
     612                      | require_client_classes
     613                      | evaluate_additional_classes
     614                      | valid_lifetime
     615                      | min_valid_lifetime
     616                      | max_valid_lifetime
     617                      | user_context
     618                      | comment
     619                      | calculate_tee_times
     620                      | t1_percent
     621                      | t2_percent
     622                      | cache_threshold
     623                      | cache_max_age
     624                      | ddns_send_updates
     625                      | ddns_override_no_update
     626                      | ddns_override_client_update
     627                      | ddns_replace_client_name
     628                      | ddns_generated_prefix
     629                      | ddns_qualifying_suffix
     630                      | ddns_update_on_renew
     631                      | ddns_use_conflict_resolution
     632                      | ddns_conflict_resolution_mode
     633                      | ddns_ttl_percent
     634                      | ddns_ttl
     635                      | ddns_ttl_min
     636                      | ddns_ttl_max
     637                      | hostname_char_set
     638                      | hostname_char_replacement
     639                      | store_extended_info
     640                      | allocator
     641                      | offer_lifetime
     642                      | unknown_map_entry
     643
     644  option_def_list ::= "option-def" ":" "[" option_def_list_content "]"
     645
     646  sub_option_def_list ::= "{" option_def_list "}"
     647
     648  option_def_list_content ::=
     649                         | not_empty_option_def_list
     650
     651  not_empty_option_def_list ::= option_def_entry
     652                           | not_empty_option_def_list "," option_def_entry
     653                           | not_empty_option_def_list ","
     654
     655  option_def_entry ::= "{" option_def_params "}"
     656
     657  sub_option_def ::= "{" option_def_params "}"
     658
     659  option_def_params ::=
     660                   | not_empty_option_def_params
     661
     662  not_empty_option_def_params ::= option_def_param
     663                             | not_empty_option_def_params "," option_def_param
     664                             | not_empty_option_def_params ","
     665
     666  option_def_param ::= option_def_name
     667                  | option_def_code
     668                  | option_def_type
     669                  | option_def_record_types
     670                  | option_def_space
     671                  | option_def_encapsulate
     672                  | option_def_array
     673                  | user_context
     674                  | comment
     675                  | unknown_map_entry
     676
     677  option_def_name ::= name
     678
     679  code ::= "code" ":" INTEGER
     680
     681  option_def_code ::= code
     682
     683  option_def_type ::= "type" ":" STRING
     684
     685  option_def_record_types ::= "record-types" ":" STRING
     686
     687  space ::= "space" ":" STRING
     688
     689  option_def_space ::= space
     690
     691  option_def_encapsulate ::= "encapsulate" ":" STRING
     692
     693  option_def_array ::= "array" ":" BOOLEAN
     694
     695  option_data_list ::= "option-data" ":" "[" option_data_list_content "]"
     696
     697  option_data_list_content ::=
     698                          | not_empty_option_data_list
     699
     700  not_empty_option_data_list ::= option_data_entry
     701                            | not_empty_option_data_list "," option_data_entry
     702                            | not_empty_option_data_list ","
     703
     704  option_data_entry ::= "{" option_data_params "}"
     705
     706  sub_option_data ::= "{" option_data_params "}"
     707
     708  option_data_params ::=
     709                    | not_empty_option_data_params
     710
     711  not_empty_option_data_params ::= option_data_param
     712                              | not_empty_option_data_params "," option_data_param
     713                              | not_empty_option_data_params ","
     714
     715  option_data_param ::= option_data_name
     716                   | option_data_data
     717                   | option_data_code
     718                   | option_data_space
     719                   | option_data_csv_format
     720                   | option_data_always_send
     721                   | option_data_never_send
     722                   | user_context
     723                   | comment
     724                   | option_data_client_classes
     725                   | unknown_map_entry
     726
     727  option_data_name ::= name
     728
     729  option_data_data ::= "data" ":" STRING
     730
     731  option_data_code ::= code
     732
     733  option_data_space ::= space
     734
     735  option_data_csv_format ::= "csv-format" ":" BOOLEAN
     736
     737  option_data_always_send ::= "always-send" ":" BOOLEAN
     738
     739  option_data_never_send ::= "never-send" ":" BOOLEAN
     740
     741  option_data_client_classes ::= "client-classes" ":" list_strings
     742
     743  pools_list ::= "pools" ":" "[" pools_list_content "]"
     744
     745  pools_list_content ::=
     746                    | not_empty_pools_list
     747
     748  not_empty_pools_list ::= pool_list_entry
     749                      | not_empty_pools_list "," pool_list_entry
     750                      | not_empty_pools_list ","
     751
     752  pool_list_entry ::= "{" pool_params "}"
     753
     754  sub_pool4 ::= "{" pool_params "}"
     755
     756  pool_params ::= pool_param
     757             | pool_params "," pool_param
     758             | pool_params ","
     759
     760  pool_param ::= pool_entry
     761            | pool_id
     762            | option_data_list
     763            | client_class
     764            | network_client_classes
     765            | require_client_classes
     766            | evaluate_additional_classes
     767            | ddns_send_updates
     768            | ddns_override_no_update
     769            | ddns_override_client_update
     770            | ddns_replace_client_name
     771            | ddns_generated_prefix
     772            | ddns_qualifying_suffix
     773            | ddns_update_on_renew
     774            | ddns_conflict_resolution_mode
     775            | ddns_ttl_percent
     776            | ddns_ttl
     777            | ddns_ttl_min
     778            | ddns_ttl_max
     779            | hostname_char_set
     780            | hostname_char_replacement
     781            | user_context
     782            | comment
     783            | unknown_map_entry
     784
     785  pool_entry ::= "pool" ":" STRING
     786
     787  pool_id ::= "pool-id" ":" INTEGER
     788
     789  user_context ::= "user-context" ":" map_value
     790
     791  comment ::= "comment" ":" STRING
     792
     793  reservations ::= "reservations" ":" "[" reservations_list "]"
     794
     795  reservations_list ::=
     796                   | not_empty_reservations_list
     797
     798  not_empty_reservations_list ::= reservation
     799                             | not_empty_reservations_list "," reservation
     800                             | not_empty_reservations_list ","
     801
     802  reservation ::= "{" reservation_params "}"
     803
     804  sub_reservation ::= "{" reservation_params "}"
     805
     806  reservation_params ::=
     807                    | not_empty_reservation_params
     808
     809  not_empty_reservation_params ::= reservation_param
     810                              | not_empty_reservation_params "," reservation_param
     811                              | not_empty_reservation_params ","
     812
     813  reservation_param ::= duid
     814                   | reservation_client_classes
     815                   | client_id_value
     816                   | circuit_id_value
     817                   | flex_id_value
     818                   | ip_address
     819                   | hw_address
     820                   | hostname
     821                   | option_data_list
     822                   | next_server
     823                   | server_hostname
     824                   | boot_file_name
     825                   | user_context
     826                   | comment
     827                   | unknown_map_entry
     828
     829  next_server ::= "next-server" ":" STRING
     830
     831  server_hostname ::= "server-hostname" ":" STRING
     832
     833  boot_file_name ::= "boot-file-name" ":" STRING
     834
     835  ip_address ::= "ip-address" ":" STRING
     836
     837  duid ::= "duid" ":" STRING
     838
     839  hw_address ::= "hw-address" ":" STRING
     840
     841  client_id_value ::= "client-id" ":" STRING
     842
     843  circuit_id_value ::= "circuit-id" ":" STRING
     844
     845  flex_id_value ::= "flex-id" ":" STRING
     846
     847  hostname ::= "hostname" ":" STRING
     848
     849  reservation_client_classes ::= "client-classes" ":" list_strings
     850
     851  relay ::= "relay" ":" "{" relay_map "}"
     852
     853  relay_map ::= ip_addresses
     854
     855  ip_addresses ::= "ip-addresses" ":" list_strings
     856
     857  client_classes ::= "client-classes" ":" "[" client_classes_list "]"
     858
     859  client_classes_list ::= client_class_entry
     860                     | client_classes_list "," client_class_entry
     861                     | client_classes_list ","
     862
     863  client_class_entry ::= "{" client_class_params "}"
     864
     865  client_class_params ::=
     866                     | not_empty_client_class_params
     867
     868  not_empty_client_class_params ::= client_class_param
     869                               | not_empty_client_class_params "," client_class_param
     870                               | not_empty_client_class_params ","
     871
     872  client_class_param ::= client_class_name
     873                    | client_class_test
     874                    | client_class_template_test
     875                    | only_if_required
     876                    | only_in_additional_list
     877                    | option_def_list
     878                    | option_data_list
     879                    | next_server
     880                    | server_hostname
     881                    | boot_file_name
     882                    | user_context
     883                    | comment
     884                    | unknown_map_entry
     885                    | valid_lifetime
     886                    | min_valid_lifetime
     887                    | max_valid_lifetime
     888                    | offer_lifetime
     889
     890  client_class_name ::= name
     891
     892  client_class_test ::= "test" ":" STRING
     893
     894  client_class_template_test ::= "template-test" ":" STRING
     895
     896  only_if_required ::= "only-if-required" ":" BOOLEAN
     897
     898  only_in_additional_list ::= "only-in-additional-list" ":" BOOLEAN
     899
     900  dhcp4o6_port ::= "dhcp4o6-port" ":" INTEGER
     901
     902  control_socket ::= "control-socket" ":" "{" control_socket_params "}"
     903
     904  control_sockets ::= "control-sockets" ":" "[" control_socket_list "]"
     905
     906  control_socket_list ::=
     907                     | not_empty_control_socket_list
     908
     909  not_empty_control_socket_list ::= control_socket_entry
     910                               | not_empty_control_socket_list "," control_socket_entry
     911                               | not_empty_control_socket_list ","
     912
     913  control_socket_entry ::= "{" control_socket_params "}"
     914
     915  control_socket_params ::= control_socket_param
     916                       | control_socket_params "," control_socket_param
     917                       | control_socket_params ","
     918
     919  control_socket_param ::= control_socket_type
     920                      | control_socket_name
     921                      | control_socket_address
     922                      | control_socket_port
     923                      | authentication
     924                      | trust_anchor
     925                      | cert_file
     926                      | key_file
     927                      | cert_required
     928                      | http_headers
     929                      | user_context
     930                      | comment
     931                      | unknown_map_entry
     932
     933  control_socket_type ::= "socket-type" ":" control_socket_type_value
     934
     935  control_socket_type_value ::= "unix"
     936                           | "http"
     937                           | "https"
     938
     939  control_socket_name ::= "socket-name" ":" STRING
     940
     941  control_socket_address ::= "socket-address" ":" STRING
     942
     943  control_socket_port ::= "socket-port" ":" INTEGER
     944
     945  cert_required ::= "cert-required" ":" BOOLEAN
     946
     947  http_headers ::= "http-headers" ":" "[" http_header_list "]"
     948
     949  http_header_list ::=
     950                  | not_empty_http_header_list
     951
     952  not_empty_http_header_list ::= http_header
     953                            | not_empty_http_header_list "," http_header
     954                            | not_empty_http_header_list ","
     955
     956  http_header ::= "{" http_header_params "}"
     957
     958  http_header_params ::= http_header_param
     959                    | http_header_params "," http_header_param
     960                    | http_header_params ","
     961
     962  http_header_param ::= name
     963                   | header_value
     964                   | user_context
     965                   | comment
     966                   | unknown_map_entry
     967
     968  header_value ::= "value" ":" STRING
     969
     970  authentication ::= "authentication" ":" "{" auth_params "}"
     971
     972  auth_params ::= auth_param
     973             | auth_params "," auth_param
     974             | auth_params ","
     975
     976  auth_param ::= auth_type
     977            | realm
     978            | directory
     979            | clients
     980            | comment
     981            | user_context
     982            | unknown_map_entry
     983
     984  auth_type ::= "type" ":" auth_type_value
     985
     986  auth_type_value ::= "basic"
     987
     988  realm ::= "realm" ":" STRING
     989
     990  directory ::= "directory" ":" STRING
     991
     992  clients ::= "clients" ":" "[" clients_list "]"
     993
     994  clients_list ::=
     995              | not_empty_clients_list
     996
     997  not_empty_clients_list ::= basic_auth
     998                        | not_empty_clients_list "," basic_auth
     999                        | not_empty_clients_list ","
    1000
    1001  basic_auth ::= "{" clients_params "}"
    1002
    1003  clients_params ::= clients_param
    1004                | clients_params "," clients_param
    1005                | clients_params ","
    1006
    1007  clients_param ::= user
    1008               | user_file
    1009               | password
    1010               | password_file
    1011               | user_context
    1012               | comment
    1013               | unknown_map_entry
    1014
    1015  user_file ::= "user-file" ":" STRING
    1016
    1017  password_file ::= "password-file" ":" STRING
    1018
    1019  dhcp_queue_control ::= "dhcp-queue-control" ":" "{" queue_control_params "}"
    1020
    1021  queue_control_params ::= queue_control_param
    1022                      | queue_control_params "," queue_control_param
    1023                      | queue_control_params ","
    1024
    1025  queue_control_param ::= enable_queue
    1026                     | queue_type
    1027                     | capacity
    1028                     | user_context
    1029                     | comment
    1030                     | arbitrary_map_entry
    1031
    1032  enable_queue ::= "enable-queue" ":" BOOLEAN
    1033
    1034  queue_type ::= "queue-type" ":" STRING
    1035
    1036  capacity ::= "capacity" ":" INTEGER
    1037
    1038  arbitrary_map_entry ::= STRING ":" value
    1039
    1040  dhcp_ddns ::= "dhcp-ddns" ":" "{" dhcp_ddns_params "}"
    1041
    1042  sub_dhcp_ddns ::= "{" dhcp_ddns_params "}"
    1043
    1044  dhcp_ddns_params ::= dhcp_ddns_param
    1045                  | dhcp_ddns_params "," dhcp_ddns_param
    1046                  | dhcp_ddns_params ","
    1047
    1048  dhcp_ddns_param ::= enable_updates
    1049                 | server_ip
    1050                 | server_port
    1051                 | sender_ip
    1052                 | sender_port
    1053                 | max_queue_size
    1054                 | ncr_protocol
    1055                 | ncr_format
    1056                 | user_context
    1057                 | comment
    1058                 | unknown_map_entry
    1059
    1060  enable_updates ::= "enable-updates" ":" BOOLEAN
    1061
    1062  server_ip ::= "server-ip" ":" STRING
    1063
    1064  server_port ::= "server-port" ":" INTEGER
    1065
    1066  sender_ip ::= "sender-ip" ":" STRING
    1067
    1068  sender_port ::= "sender-port" ":" INTEGER
    1069
    1070  max_queue_size ::= "max-queue-size" ":" INTEGER
    1071
    1072  ncr_protocol ::= "ncr-protocol" ":" ncr_protocol_value
    1073
    1074  ncr_protocol_value ::= "udp"
    1075                    | "tcp"
    1076
    1077  ncr_format ::= "ncr-format" ":" "JSON"
    1078
    1079  config_control ::= "config-control" ":" "{" config_control_params "}"
    1080
    1081  sub_config_control ::= "{" config_control_params "}"
    1082
    1083  config_control_params ::= config_control_param
    1084                       | config_control_params "," config_control_param
    1085                       | config_control_params ","
    1086
    1087  config_control_param ::= config_databases
    1088                      | config_fetch_wait_time
    1089
    1090  config_databases ::= "config-databases" ":" "[" database_list "]"
    1091
    1092  config_fetch_wait_time ::= "config-fetch-wait-time" ":" INTEGER
    1093
    1094  loggers ::= "loggers" ":" "[" loggers_entries "]"
    1095
    1096  loggers_entries ::= logger_entry
    1097                 | loggers_entries "," logger_entry
    1098                 | loggers_entries ","
    1099
    1100  logger_entry ::= "{" logger_params "}"
    1101
    1102  logger_params ::= logger_param
    1103               | logger_params "," logger_param
    1104               | logger_params ","
    1105
    1106  logger_param ::= name
    1107              | output_options_list
    1108              | debuglevel
    1109              | severity
    1110              | user_context
    1111              | comment
    1112              | unknown_map_entry
    1113
    1114  debuglevel ::= "debuglevel" ":" INTEGER
    1115
    1116  severity ::= "severity" ":" STRING
    1117
    1118  output_options_list ::= "output-options" ":" "[" output_options_list_content "]"
    1119
    1120  output_options_list_content ::= output_entry
    1121                             | output_options_list_content "," output_entry
    1122                             | output_options_list_content ","
    1123
    1124  output_entry ::= "{" output_params_list "}"
    1125
    1126  output_params_list ::= output_params
    1127                    | output_params_list "," output_params
    1128                    | output_params_list ","
    1129
    1130  output_params ::= output
    1131               | flush
    1132               | maxsize
    1133               | maxver
    1134               | pattern
    1135
    1136  output ::= "output" ":" STRING
    1137
    1138  flush ::= "flush" ":" BOOLEAN
    1139
    1140  maxsize ::= "maxsize" ":" INTEGER
    1141
    1142  maxver ::= "maxver" ":" INTEGER
    1143
    1144  pattern ::= "pattern" ":" STRING
    1145
    1146  compatibility ::= "compatibility" ":" "{" compatibility_params "}"
    1147
    1148  compatibility_params ::= compatibility_param
    1149                      | compatibility_params "," compatibility_param
    1150                      | compatibility_params ","
    1151
    1152  compatibility_param ::= lenient_option_parsing
    1153                     | ignore_dhcp_server_identifier
    1154                     | ignore_rai_link_selection
    1155                     | exclude_first_last_24
    1156                     | unknown_map_entry
    1157
    1158  lenient_option_parsing ::= "lenient-option-parsing" ":" BOOLEAN
    1159
    1160  ignore_dhcp_server_identifier ::= "ignore-dhcp-server-identifier" ":" BOOLEAN
    1161
    1162  ignore_rai_link_selection ::= "ignore-rai-link-selection" ":" BOOLEAN
    1163
    1164  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              | control_sockets
     115              | dhcp_queue_control
     116              | dhcp_ddns
     117              | user_context
     118              | comment
     119              | sanity_checks
     120              | reservations
     121              | config_control
     122              | server_tag
     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_conflict_resolution_mode
     143              | ddns_ttl_percent
     144              | ddns_ttl
     145              | ddns_ttl_min
     146              | ddns_ttl_max
     147              | store_extended_info
     148              | statistic_default_sample_count
     149              | statistic_default_sample_age
     150              | dhcp_multi_threading
     151              | early_global_reservations_lookup
     152              | ip_reservations_unique
     153              | reservations_lookup_first
     154              | compatibility
     155              | parked_packet_limit
     156              | allocator
     157              | pd_allocator
     158              | unknown_map_entry
     159
     160  data_directory ::= "data-directory" ":" STRING
     161
     162  preferred_lifetime ::= "preferred-lifetime" ":" INTEGER
     163
     164  min_preferred_lifetime ::= "min-preferred-lifetime" ":" INTEGER
     165
     166  max_preferred_lifetime ::= "max-preferred-lifetime" ":" INTEGER
     167
     168  valid_lifetime ::= "valid-lifetime" ":" INTEGER
     169
     170  min_valid_lifetime ::= "min-valid-lifetime" ":" INTEGER
     171
     172  max_valid_lifetime ::= "max-valid-lifetime" ":" INTEGER
     173
     174  renew_timer ::= "renew-timer" ":" INTEGER
     175
     176  rebind_timer ::= "rebind-timer" ":" INTEGER
     177
     178  calculate_tee_times ::= "calculate-tee-times" ":" BOOLEAN
     179
     180  t1_percent ::= "t1-percent" ":" FLOAT
     181
     182  t2_percent ::= "t2-percent" ":" FLOAT
     183
     184  cache_threshold ::= "cache-threshold" ":" FLOAT
     185
     186  cache_max_age ::= "cache-max-age" ":" INTEGER
     187
     188  decline_probation_period ::= "decline-probation-period" ":" INTEGER
     189
     190  ddns_send_updates ::= "ddns-send-updates" ":" BOOLEAN
     191
     192  ddns_override_no_update ::= "ddns-override-no-update" ":" BOOLEAN
     193
     194  ddns_override_client_update ::= "ddns-override-client-update" ":" BOOLEAN
     195
     196  ddns_replace_client_name ::= "ddns-replace-client-name" ":" ddns_replace_client_name_value
     197
     198  ddns_replace_client_name_value ::= "when-present"
     199                                | "never"
     200                                | "always"
     201                                | "when-not-present"
     202                                | BOOLEAN
     203
     204  ddns_generated_prefix ::= "ddns-generated-prefix" ":" STRING
     205
     206  ddns_qualifying_suffix ::= "ddns-qualifying-suffix" ":" STRING
     207
     208  ddns_update_on_renew ::= "ddns-update-on-renew" ":" BOOLEAN
     209
     210  ddns_use_conflict_resolution ::= "ddns-use-conflict-resolution" ":" BOOLEAN
     211
     212  ddns_conflict_resolution_mode ::= "ddns-conflict-resolution-mode" ":" ddns_conflict_resolution_mode_value
     213
     214  ddns_conflict_resolution_mode_value ::= "check-with-dhcid"
     215                                     | "no-check-with-dhcid"
     216                                     | "check-exists-with-dhcid"
     217                                     | "no-check-without-dhcid"
     218
     219  ddns_ttl_percent ::= "ddns-ttl-percent" ":" FLOAT
     220
     221  ddns_ttl ::= "ddns-ttl" ":" INTEGER
     222
     223  ddns_ttl_min ::= "ddns-ttl-min" ":" INTEGER
     224
     225  ddns_ttl_max ::= "ddns-ttl-mix" ":" INTEGER
     226
     227  hostname_char_set ::= "hostname-char-set" ":" STRING
     228
     229  hostname_char_replacement ::= "hostname-char-replacement" ":" STRING
     230
     231  store_extended_info ::= "store-extended-info" ":" BOOLEAN
     232
     233  statistic_default_sample_count ::= "statistic-default-sample-count" ":" INTEGER
     234
     235  statistic_default_sample_age ::= "statistic-default-sample-age" ":" INTEGER
     236
     237  server_tag ::= "server-tag" ":" STRING
     238
     239  parked_packet_limit ::= "parked-packet-limit" ":" INTEGER
     240
     241  allocator ::= "allocator" ":" STRING
     242
     243  pd_allocator ::= "pd-allocator" ":" STRING
     244
     245  early_global_reservations_lookup ::= "early-global-reservations-lookup" ":" BOOLEAN
     246
     247  ip_reservations_unique ::= "ip-reservations-unique" ":" BOOLEAN
     248
     249  reservations_lookup_first ::= "reservations-lookup-first" ":" BOOLEAN
     250
     251  interfaces_config ::= "interfaces-config" ":" "{" interfaces_config_params "}"
     252
     253  sub_interfaces6 ::= "{" interfaces_config_params "}"
     254
     255  interfaces_config_params ::= interfaces_config_param
     256                          | interfaces_config_params "," interfaces_config_param
     257                          | interfaces_config_params ","
     258
     259  interfaces_config_param ::= interfaces_list
     260                         | re_detect
     261                         | service_sockets_require_all
     262                         | service_sockets_retry_wait_time
     263                         | service_sockets_max_retries
     264                         | user_context
     265                         | comment
     266                         | unknown_map_entry
     267
     268  interfaces_list ::= "interfaces" ":" list_strings
     269
     270  re_detect ::= "re-detect" ":" BOOLEAN
     271
     272  service_sockets_require_all ::= "service-sockets-require-all" ":" BOOLEAN
     273
     274  service_sockets_retry_wait_time ::= "service-sockets-retry-wait-time" ":" INTEGER
     275
     276  service_sockets_max_retries ::= "service-sockets-max-retries" ":" INTEGER
     277
     278  lease_database ::= "lease-database" ":" "{" database_map_params "}"
     279
     280  hosts_database ::= "hosts-database" ":" "{" database_map_params "}"
     281
     282  hosts_databases ::= "hosts-databases" ":" "[" database_list "]"
     283
     284  database_list ::=
     285               | not_empty_database_list
     286
     287  not_empty_database_list ::= database
     288                         | not_empty_database_list "," database
     289                         | not_empty_database_list ","
     290
     291  database ::= "{" database_map_params "}"
     292
     293  database_map_params ::= database_map_param
     294                     | database_map_params "," database_map_param
     295                     | database_map_params ","
     296
     297  database_map_param ::= database_type
     298                    | user
     299                    | password
     300                    | host
     301                    | port
     302                    | name
     303                    | persist
     304                    | lfc_interval
     305                    | readonly
     306                    | connect_timeout
     307                    | read_timeout
     308                    | write_timeout
     309                    | tcp_user_timeout
     310                    | max_reconnect_tries
     311                    | reconnect_wait_time
     312                    | on_fail
     313                    | retry_on_startup
     314                    | max_row_errors
     315                    | trust_anchor
     316                    | cert_file
     317                    | key_file
     318                    | cipher_list
     319                    | unknown_map_entry
     320
     321  database_type ::= "type" ":" STRING
     322
     323  user ::= "user" ":" STRING
     324
     325  password ::= "password" ":" STRING
     326
     327  host ::= "host" ":" STRING
     328
     329  port ::= "port" ":" INTEGER
     330
     331  name ::= "name" ":" STRING
     332
     333  persist ::= "persist" ":" BOOLEAN
     334
     335  lfc_interval ::= "lfc-interval" ":" INTEGER
     336
     337  readonly ::= "readonly" ":" BOOLEAN
     338
     339  connect_timeout ::= "connect-timeout" ":" INTEGER
     340
     341  read_timeout ::= "read-timeout" ":" INTEGER
     342
     343  write_timeout ::= "write-timeout" ":" INTEGER
     344
     345  tcp_user_timeout ::= "tcp-user-timeout" ":" INTEGER
     346
     347  reconnect_wait_time ::= "reconnect-wait-time" ":" INTEGER
     348
     349  on_fail ::= "on-fail" ":" on_fail_mode
     350
     351  on_fail_mode ::= "stop-retry-exit"
     352              | "serve-retry-exit"
     353              | "serve-retry-continue"
     354
     355  retry_on_startup ::= "retry-on-startup" ":" BOOLEAN
     356
     357  max_row_errors ::= "max-row-errors" ":" INTEGER
     358
     359  max_reconnect_tries ::= "max-reconnect-tries" ":" INTEGER
     360
     361  trust_anchor ::= "trust-anchor" ":" STRING
     362
     363  cert_file ::= "cert-file" ":" STRING
     364
     365  key_file ::= "key-file" ":" STRING
     366
     367  cipher_list ::= "cipher-list" ":" STRING
     368
     369  sanity_checks ::= "sanity-checks" ":" "{" sanity_checks_params "}"
     370
     371  sanity_checks_params ::= sanity_checks_param
     372                      | sanity_checks_params "," sanity_checks_param
     373                      | sanity_checks_params ","
     374
     375  sanity_checks_param ::= lease_checks
     376                     | extended_info_checks
     377
     378  lease_checks ::= "lease-checks" ":" STRING
     379
     380  extended_info_checks ::= "extended-info-checks" ":" STRING
     381
     382  mac_sources ::= "mac-sources" ":" "[" mac_sources_list "]"
     383
     384  mac_sources_list ::= mac_sources_value
     385                  | mac_sources_list "," mac_sources_value
     386                  | mac_sources_list ","
     387
     388  mac_sources_value ::= duid_id
     389                   | string_id
     390
     391  duid_id ::= "duid"
     392
     393  string_id ::= STRING
     394
     395  host_reservation_identifiers ::= "host-reservation-identifiers" ":" "[" host_reservation_identifiers_list "]"
     396
     397  host_reservation_identifiers_list ::= host_reservation_identifier
     398                                   | host_reservation_identifiers_list "," host_reservation_identifier
     399                                   | host_reservation_identifiers_list ","
     400
     401  host_reservation_identifier ::= duid_id
     402                             | hw_address_id
     403                             | flex_id
     404
     405  hw_address_id ::= "hw-address"
     406
     407  flex_id ::= "flex-id"
     408
     409  relay_supplied_options ::= "relay-supplied-options" ":" "[" list_content "]"
     410
     411  dhcp_multi_threading ::= "multi-threading" ":" "{" multi_threading_params "}"
     412
     413  multi_threading_params ::= multi_threading_param
     414                        | multi_threading_params "," multi_threading_param
     415                        | multi_threading_params ","
     416
     417  multi_threading_param ::= enable_multi_threading
     418                       | thread_pool_size
     419                       | packet_queue_size
     420                       | user_context
     421                       | comment
     422                       | unknown_map_entry
     423
     424  enable_multi_threading ::= "enable-multi-threading" ":" BOOLEAN
     425
     426  thread_pool_size ::= "thread-pool-size" ":" INTEGER
     427
     428  packet_queue_size ::= "packet-queue-size" ":" INTEGER
     429
     430  hooks_libraries ::= "hooks-libraries" ":" "[" hooks_libraries_list "]"
     431
     432  hooks_libraries_list ::=
     433                      | not_empty_hooks_libraries_list
     434
     435  not_empty_hooks_libraries_list ::= hooks_library
     436                                | not_empty_hooks_libraries_list "," hooks_library
     437                                | not_empty_hooks_libraries_list ","
     438
     439  hooks_library ::= "{" hooks_params "}"
     440
     441  sub_hooks_library ::= "{" hooks_params "}"
     442
     443  hooks_params ::= hooks_param
     444              | hooks_params "," hooks_param
     445              | hooks_params ","
     446              | unknown_map_entry
     447
     448  hooks_param ::= library
     449             | parameters
     450
     451  library ::= "library" ":" STRING
     452
     453  parameters ::= "parameters" ":" map_value
     454
     455  expired_leases_processing ::= "expired-leases-processing" ":" "{" expired_leases_params "}"
     456
     457  expired_leases_params ::= expired_leases_param
     458                       | expired_leases_params "," expired_leases_param
     459                       | expired_leases_params ","
     460
     461  expired_leases_param ::= reclaim_timer_wait_time
     462                      | flush_reclaimed_timer_wait_time
     463                      | hold_reclaimed_time
     464                      | max_reclaim_leases
     465                      | max_reclaim_time
     466                      | unwarned_reclaim_cycles
     467
     468  reclaim_timer_wait_time ::= "reclaim-timer-wait-time" ":" INTEGER
     469
     470  flush_reclaimed_timer_wait_time ::= "flush-reclaimed-timer-wait-time" ":" INTEGER
     471
     472  hold_reclaimed_time ::= "hold-reclaimed-time" ":" INTEGER
     473
     474  max_reclaim_leases ::= "max-reclaim-leases" ":" INTEGER
     475
     476  max_reclaim_time ::= "max-reclaim-time" ":" INTEGER
     477
     478  unwarned_reclaim_cycles ::= "unwarned-reclaim-cycles" ":" INTEGER
     479
     480  subnet6_list ::= "subnet6" ":" "[" subnet6_list_content "]"
     481
     482  subnet6_list_content ::=
     483                      | not_empty_subnet6_list
     484
     485  not_empty_subnet6_list ::= subnet6
     486                        | not_empty_subnet6_list "," subnet6
     487                        | not_empty_subnet6_list ","
     488
     489  subnet6 ::= "{" subnet6_params "}"
     490
     491  sub_subnet6 ::= "{" subnet6_params "}"
     492
     493  subnet6_params ::= subnet6_param
     494                | subnet6_params "," subnet6_param
     495                | subnet6_params ","
     496
     497  subnet6_param ::= preferred_lifetime
     498               | min_preferred_lifetime
     499               | max_preferred_lifetime
     500               | valid_lifetime
     501               | min_valid_lifetime
     502               | max_valid_lifetime
     503               | renew_timer
     504               | rebind_timer
     505               | option_data_list
     506               | pools_list
     507               | pd_pools_list
     508               | subnet
     509               | interface
     510               | interface_id
     511               | id
     512               | rapid_commit
     513               | client_class
     514               | network_client_classes
     515               | require_client_classes
     516               | evaluate_additional_classes
     517               | reservations
     518               | reservations_global
     519               | reservations_in_subnet
     520               | reservations_out_of_pool
     521               | relay
     522               | user_context
     523               | comment
     524               | calculate_tee_times
     525               | t1_percent
     526               | t2_percent
     527               | cache_threshold
     528               | cache_max_age
     529               | hostname_char_set
     530               | hostname_char_replacement
     531               | ddns_send_updates
     532               | ddns_override_no_update
     533               | ddns_override_client_update
     534               | ddns_replace_client_name
     535               | ddns_generated_prefix
     536               | ddns_qualifying_suffix
     537               | ddns_update_on_renew
     538               | ddns_use_conflict_resolution
     539               | ddns_conflict_resolution_mode
     540               | ddns_ttl_percent
     541               | ddns_ttl
     542               | ddns_ttl_min
     543               | ddns_ttl_max
     544               | store_extended_info
     545               | allocator
     546               | pd_allocator
     547               | unknown_map_entry
     548
     549  subnet ::= "subnet" ":" STRING
     550
     551  interface ::= "interface" ":" STRING
     552
     553  interface_id ::= "interface-id" ":" STRING
     554
     555  client_class ::= "client-class" ":" STRING
     556
     557  network_client_classes ::= "client-classes" ":" list_strings
     558
     559  require_client_classes ::= "require-client-classes" ":" list_strings
     560
     561  evaluate_additional_classes ::= "evaluate-additional-classes" ":" list_strings
     562
     563  reservations_global ::= "reservations-global" ":" BOOLEAN
     564
     565  reservations_in_subnet ::= "reservations-in-subnet" ":" BOOLEAN
     566
     567  reservations_out_of_pool ::= "reservations-out-of-pool" ":" BOOLEAN
     568
     569  id ::= "id" ":" INTEGER
     570
     571  rapid_commit ::= "rapid-commit" ":" BOOLEAN
     572
     573  shared_networks ::= "shared-networks" ":" "[" shared_networks_content "]"
     574
     575  shared_networks_content ::=
     576                         | shared_networks_list
     577
     578  shared_networks_list ::= shared_network
     579                      | shared_networks_list "," shared_network
     580                      | shared_networks_list ","
     581
     582  shared_network ::= "{" shared_network_params "}"
     583
     584  shared_network_params ::= shared_network_param
     585                       | shared_network_params "," shared_network_param
     586                       | shared_network_params ","
     587
     588  shared_network_param ::= name
     589                      | subnet6_list
     590                      | interface
     591                      | interface_id
     592                      | renew_timer
     593                      | rebind_timer
     594                      | option_data_list
     595                      | relay
     596                      | reservations_global
     597                      | reservations_in_subnet
     598                      | reservations_out_of_pool
     599                      | client_class
     600                      | network_client_classes
     601                      | require_client_classes
     602                      | evaluate_additional_classes
     603                      | preferred_lifetime
     604                      | min_preferred_lifetime
     605                      | max_preferred_lifetime
     606                      | rapid_commit
     607                      | valid_lifetime
     608                      | min_valid_lifetime
     609                      | max_valid_lifetime
     610                      | user_context
     611                      | comment
     612                      | calculate_tee_times
     613                      | t1_percent
     614                      | t2_percent
     615                      | cache_threshold
     616                      | cache_max_age
     617                      | hostname_char_set
     618                      | hostname_char_replacement
     619                      | ddns_send_updates
     620                      | ddns_override_no_update
     621                      | ddns_override_client_update
     622                      | ddns_replace_client_name
     623                      | ddns_generated_prefix
     624                      | ddns_qualifying_suffix
     625                      | ddns_update_on_renew
     626                      | ddns_use_conflict_resolution
     627                      | ddns_conflict_resolution_mode
     628                      | ddns_ttl_percent
     629                      | ddns_ttl
     630                      | ddns_ttl_min
     631                      | ddns_ttl_max
     632                      | store_extended_info
     633                      | allocator
     634                      | pd_allocator
     635                      | unknown_map_entry
     636
     637  option_def_list ::= "option-def" ":" "[" option_def_list_content "]"
     638
     639  sub_option_def_list ::= "{" option_def_list "}"
     640
     641  option_def_list_content ::=
     642                         | not_empty_option_def_list
     643
     644  not_empty_option_def_list ::= option_def_entry
     645                           | not_empty_option_def_list "," option_def_entry
     646                           | not_empty_option_def_list ","
     647
     648  option_def_entry ::= "{" option_def_params "}"
     649
     650  sub_option_def ::= "{" option_def_params "}"
     651
     652  option_def_params ::=
     653                   | not_empty_option_def_params
     654
     655  not_empty_option_def_params ::= option_def_param
     656                             | not_empty_option_def_params "," option_def_param
     657                             | not_empty_option_def_params ","
     658
     659  option_def_param ::= option_def_name
     660                  | option_def_code
     661                  | option_def_type
     662                  | option_def_record_types
     663                  | option_def_space
     664                  | option_def_encapsulate
     665                  | option_def_array
     666                  | user_context
     667                  | comment
     668                  | unknown_map_entry
     669
     670  option_def_name ::= name
     671
     672  code ::= "code" ":" INTEGER
     673
     674  option_def_code ::= code
     675
     676  option_def_type ::= "type" ":" STRING
     677
     678  option_def_record_types ::= "record-types" ":" STRING
     679
     680  space ::= "space" ":" STRING
     681
     682  option_def_space ::= space
     683
     684  option_def_encapsulate ::= "encapsulate" ":" STRING
     685
     686  option_def_array ::= "array" ":" BOOLEAN
     687
     688  option_data_list ::= "option-data" ":" "[" option_data_list_content "]"
     689
     690  option_data_list_content ::=
     691                          | not_empty_option_data_list
     692
     693  not_empty_option_data_list ::= option_data_entry
     694                            | not_empty_option_data_list "," option_data_entry
     695                            | not_empty_option_data_list ","
     696
     697  option_data_entry ::= "{" option_data_params "}"
     698
     699  sub_option_data ::= "{" option_data_params "}"
     700
     701  option_data_params ::=
     702                    | not_empty_option_data_params
     703
     704  not_empty_option_data_params ::= option_data_param
     705                              | not_empty_option_data_params "," option_data_param
     706                              | not_empty_option_data_params ","
     707
     708  option_data_param ::= option_data_name
     709                   | option_data_data
     710                   | option_data_code
     711                   | option_data_space
     712                   | option_data_csv_format
     713                   | option_data_always_send
     714                   | option_data_never_send
     715                   | user_context
     716                   | comment
     717                   | option_data_client_classes
     718                   | unknown_map_entry
     719
     720  option_data_name ::= name
     721
     722  option_data_data ::= "data" ":" STRING
     723
     724  option_data_code ::= code
     725
     726  option_data_space ::= space
     727
     728  option_data_csv_format ::= "csv-format" ":" BOOLEAN
     729
     730  option_data_always_send ::= "always-send" ":" BOOLEAN
     731
     732  option_data_never_send ::= "never-send" ":" BOOLEAN
     733
     734  option_data_client_classes ::= "client-classes" ":" list_strings
     735
     736  pools_list ::= "pools" ":" "[" pools_list_content "]"
     737
     738  pools_list_content ::=
     739                    | not_empty_pools_list
     740
     741  not_empty_pools_list ::= pool_list_entry
     742                      | not_empty_pools_list "," pool_list_entry
     743                      | not_empty_pools_list ","
     744
     745  pool_list_entry ::= "{" pool_params "}"
     746
     747  sub_pool6 ::= "{" pool_params "}"
     748
     749  pool_params ::= pool_param
     750             | pool_params "," pool_param
     751             | pool_params ","
     752
     753  pool_param ::= pool_entry
     754            | pool_id
     755            | option_data_list
     756            | client_class
     757            | network_client_classes
     758            | require_client_classes
     759            | evaluate_additional_classes
     760            | ddns_send_updates
     761            | ddns_override_no_update
     762            | ddns_override_client_update
     763            | ddns_replace_client_name
     764            | ddns_generated_prefix
     765            | ddns_qualifying_suffix
     766            | ddns_update_on_renew
     767            | ddns_conflict_resolution_mode
     768            | ddns_ttl_percent
     769            | ddns_ttl
     770            | ddns_ttl_min
     771            | ddns_ttl_max
     772            | hostname_char_set
     773            | hostname_char_replacement
     774            | user_context
     775            | comment
     776            | unknown_map_entry
     777
     778  pool_entry ::= "pool" ":" STRING
     779
     780  pool_id ::= "pool-id" ":" INTEGER
     781
     782  user_context ::= "user-context" ":" map_value
     783
     784  comment ::= "comment" ":" STRING
     785
     786  pd_pools_list ::= "pd-pools" ":" "[" pd_pools_list_content "]"
     787
     788  pd_pools_list_content ::=
     789                       | not_empty_pd_pools_list
     790
     791  not_empty_pd_pools_list ::= pd_pool_entry
     792                         | not_empty_pd_pools_list "," pd_pool_entry
     793                         | not_empty_pd_pools_list ","
     794
     795  pd_pool_entry ::= "{" pd_pool_params "}"
     796
     797  sub_pd_pool ::= "{" pd_pool_params "}"
     798
     799  pd_pool_params ::= pd_pool_param
     800                | pd_pool_params "," pd_pool_param
     801                | pd_pool_params ","
     802
     803  pd_pool_param ::= pd_prefix
     804               | pd_prefix_len
     805               | pd_delegated_len
     806               | pool_id
     807               | option_data_list
     808               | client_class
     809               | network_client_classes
     810               | require_client_classes
     811               | evaluate_additional_classes
     812               | excluded_prefix
     813               | excluded_prefix_len
     814               | user_context
     815               | comment
     816               | unknown_map_entry
     817
     818  pd_prefix ::= "prefix" ":" STRING
     819
     820  pd_prefix_len ::= "prefix-len" ":" INTEGER
     821
     822  excluded_prefix ::= "excluded-prefix" ":" STRING
     823
     824  excluded_prefix_len ::= "excluded-prefix-len" ":" INTEGER
     825
     826  pd_delegated_len ::= "delegated-len" ":" INTEGER
     827
     828  reservations ::= "reservations" ":" "[" reservations_list "]"
     829
     830  reservations_list ::=
     831                   | not_empty_reservations_list
     832
     833  not_empty_reservations_list ::= reservation
     834                             | not_empty_reservations_list "," reservation
     835                             | not_empty_reservations_list ","
     836
     837  reservation ::= "{" reservation_params "}"
     838
     839  sub_reservation ::= "{" reservation_params "}"
     840
     841  reservation_params ::=
     842                    | not_empty_reservation_params
     843
     844  not_empty_reservation_params ::= reservation_param
     845                              | not_empty_reservation_params "," reservation_param
     846                              | not_empty_reservation_params ","
     847
     848  reservation_param ::= duid
     849                   | reservation_client_classes
     850                   | ip_addresses
     851                   | prefixes
     852                   | excluded_prefixes
     853                   | hw_address
     854                   | hostname
     855                   | flex_id_value
     856                   | option_data_list
     857                   | user_context
     858                   | comment
     859                   | unknown_map_entry
     860
     861  ip_addresses ::= "ip-addresses" ":" list_strings
     862
     863  prefixes ::= "prefixes" ":" list_strings
     864
     865  excluded_prefixes ::= "excluded-prefixes" ":" list_strings
     866
     867  duid ::= "duid" ":" STRING
     868
     869  hw_address ::= "hw-address" ":" STRING
     870
     871  hostname ::= "hostname" ":" STRING
     872
     873  flex_id_value ::= "flex-id" ":" STRING
     874
     875  reservation_client_classes ::= "client-classes" ":" list_strings
     876
     877  relay ::= "relay" ":" "{" relay_map "}"
     878
     879  relay_map ::= ip_addresses
     880
     881  client_classes ::= "client-classes" ":" "[" client_classes_list "]"
     882
     883  client_classes_list ::= client_class_entry
     884                     | client_classes_list "," client_class_entry
     885                     | client_classes_list ","
     886
     887  client_class_entry ::= "{" client_class_params "}"
     888
     889  client_class_params ::=
     890                     | not_empty_client_class_params
     891
     892  not_empty_client_class_params ::= client_class_param
     893                               | not_empty_client_class_params "," client_class_param
     894                               | not_empty_client_class_params ","
     895
     896  client_class_param ::= client_class_name
     897                    | client_class_test
     898                    | client_class_template_test
     899                    | only_if_required
     900                    | only_in_additional_list
     901                    | option_data_list
     902                    | user_context
     903                    | comment
     904                    | preferred_lifetime
     905                    | min_preferred_lifetime
     906                    | max_preferred_lifetime
     907                    | valid_lifetime
     908                    | min_valid_lifetime
     909                    | max_valid_lifetime
     910                    | unknown_map_entry
     911
     912  client_class_name ::= name
     913
     914  client_class_test ::= "test" ":" STRING
     915
     916  client_class_template_test ::= "template-test" ":" STRING
     917
     918  only_if_required ::= "only-if-required" ":" BOOLEAN
     919
     920  only_in_additional_list ::= "only-in-additional-list" ":" BOOLEAN
     921
     922  server_id ::= "server-id" ":" "{" server_id_params "}"
     923
     924  server_id_params ::= server_id_param
     925                  | server_id_params "," server_id_param
     926                  | server_id_params ","
     927
     928  server_id_param ::= server_id_type
     929                 | identifier
     930                 | time
     931                 | htype
     932                 | enterprise_id
     933                 | persist
     934                 | user_context
     935                 | comment
     936                 | unknown_map_entry
     937
     938  server_id_type ::= "type" ":" duid_type
     939
     940  duid_type ::= "LLT"
     941           | "EN"
     942           | "LL"
     943
     944  htype ::= "htype" ":" INTEGER
     945
     946  identifier ::= "identifier" ":" STRING
     947
     948  time ::= "time" ":" INTEGER
     949
     950  enterprise_id ::= "enterprise-id" ":" INTEGER
     951
     952  dhcp4o6_port ::= "dhcp4o6-port" ":" INTEGER
     953
     954  control_socket ::= "control-socket" ":" "{" control_socket_params "}"
     955
     956  control_sockets ::= "control-sockets" ":" "[" control_socket_list "]"
     957
     958  control_socket_list ::=
     959                     | not_empty_control_socket_list
     960
     961  not_empty_control_socket_list ::= control_socket_entry
     962                               | not_empty_control_socket_list "," control_socket_entry
     963                               | not_empty_control_socket_list ","
     964
     965  control_socket_entry ::= "{" control_socket_params "}"
     966
     967  control_socket_params ::= control_socket_param
     968                       | control_socket_params "," control_socket_param
     969                       | control_socket_params ","
     970
     971  control_socket_param ::= control_socket_type
     972                      | control_socket_name
     973                      | control_socket_address
     974                      | control_socket_port
     975                      | authentication
     976                      | trust_anchor
     977                      | cert_file
     978                      | key_file
     979                      | cert_required
     980                      | http_headers
     981                      | user_context
     982                      | comment
     983                      | unknown_map_entry
     984
     985  control_socket_type ::= "socket-type" ":" control_socket_type_value
     986
     987  control_socket_type_value ::= "unix"
     988                           | "http"
     989                           | "https"
     990
     991  control_socket_name ::= "socket-name" ":" STRING
     992
     993  control_socket_address ::= "socket-address" ":" STRING
     994
     995  control_socket_port ::= "socket-port" ":" INTEGER
     996
     997  cert_required ::= "cert-required" ":" BOOLEAN
     998
     999  http_headers ::= "http-headers" ":" "[" http_header_list "]"
    1000
    1001  http_header_list ::=
    1002                  | not_empty_http_header_list
    1003
    1004  not_empty_http_header_list ::= http_header
    1005                            | not_empty_http_header_list "," http_header
    1006                            | not_empty_http_header_list ","
    1007
    1008  http_header ::= "{" http_header_params "}"
    1009
    1010  http_header_params ::= http_header_param
    1011                    | http_header_params "," http_header_param
    1012                    | http_header_params ","
    1013
    1014  http_header_param ::= name
    1015                   | header_value
    1016                   | user_context
    1017                   | comment
    1018                   | unknown_map_entry
    1019
    1020  header_value ::= "value" ":" STRING
    1021
    1022  authentication ::= "authentication" ":" "{" auth_params "}"
    1023
    1024  auth_params ::= auth_param
    1025             | auth_params "," auth_param
    1026             | auth_params ","
    1027
    1028  auth_param ::= auth_type
    1029            | realm
    1030            | directory
    1031            | clients
    1032            | comment
    1033            | user_context
    1034            | unknown_map_entry
    1035
    1036  auth_type ::= "type" ":" auth_type_value
    1037
    1038  auth_type_value ::= "basic"
    1039
    1040  realm ::= "realm" ":" STRING
    1041
    1042  directory ::= "directory" ":" STRING
    1043
    1044  clients ::= "clients" ":" "[" clients_list "]"
    1045
    1046  clients_list ::=
    1047              | not_empty_clients_list
    1048
    1049  not_empty_clients_list ::= basic_auth
    1050                        | not_empty_clients_list "," basic_auth
    1051                        | not_empty_clients_list ","
    1052
    1053  basic_auth ::= "{" clients_params "}"
    1054
    1055  clients_params ::= clients_param
    1056                | clients_params "," clients_param
    1057                | clients_params ","
    1058
    1059  clients_param ::= user
    1060               | user_file
    1061               | password
    1062               | password_file
    1063               | user_context
    1064               | comment
    1065               | unknown_map_entry
    1066
    1067  user_file ::= "user-file" ":" STRING
    1068
    1069  password_file ::= "password-file" ":" STRING
    1070
    1071  dhcp_queue_control ::= "dhcp-queue-control" ":" "{" queue_control_params "}"
    1072
    1073  queue_control_params ::= queue_control_param
    1074                      | queue_control_params "," queue_control_param
    1075                      | queue_control_params ","
    1076
    1077  queue_control_param ::= enable_queue
    1078                     | queue_type
    1079                     | capacity
    1080                     | user_context
    1081                     | comment
    1082                     | arbitrary_map_entry
    1083
    1084  enable_queue ::= "enable-queue" ":" BOOLEAN
    1085
    1086  queue_type ::= "queue-type" ":" STRING
    1087
    1088  capacity ::= "capacity" ":" INTEGER
    1089
    1090  arbitrary_map_entry ::= STRING ":" value
    1091
    1092  dhcp_ddns ::= "dhcp-ddns" ":" "{" dhcp_ddns_params "}"
    1093
    1094  sub_dhcp_ddns ::= "{" dhcp_ddns_params "}"
    1095
    1096  dhcp_ddns_params ::= dhcp_ddns_param
    1097                  | dhcp_ddns_params "," dhcp_ddns_param
    1098                  | dhcp_ddns_params ","
    1099
    1100  dhcp_ddns_param ::= enable_updates
    1101                 | server_ip
    1102                 | server_port
    1103                 | sender_ip
    1104                 | sender_port
    1105                 | max_queue_size
    1106                 | ncr_protocol
    1107                 | ncr_format
    1108                 | user_context
    1109                 | comment
    1110                 | unknown_map_entry
    1111
    1112  enable_updates ::= "enable-updates" ":" BOOLEAN
    1113
    1114  server_ip ::= "server-ip" ":" STRING
    1115
    1116  server_port ::= "server-port" ":" INTEGER
    1117
    1118  sender_ip ::= "sender-ip" ":" STRING
    1119
    1120  sender_port ::= "sender-port" ":" INTEGER
    1121
    1122  max_queue_size ::= "max-queue-size" ":" INTEGER
    1123
    1124  ncr_protocol ::= "ncr-protocol" ":" ncr_protocol_value
    1125
    1126  ncr_protocol_value ::= "UDP"
    1127                    | "TCP"
    1128
    1129  ncr_format ::= "ncr-format" ":" "JSON"
    1130
    1131  config_control ::= "config-control" ":" "{" config_control_params "}"
    1132
    1133  sub_config_control ::= "{" config_control_params "}"
    1134
    1135  config_control_params ::= config_control_param
    1136                       | config_control_params "," config_control_param
    1137                       | config_control_params ","
    1138
    1139  config_control_param ::= config_databases
    1140                      | config_fetch_wait_time
    1141
    1142  config_databases ::= "config-databases" ":" "[" database_list "]"
    1143
    1144  config_fetch_wait_time ::= "config-fetch-wait-time" ":" INTEGER
    1145
    1146  loggers ::= "loggers" ":" "[" loggers_entries "]"
    1147
    1148  loggers_entries ::= logger_entry
    1149                 | loggers_entries "," logger_entry
    1150                 | loggers_entries ","
    1151
    1152  logger_entry ::= "{" logger_params "}"
    1153
    1154  logger_params ::= logger_param
    1155               | logger_params "," logger_param
    1156               | logger_params ","
    1157
    1158  logger_param ::= name
    1159              | output_options_list
    1160              | debuglevel
    1161              | severity
    1162              | user_context
    1163              | comment
    1164              | unknown_map_entry
    1165
    1166  debuglevel ::= "debuglevel" ":" INTEGER
    1167
    1168  severity ::= "severity" ":" STRING
    1169
    1170  output_options_list ::= "output-options" ":" "[" output_options_list_content "]"
    1171
    1172  output_options_list_content ::= output_entry
    1173                             | output_options_list_content "," output_entry
    1174                             | output_options_list_content ","
    1175
    1176  output_entry ::= "{" output_params_list "}"
    1177
    1178  output_params_list ::= output_params
    1179                    | output_params_list "," output_params
    1180                    | output_params_list ","
    1181
    1182  output_params ::= output
    1183               | flush
    1184               | maxsize
    1185               | maxver
    1186               | pattern
    1187
    1188  output ::= "output" ":" STRING
    1189
    1190  flush ::= "flush" ":" BOOLEAN
    1191
    1192  maxsize ::= "maxsize" ":" INTEGER
    1193
    1194  maxver ::= "maxver" ":" INTEGER
    1195
    1196  pattern ::= "pattern" ":" STRING
    1197
    1198  compatibility ::= "compatibility" ":" "{" compatibility_params "}"
    1199
    1200  compatibility_params ::= compatibility_param
    1201                      | compatibility_params "," compatibility_param
    1202                      | compatibility_params ","
    1203
    1204  compatibility_param ::= lenient_option_parsing
    1205                     | unknown_map_entry
    1206
    1207  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              | http_headers
     59              | trust_anchor
     60              | cert_file
     61              | key_file
     62              | cert_required
     63              | authentication
     64              | control_sockets
     65              | hooks_libraries
     66              | loggers
     67              | user_context
     68              | comment
     69              | unknown_map_entry
     70
     71  http_host ::= "http-host" ":" STRING
     72
     73  http_port ::= "http-port" ":" INTEGER
     74
     75  trust_anchor ::= "trust-anchor" ":" STRING
     76
     77  cert_file ::= "cert-file" ":" STRING
     78
     79  key_file ::= "key-file" ":" STRING
     80
     81  cert_required ::= "cert-required" ":" BOOLEAN
     82
     83  user_context ::= "user-context" ":" map_value
     84
     85  comment ::= "comment" ":" STRING
     86
     87  http_headers ::= "http-headers" ":" "[" http_header_list "]"
     88
     89  http_header_list ::=
     90                  | not_empty_http_header_list
     91
     92  not_empty_http_header_list ::= http_header
     93                            | not_empty_http_header_list "," http_header
     94                            | not_empty_http_header_list ","
     95
     96  http_header ::= "{" http_header_params "}"
     97
     98  http_header_params ::= http_header_param
     99                    | http_header_params "," http_header_param
    100                    | http_header_params ","
    101
    102  http_header_param ::= name
    103                   | header_value
    104                   | user_context
    105                   | comment
    106                   | unknown_map_entry
    107
    108  name ::= "name" ":" STRING
    109
    110  header_value ::= "value" ":" STRING
    111
    112  hooks_libraries ::= "hooks-libraries" ":" "[" hooks_libraries_list "]"
    113
    114  hooks_libraries_list ::=
    115                      | not_empty_hooks_libraries_list
    116
    117  not_empty_hooks_libraries_list ::= hooks_library
    118                                | not_empty_hooks_libraries_list "," hooks_library
    119                                | not_empty_hooks_libraries_list ","
    120
    121  hooks_library ::= "{" hooks_params "}"
    122
    123  hooks_params ::= hooks_param
    124              | hooks_params "," hooks_param
    125              | hooks_params ","
    126              | unknown_map_entry
    127
    128  hooks_param ::= library
    129             | parameters
    130
    131  library ::= "library" ":" STRING
    132
    133  parameters ::= "parameters" ":" map_value
    134
    135  control_sockets ::= "control-sockets" ":" "{" control_sockets_params "}"
    136
    137  control_sockets_params ::= control_socket
    138                        | control_sockets_params "," control_socket
    139                        | control_sockets_params ","
    140
    141  control_socket ::= dhcp4_server_socket
    142                | dhcp6_server_socket
    143                | d2_server_socket
    144                | unknown_map_entry
    145
    146  dhcp4_server_socket ::= "dhcp4" ":" "{" control_socket_params "}"
    147
    148  dhcp6_server_socket ::= "dhcp6" ":" "{" control_socket_params "}"
    149
    150  d2_server_socket ::= "d2" ":" "{" control_socket_params "}"
    151
    152  control_socket_params ::= control_socket_param
    153                       | control_socket_params "," control_socket_param
    154                       | control_socket_params ","
    155
    156  control_socket_param ::= socket_name
    157                      | socket_type
    158                      | user_context
    159                      | comment
    160                      | unknown_map_entry
    161
    162  socket_name ::= "socket-name" ":" STRING
    163
    164  socket_type ::= "socket-type" ":" socket_type_value
    165
    166  socket_type_value ::= "unix"
    167
    168  authentication ::= "authentication" ":" "{" auth_params "}"
    169
    170  auth_params ::= auth_param
    171             | auth_params "," auth_param
    172             | auth_params ","
    173
    174  auth_param ::= auth_type
    175            | realm
    176            | directory
    177            | clients
    178            | comment
    179            | user_context
    180            | unknown_map_entry
    181
    182  auth_type ::= "type" ":" auth_type_value
    183
    184  auth_type_value ::= "basic"
    185
    186  realm ::= "realm" ":" STRING
    187
    188  directory ::= "directory" ":" STRING
    189
    190  clients ::= "clients" ":" "[" clients_list "]"
    191
    192  clients_list ::=
    193              | not_empty_clients_list
    194
    195  not_empty_clients_list ::= basic_auth
    196                        | not_empty_clients_list "," basic_auth
    197                        | not_empty_clients_list ","
    198
    199  basic_auth ::= "{" clients_params "}"
    200
    201  clients_params ::= clients_param
    202                | clients_params "," clients_param
    203                | clients_params ","
    204
    205  clients_param ::= user
    206               | user_file
    207               | password
    208               | password_file
    209               | user_context
    210               | comment
    211               | unknown_map_entry
    212
    213  user ::= "user" ":" STRING
    214
    215  user_file ::= "user-file" ":" STRING
    216
    217  password ::= "password" ":" STRING
    218
    219  password_file ::= "password-file" ":" STRING
    220
    221  loggers ::= "loggers" ":" "[" loggers_entries "]"
    222
    223  loggers_entries ::= logger_entry
    224                 | loggers_entries "," logger_entry
    225                 | loggers_entries ","
    226
    227  logger_entry ::= "{" logger_params "}"
    228
    229  logger_params ::= logger_param
    230               | logger_params "," logger_param
    231               | logger_params ","
    232
    233  logger_param ::= name
    234              | output_options_list
    235              | debuglevel
    236              | severity
    237              | user_context
    238              | comment
    239              | unknown_map_entry
    240
    241  debuglevel ::= "debuglevel" ":" INTEGER
    242
    243  severity ::= "severity" ":" STRING
    244
    245  output_options_list ::= "output-options" ":" "[" output_options_list_content "]"
    246
    247  output_options_list_content ::= output_entry
    248                             | output_options_list_content "," output_entry
    249                             | output_options_list_content ","
    250
    251  output_entry ::= "{" output_params_list "}"
    252
    253  output_params_list ::= output_params
    254                    | output_params_list "," output_params
    255                    | output_params_list ","
    256
    257  output_params ::= output
    258               | flush
    259               | maxsize
    260               | maxver
    261               | pattern
    262
    263  output ::= "output" ":" STRING
    264
    265  flush ::= "flush" ":" BOOLEAN
    266
    267  maxsize ::= "maxsize" ":" INTEGER
    268
    269  maxver ::= "maxver" ":" INTEGER
    270
    271  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                | control_sockets
     80                | hooks_libraries
     81                | loggers
     82                | user_context
     83                | comment
     84                | unknown_map_entry
     85
     86  ip_address ::= "ip-address" ":" STRING
     87
     88  port ::= "port" ":" INTEGER
     89
     90  dns_server_timeout ::= "dns-server-timeout" ":" INTEGER
     91
     92  ncr_protocol ::= "ncr-protocol" ":" ncr_protocol_value
     93
     94  ncr_protocol_value ::= "UDP"
     95                    | "TCP"
     96
     97  ncr_format ::= "ncr-format" ":" "JSON"
     98
     99  user_context ::= "user-context" ":" map_value
    100
    101  comment ::= "comment" ":" STRING
    102
    103  forward_ddns ::= "forward-ddns" ":" "{" ddns_mgr_params "}"
    104
    105  reverse_ddns ::= "reverse-ddns" ":" "{" ddns_mgr_params "}"
    106
    107  ddns_mgr_params ::=
    108                 | not_empty_ddns_mgr_params
    109
    110  not_empty_ddns_mgr_params ::= ddns_mgr_param
    111                           | ddns_mgr_params "," ddns_mgr_param
    112                           | ddns_mgr_params ","
    113
    114  ddns_mgr_param ::= ddns_domains
    115                | unknown_map_entry
    116
    117  ddns_domains ::= "ddns-domains" ":" "[" ddns_domain_list "]"
    118
    119  sub_ddns_domains ::= "[" ddns_domain_list "]"
    120
    121  ddns_domain_list ::=
    122                  | not_empty_ddns_domain_list
    123
    124  not_empty_ddns_domain_list ::= ddns_domain
    125                            | not_empty_ddns_domain_list "," ddns_domain
    126                            | not_empty_ddns_domain_list ","
    127
    128  ddns_domain ::= "{" ddns_domain_params "}"
    129
    130  sub_ddns_domain ::= "{" ddns_domain_params "}"
    131
    132  ddns_domain_params ::= ddns_domain_param
    133                    | ddns_domain_params "," ddns_domain_param
    134                    | ddns_domain_params ","
    135
    136  ddns_domain_param ::= ddns_domain_name
    137                   | ddns_key_name
    138                   | dns_servers
    139                   | user_context
    140                   | comment
    141                   | unknown_map_entry
    142
    143  ddns_domain_name ::= "name" ":" STRING
    144
    145  ddns_key_name ::= "key-name" ":" STRING
    146
    147  dns_servers ::= "dns-servers" ":" "[" dns_server_list "]"
    148
    149  sub_dns_servers ::= "[" dns_server_list "]"
    150
    151  dns_server_list ::= dns_server
    152                 | dns_server_list "," dns_server
    153                 | dns_server_list ","
    154
    155  dns_server ::= "{" dns_server_params "}"
    156
    157  sub_dns_server ::= "{" dns_server_params "}"
    158
    159  dns_server_params ::= dns_server_param
    160                   | dns_server_params "," dns_server_param
    161                   | dns_server_params ","
    162
    163  dns_server_param ::= dns_server_hostname
    164                  | dns_server_ip_address
    165                  | dns_server_port
    166                  | ddns_key_name
    167                  | user_context
    168                  | comment
    169                  | unknown_map_entry
    170
    171  dns_server_hostname ::= "hostname" ":" STRING
    172
    173  dns_server_ip_address ::= "ip-address" ":" STRING
    174
    175  dns_server_port ::= "port" ":" INTEGER
    176
    177  tsig_keys ::= "tsig-keys" ":" "[" tsig_keys_list "]"
    178
    179  sub_tsig_keys ::= "[" tsig_keys_list "]"
    180
    181  tsig_keys_list ::=
    182                | not_empty_tsig_keys_list
    183
    184  not_empty_tsig_keys_list ::= tsig_key
    185                          | not_empty_tsig_keys_list "," tsig_key
    186                          | not_empty_tsig_keys_list ","
    187
    188  tsig_key ::= "{" tsig_key_params "}"
    189
    190  sub_tsig_key ::= "{" tsig_key_params "}"
    191
    192  tsig_key_params ::= tsig_key_param
    193                 | tsig_key_params "," tsig_key_param
    194                 | tsig_key_params ","
    195
    196  tsig_key_param ::= tsig_key_name
    197                | tsig_key_algorithm
    198                | tsig_key_digest_bits
    199                | tsig_key_secret
    200                | tsig_key_secret_file
    201                | user_context
    202                | comment
    203                | unknown_map_entry
    204
    205  tsig_key_name ::= "name" ":" STRING
    206
    207  tsig_key_algorithm ::= "algorithm" ":" STRING
    208
    209  tsig_key_digest_bits ::= "digest-bits" ":" INTEGER
    210
    211  tsig_key_secret ::= "secret" ":" STRING
    212
    213  tsig_key_secret_file ::= "secret-file" ":" STRING
    214
    215  control_socket ::= "control-socket" ":" "{" control_socket_params "}"
    216
    217  control_sockets ::= "control-sockets" ":" "[" control_socket_list "]"
    218
    219  control_socket_list ::=
    220                     | not_empty_control_socket_list
    221
    222  not_empty_control_socket_list ::= control_socket_entry
    223                               | not_empty_control_socket_list "," control_socket_entry
    224                               | not_empty_control_socket_list ","
    225
    226  control_socket_entry ::= "{" control_socket_params "}"
    227
    228  control_socket_params ::= control_socket_param
    229                       | control_socket_params "," control_socket_param
    230                       | control_socket_params ","
    231
    232  control_socket_param ::= control_socket_type
    233                      | control_socket_name
    234                      | control_socket_address
    235                      | control_socket_port
    236                      | authentication
    237                      | trust_anchor
    238                      | cert_file
    239                      | key_file
    240                      | cert_required
    241                      | user_context
    242                      | comment
    243                      | unknown_map_entry
    244
    245  control_socket_type ::= "socket-type" ":" control_socket_type_value
    246
    247  control_socket_type_value ::= "unix"
    248                           | "http"
    249                           | "https"
    250
    251  control_socket_name ::= "socket-name" ":" STRING
    252
    253  control_socket_address ::= "socket-address" ":" STRING
    254
    255  control_socket_port ::= "socket-port" ":" INTEGER
    256
    257  trust_anchor ::= "trust-anchor" ":" STRING
    258
    259  cert_file ::= "cert-file" ":" STRING
    260
    261  key_file ::= "key-file" ":" STRING
    262
    263  cert_required ::= "cert-required" ":" BOOLEAN
    264
    265  authentication ::= "authentication" ":" "{" auth_params "}"
    266
    267  auth_params ::= auth_param
    268             | auth_params "," auth_param
    269             | auth_params ","
    270
    271  auth_param ::= auth_type
    272            | realm
    273            | directory
    274            | clients
    275            | comment
    276            | user_context
    277            | unknown_map_entry
    278
    279  auth_type ::= "type" ":" auth_type_value
    280
    281  auth_type_value ::= "basic"
    282
    283  realm ::= "realm" ":" STRING
    284
    285  directory ::= "directory" ":" STRING
    286
    287  clients ::= "clients" ":" "[" clients_list "]"
    288
    289  clients_list ::=
    290              | not_empty_clients_list
    291
    292  not_empty_clients_list ::= basic_auth
    293                        | not_empty_clients_list "," basic_auth
    294                        | not_empty_clients_list ","
    295
    296  basic_auth ::= "{" clients_params "}"
    297
    298  clients_params ::= clients_param
    299                | clients_params "," clients_param
    300                | clients_params ","
    301
    302  clients_param ::= user
    303               | user_file
    304               | password
    305               | password_file
    306               | user_context
    307               | comment
    308               | unknown_map_entry
    309
    310  user ::= "user" ":" STRING
    311
    312  user_file ::= "user-file" ":" STRING
    313
    314  password ::= "password" ":" STRING
    315
    316  password_file ::= "password-file" ":" STRING
    317
    318  hooks_libraries ::= "hooks-libraries" ":" "[" hooks_libraries_list "]"
    319
    320  hooks_libraries_list ::=
    321                      | not_empty_hooks_libraries_list
    322
    323  not_empty_hooks_libraries_list ::= hooks_library
    324                                | not_empty_hooks_libraries_list "," hooks_library
    325                                | not_empty_hooks_libraries_list ","
    326
    327  hooks_library ::= "{" hooks_params "}"
    328
    329  sub_hooks_library ::= "{" hooks_params "}"
    330
    331  hooks_params ::= hooks_param
    332              | hooks_params "," hooks_param
    333              | hooks_params ","
    334              | unknown_map_entry
    335
    336  hooks_param ::= library
    337             | parameters
    338
    339  library ::= "library" ":" STRING
    340
    341  parameters ::= "parameters" ":" map_value
    342
    343  loggers ::= "loggers" ":" "[" loggers_entries "]"
    344
    345  loggers_entries ::= logger_entry
    346                 | loggers_entries "," logger_entry
    347                 | loggers_entries ","
    348
    349  logger_entry ::= "{" logger_params "}"
    350
    351  logger_params ::= logger_param
    352               | logger_params "," logger_param
    353               | logger_params ","
    354
    355  logger_param ::= name
    356              | output_options_list
    357              | debuglevel
    358              | severity
    359              | user_context
    360              | comment
    361              | unknown_map_entry
    362
    363  name ::= "name" ":" STRING
    364
    365  debuglevel ::= "debuglevel" ":" INTEGER
    366
    367  severity ::= "severity" ":" STRING
    368
    369  output_options_list ::= "output-options" ":" "[" output_options_list_content "]"
    370
    371  output_options_list_content ::= output_entry
    372                             | output_options_list_content "," output_entry
    373                             | output_options_list_content ","
    374
    375  output_entry ::= "{" output_params_list "}"
    376
    377  output_params_list ::= output_params
    378                    | output_params_list "," output_params
    379                    | output_params_list ","
    380
    381  output_params ::= output
    382               | flush
    383               | maxsize
    384               | maxver
    385               | pattern
    386
    387  output ::= "output" ":" STRING
    388
    389  flush ::= "flush" ":" BOOLEAN
    390
    391  maxsize ::= "maxsize" ":" INTEGER
    392
    393  maxver ::= "maxver" ":" INTEGER
    394
    395  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