This grammar is generated from ``agent_parser.yy``. See :ref:`kea-ctrl-agent` for more details.

.. code-block:: BNF
   :linenos:

     Grammar

     $accept ::= start EOF

     start ::= START_JSON json

     start ::= START_AGENT agent_syntax_map

     start ::= START_SUB_AGENT sub_agent

     sub_agent ::= "{" global_params "}"

     json ::= value

     value ::= INTEGER
          | FLOAT
          | BOOLEAN
          | STRING
          | NULL
          | map
          | list_generic

     map ::= "{" map_content "}"

     map_value ::= map

     map_content ::= 
                | not_empty_map

     not_empty_map ::= STRING ":" value
                  | not_empty_map "," STRING ":" value
                  | not_empty_map ","

     list_generic ::= "[" list_content "]"

     list_content ::= 
                 | not_empty_list

     not_empty_list ::= value
                   | not_empty_list "," value
                   | not_empty_list ","

     unknown_map_entry ::= STRING ":"

     agent_syntax_map ::= "{" global_object "}"

     global_object ::= "Control-agent" ":" "{" global_params "}"
                  | global_object_comma

     global_object_comma ::= global_object ","

     global_params ::= global_param
                  | global_params "," global_param
                  | global_params ","

     global_param ::= http_host
                 | http_port
                 | http_headers
                 | trust_anchor
                 | cert_file
                 | key_file
                 | cert_required
                 | authentication
                 | control_sockets
                 | hooks_libraries
                 | loggers
                 | user_context
                 | comment
                 | unknown_map_entry

     http_host ::= "http-host" ":" STRING

     http_port ::= "http-port" ":" INTEGER

     trust_anchor ::= "trust-anchor" ":" STRING

     cert_file ::= "cert-file" ":" STRING

     key_file ::= "key-file" ":" STRING

     cert_required ::= "cert-required" ":" BOOLEAN

     user_context ::= "user-context" ":" map_value

     comment ::= "comment" ":" STRING

     http_headers ::= "http-headers" ":" "[" http_header_list "]"

     http_header_list ::= 
                     | not_empty_http_header_list

     not_empty_http_header_list ::= http_header
                               | not_empty_http_header_list "," http_header
                               | not_empty_http_header_list ","

     http_header ::= "{" http_header_params "}"

     http_header_params ::= http_header_param
                       | http_header_params "," http_header_param
                       | http_header_params ","

     http_header_param ::= name
                      | header_value
                      | user_context
                      | comment
                      | unknown_map_entry

     name ::= "name" ":" STRING

     header_value ::= "value" ":" STRING

     hooks_libraries ::= "hooks-libraries" ":" "[" hooks_libraries_list "]"

     hooks_libraries_list ::= 
                         | not_empty_hooks_libraries_list

     not_empty_hooks_libraries_list ::= hooks_library
                                   | not_empty_hooks_libraries_list "," hooks_library
                                   | not_empty_hooks_libraries_list ","

     hooks_library ::= "{" hooks_params "}"

     hooks_params ::= hooks_param
                 | hooks_params "," hooks_param
                 | hooks_params ","
                 | unknown_map_entry

     hooks_param ::= library
                | parameters

     library ::= "library" ":" STRING

     parameters ::= "parameters" ":" map_value

     control_sockets ::= "control-sockets" ":" "{" control_sockets_params "}"

     control_sockets_params ::= control_socket
                           | control_sockets_params "," control_socket
                           | control_sockets_params ","

     control_socket ::= dhcp4_server_socket
                   | dhcp6_server_socket
                   | d2_server_socket
                   | unknown_map_entry

     dhcp4_server_socket ::= "dhcp4" ":" "{" control_socket_params "}"

     dhcp6_server_socket ::= "dhcp6" ":" "{" control_socket_params "}"

     d2_server_socket ::= "d2" ":" "{" control_socket_params "}"

     control_socket_params ::= control_socket_param
                          | control_socket_params "," control_socket_param
                          | control_socket_params ","

     control_socket_param ::= socket_name
                         | socket_type
                         | user_context
                         | comment
                         | unknown_map_entry

     socket_name ::= "socket-name" ":" STRING

     socket_type ::= "socket-type" ":" socket_type_value

     socket_type_value ::= "unix"

     authentication ::= "authentication" ":" "{" auth_params "}"

     auth_params ::= auth_param
                | auth_params "," auth_param
                | auth_params ","

     auth_param ::= auth_type
               | realm
               | directory
               | clients
               | comment
               | user_context
               | unknown_map_entry

     auth_type ::= "type" ":" auth_type_value

     auth_type_value ::= "basic"

     realm ::= "realm" ":" STRING

     directory ::= "directory" ":" STRING

     clients ::= "clients" ":" "[" clients_list "]"

     clients_list ::= 
                 | not_empty_clients_list

     not_empty_clients_list ::= basic_auth
                           | not_empty_clients_list "," basic_auth
                           | not_empty_clients_list ","

     basic_auth ::= "{" clients_params "}"

     clients_params ::= clients_param
                   | clients_params "," clients_param
                   | clients_params ","

     clients_param ::= user
                  | user_file
                  | password
                  | password_file
                  | user_context
                  | comment
                  | unknown_map_entry

     user ::= "user" ":" STRING

     user_file ::= "user-file" ":" STRING

     password ::= "password" ":" STRING

     password_file ::= "password-file" ":" STRING

     loggers ::= "loggers" ":" "[" loggers_entries "]"

     loggers_entries ::= logger_entry
                    | loggers_entries "," logger_entry
                    | loggers_entries ","

     logger_entry ::= "{" logger_params "}"

     logger_params ::= logger_param
                  | logger_params "," logger_param
                  | logger_params ","

     logger_param ::= name
                 | output_options_list
                 | debuglevel
                 | severity
                 | user_context
                 | comment
                 | unknown_map_entry

     debuglevel ::= "debuglevel" ":" INTEGER

     severity ::= "severity" ":" STRING

     output_options_list ::= "output-options" ":" "[" output_options_list_content "]"

     output_options_list_content ::= output_entry
                                | output_options_list_content "," output_entry
                                | output_options_list_content ","

     output_entry ::= "{" output_params_list "}"

     output_params_list ::= output_params
                       | output_params_list "," output_params
                       | output_params_list ","

     output_params ::= output
                  | flush
                  | maxsize
                  | maxver
                  | pattern

     output ::= "output" ":" STRING

     flush ::= "flush" ":" BOOLEAN

     maxsize ::= "maxsize" ":" INTEGER

     maxver ::= "maxver" ":" INTEGER

     pattern ::= "pattern" ":" STRING

