| Kea 3.0.2-git

dhcp4_srv.h
Go to the documentation of this file.
1// Copyright (C) 2011-2024 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 DHCPV4_SRV_H
8#define DHCPV4_SRV_H
9
10#include <asiolink/io_service.h>
11#include <dhcp/dhcp4.h>
12#include <dhcp/option.h>
13#include <dhcp/option_string.h>
14#include <dhcp/option4_client_fqdn.h>
15#include <dhcp/option_custom.h>
16#include <dhcp/pkt4.h>
17#include <dhcp_ddns/ncr_msg.h>
18#include <dhcpsrv/alloc_engine.h>
19#include <dhcpsrv/callout_handle_store.h>
20#include <dhcpsrv/cb_ctl_dhcp4.h>
21#include <dhcpsrv/cfg_option.h>
22#include <dhcpsrv/d2_client_mgr.h>
23#include <dhcpsrv/network_state.h>
24#include <dhcpsrv/subnet.h>
25#include <hooks/callout_handle.h>
26#include <process/daemon.h>
27
28#include <functional>
29#include <iostream>
30#include <queue>
31
32// Undefine the macro OPTIONAL which is defined in some operating
33// systems but conflicts with a member of the RequirementLevel enum in
34// the server class.
35
36#ifdef OPTIONAL
37#undef OPTIONAL
38#endif
39
40 namespace isc {
41 namespace dhcp {
42
62 class Dhcpv4Exchange {
63 public:
78 Dhcpv4Exchange(const AllocEnginePtr& alloc_engine, const Pkt4Ptr& query,
79 AllocEngine::ClientContext4Ptr& context,
80 const ConstSubnet4Ptr& subnet, bool& drop);
81
88 void initResponse();
89
93 void initResponse4o6();
94
96 Pkt4Ptr getQuery() const {
97 return (query_);
98 }
99
103 Pkt4Ptr getResponse() const {
104 return (resp_);
105 }
106
108 void deleteResponse() {
109 resp_.reset();
110 }
111
113 AllocEngine::ClientContext4Ptr getContext() const {
114 return (context_);
115 }
116
118 CfgOptionList& getCfgOptionList() {
119 return (cfg_option_list_);
120 }
121
123 const CfgOptionList& getCfgOptionList() const {
124 return (cfg_option_list_);
125 }
126
128 bool getIPv6OnlyPreferred() const {
129 return (ipv6_only_preferred_);
130 }
131
135 void setIPv6OnlyPreferred(bool ipv6_only_preferred) {
136 ipv6_only_preferred_ = ipv6_only_preferred;
137 }
138
141 void setReservedMessageFields();
142
151 static void setHostIdentifiers(AllocEngine::ClientContext4Ptr context);
152
159 static void removeDependentEvaluatedClasses(const Pkt4Ptr& query);
160
164 static void setReservedClientClasses(AllocEngine::ClientContext4Ptr context);
165
173 void conditionallySetReservedClientClasses();
174
185 static void classifyPacket(const Pkt4Ptr& pkt);
186
197 static void evaluateClasses(const Pkt4Ptr& pkt, bool depend_on_known);
198
199 private:
200
207 static void classifyByVendor(const Pkt4Ptr& pkt);
208
218 void copyDefaultFields();
219
229 void copyDefaultOptions();
230
232 AllocEnginePtr alloc_engine_;
233
235 Pkt4Ptr query_;
236
238 Pkt4Ptr resp_;
239
241 AllocEngine::ClientContext4Ptr context_;
242
246 CfgOptionList cfg_option_list_;
247
249 bool ipv6_only_preferred_;
250};
251
253 typedef boost::shared_ptr<Dhcpv4Exchange> Dhcpv4ExchangePtr;
254
255
268 class Dhcpv4Srv : public process::Daemon {
269 private:
270
272 asiolink::IOServicePtr io_service_;
273
274 public:
275
277 typedef enum {
278 FORBIDDEN,
279 MANDATORY,
280 OPTIONAL
281 } RequirementLevel;
282
302 Dhcpv4Srv(uint16_t server_port = DHCP4_SERVER_PORT,
303 uint16_t client_port = 0,
304 const bool use_bcast = true,
305 const bool direct_response_desired = true);
306
308 virtual ~Dhcpv4Srv();
309
314 bool inTestMode() const {
315 return (server_port_ == 0);
316 }
317
319 asiolink::IOServicePtr& getIOService() {
320 return (io_service_);
321 }
322
324 NetworkStatePtr& getNetworkState() {
325 return (network_state_);
326 }
327
333 CBControlDHCPv4Ptr getCBControl() const {
334 return (cb_control_);
335 }
336
339 static std::string getVersion(bool extended);
340
347 int run();
348
354 void runOne();
355
362 void processPacketAndSendResponse(Pkt4Ptr query);
363
370 void processPacketAndSendResponseNoThrow(Pkt4Ptr query);
371
378 void sendResponseNoThrow(hooks::CalloutHandlePtr& callout_handle,
379 Pkt4Ptr& query, Pkt4Ptr& rsp,
380 ConstSubnet4Ptr& subnet);
381
390 Pkt4Ptr processPacket(Pkt4Ptr query, bool allow_answer_park = true);
391
400 Pkt4Ptr processDhcp4Query(Pkt4Ptr query, bool allow_answer_park);
401
409 void processDhcp4QueryAndSendResponse(Pkt4Ptr query,
410 bool allow_answer_park);
411
419 Pkt4Ptr processLocalizedQuery4(AllocEngine::ClientContext4Ptr& ctx,
420 bool allow_answer_park);
421
430 void processLocalizedQuery4AndSendResponse(Pkt4Ptr query,
431 AllocEngine::ClientContext4Ptr& ctx,
432 bool allow_answer_park);
433
441 void processLocalizedQuery4AndSendResponse(Pkt4Ptr query,
442 bool allow_answer_park);
443
445 void shutdown() override;
446
450
451
458 uint16_t getServerPort() const;
459
464 bool useBroadcast() const {
465 return (use_bcast_);
466 }
467
468
474 void startD2();
475
481 void stopD2();
482
497 virtual void d2ClientErrorHandler(const dhcp_ddns::
498 NameChangeSender::Result result,
499 dhcp_ddns::NameChangeRequestPtr& ncr);
500
504 void discardPackets();
505
509 bool getSendResponsesToSource() const {
510 return (test_send_responses_to_source_);
511 }
512
517 void initContext0(const Pkt4Ptr& query,
518 AllocEngine::ClientContext4Ptr ctx);
519
527 bool earlyGHRLookup(const Pkt4Ptr& query,
528 AllocEngine::ClientContext4Ptr ctx);
529
530 protected:
531
538
539
559 bool accept(const Pkt4Ptr& query);
560
588 bool acceptDirectRequest(const Pkt4Ptr& query);
589
608 bool acceptMessageType(const Pkt4Ptr& query) const;
609
623 bool acceptServerId(const Pkt4Ptr& pkt) const;
625
635 static void sanityCheck(const Pkt4Ptr& query);
636
645 static void sanityCheck(const Pkt4Ptr& query, RequirementLevel serverid);
646
657 Pkt4Ptr processDiscover(Pkt4Ptr& discover, AllocEngine::ClientContext4Ptr& context);
658
673 Pkt4Ptr processRequest(Pkt4Ptr& request, AllocEngine::ClientContext4Ptr& context);
674
683 void processRelease(Pkt4Ptr& release, AllocEngine::ClientContext4Ptr& context);
684
694 void processDecline(Pkt4Ptr& decline, AllocEngine::ClientContext4Ptr& context);
695
702 Pkt4Ptr processInform(Pkt4Ptr& inform, AllocEngine::ClientContext4Ptr& context);
703
710 void buildCfgOptionList(Dhcpv4Exchange& ex);
711
719 void appendRequestedOptions(Dhcpv4Exchange& ex);
720
731 void appendRequestedVendorOptions(Dhcpv4Exchange& ex);
732
746 bool assignZero(ConstSubnet4Ptr& subnet,
747 const ClientClasses& client_classes);
748
763 void assignLease(Dhcpv4Exchange& ex);
764
782 void postAllocateNameUpdate(const AllocEngine::ClientContext4Ptr& ctx,
783 const Lease4Ptr& lease, const Pkt4Ptr& query,
784 const Pkt4Ptr& resp, bool client_name_changed);
785
811 void setTeeTimes(const Lease4Ptr& lease,
812 const ConstSubnet4Ptr& subnet,
813 Pkt4Ptr resp);
814
826 void appendBasicOptions(Dhcpv4Exchange& ex);
827
839 void setFixedFields(Dhcpv4Exchange& ex);
840
878 void processClientName(Dhcpv4Exchange& ex);
879
886 void setPacketStatisticsDefaults();
887
891 void setSendResponsesToSource(bool value) {
892 test_send_responses_to_source_ = value;
893 }
894
909 void serverDecline(hooks::CalloutHandlePtr& callout_handle, Pkt4Ptr& query,
910 Lease4Ptr lease, bool lease_exists);
911
922 void serverDeclineNoThrow(hooks::CalloutHandlePtr& callout_handle, Pkt4Ptr& query,
923 Lease4Ptr lease, bool lease_exists);
924
925 public:
926
933 static const std::string VENDOR_CLASS_PREFIX;
934
935 private:
946 void processClientFqdnOption(Dhcpv4Exchange& ex);
947
979 void processHostnameOption(Dhcpv4Exchange& ex);
980
994 void declineLease(const Lease4Ptr& lease, const Pkt4Ptr& decline,
995 AllocEngine::ClientContext4Ptr& context);
996
997 protected:
998
1014 void createNameChangeRequests(const Lease4Ptr& lease,
1015 const Lease4Ptr& old_lease,
1016 const DdnsParams& ddns_params);
1017
1026 void renewLease(const Pkt4Ptr& renew, Pkt4Ptr& reply);
1027
1046 static void appendServerID(Dhcpv4Exchange& ex);
1047
1052 static uint16_t checkRelayPort(const Dhcpv4Exchange& ex);
1053
1088 void adjustIfaceData(Dhcpv4Exchange& ex);
1089
1105 void adjustRemoteAddr(Dhcpv4Exchange& ex);
1106
1113 static std::string srvidToString(const OptionPtr& opt);
1114
1127 isc::dhcp::ConstSubnet4Ptr selectSubnet(const Pkt4Ptr& query,
1128 bool& drop,
1129 bool sanity_only = false,
1130 bool allow_answer_park = true);
1131
1144 isc::dhcp::ConstSubnet4Ptr selectSubnet4o6(const Pkt4Ptr& query,
1145 bool& drop,
1146 bool sanity_only = false,
1147 bool allow_answer_park = true);
1148
1153 virtual Pkt4Ptr receivePacket(int timeout);
1154
1159 virtual void sendPacket(const Pkt4Ptr& pkt);
1160
1171 void classifyPacket(const Pkt4Ptr& pkt);
1172
1190 void recoverStashedAgentOption(const Pkt4Ptr& query);
1191
1192 protected:
1193
1210 void evaluateAdditionalClasses(Dhcpv4Exchange& ex);
1211
1221 void deferredUnpack(Pkt4Ptr& query);
1222
1229 void processPacketPktSend(hooks::CalloutHandlePtr& callout_handle,
1230 Pkt4Ptr& query, Pkt4Ptr& rsp,
1231 ConstSubnet4Ptr& subnet);
1232
1237 void processPacketBufferSend(hooks::CalloutHandlePtr& callout_handle,
1238 Pkt4Ptr& rsp);
1239
1240 private:
1241
1247 void classifyByVendor(const Pkt4Ptr& pkt);
1248
1253 static OptionPtr getNetmaskOption(const ConstSubnet4Ptr& subnet);
1254
1261 static std::tuple<bool, uint32_t> parkingLimitExceeded(std::string const& hook_label);
1262
1263 protected:
1264
1266 uint16_t server_port_;
1267
1269 uint16_t client_port_;
1270
1273 volatile bool shutdown_;
1274
1279 boost::shared_ptr<AllocEngine> alloc_engine_;
1280
1282 bool use_bcast_;
1283
1286 NetworkStatePtr network_state_;
1287
1289 CBControlDHCPv4Ptr cb_control_;
1290
1291 private:
1292
1295 bool test_send_responses_to_source_;
1296
1297 public:
1298
1300
1303 static void processStatsReceived(const Pkt4Ptr& query);
1304
1307 static void processStatsSent(const Pkt4Ptr& response);
1308
1311 static int getHookIndexBuffer4Receive();
1312
1315 static int getHookIndexPkt4Receive();
1316
1319 static int getHookIndexSubnet4Select();
1320
1323 static int getHookIndexLease4Release();
1324
1327 static int getHookIndexPkt4Send();
1328
1331 static int getHookIndexBuffer4Send();
1332
1335 static int getHookIndexLease4Decline();
1336
1342 std::list<std::list<std::string>> jsonPathsToRedact() const final override;
1343};
1344
1345} // namespace dhcp
1346} // namespace isc
1347
1348#endif // DHCP4_SRV_H
alloc_engine.h
callout_handle.h
callout_handle_store.h
cb_ctl_dhcp4.h
cfg_option.h
isc::dhcp::AllocEngine::ClientContext4Ptr
boost::shared_ptr< ClientContext4 > ClientContext4Ptr
Pointer to the ClientContext4.
Definition alloc_engine.h:1386
isc::dhcp::ClientClasses
Container for storing client class names.
Definition classify.h:109
isc::dhcp::DdnsParams
Convenience container for conveying DDNS behavioral parameters It is intended to be created per Packe...
Definition ddns_params.h:23
isc::dhcp::Dhcpv4Exchange
DHCPv4 message exchange.
Definition dhcp4_srv.h:62
isc::dhcp::Dhcpv4Exchange::getContext
AllocEngine::ClientContext4Ptr getContext() const
Returns the copy of the context for the Allocation engine.
Definition dhcp4_srv.h:113
isc::dhcp::Dhcpv4Exchange::deleteResponse
void deleteResponse()
Removes the response message by resetting the pointer to null.
Definition dhcp4_srv.h:108
isc::dhcp::Dhcpv4Exchange::getCfgOptionList
const CfgOptionList & getCfgOptionList() const
Returns the configured option list (const version).
Definition dhcp4_srv.h:123
isc::dhcp::Dhcpv4Exchange::getQuery
Pkt4Ptr getQuery() const
Returns the pointer to the query from the client.
Definition dhcp4_srv.h:96
isc::dhcp::Dhcpv4Exchange::setHostIdentifiers
static void setHostIdentifiers(AllocEngine::ClientContext4Ptr context)
Set host identifiers within a context.
Definition dhcp4_srv.cc:452
isc::dhcp::Dhcpv4Exchange::classifyByVendor
static void classifyByVendor(const Pkt4Ptr &pkt)
Assign class using vendor-class-identifier option.
Definition dhcp4_srv.cc:614
isc::dhcp::Dhcpv4Exchange::initResponse
void initResponse()
Initializes the instance of the response message.
Definition dhcp4_srv.cc:324
isc::dhcp::Dhcpv4Exchange::setReservedMessageFields
void setReservedMessageFields()
Sets reserved values of siaddr, sname and file in the server's response.
Definition dhcp4_srv.cc:592
isc::dhcp::Dhcpv4Exchange::getCfgOptionList
CfgOptionList & getCfgOptionList()
Returns the configured option list (non-const version).
Definition dhcp4_srv.h:118
isc::dhcp::Dhcpv4Exchange::getResponse
Pkt4Ptr getResponse() const
Returns the pointer to the server's response.
Definition dhcp4_srv.h:103
isc::dhcp::Dhcpv4Exchange::setReservedClientClasses
static void setReservedClientClasses(AllocEngine::ClientContext4Ptr context)
Assigns classes retrieved from host reservation database.
Definition dhcp4_srv.cc:568
isc::dhcp::Dhcpv4Exchange::initResponse4o6
void initResponse4o6()
Initializes the DHCPv6 part of the response message.
Definition dhcp4_srv.cc:350
isc::dhcp::Dhcpv4Exchange::evaluateClasses
static void evaluateClasses(const Pkt4Ptr &pkt, bool depend_on_known)
Evaluate classes.
Definition dhcp4_srv.cc:637
isc::dhcp::Dhcpv4Exchange::setIPv6OnlyPreferred
void setIPv6OnlyPreferred(bool ipv6_only_preferred)
Set the IPv6-Only Preferred flag.
Definition dhcp4_srv.h:135
isc::dhcp::Dhcpv4Exchange::Dhcpv4Exchange
Dhcpv4Exchange(const AllocEnginePtr &alloc_engine, const Pkt4Ptr &query, AllocEngine::ClientContext4Ptr &context, const ConstSubnet4Ptr &subnet, bool &drop)
Constructor.
Definition dhcp4_srv.cc:206
isc::dhcp::Dhcpv4Exchange::classifyPacket
static void classifyPacket(const Pkt4Ptr &pkt)
Assigns incoming packet to zero or more classes.
Definition dhcp4_srv.cc:626
isc::dhcp::Dhcpv4Exchange::removeDependentEvaluatedClasses
static void removeDependentEvaluatedClasses(const Pkt4Ptr &query)
Removed evaluated client classes.
Definition dhcp4_srv.cc:553
isc::dhcp::Dhcpv4Exchange::getIPv6OnlyPreferred
bool getIPv6OnlyPreferred() const
Returns the IPv6-Only Preferred flag.
Definition dhcp4_srv.h:128
isc::dhcp::Dhcpv4Exchange::conditionallySetReservedClientClasses
void conditionallySetReservedClientClasses()
Assigns classes retrieved from host reservation database if they haven't been yet set.
Definition dhcp4_srv.cc:578
isc::dhcp::Dhcpv4Srv::initContext0
void initContext0(const Pkt4Ptr &query, AllocEngine::ClientContext4Ptr ctx)
Initialize client context (first part).
Definition dhcp4_srv.cc:1089
isc::dhcp::Dhcpv4Srv::setSendResponsesToSource
void setSendResponsesToSource(bool value)
Sets value of the test_send_responses_to_source_ flag.
Definition dhcp4_srv.h:891
isc::dhcp::Dhcpv4Srv::run
int run()
Main server processing loop.
Definition dhcp4_srv.cc:1170
isc::dhcp::Dhcpv4Srv::declineLease
void declineLease(const Lease4Ptr &lease, const Pkt4Ptr &decline, AllocEngine::ClientContext4Ptr &context)
Marks lease as declined.
Definition dhcp4_srv.cc:4240
isc::dhcp::Dhcpv4Srv::processPacketAndSendResponse
void processPacketAndSendResponse(Pkt4Ptr query)
Process a single incoming DHCPv4 packet and sends the response.
Definition dhcp4_srv.cc:1314
isc::dhcp::Dhcpv4Srv::classifyPacket
void classifyPacket(const Pkt4Ptr &pkt)
Assigns incoming packet to zero or more classes.
Definition dhcp4_srv.cc:4929
isc::dhcp::Dhcpv4Srv::appendRequestedVendorOptions
void appendRequestedVendorOptions(Dhcpv4Exchange &ex)
Appends requested vendor options as requested by client.
Definition dhcp4_srv.cc:2329
isc::dhcp::Dhcpv4Srv::adjustIfaceData
void adjustIfaceData(Dhcpv4Exchange &ex)
Set IP/UDP and interface parameters for the DHCPv4 response.
Definition dhcp4_srv.cc:3521
isc::dhcp::Dhcpv4Srv::checkRelayPort
static uint16_t checkRelayPort(const Dhcpv4Exchange &ex)
Check if the relay port RAI sub-option was set in the query.
Definition dhcp4_srv.cc:3508
isc::dhcp::Dhcpv4Srv::~Dhcpv4Srv
virtual ~Dhcpv4Srv()
Destructor. Used during DHCPv4 service shutdown.
Definition dhcp4_srv.cc:725
isc::dhcp::Dhcpv4Srv::receivePacket
virtual Pkt4Ptr receivePacket(int timeout)
dummy wrapper around IfaceMgr::receive4
Definition dhcp4_srv.cc:1079
isc::dhcp::Dhcpv4Srv::selectSubnet4o6
isc::dhcp::ConstSubnet4Ptr selectSubnet4o6(const Pkt4Ptr &query, bool &drop, bool sanity_only=false, bool allow_answer_park=true)
Selects a subnet for a given client's DHCP4o6 packet.
Definition dhcp4_srv.cc:909
isc::dhcp::Dhcpv4Srv::accept
bool accept(const Pkt4Ptr &query)
Checks whether received message should be processed or discarded.
Definition dhcp4_srv.cc:4604
isc::dhcp::Dhcpv4Srv::setTeeTimes
void setTeeTimes(const Lease4Ptr &lease, const ConstSubnet4Ptr &subnet, Pkt4Ptr resp)
Adds the T1 and T2 timers to the outbound response as appropriate.
Definition dhcp4_srv.cc:3469
isc::dhcp::Dhcpv4Srv::appendServerID
static void appendServerID(Dhcpv4Exchange &ex)
Adds server identifier option to the server's response.
Definition dhcp4_srv.cc:2057
isc::dhcp::Dhcpv4Srv::postAllocateNameUpdate
void postAllocateNameUpdate(const AllocEngine::ClientContext4Ptr &ctx, const Lease4Ptr &lease, const Pkt4Ptr &query, const Pkt4Ptr &resp, bool client_name_changed)
Update client name and DNS flags in the lease and response.
Definition dhcp4_srv.cc:3401
isc::dhcp::Dhcpv4Srv::use_bcast_
bool use_bcast_
Should broadcast be enabled on sockets (if true).
Definition dhcp4_srv.h:1282
isc::dhcp::Dhcpv4Srv::runOne
void runOne()
Main server processing step.
Definition dhcp4_srv.cc:1227
isc::dhcp::Dhcpv4Srv::startD2
void startD2()
Starts DHCP_DDNS client IO if DDNS updates are enabled.
Definition dhcp4_srv.cc:5093
isc::dhcp::Dhcpv4Srv::getHookIndexBuffer4Receive
static int getHookIndexBuffer4Receive()
Returns the index for "buffer4_receive" hook point.
Definition dhcp4_srv.cc:5239
isc::dhcp::Dhcpv4Srv::processRequest
Pkt4Ptr processRequest(Pkt4Ptr &request, AllocEngine::ClientContext4Ptr &context)
Processes incoming REQUEST and returns REPLY response.
Definition dhcp4_srv.cc:3931
isc::dhcp::Dhcpv4Srv::processStatsReceived
static void processStatsReceived(const Pkt4Ptr &query)
Class methods for DHCPv4-over-DHCPv6 handler.
Definition dhcp4_srv.cc:5164
isc::dhcp::Dhcpv4Srv::getHookIndexPkt4Send
static int getHookIndexPkt4Send()
Returns the index for "pkt4_send" hook point.
Definition dhcp4_srv.cc:5255
isc::dhcp::Dhcpv4Srv::processDecline
void processDecline(Pkt4Ptr &decline, AllocEngine::ClientContext4Ptr &context)
Process incoming DHCPDECLINE messages.
Definition dhcp4_srv.cc:4166
isc::dhcp::Dhcpv4Srv::Dhcpv4Srv
Dhcpv4Srv(uint16_t server_port=DHCP4_SERVER_PORT, uint16_t client_port=0, const bool use_bcast=true, const bool direct_response_desired=true)
Default constructor.
Definition dhcp4_srv.cc:663
isc::dhcp::Dhcpv4Srv::selectSubnet
isc::dhcp::ConstSubnet4Ptr selectSubnet(const Pkt4Ptr &query, bool &drop, bool sanity_only=false, bool allow_answer_park=true)
Selects a subnet for a given client's packet.
Definition dhcp4_srv.cc:776
isc::dhcp::Dhcpv4Srv::getHookIndexSubnet4Select
static int getHookIndexSubnet4Select()
Returns the index for "subnet4_select" hook point.
Definition dhcp4_srv.cc:5247
isc::dhcp::Dhcpv4Srv::processStatsSent
static void processStatsSent(const Pkt4Ptr &response)
Updates statistics for transmitted packets.
Definition dhcp4_srv.cc:5213
isc::dhcp::Dhcpv4Srv::shutdown
void shutdown() override
Instructs the server to shut down.
Definition dhcp4_srv.cc:770
isc::dhcp::Dhcpv4Srv::getHookIndexLease4Release
static int getHookIndexLease4Release()
Returns the index for "lease4_release" hook point.
Definition dhcp4_srv.cc:5251
isc::dhcp::Dhcpv4Srv::adjustRemoteAddr
void adjustRemoteAddr(Dhcpv4Exchange &ex)
Sets remote addresses for outgoing packet.
Definition dhcp4_srv.cc:3609
isc::dhcp::Dhcpv4Srv::getHookIndexPkt4Receive
static int getHookIndexPkt4Receive()
Returns the index for "pkt4_receive" hook point.
Definition dhcp4_srv.cc:5243
isc::dhcp::Dhcpv4Srv::assignLease
void assignLease(Dhcpv4Exchange &ex)
Assigns a lease and appends corresponding options.
Definition dhcp4_srv.cc:2967
isc::dhcp::Dhcpv4Srv::evaluateAdditionalClasses
void evaluateAdditionalClasses(Dhcpv4Exchange &ex)
Evaluates classes in the additional classes lists.
Definition dhcp4_srv.cc:4933
isc::dhcp::Dhcpv4Srv::processDhcp4Query
Pkt4Ptr processDhcp4Query(Pkt4Ptr query, bool allow_answer_park)
Process a single incoming DHCPv4 query.
Definition dhcp4_srv.cc:1538
isc::dhcp::Dhcpv4Srv::getIOService
asiolink::IOServicePtr & getIOService()
Returns pointer to the IO service used by the server.
Definition dhcp4_srv.h:319
isc::dhcp::Dhcpv4Srv::setFixedFields
void setFixedFields(Dhcpv4Exchange &ex)
Sets fixed fields of the outgoing packet.
Definition dhcp4_srv.cc:3710
isc::dhcp::Dhcpv4Srv::appendBasicOptions
void appendBasicOptions(Dhcpv4Exchange &ex)
Append basic options if they are not present.
Definition dhcp4_srv.cc:2502
isc::dhcp::Dhcpv4Srv::recoverStashedAgentOption
void recoverStashedAgentOption(const Pkt4Ptr &query)
Recover stashed agent options from client address lease.
Definition dhcp4_srv.cc:4521
isc::dhcp::Dhcpv4Srv::processClientName
void processClientName(Dhcpv4Exchange &ex)
Processes Client FQDN and Hostname Options sent by a client.
Definition dhcp4_srv.cc:2545
isc::dhcp::Dhcpv4Srv::alloc_engine_
boost::shared_ptr< AllocEngine > alloc_engine_
Allocation Engine.
Definition dhcp4_srv.h:1279
isc::dhcp::Dhcpv4Srv::serverDecline
void serverDecline(hooks::CalloutHandlePtr &callout_handle, Pkt4Ptr &query, Lease4Ptr lease, bool lease_exists)
Renders a lease declined after the server has detected, via ping-check or other means,...
Definition dhcp4_srv.cc:4340
isc::dhcp::Dhcpv4Srv::processInform
Pkt4Ptr processInform(Pkt4Ptr &inform, AllocEngine::ClientContext4Ptr &context)
Processes incoming DHCPINFORM messages.
Definition dhcp4_srv.cc:4466
isc::dhcp::Dhcpv4Srv::client_port_
uint16_t client_port_
UDP port number to which server sends all responses.
Definition dhcp4_srv.h:1269
isc::dhcp::Dhcpv4Srv::serverDeclineNoThrow
void serverDeclineNoThrow(hooks::CalloutHandlePtr &callout_handle, Pkt4Ptr &query, Lease4Ptr lease, bool lease_exists)
Exception safe wrapper around serverDecline().
Definition dhcp4_srv.cc:4456
isc::dhcp::Dhcpv4Srv::processPacketPktSend
void processPacketPktSend(hooks::CalloutHandlePtr &callout_handle, Pkt4Ptr &query, Pkt4Ptr &rsp, ConstSubnet4Ptr &subnet)
Executes pkt4_send callout.
Definition dhcp4_srv.cc:1893
isc::dhcp::Dhcpv4Srv::processPacketAndSendResponseNoThrow
void processPacketAndSendResponseNoThrow(Pkt4Ptr query)
Process a single incoming DHCPv4 packet and sends the response.
Definition dhcp4_srv.cc:1301
isc::dhcp::Dhcpv4Srv::jsonPathsToRedact
std::list< std::list< std::string > > jsonPathsToRedact() const final override
Return a list of all paths that contain passwords or secrets for kea-dhcp4.
Definition dhcp4_srv.cc:5307
isc::dhcp::Dhcpv4Srv::srvidToString
static std::string srvidToString(const OptionPtr &opt)
converts server-id to text Converts content of server-id option to a text representation,...
Definition dhcp4_srv.cc:2037
isc::dhcp::Dhcpv4Srv::acceptServerId
bool acceptServerId(const Pkt4Ptr &pkt) const
Verifies if the server id belongs to our server.
Definition dhcp4_srv.cc:4726
isc::dhcp::Dhcpv4Srv::VENDOR_CLASS_PREFIX
static const std::string VENDOR_CLASS_PREFIX
this is a prefix added to the content of vendor-class option
Definition dhcp4_srv.h:933
isc::dhcp::Dhcpv4Srv::inTestMode
bool inTestMode() const
Checks if the server is running in unit test mode.
Definition dhcp4_srv.h:314
isc::dhcp::Dhcpv4Srv::createNameChangeRequests
void createNameChangeRequests(const Lease4Ptr &lease, const Lease4Ptr &old_lease, const DdnsParams &ddns_params)
Creates NameChangeRequests which correspond to the lease which has been acquired.
Definition dhcp4_srv.cc:2905
isc::dhcp::Dhcpv4Srv::appendRequestedOptions
void appendRequestedOptions(Dhcpv4Exchange &ex)
Appends options requested by client.
Definition dhcp4_srv.cc:2156
isc::dhcp::Dhcpv4Srv::setPacketStatisticsDefaults
void setPacketStatisticsDefaults()
This function sets statistics related to DHCPv4 packets processing to their initial values.
Definition dhcp4_srv.cc:715
isc::dhcp::Dhcpv4Srv::processLocalizedQuery4AndSendResponse
void processLocalizedQuery4AndSendResponse(Pkt4Ptr query, AllocEngine::ClientContext4Ptr &ctx, bool allow_answer_park)
Process a localized incoming DHCPv4 query.
Definition dhcp4_srv.cc:1595
isc::dhcp::Dhcpv4Srv::getNetworkState
NetworkStatePtr & getNetworkState()
Returns pointer to the network state used by the server.
Definition dhcp4_srv.h:324
isc::dhcp::Dhcpv4Srv::getVersion
static std::string getVersion(bool extended)
returns Kea version on stdout and exit.
Definition dhcp4_srv.cc:5127
isc::dhcp::Dhcpv4Srv::buildCfgOptionList
void buildCfgOptionList(Dhcpv4Exchange &ex)
Build the configured option list.
Definition dhcp4_srv.cc:2082
isc::dhcp::Dhcpv4Srv::shutdown_
volatile bool shutdown_
Indicates if shutdown is in progress.
Definition dhcp4_srv.h:1273
isc::dhcp::Dhcpv4Srv::useBroadcast
bool useBroadcast() const
Return bool value indicating that broadcast flags should be set on sockets.
Definition dhcp4_srv.h:464
isc::dhcp::Dhcpv4Srv::server_port_
uint16_t server_port_
UDP port number on which server listens.
Definition dhcp4_srv.h:1266
isc::dhcp::Dhcpv4Srv::sendResponseNoThrow
void sendResponseNoThrow(hooks::CalloutHandlePtr &callout_handle, Pkt4Ptr &query, Pkt4Ptr &rsp, ConstSubnet4Ptr &subnet)
Process an unparked DHCPv4 packet and sends the response.
Definition dhcp4_srv.cc:1877
isc::dhcp::Dhcpv4Srv::earlyGHRLookup
bool earlyGHRLookup(const Pkt4Ptr &query, AllocEngine::ClientContext4Ptr ctx)
Initialize client context and perform early global reservations lookup.
Definition dhcp4_srv.cc:1099
isc::dhcp::Dhcpv4Srv::network_state_
NetworkStatePtr network_state_
Holds information about disabled DHCP service and/or disabled subnet/network scopes.
Definition dhcp4_srv.h:1286
isc::dhcp::Dhcpv4Srv::renewLease
void renewLease(const Pkt4Ptr &renew, Pkt4Ptr &reply)
Attempts to renew received addresses.
isc::dhcp::Dhcpv4Srv::processDhcp4QueryAndSendResponse
void processDhcp4QueryAndSendResponse(Pkt4Ptr query, bool allow_answer_park)
Process a single incoming DHCPv4 query.
Definition dhcp4_srv.cc:1518
isc::dhcp::Dhcpv4Srv::getSendResponsesToSource
bool getSendResponsesToSource() const
Returns value of the test_send_responses_to_source_ flag.
Definition dhcp4_srv.h:509
isc::dhcp::Dhcpv4Srv::processDiscover
Pkt4Ptr processDiscover(Pkt4Ptr &discover, AllocEngine::ClientContext4Ptr &context)
Processes incoming DISCOVER and returns response.
Definition dhcp4_srv.cc:3852
isc::dhcp::Dhcpv4Srv::d2ClientErrorHandler
virtual void d2ClientErrorHandler(const dhcp_ddns::NameChangeSender::Result result, dhcp_ddns::NameChangeRequestPtr &ncr)
Implements the error handler for DHCP_DDNS IO errors.
Definition dhcp4_srv.cc:5115
isc::dhcp::Dhcpv4Srv::getServerPort
uint16_t getServerPort() const
Get UDP port on which server should listen.
Definition dhcp4_srv.cc:5272
isc::dhcp::Dhcpv4Srv::sendPacket
virtual void sendPacket(const Pkt4Ptr &pkt)
dummy wrapper around IfaceMgr::send()
Definition dhcp4_srv.cc:1084
isc::dhcp::Dhcpv4Srv::getHookIndexBuffer4Send
static int getHookIndexBuffer4Send()
Returns the index for "buffer4_send" hook point.
Definition dhcp4_srv.cc:5259
isc::dhcp::Dhcpv4Srv::stopD2
void stopD2()
Stops DHCP_DDNS client IO if DDNS updates are enabled.
Definition dhcp4_srv.cc:5105
isc::dhcp::Dhcpv4Srv::getCBControl
CBControlDHCPv4Ptr getCBControl() const
Returns an object which controls access to the configuration backends.
Definition dhcp4_srv.h:333
isc::dhcp::Dhcpv4Srv::sanityCheck
static void sanityCheck(const Pkt4Ptr &query)
Verifies if specified packet meets RFC requirements.
Definition dhcp4_srv.cc:4858
isc::dhcp::Dhcpv4Srv::acceptMessageType
bool acceptMessageType(const Pkt4Ptr &query) const
Check if received message type is valid for the server to process.
Definition dhcp4_srv.cc:4670
isc::dhcp::Dhcpv4Srv::discardPackets
void discardPackets()
Discards parked packets Clears the packet parking lots of all packets.
Definition dhcp4_srv.cc:5267
isc::dhcp::Dhcpv4Srv::getHookIndexLease4Decline
static int getHookIndexLease4Decline()
Returns the index for "lease4_decline" hook point.
Definition dhcp4_srv.cc:5263
isc::dhcp::Dhcpv4Srv::processRelease
void processRelease(Pkt4Ptr &release, AllocEngine::ClientContext4Ptr &context)
Processes incoming DHCPRELEASE messages.
Definition dhcp4_srv.cc:4012
isc::dhcp::Dhcpv4Srv::acceptDirectRequest
bool acceptDirectRequest(const Pkt4Ptr &query)
Check if a message sent by directly connected client should be accepted or discarded.
Definition dhcp4_srv.cc:4632
isc::dhcp::Dhcpv4Srv::cb_control_
CBControlDHCPv4Ptr cb_control_
Controls access to the configuration backends.
Definition dhcp4_srv.h:1289
isc::dhcp::Dhcpv4Srv::RequirementLevel
RequirementLevel
defines if certain option may, must or must not appear
Definition dhcp4_srv.h:277
isc::dhcp::Dhcpv4Srv::OPTIONAL
@ OPTIONAL
Definition dhcp4_srv.h:280
isc::dhcp::Dhcpv4Srv::MANDATORY
@ MANDATORY
Definition dhcp4_srv.h:279
isc::dhcp::Dhcpv4Srv::FORBIDDEN
@ FORBIDDEN
Definition dhcp4_srv.h:278
isc::dhcp::Dhcpv4Srv::processPacket
Pkt4Ptr processPacket(Pkt4Ptr query, bool allow_answer_park=true)
Process a single incoming DHCPv4 packet.
Definition dhcp4_srv.cc:1326
isc::dhcp::Dhcpv4Srv::processPacketBufferSend
void processPacketBufferSend(hooks::CalloutHandlePtr &callout_handle, Pkt4Ptr &rsp)
Executes buffer4_send callout and sends the response.
Definition dhcp4_srv.cc:1964
isc::dhcp::Dhcpv4Srv::assignZero
bool assignZero(ConstSubnet4Ptr &subnet, const ClientClasses &client_classes)
Assign the 0.0.0.0 address to an IPv6-Only client.
Definition dhcp4_srv.cc:2934
isc::dhcp::Dhcpv4Srv::deferredUnpack
void deferredUnpack(Pkt4Ptr &query)
Perform deferred option unpacking.
Definition dhcp4_srv.cc:5019
isc::dhcp::Dhcpv4Srv::processLocalizedQuery4
Pkt4Ptr processLocalizedQuery4(AllocEngine::ClientContext4Ptr &ctx, bool allow_answer_park)
Process a localized incoming DHCPv4 query.
Definition dhcp4_srv.cc:1635
isc::process::Daemon
Base class for all services.
Definition daemon.h:48
d2_client_mgr.h
Defines the D2ClientMgr class.
daemon.h
dhcp4.h
io_service.h
isc::asiolink::IOServicePtr
boost::shared_ptr< IOService > IOServicePtr
Defines a smart pointer to an IOService instance.
Definition io_service.h:28
isc::dhcp_ddns
Definition dhcp_ddns_log.cc:14
isc::dhcp_ddns::NameChangeRequestPtr
boost::shared_ptr< NameChangeRequest > NameChangeRequestPtr
Defines a pointer to a NameChangeRequest.
Definition ncr_msg.h:241
isc::dhcp
Definition dhcp4/client_handler.cc:20
isc::dhcp::Dhcpv4ExchangePtr
boost::shared_ptr< Dhcpv4Exchange > Dhcpv4ExchangePtr
Type representing the pointer to the Dhcpv4Exchange.
Definition dhcp4_srv.h:253
isc::dhcp::ConstSubnet4Ptr
boost::shared_ptr< const Subnet4 > ConstSubnet4Ptr
A const pointer to a Subnet4 object.
Definition subnet.h:458
isc::dhcp::Pkt4Ptr
boost::shared_ptr< Pkt4 > Pkt4Ptr
A pointer to Pkt4 object.
Definition pkt4.h:555
isc::dhcp::AllocEnginePtr
boost::shared_ptr< AllocEngine > AllocEnginePtr
A pointer to the AllocEngine object.
Definition alloc_engine.h:1884
isc::dhcp::NetworkStatePtr
boost::shared_ptr< NetworkState > NetworkStatePtr
Pointer to the NetworkState object.
Definition network_state.h:220
isc::dhcp::CBControlDHCPv4Ptr
boost::shared_ptr< CBControlDHCPv4 > CBControlDHCPv4Ptr
Definition cb_ctl_dhcp4.h:45
isc::dhcp::Lease4Ptr
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Definition lease.h:315
isc::dhcp::OptionPtr
boost::shared_ptr< Option > OptionPtr
Definition option.h:37
isc::dhcp::CfgOptionList
std::list< ConstCfgOptionPtr > CfgOptionList
Const pointer list.
Definition cfg_option.h:898
isc::hooks::CalloutHandlePtr
boost::shared_ptr< CalloutHandle > CalloutHandlePtr
A shared pointer to a CalloutHandle object.
Definition callout_handle.h:470
isc
Defines the logger used by the top-level component of kea-lfc.
Definition agent_parser.cc:148
ncr_msg.h
This file provides the classes needed to embody, compose, and decompose DNS update requests that are ...
network_state.h
option4_client_fqdn.h
option.h
option_custom.h
option_string.h
pkt4.h
subnet.h