![]() |
Kea 3.0.0
|
Implements the logic for processing commands pertaining to lease manipulation. More...
#include <lease_cmds.h>
Public Member Functions | |
LeaseCmds () | |
Constructor. | |
int | lease4DelHandler (hooks::CalloutHandle &handle) |
lease4-del command handler | |
void | lease4Offer (hooks::CalloutHandle &callout_handle, BindingVariableMgrPtr mgr) |
lease4_offer hookpoint handler. | |
int | lease4ResendDdnsHandler (hooks::CalloutHandle &handle) |
lease4-resend-ddns command handler | |
int | lease4UpdateHandler (hooks::CalloutHandle &handle) |
lease4-update handler | |
int | lease4WipeHandler (hooks::CalloutHandle &handle) |
lease4-wipe handler | |
int | lease6BulkApplyHandler (hooks::CalloutHandle &handle) |
lease6-bulk-apply command handler | |
int | lease6DelHandler (hooks::CalloutHandle &handle) |
lease6-del command handler | |
int | lease6ResendDdnsHandler (hooks::CalloutHandle &handle) |
lease6-resend-ddns command handler | |
int | lease6UpdateHandler (hooks::CalloutHandle &handle) |
lease6-update handler | |
int | lease6WipeHandler (hooks::CalloutHandle &handle) |
lease6-wipe handler | |
int | leaseAddHandler (hooks::CalloutHandle &handle) |
lease4-add, lease6-add command handler | |
int | leaseGetAllHandler (hooks::CalloutHandle &handle) |
lease4-get-all, lease6-get-all commands handler | |
int | leaseGetByClientIdHandler (hooks::CalloutHandle &handle) |
lease4-get-by-client-id command handler | |
int | leaseGetByDuidHandler (hooks::CalloutHandle &handle) |
lease6-get-by-duid command handler | |
int | leaseGetByHostnameHandler (hooks::CalloutHandle &handle) |
lease4-get-by-hostname and lease6-get-by-hostname commands handler | |
int | leaseGetByHwAddressHandler (hooks::CalloutHandle &handle) |
lease4-get-by-hw-address command handler | |
int | leaseGetHandler (hooks::CalloutHandle &handle) |
lease4-get, lease6-get command handler | |
int | leaseGetPageHandler (hooks::CalloutHandle &handle) |
lease4-get-page, lease6-get-page commands handler | |
void | leases4Committed (hooks::CalloutHandle &callout_handle, BindingVariableMgrPtr mgr) |
leases4_committed hookpoint handler. | |
void | leases6Committed (hooks::CalloutHandle &callout_handle, BindingVariableMgrPtr mgr) |
leases6_committed hookpoint handler. | |
int | leaseWriteHandler (hooks::CalloutHandle &handle) |
lease4-write handler, lease6-write handler |
Implements the logic for processing commands pertaining to lease manipulation.
This class is used by the callouts implementing command handlers for lease manipulations.
Definition at line 27 of file lease_cmds.h.
isc::lease_cmds::LeaseCmds::LeaseCmds | ( | ) |
Constructor.
It creates an instance of the LeaseCmdsImpl
.
Definition at line 3017 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::lease4DelHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-del command handler
This command attempts to delete an IPv4 lease that match selected criteria. It extracts the command name and arguments from the given CalloutHandle, attempts to process them, and then set's the handle's "response" argument accordingly. If the lease is deleted successfully, then a call to isc::dhcp::queueNCR() is issued, which to generate an CHG_REMOVE request to kea-dhcp-ddns, if appropriate.
Two types of parameters are supported: (subnet-id, address) or (subnet-id, identifier-type, identifier).
Example command for deletion by (subnet-id, address): { "command": "lease4-del", "arguments": { "subnet-id": 1, "ip-address": "192.0.2.202" } }
Example command for deletion by (subnet-id, identifier-type, identifier) { "command": "lease4-del", "arguments": { "subnet-id": 1, "identifier-type": "hw-address", "identifier": "00:01:02:03:04:05" } }"; @param handle Callout context - which is expected to contain the delete command JSON text in the "command" argument
Definition at line 2971 of file lease_cmds.cc.
void isc::lease_cmds::LeaseCmds::lease4Offer | ( | hooks::CalloutHandle & | callout_handle, |
BindingVariableMgrPtr | mgr ) |
lease4_offer hookpoint handler.
If the offer_lifetime callout argument is 0 the handler simply returns. Otherwise it will evaluate the binding variables (if any) and update the given lease's user-context accordingly. This includes updating the lease in the lease back end.
callout_handle | Callout context - which is expected to contain the query4, response4, leases4 arguments, and offer_lifetime. |
mgr | Pointer to the BindingVariableMgr singleton. |
Definition at line 3022 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::lease4ResendDdnsHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-resend-ddns command handler
This command attempts to resend the DDNS updates for the IPv4 lease that matches the selection criteria.
It extracts the command name and arguments from the given CalloutHandle, attempts to process them, and then set's the handle's "response" argument accordingly.
A single parameter is supported: ip-address:
Example command to resend DDNS based on existing FDQN and flags { "command": "lease4-resend-ddns", "arguments": { "ip-address": "192.0.2.202" } }
handle | Callout context - which is expected to contain the lease4-resend-ddns command JSON text in the "command" argument |
Definition at line 3003 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::lease4UpdateHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-update handler
This command attempts to update existing IPv4 lease. The parameters specified will replace existing lease. The only condition is that the IP address must not change. If you want to change the IP address, please use lease4-del and lease4-add instead. It extracts the command name and arguments from the given CalloutHandle, attempts to process them, and then set's the handle's "response" argument accordingly.
Example command: { "command": "lease4-update", "arguments": { "subnet-id": 44, "ip-address": "192.0.2.1", "hw-address": "1a:1b:1c:1d:1e:1f", "hostname": "newhostname.example.org" } };
The optional 'force-create' boolean parameter may be specified to force the lease to be created if it doesn't exist. By default, this parameter is set to false, which means that the lease is not created.
handle | Callout context - which is expected to contain the update command JSON text in the "command" argument |
Definition at line 2981 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::lease4WipeHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-wipe handler
This commands attempts to remove all IPv4 leases from a specific subnet. Currently the leases are removed from the database, without any processing (like calling hooks or doing DDNS cleanups). It extracts the command name and arguments from the given CalloutHandle, attempts to process them, and then set's the handle's "response" argument accordingly.
Example command: { "command": "lease4-wipe", "arguments": { "subnet-id": 44 } }"; @param handle Callout context - which is expected to contain the wipe command JSON text in the "command" argument
Definition at line 2991 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::lease6BulkApplyHandler | ( | hooks::CalloutHandle & | handle | ) |
lease6-bulk-apply command handler
This command conveys information about multiple leases to be added, updated or deleted. This command should be used instead of lease6-add, lease6-update and lease6-del when it is desired to apply multiple lease changes within a single transaction. This is much faster and should be used in cases when the performance is critical. This command was added as a result of our experience with High Availability where multiple IPv6 addresses and/or prefixes can be allocated for a single DHCPv6 packet.
Example structure of the command:
{ "command": "lease6-bulk-apply", "arguments": { "deleted-leases": [ { "subnet-id": 66, "ip-address": "2001:db8:abcd::", "type": "IA_PD", ... }, { "subnet-id": 66, "ip-address": "2001:db8:abcd::234", "type": "IA_NA", ... } ], "leases": [ { "subnet-id": 66, "ip-address": "2001:db8:cafe::", "type": "IA_PD", ... }, { "subnet-id": 66, "ip-address": "2001:db8:abcd::333", "type": "IA_NA", ... } ] } }
The response indicates which of the leases failed to be applied. For example:
{ "result": 0, "text": IPv6 leases bulk apply completed. "arguments": { "failed-deleted-leases": [ { "subnet-id": 66, "ip-address": "2001:db8:abcd::", "type": "IA_PD" } ], "failed-leases": [ { "subnet-id": 66, "ip-address": "2001:db8:cafe::", "type": "IA_PD", ... } ] } }
The command handler first attempts to delete all leases listed in the "deleted-leases" list. Next, it adds the leases listed in the "leases" list. If any of these leases already exists, it is updated.
handle | Callout context - which is expected to contain the add command JSON text in the "command" argument |
Definition at line 2931 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::lease6DelHandler | ( | hooks::CalloutHandle & | handle | ) |
lease6-del command handler
This command attempts to delete a lease that match selected criteria. It extracts the command name and arguments from the given CalloutHandle, attempts to process them, and then set's the handle's "response" argument accordingly. If the lease is deleted successfully, then a call to isc::dhcp::queueNCR() is issued, which to generate an CHG_REMOVE request to kea-dhcp-ddns, if appropriate.
Two types of parameters are supported: (subnet-id, address) or (subnet-id, type, iaid, identifier-type, identifier).
Example command for deletion by (subnet-id, address): { "command": "lease6-del", "arguments": { "subnet-id": 1, "ip-address": "192.0.2.202" } }
Example command for deletion by (subnet-id, type, iaid, identifier-type, identifier): { "command": "lease6-del", "arguments": { "subnet-id": 1, "type": "IA_NA", "iaid": 123456, "identifier-type": "hw-address", "identifier": "00:01:02:03:04:05" } }"; @param handle Callout context - which is expected to contain the delete command JSON text in the "command" argument
Definition at line 2976 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::lease6ResendDdnsHandler | ( | hooks::CalloutHandle & | handle | ) |
lease6-resend-ddns command handler
This command attempts to resend the DDNS updates for the IPv6 lease that matches the selection criteria.
It extracts the command name and arguments from the given CalloutHandle, attempts to process them, and then set's the handle's "response" argument accordingly.
A single parameter is supported: ip-address:
Example command to resend DDNS based on existing FDQN and flags { "command": "lease6-resend-ddns", "arguments": { "ip-address": "2001:db8:abcd::", } }
handle | Callout context - which is expected to contain the lease6-resend-ddns command JSON text in the "command" argument |
Definition at line 3008 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::lease6UpdateHandler | ( | hooks::CalloutHandle & | handle | ) |
lease6-update handler
This command attempts to update existing IPv6 lease. The parameters specified will replace existing lease. The only condition is that the IP address must not change. If you want to change the IP address, please use lease6-del and lease6-add instead. It extracts the command name and arguments from the given CalloutHandle, attempts to process them, and then set's the handle's "response" argument accordingly.
Example command: { "command": "lease6-update", "arguments": { "subnet-id": 66, "ip-address": "2001:db8::1", "iaid": 7654321, "duid": "88:88:88:88:88:88:88:88", "hostname": "newhostname.example.org" } }"; The optional 'force-create' boolean parameter may be specified to force the lease to be created if it doesn't exist. By default, this parameter is set to false, which means that the lease is not created. @param handle Callout context - which is expected to contain the update command JSON text in the "command" argument
Definition at line 2986 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::lease6WipeHandler | ( | hooks::CalloutHandle & | handle | ) |
lease6-wipe handler
This commands attempts to remove all IPv4 leases from a specific subnet. Currently the leases are removed from the database, without any processing (like calling hooks or doing DDNS cleanups). It extracts the command name and arguments from the given CalloutHandle, attempts to process them, and then set's the handle's "response" argument accordingly.
Example command: { "command": "lease6-wipe", "arguments": { "subnet-id": 44 } };
handle | Callout context - which is expected to contain the wipe command JSON text in the "command" argument |
Definition at line 2997 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::leaseAddHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-add, lease6-add command handler
This command attempts to add a lease. It extracts the command name and arguments from the given CalloutHandle, attempts to process them, and then set's the handle's "response" argument accordingly.
This function covers both v4 and v6 leases.
Example command for v4: { "command": "lease4-add", "parameters": { "address": "192.0.2.1", "hwaddr": "00:01:02:03:04:05", "client-id": "this-is-a-client", "valid-lft": 3600, "expire": 12345678, "subnet-id": 1, "fqdn-fwd": true, "fqdn-rev": true, "hostname": "myhost.example.org", "state": 0 } } Example command for v6: { "command": "lease6-add", "arguments": { "subnet-id": 66, "ip-address": "2001:db8:abcd::", "type": "IA_PD", "prefix-len": 48, "duid": "01:02:03:04:05:06:07:08", "iaid": 1234, "preferred-lft": 500, "valid-lft": 1000, "expire": 12345678, "fqdn-fwd": true, "fqdn-rev": true, "hostname": "urania.example.org"" } } @param handle Callout context - which is expected to contain the add command JSON text in the "command" argument
Definition at line 2926 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::leaseGetAllHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-get-all, lease6-get-all commands handler
These commands attempt to retrieve all IPv4 or IPv6 leases, or all IPv4 or all IPv6 leases belonging to the particular subnets. If no subnet identifiers are provided, it returns all IPv4 or IPv6 leases from the database.
Example command for IPv4 query by (subnet-ids): { "command": "lease4-get-all", "arguments": { "subnets": [ 1, 2, 3, 4 ] } }
Example command for retrieving all IPv6 leases: { "command": "lease6-get-all", }
handle | Callout context - which is expected to contain the get command JSON text in the "command" argument |
Definition at line 2941 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::leaseGetByClientIdHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-get-by-client-id command handler
This command attempts to retrieve all IPv4 leases with a particular Client Id.
Example command: { "command": "lease4-get-by-client-id", "arguments": { "client-id": "this-is-a-client" } }
handle | Callout context - which is expected to contain the get command JSON text in the "command" argument |
Definition at line 2956 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::leaseGetByDuidHandler | ( | hooks::CalloutHandle & | handle | ) |
lease6-get-by-duid command handler
This command attempts to retrieve all IPv6 leases with a particular DUID.
Example command: { "command": "lease6-get-by-duid", "arguments": { "duid": "01:02:03:04:05:06:07:08" } }
handle | Callout context - which is expected to contain the get command JSON text in the "command" argument |
Definition at line 2961 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::leaseGetByHostnameHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-get-by-hostname and lease6-get-by-hostname commands handler
These commands attempt to retrieve all IPv4 or Ipv6 leases with a particular hostname.
Example command for v4: { "command": "lease4-get-by-hostname", "arguments": { "hostname": "urania.example.org" } }
handle | Callout context - which is expected to contain the get command JSON text in the "command" argument |
Definition at line 2966 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::leaseGetByHwAddressHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-get-by-hw-address command handler
This command attempts to retrieve all IPv4 leases with a particular hardware address.
Example command: { "command": "lease4-get-by-hw-address", "arguments": { "hwaddr": "00:01:02:03:04:05" } }
handle | Callout context - which is expected to contain the get command JSON text in the "command" argument |
Definition at line 2951 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::leaseGetHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-get, lease6-get command handler
This command attempts to retrieve a lease that match selected criteria. It extracts the command name and arguments from the given CalloutHandle, attempts to process them, and then set's the handle's "response" argument accordingly.
The following types of parameters are supported:
Example command for query by (subnet-id, address): { "command": "lease4-get", "arguments": { "subnet-id": 1, "ip-address": "192.0.2.202" } }
Example command for query by (subnet-id, identifier-type, identifier) { "command": "lease4-get", "arguments": { "subnet-id": 1, "identifier-type": "hw-address", "identifier": "00:01:02:03:04:05" } }
Example command for query by (subnet-id, type, iana, identifier-type, identifier): { "command": "lease6-get", "arguments": { "subnet-id": 66, "iaid": 42, "type": "IA_NA", "identifier-type": "duid", "identifier": "77:77:77:77:77:77:77:77" } }
handle | Callout context - which is expected to contain the get command JSON text in the "command" argument |
Definition at line 2936 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::leaseGetPageHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-get-page, lease6-get-page commands handler
These commands attempt to retrieve 1 page of all IPv4 or IPv6 leases. The size of the page is specified by the caller. The caller also specifies the last address returned in the previous page. The new page starts from the first address following the address specified by the caller. If the first page should be returned the IPv4 zero address, IPv6 zero address or the keyword "start" should be provided instead of the last address.
handle | Callout context - which is expected to contain the get commands JSON text in the "command" argument. |
Definition at line 2946 of file lease_cmds.cc.
void isc::lease_cmds::LeaseCmds::leases4Committed | ( | hooks::CalloutHandle & | callout_handle, |
BindingVariableMgrPtr | mgr ) |
leases4_committed hookpoint handler.
Evaluates the binding variables (if any), and updates the active lease's user-context accordingly. This includes updating the lease in the lease back end.
callout_handle | Callout context - which is expected to contain the query4, response4, and leases4 arguments. |
mgr | Pointer to the BindingVariableMgr singleton. |
Definition at line 3028 of file lease_cmds.cc.
void isc::lease_cmds::LeaseCmds::leases6Committed | ( | hooks::CalloutHandle & | callout_handle, |
BindingVariableMgrPtr | mgr ) |
leases6_committed hookpoint handler.
Evaluates the binding variables (if any), and updates the active leases' user-context accordingly. This includes updating the leases in the lease back end.
callout_handle | Callout context - which is expected to contain the query6, response6, and leases6 arguments. |
mgr | Pointer to the BindingVariableMgr singleton. |
Definition at line 3034 of file lease_cmds.cc.
int isc::lease_cmds::LeaseCmds::leaseWriteHandler | ( | hooks::CalloutHandle & | handle | ) |
lease4-write handler, lease6-write handler
This commands attempts to write the lease database to a CSV file. Currently it is supported only by the memfile database and should be reserved to emergency situations. It extracts the command name and arguments from the given CalloutHandle, attempts to process them, and then set's the handle's "response" argument accordingly.
Example command: { "command": "lease4-write", "arguments": { "filename": "leases.csv" } }"; @param handle Callout context - which is expected to contain the write command JSON text in the "command" argument
Definition at line 3013 of file lease_cmds.cc.