Kea 2.7.5
|
Represents option data configuration for the DHCP server. More...
#include <cfg_option.h>
Public Member Functions | |
CfgOption () | |
default constructor | |
bool | empty () const |
Indicates the object is empty. | |
Public Member Functions inherited from isc::data::CfgToElement | |
virtual | ~CfgToElement () |
Destructor. | |
Methods and operators used for comparing objects. | |
bool | equals (const CfgOption &other) const |
Check if configuration is equal to other configuration. | |
bool | operator== (const CfgOption &other) const |
Equality operator. | |
bool | operator!= (const CfgOption &other) const |
Inequality operator. | |
void | add (const OptionPtr &option, const bool persistent, const bool cancelled, const std::string &option_space, const uint64_t id=0) |
Adds instance of the option to the configuration. | |
void | add (const OptionDescriptor &desc, const std::string &option_space) |
A variant of the CfgOption::add method which takes option descriptor as an argument. | |
void | replace (const OptionDescriptor &desc, const std::string &option_space) |
Replaces the instance of an option within this collection. | |
void | merge (CfgOptionDefPtr cfg_def, CfgOption &other) |
Merges another option configuration into this one. | |
void | createOptions (CfgOptionDefPtr cfg_def) |
Re-create the option in each descriptor based on given definitions. | |
void | mergeTo (CfgOption &other) const |
Merges this configuration to another configuration. | |
void | copyTo (CfgOption &other) const |
Copies this configuration to another configuration. | |
void | encapsulate () |
Appends encapsulated options to top-level options. | |
bool | isEncapsulated () const |
Checks if options have been encapsulated. | |
OptionContainerPtr | getAll (const std::string &option_space) const |
Returns all options for the specified option space. | |
OptionContainerPtr | getAll (const uint32_t vendor_id) const |
Returns vendor options for the specified vendor id. | |
OptionContainerPtr | getAllCombined (const std::string &option_space) const |
Returns all non-vendor or vendor options for the specified option space. | |
template<typename Selector > | |
OptionDescriptor | get (const Selector &key, const uint16_t option_code) const |
Returns option for the specified key and option code. | |
template<typename Selector > | |
OptionDescriptorList | getList (const Selector &key, const uint16_t option_code) const |
Returns options for the specified key and option code. | |
size_t | del (const std::string &option_space, const uint16_t option_code) |
Deletes option for the specified option space and option code. | |
size_t | del (const uint32_t vendor_id, const uint16_t option_code) |
Deletes vendor option for the specified vendor id. | |
size_t | del (const uint64_t id) |
Deletes all options having a given database id. | |
std::list< std::string > | getOptionSpaceNames () const |
Returns a list of configured option space names. | |
std::list< uint32_t > | getVendorIds () const |
Returns a list of all configured vendor identifiers. | |
std::list< std::string > | getVendorIdsSpaceNames () const |
Returns a list of option space names for configured vendor ids. | |
virtual isc::data::ElementPtr | toElement () const |
Unparse a configuration object. | |
virtual isc::data::ElementPtr | toElement (CfgOptionDefPtr cfg_option_def) const |
Unparse a configuration object. | |
isc::data::ElementPtr | toElementWithMetadata (const bool include_metadata, CfgOptionDefPtr cfg_option_def=CfgOptionDefPtr()) const |
Unparse a configuration object with optionally including the metadata. | |
static bool | createDescriptorOption (CfgOptionDefPtr cfg_def, const std::string &space, OptionDescriptor &opt_desc) |
Creates an option descriptor's option based on a set of option defs. | |
Represents option data configuration for the DHCP server.
This class holds a collection of options to be sent to a DHCP client. Options are grouped by the option space or vendor identifier (for vendor options).
The server configuration allows for specifying two distinct collections of options: global options and per-subnet options in which some options may overlap.
The collection of global options specify options being sent to the client belonging to any subnets, i.e. global options are "inherited" by all subnets.
The per-subnet options are configured for a particular subnet and are sent to clients which belong to this subnet. The values of the options specified for a particular subnet override the values of the global options.
This class represents a single collection of options (either global or per-subnet). Each subnet holds its own object of the CfgOption
type. The CfgMgr
holds a CfgOption
object representing global options.
Note that having a separate copy of the CfgOption
to represent global options is useful when the client requests stateless configuration from the DHCP server and no subnet is selected for this client. This client will only receive global options.
Definition at line 372 of file cfg_option.h.
isc::dhcp::CfgOption::CfgOption | ( | ) |
default constructor
Definition at line 86 of file cfg_option.cc.
void isc::dhcp::CfgOption::add | ( | const OptionDescriptor & | desc, |
const std::string & | option_space ) |
A variant of the CfgOption::add method which takes option descriptor as an argument.
desc | Option descriptor holding option instance and other parameters pertaining to the option. |
option_space | Option space name. |
isc::BadValue | if the option space is invalid. |
Definition at line 115 of file cfg_option.cc.
References isc::dhcp::OptionSpaceContainer< ContainerType, ItemType, Selector >::addItem(), isc_throw, isc::dhcp::LibDHCP::optionSpaceToVendorId(), and isc::dhcp::OptionSpace::validateName().
void isc::dhcp::CfgOption::add | ( | const OptionPtr & | option, |
const bool | persistent, | ||
const bool | cancelled, | ||
const std::string & | option_space, | ||
const uint64_t | id = 0 ) |
Adds instance of the option to the configuration.
There are two types of options which may be passed to this method:
The non-vendor options are grouped by the name of the option space (specified in textual format). The vendor options are grouped by the vendor identifier, which is a 32-bit unsigned integer value.
In order to add new vendor option to the list the option space name (last argument of this method) should be specified as "vendor-X" where "X" is a 32-bit unsigned integer, e.g. "vendor-1234". Options for which the option_space
argument doesn't follow this format are added as non-vendor options.
option | Pointer to the option being added. |
persistent | Boolean value which specifies if the option should be sent to the client regardless if requested (true), or nor (false) |
cancelled | Boolean value which specifies if the option must never be sent to the client. |
option_space | Option space name. |
id | Optional database id to be associated with the option. |
isc::BadValue | if the option space is invalid. |
Definition at line 102 of file cfg_option.cc.
References add().
Referenced by add().
void isc::dhcp::CfgOption::copyTo | ( | CfgOption & | other | ) | const |
Copies this configuration to another configuration.
This method copies options configuration to another object.
[out] | other | An object to copy the configuration to. |
Definition at line 286 of file cfg_option.cc.
References isEncapsulated(), and mergeTo().
|
static |
Creates an option descriptor's option based on a set of option defs.
This function's primary use is to create definition specific options for option descriptors fetched from a configuration backend, as part of a configuration merge.
Given an OptionDescriptor whose option_ member contains a generic option (i.e has a code and/or data), this function will attempt to find a matching definition and then use that definition's factory to create an option instance specific to that definition. It will then replace the descriptor's generic option with the specific option.
Three sources of definitions are searched, in the following order:
LIBDHCP::getOptionDef
))LIBDHCP::getVendorOptionDef
))The code will use the first matching definition found. It then applies the following rules:
cfg_def | the user specified definitions to use |
space | the option space name of the option |
opt_desc | OptionDescriptor describing the option. |
InvalidOperation | if the descriptor conveys a formatted value and there is no definition matching the option code in the given space, or if the definition factory invocation fails. |
Definition at line 208 of file cfg_option.cc.
References DHCP4_OPTION_SPACE, DHCP6_OPTION_SPACE, isc::dhcp::LibDHCP::getLastResortOptionDef(), isc::dhcp::LibDHCP::getOptionDef(), isc::dhcp::LibDHCP::getVendorOptionDef(), isc_throw, and isc::dhcp::LibDHCP::optionSpaceToVendorId().
Referenced by createOptions().
void isc::dhcp::CfgOption::createOptions | ( | CfgOptionDefPtr | cfg_def | ) |
Re-create the option in each descriptor based on given definitions.
Invokes createDescriptorOption()
on each option descriptor in each option space, passing in the given dictionary of option definitions. If the descriptor's option is re-created, then the descriptor is updated by calling replace()
.
cfg_def | set of of user-defined option definitions to use when creating option instances. |
Definition at line 193 of file cfg_option.cc.
References createDescriptorOption(), getAll(), getOptionSpaceNames(), and replace().
size_t isc::dhcp::CfgOption::del | ( | const std::string & | option_space, |
const uint16_t | option_code ) |
Deletes option for the specified option space and option code.
If the option is encapsulated within some non top level option space, it is also deleted from all option instances encapsulating this option space.
option_space | Option space name. |
option_code | Code of the option to be returned. |
Definition at line 393 of file cfg_option.cc.
References DHCP4_OPTION_SPACE, DHCP6_OPTION_SPACE, getAll(), and getOptionSpaceNames().
size_t isc::dhcp::CfgOption::del | ( | const uint32_t | vendor_id, |
const uint16_t | option_code ) |
Deletes vendor option for the specified vendor id.
vendor_id | Vendor identifier. |
option_code | Option code. |
Definition at line 428 of file cfg_option.cc.
References getAll().
size_t isc::dhcp::CfgOption::del | ( | const uint64_t | id | ) |
Deletes all options having a given database id.
Note that there are cases when there will be multiple options having the same id (typically id of 0). When configuration backend is in use it sets the unique ids from the database. In cases when the configuration backend is not used, the ids default to 0. Passing the id of 0 would result in deleting all options that were not added via the database.
Both regular and vendor specific options are deleted with this method.
This method internally calls encapsulate()
after deleting options having the given id.
id | Identifier of the options to be deleted. |
Definition at line 441 of file cfg_option.cc.
References isc::dhcp::OptionSpaceContainer< ContainerType, ItemType, Selector >::deleteItems(), encapsulate(), getAll(), and getOptionSpaceNames().
bool isc::dhcp::CfgOption::empty | ( | ) | const |
Indicates the object is empty.
Definition at line 91 of file cfg_option.cc.
References isc::dhcp::OptionSpaceContainer< ContainerType, ItemType, Selector >::empty().
void isc::dhcp::CfgOption::encapsulate | ( | ) |
Appends encapsulated options to top-level options.
This method iterates over the top-level options (from "dhcp4" and "dhcp6" option space) and checks which option spaces these options encapsulate. For each encapsulated option space, the options from this option space are appended to top-level options.
Definition at line 295 of file cfg_option.cc.
References DHCP4_OPTION_SPACE, and DHCP6_OPTION_SPACE.
bool isc::dhcp::CfgOption::equals | ( | const CfgOption & | other | ) | const |
Check if configuration is equal to other configuration.
other | An object holding configuration to compare to. |
Definition at line 96 of file cfg_option.cc.
References isc::dhcp::OptionSpaceContainer< ContainerType, ItemType, Selector >::equals().
Referenced by operator!=(), and operator==().
|
inline |
Returns option for the specified key and option code.
The key should be a string, in which case it specifies an option space name, or an uint32_t value, in which case it specifies a vendor identifier.
key | Option space name or vendor identifier. |
option_code | Code of the option to be returned. |
Selector | one of: std::string or uint32_t |
Definition at line 625 of file cfg_option.h.
References getAll().
OptionContainerPtr isc::dhcp::CfgOption::getAll | ( | const std::string & | option_space | ) | const |
Returns all options for the specified option space.
This method will not return vendor options, i.e. having option space name in the format of "vendor-X" where X is 32-bit unsigned integer. See getAll(uint32_t)
for vendor options.
option_space | Name of the option space. |
Definition at line 374 of file cfg_option.cc.
References isc::dhcp::OptionSpaceContainer< ContainerType, ItemType, Selector >::getItems().
Referenced by createOptions(), del(), del(), del(), get(), getAllCombined(), getList(), replace(), and toElementWithMetadata().
OptionContainerPtr isc::dhcp::CfgOption::getAll | ( | const uint32_t | vendor_id | ) | const |
Returns vendor options for the specified vendor id.
vendor_id | Vendor id for which options are to be returned. |
Definition at line 379 of file cfg_option.cc.
References isc::dhcp::OptionSpaceContainer< ContainerType, ItemType, Selector >::getItems().
OptionContainerPtr isc::dhcp::CfgOption::getAllCombined | ( | const std::string & | option_space | ) | const |
Returns all non-vendor or vendor options for the specified option space.
It combines the output of the getAll
function variants. When option space has the format of "vendor-X", it retrieves the vendor options by vendor id, where X must be a 32-bit unsigned integer. Otherwise, it fetches non-vendor options.
option_space | Name of the option space. |
Definition at line 384 of file cfg_option.cc.
References getAll(), and isc::dhcp::LibDHCP::optionSpaceToVendorId().
|
inline |
Returns options for the specified key and option code.
The key should be a string, in which case it specifies an option space name, or an uint32_t value, in which case it specifies a vendor identifier.
key | Option space name or vendor identifier. |
option_code | Code of the option to be returned. |
Selector | one of: std::string or uint32_t |
Definition at line 656 of file cfg_option.h.
References getAll().
|
inline |
Returns a list of configured option space names.
The returned option space names exclude vendor option spaces, such as "vendor-1234". These are returned by the getVendorIdsSpaceNames.
Definition at line 727 of file cfg_option.h.
References isc::dhcp::OptionSpaceContainer< ContainerType, ItemType, Selector >::getOptionSpaceNames().
Referenced by createOptions(), del(), and del().
|
inline |
Returns a list of all configured vendor identifiers.
Definition at line 732 of file cfg_option.h.
References isc::dhcp::OptionSpaceContainer< ContainerType, ItemType, Selector >::getOptionSpaceNames().
Referenced by getVendorIdsSpaceNames().
std::list< std::string > isc::dhcp::CfgOption::getVendorIdsSpaceNames | ( | ) | const |
Returns a list of option space names for configured vendor ids.
For each vendor-id the option space name returned is constructed as "vendor-XYZ" where XYZ is a uint32_t
value without leading zeros.
Definition at line 158 of file cfg_option.cc.
References getVendorIds().
|
inline |
Checks if options have been encapsulated.
Definition at line 570 of file cfg_option.h.
Referenced by copyTo().
void isc::dhcp::CfgOption::merge | ( | CfgOptionDefPtr | cfg_def, |
CfgOption & | other ) |
Merges another option configuration into this one.
This method calls mergeTo()
to add this configuration's options into other
(skipping any duplicates). Next it calls createDescriptorOption()
for each option descriptor in the merged set. This (re)-creates each descriptor's option based on the merged set of opt definitions. Finally, it calls copyTo()
to overwrite this configuration's options with the merged set in other
.
other
configuration. Therefore, the caller must not rely on the data held in the other
object after the call to merge
. Also, the data held in other
must not be modified after the call to merge
because it may affect the merged configuration.cfg_def | set of of user-defined option definitions to use when merging. |
other | option configuration to merge in. |
Definition at line 172 of file cfg_option.cc.
References encapsulate(), and mergeTo().
void isc::dhcp::CfgOption::mergeTo | ( | CfgOption & | other | ) | const |
Merges this configuration to another configuration.
This method iterates over the configuration items held in this configuration and copies them to the configuration specified as a parameter. If an item exists in the destination it is not copied.
[out] | other | Configuration object to merge to. |
Definition at line 278 of file cfg_option.cc.
|
inline |
Inequality operator.
other | An object holding configuration to compare to. |
Definition at line 407 of file cfg_option.h.
References equals().
|
inline |
Equality operator.
other | An object holding configuration to compare to. |
Definition at line 398 of file cfg_option.h.
References equals().
void isc::dhcp::CfgOption::replace | ( | const OptionDescriptor & | desc, |
const std::string & | option_space ) |
Replaces the instance of an option within this collection.
This method locates the option within the given space and replaces it with a copy of the given descriptor. This effectively updates the contents without altering the container indexing.
desc | Option descriptor holding option instance and other parameters pertaining to the option. |
option_space | Option space name. |
isc::BadValue | if the descriptor's option instance is null, if space is invalid, or if the option does not already exist in the given space. |
Definition at line 133 of file cfg_option.cc.
References getAll(), and isc_throw.
Referenced by createOptions().
|
virtual |
Unparse a configuration object.
Implements isc::data::CfgToElement.
Definition at line 475 of file cfg_option.cc.
References toElementWithMetadata().
|
virtual |
Unparse a configuration object.
cfg_option_def | config option definitions |
Definition at line 480 of file cfg_option.cc.
References toElementWithMetadata().
ElementPtr isc::dhcp::CfgOption::toElementWithMetadata | ( | const bool | include_metadata, |
CfgOptionDefPtr | cfg_option_def = CfgOptionDefPtr() ) const |
Unparse a configuration object with optionally including the metadata.
include_metadata | boolean value indicating if the metadata should be included (if true) or not (if false). |
cfg_option_def | config option definitions (optional). |
Definition at line 485 of file cfg_option.cc.
References isc::data::Element::create(), isc::data::Element::createList(), isc::data::Element::createMap(), isc::util::encode::encodeHex(), getAll(), isc::dhcp::LibDHCP::getLastResortOptionDef(), isc::dhcp::LibDHCP::getOptionDef(), isc::dhcp::OptionSpaceContainer< ContainerType, ItemType, Selector >::getOptionSpaceNames(), isc::dhcp::LibDHCP::getRuntimeOptionDef(), isc::dhcp::LibDHCP::getVendorOptionDef(), and isc::dhcp::OPT_EMPTY_TYPE.
Referenced by toElement(), and toElement().