mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-03 15:35:17 +00:00
[#3231] Core task 3 for perfmon
Add packet events and subnet callout argumments to kea-dhcp4 and kea-dhcp6 src/bin/dhcp4/dhcp4_srv.* Dhcpv4Srv::runOne() - add mt_queued packet event to query in MT mode Dhcpv4Srv::processPacket() - add "process_started" event to query upon entry Dhcpv4Srv::processDhcp4Query() - pass selected subnet (if one) into processPacketPktSend() Dhcpv4Srv::sendResponseNoThrow() - add subnet parameter, pass it into processPacketPktSend9() Dhcpv4Srv::processPacketPktSend() - add subnet parameter, add "process_completed" event to query, add subnet to callout arguments src/bin/dhcp4/tests/dhcp4_test_utils.cc src/bin/dhcp4/tests/dhcp4_test_utils.h src/bin/dhcp4/tests/hooks_unittest.cc Updates to verify packet events content add subnet4 callout argument src/bin/dhcp6/dhcp6_srv.cc Dhcpv6Srv::runOne() - add mt_queued packet event to query in MT mode Dhcpv6Srv::processPacket() - add "process_started" event to query upon entry Dhcpv6Srv::processDhcp6Query() - pass selected subnet (if one) into processPacketPktSend() Dhcpv6Srv::sendResponseNoThrow() - add subnet parameter, pass it into processPacketPktSend9() Dhcpv6Srv::processPacketPktSend() - add subnet parameter, add "process_completed" event to query, add subnet to callout arguments src/bin/dhcp6/tests/dhcp6_test_utils.cc src/bin/dhcp6/tests/dhcp6_test_utils.h src/bin/dhcp6/tests/hooks_unittest.cc Updates to verify packet events content add subnet4 callout argument src/bin/dhcp4/dhcp4_hooks.dox Updated pkt4_send arguments src/bin/dhcp6/dhcp6_hooks.dox Updated pkt6_send arguments
This commit is contained in:
@@ -1100,6 +1100,7 @@ Dhcpv4Srv::runOne() {
|
||||
return;
|
||||
} else {
|
||||
if (MultiThreadingMgr::instance().getMode()) {
|
||||
query->addPktEvent("mt_queued");
|
||||
typedef function<void()> CallBack;
|
||||
boost::shared_ptr<CallBack> call_back =
|
||||
boost::make_shared<CallBack>(std::bind(&Dhcpv4Srv::processPacketAndSendResponseNoThrow,
|
||||
@@ -1134,11 +1135,14 @@ Dhcpv4Srv::processPacketAndSendResponse(Pkt4Ptr& query) {
|
||||
}
|
||||
|
||||
CalloutHandlePtr callout_handle = getCalloutHandle(query);
|
||||
|
||||
processPacketBufferSend(callout_handle, rsp);
|
||||
}
|
||||
|
||||
void
|
||||
Dhcpv4Srv::processPacket(Pkt4Ptr& query, Pkt4Ptr& rsp, bool allow_packet_park) {
|
||||
query->addPktEvent("process_started");
|
||||
|
||||
// All packets belong to ALL.
|
||||
query->addClass("ALL");
|
||||
|
||||
@@ -1550,12 +1554,12 @@ Dhcpv4Srv::processDhcp4Query(Pkt4Ptr& query, Pkt4Ptr& rsp,
|
||||
typedef function<void()> CallBack;
|
||||
boost::shared_ptr<CallBack> call_back = boost::make_shared<CallBack>(
|
||||
std::bind(&Dhcpv4Srv::sendResponseNoThrow, this, callout_handle,
|
||||
query, rsp));
|
||||
query, rsp, ctx->subnet_));
|
||||
callout_handle_state->on_completion_ = [call_back]() {
|
||||
MultiThreadingMgr::instance().getThreadPool().add(call_back);
|
||||
};
|
||||
} else {
|
||||
processPacketPktSend(callout_handle, query, rsp);
|
||||
processPacketPktSend(callout_handle, query, rsp, ctx->subnet_);
|
||||
processPacketBufferSend(callout_handle, rsp);
|
||||
}
|
||||
});
|
||||
@@ -1596,15 +1600,16 @@ Dhcpv4Srv::processDhcp4Query(Pkt4Ptr& query, Pkt4Ptr& rsp,
|
||||
|
||||
// If we have a response prep it for shipment.
|
||||
if (rsp) {
|
||||
processPacketPktSend(callout_handle, query, rsp);
|
||||
Subnet4Ptr subnet = (ctx ? ctx->subnet_ : Subnet4Ptr());
|
||||
processPacketPktSend(callout_handle, query, rsp, subnet);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Dhcpv4Srv::sendResponseNoThrow(hooks::CalloutHandlePtr& callout_handle,
|
||||
Pkt4Ptr& query, Pkt4Ptr& rsp) {
|
||||
Pkt4Ptr& query, Pkt4Ptr& rsp, Subnet4Ptr& subnet) {
|
||||
try {
|
||||
processPacketPktSend(callout_handle, query, rsp);
|
||||
processPacketPktSend(callout_handle, query, rsp, subnet);
|
||||
processPacketBufferSend(callout_handle, rsp);
|
||||
} catch (const std::exception& e) {
|
||||
LOG_ERROR(packet4_logger, DHCP4_PACKET_PROCESS_STD_EXCEPTION)
|
||||
@@ -1616,7 +1621,8 @@ Dhcpv4Srv::sendResponseNoThrow(hooks::CalloutHandlePtr& callout_handle,
|
||||
|
||||
void
|
||||
Dhcpv4Srv::processPacketPktSend(hooks::CalloutHandlePtr& callout_handle,
|
||||
Pkt4Ptr& query, Pkt4Ptr& rsp) {
|
||||
Pkt4Ptr& query, Pkt4Ptr& rsp, Subnet4Ptr& subnet) {
|
||||
query->addPktEvent("process_completed");
|
||||
if (!rsp) {
|
||||
return;
|
||||
}
|
||||
@@ -1643,6 +1649,9 @@ Dhcpv4Srv::processPacketPktSend(hooks::CalloutHandlePtr& callout_handle,
|
||||
// Set our response
|
||||
callout_handle->setArgument("response4", rsp);
|
||||
|
||||
// Pass in the selected subnet.
|
||||
callout_handle->setArgument("subnet4", subnet);
|
||||
|
||||
// Call all installed callouts
|
||||
HooksManager::callCallouts(Hooks.hook_index_pkt4_send_,
|
||||
*callout_handle);
|
||||
|
Reference in New Issue
Block a user