Kea  2.1.7-git
isc::dhcp::OptionDefinition Class Reference

Base class representing a DHCP option definition. More...

#include <option_definition.h>

+ Inheritance diagram for isc::dhcp::OptionDefinition:

Public Types

typedef std::vector< OptionDataTypeRecordFieldsCollection
 List of fields within the record. More...
 
typedef std::vector< OptionDataType >::const_iterator RecordFieldsConstIter
 Const iterator for record data fields. More...
 

Public Member Functions

 OptionDefinition (const std::string &name, const uint16_t code, const std::string &space, const std::string &type, const bool array_type=false)
 Constructor. More...
 
 OptionDefinition (const std::string &name, const uint16_t code, const std::string &space, const OptionDataType type, const bool array_type=false)
 Constructor. More...
 
 OptionDefinition (const std::string &name, const uint16_t code, const std::string &space, const std::string &type, const char *encapsulated_space)
 Constructor. More...
 
 OptionDefinition (const std::string &name, const uint16_t code, const std::string &space, const OptionDataType type, const char *encapsulated_space)
 Constructor. More...
 
void addRecordField (const std::string &data_type_name)
 Adds data field to the record. More...
 
void addRecordField (const OptionDataType data_type)
 Adds data field to the record. More...
 
void contextToElement (data::ElementPtr map) const
 Merge unparse a user_context object. More...
 
bool getArrayType () const
 Return array type indicator. More...
 
uint16_t getCode () const
 Return option code. More...
 
data::ConstElementPtr getContext () const
 Returns const pointer to the user context. More...
 
std::string getEncapsulatedSpace () const
 Return name of the encapsulated option space. More...
 
std::string getName () const
 Return option name. More...
 
std::string getOptionSpaceName () const
 Returns option space name. More...
 
const RecordFieldsCollectiongetRecordFields () const
 Return list of record fields. More...
 
OptionDataType getType () const
 Return option data type. More...
 
OptionPtr optionFactory (Option::Universe u, uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end) const
 Option factory. More...
 
OptionPtr optionFactory (Option::Universe u, uint16_t type, const OptionBuffer &buf=OptionBuffer()) const
 Option factory. More...
 
OptionPtr optionFactory (Option::Universe u, uint16_t type, const std::vector< std::string > &values) const
 Option factory. More...
 
void setContext (const data::ConstElementPtr &ctx)
 Sets user context. More...
 
void validate () const
 Check if the option definition is valid. More...
 
Comparison functions and operators.
bool equals (const OptionDefinition &other) const
 Check if option definition is equal to other. More...
 
bool operator== (const OptionDefinition &other) const
 Equality operator. More...
 
bool operator!= (const OptionDefinition &other) const
 Inequality operator. More...
 
- Public Member Functions inherited from isc::data::StampedElement
 StampedElement ()
 Constructor. More...
 
void delServerTag (const std::string &server_tag)
 Deletes server tag. More...
 
isc::data::ElementPtr getMetadata () const
 Returns an object representing metadata to be returned with objects from the configuration backend. More...
 
std::set< ServerTaggetServerTags () const
 Returns server tags. More...
 
bool hasAllServerTag () const
 Checks if the element has 'all' server tag. More...
 
bool hasServerTag (const ServerTag &server_tag) const
 Checks if the element has the given server tag. More...
 
void setServerTag (const std::string &server_tag)
 Adds new server tag. More...
 
- Public Member Functions inherited from isc::data::BaseStampedElement
 BaseStampedElement ()
 Constructor. More...
 
uint64_t getId () const
 Returns element's database identifier. More...
 
boost::posix_time::ptime getModificationTime () const
 Returns timestamp. More...
 
void setId (const uint64_t id)
 Sets element's database identifier. More...
 
void setModificationTime (const boost::posix_time::ptime &timestamp)
 Sets timestamp to the explicitly provided value. More...
 
void updateModificationTime ()
 Sets timestamp to the current time. More...
 

Static Public Member Functions

