7#ifndef OPTION_DEFINITION_H
8#define OPTION_DEFINITION_H
16#include <boost/multi_index/hashed_index.hpp>
17#include <boost/multi_index/mem_fun.hpp>
18#include <boost/multi_index/sequenced_index.hpp>
19#include <boost/multi_index_container.hpp>
20#include <boost/shared_ptr.hpp>
51class OptionDefinition;
154 const std::string& type,
155 const bool array_type =
false);
167 const bool array_type =
false);
185 const std::string& type,
186 const char* encapsulated_space);
205 const char* encapsulated_space);
270 return (encapsulated_space_);
276 std::string
getName()
const {
return (name_); }
282 return (record_fields_);
325 return (option_space_name_);
334 option_space_name_ = option_space_name;
504 const std::vector<std::string>& values)
const;
615 const std::string& encapsulated_space,
619 option->setEncapsulatedSpace(encapsulated_space);
620 option->unpack(begin, end);
692 return (type == type_);
713 bool convertToBool(
const std::string& value_str)
const;
728 T lexicalCastWithRangeCheck(
const std::string& value_str)
const;
758 std::string encapsulated_space_;
764 std::string option_space_name_;
782typedef boost::multi_index_container<
786 boost::multi_index::indexed_by<
789 boost::multi_index::sequenced<>,
791 boost::multi_index::hashed_non_unique<
798 boost::multi_index::const_mem_fun<
805 boost::multi_index::hashed_non_unique<
809 boost::multi_index::const_mem_fun<
833typedef std::pair<OptionDefContainerTypeIndex::const_iterator,
842typedef std::pair<OptionDefContainerNameIndex::const_iterator,
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.
This class represents configuration element which is associated with the modification timestamp.
Exception to be thrown when the particular option definition duplicates existing option definition.
DuplicateOptionDefinition(const char *file, size_t line, const char *what)
Exception to be thrown when invalid option value has been specified for a particular option definitio...
InvalidOptionValue(const char *file, size_t line, const char *what)
Base class representing a DHCP option definition.
bool haveVendorClass6Format() const
Check if the option has format of DHCPv6 Vendor Class option.
uint16_t getCode() const
Return option code.
void setOptionSpaceName(const std::string &option_space_name)
Sets option space name for option definition.
bool haveIA6Format() const
Check if specified format is IA_NA option format.
bool haveServiceScopeFormat() const
Check if option has format of the SLP Service Scope Option.
bool operator==(const OptionDefinition &other) const
Equality operator.
bool haveVendorClass4Format() const
Check if the option has format of DHCPv4 V-I Vendor Class option.
OptionPtr optionFactory(Option::Universe u, uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end) const
Option factory.
bool haveOpaqueDataTuplesFormat() const
Check if the option has format of OpaqueDataTuples type options.
static OptionPtr factoryEmpty(Option::Universe u, uint16_t type)
Empty option factory.
static OptionPtr factoryInteger(Option::Universe u, uint16_t type, const std::string &encapsulated_space, OptionBufferConstIter begin, OptionBufferConstIter end)
Factory function to create option with integer value.
static OptionPtr factoryIAPrefix6(uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
Factory for IAPREFIX-type of option.
static OptionPtr factoryIntegerArray(Option::Universe u, uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
Factory function to create option with array of integer values.
bool operator!=(const OptionDefinition &other) const
Inequality operator.
OptionDataType getType() const
Return option data type.
bool haveFqdn4Format() const
Check if option has format of the DHCPv4 Client FQDN Option.
static OptionPtr factoryAddrList6(uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
Factory to create option with address list.
static OptionPtr factoryAddrList4(uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
Factory to create option with address list.
void setContext(const data::ConstElementPtr &ctx)
Sets user context.
std::string getOptionSpaceName() const
Returns option space name.
bool haveVendor6Format() const
Check if option has a format of the Vendor-Specific Information Option.
bool haveIAAddr6Format() const
Check if specified format is IAADDR option format.
std::vector< OptionDataType >::const_iterator RecordFieldsConstIter
Const iterator for record data fields.
static OptionPtr factoryIAAddr6(uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
Factory for IAADDR-type of option.
data::ConstElementPtr getContext() const
Returns const pointer to the user context.
void addRecordField(const std::string &data_type_name)
Adds data field to the record.
bool equals(const OptionDefinition &other) const
Check if option definition is equal to other.
void contextToElement(data::ElementPtr map) const
Merge unparse a user_context object.
std::string getName() const
Return option name.
const RecordFieldsCollection & getRecordFields() const
Return list of record fields.
bool haveVendor4Format() const
Check if the option has format of Vendor-Identifying Vendor Specific Options.
bool haveCompressedFqdnListFormat() const
Check if the option has format of CompressedFqdnList options.
void validate() const
Check if the option definition is valid.
std::vector< OptionDataType > RecordFieldsCollection
List of fields within the record.
static OptionPtr factoryIA6(uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
Factory for IA-type of option.
std::string getEncapsulatedSpace() const
Return name of the encapsulated option space.
bool haveIAPrefix6Format() const
Check if specified format is IAPREFIX option format.
bool haveClientFqdnFormat() const
Check if specified format is OPTION_CLIENT_FQDN option format.
bool haveStatusCodeFormat() const
Check if the option has format of DHCPv6 Status Code option.
static OptionPtr factoryOpaqueDataTuples(Option::Universe u, uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
Factory to create option with tuple list.
bool getArrayType() const
Return array type indicator.
static OptionPtr factoryGeneric(Option::Universe u, uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
Factory to create generic option.
Forward declaration to OptionIntArray.
Forward declaration to OptionInt.
Simple container for option spaces holding various items.
Universe
defines option universe DHCPv4 or DHCPv6
boost::shared_ptr< const Element > ConstElementPtr
boost::shared_ptr< Element > ElementPtr
OptionSpaceContainer< OptionDefContainer, OptionDefinitionPtr, std::string > OptionDefSpaceContainer
OptionDataType
Data types of DHCP option fields.
OptionBuffer::const_iterator OptionBufferConstIter
const_iterator for walking over OptionBuffer
std::map< uint32_t, OptionDefContainerPtr > VendorOptionDefContainers
Container that holds various vendor option containers.
boost::shared_ptr< OptionDefinition > OptionDefinitionPtr
Pointer to option definition object.
std::pair< OptionDefContainerNameIndex::const_iterator, OptionDefContainerNameIndex::const_iterator > OptionDefContainerNameRange
Pair of iterators to represent the range of options definitions having the same option name.
boost::multi_index_container< OptionDefinitionPtr, boost::multi_index::indexed_by< boost::multi_index::sequenced<>, boost::multi_index::hashed_non_unique< boost::multi_index::const_mem_fun< OptionDefinition, uint16_t, &OptionDefinition::getCode > >, boost::multi_index::hashed_non_unique< boost::multi_index::const_mem_fun< OptionDefinition, std::string, &OptionDefinition::getName > > > > OptionDefContainer
Multi index container for DHCP option definitions.
std::map< std::string, OptionDefContainerPtr > OptionDefContainers
Container that holds option definitions for various option spaces.
OptionDefContainer::nth_index< 2 >::type OptionDefContainerNameIndex
Type of the index #2 - option name.
std::vector< uint8_t > OptionBuffer
buffer types used in DHCP code.
std::pair< OptionDefContainerTypeIndex::const_iterator, OptionDefContainerTypeIndex::const_iterator > OptionDefContainerTypeRange
Pair of iterators to represent the range of options definitions having the same option type value.
OptionDefContainer::nth_index< 1 >::type OptionDefContainerTypeIndex
Type of the index #1 - option type.
boost::shared_ptr< Option > OptionPtr
boost::shared_ptr< OptionDefContainer > OptionDefContainerPtr
Pointer to an option definition container.
Defines the logger used by the top-level component of kea-dhcp-ddns.
Base class for user context.
data::ConstElementPtr getContext() const
Returns const pointer to the user context.
void contextToElement(data::ElementPtr map) const
Merge unparse a user_context object.
void setContext(const data::ConstElementPtr &ctx)
Sets user context.