{
  "module_spec": {
    "module_name": "Dhcp6",
    "module_description": "DHCPv6 server daemon",
    "config_data": [
      {
        "item_name": "server-id",
        "item_type": "map",
        "item_optional": true,
        "item_default": { "type": "LLT" },
        "map_item_spec": [
        {
            "item_name": "type",
            "item_type": "string",
            "item_optional": false,
            "item_default": ""
        },
        {
            "item_name": "identifier",
            "item_type": "string",
            "item_optional": true,
            "item_default": ""
        },
        {
            "item_name": "htype",
            "item_type": "integer",
            "item_optional": true,
            "item_default": 0
        },
        {
            "item_name": "time",
            "item_type": "integer",
            "item_optional": true,
            "item_default": 0
        },
        {
            "item_name": "enterprise-id",
            "item_type": "integer",
            "item_optional": true,
            "item_default": 0
        },
        {
            "item_name": "persist",
            "item_type": "boolean",
            "item_optional": true,
            "item_default": true,
            "item_description": "Indicates if generated server identifier should be stored in a stable storage."
        }
        ]
      },
      {
        "item_name": "hooks-libraries",
        "item_type": "list",
        "item_optional": true,
        "item_default": [],
        "list_item_spec":
        {
          "item_name": "hooks-library-spec",
          "item_type": "map",
          "item_optional": false,
          "item_default": {},
          "map_item_spec": [
             {
                "item_name": "library",
                "item_type": "string",
                "item_optional": false,
                "item_default": ""
             }
          ]
        }
      },

      { "item_name": "interfaces-config",
        "item_type": "map",
        "item_optional": false,
        "item_default": {},
        "map_item_spec": [
        {
            "item_name": "interfaces",
            "item_type": "list",
            "item_optional": false,
            "item_default": [ "*" ],
            "list_item_spec":
            {
                "item_name": "interface_name",
                "item_type": "string",
                "item_optional": false,
                "item_default": "*"
            }
        }
        ]
      },

      { "item_name": "expired-leases-processing",
        "item_type": "map",
        "item_optional": false,
        "item_default": {},
        "map_item_spec": [
        {
            "item_name": "reclaim-timer-wait-time",
            "item_type": "integer",
            "item_optional": false,
            "item_default": 10
        },
        {
            "item_name": "flush-reclaimed-timer-wait-time",
            "item_type": "integer",
            "item_optional": false,
            "item_default": 25
        },
        {
            "item_name": "hold-reclaimed-time",
            "item_type": "integer",
            "item_optional": false,
            "item_default": 3600
        },
        {
            "item_name": "max-reclaim-leases",
            "item_type": "integer",
            "item_optional": false,
            "item_default": 100
        },
        {
            "item_name": "max-reclaim-time",
            "item_type": "integer",
            "item_optional": false,
            "item_default": 250
        },
        {
            "item_name": "unwarned-reclaim-cycles",
            "item_type": "integer",
            "item_optional": false,
            "item_default": 5
        }
        ]
      },

      { "item_name": "renew-timer",
        "item_type": "integer",
        "item_optional": false,
        "item_default": 1000
      },

      { "item_name": "rebind-timer",
        "item_type": "integer",
        "item_optional": false,
        "item_default": 2000
      },

      { "item_name": "preferred-lifetime",
        "item_type": "integer",
        "item_optional": false,
        "item_default": 3000
      },

      { "item_name": "valid-lifetime",
        "item_type": "integer",
        "item_optional": false,
        "item_default": 4000
      },

      { "item_name": "option-def",
        "item_type": "list",
        "item_optional": false,
        "item_default": [],
        "list_item_spec":
        {
          "item_name": "single-option-def",
          "item_type": "map",
          "item_optional": false,
          "item_default": {},
          "map_item_spec": [
          {
            "item_name": "name",
            "item_type": "string",
            "item_optional": false,
            "item_default": ""
          },

          { "item_name": "code",
            "item_type": "integer",
            "item_optional": false,
            "item_default": 0
          },

          { "item_name": "type",
            "item_type": "string",
            "item_optional": false,
            "item_default": ""
          },

          { "item_name": "array",
            "item_type": "boolean",
            "item_optional": false,
            "item_default": false
          },

          { "item_name": "record-types",
            "item_type": "string",
            "item_optional": false,
            "item_default": ""
          },

          { "item_name": "space",
            "item_type": "string",
            "item_optional": false,
            "item_default": ""
          },

          { "item_name": "encapsulate",
            "item_type": "string",
            "item_optional": false,
            "item_default": ""
          } ]
        }
      },

      { "item_name": "option-data",
        "item_type": "list",
        "item_optional": false,
        "item_default": [],
        "list_item_spec":
        {
          "item_name": "single-option-data",
          "item_type": "map",
          "item_optional": false,
          "item_default": {},
          "map_item_spec": [
          {
            "item_name": "name",
            "item_type": "string",
            "item_optional": false,
            "item_default": ""
          },

          { "item_name": "code",
            "item_type": "integer",
            "item_optional": false,
            "item_default": 0
          },
          { "item_name": "data",
            "item_type": "string",
            "item_optional": false,
            "item_default": ""
          },
          { "item_name": "csv-format",
            "item_type": "boolean",
            "item_optional": false,
            "item_default": false
          },
          { "item_name": "space",
            "item_type": "string",
            "item_optional": false,
            "item_default": "dhcp6"
          } ]
        }
      },

      { "item_name": "lease-database",
        "item_type": "map",
        "item_optional": false,
        "item_default": {"type": "memfile"},
        "map_item_spec": [
            {
                "item_name": "type",
                "item_type": "string",
                "item_optional": false,
                "item_default": ""
            },
            {
                "item_name": "name",
                "item_type": "string",
                "item_optional": true,
                "item_default": ""
            },
            {
                "item_name": "user",
                "item_type": "string",
                "item_optional": true,
                "item_default": ""
            },
            {
                "item_name": "host",
                "item_type": "string",
                "item_optional": true,
                "item_default": ""
            },
            {
                "item_name": "password",
                "item_type": "string",
                "item_optional": true,
                "item_default": ""
            },
            {
                "item_name": "persist",
                "item_type": "boolean",
                "item_optional": true,
                "item_default": true
            },
            {
                "item_name": "lfc-interval",
                "item_type": "integer",
                "item_optional": true,
                "item_default": 0
            },
            {
                "item_name": "readonly",
                "item_type": "boolean",
                "item_optional": true,
                "item_default": false
            }
        ]
      },
      { "item_name": "client-classes",
        "item_type": "list",
        "item_optional": true,
        "item_default": [],
        "list_item_spec":
        {
            "item_name": "client-class",
            "item_type": "map",
            "item_optional": false,
            "item_default": {},
            "map_item_spec": [
                { "item_name": "name",
                  "item_type": "string",
                  "item_optional": false,
                  "item_default": ""
                },
                { "item_name": "test",
                  "item_type": "string",
                  "item_optional": true,
                  "item_default": ""
                },
                { "item_name": "option-data",
                  "item_type": "list",
                  "item_optional": true,
                  "item_default": [],
                  "list_item_spec":
                  {
                    "item_name": "single-option-data",
                    "item_type": "map",
                    "item_optional": false,
                    "item_default": {},
                    "map_item_spec": [
                    {
                      "item_name": "name",
                      "item_type": "string",
                      "item_optional": false,
                      "item_default": ""
                    },
                    {
                      "item_name": "code",
                      "item_type": "integer",
                      "item_optional": false,
                      "item_default": 0
                    },
                    {
                      "item_name": "data",
                      "item_type": "string",
                      "item_optional": false,
                      "item_default": ""
                    },
                    { "item_name": "csv-format",
                      "item_type": "boolean",
                      "item_optional": false,
                      "item_default": false
                      },
                    { "item_name": "space",
                      "item_type": "string",
                      "item_optional": false,
                      "item_default": "dhcp4"
                    } ]
                  }
                }
            ]
        }
      },
      { "item_name": "subnet6",
        "item_type": "list",
        "item_optional": false,
        "item_default": [],
        "list_item_spec":
        {
            "item_name": "single-subnet6",
            "item_type": "map",
            "item_optional": false,
            "item_default": {},
            "map_item_spec": [

                { "item_name": "subnet",
                  "item_type": "string",
                  "item_optional": false,
                  "item_default": ""
                },

                { "item_name": "id",
                  "item_type": "integer",
                  "item_optional": false,
                  "item_default": 0
                },

                { "item_name": "interface",
                  "item_type": "string",
                  "item_optional": false,
                  "item_default": ""
                },

                { "item_name": "interface-id",
                  "item_type": "string",
                  "item_optional": false,
                  "item_default": ""
                },

                { "item_name": "rapid-commit",
                  "item_type": "boolean",
                  "item_optional": false,
                  "item_default": false
                },

                { "item_name": "renew-timer",
                  "item_type": "integer",
                  "item_optional": false,
                  "item_default": 1000
                },

                { "item_name": "rebind-timer",
                  "item_type": "integer",
                  "item_optional": false,
                  "item_default": 2000
                },

                { "item_name": "preferred-lifetime",
                  "item_type": "integer",
                  "item_optional": false,
                  "item_default": 3000
                },

                { "item_name": "valid-lifetime",
                  "item_type": "integer",
                  "item_optional": false,
                  "item_default": 7200
                },
                { "item_name": "pools",
                  "item_type": "map",
                  "item_optional": true,
                  "item_default" : {},
                  "map_item_spec": [
                      { "item_name": "pool",
                        "item_type": "list",
                        "item_optional": false,
                        "item_default": [],
                        "list_item_spec":
                        {
                            "item_name": "type",
                            "item_type": "string",
                            "item_optional": false,
                            "item_default": ""
                        }
                      },
                      { "item_name": "option-data",
                        "item_type": "list",
                        "item_optional": false,
                        "item_default": [],
                        "item_description": "Holds a list of pool specific DHCP options.",
                        "list_item_spec":
                        {
                            "item_name": "single-option-data",
                            "item_type": "map",
                            "item_optional": false,
                            "item_default": {},
                            "item_description": "One of the pool specific DHCP options.",
                            "map_item_spec": [
                                {
                                    "item_name": "name",
                                    "item_type": "string",
                                    "item_optional": false,
                                    "item_default": "",
                                    "item_description": "Option name."
                                },

                                { "item_name": "code",
                                  "item_type": "integer",
                                  "item_optional": false,
                                  "item_default": 0,
                                  "item_description": "Option code."
                                },
                                { "item_name": "data",
                                  "item_type": "string",
                                  "item_optional": false,
                                  "item_default": "",
                                  "item_description": "Option value."
                                },
                                { "item_name": "csv-format",
                                  "item_type": "boolean",
                                  "item_optional": false,
                                  "item_default": false,
                                  "item_description": "Indicates if option value is specified as comma separated values."
                                },
                                { "item_name": "space",
                                  "item_type": "string",
                                  "item_optional": false,
                                  "item_default": "dhcp6",
                                  "item_description": "Option space."
                                } ]
                        }
                      } ]
                },

                { "item_name": "client-class",
                  "item_type": "string",
                  "item_optional": false,
                  "item_default": "",
                  "item_description" : "Restricts access to this subnet to specified client class (if defined)"
                },

                { "item_name": "relay",
                  "item_type": "map",
                  "item_optional": false,
                  "item_default": {},
                  "item_description" : "Structure holding relay information.",
                  "map_item_spec": [
                      {
                          "item_name": "ip-address",
                          "item_type": "string",
                          "item_optional": false,
                          "item_default": "::",
                          "item_description" : "IPv6 address of the relay (defaults to :: if not specified)."
                      }
                   ]
                },

                {
                  "item_name": "pd-pools",
                  "item_type": "list",
                  "item_optional": true,
                  "item_default": [],
                  "list_item_spec":
                  {
                      "item_name": "pd-pool",
                      "item_type": "map",
                      "item_optional": false,
                      "item_default": {},
                      "map_item_spec": [
                      {
                          "item_name": "prefix",
                          "item_type": "string",
                          "item_optional": false,
                          "item_default": ""
                       },
                       {
                           "item_name": "prefix-len",
                           "item_type": "integer",
                           "item_optional": false,
                           "item_default": 128
                       },
                       {
                           "item_name": "delegated-len",
                           "item_type": "integer",
                           "item_optional": false,
                           "item_default": 128
                       },
                       {
                          "item_name": "excluded-prefix",
                          "item_type": "string",
                          "item_optional": true,
                          "item_default": "",
                          "item_description": "excluded prefix as per RFC6603"
                       },
                       {
                           "item_name": "excluded-prefix-len",
                           "item_type": "integer",
                           "item_optional": true,
                           "item_default": 128,
                           "item_description": "excluded prefix length"
                       },
                       {
                           "item_name": "option-data",
                           "item_type": "list",
                           "item_optional": false,
                           "item_default": [],
                           "item_description": "Holds a list of the pd-pool specific DHCP options.",
                           "list_item_spec":
                           {
                               "item_name": "single-option-data",
                               "item_type": "map",
                               "item_optional": false,
                               "item_default": {},
                               "item_description": "One of the pd-pool specific DHCP options.",
                               "map_item_spec": [
                                {
                                    "item_name": "name",
                                    "item_type": "string",
                                    "item_optional": false,
                                    "item_default": "",
                                    "item_description": "Option name."
                                },

                                { "item_name": "code",
                                  "item_type": "integer",
                                  "item_optional": false,
                                  "item_default": 0,
                                  "item_description": "Option code."

                                },
                                { "item_name": "data",
                                  "item_type": "string",
                                  "item_optional": false,
                                  "item_default": "",
                                  "item_description": "Option value."
                                },
                                { "item_name": "csv-format",
                                  "item_type": "boolean",
                                  "item_optional": false,
                                  "item_default": false,
                                  "item_description": "Indicates if option value is specified as comma separated values."
                                },
                                { "item_name": "space",
                                  "item_type": "string",
                                  "item_optional": false,
                                  "item_default": "dhcp6",
                                  "item_description": "Option space."
                                } ]
                           }
                       } ]
                    }
                },
                { "item_name": "option-data",
                  "item_type": "list",
                  "item_optional": false,
                  "item_default": [],
                  "list_item_spec":
                  {
                    "item_name": "single-option-data",
                    "item_type": "map",
                    "item_optional": false,
                    "item_default": {},
                    "map_item_spec": [
                    {
                      "item_name": "name",
                      "item_type": "string",
                      "item_optional": false,
                      "item_default": ""
                    },
                    {
                      "item_name": "code",
                      "item_type": "integer",
                      "item_optional": false,
                      "item_default": 0
                    },
                    {
                      "item_name": "data",
                      "item_type": "string",
                      "item_optional": false,
                      "item_default": ""
                    },
                    { "item_name": "csv-format",
                      "item_type": "boolean",
                      "item_optional": false,
                      "item_default": false
                    },
                    { "item_name": "space",
                      "item_type": "string",
                      "item_optional": false,
                      "item_default": "dhcp6"
                    } ]
                  }
                },
                { "item_name": "reservations",
                  "item_type": "list",
                  "item_optional": false,
                  "item_default": [],
                  "list_item_spec":
                  {
                      "item_name": "reservation",
                      "item_type": "map",
                      "item_optional": false,
                      "item_default": {},
                      "map_item_spec": [
                      {
                        "item_name": "hw-address",
                        "item_type": "string",
                        "item_optional": true,
                        "item_default": ""
                      },
                      {
                        "item_name": "duid",
                        "item_type": "string",
                        "item_optional": true,
                        "item_default": ""
                      },
                      {
                        "item_name": "hostname",
                        "item_type": "string",
                        "item_optional": false,
                        "item_default": ""
                      },
                      {
                        "item_name": "ip-addresses",
                        "item_type": "list",
                        "item_optional": false,
                        "item_default": [],
                        "list_item_spec":
                        {
                            "item_name": "ip-address-reservation",
                            "item_type": "string",
                            "item_optional": false,
                            "item_default": ""
                        }
                      },
                      {
                        "item_name": "prefixes",
                        "item_type": "list",
                        "item_optional": false,
                        "item_default": [],
                        "list_item_spec":
                        {
                            "item_name": "prefix-reservation",
                            "item_type": "string",
                            "item_optional": false,
                            "item_default": ""
                        }
                      },
                      {
                        "item_name": "client-classes",
                        "item_type": "list",
                        "item_optional": true,
                        "item_default": [],
                        "item_description": "list of reserved classes for a client",
                        "list_item_spec":
                        {
                          "item_name": "client-class",
                          "item_type": "string",
                          "item_optional": false,
                          "item_default": "",
                          "item_description": "one of the classes reserved for a client"
                        }
                      } ]
                  }
                },
                {
                  "item_name": "reservation-mode",
                  "item_type": "string",
                  "item_optional": true,
                  "item_default": "all",
                  "item_description": "Specifies allowed host reservation types. Disabling unused modes may improve performance. Allowed values: disabled, off, out-of-pool, all"
                } ]
            }
      },

      { "item_name": "mac-sources",
        "item_type": "list",
        "item_optional": true,
        "item_default": [ "any" ],
        "item_description": "Lists MAC/hardware address acquisition sources",
        "list_item_spec":
        {
          "item_name": "source",
          "item_type": "string",
          "item_optional": true,
          "item_default": "any"
        }
      } ,

      { "item_name": "dhcp-ddns",
        "item_type": "map",
        "item_optional": false,
        "item_default": {"enable-updates": false},
        "item_description" : "Contains parameters pertaining DHCP-driven DDNS updates",
        "map_item_spec": [
            {
                "item_name": "enable-updates",
                "item_type": "boolean",
                "item_optional": false,
                "item_default": false,
                "item_description" : "Enables DDNS update processing"
            },
            {
                "item_name": "server-ip",
                "item_type": "string",
                "item_optional": true,
                "item_default": "127.0.0.1",
                "item_description" : "IP address of kea-dhcp-ddns (IPv4 or IPv6)"
            },
            {
                "item_name": "server-port",
                "item_type": "integer",
                "item_optional": true,
                "item_default": 53001,
                "item_description" : "port number of kea-dhcp-ddns"
            },
            {
                "item_name": "sender-ip",
                "item_type": "string",
                "item_optional": true,
                "item_default": "",
                "item_description" : "IP address from which to send to kea-dhcp-ddns (IPv4 or IPv6)"
            },
            {
                "item_name": "sender-port",
                "item_type": "integer",
                "item_optional": true,
                "item_default": 0,
                "item_description" : "port number from which to send to kea-dhcp-ddns"
            },
            {
                "item_name": "max-queue-size",
                "item_type": "integer",
                "item_optional": true,
                "item_default": 1024,
                "item_description" : "maximum number of requests allowed in the send queue"
            },
            {
                "item_name": "ncr-protocol",
                "item_type": "string",
                "item_optional": true,
                "item_default": "UDP",
                "item_description" : "Socket protocol to use with kea-dhcp-ddns"
            },
            {
                "item_name": "ncr-format",
                "item_type": "string",
                "item_optional": true,
                "item_default": "JSON",
                "item_description" : "Format of the update request packet"
            },
            {

                "item_name": "always-include-fqdn",
                "item_type": "boolean",
                "item_optional": true,
                "item_default": false,
                "item_description": "Enable always including the FQDN option in its response"
            },
            {
                "item_name": "override-no-update",
                "item_type": "boolean",
                "item_optional": true,
                "item_default": false,
                "item_description": "Do update, even if client requested no updates with N flag"
            },
            {
                "item_name": "override-client-update",
                "item_type": "boolean",
                "item_optional": true,
                "item_default": false,
                "item_description": "Server performs an update even if client requested delegation"
            },
            {
                "item_name": "replace-client-name",
                "item_type": "string",
                "item_optional": true,
                "item_default": "never",
                "item_description": "Should server replace the domain-name supplied by the client"
            },
            {
                "item_name": "generated-prefix",
                "item_type": "string",
                "item_optional": true,
                "item_default": "myhost",
                "item_description": "Prefix to use when generating the client's name"
            },

            {
                "item_name": "qualifying-suffix",
                "item_type": "string",
                "item_optional": true,
                "item_default": "",
                "item_description": "Fully qualified domain-name suffix if partial name provided by client"
            },
        ]
      },
    ],
    "commands": [
        {
            "command_name": "shutdown",
            "command_description": "Shuts down DHCPv6 server.",
            "command_args": [
                {
                    "item_name": "pid",
                    "item_type": "integer",
                    "item_optional": true
                }
            ]
        },

        {
            "command_name": "libreload",
            "command_description": "Reloads the current hooks libraries.",
            "command_args": []
        }
    ]
  }
}