static OptionDefinitionPtr create (const std::string &name, const uint16_t code, const std::string &space, const std::string &type, const bool array_type=false)
 Factory function creating an instance of the OptionDefinition. More...
 
static OptionDefinitionPtr create (const std::string &name, const uint16_t code, const std::string &space, const OptionDataType type, const bool array_type=false)
 Factory function creating an instance of the OptionDefinition. More...
 
static OptionDefinitionPtr create (const std::string &name, const uint16_t code, const std::string &space, const std::string &type, const char *encapsulated_space)
 Factory function creating an instance of the OptionDefinition. More...
 
static OptionDefinitionPtr create (const std::string &name, const uint16_t code, const std::string &space, const OptionDataType type, const char *encapsulated_space)
 Factory function creating an instance of the OptionDefinition. More...
 
static OptionPtr factoryAddrList4 (uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
 Factory to create option with address list. More...
 
static OptionPtr factoryAddrList6 (uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
 Factory to create option with address list. More...
 
static OptionPtr factoryEmpty (Option::Universe u, uint16_t type)
 Empty option factory. More...
 
static OptionPtr factoryGeneric (Option::Universe u, uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
 Factory to create generic option. More...
 
static OptionPtr factoryIA6 (uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
 Factory for IA-type of option. More...
 
static OptionPtr factoryIAAddr6 (uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
 Factory for IAADDR-type of option. More...
 
static OptionPtr factoryIAPrefix6 (uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
 Factory for IAPREFIX-type of option. More...
 
template<typename T >
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. More...
 
template<typename T >
static OptionPtr factoryIntegerArray (Option::Universe u, uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
 Factory function to create option with array of integer values. More...
 
static OptionPtr factoryOpaqueDataTuples (Option::Universe u, uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end)
 Factory to create option with tuple list. More...
 

Additional Inherited Members

- Protected Attributes inherited from isc::data::BaseStampedElement
uint64_t id_
 Database identifier of the configuration element. More...
 
boost::posix_time::ptime timestamp_
 Holds timestamp value. More...
 

Detailed Description

Base class representing a DHCP option definition.

This is a base class representing a DHCP option definition, which describes the format of the option. In particular, it defines:

  • option name,
  • option code,
  • option space,
  • data fields order and their types,
  • sub options space that the particular option encapsulates.

The option type specifies the data type(s) which an option conveys. If this is a single value the option type points to the data type of the value. For example, DHCPv6 option 8 comprises a two-byte option code, a two-byte option length and two-byte field that carries a uint16 value (RFC 8415 - http://ietf.org/rfc/rfc8415.txt). In such a case, the option type is defined as "uint16". Length and string tuples are a length on one (DHCPv4) or two (DHCPv6) bytes followed by a string of the given length.

When the option has a more complex structure, the option type may be defined as "array", "record" or even "array of records".

Array types should be used when the option contains multiple contiguous data values of the same type laid. For example, DHCPv6 option 6 includes multiple fields holding uint16 codes of requested DHCPv6 options (RFC 8415). Such an option can be represented with this class by setting the option type to "uint16" and the array indicator (array_type) to true. The number of elements in the array is effectively unlimited (although it is actually limited by the maximal DHCPv6 option length).

Should the option comprise data fields of different types, the "record" option type is used. In such cases the data field types within the record are specified using OptionDefinition::addRecordField.

When the OptionDefinition object has been successfully created, it can be queried to return the appropriate option factory function for the specified specified option format. There are a number of "standard" factory functions that cover well known (common) formats. If the particular format does not match any common format the generic factory function is returned.

The following data type strings are supported:

  • "empty" (option does not contain data fields)
  • "boolean"
  • "int8"
  • "int16"
  • "int32"
  • "uint8"
  • "uint16"
  • "uint32"
  • "ipv4-address" (IPv4 Address)
  • "ipv6-address" (IPv6 Address)
  • "ipv6-prefix" (IPv6 variable length prefix)
  • "psid" (PSID length / value)
  • "string"
  • "fqdn" (fully qualified name)
  • "tuple" (length and string)
  • "record" (set of data fields of different types)
Todo:

Extend the comment to describe "generic factories".

Extend this class with more factory functions.

Derive from UserContext without breaking the multi index.

Definition at line 138 of file option_definition.h.

Member Typedef Documentation

◆ RecordFieldsCollection

List of fields within the record.

Definition at line 142 of file option_definition.h.

◆ RecordFieldsConstIter

Const iterator for record data fields.

Definition at line 144 of file option_definition.h.

Constructor & Destructor Documentation

◆ OptionDefinition() [1/4]

isc::dhcp::OptionDefinition::OptionDefinition ( const std::string &  name,
const uint16_t  code,
const std::string &  space,
const std::string &  type,
const bool  array_type = false 
)
explicit

Constructor.

Parameters
nameoption name.
codeoption code.
spaceoption space.
typeoption data type as string.
array_typearray indicator, if true it indicates that the option fields are the array.

Definition at line 44 of file option_definition.cc.

References isc::dhcp::OptionDataTypeUtil::getDataType().

+ Here is the call graph for this function:

◆ OptionDefinition() [2/4]

isc::dhcp::OptionDefinition::OptionDefinition ( const std::string &  name,
const uint16_t  code,
const std::string &  space,
const OptionDataType  type,
const bool  array_type = false 
)
explicit

Constructor.

Parameters
nameoption name.
codeoption code.
spaceoption space.
typeoption data type.
array_typearray indicator, if true it indicates that the option fields are the array.

Definition at line 63 of file option_definition.cc.

◆ OptionDefinition() [3/4]

isc::dhcp::OptionDefinition::OptionDefinition ( const std::string &  name,
const uint16_t  code,
const std::string &  space,
const std::string &  type,
const char *  encapsulated_space 
)
explicit

Constructor.

This constructor sets the name of the option space that is encapsulated by this option. The encapsulated option space identifies sub-options that are carried within this option. This constructor does not allow to set array indicator because options comprising an array of data fields must not be used with sub-options.

Parameters
nameoption name.
codeoption code.
spaceoption space.
typeoption data type given as string.
encapsulated_spacename of the option space being encapsulated by this option.

Definition at line 76 of file option_definition.cc.

◆ OptionDefinition() [4/4]

isc::dhcp::OptionDefinition::OptionDefinition ( const std::string &  name,
const uint16_t  code,
const std::string &  space,
const OptionDataType  type,
const char *  encapsulated_space 
)
explicit

Constructor.

This constructor sets the name of the option space that is encapsulated by this option. The encapsulated option space identifies sub-options that are carried within this option. This constructor does not allow to set array indicator because options comprising an array of data fields must not be used with sub-options.

Parameters
nameoption name.
codeoption code.
spaceoption space.
typeoption data type.
encapsulated_spacename of the option space being encapsulated by this option.

Definition at line 94 of file option_definition.cc.

Member Function Documentation

◆ addRecordField() [1/2]

void isc::dhcp::OptionDefinition::addRecordField ( const std::string &  data_type_name)

Adds data field to the record.

Parameters
data_type_namename of the data type for the field.
Exceptions
isc::InvalidOperationif option type is not set to RECORD_TYPE.
isc::BadValueif specified invalid data type.

Definition at line 157 of file option_definition.cc.

References isc::dhcp::OptionDataTypeUtil::getDataType().

+ Here is the call graph for this function:

◆ addRecordField() [2/2]

void isc::dhcp::OptionDefinition::addRecordField ( const OptionDataType  data_type)

Adds data field to the record.

Parameters
data_typedata type for the field.
Exceptions
isc::InvalidOperationif option type is not set to RECORD_TYPE.
isc::BadValueif specified invalid data type.

Definition at line 163 of file option_definition.cc.

References isc::dhcp::OptionDataTypeUtil::getDataTypeName(), isc_throw, isc::dhcp::OPT_ANY_ADDRESS_TYPE, isc::dhcp::OPT_EMPTY_TYPE, and isc::dhcp::OPT_RECORD_TYPE.

+ Here is the call graph for this function:

◆ contextToElement()

void isc::dhcp::OptionDefinition::contextToElement ( data::ElementPtr  map) const
inline

Merge unparse a user_context object.

Add user-context to map, but only if defined. Omit if it was not. Extract comment so it will be pretty-printed first.

Parameters
mapA pointer to map where the user context will be unparsed.

Definition at line 406 of file option_definition.h.

◆ create() [1/4]

OptionDefinitionPtr isc::dhcp::OptionDefinition::create ( const std::string &  name,
const uint16_t  code,
const std::string &  space,
const std::string &  type,
const bool  array_type = false 
)
static

Factory function creating an instance of the OptionDefinition.

This function should be used to create an instance of the option definition within a hooks library in cases when the library may be unloaded before the object is destroyed. This ensures that the ownership of the object by the Kea process is retained.

Parameters
nameoption name.
codeoption code.
spaceoption space.
typeoption data type as string.
array_typearray indicator, if true it indicates that the option fields are the array.
Returns
Pointer to the OptionDefinition instance.

Definition at line 110 of file option_definition.cc.

◆ create() [2/4]

OptionDefinitionPtr isc::dhcp::OptionDefinition::create ( const std::string &  name,
const uint16_t  code,
const std::string &  space,
const OptionDataType  type,
const bool  array_type = false 
)
static

Factory function creating an instance of the OptionDefinition.

This function should be used to create an instance of the option definition within a hooks library in cases when the library may be unloaded before the object is destroyed. This ensures that the ownership of the object by the Kea process is retained.

Parameters
nameoption name.
codeoption code.
spaceoption space.
typeoption data type.
array_typearray indicator, if true it indicates that the option fields are the array.
Returns
Pointer to the OptionDefinition instance.

Definition at line 119 of file option_definition.cc.

◆ create() [3/4]

OptionDefinitionPtr isc::dhcp::OptionDefinition::create ( const std::string &  name,
const uint16_t  code,
const std::string &  space,
const std::string &  type,
const char *  encapsulated_space 
)
static

Factory function creating an instance of the OptionDefinition.

This function should be used to create an instance of the option definition within a hooks library in cases when the library may be unloaded before the object is destroyed. This ensures that the ownership of the object by the Kea process is retained.

Parameters
nameoption name.
codeoption code.
spaceoption space.
typeoption data type given as string.
encapsulated_spacename of the option space being encapsulated by this option.
Returns
Pointer to the OptionDefinition instance.

Definition at line 128 of file option_definition.cc.

◆ create() [4/4]

OptionDefinitionPtr isc::dhcp::OptionDefinition::create ( const std::string &  name,
const uint16_t  code,
const std::string &  space,
const OptionDataType  type,
const char *  encapsulated_space 
)
static

Factory function creating an instance of the OptionDefinition.

This function should be used to create an instance of the option definition within a hooks library in cases when the library may be unloaded before the object is destroyed. This ensures that the ownership of the object by the Kea process is retained.

Parameters
nameoption name.
codeoption code.
spaceoption space.
typeoption data type.
encapsulated_spacename of the option space being encapsulated by this option.
Returns
Pointer to the OptionDefinition instance.

Definition at line 137 of file option_definition.cc.

◆ equals()

bool isc::dhcp::OptionDefinition::equals ( const OptionDefinition other) const

Check if option definition is equal to other.

Parameters
otherOption definition to compare to.
Returns
true if two option definitions are equal, false otherwise.

Definition at line 146 of file option_definition.cc.

◆ factoryAddrList4()

OptionPtr isc::dhcp::OptionDefinition::factoryAddrList4 ( uint16_t  type,
OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)
static

Factory to create option with address list.

Parameters
typeoption type.
beginiterator pointing to the beginning of the buffer with a list of IPv4 addresses.
enditerator pointing to the end of the buffer with a list of IPv4 addresses.
Exceptions
isc::OutOfRangeif length of the provided option buffer is not multiple of IPV4 address length.

Definition at line 690 of file option_definition.cc.

Referenced by optionFactory().

◆ factoryAddrList6()

OptionPtr isc::dhcp::OptionDefinition::factoryAddrList6 ( uint16_t  type,
OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)
static

Factory to create option with address list.

Parameters
typeoption type.
beginiterator pointing to the beginning of the buffer with a list of IPv6 addresses.
enditerator pointing to the end of the buffer with a list of IPv6 addresses.
Exceptions
isc::OutOfaRangeif length of provided option buffer is not multiple of IPV6 address length.

Definition at line 699 of file option_definition.cc.

Referenced by optionFactory().

◆ factoryEmpty()

OptionPtr isc::dhcp::OptionDefinition::factoryEmpty ( Option::Universe  u,
uint16_t  type 
)
static

Empty option factory.

Parameters
uuniverse (V6 or V4).
typeoption type.

Definition at line 709 of file option_definition.cc.

Referenced by optionFactory().

◆ factoryGeneric()

OptionPtr isc::dhcp::OptionDefinition::factoryGeneric ( Option::Universe  u,
uint16_t  type,
OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)
static

Factory to create generic option.

Parameters
uuniverse (V6 or V4).
typeoption type.
beginiterator pointing to the beginning of the buffer.
enditerator pointing to the end of the buffer.

Definition at line 715 of file option_definition.cc.

Referenced by optionFactory().

◆ factoryIA6()

OptionPtr isc::dhcp::OptionDefinition::factoryIA6 ( uint16_t  type,
OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)
static

Factory for IA-type of option.

Parameters
typeoption type.
beginiterator pointing to the beginning of the buffer.
enditerator pointing to the end of the buffer.
Exceptions
isc::OutOfRangeif provided option buffer is too short or too long. Expected size is 12 bytes.

Definition at line 723 of file option_definition.cc.

References isc_throw, and isc::dhcp::Option6IA::OPTION6_IA_LEN.

Referenced by factoryOpaqueDataTuples().

◆ factoryIAAddr6()

OptionPtr isc::dhcp::OptionDefinition::factoryIAAddr6 ( uint16_t  type,
OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)
static

Factory for IAADDR-type of option.

Parameters
typeoption type.
beginiterator pointing to the beginning of the buffer.
enditerator pointing to the end of the buffer.
Exceptions
isc::OutOfRangeif provided option buffer is too short or too long. Expected size is 24 bytes.

Definition at line 736 of file option_definition.cc.

References isc_throw, and isc::dhcp::Option6IAAddr::OPTION6_IAADDR_LEN.

Referenced by factoryOpaqueDataTuples().

◆ factoryIAPrefix6()

OptionPtr isc::dhcp::OptionDefinition::factoryIAPrefix6 ( uint16_t  type,
OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)
static

Factory for IAPREFIX-type of option.

Parameters
typeoption type.
beginiterator pointing to the beginning of the buffer.
enditerator pointing to the end of the buffer.
Exceptions
isc::OutOfRangeif provided option buffer is too short. Expected minimum size is 25 bytes.

Definition at line 750 of file option_definition.cc.

References isc_throw, and isc::dhcp::Option6IAPrefix::OPTION6_IAPREFIX_LEN.

Referenced by factoryOpaqueDataTuples().

◆ factoryInteger()

template<typename T >
static OptionPtr isc::dhcp::OptionDefinition::factoryInteger ( Option::Universe  u,
uint16_t  type,
const std::string &  encapsulated_space,
OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)
inlinestatic

Factory function to create option with integer value.

Parameters
uuniverse (V4 or V6).
typeoption type.
encapsulated_spaceAn option space being encapsulated by the options created by this factory function. The options which belong to encapsulated option space are sub options of this option.
beginiterator pointing to the beginning of the buffer.
enditerator pointing to the end of the buffer.
Template Parameters
Ttype of the data field (must be one of the uintX_t or intX_t).
Exceptions
isc::OutOfRangeif provided option buffer length is invalid.

Definition at line 597 of file option_definition.h.

◆ factoryIntegerArray()

template<typename T >
static OptionPtr isc::dhcp::OptionDefinition::factoryIntegerArray ( Option::Universe  u,
uint16_t  type,
OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)
inlinestatic

Factory function to create option with array of integer values.

Parameters
uuniverse (V4 or V6).
typeoption type.
beginiterator pointing to the beginning of the buffer.
enditerator pointing to the end of the buffer.
Template Parameters
Ttype of the data field (must be one of the uintX_t or intX_t).
Exceptions
isc::OutOfRangeif provided option buffer length is invalid.

Definition at line 617 of file option_definition.h.

References code_, getCode(), isc::data::BaseStampedElement::getId(), isc::data::BaseStampedElement::getModificationTime(), getName(), and name_.

+ Here is the call graph for this function:

◆ factoryOpaqueDataTuples()

OptionPtr isc::dhcp::OptionDefinition::factoryOpaqueDataTuples ( Option::Universe  u,
uint16_t  type,
OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)
static

Factory to create option with tuple list.

Parameters
uoption universe (V4 or V6).
typeoption type.
beginiterator pointing to the beginning of the buffer with a list of tuples.
enditerator pointing to the end of the buffer with a list of tuples.
Returns
instance of the DHCP option.

Definition at line 764 of file option_definition.cc.

References D6O_BOOTFILE_PARAM, D6O_CLIENT_FQDN, D6O_IA_NA, D6O_IA_PD, D6O_IAADDR, D6O_IAPREFIX, D6O_PD_EXCLUDE, D6O_STATUS_CODE, D6O_VENDOR_CLASS, D6O_VENDOR_OPTS, DHCP4_OPTION_SPACE, DHCP6_OPTION_SPACE, isc::dhcp::DHO_FQDN, isc::dhcp::DHO_SERVICE_SCOPE, isc::dhcp::DHO_VIVCO_SUBOPTIONS, isc::dhcp::DHO_VIVSO_SUBOPTIONS, factoryIA6(), factoryIAAddr6(), factoryIAPrefix6(), getCode(), isc::dns::LabelSequence::getData(), isc::dns::LabelSequence::getDataLength(), isc_throw, isc::dhcp::Option::V4, isc::dhcp::Option::V6, and isc::Exception::what().

Referenced by optionFactory().

+ Here is the call graph for this function:

◆ getArrayType()

bool isc::dhcp::OptionDefinition::getArrayType ( ) const
inline

Return array type indicator.

The method returns the bool value to indicate whether the option is a a single value or an array of values.

Returns
true if option comprises an array of values.

Definition at line 351 of file option_definition.h.

Referenced by isc::dhcp::OptionCustom::addArrayDataField(), isc::dhcp::OptionCustom::toText(), validate(), and isc::dhcp::OptionCustom::writeInteger().

◆ getCode()

uint16_t isc::dhcp::OptionDefinition::getCode ( ) const
inline

Return option code.

Returns
option code.

Definition at line 356 of file option_definition.h.

References code_.

Referenced by factoryIntegerArray(), factoryOpaqueDataTuples(), and optionFactory().

◆ getContext()

data::ConstElementPtr isc::dhcp::OptionDefinition::getContext ( ) const
inline

Returns const pointer to the user context.

Definition at line 390 of file option_definition.h.

◆ getEncapsulatedSpace()

std::string isc::dhcp::OptionDefinition::getEncapsulatedSpace ( ) const
inline

Return name of the encapsulated option space.

Returns
name of the encapsulated option space.

Definition at line 361 of file option_definition.h.

Referenced by isc::dhcp::OptionCustom::OptionCustom(), and optionFactory().

◆ getName()

std::string isc::dhcp::OptionDefinition::getName ( ) const
inline

Return option name.

Returns
option name.

Definition at line 368 of file option_definition.h.

References name_.

Referenced by factoryIntegerArray().

◆ getOptionSpaceName()

std::string isc::dhcp::OptionDefinition::getOptionSpaceName ( ) const
inline

Returns option space name.

Returns
Option space name.

Definition at line 380 of file option_definition.h.

◆ getRecordFields()

const RecordFieldsCollection& isc::dhcp::OptionDefinition::getRecordFields ( ) const
inline

Return list of record fields.

Returns
list of record fields.

Definition at line 373 of file option_definition.h.

Referenced by isc::dhcp::OptionCustom::addArrayDataField(), optionFactory(), isc::dhcp::OptionCustom::toText(), and validate().

◆ getType()

OptionDataType isc::dhcp::OptionDefinition::getType ( ) const
inline

Return option data type.

Returns
option data type.

Definition at line 387 of file option_definition.h.

Referenced by isc::dhcp::OptionCustom::addArrayDataField(), and isc::dhcp::OptionCustom::toText().

◆ operator!=()

bool isc::dhcp::OptionDefinition::operator!= ( const OptionDefinition other) const
inline

Inequality operator.

Parameters
otherOption definition to compare to.
Returns
true if option definitions are not equal, false otherwise.

Definition at line 324 of file option_definition.h.

◆ operator==()

bool isc::dhcp::OptionDefinition::operator== ( const OptionDefinition other) const
inline

Equality operator.

Parameters
otherOption definition to compare to.
Returns
true if two option definitions are equal, false otherwise.

Definition at line 315 of file option_definition.h.

◆ optionFactory() [1/3]

OptionPtr isc::dhcp::OptionDefinition::optionFactory ( Option::Universe  u,
uint16_t  type,
OptionBufferConstIter  begin,
OptionBufferConstIter  end 
) const

Option factory.

This function creates an instance of DHCP option using provided chunk of buffer. This function may be used to create option which is to be sent in the outgoing packet.

Warning
calling this function on invalid option definition yields undefined behavior. Use validate to test that the option definition is valid.
Parameters
uoption universe (V4 or V6).
typeoption type.
beginbeginning of the option buffer.
endend of the option buffer.
Returns
instance of the DHCP option.
Exceptions
InvalidOptionValueif data for the option is invalid.

Definition at line 182 of file option_definition.cc.

References factoryAddrList4(), factoryAddrList6(), factoryEmpty(), factoryGeneric(), factoryOpaqueDataTuples(), getEncapsulatedSpace(), isc_throw, isc::dhcp::OPT_BINARY_TYPE, isc::dhcp::OPT_EMPTY_TYPE, isc::dhcp::OPT_INT16_TYPE, isc::dhcp::OPT_INT32_TYPE, isc::dhcp::OPT_INT8_TYPE, isc::dhcp::OPT_IPV4_ADDRESS_TYPE, isc::dhcp::OPT_IPV6_ADDRESS_TYPE, isc::dhcp::OPT_STRING_TYPE, isc::dhcp::OPT_TUPLE_TYPE, isc::dhcp::OPT_UINT16_TYPE, isc::dhcp::OPT_UINT32_TYPE, isc::dhcp::OPT_UINT8_TYPE, and isc::Exception::what().

Referenced by optionFactory().

+ Here is the call graph for this function:

◆ optionFactory() [2/3]

OptionPtr isc::dhcp::OptionDefinition::optionFactory ( Option::Universe  u,
uint16_t  type,
const OptionBuffer buf = OptionBuffer() 
) const

Option factory.

This function creates an instance of DHCP option using whole provided buffer. This function may be used to create option which is to be sent in the outgoing packet.

Warning
calling this function on invalid option definition yields undefined behavior. Use validate to test that the option definition is valid.
Parameters
uoption universe (V4 or V6).
typeoption type.
bufoption buffer.
Returns
instance of the DHCP option.
Exceptions
InvalidOptionValueif data for the option is invalid.

Definition at line 292 of file option_definition.cc.

References optionFactory().

+ Here is the call graph for this function:

◆ optionFactory() [3/3]

OptionPtr isc::dhcp::OptionDefinition::optionFactory ( Option::Universe  u,
uint16_t  type,
const std::vector< std::string > &  values 
) const

Option factory.

This function creates an instance of DHCP option using the vector of strings which carry data values for option data fields. The order of values in the vector corresponds to the order of data fields in the option. The supplied string values are cast to their actual data types which are determined based on the option definition. If cast fails due to type mismatch, an exception is thrown. This factory function can be used to create option instance when user specified option value in the comma separated values format in the configuration database. Provided string must be tokenized into the vector of string values and this vector can be supplied to this function.

Warning
calling this function on invalid option definition yields undefined behavior. Use validate to test that the option definition is valid.
Parameters
uoption universe (V4 or V6).
typeoption type.
valuesa vector of values to be used to set data for an option.
Returns
instance of the DHCP option.
Exceptions
InvalidOptionValueif data for the option is invalid.

Definition at line 298 of file option_definition.cc.

References getCode(), getRecordFields(), isc_throw, isc::dhcp::OPT_EMPTY_TYPE, isc::dhcp::OPT_RECORD_TYPE, optionFactory(), and isc::util::str::trim().

+ Here is the call graph for this function:

◆ setContext()

void isc::dhcp::OptionDefinition::setContext ( const data::ConstElementPtr ctx)
inline

Sets user context.

Parameters
ctxuser context to be stored.

Definition at line 396 of file option_definition.h.

◆ validate()

void isc::dhcp::OptionDefinition::validate ( ) const

Check if the option definition is valid.

Note that it is a responsibility of the code that created the OptionDefinition object to validate that it is valid. This function will not be called internally anywhere in this class to verify that the option definition is valid. Using invalid option definition to create an instance of the DHCP option leads to undefined behavior.

Exceptions
MalformedOptionDefinitionoption definition is invalid.

Definition at line 334 of file option_definition.cc.

References getArrayType(), getRecordFields(), isc_throw, isc::asiolink::IOAddress::isV4(), isc::asiolink::IOAddress::isV6(), isc::dhcp::OpaqueDataTuple::LENGTH_1_BYTE, isc::dhcp::OpaqueDataTuple::LENGTH_2_BYTES, name_, isc::dhcp::OPT_BINARY_TYPE, isc::dhcp::OPT_BOOLEAN_TYPE, isc::dhcp::OPT_EMPTY_TYPE, isc::dhcp::OPT_FQDN_TYPE, isc::dhcp::OPT_INT16_TYPE, isc::dhcp::OPT_INT32_TYPE, isc::dhcp::OPT_INT8_TYPE, isc::dhcp::OPT_IPV4_ADDRESS_TYPE, isc::dhcp::OPT_IPV6_ADDRESS_TYPE, isc::dhcp::OPT_IPV6_PREFIX_TYPE, isc::dhcp::OPT_PSID_TYPE, isc::dhcp::OPT_RECORD_TYPE, isc::dhcp::OPT_STRING_TYPE, isc::dhcp::OPT_TUPLE_TYPE, isc::dhcp::OPT_UINT16_TYPE, isc::dhcp::OPT_UINT32_TYPE, isc::dhcp::OPT_UINT8_TYPE, isc::dhcp::OPT_UNKNOWN_TYPE, isc::dhcp::Option::V4, isc::dhcp::OptionSpace::validateName(), isc::dhcp::OptionDataTypeUtil::writeAddress(), isc::dhcp::OptionDataTypeUtil::writeBinary(), isc::dhcp::OptionDataTypeUtil::writeBool(), isc::dhcp::OptionDataTypeUtil::writeFqdn(), isc::dhcp::OptionDataTypeUtil::writePrefix(), isc::dhcp::OptionDataTypeUtil::writePsid(), isc::dhcp::OptionDataTypeUtil::writeString(), and isc::dhcp::OptionDataTypeUtil::writeTuple().

Referenced by isc::dhcp::OptionCustom::addArrayDataField().

+ Here is the call graph for this function:

The documentation for this class was generated from the following files: