Kea Configuration File Syntax (BNF)

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

BNF Grammar for DHCPv4

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

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

BNF Grammar for DHCPv6

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

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

BNF Grammar for Control Agent

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

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

BNF Grammar for DHCP-DDNS

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

  1  Grammar
  2
  3  $accept ::= start EOF
  4
  5  start ::= TOPLEVEL_JSON sub_json
  6
  7  start ::= TOPLEVEL_DHCPDDNS syntax_map
  8
  9  start ::= SUB_DHCPDDNS sub_dhcpddns
 10
 11  start ::= SUB_TSIG_KEY sub_tsig_key
 12
 13  start ::= SUB_TSIG_KEYS sub_tsig_keys
 14
 15  start ::= SUB_DDNS_DOMAIN sub_ddns_domain
 16
 17  start ::= SUB_DDNS_DOMAINS sub_ddns_domains
 18
 19  start ::= SUB_DNS_SERVER sub_dns_server
 20
 21  start ::= SUB_DNS_SERVERS sub_dns_servers
 22
 23  start ::= SUB_HOOKS_LIBRARY sub_hooks_library
 24
 25  value ::= INTEGER
 26       | FLOAT
 27       | BOOLEAN
 28       | STRING
 29       | NULL
 30       | map2
 31       | list_generic
 32
 33  sub_json ::= value
 34
 35  map2 ::= "{" map_content "}"
 36
 37  map_value ::= map2
 38
 39  map_content ::=
 40             | not_empty_map
 41
 42  not_empty_map ::= STRING ":" value
 43               | not_empty_map "," STRING ":" value
 44               | not_empty_map ","
 45
 46  list_generic ::= "[" list_content "]"
 47
 48  list_content ::=
 49              | not_empty_list
 50
 51  not_empty_list ::= value
 52                | not_empty_list "," value
 53                | not_empty_list ","
 54
 55  unknown_map_entry ::= STRING ":"
 56
 57  syntax_map ::= "{" global_object "}"
 58
 59  global_object ::= "DhcpDdns" ":" "{" dhcpddns_params "}"
 60               | global_object_comma
 61
 62  global_object_comma ::= global_object ","
 63
 64  sub_dhcpddns ::= "{" dhcpddns_params "}"
 65
 66  dhcpddns_params ::= dhcpddns_param
 67                 | dhcpddns_params "," dhcpddns_param
 68                 | dhcpddns_params ","
 69
 70  dhcpddns_param ::= ip_address
 71                | port
 72                | dns_server_timeout
 73                | ncr_protocol
 74                | ncr_format
 75                | forward_ddns
 76                | reverse_ddns
 77                | tsig_keys
 78                | control_socket
 79                | control_sockets
 80                | hooks_libraries
 81                | loggers
 82                | user_context
 83                | comment
 84                | unknown_map_entry
 85
 86  ip_address ::= "ip-address" ":" STRING
 87
 88  port ::= "port" ":" INTEGER
 89
 90  dns_server_timeout ::= "dns-server-timeout" ":" INTEGER
 91
 92  ncr_protocol ::= "ncr-protocol" ":" ncr_protocol_value
 93
 94  ncr_protocol_value ::= "UDP"
 95                    | "TCP"
 96
 97  ncr_format ::= "ncr-format" ":" "JSON"
 98
 99  user_context ::= "user-context" ":" map_value
