From: Razvan Becheriu Date: Fri, 29 Jan 2021 15:48:16 +0000 (+0200) Subject: [#899] implemented extract data functions X-Git-Tag: Kea-1.9.5~83 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=461463bb2fd4a1ac1222601469be4820cc168faf;p=thirdparty%2Fkea.git [#899] implemented extract data functions --- diff --git a/src/hooks/dhcp/run_script/Makefile.am b/src/hooks/dhcp/run_script/Makefile.am index a1124520f9..a097ba6d45 100644 --- a/src/hooks/dhcp/run_script/Makefile.am +++ b/src/hooks/dhcp/run_script/Makefile.am @@ -30,7 +30,9 @@ lib_hooks_LTLIBRARIES = libdhcp_run_script.la libdhcp_run_script_la_SOURCES = libdhcp_run_script_la_LDFLAGS = $(AM_LDFLAGS) libdhcp_run_script_la_LDFLAGS += -avoid-version -export-dynamic -module -libdhcp_run_script_la_LIBADD = librun_script.la +libdhcp_run_script_la_LIBADD = librun_script.la +libdhcp_run_script_la_LIBADD += $(top_builddir)/src/lib/dhcp/libkea-dhcp++.la +libdhcp_run_script_la_LIBADD += $(top_builddir)/src/lib/dhcpsrv/libkea-dhcpsrv.la libdhcp_run_script_la_LIBADD += $(top_builddir)/src/lib/hooks/libkea-hooks.la libdhcp_run_script_la_LIBADD += $(top_builddir)/src/lib/cc/libkea-cc.la libdhcp_run_script_la_LIBADD += $(top_builddir)/src/lib/log/libkea-log.la diff --git a/src/hooks/dhcp/run_script/run_script.cc b/src/hooks/dhcp/run_script/run_script.cc index de86b45403..6049e60b78 100644 --- a/src/hooks/dhcp/run_script/run_script.cc +++ b/src/hooks/dhcp/run_script/run_script.cc @@ -11,6 +11,8 @@ using namespace isc::data; using namespace isc::hooks; using namespace isc::util; +using namespace isc::dhcp; +using namespace std; namespace isc { namespace run_script { @@ -48,99 +50,379 @@ RunScriptImpl::runScript(const ProcessArgs& args, const ProcessEnvVars& vars) { void RunScriptImpl::extractBoolean(isc::util::ProcessEnvVars& vars, const bool value, - const std::string prefix, - const std::string sufix) { + const std::string& prefix, + const std::string& sufix) { + std::string data = "0"; + if (value) { + data = "1"; + } + std::string exported_data = prefix + sufix + "=" + data; + vars.push_back(exported_data); } void RunScriptImpl::extractInteger(isc::util::ProcessEnvVars& vars, - const uint32_t value, - const std::string prefix, - const std::string sufix) { + const uint64_t value, + const std::string& prefix, + const std::string& sufix) { + std::string data = ""; + try { + data = boost::lexical_cast(value); + } catch (...) { + } + std::string exported_data = prefix + sufix + "=" + data; + vars.push_back(exported_data); } void RunScriptImpl::extractString(isc::util::ProcessEnvVars& vars, - const bool value, - const std::string prefix, - const std::string sufix) { + const std::string& value, + const std::string& prefix, + const std::string& sufix) { + std::string exported_data = prefix + sufix + "=" + value; + vars.push_back(exported_data); } void RunScriptImpl::extractHWAddr(isc::util::ProcessEnvVars& vars, const isc::dhcp::HWAddrPtr& hwaddr, - const std::string prefix, - const std::string sufix) { + const std::string& prefix, + const std::string& sufix) { + if (hwaddr) { + RunScriptImpl::extractString(vars, std::string(hwaddr->hwaddr_.begin(), + hwaddr->hwaddr_.end()), + prefix, sufix); + RunScriptImpl::extractInteger(vars, hwaddr->htype_, + prefix + "_TYPE", sufix); + } else { + RunScriptImpl::extractString(vars, "", prefix, sufix); + RunScriptImpl::extractString(vars, "", prefix + "_TYPE", sufix); + } } void -RunScriptImpl::extractClientID(isc::util::ProcessEnvVars& vars, - const isc::dhcp::ClientIdPtr clientid, - const std::string prefix, - const std::string sufix) { +RunScriptImpl::extractDUID(isc::util::ProcessEnvVars& vars, + const isc::dhcp::DuidPtr duid, + const std::string& prefix, + const std::string& sufix) { + std::string data = ""; + if (duid) { + RunScriptImpl::extractString(vars, duid->toText(), + prefix + "_CLIENT_ID", sufix); + } else { + RunScriptImpl::extractString(vars, "", prefix + "_CLIENT_ID", sufix); + } } void RunScriptImpl::extractOptionIA(isc::util::ProcessEnvVars& vars, const isc::dhcp::Option6IAPtr option6IA, - const std::string prefix, - const std::string sufix) { + const std::string& prefix, + const std::string& sufix) { + if (option6IA) { + RunScriptImpl::extractInteger(vars, option6IA->getIAID(), + prefix + "_IAID", sufix); + RunScriptImpl::extractInteger(vars, option6IA->getType(), + prefix + "_IA_TYPE", sufix); + RunScriptImpl::extractInteger(vars, option6IA->getT1(), + prefix + "_IA_T1", sufix); + RunScriptImpl::extractInteger(vars, option6IA->getT2(), + prefix + "_IA_T2", sufix); + } else { + RunScriptImpl::extractString(vars, "", prefix + "_IAID", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_IA_TYPE", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_IA_T1", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_IA_T2", sufix); + } } void RunScriptImpl::extractSubnet4(isc::util::ProcessEnvVars& vars, const isc::dhcp::Subnet4Ptr subnet4, - const std::string prefix, - const std::string sufix) { + const std::string& prefix, + const std::string& sufix) { + if (subnet4) { + RunScriptImpl::extractInteger(vars, subnet4->getID(), + prefix + "_ID", sufix); + RunScriptImpl::extractString(vars, subnet4->toText(), + prefix + "_NAME", sufix); + auto prefix_data = subnet4->get(); + RunScriptImpl::extractString(vars, prefix_data.first.toText(), + prefix + "_PREFIX", sufix); + RunScriptImpl::extractInteger(vars, prefix_data.second, + prefix + "_PREFIX_LEN", sufix); + } else { + RunScriptImpl::extractString(vars, "", prefix + "_ID", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_NAME", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_PREFIX", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_PREFIX_LEN", sufix); + } } void RunScriptImpl::extractSubnet6(isc::util::ProcessEnvVars& vars, const isc::dhcp::Subnet6Ptr subnet6, - const std::string prefix, - const std::string sufix) { + const std::string& prefix, + const std::string& sufix) { + if (subnet6) { + RunScriptImpl::extractInteger(vars, subnet6->getID(), + prefix + "_ID", sufix); + RunScriptImpl::extractString(vars, subnet6->toText(), + prefix + "_NAME", sufix); + auto prefix_data = subnet6->get(); + RunScriptImpl::extractString(vars, prefix_data.first.toText(), + prefix + "_PREFIX", sufix); + RunScriptImpl::extractInteger(vars, prefix_data.second, + prefix + "_PREFIX_LEN", sufix); + } else { + RunScriptImpl::extractString(vars, "", prefix + "_ID", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_NAME", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_PREFIX", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_PREFIX_LEN", sufix); + } } void RunScriptImpl::extractLease4(isc::util::ProcessEnvVars& vars, const isc::dhcp::Lease4Ptr& lease4, - const std::string prefix, - const std::string sufix) { + const std::string& prefix, + const std::string& sufix) { + if (lease4) { + RunScriptImpl::extractString(vars, lease4->addr_.toText(), + prefix + "_ADDRESS", sufix); + RunScriptImpl::extractInteger(vars, static_cast(lease4->cltt_), + prefix + "_CLTT", sufix); + RunScriptImpl::extractString(vars, lease4->hostname_, + prefix + "_HOSTNAME", sufix); + RunScriptImpl::extractHWAddr(vars, lease4->hwaddr_, + prefix + "_HWADDR", sufix); + RunScriptImpl::extractString(vars, Lease4::statesToText(lease4->state_), + prefix + "_STATE", sufix); + RunScriptImpl::extractInteger(vars, lease4->subnet_id_, + prefix + "_SUBNET_ID", sufix); + RunScriptImpl::extractInteger(vars, lease4->valid_lft_, + prefix + "_VALID_LIFETIME", sufix); + RunScriptImpl::extractDUID(vars, lease4->client_id_, + prefix + "_CLIENT_ID", sufix); + } else { + RunScriptImpl::extractString(vars, "", prefix + "_ADDRESS", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_CLTT", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_HOSTNAME", sufix); + RunScriptImpl::extractHWAddr(vars, HWAddrPtr(), prefix + "_HWADDR", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_STATE", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_SUBNET_ID", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_VALID_LIFETIME", sufix); + RunScriptImpl::extractDUID(vars, DuidPtr(), prefix + "_CLIENT_ID", sufix); + } } void RunScriptImpl::extractLease6(isc::util::ProcessEnvVars& vars, const isc::dhcp::Lease6Ptr& lease6, - const std::string prefix, - const std::string sufix) { + const std::string& prefix, + const std::string& sufix) { + if (lease6) { + RunScriptImpl::extractString(vars, lease6->addr_.toText(), + prefix + "_ADDRESS", sufix); + RunScriptImpl::extractInteger(vars, static_cast(lease6->cltt_), + prefix + "_CLTT", sufix); + RunScriptImpl::extractString(vars, lease6->hostname_, + prefix + "_HOSTNAME", sufix); + RunScriptImpl::extractHWAddr(vars, lease6->hwaddr_, + prefix + "_HWADDR", sufix); + RunScriptImpl::extractString(vars, Lease6::statesToText(lease6->state_), + prefix + "_STATE", sufix); + RunScriptImpl::extractInteger(vars, lease6->subnet_id_, + prefix + "_SUBNET_ID", sufix); + RunScriptImpl::extractInteger(vars, lease6->valid_lft_, + prefix + "_VALID_LIFETIME", sufix); + RunScriptImpl::extractDUID(vars, lease6->duid_, + prefix + "_DUID", sufix); + RunScriptImpl::extractInteger(vars, lease6->iaid_, + prefix + "_IAID", sufix); + RunScriptImpl::extractInteger(vars, lease6->preferred_lft_, + prefix + "_PREFERRED_LIFETIME", sufix); + RunScriptImpl::extractInteger(vars, lease6->prefixlen_, + prefix + "_PREFIX_LEN", sufix); + RunScriptImpl::extractString(vars, Lease::typeToText(lease6->type_), + prefix + "_TYPE", sufix); + } else { + RunScriptImpl::extractString(vars, "", prefix + "_ADDRESS", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_CLTT", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_HOSTNAME", sufix); + RunScriptImpl::extractHWAddr(vars, HWAddrPtr(), prefix + "_HWADDR", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_STATE", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_SUBNET_ID", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_VALID_LIFETIME", sufix); + RunScriptImpl::extractDUID(vars, DuidPtr(), prefix + "_DUID", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_IAID", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_PREFERRED_LIFETIME", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_PREFIX_LEN", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_TYPE", sufix); + } } void RunScriptImpl::extractLeases4(isc::util::ProcessEnvVars& vars, const isc::dhcp::Lease4CollectionPtr& leases4, - const std::string prefix, - const std::string sufix) { + const std::string& prefix, + const std::string& sufix) { + if (leases4) { + RunScriptImpl::extractInteger(vars, leases4->size(), + prefix + "_SIZE", sufix); + for (int i = 0; i < leases4->size(); ++i) { + RunScriptImpl::extractLease4(vars, leases4->at(i), + prefix + "_AT" + + boost::lexical_cast(i), + sufix); + } + } else { + RunScriptImpl::extractString(vars, "0", prefix + "_SIZE", sufix); + } } void RunScriptImpl::extractLeases6(isc::util::ProcessEnvVars& vars, const isc::dhcp::Lease6CollectionPtr& leases6, - const std::string prefix, - const std::string sufix) { + const std::string& prefix, + const std::string& sufix) { + if (leases6) { + RunScriptImpl::extractInteger(vars, leases6->size(), + prefix + "_SIZE", sufix); + for (int i = 0; i < leases6->size(); ++i) { + RunScriptImpl::extractLease6(vars, leases6->at(i), + prefix + "_AT" + + boost::lexical_cast(i), + sufix); + } + } else { + RunScriptImpl::extractString(vars, "0", prefix + "_SIZE", sufix); + } } void RunScriptImpl::extractPkt4(isc::util::ProcessEnvVars& vars, const isc::dhcp::Pkt4Ptr& pkt4, - const std::string prefix, - const std::string sufix) { + const std::string& prefix, + const std::string& sufix) { + if (pkt4) { + RunScriptImpl::extractString(vars, pkt4->getName(pkt4->getType()), + prefix + "_TYPE", sufix); + RunScriptImpl::extractInteger(vars, pkt4->getTransid(), + prefix + "_TXID", sufix); + RunScriptImpl::extractString(vars, pkt4->getLocalAddr().toText(), + prefix + "_LOCAL_ADDR", sufix); + RunScriptImpl::extractInteger(vars, pkt4->getLocalPort(), + prefix + "_LOCAL_PORT", sufix); + RunScriptImpl::extractString(vars, pkt4->getRemoteAddr().toText(), + prefix + "_REMOTE_ADDR", sufix); + RunScriptImpl::extractInteger(vars, pkt4->getRemotePort(), + prefix + "_REMOTE_PORT", sufix); + RunScriptImpl::extractInteger(vars, pkt4->getIndex(), + prefix + "_IFACE_INDEX", sufix); + RunScriptImpl::extractString(vars, pkt4->getIface(), + prefix + "_IFACE_NAME", sufix); + RunScriptImpl::extractInteger(vars, pkt4->getHops(), + prefix + "_HOPS", sufix); + RunScriptImpl::extractInteger(vars, pkt4->getSecs(), + prefix + "_SECS", sufix); + RunScriptImpl::extractInteger(vars, pkt4->getFlags(), + prefix + "_FLAGS", sufix); + RunScriptImpl::extractString(vars, pkt4->getCiaddr().toText(), + prefix + "_CIADDR", sufix); + RunScriptImpl::extractString(vars, pkt4->getSiaddr().toText(), + prefix + "_SIADDR", sufix); + RunScriptImpl::extractString(vars, pkt4->getYiaddr().toText(), + prefix + "_YIADDR", sufix); + RunScriptImpl::extractString(vars, pkt4->getGiaddr().toText(), + prefix + "_GIADDR", sufix); + RunScriptImpl::extractString(vars, std::string(pkt4->getSname().begin(), + pkt4->getSname().end()), + prefix + "_SNAME", sufix); + RunScriptImpl::extractString(vars, std::string(pkt4->getFile().begin(), + pkt4->getFile().end()), + prefix + "_FILE_NAME", sufix); + RunScriptImpl::extractBoolean(vars, pkt4->isRelayed(), + prefix + "_RELAYED", sufix); + RunScriptImpl::extractHWAddr(vars, pkt4->getHWAddr(), + prefix + "_HWADDR", sufix); + RunScriptImpl::extractHWAddr(vars, pkt4->getLocalHWAddr(), + prefix + "_LOCAL_HWADDR", sufix); + RunScriptImpl::extractHWAddr(vars, pkt4->getRemoteHWAddr(), + prefix + "_REMOTE_HWADDR", sufix); + } else { + RunScriptImpl::extractString(vars, "", prefix + "_TYPE", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_TXID", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_LOCAL_ADDR", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_LOCAL_PORT", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_REMOTE_ADDR", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_REMOTE_PORT", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_IFACE_INDEX", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_IFACE_NAME", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_HOPS", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_SECS", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_FLAGS", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_CIADDR", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_SIADDR", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_YIADDR", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_GIADDR", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_SNAME", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_FILE_NAME", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_RELAYED", sufix); + RunScriptImpl::extractHWAddr(vars, HWAddrPtr(), + prefix + "_HWADDR", sufix); + RunScriptImpl::extractHWAddr(vars, HWAddrPtr(), + prefix + "_LOCAL_HWADDR", sufix); + RunScriptImpl::extractHWAddr(vars, HWAddrPtr(), + prefix + "_REMOTE_HWADDR", sufix); + } } void RunScriptImpl::extractPkt6(isc::util::ProcessEnvVars& vars, const isc::dhcp::Pkt6Ptr& pkt6, - const std::string prefix, - const std::string sufix) { + const std::string& prefix, + const std::string& sufix) { + if (pkt6) { + RunScriptImpl::extractString(vars, pkt6->getName(pkt6->getType()), + prefix + "_TYPE", sufix); + RunScriptImpl::extractInteger(vars, pkt6->getTransid(), + prefix + "_TXID", sufix); + RunScriptImpl::extractString(vars, pkt6->getLocalAddr().toText(), + prefix + "_LOCAL_ADDR", sufix); + RunScriptImpl::extractInteger(vars, pkt6->getLocalPort(), + prefix + "_LOCAL_PORT", sufix); + RunScriptImpl::extractString(vars, pkt6->getRemoteAddr().toText(), + prefix + "_REMOTE_ADDR", sufix); + RunScriptImpl::extractInteger(vars, pkt6->getRemotePort(), + prefix + "_REMOTE_PORT", sufix); + RunScriptImpl::extractInteger(vars, pkt6->getIndex(), + prefix + "_IFACE_INDEX", sufix); + RunScriptImpl::extractString(vars, pkt6->getIface(), + prefix + "_IFACE_NAME", sufix); + RunScriptImpl::extractHWAddr(vars, pkt6->getRemoteHWAddr(), + prefix + "_REMOTE_HWADDR", sufix); + std::string proto_data = (pkt6->getProto() == Pkt6::UDP ? "UDP" : "TCP"); + RunScriptImpl::extractString(vars, proto_data, + prefix + "_PROTO", sufix); + RunScriptImpl::extractDUID(vars, pkt6->getClientId(), + prefix + "_CLIENT_ID", sufix); + + } else { + RunScriptImpl::extractString(vars, "", prefix + "_TYPE", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_TXID", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_LOCAL_ADDR", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_LOCAL_PORT", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_REMOTE_ADDR", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_REMOTE_PORT", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_IFACE_INDEX", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_IFACE_NAME", sufix); + RunScriptImpl::extractHWAddr(vars, HWAddrPtr(), + prefix + "_REMOTE_HWADDR", sufix); + RunScriptImpl::extractString(vars, "", prefix + "_PROTO", sufix); + RunScriptImpl::extractDUID(vars, DuidPtr(), + prefix + "_CLIENT_ID", sufix); + } } } // end of namespace run_script diff --git a/src/hooks/dhcp/run_script/run_script.h b/src/hooks/dhcp/run_script/run_script.h index 90e9533764..35f12af02c 100644 --- a/src/hooks/dhcp/run_script/run_script.h +++ b/src/hooks/dhcp/run_script/run_script.h @@ -8,6 +8,7 @@ #define RUN_SCRIPT_H #include +#include #include #include #include @@ -36,8 +37,8 @@ public: /// @param sufix The sufix for the name of the environment variable. static void extractBoolean(isc::util::ProcessEnvVars& vars, const bool value, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract integer data and append to environment. /// @@ -45,9 +46,9 @@ public: /// @param prefix The prefix for the name of the environment variable. /// @param sufix The sufix for the name of the environment variable. static void extractInteger(isc::util::ProcessEnvVars& vars, - const uint32_t value, - const std::string prefix = "", - const std::string sufix = ""); + const uint64_t value, + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract string data and append to environment. /// @@ -55,9 +56,9 @@ public: /// @param prefix The prefix for the name of the environment variable. /// @param sufix The sufix for the name of the environment variable. static void extractString(isc::util::ProcessEnvVars& vars, - const bool value, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& value, + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract HWAddr data and append to environment. /// @@ -66,18 +67,18 @@ public: /// @param sufix The sufix for the name of the environment variable. static void extractHWAddr(isc::util::ProcessEnvVars& vars, const isc::dhcp::HWAddrPtr& hwaddr, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& prefix = "", + const std::string& sufix = ""); - /// @brief Extract ClientId data and append to environment. + /// @brief Extract DUID data and append to environment. /// - /// @param value The clienid to be exported to target script environment. + /// @param value The duid to be exported to target script environment. /// @param prefix The prefix for the name of the environment variable. /// @param sufix The sufix for the name of the environment variable. - static void extractClientID(isc::util::ProcessEnvVars& vars, - const isc::dhcp::ClientIdPtr clientid, - const std::string prefix = "", - const std::string sufix = ""); + static void extractDUID(isc::util::ProcessEnvVars& vars, + const isc::dhcp::DuidPtr duid, + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract Option6IA data and append to environment. /// @@ -86,8 +87,8 @@ public: /// @param sufix The sufix for the name of the environment variable. static void extractOptionIA(isc::util::ProcessEnvVars& vars, const isc::dhcp::Option6IAPtr option6IA, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract Subnet4 data and append to environment. /// @@ -96,8 +97,8 @@ public: /// @param sufix The sufix for the name of the environment variable. static void extractSubnet4(isc::util::ProcessEnvVars& vars, const isc::dhcp::Subnet4Ptr subnet4, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract Subnet6 data and append to environment. /// @@ -106,8 +107,8 @@ public: /// @param sufix The sufix for the name of the environment variable. static void extractSubnet6(isc::util::ProcessEnvVars& vars, const isc::dhcp::Subnet6Ptr subnet6, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract Lease4 data and append to environment. /// @@ -116,8 +117,8 @@ public: /// @param sufix The sufix for the name of the environment variable. static void extractLease4(isc::util::ProcessEnvVars& vars, const isc::dhcp::Lease4Ptr& lease4, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract Lease6 data and append to environment. /// @@ -126,8 +127,8 @@ public: /// @param sufix The sufix for the name of the environment variable. static void extractLease6(isc::util::ProcessEnvVars& vars, const isc::dhcp::Lease6Ptr& lease6, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract Lease4Collection data and append to environment. /// @@ -136,8 +137,8 @@ public: /// @param sufix The sufix for the name of the environment variable. static void extractLeases4(isc::util::ProcessEnvVars& vars, const isc::dhcp::Lease4CollectionPtr& leases4, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract Lease6Collection data and append to environment. /// @@ -146,8 +147,8 @@ public: /// @param sufix The sufix for the name of the environment variable. static void extractLeases6(isc::util::ProcessEnvVars& vars, const isc::dhcp::Lease6CollectionPtr& leases6, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract Pkt4 data and append to environment. /// @@ -156,8 +157,8 @@ public: /// @param sufix The sufix for the name of the environment variable. static void extractPkt4(isc::util::ProcessEnvVars& vars, const isc::dhcp::Pkt4Ptr& pkt4, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Extract Pkt6 data and append to environment. /// @@ -166,8 +167,8 @@ public: /// @param sufix The sufix for the name of the environment variable. static void extractPkt6(isc::util::ProcessEnvVars& vars, const isc::dhcp::Pkt6Ptr& pkt6, - const std::string prefix = "", - const std::string sufix = ""); + const std::string& prefix = "", + const std::string& sufix = ""); /// @brief Run Script with specified arguments and environment parameters. /// diff --git a/src/hooks/dhcp/run_script/run_script_callouts.cc b/src/hooks/dhcp/run_script/run_script_callouts.cc index 0e18ce70db..df2ac16d53 100644 --- a/src/hooks/dhcp/run_script/run_script_callouts.cc +++ b/src/hooks/dhcp/run_script/run_script_callouts.cc @@ -76,19 +76,19 @@ int lease4_renew(CalloutHandle& handle) { ProcessEnvVars vars; Pkt4Ptr pkt4; handle.getArgument("query4", pkt4); - RunScriptImpl::extractPkt4(vars, pkt4); + RunScriptImpl::extractPkt4(vars, pkt4, "QUERY4"); Subnet4Ptr subnet4; handle.getArgument("subnet4", subnet4); - RunScriptImpl::extractSubnet4(vars, subnet4); + RunScriptImpl::extractSubnet4(vars, subnet4, "SUBNET4"); ClientIdPtr clientid; handle.getArgument("clientid", clientid); - RunScriptImpl::extractClientID(vars, clientid); + RunScriptImpl::extractDUID(vars, clientid, "PKT4_CLIENT_ID"); HWAddrPtr hwaddr; handle.getArgument("hwaddr", hwaddr); - RunScriptImpl::extractHWAddr(vars, hwaddr); + RunScriptImpl::extractHWAddr(vars, hwaddr, "PKT4_HWADDR"); Lease4Ptr lease4; handle.getArgument("lease4", lease4); - RunScriptImpl::extractLease4(vars, lease4); + RunScriptImpl::extractLease4(vars, lease4, "LEASE4"); ProcessArgs args; args.push_back("lease4_renew"); impl->runScript(args, vars); @@ -108,10 +108,10 @@ int lease4_expire(CalloutHandle& handle) { ProcessEnvVars vars; Lease4Ptr lease4; handle.getArgument("lease4", lease4); - RunScriptImpl::extractLease4(vars, lease4); + RunScriptImpl::extractLease4(vars, lease4, "LEASE4"); bool remove_lease; handle.getArgument("remove_lease", remove_lease); - RunScriptImpl::extractBoolean(vars, remove_lease); + RunScriptImpl::extractBoolean(vars, remove_lease, "REMOVE_LEASE"); ProcessArgs args; args.push_back("lease4_expire"); impl->runScript(args, vars); @@ -131,7 +131,7 @@ int lease4_recover(CalloutHandle& handle) { ProcessEnvVars vars; Lease4Ptr lease4; handle.getArgument("lease4", lease4); - RunScriptImpl::extractLease4(vars, lease4); + RunScriptImpl::extractLease4(vars, lease4, "LEASE4"); ProcessArgs args; args.push_back("lease4_recover"); impl->runScript(args, vars); @@ -151,13 +151,13 @@ int leases4_committed(CalloutHandle& handle) { ProcessEnvVars vars; Pkt4Ptr pkt4; handle.getArgument("query4", pkt4); - RunScriptImpl::extractPkt4(vars, pkt4); + RunScriptImpl::extractPkt4(vars, pkt4, "QUERY4"); Lease4CollectionPtr leases4; handle.getArgument("leases4", leases4); - RunScriptImpl::extractLeases4(vars, leases4); + RunScriptImpl::extractLeases4(vars, leases4, "LEASES4"); Lease4CollectionPtr deleted_leases4; handle.getArgument("deleted_leases4", deleted_leases4); - RunScriptImpl::extractLeases4(vars, deleted_leases4); + RunScriptImpl::extractLeases4(vars, deleted_leases4, "DELETED_LEASES4"); ProcessArgs args; args.push_back("leases4_committed"); impl->runScript(args, vars); @@ -177,10 +177,10 @@ int lease4_release(CalloutHandle& handle) { ProcessEnvVars vars; Pkt4Ptr pkt4; handle.getArgument("query4", pkt4); - RunScriptImpl::extractPkt4(vars, pkt4); + RunScriptImpl::extractPkt4(vars, pkt4, "QUERY4"); Lease4Ptr lease4; handle.getArgument("lease4", lease4); - RunScriptImpl::extractLease4(vars, lease4); + RunScriptImpl::extractLease4(vars, lease4, "LEASE4"); ProcessArgs args; args.push_back("lease4_release"); impl->runScript(args, vars); @@ -200,10 +200,10 @@ int lease4_decline(CalloutHandle& handle) { ProcessEnvVars vars; Pkt4Ptr pkt4; handle.getArgument("query4", pkt4); - RunScriptImpl::extractPkt4(vars, pkt4); + RunScriptImpl::extractPkt4(vars, pkt4, "QUERY4"); Lease4Ptr lease4; handle.getArgument("lease4", lease4); - RunScriptImpl::extractLease4(vars, lease4); + RunScriptImpl::extractLease4(vars, lease4, "LEASE4"); ProcessArgs args; args.push_back("lease4_decline"); impl->runScript(args, vars); @@ -223,17 +223,17 @@ int lease6_renew(CalloutHandle& handle) { ProcessEnvVars vars; Pkt6Ptr pkt6; handle.getArgument("query6", pkt6); - RunScriptImpl::extractPkt6(vars, pkt6); + RunScriptImpl::extractPkt6(vars, pkt6, "QUERY6"); Lease6Ptr lease6; handle.getArgument("lease6", lease6); - RunScriptImpl::extractLease6(vars, lease6); + RunScriptImpl::extractLease6(vars, lease6, "LEASE6"); Option6IAPtr option6IA; if (lease6->type_ == Lease::TYPE_NA) { handle.getArgument("ia_na", option6IA); } else { handle.getArgument("ia_pd", option6IA); } - RunScriptImpl::extractOptionIA(vars, option6IA); + RunScriptImpl::extractOptionIA(vars, option6IA, "PKT6_IA"); ProcessArgs args; args.push_back("lease6_renew"); impl->runScript(args, vars); @@ -253,17 +253,17 @@ int lease6_rebind(CalloutHandle& handle) { ProcessEnvVars vars; Pkt6Ptr pkt6; handle.getArgument("query6", pkt6); - RunScriptImpl::extractPkt6(vars, pkt6); + RunScriptImpl::extractPkt6(vars, pkt6, "QUERY6"); Lease6Ptr lease6; handle.getArgument("lease6", lease6); - RunScriptImpl::extractLease6(vars, lease6); + RunScriptImpl::extractLease6(vars, lease6, "LEASE6"); Option6IAPtr option6IA; if (lease6->type_ == Lease::TYPE_NA) { handle.getArgument("ia_na", option6IA); } else { handle.getArgument("ia_pd", option6IA); } - RunScriptImpl::extractOptionIA(vars, option6IA); + RunScriptImpl::extractOptionIA(vars, option6IA, "PKT6_IA"); ProcessArgs args; args.push_back("lease6_rbind"); impl->runScript(args, vars); @@ -283,10 +283,10 @@ int lease6_expire(CalloutHandle& handle) { ProcessEnvVars vars; Lease6Ptr lease6; handle.getArgument("lease6", lease6); - RunScriptImpl::extractLease6(vars, lease6); + RunScriptImpl::extractLease6(vars, lease6, "LEASE6"); bool remove_lease; handle.getArgument("remove_lease", remove_lease); - RunScriptImpl::extractBoolean(vars, remove_lease); + RunScriptImpl::extractBoolean(vars, remove_lease, "REMOVE_LEASE"); ProcessArgs args; args.push_back("lease6_expire"); impl->runScript(args, vars); @@ -306,7 +306,7 @@ int lease6_recover(CalloutHandle& handle) { ProcessEnvVars vars; Lease6Ptr lease6; handle.getArgument("lease6", lease6); - RunScriptImpl::extractLease6(vars, lease6); + RunScriptImpl::extractLease6(vars, lease6, "LEASE6"); ProcessArgs args; args.push_back("lease6_recover"); impl->runScript(args, vars); @@ -326,13 +326,13 @@ int leases6_committed(CalloutHandle& handle) { ProcessEnvVars vars; Pkt6Ptr pkt6; handle.getArgument("query6", pkt6); - RunScriptImpl::extractPkt6(vars, pkt6); + RunScriptImpl::extractPkt6(vars, pkt6, "QUERY6"); Lease6CollectionPtr leases6; handle.getArgument("leases6", leases6); - RunScriptImpl::extractLeases6(vars, leases6); + RunScriptImpl::extractLeases6(vars, leases6, "LEASES6"); Lease6CollectionPtr deleted_leases6; handle.getArgument("deleted_leases6", deleted_leases6); - RunScriptImpl::extractLeases6(vars, deleted_leases6); + RunScriptImpl::extractLeases6(vars, deleted_leases6, "DELETED_LEASES6"); ProcessArgs args; args.push_back("leases6_committed"); impl->runScript(args, vars); @@ -352,10 +352,10 @@ int lease6_release(CalloutHandle& handle) { ProcessEnvVars vars; Pkt6Ptr pkt6; handle.getArgument("query6", pkt6); - RunScriptImpl::extractPkt6(vars, pkt6); + RunScriptImpl::extractPkt6(vars, pkt6, "QUERY6"); Lease6Ptr lease6; handle.getArgument("lease6", lease6); - RunScriptImpl::extractLease6(vars, lease6); + RunScriptImpl::extractLease6(vars, lease6, "LEASE6"); ProcessArgs args; args.push_back("lease6_release"); impl->runScript(args, vars); @@ -375,10 +375,10 @@ int lease6_decline(CalloutHandle& handle) { ProcessEnvVars vars; Pkt6Ptr pkt6; handle.getArgument("query6", pkt6); - RunScriptImpl::extractPkt6(vars, pkt6); + RunScriptImpl::extractPkt6(vars, pkt6, "QUERY6"); Lease6Ptr lease6; handle.getArgument("lease6", lease6); - RunScriptImpl::extractLease6(vars, lease6); + RunScriptImpl::extractLease6(vars, lease6, "LEASE6"); ProcessArgs args; args.push_back("lease6_decline"); impl->runScript(args, vars); diff --git a/src/lib/dhcp/pkt4.h b/src/lib/dhcp/pkt4.h index 273efd8d3d..03c85ee459 100644 --- a/src/lib/dhcp/pkt4.h +++ b/src/lib/dhcp/pkt4.h @@ -187,7 +187,6 @@ public: void setCiaddr(const isc::asiolink::IOAddress& ciaddr) { ciaddr_ = ciaddr; }; - /// @brief Returns siaddr field. /// /// @return siaddr field diff --git a/src/lib/dhcp/pkt6.h b/src/lib/dhcp/pkt6.h index e7bac67de7..5f331d23d0 100644 --- a/src/lib/dhcp/pkt6.h +++ b/src/lib/dhcp/pkt6.h @@ -146,7 +146,9 @@ public: /// @brief Returns protocol of this packet (UDP or TCP). /// /// @return protocol type - DHCPv6Proto getProto(); + DHCPv6Proto getProto() { + return (proto_); + } /// @brief Sets protocol of this packet. /// diff --git a/src/lib/dhcpsrv/subnet.cc b/src/lib/dhcpsrv/subnet.cc index 48965cefbd..27f0a5ac7c 100644 --- a/src/lib/dhcpsrv/subnet.cc +++ b/src/lib/dhcpsrv/subnet.cc @@ -64,7 +64,6 @@ Subnet::Subnet(const isc::asiolink::IOAddress& prefix, uint8_t len, last_allocated_ta_(lastAddrInPrefix(prefix, len)), last_allocated_pd_(lastAddrInPrefix(prefix, len)), last_allocated_time_(), - iface_(), shared_network_name_(), mutex_(new std::mutex) { if ((prefix.isV6() && len > 128) || diff --git a/src/lib/dhcpsrv/subnet.h b/src/lib/dhcpsrv/subnet.h index c164e9b620..81426f70a1 100644 --- a/src/lib/dhcpsrv/subnet.h +++ b/src/lib/dhcpsrv/subnet.h @@ -454,9 +454,6 @@ protected: /// @note: This map is protected by the mutex. std::map last_allocated_time_; - /// @brief Name of the network interface (if connected directly). - std::string iface_; - /// @brief Shared network name. std::string shared_network_name_;