Kea 3.1.1
lease_query_impl4.h
Go to the documentation of this file.
1// Copyright (C) 2020-2025 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#ifndef LEASE_QUERY_IMPL4_H
8#define LEASE_QUERY_IMPL4_H
9
10#include <config.h>
11
12#include <dhcp/pkt4.h>
13#include <dhcpsrv/cfg_option.h>
14#include <dhcpsrv/lease.h>
15#include <dhcpsrv/subnet.h>
16#include <lease_query_impl.h>
17
18namespace isc {
19namespace lease_query {
20
23public:
28
30 virtual ~LeaseQueryImpl4(){};
31
41 virtual void processQuery(dhcp::PktPtr base_query) const;
42
57
72
87
96
108 const dhcp::Pkt4Ptr& query,
109 const dhcp::Lease4Collection& leases);
110
121 const dhcp::Pkt4Ptr& query);
122
127 static void addAssociatedLeases(dhcp::Pkt4Ptr response,
128 const dhcp::Lease4Collection& leases);
129
144 static void addOptions(const dhcp::Pkt4Ptr& query, dhcp::Pkt4Ptr response,
145 const dhcp::Lease4Ptr& lease);
146
152 static void addLeaseTimes(dhcp::Pkt4Ptr response, const dhcp::Lease4Ptr& lease,
153 const dhcp::Subnet4Ptr& subnet);
154
159 static void addRelayAgentInfo(dhcp::Pkt4Ptr response, const dhcp::Lease4Ptr& lease);
160
164 static void sendResponse(const dhcp::Pkt4Ptr& response);
165
171 static std::string leaseQueryLabel(const dhcp::Pkt4Ptr& packet);
172
179 static bool acceptServerId(const dhcp::Pkt4Ptr& query,
180 dhcp::OptionPtr& server_id_opt);
181
205 static void buildCfgOptionList(dhcp::CfgOptionList& co_list,
206 const dhcp::Pkt4Ptr& query,
207 const dhcp::Lease4Ptr& lease = dhcp::Lease4Ptr(),
208 const dhcp::Subnet4Ptr& subnet = dhcp::Subnet4Ptr());
209
219 static void appendServerId(dhcp::Pkt4Ptr& response, dhcp::CfgOptionList& co_list);
220
228 static int upgradeHandler(hooks::CalloutHandle& handle);
229};
230
232typedef boost::shared_ptr<LeaseQueryImpl4> LeaseQueryImpl4Ptr;
233
234} // end of namespace isc::lease_query
235} // end of namespace isc
236
237#endif // LEASE_QUERY_IMPL4_H
Per-packet callout handle.
static dhcp::DHCPMessageType queryByIpAddress(const asiolink::IOAddress &ciaddr, dhcp::Lease4Collection &leases)
Queries for an active lease matching an ip address.
static void addOptions(const dhcp::Pkt4Ptr &query, dhcp::Pkt4Ptr response, const dhcp::Lease4Ptr &lease)
Adds options to a query response.
static int upgradeHandler(hooks::CalloutHandle &handle)
Upgrade extended information.
static void sendResponse(const dhcp::Pkt4Ptr &response)
Packs and sends a query response.
static void addLeaseTimes(dhcp::Pkt4Ptr response, const dhcp::Lease4Ptr &lease, const dhcp::Subnet4Ptr &subnet)
Adds life time, T1, and T2 options to a query response.
LeaseQueryImpl4(const data::ConstElementPtr config)
Constructor.
virtual void processQuery(dhcp::PktPtr base_query) const
Processes a single DHCPv4 client Lease Query.
static void addAssociatedLeases(dhcp::Pkt4Ptr response, const dhcp::Lease4Collection &leases)
Adds associated leases to a query response.
static std::string leaseQueryLabel(const dhcp::Pkt4Ptr &packet)
Convenience method for generating per packet logging info.
static dhcp::Lease4Collection winnowLeases(const dhcp::Lease4Collection &leases)
Creates a list of active leases from a list of leases.
static bool acceptServerId(const dhcp::Pkt4Ptr &query, dhcp::OptionPtr &server_id_opt)
Validates dhcp-server-identifier option in the inbound query (if one)
static dhcp::DHCPMessageType queryByHWAddr(const dhcp::HWAddrPtr &hwaddr, dhcp::Lease4Collection &leases)
Queries LeaseMgr for active leases matching a HW address.
static void buildCfgOptionList(dhcp::CfgOptionList &co_list, const dhcp::Pkt4Ptr &query, const dhcp::Lease4Ptr &lease=dhcp::Lease4Ptr(), const dhcp::Subnet4Ptr &subnet=dhcp::Subnet4Ptr())
Constructs a list of configured option sets for a given lease and it's subnet.
static dhcp::DHCPMessageType queryByClientId(const dhcp::ClientIdPtr &client_id, dhcp::Lease4Collection &leases)
Queries LeaseMgr for active leases matching a client.
static void appendServerId(dhcp::Pkt4Ptr &response, dhcp::CfgOptionList &co_list)
Adds dhcp-server-identifier option (54) to the response.
static void addRelayAgentInfo(dhcp::Pkt4Ptr response, const dhcp::Lease4Ptr &lease)
Adds relay-agent-info option to a query response.
static dhcp::Pkt4Ptr initResponse(dhcp::DHCPMessageType response_type, const dhcp::Pkt4Ptr &query)
Creates the initial query response.
static dhcp::Pkt4Ptr buildResponse(dhcp::DHCPMessageType response_type, const dhcp::Pkt4Ptr &query, const dhcp::Lease4Collection &leases)
Creates a lease query response packet.
LeaseQueryImpl(uint16_t family, const isc::data::ConstElementPtr config)
Constructor.
boost::shared_ptr< const Element > ConstElementPtr
Definition data.h:29
boost::shared_ptr< isc::dhcp::Pkt > PktPtr
A pointer to either Pkt4 or Pkt6 packet.
Definition pkt.h:999
boost::shared_ptr< Subnet4 > Subnet4Ptr
A pointer to a Subnet4 object.
Definition subnet.h:461
boost::shared_ptr< Pkt4 > Pkt4Ptr
A pointer to Pkt4 object.
Definition pkt4.h:556
boost::shared_ptr< HWAddr > HWAddrPtr
Shared pointer to a hardware address structure.
Definition hwaddr.h:154
boost::shared_ptr< ClientId > ClientIdPtr
Shared pointer to a Client ID.
Definition duid.h:216
DHCPMessageType
Definition dhcp4.h:233
std::vector< Lease4Ptr > Lease4Collection
A collection of IPv4 leases.
Definition lease.h:520
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Definition lease.h:315
boost::shared_ptr< Option > OptionPtr
Definition option.h:37
std::list< ConstCfgOptionPtr > CfgOptionList
Const pointer list.
Definition cfg_option.h:979
boost::shared_ptr< LeaseQueryImpl4 > LeaseQueryImpl4Ptr
Defines a smart pointer to LeaseQueryImpl4 instance.
Defines the logger used by the top-level component of kea-lfc.