12#include <boost/pointer_cast.hpp>
24 args = Element::createMap();
25 args->set(
"origin", Element::create(
"ha-partner"));
28 args->set(
"max-period", Element::create(
static_cast<long int>(max_period)));
31 insertService(command, server_type);
38 args = Element::createMap();
39 args->set(
"origin", Element::create(
"ha-partner"));
41 insertService(command, server_type);
48 insertService(command, server_type);
55 insertService(command, server_type);
62 insertLeaseExpireTime(lease_as_json);
63 lease_as_json->set(
"force-create", Element::create(
true));
72 insertLeaseExpireTime(lease_as_json);
87 const uint32_t limit) {
96 ElementPtr from_element = Element::create(last_lease4 ? last_lease4->addr_.toText() :
"start");
98 ElementPtr limit_element = Element::create(
static_cast<long long int>(limit));
101 args->set(
"from", from_element);
102 args->set(
"limit", limit_element);
113 ElementPtr deleted_leases_list = Element::createList();
114 for (
auto lease = deleted_leases->begin(); lease != deleted_leases->end();
116 ElementPtr lease_as_json = (*lease)->toElement();
117 insertLeaseExpireTime(lease_as_json);
118 deleted_leases_list->add(lease_as_json);
121 ElementPtr leases_list = Element::createList();
122 for (
auto lease = leases->begin(); lease != leases->end();
124 ElementPtr lease_as_json = (*lease)->toElement();
125 insertLeaseExpireTime(lease_as_json);
126 leases_list->add(lease_as_json);
130 args->set(
"deleted-leases", deleted_leases_list);
131 args->set(
"leases", leases_list);
140 ElementPtr deleted_leases_list = Element::createList();
141 ElementPtr leases_list = Element::createList();
145 while ((lease = boost::dynamic_pointer_cast<Lease6>(leases.
pop(op_type)))) {
146 ElementPtr lease_as_json = lease->toElement();
147 insertLeaseExpireTime(lease_as_json);
149 deleted_leases_list->add(lease_as_json);
151 leases_list->add(lease_as_json);
156 args->set(
"deleted-leases", deleted_leases_list);
157 args->set(
"leases", leases_list);
167 insertLeaseExpireTime(lease_as_json);
168 lease_as_json->set(
"force-create", Element::create(
true));
177 insertLeaseExpireTime(lease_as_json);
192 const uint32_t limit) {
201 ElementPtr from_element = Element::create(last_lease6 ? last_lease6->addr_.toText() :
"start");
203 ElementPtr limit_element = Element::create(
static_cast<long long int>(limit));
206 args->set(
"from", from_element);
207 args->set(
"limit", limit_element);
217 auto args = Element::createMap();
218 args->set(
"cancel", Element::create(cancel));
220 insertService(command, server_type);
225CommandCreator::insertLeaseExpireTime(
ElementPtr& lease) {
226 if ((lease->getType() != Element::map) ||
227 (!lease->contains(
"cltt") || (lease->get(
"cltt")->getType() != Element::integer) ||
228 (!lease->contains(
"valid-lft") ||
229 (lease->get(
"valid-lft")->getType() != Element::integer)))) {
233 int64_t cltt = lease->get(
"cltt")->intValue();
234 int64_t valid_lifetime = lease->get(
"valid-lft")->intValue();
235 int64_t expire = cltt + valid_lifetime;
236 lease->set(
"expire", Element::create(expire));
237 lease->remove(
"cltt");
245 service->add(Element::create(service_name));
252 (boost::const_pointer_cast<Element>(command))->set(
"service", service);
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
A generic exception that is thrown when an unexpected error condition occurs.
static data::ConstElementPtr createLease4Delete(const dhcp::Lease4 &lease4)
Creates lease4-del command.
static data::ConstElementPtr createHeartbeat(const HAServerType &server_type)
Creates ha-heartbeat command for DHCP server.
static data::ConstElementPtr createLease4Update(const dhcp::Lease4 &lease4)
Creates lease4-update command.
static data::ConstElementPtr createDHCPDisable(const unsigned int max_period, const HAServerType &server_type)
Creates dhcp-disable command for DHCP server.
static data::ConstElementPtr createLease6Update(const dhcp::Lease6 &lease6)
Creates lease6-update command.
static data::ConstElementPtr createHAReset(const HAServerType &server_type)
Creates ha-reset command.
static data::ConstElementPtr createLease6Delete(const dhcp::Lease6 &lease6)
Creates lease6-del command.
static data::ConstElementPtr createLease6BulkApply(const dhcp::Lease6CollectionPtr &leases, const dhcp::Lease6CollectionPtr &deleted_leases)
Creates lease6-bulk-apply command.
static data::ConstElementPtr createLease4GetAll()
Creates lease4-get-all command.
static data::ConstElementPtr createLease6GetPage(const dhcp::Lease6Ptr &lease6, const uint32_t limit)
Creates lease6-get-page command.
static data::ConstElementPtr createMaintenanceNotify(const bool cancel, const HAServerType &server_type)
Creates ha-maintenance-notify command.
static data::ConstElementPtr createDHCPEnable(const HAServerType &server_type)
Creates dhcp-enable command for DHCP server.
static data::ConstElementPtr createLease6GetAll()
Creates lease6-get-all command.
static data::ConstElementPtr createLease4GetPage(const dhcp::Lease4Ptr &lease4, const uint32_t limit)
Creates lease4-get-page command.
Queue holding a backlog of unsent lease updates.
dhcp::LeasePtr pop(OpType &op_type)
Returns the next lease update and removes it from the queue.
OpType
Type of the lease update (operation type).
This file contains several functions and constants that are used for handling commands and responses ...
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
ConstElementPtr createCommand(const std::string &command)
Creates a standard command message with no argument (of the form { "command": "my_command" })
boost::shared_ptr< const Element > ConstElementPtr
boost::shared_ptr< Element > ElementPtr
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
boost::shared_ptr< Lease6Collection > Lease6CollectionPtr
A shared pointer to the collection of IPv6 leases.
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
HAServerType
Lists possible server types for which HA service is created.
Defines the logger used by the top-level component of kea-lfc.
Structure that holds a lease for IPv4 address.
virtual isc::data::ElementPtr toElement() const
Return the JSON representation of a lease.
Structure that holds a lease for IPv6 address and/or prefix.
virtual isc::data::ElementPtr toElement() const
Return the JSON representation of a lease.