Kea 3.1.1
run_script.cc
Go to the documentation of this file.
1// Copyright (C) 2021-2024 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#include <config.h>
8
9#include <run_script.h>
10
11using namespace isc::asiolink;
12using namespace isc::data;
13using namespace isc::hooks;
14using namespace isc::util;
15using namespace isc::dhcp;
16using namespace std;
17
18namespace isc {
19namespace run_script {
20
21RunScriptImpl::RunScriptImpl() : io_context_(new IOService()), name_(), sync_(false) {
22}
23
24void
26 ConstElementPtr name = handle.getParameter("name");
27 if (!name) {
28 isc_throw(NotFound, "The 'name' parameter is mandatory");
29 }
30 if (name->getType() != Element::string) {
31 isc_throw(InvalidParameter, "The 'name' parameter must be a string");
32 }
33 try {
34 ProcessSpawn process(ProcessSpawn::ASYNC, name->stringValue());
35 } catch (const isc::Exception& ex) {
36 isc_throw(InvalidParameter, "Invalid 'name' parameter: " << ex.what());
37 }
38 setName(name->stringValue());
39 ConstElementPtr sync = handle.getParameter("sync");
40 if (sync) {
41 if (sync->getType() != Element::boolean) {
42 isc_throw(InvalidParameter, "The 'sync' parameter must be a boolean");
43 }
44 setSync(sync->boolValue());
45 }
46}
47
48void
50 ProcessSpawn process(ProcessSpawn::ASYNC, name_, args, vars);
51 process.spawn(true);
52}
53
54void
56 const bool value,
57 const string& prefix,
58 const string& suffix) {
59 string data;
60 if (value) {
61 data = "true";
62 } else {
63 data = "false";
64 }
65 string exported_data = prefix + suffix + "=" + data;
66 vars.push_back(exported_data);
67}
68
69void
71 const uint64_t value,
72 const string& prefix,
73 const string& suffix) {
74 string exported_data = prefix + suffix + "=" + boost::lexical_cast<string>(value);
75 vars.push_back(exported_data);
76}
77
78void
80 const string& value,
81 const string& prefix,
82 const string& suffix) {
83 string exported_data = prefix + suffix + "=" + value;
84 vars.push_back(exported_data);
85}
86
87void
89 const HWAddrPtr& hwaddr,
90 const string& prefix,
91 const string& suffix) {
92 if (hwaddr) {
93 RunScriptImpl::extractString(vars, hwaddr->toText(false), prefix, suffix);
94 RunScriptImpl::extractInteger(vars, hwaddr->htype_, prefix + "_TYPE", suffix);
95 } else {
96 RunScriptImpl::extractString(vars, "", prefix, suffix);
97 RunScriptImpl::extractString(vars, "", prefix + "_TYPE", suffix);
98 }
99}
100
101void
103 const ClientIdPtr client_id,
104 const string& prefix,
105 const string& suffix) {
106 if (client_id) {
107 RunScriptImpl::extractString(vars, client_id->toText(),
108 prefix, suffix);
109 } else {
110 RunScriptImpl::extractString(vars, "", prefix, suffix);
111 }
112}
113
114void
116 const DuidPtr duid,
117 const string& prefix,
118 const string& suffix) {
119 if (duid) {
120 RunScriptImpl::extractString(vars, duid->toText(),
121 prefix, suffix);
122 } else {
123 RunScriptImpl::extractString(vars, "", prefix, suffix);
124 }
125}
126
127void
129 const OptionPtr option,
130 const string& prefix,
131 const string& suffix) {
132 if (option) {
133 RunScriptImpl::extractString(vars, option->toHexString(),
134 prefix + "_OPTION_" +
135 boost::lexical_cast<string>(option->getType()),
136 suffix);
137 }
138}
139
140void
142 const OptionPtr option,
143 uint16_t code,
144 const string& prefix,
145 const string& suffix) {
146 if (option) {
147 RunScriptImpl::extractOption(vars, option->getOption(code),
148 prefix + "_OPTION_" +
149 boost::lexical_cast<string>(option->getType()) +
150 "_SUB", suffix);
151 }
152}
153
154void
156 const Option6IAPtr option6IA,
157 const string& prefix,
158 const string& suffix) {
159 if (option6IA) {
160 RunScriptImpl::extractInteger(vars, option6IA->getIAID(),
161 prefix + "_IAID", suffix);
162 RunScriptImpl::extractInteger(vars, option6IA->getType(),
163 prefix + "_IA_TYPE", suffix);
164 RunScriptImpl::extractInteger(vars, option6IA->getT1(),
165 prefix + "_IA_T1", suffix);
166 RunScriptImpl::extractInteger(vars, option6IA->getT2(),
167 prefix + "_IA_T2", suffix);
168 } else {
169 RunScriptImpl::extractString(vars, "", prefix + "_IAID", suffix);
170 RunScriptImpl::extractString(vars, "", prefix + "_IA_TYPE", suffix);
171 RunScriptImpl::extractString(vars, "", prefix + "_IA_T1", suffix);
172 RunScriptImpl::extractString(vars, "", prefix + "_IA_T2", suffix);
173 }
174}
175
176void
178 const ConstSubnet4Ptr subnet4,
179 const string& prefix,
180 const string& suffix) {
181 if (subnet4) {
182 RunScriptImpl::extractInteger(vars, subnet4->getID(),
183 prefix + "_ID", suffix);
184 RunScriptImpl::extractString(vars, subnet4->toText(),
185 prefix + "_NAME", suffix);
186 auto prefix_data = subnet4->get();
187 RunScriptImpl::extractString(vars, prefix_data.first.toText(),
188 prefix + "_PREFIX", suffix);
189 RunScriptImpl::extractInteger(vars, prefix_data.second,
190 prefix + "_PREFIX_LEN", suffix);
191 } else {
192 RunScriptImpl::extractString(vars, "", prefix + "_ID", suffix);
193 RunScriptImpl::extractString(vars, "", prefix + "_NAME", suffix);
194 RunScriptImpl::extractString(vars, "", prefix + "_PREFIX", suffix);
195 RunScriptImpl::extractString(vars, "", prefix + "_PREFIX_LEN", suffix);
196 }
197}
198
199void
201 const ConstSubnet6Ptr subnet6,
202 const string& prefix,
203 const string& suffix) {
204 if (subnet6) {
205 RunScriptImpl::extractInteger(vars, subnet6->getID(),
206 prefix + "_ID", suffix);
207 RunScriptImpl::extractString(vars, subnet6->toText(),
208 prefix + "_NAME", suffix);
209 auto prefix_data = subnet6->get();
210 RunScriptImpl::extractString(vars, prefix_data.first.toText(),
211 prefix + "_PREFIX", suffix);
212 RunScriptImpl::extractInteger(vars, prefix_data.second,
213 prefix + "_PREFIX_LEN", suffix);
214 } else {
215 RunScriptImpl::extractString(vars, "", prefix + "_ID", suffix);
216 RunScriptImpl::extractString(vars, "", prefix + "_NAME", suffix);
217 RunScriptImpl::extractString(vars, "", prefix + "_PREFIX", suffix);
218 RunScriptImpl::extractString(vars, "", prefix + "_PREFIX_LEN", suffix);
219 }
220}
221
222void
224 const Lease4Ptr& lease4,
225 const string& prefix,
226 const string& suffix) {
227 if (lease4) {
228 RunScriptImpl::extractString(vars, lease4->addr_.toText(),
229 prefix + "_ADDRESS", suffix);
230 RunScriptImpl::extractInteger(vars, static_cast<uint64_t>(lease4->cltt_),
231 prefix + "_CLTT", suffix);
232 RunScriptImpl::extractString(vars, lease4->hostname_,
233 prefix + "_HOSTNAME", suffix);
234 RunScriptImpl::extractHWAddr(vars, lease4->hwaddr_,
235 prefix + "_HWADDR", suffix);
237 prefix + "_STATE", suffix);
238 RunScriptImpl::extractInteger(vars, lease4->subnet_id_,
239 prefix + "_SUBNET_ID", suffix);
240 RunScriptImpl::extractInteger(vars, lease4->valid_lft_,
241 prefix + "_VALID_LIFETIME", suffix);
242 RunScriptImpl::extractClientId(vars, lease4->client_id_,
243 prefix + "_CLIENT_ID", suffix);
244 } else {
245 RunScriptImpl::extractString(vars, "", prefix + "_ADDRESS", suffix);
246 RunScriptImpl::extractString(vars, "", prefix + "_CLTT", suffix);
247 RunScriptImpl::extractString(vars, "", prefix + "_HOSTNAME", suffix);
248 RunScriptImpl::extractHWAddr(vars, HWAddrPtr(), prefix + "_HWADDR", suffix);
249 RunScriptImpl::extractString(vars, "", prefix + "_STATE", suffix);
250 RunScriptImpl::extractString(vars, "", prefix + "_SUBNET_ID", suffix);
251 RunScriptImpl::extractString(vars, "", prefix + "_VALID_LIFETIME", suffix);
252 RunScriptImpl::extractClientId(vars, ClientIdPtr(), prefix + "_CLIENT_ID", suffix);
253 }
254}
255
256void
258 const Lease6Ptr& lease6,
259 const string& prefix,
260 const string& suffix) {
261 if (lease6) {
262 RunScriptImpl::extractString(vars, lease6->addr_.toText(),
263 prefix + "_ADDRESS", suffix);
264 RunScriptImpl::extractInteger(vars, static_cast<uint64_t>(lease6->cltt_),
265 prefix + "_CLTT", suffix);
266 RunScriptImpl::extractString(vars, lease6->hostname_,
267 prefix + "_HOSTNAME", suffix);
268 RunScriptImpl::extractHWAddr(vars, lease6->hwaddr_,
269 prefix + "_HWADDR", suffix);
271 prefix + "_STATE", suffix);
272 RunScriptImpl::extractInteger(vars, lease6->subnet_id_,
273 prefix + "_SUBNET_ID", suffix);
274 RunScriptImpl::extractInteger(vars, lease6->valid_lft_,
275 prefix + "_VALID_LIFETIME", suffix);
276 RunScriptImpl::extractDUID(vars, lease6->duid_,
277 prefix + "_DUID", suffix);
278 RunScriptImpl::extractInteger(vars, lease6->iaid_,
279 prefix + "_IAID", suffix);
280 RunScriptImpl::extractInteger(vars, lease6->preferred_lft_,
281 prefix + "_PREFERRED_LIFETIME", suffix);
282 RunScriptImpl::extractInteger(vars, lease6->prefixlen_,
283 prefix + "_PREFIX_LEN", suffix);
285 prefix + "_TYPE", suffix);
286 } else {
287 RunScriptImpl::extractString(vars, "", prefix + "_ADDRESS", suffix);
288 RunScriptImpl::extractString(vars, "", prefix + "_CLTT", suffix);
289 RunScriptImpl::extractString(vars, "", prefix + "_HOSTNAME", suffix);
290 RunScriptImpl::extractHWAddr(vars, HWAddrPtr(), prefix + "_HWADDR", suffix);
291 RunScriptImpl::extractString(vars, "", prefix + "_STATE", suffix);
292 RunScriptImpl::extractString(vars, "", prefix + "_SUBNET_ID", suffix);
293 RunScriptImpl::extractString(vars, "", prefix + "_VALID_LIFETIME", suffix);
294 RunScriptImpl::extractDUID(vars, DuidPtr(), prefix + "_DUID", suffix);
295 RunScriptImpl::extractString(vars, "", prefix + "_IAID", suffix);
296 RunScriptImpl::extractString(vars, "", prefix + "_PREFERRED_LIFETIME", suffix);
297 RunScriptImpl::extractString(vars, "", prefix + "_PREFIX_LEN", suffix);
298 RunScriptImpl::extractString(vars, "", prefix + "_TYPE", suffix);
299 }
300}
301
302void
304 const Lease4CollectionPtr& leases4,
305 const string& prefix,
306 const string& suffix) {
307 if (leases4) {
308 RunScriptImpl::extractInteger(vars, leases4->size(),
309 prefix + "_SIZE", suffix);
310 for (size_t i = 0; i < leases4->size(); ++i) {
311 RunScriptImpl::extractLease4(vars, leases4->at(i),
312 prefix + "_AT" +
313 boost::lexical_cast<string>(i),
314 suffix);
315 }
316 } else {
317 RunScriptImpl::extractString(vars, "0", prefix + "_SIZE", suffix);
318 }
319}
320
321void
323 const Lease6CollectionPtr& leases6,
324 const string& prefix,
325 const string& suffix) {
326 if (leases6) {
327 RunScriptImpl::extractInteger(vars, leases6->size(),
328 prefix + "_SIZE", suffix);
329 for (size_t i = 0; i < leases6->size(); ++i) {
330 RunScriptImpl::extractLease6(vars, leases6->at(i),
331 prefix + "_AT" +
332 boost::lexical_cast<string>(i),
333 suffix);
334 }
335 } else {
336 RunScriptImpl::extractString(vars, "0", prefix + "_SIZE", suffix);
337 }
338}
339
340void
342 const Pkt4Ptr& pkt4,
343 const string& prefix,
344 const string& suffix) {
345 if (pkt4) {
346 RunScriptImpl::extractString(vars, pkt4->getName(pkt4->getType()),
347 prefix + "_TYPE", suffix);
348 RunScriptImpl::extractInteger(vars, pkt4->getTransid(),
349 prefix + "_TXID", suffix);
350 RunScriptImpl::extractString(vars, pkt4->getLocalAddr().toText(),
351 prefix + "_LOCAL_ADDR", suffix);
352 RunScriptImpl::extractInteger(vars, pkt4->getLocalPort(),
353 prefix + "_LOCAL_PORT", suffix);
354 RunScriptImpl::extractString(vars, pkt4->getRemoteAddr().toText(),
355 prefix + "_REMOTE_ADDR", suffix);
356 RunScriptImpl::extractInteger(vars, pkt4->getRemotePort(),
357 prefix + "_REMOTE_PORT", suffix);
358 RunScriptImpl::extractInteger(vars, pkt4->getIndex(),
359 prefix + "_IFACE_INDEX", suffix);
360 RunScriptImpl::extractString(vars, pkt4->getIface(),
361 prefix + "_IFACE_NAME", suffix);
362 RunScriptImpl::extractInteger(vars, pkt4->getHops(),
363 prefix + "_HOPS", suffix);
364 RunScriptImpl::extractInteger(vars, pkt4->getSecs(),
365 prefix + "_SECS", suffix);
366 RunScriptImpl::extractInteger(vars, pkt4->getFlags(),
367 prefix + "_FLAGS", suffix);
368 RunScriptImpl::extractString(vars, pkt4->getCiaddr().toText(),
369 prefix + "_CIADDR", suffix);
370 RunScriptImpl::extractString(vars, pkt4->getSiaddr().toText(),
371 prefix + "_SIADDR", suffix);
372 RunScriptImpl::extractString(vars, pkt4->getYiaddr().toText(),
373 prefix + "_YIADDR", suffix);
374 RunScriptImpl::extractString(vars, pkt4->getGiaddr().toText(),
375 prefix + "_GIADDR", suffix);
376 RunScriptImpl::extractBoolean(vars, pkt4->isRelayed(),
377 prefix + "_RELAYED", suffix);
378 RunScriptImpl::extractHWAddr(vars, pkt4->getHWAddr(),
379 prefix + "_HWADDR", suffix);
380 RunScriptImpl::extractHWAddr(vars, pkt4->getLocalHWAddr(),
381 prefix + "_LOCAL_HWADDR", suffix);
382 RunScriptImpl::extractHWAddr(vars, pkt4->getRemoteHWAddr(),
383 prefix + "_REMOTE_HWADDR", suffix);
385 pkt4->getOption(DHO_DHCP_AGENT_OPTIONS),
386 prefix, suffix);
388 pkt4->getOption(DHO_DHCP_AGENT_OPTIONS),
390 prefix, suffix);
392 pkt4->getOption(DHO_DHCP_AGENT_OPTIONS),
394 prefix, suffix);
395 } else {
396 RunScriptImpl::extractString(vars, "", prefix + "_TYPE", suffix);
397 RunScriptImpl::extractString(vars, "", prefix + "_TXID", suffix);
398 RunScriptImpl::extractString(vars, "", prefix + "_LOCAL_ADDR", suffix);
399 RunScriptImpl::extractString(vars, "", prefix + "_LOCAL_PORT", suffix);
400 RunScriptImpl::extractString(vars, "", prefix + "_REMOTE_ADDR", suffix);
401 RunScriptImpl::extractString(vars, "", prefix + "_REMOTE_PORT", suffix);
402 RunScriptImpl::extractString(vars, "", prefix + "_IFACE_INDEX", suffix);
403 RunScriptImpl::extractString(vars, "", prefix + "_IFACE_NAME", suffix);
404 RunScriptImpl::extractString(vars, "", prefix + "_HOPS", suffix);
405 RunScriptImpl::extractString(vars, "", prefix + "_SECS", suffix);
406 RunScriptImpl::extractString(vars, "", prefix + "_FLAGS", suffix);
407 RunScriptImpl::extractString(vars, "", prefix + "_CIADDR", suffix);
408 RunScriptImpl::extractString(vars, "", prefix + "_SIADDR", suffix);
409 RunScriptImpl::extractString(vars, "", prefix + "_YIADDR", suffix);
410 RunScriptImpl::extractString(vars, "", prefix + "_GIADDR", suffix);
411 RunScriptImpl::extractString(vars, "", prefix + "_RELAYED", suffix);
413 prefix + "_HWADDR", suffix);
415 prefix + "_LOCAL_HWADDR", suffix);
417 prefix + "_REMOTE_HWADDR", suffix);
418 }
419}
420
421void
423 const Pkt6Ptr& pkt6,
424 const string& prefix,
425 const string& suffix) {
426 if (pkt6) {
427 RunScriptImpl::extractString(vars, pkt6->getName(pkt6->getType()),
428 prefix + "_TYPE", suffix);
429 RunScriptImpl::extractInteger(vars, pkt6->getTransid(),
430 prefix + "_TXID", suffix);
431 RunScriptImpl::extractString(vars, pkt6->getLocalAddr().toText(),
432 prefix + "_LOCAL_ADDR", suffix);
433 RunScriptImpl::extractInteger(vars, pkt6->getLocalPort(),
434 prefix + "_LOCAL_PORT", suffix);
435 RunScriptImpl::extractString(vars, pkt6->getRemoteAddr().toText(),
436 prefix + "_REMOTE_ADDR", suffix);
437 RunScriptImpl::extractInteger(vars, pkt6->getRemotePort(),
438 prefix + "_REMOTE_PORT", suffix);
439 RunScriptImpl::extractInteger(vars, pkt6->getIndex(),
440 prefix + "_IFACE_INDEX", suffix);
441 RunScriptImpl::extractString(vars, pkt6->getIface(),
442 prefix + "_IFACE_NAME", suffix);
443 RunScriptImpl::extractHWAddr(vars, pkt6->getRemoteHWAddr(),
444 prefix + "_REMOTE_HWADDR", suffix);
445 string proto_data = (pkt6->getProto() == Pkt6::UDP ? "UDP" : "TCP");
446 RunScriptImpl::extractString(vars, proto_data,
447 prefix + "_PROTO", suffix);
448 RunScriptImpl::extractDUID(vars, pkt6->getClientId(),
449 prefix + "_CLIENT_ID", suffix);
451 pkt6->getAnyRelayOption(D6O_INTERFACE_ID, Pkt6::RELAY_SEARCH_FROM_CLIENT),
452 prefix, suffix);
454 pkt6->getAnyRelayOption(D6O_REMOTE_ID, Pkt6::RELAY_SEARCH_FROM_CLIENT),
455 prefix, suffix);
457 pkt6->getAnyRelayOption(D6O_SUBSCRIBER_ID, Pkt6::RELAY_SEARCH_FROM_CLIENT),
458 prefix, suffix);
459 } else {
460 RunScriptImpl::extractString(vars, "", prefix + "_TYPE", suffix);
461 RunScriptImpl::extractString(vars, "", prefix + "_TXID", suffix);
462 RunScriptImpl::extractString(vars, "", prefix + "_LOCAL_ADDR", suffix);
463 RunScriptImpl::extractString(vars, "", prefix + "_LOCAL_PORT", suffix);
464 RunScriptImpl::extractString(vars, "", prefix + "_REMOTE_ADDR", suffix);
465 RunScriptImpl::extractString(vars, "", prefix + "_REMOTE_PORT", suffix);
466 RunScriptImpl::extractString(vars, "", prefix + "_IFACE_INDEX", suffix);
467 RunScriptImpl::extractString(vars, "", prefix + "_IFACE_NAME", suffix);
469 prefix + "_REMOTE_HWADDR", suffix);
470 RunScriptImpl::extractString(vars, "", prefix + "_PROTO", suffix);
472 prefix + "_CLIENT_ID", suffix);
473 }
474}
475
476} // namespace run_script
477} // namespace isc
@ boolean
Definition data.h:142
@ string
Definition data.h:144
This is a base class for exceptions thrown from the DNS library module.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
A generic exception that is thrown if a parameter given to a method or function is considered invalid...
A generic exception that is thrown when an object can not be found.
@ RELAY_SEARCH_FROM_CLIENT
Definition pkt6.h:75
isc::data::ConstElementPtr getParameter(const std::string &name)
Returns configuration parameter for the library.
static void extractBoolean(isc::asiolink::ProcessEnvVars &vars, const bool value, const std::string &prefix="", const std::string &suffix="")
Extract boolean data and append to environment.
Definition run_script.cc:55
static void extractInteger(isc::asiolink::ProcessEnvVars &vars, const uint64_t value, const std::string &prefix="", const std::string &suffix="")
Extract integer data and append to environment.
Definition run_script.cc:70
void configure(isc::hooks::LibraryHandle &handle)
This function parses and applies configuration parameters.
Definition run_script.cc:25
static void extractLease4(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::Lease4Ptr &lease4, const std::string &prefix="", const std::string &suffix="")
Extract Lease4 data and append to environment.
static void extractString(isc::asiolink::ProcessEnvVars &vars, const std::string &value, const std::string &prefix="", const std::string &suffix="")
Extract string data and append to environment.
Definition run_script.cc:79
static void extractSubnet4(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::ConstSubnet4Ptr subnet4, const std::string &prefix="", const std::string &suffix="")
Extract Subnet4 data and append to environment.
void setSync(const bool sync)
Set the synchronous call mode for the target script.
Definition run_script.h:252
static void extractDUID(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::DuidPtr duid, const std::string &prefix="", const std::string &suffix="")
Extract DUID data and append to environment.
static void extractSubnet6(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::ConstSubnet6Ptr subnet6, const std::string &prefix="", const std::string &suffix="")
Extract Subnet6 data and append to environment.
static void extractHWAddr(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::HWAddrPtr &hwaddr, const std::string &prefix="", const std::string &suffix="")
Extract HWAddr data and append to environment.
Definition run_script.cc:88
void setName(const std::string &name)
Set name of the target script.
Definition run_script.h:237
static void extractOptionIA(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::Option6IAPtr option6IA, const std::string &prefix="", const std::string &suffix="")
Extract Option6IA data and append to environment.
void runScript(const isc::asiolink::ProcessArgs &args, const isc::asiolink::ProcessEnvVars &vars)
Run Script with specified arguments and environment parameters.
Definition run_script.cc:49
static void extractLeases6(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::Lease6CollectionPtr &leases6, const std::string &prefix="", const std::string &suffix="")
Extract Lease6Collection data and append to environment.
static void extractLease6(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::Lease6Ptr &lease6, const std::string &prefix="", const std::string &suffix="")
Extract Lease6 data and append to environment.
static void extractClientId(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::ClientIdPtr client_id, const std::string &prefix="", const std::string &suffix="")
Extract ClientId data and append to environment.
static void extractPkt6(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::Pkt6Ptr &pkt6, const std::string &prefix="", const std::string &suffix="")
Extract Pkt6 data and append to environment.
static void extractSubOption(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::OptionPtr option, uint16_t code, const std::string &prefix="", const std::string &suffix="")
Extract Option SubOption data and append to environment.
static void extractPkt4(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::Pkt4Ptr &pkt4, const std::string &prefix="", const std::string &suffix="")
Extract Pkt4 data and append to environment.
static void extractOption(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::OptionPtr option, const std::string &prefix="", const std::string &suffix="")
Extract Option data and append to environment.
static void extractLeases4(isc::asiolink::ProcessEnvVars &vars, const isc::dhcp::Lease4CollectionPtr &leases4, const std::string &prefix="", const std::string &suffix="")
Extract Lease4Collection data and append to environment.
@ D6O_INTERFACE_ID
Definition dhcp6.h:38
@ D6O_REMOTE_ID
Definition dhcp6.h:57
@ D6O_SUBSCRIBER_ID
Definition dhcp6.h:58
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
boost::shared_ptr< const Element > ConstElementPtr
Definition data.h:29
boost::shared_ptr< Lease4Collection > Lease4CollectionPtr
A shared pointer to the collection of IPv4 leases.
Definition lease.h:523
@ DHO_DHCP_AGENT_OPTIONS
Definition dhcp4.h:151
boost::shared_ptr< const Subnet6 > ConstSubnet6Ptr
A const pointer to a Subnet6 object.
Definition subnet.h:623
boost::shared_ptr< const Subnet4 > ConstSubnet4Ptr
A const pointer to a Subnet4 object.
Definition subnet.h:458
boost::shared_ptr< Pkt4 > Pkt4Ptr
A pointer to Pkt4 object.
Definition pkt4.h:556
boost::shared_ptr< DUID > DuidPtr
Definition duid.h:136
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
Definition lease.h:528
boost::shared_ptr< Option6IA > Option6IAPtr
A pointer to the Option6IA object.
Definition option6_ia.h:20
boost::shared_ptr< HWAddr > HWAddrPtr
Shared pointer to a hardware address structure.
Definition hwaddr.h:154
boost::shared_ptr< ClientId > ClientIdPtr
Shared pointer to a Client ID.
Definition duid.h:216
boost::shared_ptr< Lease6Collection > Lease6CollectionPtr
A shared pointer to the collection of IPv6 leases.
Definition lease.h:696
boost::shared_ptr< Pkt6 > Pkt6Ptr
A pointer to Pkt6 packet.
Definition pkt6.h:31
@ RAI_OPTION_AGENT_CIRCUIT_ID
Definition dhcp4.h:265
@ RAI_OPTION_REMOTE_ID
Definition dhcp4.h:266
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Definition lease.h:315
boost::shared_ptr< Option > OptionPtr
Definition option.h:37
Defines the logger used by the top-level component of kea-lfc.
static std::string statesToText(const uint32_t state)
Returns name of the lease states specific to DHCPv4.
Definition lease.cc:344
static std::string statesToText(const uint32_t state)
Returns name of the lease states specific to DHCPv6.
Definition lease.cc:516
static std::string typeToText(Type type)
returns text representation of a lease type
Definition lease.cc:56