100
101  comment ::= "comment" ":" STRING
102
103  forward_ddns ::= "forward-ddns" ":" "{" ddns_mgr_params "}"
104
105  reverse_ddns ::= "reverse-ddns" ":" "{" ddns_mgr_params "}"
106
107  ddns_mgr_params ::=
108                 | not_empty_ddns_mgr_params
109
110  not_empty_ddns_mgr_params ::= ddns_mgr_param
111                           | ddns_mgr_params "," ddns_mgr_param
112                           | ddns_mgr_params ","
113
114  ddns_mgr_param ::= ddns_domains
115                | unknown_map_entry
116
117  ddns_domains ::= "ddns-domains" ":" "[" ddns_domain_list "]"
118
119  sub_ddns_domains ::= "[" ddns_domain_list "]"
120
121  ddns_domain_list ::=
122                  | not_empty_ddns_domain_list
123
124  not_empty_ddns_domain_list ::= ddns_domain
125                            | not_empty_ddns_domain_list "," ddns_domain
126                            | not_empty_ddns_domain_list ","
127
128  ddns_domain ::= "{" ddns_domain_params "}"
129
130  sub_ddns_domain ::= "{" ddns_domain_params "}"
131
132  ddns_domain_params ::= ddns_domain_param
133                    | ddns_domain_params "," ddns_domain_param
134                    | ddns_domain_params ","
135
136  ddns_domain_param ::= ddns_domain_name
137                   | ddns_key_name
138                   | dns_servers
139                   | user_context
140                   | comment
141                   | unknown_map_entry
142
143  ddns_domain_name ::= "name" ":" STRING
144
145  ddns_key_name ::= "key-name" ":" STRING
146
147  dns_servers ::= "dns-servers" ":" "[" dns_server_list "]"
148
149  sub_dns_servers ::= "[" dns_server_list "]"
150
151  dns_server_list ::= dns_server
152                 | dns_server_list "," dns_server
153                 | dns_server_list ","
154
155  dns_server ::= "{" dns_server_params "}"
156
157  sub_dns_server ::= "{" dns_server_params "}"
158
159  dns_server_params ::= dns_server_param
160                   | dns_server_params "," dns_server_param
161                   | dns_server_params ","
162
163  dns_server_param ::= dns_server_hostname
164                  | dns_server_ip_address
165                  | dns_server_port
166                  | ddns_key_name
167                  | user_context
168                  | comment
169                  | unknown_map_entry
170
171  dns_server_hostname ::= "hostname" ":" STRING
172
173  dns_server_ip_address ::= "ip-address" ":" STRING
174
175  dns_server_port ::= "port" ":" INTEGER
176
177  tsig_keys ::= "tsig-keys" ":" "[" tsig_keys_list "]"
178
179  sub_tsig_keys ::= "[" tsig_keys_list "]"
180
181  tsig_keys_list ::=
182                | not_empty_tsig_keys_list
183
184  not_empty_tsig_keys_list ::= tsig_key
185                          | not_empty_tsig_keys_list "," tsig_key
186                          | not_empty_tsig_keys_list ","
187
188  tsig_key ::= "{" tsig_key_params "}"
189
190  sub_tsig_key ::= "{" tsig_key_params "}"
191
192  tsig_key_params ::= tsig_key_param
193                 | tsig_key_params "," tsig_key_param
194                 | tsig_key_params ","
195
196  tsig_key_param ::= tsig_key_name
197                | tsig_key_algorithm
198                | tsig_key_digest_bits
199                | tsig_key_secret
200                | tsig_key_secret_file
201                | user_context
202                | comment
203                | unknown_map_entry
204
205  tsig_key_name ::= "name" ":" STRING
206
207  tsig_key_algorithm ::= "algorithm" ":" STRING
208
209  tsig_key_digest_bits ::= "digest-bits" ":" INTEGER
210
211  tsig_key_secret ::= "secret" ":" STRING
212
213  tsig_key_secret_file ::= "secret-file" ":" STRING
214
215  control_socket ::= "control-socket" ":" "{" control_socket_params "}"
216
217  control_sockets ::= "control-sockets" ":" "[" control_socket_list "]"
218
219  control_socket_list ::=
220                     | not_empty_control_socket_list
221
222  not_empty_control_socket_list ::= control_socket_entry
223                               | not_empty_control_socket_list "," control_socket_entry
224                               | not_empty_control_socket_list ","
225
226  control_socket_entry ::= "{" control_socket_params "}"
227
228  control_socket_params ::= control_socket_param
229                       | control_socket_params "," control_socket_param
230                       | control_socket_params ","
231
232  control_socket_param ::= control_socket_type
233                      | control_socket_name
234                      | control_socket_address
235                      | control_socket_port
236                      | authentication
237                      | trust_anchor
238                      | cert_file
239                      | key_file
240                      | cert_required
241                      | user_context
242                      | comment
243                      | unknown_map_entry
244
245  control_socket_type ::= "socket-type" ":" control_socket_type_value
246
247  control_socket_type_value ::= "unix"
248                           | "http"
249                           | "https"
250
251  control_socket_name ::= "socket-name" ":" STRING
252
253  control_socket_address ::= "socket-address" ":" STRING
254
255  control_socket_port ::= "socket-port" ":" INTEGER
256
257  trust_anchor ::= "trust-anchor" ":" STRING
258
259  cert_file ::= "cert-file" ":" STRING
260
261  key_file ::= "key-file" ":" STRING
262
263  cert_required ::= "cert-required" ":" BOOLEAN
264
265  authentication ::= "authentication" ":" "{" auth_params "}"
266
267  auth_params ::= auth_param
268             | auth_params "," auth_param
269             | auth_params ","
270
271  auth_param ::= auth_type
272            | realm
273            | directory
274            | clients
275            | comment
276            | user_context
277            | unknown_map_entry
278
279  auth_type ::= "type" ":" auth_type_value
280
281  auth_type_value ::= "basic"
282
283  realm ::= "realm" ":" STRING
284
285  directory ::= "directory" ":" STRING
286
287  clients ::= "clients" ":" "[" clients_list "]"
288
289  clients_list ::=
290              | not_empty_clients_list
291
292  not_empty_clients_list ::= basic_auth
293                        | not_empty_clients_list "," basic_auth
294                        | not_empty_clients_list ","
295
296  basic_auth ::= "{" clients_params "}"
297
298  clients_params ::= clients_param
299                | clients_params "," clients_param
300                | clients_params ","
301
302  clients_param ::= user
303               | user_file
304               | password
305               | password_file
306               | user_context
307               | comment
308               | unknown_map_entry
309
310  user ::= "user" ":" STRING
311
312  user_file ::= "user-file" ":" STRING
313
314  password ::= "password" ":" STRING
315
316  password_file ::= "password-file" ":" STRING
317
318  hooks_libraries ::= "hooks-libraries" ":" "[" hooks_libraries_list "]"
319
320  hooks_libraries_list ::=
321                      | not_empty_hooks_libraries_list
322
323  not_empty_hooks_libraries_list ::= hooks_library
324                                | not_empty_hooks_libraries_list "," hooks_library
325                                | not_empty_hooks_libraries_list ","
326
327  hooks_library ::= "{" hooks_params "}"
328
329  sub_hooks_library ::= "{" hooks_params "}"
330
331  hooks_params ::= hooks_param
332              | hooks_params "," hooks_param
333              | hooks_params ","
334              | unknown_map_entry
335
336  hooks_param ::= library
337             | parameters
338
339  library ::= "library" ":" STRING
340
341  parameters ::= "parameters" ":" map_value
342
343  loggers ::= "loggers" ":" "[" loggers_entries "]"
344
345  loggers_entries ::= logger_entry
346                 | loggers_entries "," logger_entry
347                 | loggers_entries ","
348
349  logger_entry ::= "{" logger_params "}"
350
351  logger_params ::= logger_param
352               | logger_params "," logger_param
353               | logger_params ","
354
355  logger_param ::= name
356              | output_options_list
357              | debuglevel
358              | severity
359              | user_context
360              | comment
361              | unknown_map_entry
362
363  name ::= "name" ":" STRING
364
365  debuglevel ::= "debuglevel" ":" INTEGER
366
367  severity ::= "severity" ":" STRING
368
369  output_options_list ::= "output-options" ":" "[" output_options_list_content "]"
370
371  output_options_list_content ::= output_entry
372                             | output_options_list_content "," output_entry
373                             | output_options_list_content ","
374
375  output_entry ::= "{" output_params_list "}"
376
377  output_params_list ::= output_params
378                    | output_params_list "," output_params
379                    | output_params_list ","
380
381  output_params ::= output
382               | flush
383               | maxsize
384               | maxver
385               | pattern
386
387  output ::= "output" ":" STRING
388
389  flush ::= "flush" ":" BOOLEAN
390
391  maxsize ::= "maxsize" ":" INTEGER
392
393  maxver ::= "maxver" ":" INTEGER
394
395  pattern ::= "pattern" ":" STRING

BNF Grammar for the Kea NETCONF Agent

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

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