2
0
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:
Thomas Markwalder
2024-02-16 14:13:29 -05:00
parent 2e02b32a58
commit ce0b886ccb
12 changed files with 136 additions and 22 deletions

View File

@@ -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);