# Kea Configuration File Syntax (BNF)

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

## BNF Grammar for DHCPv4

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

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

## BNF Grammar for DHCPv6

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

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

## BNF Grammar for Control Agent

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

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

## BNF Grammar for DHCP-DDNS

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

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