mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-08-23 02:17:33 +00:00
246 lines
8.1 KiB
XML
246 lines
8.1 KiB
XML
|
<!--
|
||
|
- Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
|
||
|
-
|
||
|
- This Source Code Form is subject to the terms of the Mozilla Public
|
||
|
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
|
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||
|
-->
|
||
|
|
||
|
<section xml:id="class-cmds-library">
|
||
|
<title>class_cmds: Class Commands</title>
|
||
|
<para>
|
||
|
This section describes the Class Commands hooks library, which exposes
|
||
|
several control commands for manipulating client classes, being a part of
|
||
|
the Kea DHCP servers' configurations, without the need to restart those
|
||
|
servers. Using these commands it is possible to add, update, delete and
|
||
|
list client classes configured for a given server.
|
||
|
|
||
|
<note>
|
||
|
<para>This library may only be loaded by <command>kea-dhcp4</command>
|
||
|
or <command>kea-dhcp6</command> process.
|
||
|
</para>
|
||
|
</note>
|
||
|
|
||
|
<para>The Class Commands hooks library is available to premium Kea
|
||
|
customers only</para>
|
||
|
</para>
|
||
|
|
||
|
<section>
|
||
|
<title>class-add command</title>
|
||
|
<para>The <command>class-add</command> command is used to add a new client
|
||
|
class to the DHCP server configuration. This class is appended at the
|
||
|
end of the list of classes used by the server, i.e. this class may depend
|
||
|
on any of the already configured client classes.</para>
|
||
|
<para>The following example demonstrates how to add a new client class
|
||
|
to the DHCPv4 server configuration:
|
||
|
<screen>
|
||
|
{
|
||
|
"command": "class-add",
|
||
|
"arguments": {
|
||
|
"client-classes": [
|
||
|
{
|
||
|
"name": "ipxe_efi_x64",
|
||
|
"test": "option[93].hex == 0x0009",
|
||
|
"next-server": "192.0.2.254",
|
||
|
"server-hostname": "hal9000",
|
||
|
"boot-file-name": "/dev/null"
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
</screen>
|
||
|
</para>
|
||
|
<para>
|
||
|
Note that the <command>client-classes</command> parameter is a JSON list,
|
||
|
but it allows only a single client class to be present. In the future this
|
||
|
hooks library may be extended to support specification of multiple client
|
||
|
classes within a single <command>class-add</command> command.
|
||
|
</para>
|
||
|
|
||
|
<para>
|
||
|
The following is the example response to the <command>class-add</command>
|
||
|
command:
|
||
|
<screen>
|
||
|
{
|
||
|
"result": 0,
|
||
|
"text": "Class 'ipxe_efi_x64' added."
|
||
|
}
|
||
|
</screen>
|
||
|
</para>
|
||
|
</section>
|
||
|
|
||
|
<section>
|
||
|
<title>class-update command</title>
|
||
|
<para>
|
||
|
The <command>class-update</command> command is used to update an existing
|
||
|
client class in the DHCP server configuration. If the client class with the
|
||
|
given name doesn't exist, the server returns result code of 3. In such case,
|
||
|
the server configuration is not modified (client class is not created). The
|
||
|
<command>class-add</command> command must be used instead to create the new
|
||
|
client class.
|
||
|
</para>
|
||
|
<para>
|
||
|
The <command>class-update</command> command has the same arguments structure
|
||
|
as <command>class-add</command> command:
|
||
|
<screen>
|
||
|
{
|
||
|
"command": "class-update",
|
||
|
"arguments": {
|
||
|
"client-classes": [
|
||
|
{
|
||
|
"name": "ipxe_efi_x64",
|
||
|
"test": "option[93].hex == 0x0017",
|
||
|
"next-server": "0.0.0.0",
|
||
|
"server-hostname": "xfce",
|
||
|
"boot-file-name": "/dev/null"
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
</screen>
|
||
|
</para>
|
||
|
<para>
|
||
|
The following is the example response:
|
||
|
<screen>
|
||
|
{
|
||
|
"result": 0,
|
||
|
"text": "Class 'ipxe_efi_x64' updated."
|
||
|
}
|
||
|
</screen>
|
||
|
</para>
|
||
|
<para>
|
||
|
Any parameter of the client class can be modified with this command, except
|
||
|
<command>name</command>. There is currently no way to rename the class,
|
||
|
because the class name is used as a key for searching the class to be updated.
|
||
|
In order to achieve similar effect to renaming the class, an existing class
|
||
|
should be removed with <command>class-del</command> command and then added
|
||
|
again with a different name using <command>class-add</command>. Note however,
|
||
|
that the class with the new name will be added at the end of the list of
|
||
|
configured classes.
|
||
|
</para>
|
||
|
</section>
|
||
|
|
||
|
<section>
|
||
|
<title>class-del command</title>
|
||
|
<para>The <command>class-del</command> is used to remove a particular class
|
||
|
from the server configuration. The class to be removed is identified by name.
|
||
|
The class won't be removed if there are other classes dependening on it.
|
||
|
In order to remove such class, the dependent classes must be removed first.</para>
|
||
|
<para>The following is the example command removing
|
||
|
<command>ipxe_efi_x64</command> class:
|
||
|
<screen>
|
||
|
{
|
||
|
"command": "class-del",
|
||
|
"arguments": {
|
||
|
{
|
||
|
"name": "ipxe_efi_x64"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</screen>
|
||
|
</para>
|
||
|
<para>The following is the sample response to the <command>class-del</command>
|
||
|
command when the specified client class has been found:
|
||
|
<screen>
|
||
|
{
|
||
|
"result": 0,
|
||
|
"text": "Class 'ipxe_efi_x64' deleted."
|
||
|
}
|
||
|
</screen>
|
||
|
</para>
|
||
|
<para>If the class doesn't exist, the result of 3 is returned.</para>
|
||
|
</section>
|
||
|
|
||
|
<section>
|
||
|
<title>class-list command</title>
|
||
|
<para>The <command>class-list</command> is used to retrieve a list of all
|
||
|
client classes. This command includes no arguments:
|
||
|
<screen>
|
||
|
{
|
||
|
"command": "class-list"
|
||
|
}
|
||
|
</screen>
|
||
|
</para>
|
||
|
<para>
|
||
|
The following is the example response of the server including the list
|
||
|
of client classes:
|
||
|
<screen>
|
||
|
{
|
||
|
"result": 0,
|
||
|
"text": "2 classes found",
|
||
|
"arguments": {
|
||
|
"client-classes": [
|
||
|
{
|
||
|
"name": "ipxe_efi_x64"
|
||
|
},
|
||
|
{
|
||
|
"name": "pxeclient"
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
</screen>
|
||
|
</para>
|
||
|
<para>
|
||
|
Note that the returned list does not contain full class definitions, but
|
||
|
merely class names. In order to retrieve full class information, the
|
||
|
<command>class-get</command> command should be used.
|
||
|
</para>
|
||
|
</section>
|
||
|
|
||
|
<section>
|
||
|
<title>class-get command</title>
|
||
|
<para>The <command>class-get</command> is used to retrieve detail information
|
||
|
about specified class. The command structure is very simple:
|
||
|
<screen>
|
||
|
{
|
||
|
"command": "class-get",
|
||
|
"arguments": {
|
||
|
"name": "pxeclient"
|
||
|
}
|
||
|
}
|
||
|
</screen>
|
||
|
</para>
|
||
|
<para>
|
||
|
If the class with the specified name doesn't exist, the status code of 3
|
||
|
is returned. If the specified client class exists, the class details are
|
||
|
returned in the following format:
|
||
|
<screen>
|
||
|
{
|
||
|
"result": 0,
|
||
|
"text": "Class 'pxeclient' definition returned",
|
||
|
"arguments": {
|
||
|
"client-classes": [
|
||
|
{
|
||
|
"name": "pxeclient",
|
||
|
"only-if-required": true,
|
||
|
"test": "option[vendor-class-identifier].text == 'PXEClient'",
|
||
|
"option-def": [
|
||
|
{
|
||
|
"name": "configfile",
|
||
|
"code": 209,
|
||
|
"type": "string"
|
||
|
}
|
||
|
],
|
||
|
"option-data": [ ],
|
||
|
"next-server": "0.0.0.0",
|
||
|
"server-hostname": "xfce",
|
||
|
"boot-file-name": "/dev/null"
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
</screen>
|
||
|
</para>
|
||
|
<para>
|
||
|
Note that the example above is DHCPv4 specific. The last three parameters
|
||
|
are only returned by the DHCPv4 server and never returned by the DHCPv6
|
||
|
server. Also, some of the parameters provided in this example may not be
|
||
|
returned if they are not specified for the class. Specifically,
|
||
|
<command>only-if-required</command>, <command>test</command> and the
|
||
|
<command>option-def</command> are not returned if they are not specified
|
||
|
for the class.
|
||
|
</para>
|
||
|
</section>
|
||
|
</section>
|