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
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
21namespace isc {
22namespace dhcp {
23
24class LibDHCP {
25
26public:
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
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
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,
309
324 static size_t unpackVendorOptions4(const uint32_t vendor_id,
325 const OptionBuffer& buf,
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
364private:
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 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 const OptionDefContainerPtr & getOptionDefs(const std::string &space)
Returns collection of option definitions.
Definition: libdhcp++.cc:81
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 bool shouldDeferOptionUnpack(const std::string &space, const uint16_t code)
Checks if an option unpacking has to be deferred.
Definition: libdhcp++.cc:297
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 void setRuntimeOptionDefs(const OptionDefSpaceContainer &defs)
Copies option definitions created at runtime.
Definition: libdhcp++.cc:234
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
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
std::map< unsigned short, Option::Factory * > FactoryMap
Map of factory functions.
Definition: libdhcp++.h:29
static OptionDefContainerPtr getLastResortOptionDefs(const std::string &space)
Returns last resort option definitions for specified option space name.
Definition: libdhcp++.cc:289
static void packOptions4(isc::util::OutputBuffer &buf, const isc::dhcp::OptionCollection &options)
Stores DHCPv4 options in a buffer.
Definition: libdhcp++.cc:789
static OptionDefContainerPtr getRuntimeOptionDefs(const std::string &space)
Returns runtime (non-standard) option definitions for specified option space name.
Definition: libdhcp++.cc:229
static void commitRuntimeOptionDefs()
Commits runtime option definitions.
Definition: libdhcp++.cc:260
static const OptionDefContainerPtr & getVendorOption4Defs(const uint32_t vendor_id)
Returns v4 option definitions for a given vendor.
Definition: libdhcp++.cc:107
static void clearRuntimeOptionDefs()
Removes runtime option definitions.
Definition: libdhcp++.cc:250
static void revertRuntimeOptionDefs()
Reverts uncommitted changes to runtime option definitions.
Definition: libdhcp++.cc:255
static const OptionDefContainerPtr & getVendorOption6Defs(const uint32_t vendor_id)
Returns v6 option definitions for a given vendor.
Definition: libdhcp++.cc:123
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 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
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 void packOptions6(isc::util::OutputBuffer &buf, const isc::dhcp::OptionCollection &options)
Stores DHCPv6 options in a buffer.
Definition: libdhcp++.cc:822
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
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
Universe
defines option universe DHCPv4 or DHCPv6
Definition: option.h:67
OptionPtr Factory(Option::Universe u, uint16_t type, const OptionBuffer &buf)
a factory function prototype
Definition: option.h:80
The OutputBuffer class is a buffer abstraction for manipulating mutable data.
Definition: buffer.h:294
This class implements set/commit mechanism for a single object.
Definition: staged_value.h:32
std::multimap< unsigned int, OptionPtr > OptionCollection
A collection of DHCP (v4 or v6) options.
Definition: option.h:41
std::map< uint32_t, OptionDefContainerPtr > VendorOptionDefContainers
Container that holds various vendor option containers.
boost::shared_ptr< OptionDefinition > OptionDefinitionPtr
Pointer to option definition object.
std::map< std::string, OptionDefContainerPtr > OptionDefContainers
Container that holds option definitions for various option spaces.
std::vector< uint8_t > OptionBuffer
buffer types used in DHCP code.
Definition: option.h:25
boost::shared_ptr< Option > OptionPtr
Definition: option.h:38
boost::shared_ptr< OptionDefContainer > OptionDefContainerPtr
Pointer to an option definition container.
Defines the logger used by the top-level component of kea-dhcp-ddns.