]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#899] implemented extract data functions
authorRazvan Becheriu <razvan@isc.org>
Fri, 29 Jan 2021 15:48:16 +0000 (17:48 +0200)
committerRazvan Becheriu <razvan@isc.org>
Thu, 18 Feb 2021 17:14:26 +0000 (19:14 +0200)
src/hooks/dhcp/run_script/Makefile.am
src/hooks/dhcp/run_script/run_script.cc
src/hooks/dhcp/run_script/run_script.h
src/hooks/dhcp/run_script/run_script_callouts.cc
src/lib/dhcp/pkt4.h
src/lib/dhcp/pkt6.h
src/lib/dhcpsrv/subnet.cc
src/lib/dhcpsrv/subnet.h

index a1124520f9a89e9e14090b6e74880a2139388379..a097ba6d452cd47e01fffda1b958512ccbd72bb6 100644 (file)
@@ -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
index de86b4540319565cd2a27e024d9c70062154cd4d..6049e60b78099550c73903f68e88c0008ce9293a 100644 (file)
@@ -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<std::string>(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<uint64_t>(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<uint64_t>(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<std::string>(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<std::string>(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
index 90e95337646972ca2ecd1b8cbb8e17e7b54de3cd..35f12af02cf02d76008528c4cbf17668cc898579 100644 (file)
@@ -8,6 +8,7 @@
 #define RUN_SCRIPT_H
 
 #include <dhcp/duid.h>
+#include <dhcp/hwaddr.h>
 #include <dhcp/option6_ia.h>
 #include <dhcp/pkt4.h>
 #include <dhcp/pkt6.h>
@@ -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.
     ///
index 0e18ce70db39180cbf603504a6b9d458348d665f..df2ac16d5321342d906c48088e10d6ed9278a65a 100644 (file)
@@ -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);
index 273efd8d3d425ae17f303fee5802440a184aef8c..03c85ee459d3464659715b8ccb946d1d190adabe 100644 (file)
@@ -187,7 +187,6 @@ public:
     void
     setCiaddr(const isc::asiolink::IOAddress& ciaddr) { ciaddr_ = ciaddr; };
 
-
     /// @brief Returns siaddr field.
     ///
     /// @return siaddr field
index e7bac67de774315e2459dc04870f5a03be0f2c0a..5f331d23d0d1077630fcf59b8dbab0282b1c4d85 100644 (file)
@@ -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.
     ///
index 48965cefbdc907bba9e04460bb183b174288edb8..27f0a5ac7cef222a6252426aba188983bc75709e 100644 (file)
@@ -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) ||
index c164e9b6202d2a5fe5019fe0a997ebba6c107ea3..81426f70a113d87ede8de0649b3e61dd77fb54de 100644 (file)
@@ -454,9 +454,6 @@ protected:
     /// @note: This map is protected by the mutex.
     std::map<Lease::Type, boost::posix_time::ptime> last_allocated_time_;
 
-    /// @brief Name of the network interface (if connected directly).
-    std::string iface_;
-
     /// @brief Shared network name.
     std::string shared_network_name_;