Kea  1.5.0
libdhcp++.h
Go to the documentation of this file.
1 // Copyright (C) 2011-2017 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/pkt4.h>
13 #include <dhcp/pkt6.h>
14 #include <util/buffer.h>
15 #include <util/staged_value.h>
16 
17 #include <iostream>
18 #include <stdint.h>
19 #include <string>
20 
21 namespace isc {
22 namespace dhcp {
23 
24 class LibDHCP {
25 
26 public:
27 
29  typedef std::map<unsigned short, Option::Factory*> FactoryMap;
30 
39  static const OptionDefContainerPtr& getOptionDefs(const std::string& space);
40 
49  static OptionDefinitionPtr getOptionDef(const std::string& space,
50  const uint16_t code);
51 
59  static OptionDefinitionPtr getOptionDef(const std::string& space,
60  const std::string& name);
61 
70  const uint32_t vendor_id,
71  const uint16_t code);
72 
83  const uint32_t vendor_id,
84  const std::string& name);
85 
86 
94  static OptionDefinitionPtr getRuntimeOptionDef(const std::string& space,
95  const uint16_t code);
96 
104  static OptionDefinitionPtr getRuntimeOptionDef(const std::string& space,
105  const std::string& name);
106 
113  static OptionDefContainerPtr
114  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
141  getLastResortOptionDefs(const std::string& space);
142 
151  static bool shouldDeferOptionUnpack(const std::string& space,
152  const uint16_t code);
153 
169  uint16_t type,
170  const OptionBuffer& buf);
171 
186  static void packOptions4(isc::util::OutputBuffer& buf,
187  const isc::dhcp::OptionCollection& options);
188 
203  static void packOptions6(isc::util::OutputBuffer& buf,
204  const isc::dhcp::OptionCollection& options);
205 
235  static size_t unpackOptions6(const OptionBuffer& buf,
236  const std::string& option_space,
238  size_t* relay_msg_offset = 0,
239  size_t* relay_msg_len = 0);
240 
258  static size_t unpackOptions4(const OptionBuffer& buf,
259  const std::string& option_space,
261  std::list<uint16_t>& deferred);
262 
272  uint16_t type,
273  Option::Factory * factory);
274 
280  static const OptionDefContainerPtr&
281  getVendorOption4Defs(const uint32_t vendor_id);
282 
288  static const OptionDefContainerPtr&
289  getVendorOption6Defs(const uint32_t vendor_id);
290 
306  static size_t unpackVendorOptions6(const uint32_t vendor_id,
307  const OptionBuffer& buf,
308  isc::dhcp::OptionCollection& options);
309 
324  static size_t unpackVendorOptions4(const uint32_t vendor_id,
325  const OptionBuffer& buf,
326  isc::dhcp::OptionCollection& options);
327 
328 
338  static void setRuntimeOptionDefs(const OptionDefSpaceContainer& defs);
339 
341  static void clearRuntimeOptionDefs();
342 
344  static void revertRuntimeOptionDefs();
345 
347  static void commitRuntimeOptionDefs();
348 
362  static uint32_t optionSpaceToVendorId(const std::string& option_space);
363 
364 private:
365 
374  static void initStdOptionDefs4();
375 
383  static void initStdOptionDefs6();
384 
386  static void initLastResortOptionDefs();
387 
389  static void initVendorOptsDocsis4();
390 
392  static void initVendorOptsDocsis6();
393 
395  static void initVendorOptsIsc6();
396 
398  static FactoryMap v4factories_;
399 
401  static FactoryMap v6factories_;
402 
404  static OptionDefContainerPtr v4option_defs_;
405 
407  static OptionDefContainerPtr v6option_defs_;
408 
410  static OptionDefContainers option_defs_;
411 
413  static VendorOptionDefContainers vendor4_defs_;
414 
416  static VendorOptionDefContainers vendor6_defs_;
417 
419  static OptionDefContainerPtr lastresort_defs_;
420 
422  static util::StagedValue<OptionDefSpaceContainer> runtime_option_defs_;
423 };
424 
425 }
426 }
427 
428 #endif // LIBDHCP_H
static OptionDefContainerPtr getRuntimeOptionDefs(const std::string &space)
Returns runtime (non-standard) option definitions for specified option space name.
Definition: libdhcp++.cc:229
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:205
Simple container for option spaces holding various items.
static void clearRuntimeOptionDefs()
Removes runtime option definitions.
Definition: libdhcp++.cc:250
static void packOptions6(isc::util::OutputBuffer &buf, const isc::dhcp::OptionCollection &options)
Stores DHCPv6 options in a buffer.
Definition: libdhcp++.cc:822
static void packOptions4(isc::util::OutputBuffer &buf, const isc::dhcp::OptionCollection &options)
Stores DHCPv4 options in a buffer.
Definition: libdhcp++.cc:789
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:684
boost::shared_ptr< Option > OptionPtr
Definition: option.h:37
Universe
defines option universe DHCPv4 or DHCPv6
Definition: option.h:67
static void setRuntimeOptionDefs(const OptionDefSpaceContainer &defs)
Copies option definitions created at runtime.
Definition: libdhcp++.cc:234
static void commitRuntimeOptionDefs()
Commits runtime option definitions.
Definition: libdhcp++.cc:260
std::map< uint32_t, OptionDefContainerPtr > VendorOptionDefContainers
Container that holds various vendor option containers.
std::vector< uint8_t > OptionBuffer
buffer types used in DHCP code.
Definition: option.h:25
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:304
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:328
static const OptionDefContainerPtr & getVendorOption4Defs(const uint32_t vendor_id)
Returns v4 option definitions for a given vendor.
Definition: libdhcp++.cc:107
std::map< unsigned short, Option::Factory * > FactoryMap
Map of factory functions.
Definition: libdhcp++.h:29
static const OptionDefContainerPtr & getVendorOption6Defs(const uint32_t vendor_id)
Returns v6 option definitions for a given vendor.
Definition: libdhcp++.cc:123
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:41
static OptionDefinitionPtr getOptionDef(const std::string &space, const uint16_t code)
Return the first option definition matching a particular option code.
Definition: libdhcp++.cc:144
The OutputBuffer class is a buffer abstraction for manipulating mutable data.
Definition: buffer.h:294
static const OptionDefContainerPtr & getOptionDefs(const std::string &space)
Returns collection of option definitions.
Definition: libdhcp++.cc:81
static void revertRuntimeOptionDefs()
Reverts uncommitted changes to runtime option definitions.
Definition: libdhcp++.cc:255
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:589
static OptionDefinitionPtr getLastResortOptionDef(const std::string &space, const uint16_t code)
Returns last resort option definition by space and option code.
Definition: libdhcp++.cc:265
boost::shared_ptr< OptionDefinition > OptionDefinitionPtr
Pointer to option definition object.
static size_t unpackOptions4(const OptionBuffer &buf, const std::string &option_space, isc::dhcp::OptionCollection &options, std::list< uint16_t > &deferred)
Parses provided buffer as DHCPv4 options and creates Option objects.
Definition: libdhcp++.cc:468
static uint32_t optionSpaceToVendorId(const std::string &option_space)
Converts option space name to vendor id.
Definition: libdhcp++.cc:916
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:830
static bool shouldDeferOptionUnpack(const std::string &space, const uint16_t code)
Checks if an option unpacking has to be deferred.
Definition: libdhcp++.cc:297
This class implements set/commit mechanism for a single object.
Definition: staged_value.h:32
OptionPtr Factory(Option::Universe u, uint16_t type, const OptionBuffer &buf)
a factory function prototype
Definition: option.h:80
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:184
static OptionDefContainerPtr getLastResortOptionDefs(const std::string &space)
Returns last resort option definitions for specified option space name.
Definition: libdhcp++.cc:289