#include <limits>
#include <iostream>
+#include <netinet/in.h>
#include <vector>
#include <map>
/// @param pools storage container in which to store the parsed pool
/// upon "commit"
Pool4Parser(const std::string& param_name, PoolStoragePtr pools)
- :PoolParser(param_name, pools) {
+ :PoolParser(param_name, pools, AF_INET) {
}
protected:
#include <iostream>
#include <limits>
#include <map>
+#include <netinet/in.h>
#include <vector>
#include <stdint.h>
/// @param pools storage container in which to store the parsed pool
/// upon "commit"
Pool6Parser(const std::string& param_name, PoolStoragePtr pools)
- :PoolParser(param_name, pools) {
+ :PoolParser(param_name, pools, AF_INET6) {
}
protected:
}
//****************************** PoolParser ********************************
-PoolParser::PoolParser(const std::string&, PoolStoragePtr pools)
- :pools_(pools), options_(new CfgOption()) {
+PoolParser::PoolParser(const std::string&, PoolStoragePtr pools,
+ const uint16_t address_family)
+ :pools_(pools), options_(new CfgOption()),
+ address_family_(address_family) {
if (!pools_) {
isc_throw(isc::dhcp::DhcpConfigError, "parser logic error: "
ConstElementPtr option_data = pool_structure->get("option-data");
if (option_data) {
try {
+ // Currently we don't support specifying options for the DHCPv4 server.
+ if (address_family_ == AF_INET) {
+ isc_throw(DhcpConfigError, "option-data is not supported for DHCPv4"
+ " address pools");
+ }
+
OptionDataListParserPtr option_parser(new OptionDataListParser("option-data",
options_,
- AF_INET6));
+ address_family_));
option_parser->build(option_data);
option_parser->commit();
options_->copyTo(*pool->getCfgOption());;
/// accept string as first argument.
/// @param pools is the storage in which to store the parsed pool
/// upon "commit".
+ /// @param address_family AF_INET (for DHCPv4) or AF_INET6 (for DHCPv6).
/// @throw isc::dhcp::DhcpConfigError if storage is null.
- PoolParser(const std::string& dummy, PoolStoragePtr pools);
+ PoolParser(const std::string& dummy, PoolStoragePtr pools,
+ const uint16_t address_family);
/// @brief parses the actual structure
///
/// A storage for pool specific option values.
CfgOptionPtr options_;
+
+ /// @brief Address family: AF_INET (for DHCPv4) or AF_INET6 for DHCPv6.
+ uint16_t address_family_;
};
/// @brief Parser for a list of pools