client classes and other features. The reservation can be based on
hardware address, DUID, circuit-id or client-id in DHCPv4 and using
hardware address or DUID in DHCPv6. However, there are sometimes
- scenario where the reservation is more complex, e.g. uses other
+ scenarios where the reservation is more complex, e.g. uses other
options that mentioned above, uses part of specific options or perhaps
even a combination of several options and fields to uniquely identify
a client. Those scenarios are addressed by the Flexible Identifiers
<para>
The library can be loaded in similar way as other hook libraries. It
- takes one mandatory parameter identifier-expression:
+ takes a mandatory parameter identifier-expression and optional
+ boolean parameter replace-client-id:
<screen>
"Dhcp6": { <userinput>
"hooks-libraries": [
{
"library": "/path/libdhcp_flex_id.so",
"parameters": {
- "identifier-expression": "<userinput>expression</userinput>"
+ "identifier-expression": "<userinput>expression</userinput>",
+ "replace-client-id": "<userinput>false</userinput>"
}
},
...
]
}
</screen>
+
+ <para>
+ When "replace-client-id" is set to false (which is the default setting),
+ the flex-id hook library uses evaluated flexible identifier solely for
+ identifying host reservations, i.e. searching for reservations within a
+ database. This mode of operation has an implication that replacement of
+ a client device may cause a conflict between an existing lease (allocated
+ for old device) and the new lease being allocated for the new device. The
+ conflict arises because the same flexible identifier is computed for the
+ replaced device and the server will try to allocate the same lease. The
+ mismatch between client identifiers sent by new device and old device causes
+ the server to refuse this new allocation until the old lease expires.
+ </para>
+
+ <para>
+ The flex-id library offers a way to overcome the problem with lease conflicts
+ by dynamically replacing client identifier (or DUID in DHCPv6 case) with a
+ value derived from flexible identifier. The server processes the client's
+ query as if flexible identifier was sent in the client identifier (or DUID)
+ option. This guarantees that returning client (for which the same flexible
+ identifier is evaluated) will be assigned the same lease desplite the client
+ identifier and/or MAC address change.
+ </para>
+
+ <para>
+ The following is a stub configuration that enables this behavior:
+<screen>
+"Dhcp4": { <userinput>
+ "hooks-libraries": [
+ {
+ "library": "/path/libdhcp_flex_id.so",
+ "parameters": {
+ "identifier-expression": "<userinput>expression</userinput>",
+ "replace-client-id": "<userinput>true</userinput>"
+ }
+ },
+ ...
+ ] </userinput>
+}
+</screen>
+ </para>
+
+ <para>
+ Note that for this mechanism to take effect, the DHCPv4 server must be configured
+ to respect the client identifier option value during lease allocation, i.e.
+ "dhcp4-match-client-id" must be set to true. See
+ <xref linkend="dhcp4-match-client-id"/> for details. No additional settings
+ are required for DHCPv6.
+ </para>
+
</section>
<section id="host-cmds">