mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-08-29 13:07:50 +00:00
[#2022] Checkpoint: added methods
This commit is contained in:
parent
0e8596b681
commit
00128adbbe
@ -1372,7 +1372,6 @@ Dhcpv4Srv::processDhcp4Query(Pkt4Ptr query, bool allow_packet_park) {
|
|||||||
return (Pkt4Ptr());
|
return (Pkt4Ptr());
|
||||||
}
|
}
|
||||||
|
|
||||||
Pkt4Ptr rsp;
|
|
||||||
try {
|
try {
|
||||||
sanityCheck(query);
|
sanityCheck(query);
|
||||||
if ((query->getType() == DHCPDISCOVER) ||
|
if ((query->getType() == DHCPDISCOVER) ||
|
||||||
@ -1385,6 +1384,56 @@ Dhcpv4Srv::processDhcp4Query(Pkt4Ptr query, bool allow_packet_park) {
|
|||||||
return (Pkt4Ptr());
|
return (Pkt4Ptr());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
|
||||||
|
// Catch-all exception (we used to call only isc::Exception, but
|
||||||
|
// std::exception could potentially be raised and if we don't catch
|
||||||
|
// it here, it would be caught in main() and the process would
|
||||||
|
// terminate). Just log the problem and ignore the packet.
|
||||||
|
// (The problem is logged as a debug message because debug is
|
||||||
|
// disabled by default - it prevents a DDOS attack based on the
|
||||||
|
// sending of problem packets.)
|
||||||
|
LOG_DEBUG(bad_packet4_logger, DBGLVL_PKT_HANDLING, DHCP4_PACKET_DROP_0007)
|
||||||
|
.arg(query->getLabel())
|
||||||
|
.arg(e.what());
|
||||||
|
|
||||||
|
// Increase the statistic of dropped packets.
|
||||||
|
isc::stats::StatsMgr::instance().addValue("pkt4-receive-drop",
|
||||||
|
static_cast<int64_t>(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
return (processLocalizedQuery4(ctx, allow_packet_park));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Dhcpv4Srv::processLocalizedQuery4AndSendResponse(Pkt4Ptr query,
|
||||||
|
AllocEngine::ClientContext4Ptr& ctx) {
|
||||||
|
try {
|
||||||
|
Pkt4Ptr rsp = processLocalizedQuery4(ctx, true);
|
||||||
|
if (!rsp) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CalloutHandlePtr callout_handle = getCalloutHandle(query);
|
||||||
|
|
||||||
|
processPacketBufferSend(callout_handle, rsp);
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
LOG_ERROR(packet4_logger, DHCP4_PACKET_PROCESS_STD_EXCEPTION)
|
||||||
|
.arg(e.what());
|
||||||
|
} catch (...) {
|
||||||
|
LOG_ERROR(packet4_logger, DHCP4_PACKET_PROCESS_EXCEPTION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Pkt4Ptr
|
||||||
|
Dhcpv4Srv::processLocalizedQuery4(AllocEngine::ClientContext4Ptr& ctx,
|
||||||
|
bool allow_packet_park) {
|
||||||
|
if (!ctx) {
|
||||||
|
isc_throw(Unexpected, "null context");
|
||||||
|
}
|
||||||
|
Pkt4Ptr query = ctx->query_;
|
||||||
|
Pkt4Ptr rsp;
|
||||||
|
try {
|
||||||
switch (query->getType()) {
|
switch (query->getType()) {
|
||||||
case DHCPDISCOVER:
|
case DHCPDISCOVER:
|
||||||
rsp = processDiscover(query, ctx);
|
rsp = processDiscover(query, ctx);
|
||||||
|
@ -375,7 +375,8 @@ public:
|
|||||||
|
|
||||||
/// @brief Process a single incoming DHCPv4 query.
|
/// @brief Process a single incoming DHCPv4 query.
|
||||||
///
|
///
|
||||||
/// It calls per-type processXXX methods, generates appropriate answer.
|
/// It localizes the query, calls per-type processXXX methods,
|
||||||
|
/// generates appropriate answer.
|
||||||
///
|
///
|
||||||
/// @param query A pointer to the packet to be processed.
|
/// @param query A pointer to the packet to be processed.
|
||||||
/// @param allow_packet_park Indicates if parking a packet is allowed.
|
/// @param allow_packet_park Indicates if parking a packet is allowed.
|
||||||
@ -384,14 +385,35 @@ public:
|
|||||||
|
|
||||||
/// @brief Process a single incoming DHCPv4 query.
|
/// @brief Process a single incoming DHCPv4 query.
|
||||||
///
|
///
|
||||||
/// It calls per-type processXXX methods, generates appropriate answer,
|
/// It localizes the query, calls per-type processXXX methods,
|
||||||
/// sends the answer to the client.
|
/// generates appropriate answer, sends the answer to the client.
|
||||||
///
|
///
|
||||||
/// @param query A pointer to the packet to be processed.
|
/// @param query A pointer to the packet to be processed.
|
||||||
/// @param allow_packet_park Indicates if parking a packet is allowed.
|
/// @param allow_packet_park Indicates if parking a packet is allowed.
|
||||||
void processDhcp4QueryAndSendResponse(Pkt4Ptr query,
|
void processDhcp4QueryAndSendResponse(Pkt4Ptr query,
|
||||||
bool allow_packet_park);
|
bool allow_packet_park);
|
||||||
|
|
||||||
|
/// @brief Process a localized incoming DHCPv4 query.
|
||||||
|
///
|
||||||
|
/// It calls per-type processXXX methods, generates appropriate answer.
|
||||||
|
///
|
||||||
|
/// @param ctx Pointer to The client context.
|
||||||
|
/// @param allow_packet_park Indicates if parking a packet is allowed.
|
||||||
|
/// @return A pointer to the response.
|
||||||
|
Pkt4Ptr processLocalizedQuery4(AllocEngine::ClientContext4Ptr& ctx,
|
||||||
|
bool allow_packet_park);
|
||||||
|
|
||||||
|
/// @brief Process a localized incoming DHCPv4 query.
|
||||||
|
///
|
||||||
|
/// A variant of the precedent method used to resume processing
|
||||||
|
/// for packets parked in the subnet4_select callout.
|
||||||
|
///
|
||||||
|
/// @param query A pointer to the unparked packet.
|
||||||
|
/// @param ctx Pointer to The client context.
|
||||||
|
/// @return A pointer to the response.
|
||||||
|
void processLocalizedQuery4AndSendResponse(Pkt4Ptr query,
|
||||||
|
AllocEngine::ClientContext4Ptr& ctx);
|
||||||
|
|
||||||
/// @brief Instructs the server to shut down.
|
/// @brief Instructs the server to shut down.
|
||||||
void shutdown() override;
|
void shutdown() override;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user