Kea  1.9.9-git
libdhcp++.h
Go to the documentation of this file.
1 // Copyright (C) 2011-2021 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 #ifndef LIBDHCP_H
8 #define LIBDHCP_H
9 
10 #include <dhcp/option_definition.h>
12 #include <dhcp/option_space.h>
13 #include <dhcp/pkt4.h>
14 #include <dhcp/pkt6.h>
15 #include <util/buffer.h>
16 #include <util/staged_value.h>
17 
18 #include <iostream>
19 #include <stdint.h>
20 #include <string>
21 
22 namespace isc {
23 namespace dhcp {
24 
25 class LibDHCP {
26 
27 public:
28 
30  typedef std::map<unsigned short, Option::Factory*> FactoryMap;
31 
40  static const OptionDefContainerPtr getOptionDefs(const std::string& space);
41 
50  static OptionDefinitionPtr getOptionDef(const std::string& space,
51  const uint16_t code);
52 
60  static OptionDefinitionPtr getOptionDef(const std::string& space,
61  const std::string& name);
62 
71  const uint32_t vendor_id,
72  const uint16_t code);
73 
84  const uint32_t vendor_id,
85  const std::string& name);
86 
87 
95  static OptionDefinitionPtr getRuntimeOptionDef(const std::string& space,
96  const uint16_t code);
97 
105  static OptionDefinitionPtr getRuntimeOptionDef(const std::string& space,
106  const std::string& name);
107 
114  static OptionDefContainerPtr getRuntimeOptionDefs(const std::string& space);
115 
122  static OptionDefinitionPtr getLastResortOptionDef(const std::string& space,
123  const uint16_t code);
124 
131  static OptionDefinitionPtr getLastResortOptionDef(const std::string& space,
132  const std::string& name);
133 
140  static OptionDefContainerPtr getLastResortOptionDefs(const std::string& space);
141 
150  static bool shouldDeferOptionUnpack(const std::string& space,
151  const uint16_t code);
152 
168  uint16_t type,
169  const OptionBuffer& buf);
170 
193  static void packOptions4(isc::util::OutputBuffer& buf,
194  const isc::dhcp::OptionCollection& options,
195  bool top = false);
196 
211  static void packOptions6(isc::util::OutputBuffer& buf,
212  const isc::dhcp::OptionCollection& options);
213 
243  static size_t unpackOptions6(const OptionBuffer& buf,
244  const std::string& option_space,
246  size_t* relay_msg_offset = 0,
247  size_t* relay_msg_len = 0);
248 
268  static size_t unpackOptions4(const OptionBuffer& buf,
269  const std::string& option_space,
271  std::list<uint16_t>& deferred,
272  bool flexible_pad_end = false);
273 
283  uint16_t type,
284  Option::Factory * factory);
285 
294  const uint32_t vendor_id);
295 
311  static size_t unpackVendorOptions6(const uint32_t vendor_id,
312  const OptionBuffer& buf,
313  isc::dhcp::OptionCollection& options);
314 
329  static size_t unpackVendorOptions4(const uint32_t vendor_id,
330  const OptionBuffer& buf,
331  isc::dhcp::OptionCollection& options);
332 
333 
343  static void setRuntimeOptionDefs(const OptionDefSpaceContainer& defs);
344 
346  static void clearRuntimeOptionDefs();
347 
349  static void revertRuntimeOptionDefs();
350 
352  static void commitRuntimeOptionDefs();
353 
367  static uint32_t optionSpaceToVendorId(const std::string& option_space);
368 
369 private:
370 
378  static bool initOptionDefs();
379 
381  static bool initialized_;
382 
384  static FactoryMap v4factories_;
385 
387  static FactoryMap v6factories_;
388 
390  static OptionDefContainers option_defs_;
391 
393  static util::StagedValue<OptionDefSpaceContainer> runtime_option_defs_;
394 };
395 
396 }
397 }
398 
399 #endif // LIBDHCP_H
static OptionDefContainerPtr getRuntimeOptionDefs(const std::string &space)
Returns runtime (non-standard) option definitions for specified option space name.
Definition: libdhcp++.cc:209
static OptionDefinitionPtr getRuntimeOptionDef(const std::string &space, const uint16_t code)
Returns runtime (non-standard) option definition by space and option code.
Definition: libdhcp++.cc:185
static void clearRuntimeOptionDefs()
Removes runtime option definitions.
Definition: libdhcp++.cc:230
static void packOptions6(isc::util::OutputBuffer &buf, const isc::dhcp::OptionCollection &options)
Stores DHCPv6 options in a buffer.
Definition: libdhcp++.cc:862
static size_t unpackVendorOptions4(const uint32_t vendor_id, const OptionBuffer &buf, isc::dhcp::OptionCollection &options)
Parses provided buffer as DHCPv4 vendor options and creates Option objects.
Definition: libdhcp++.cc:708
boost::shared_ptr< Option > OptionPtr
Definition: option.h:36
Universe
defines option universe DHCPv4 or DHCPv6
Definition: option.h:82
static void setRuntimeOptionDefs(const OptionDefSpaceContainer &defs)
Copies option definitions created at runtime.
Definition: libdhcp++.cc:214
static void commitRuntimeOptionDefs()
Commits runtime option definitions.
Definition: libdhcp++.cc:240
std::vector< uint8_t > OptionBuffer
buffer types used in DHCP code.
Definition: option.h:24
Class of option definition space container.
static void packOptions4(isc::util::OutputBuffer &buf, const isc::dhcp::OptionCollection &options, bool top=false)
Stores DHCPv4 options in a buffer.
Definition: libdhcp++.cc:814
static isc::dhcp::OptionPtr optionFactory(isc::dhcp::Option::Universe u, uint16_t type, const OptionBuffer &buf)
Factory function to create instance of option.
Definition: libdhcp++.cc:285
static size_t unpackOptions6(const OptionBuffer &buf, const std::string &option_space, isc::dhcp::OptionCollection &options, size_t *relay_msg_offset=0, size_t *relay_msg_len=0)
Parses provided buffer as DHCPv6 options and creates Option objects.
Definition: libdhcp++.cc:310
std::map< unsigned short, Option::Factory * > FactoryMap
Map of factory functions.
Definition: libdhcp++.h:30
static const OptionDefContainerPtr getVendorOptionDefs(Option::Universe u, const uint32_t vendor_id)
Returns option definitions for given universe and vendor.
Definition: libdhcp++.cc:105
boost::shared_ptr< OptionDefContainer > OptionDefContainerPtr
Pointer to an option definition container.
std::multimap< unsigned int, OptionPtr > OptionCollection
A collection of DHCP (v4 or v6) options.
Definition: option.h:40
static OptionDefinitionPtr getOptionDef(const std::string &space, const uint16_t code)
Return the first option definition matching a particular option code.
Definition: libdhcp++.cc:122
The OutputBuffer class is a buffer abstraction for manipulating mutable data.
Definition: buffer.h:294
static void revertRuntimeOptionDefs()
Reverts uncommitted changes to runtime option definitions.
Definition: libdhcp++.cc:235
std::map< std::string, OptionDefContainerPtr > OptionDefContainers
Container that holds option definitions for various option spaces.
Defines the logger used by the top-level component of kea-dhcp-ddns.
static size_t unpackVendorOptions6(const uint32_t vendor_id, const OptionBuffer &buf, isc::dhcp::OptionCollection &options)
Parses provided buffer as DHCPv6 vendor options and creates Option objects.
Definition: libdhcp++.cc:611
static OptionDefinitionPtr getLastResortOptionDef(const std::string &space, const uint16_t code)
Returns last resort option definition by space and option code.
Definition: libdhcp++.cc:245
boost::shared_ptr< OptionDefinition > OptionDefinitionPtr
Pointer to option definition object.
static uint32_t optionSpaceToVendorId(const std::string &option_space)
Converts option space name to vendor id.
Definition: libdhcp++.cc:925
static void OptionFactoryRegister(Option::Universe u, uint16_t type, Option::Factory *factory)
Registers factory method that produces options of specific option types.
Definition: libdhcp++.cc:871
static bool shouldDeferOptionUnpack(const std::string &space, const uint16_t code)
Checks if an option unpacking has to be deferred.
Definition: libdhcp++.cc:278
This class implements set/commit mechanism for a single object.
Definition: staged_value.h:32
static size_t unpackOptions4(const OptionBuffer &buf, const std::string &option_space, isc::dhcp::OptionCollection &options, std::list< uint16_t > &deferred, bool flexible_pad_end=false)
Parses provided buffer as DHCPv4 options and creates Option objects.
Definition: libdhcp++.cc:459
OptionPtr Factory(Option::Universe u, uint16_t type, const OptionBuffer &buf)
a factory function prototype
Definition: option.h:95
static OptionDefinitionPtr getVendorOptionDef(const Option::Universe u, const uint32_t vendor_id, const uint16_t code)
Returns vendor option definition for a given vendor-id and code.
Definition: libdhcp++.cc:164
static const OptionDefContainerPtr getOptionDefs(const std::string &space)
Returns collection of option definitions.
Definition: libdhcp++.cc:95
static OptionDefContainerPtr getLastResortOptionDefs(const std::string &space)
Returns last resort option definitions for specified option space name.
Definition: libdhcp++.cc:269