}
vector<uint8_t> rai_data;
str::decodeFormattedHexString(rai_hex, rai_data);
- static OptionDefinitionPtr rai_def;
- if (!rai_def) {
- rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- }
- if (!rai_def) {
- // Should not happen.
- return;
- }
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4, rai_data));
+ static const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4, rai_data));
// unpackOptions is a bit too flexible so check if it got something...
if (!rai || rai->getOptions().empty()) {
return;
req->setRemotePort(1234);
// Add a RAI relay-port sub-option (the only difference with the previous test).
- OptionDefinitionPtr rai_def =
- LibDHCP::getOptionDef(DHCP4_OPTION_SPACE, DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def);
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
ASSERT_TRUE(rai);
req->addOption(rai);
OptionPtr relay_port(new Option(Option::V4, RAI_OPTION_RELAY_PORT));
// client-id echo is optional
// rai echo is done in relayAgentInfoEcho
// Do subnet selection option
- OptionDefinitionPtr sbnsel_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_SUBNET_SELECTION);
- ASSERT_TRUE(sbnsel_def);
- OptionCustomPtr sbnsel(new OptionCustom(*sbnsel_def, Option::V4));
+ const OptionDefinition& sbnsel_def = LibDHCP::DHO_SUBNET_SELECTION_DEF();
+ OptionCustomPtr sbnsel(new OptionCustom(sbnsel_def, Option::V4));
ASSERT_TRUE(sbnsel);
sbnsel->writeAddress(IOAddress("192.0.2.3"));
query->addOption(sbnsel);
ASSERT_NO_THROW(srv.processDiscover(pkt));
// Now let's add a server-id. This should throw.
- OptionDefinitionPtr server_id_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_SERVER_IDENTIFIER);
- ASSERT_TRUE(server_id_def);
+ const OptionDefinition& server_id_def = LibDHCP::DHO_DHCP_SERVER_IDENTIFIER_DEF();
- OptionCustomPtr server_id(new OptionCustom(*server_id_def, Option::V4));
+ OptionCustomPtr server_id(new OptionCustom(server_id_def, Option::V4));
server_id->writeAddress(IOAddress("192.0.2.3"));
pkt->addOption(server_id);
EXPECT_THROW_MSG(srv.processDiscover(pkt), RFCViolation,
EXPECT_NO_THROW(srv.processRequest(pkt));
// Now let's add a requested address. This should not throw.
- OptionDefinitionPtr req_addr_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_REQUESTED_ADDRESS);
- ASSERT_TRUE(req_addr_def);
- OptionCustomPtr req_addr(new OptionCustom(*req_addr_def, Option::V4));
+ const OptionDefinition& req_addr_def = LibDHCP::DHO_DHCP_REQUESTED_ADDRESS_DEF();
+ OptionCustomPtr req_addr(new OptionCustom(req_addr_def, Option::V4));
req_addr->writeAddress(IOAddress("192.0.2.3"));
pkt->addOption(req_addr);
ASSERT_NO_THROW(srv.processRequest(pkt));
ASSERT_NO_THROW(srv.processRequest(pkt));
// Now let's add a server-id. This should not throw.
- OptionDefinitionPtr server_id_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_SERVER_IDENTIFIER);
- ASSERT_TRUE(server_id_def);
+ const OptionDefinition& server_id_def = LibDHCP::DHO_DHCP_SERVER_IDENTIFIER_DEF();
- OptionCustomPtr server_id(new OptionCustom(*server_id_def, Option::V4));
+ OptionCustomPtr server_id(new OptionCustom(server_id_def, Option::V4));
server_id->writeAddress(IOAddress("192.0.2.3"));
pkt->addOption(server_id);
EXPECT_NO_THROW(srv.processRequest(pkt));
" sent from [hwtype=1 00:fe:fe:fe:fe:fe], cid=[no info], tid=0x4d2");
// Now let's add a requested address. This should not throw.
- OptionDefinitionPtr req_addr_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_REQUESTED_ADDRESS);
- ASSERT_TRUE(req_addr_def);
- OptionCustomPtr req_addr(new OptionCustom(*req_addr_def, Option::V4));
+ const OptionDefinition& req_addr_def = LibDHCP::DHO_DHCP_REQUESTED_ADDRESS_DEF();
+ OptionCustomPtr req_addr(new OptionCustom(req_addr_def, Option::V4));
req_addr->writeAddress(IOAddress("192.0.2.3"));
pkt->addOption(req_addr);
ASSERT_NO_THROW(srv.processDecline(pkt));
ASSERT_NO_THROW(srv.processDecline(pkt));
// Now let's add a server-id. This should not throw.
- OptionDefinitionPtr server_id_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_SERVER_IDENTIFIER);
- ASSERT_TRUE(server_id_def);
+ const OptionDefinition& server_id_def = LibDHCP::DHO_DHCP_SERVER_IDENTIFIER_DEF();
- OptionCustomPtr server_id(new OptionCustom(*server_id_def, Option::V4));
+ OptionCustomPtr server_id(new OptionCustom(server_id_def, Option::V4));
server_id->writeAddress(IOAddress("192.0.2.3"));
pkt->addOption(server_id);
EXPECT_NO_THROW(srv.processDecline(pkt));
ASSERT_NO_THROW(srv.processRelease(pkt));
// Now let's add a server-id. This should not throw.
- OptionDefinitionPtr server_id_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_SERVER_IDENTIFIER);
- ASSERT_TRUE(server_id_def);
+ const OptionDefinition& server_id_def = LibDHCP::DHO_DHCP_SERVER_IDENTIFIER_DEF();
- OptionCustomPtr server_id(new OptionCustom(*server_id_def, Option::V4));
+ OptionCustomPtr server_id(new OptionCustom(server_id_def, Option::V4));
server_id->writeAddress(IOAddress("192.0.2.3"));
pkt->addOption(server_id);
EXPECT_NO_THROW(srv.processRelease(pkt));
ASSERT_NO_THROW(srv.processInform(pkt));
// Now let's add a requested address. This should not throw.
- OptionDefinitionPtr req_addr_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_REQUESTED_ADDRESS);
- ASSERT_TRUE(req_addr_def);
- OptionCustomPtr req_addr(new OptionCustom(*req_addr_def, Option::V4));
+ const OptionDefinition& req_addr_def = LibDHCP::DHO_DHCP_REQUESTED_ADDRESS_DEF();
+ OptionCustomPtr req_addr(new OptionCustom(req_addr_def, Option::V4));
req_addr->writeAddress(IOAddress("192.0.2.3"));
pkt->addOption(req_addr);
ASSERT_NO_THROW(srv.processInform(pkt));
ASSERT_NO_THROW(srv.processInform(pkt));
// Now let's add a server-id. This should not throw.
- OptionDefinitionPtr server_id_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_SERVER_IDENTIFIER);
- ASSERT_TRUE(server_id_def);
+ const OptionDefinition& server_id_def = LibDHCP::DHO_DHCP_SERVER_IDENTIFIER_DEF();
- OptionCustomPtr server_id(new OptionCustom(*server_id_def, Option::V4));
+ OptionCustomPtr server_id(new OptionCustom(server_id_def, Option::V4));
server_id->writeAddress(IOAddress("192.0.2.3"));
pkt->addOption(server_id);
EXPECT_NO_THROW(srv.processInform(pkt));
// Remove the server identifier.
ASSERT_NO_THROW(pkt->delOption(DHO_DHCP_SERVER_IDENTIFIER));
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
-
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
OptionBuffer override_server_id_buf(IOAddress("10.0.0.128").toBytes());
// Create RAI option.
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
OptionPtr rai_override_server_id(new Option(Option::V4,
RAI_OPTION_SERVER_ID_OVERRIDE,
override_server_id_buf));
dis->addOption(clientid);
// Let's create a Relay Agent Information option
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def);
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
ASSERT_TRUE(rai);
IOAddress addr("192.0.3.2");
OptionPtr ols(new Option(Option::V4,
EXPECT_FALSE(drop);
// Subnet select option has a lower precedence
- OptionDefinitionPtr sbnsel_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_SUBNET_SELECTION);
- ASSERT_TRUE(sbnsel_def);
- OptionCustomPtr sbnsel(new OptionCustom(*sbnsel_def, Option::V4));
+ const OptionDefinition& sbnsel_def = LibDHCP::DHO_SUBNET_SELECTION_DEF();
+ OptionCustomPtr sbnsel(new OptionCustom(sbnsel_def, Option::V4));
ASSERT_TRUE(sbnsel);
sbnsel->writeAddress(IOAddress("192.0.2.3"));
dis->addOption(sbnsel);
dis->addOption(clientid);
// Let's create a Relay Agent Information option
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def);
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
ASSERT_TRUE(rai);
IOAddress addr("192.0.3.2");
OptionPtr ols(new Option(Option::V4,
// Subnet select option has a lower precedence, but will succeed
// because RAI link selection suboptions are being ignored
- OptionDefinitionPtr sbnsel_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_SUBNET_SELECTION);
- ASSERT_TRUE(sbnsel_def);
- OptionCustomPtr sbnsel(new OptionCustom(*sbnsel_def, Option::V4));
+ const OptionDefinition& sbnsel_def = LibDHCP::DHO_SUBNET_SELECTION_DEF();
+ OptionCustomPtr sbnsel(new OptionCustom(sbnsel_def, Option::V4));
ASSERT_TRUE(sbnsel);
sbnsel->writeAddress(IOAddress("192.0.2.3"));
dis->addOption(sbnsel);
dis->addOption(clientid);
// Let's create a Subnet Selection option
- OptionDefinitionPtr sbnsel_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_SUBNET_SELECTION);
- ASSERT_TRUE(sbnsel_def);
- OptionCustomPtr sbnsel(new OptionCustom(*sbnsel_def, Option::V4));
+ const OptionDefinition& sbnsel_def = LibDHCP::DHO_SUBNET_SELECTION_DEF();
+ OptionCustomPtr sbnsel(new OptionCustom(sbnsel_def, Option::V4));
ASSERT_TRUE(sbnsel);
sbnsel->writeAddress(IOAddress("192.0.3.2"));
query_->setHWAddr(hwaddr_);
query_->setCiaddr(addr_);
- if (!rai_def_) {
- isc_throw(Unexpected, "RAI definition can't be found");
- }
- rai_.reset(new OptionCustom(*rai_def_, Option::V4));
+ rai_.reset(new OptionCustom(LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF(),
+ Option::V4));
rai_sub_.reset(new Option(Option::V4, RAI_OPTION_LINK_SELECTION,
addr_.toBytes()));
rai_->addOption(rai_sub_);
LeaseMgrFactory::destroy();
}
- /// @brief RAI definition.
- static OptionDefinitionPtr rai_def_;
-
/// @brief Client address.
IOAddress addr_;
ElementPtr sub_options_;
};
-OptionDefinitionPtr
-StashAgentOptionTest::rai_def_ = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
-
-// Verify that RAI has a definition and can be built.
-TEST(StashAgentOptionTestTest, checkRAI) {
- ASSERT_TRUE(StashAgentOptionTest::rai_def_);
-}
-
// Verify the basic positive case.
TEST_F(StashAgentOptionTest, basic) {
CfgMgr::instance().commit();
// Verify that empty RAI is supported.
TEST_F(StashAgentOptionTest, emptyRelayAgentInfo) {
// Add an empty RAI.
- OptionPtr empty_rai(new OptionCustom(*StashAgentOptionTest::rai_def_,
+ OptionPtr empty_rai(new OptionCustom(LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF(),
Option::V4));
query_->addOption(empty_rai);
OptionCustomPtr
Dhcpv4SrvTest::makeServerIdOption(const IOAddress& address) {
- OptionDefinitionPtr option_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_SERVER_IDENTIFIER);
- OptionCustomPtr server_id(new OptionCustom(*option_def, Option::V4));
+ const OptionDefinition& option_def = LibDHCP::DHO_DHCP_SERVER_IDENTIFIER_DEF();
+ OptionCustomPtr server_id(new OptionCustom(option_def, Option::V4));
server_id->writeAddress(address);
return (server_id);
}
OptionPtr
Dhcpv4SrvTest::makeFqdnListOption() {
- OptionDefinitionPtr def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DOMAIN_SEARCH);
+ const OptionDefinition& def = LibDHCP::DHO_DOMAIN_SEARCH_DEF();
// Prepare buffer holding an array of FQDNs.
const uint8_t fqdn[] = {
// Initialize a vector with the FQDN data.
std::vector<uint8_t> fqdn_buf(fqdn, fqdn + sizeof(fqdn));
- OptionPtr option = def->optionFactory(Option::V4, DHO_DOMAIN_SEARCH,
- fqdn_buf.begin(), fqdn_buf.end());
+ OptionPtr option = def.optionFactory(Option::V4, DHO_DOMAIN_SEARCH,
+ fqdn_buf.begin(), fqdn_buf.end());
return (option);
}
Pkt4Ptr& query,
IOAddress requested,
IOAddress server_id) {
- OptionDefinitionPtr req_addr_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_REQUESTED_ADDRESS);
- ASSERT_TRUE(req_addr_def);
-
- OptionDefinitionPtr sbnsel_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_SUBNET_SELECTION);
- ASSERT_TRUE(sbnsel_def);
-
- OptionCustomPtr req_addr(new OptionCustom(*req_addr_def, Option::V4));
+ const OptionDefinition& req_addr_def = LibDHCP::DHO_DHCP_REQUESTED_ADDRESS_DEF();
+ OptionCustomPtr req_addr(new OptionCustom(req_addr_def, Option::V4));
req_addr->writeAddress(requested);
- OptionCustomPtr sbnsel(new OptionCustom(*sbnsel_def, Option::V4));
+ const OptionDefinition& sbnsel_def = LibDHCP::DHO_SUBNET_SELECTION_DEF();
+ OptionCustomPtr sbnsel(new OptionCustom(sbnsel_def, Option::V4));
sbnsel->writeAddress(requested);
query->addOption(req_addr);
-// Copyright (C) 2014-2023 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// Client requests big option.
client.requestOption(240);
// Client also sends multiple options with the same code.
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def);
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
// Create RAI options which should be fused by the server.
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
for (uint8_t i = 0; i < 4; ++i) {
// Create a buffer holding some binary data. This data will be
// used as reference when we read back the data from a created
/// @param payload specified payload (0 = fill payload with repeating option code)
/// @return RSOO with nested options
OptionPtr createRSOO(const std::vector<uint16_t>& codes, uint8_t payload = 0) {
- OptionDefinitionPtr def = LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_RSOO);
- if (!def) {
- isc_throw(BadValue, "Can't find RSOO definition");
- }
- OptionPtr rsoo_container(new OptionCustom(*def, Option::V6));
+ const OptionDefinition& def = LibDHCP::D6O_RSOO_DEF();
+ OptionPtr rsoo_container(new OptionCustom(def, Option::V6));
for (size_t i = 0; i < codes.size(); ++i) {
OptionBuffer buf(10, payload ? payload : codes[i]); // let's make the option 10 bytes long
-// Copyright (C) 2019-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2019-2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
Pkt6Ptr query(new Pkt6(DHCPV6_SOLICIT, 12345));
Pkt6Ptr response(new Pkt6(DHCPV6_ADVERTISE, 12345));
- OptionDefinitionPtr def = isc::dhcp::LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_CLIENT_FQDN);
- OptionCustomPtr str(new OptionCustom(*def, Option::V6));
+ const OptionDefinition& def = LibDHCP::D6O_CLIENT_FQDN_DEF();
+ OptionCustomPtr str(new OptionCustom(def, Option::V6));
query->addOption(str);
EXPECT_FALSE(response->getOption(D6O_NEW_POSIX_TIMEZONE));
Pkt6Ptr query(new Pkt6(DHCPV6_SOLICIT, 12345));
Pkt6Ptr response(new Pkt6(DHCPV6_ADVERTISE, 12345));
- OptionDefinitionPtr def = isc::dhcp::LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_CLIENT_FQDN);
- OptionCustomPtr str(new OptionCustom(*def, Option::V6));
+ const OptionDefinition& def = LibDHCP::D6O_CLIENT_FQDN_DEF();
+ OptionCustomPtr str(new OptionCustom(def, Option::V6));
query->addOption(str);
EXPECT_FALSE(response->getOption(D6O_NEW_POSIX_TIMEZONE));
pkt4->setLocalHWAddr(generateHWAddr());
pkt4->setRemoteHWAddr(generateHWAddr());
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
-
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
uint8_t circuit_id[] = { 0x68, 0x6f, 0x77, 0x64, 0x79 };
OptionPtr circuit_id_opt(new Option(Option::V4, RAI_OPTION_AGENT_CIRCUIT_ID,
OPTION_DEF_PARAMS[i].size);
}
+ static_cast<void>(LibDHCP::DHO_DHCP_REQUESTED_ADDRESS_DEF());
+ static_cast<void>(LibDHCP::DHO_DHCP_SERVER_IDENTIFIER_DEF());
+ static_cast<void>(LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF());
+ static_cast<void>(LibDHCP::DHO_SUBNET_SELECTION_DEF());
+ static_cast<void>(LibDHCP::DHO_DOMAIN_SEARCH_DEF());
+ static_cast<void>(LibDHCP::DHO_STATUS_CODE_DEF());
+ static_cast<void>(LibDHCP::D6O_CLIENT_FQDN_DEF());
+ static_cast<void>(LibDHCP::D6O_LQ_QUERY_DEF());
+ static_cast<void>(LibDHCP::D6O_CLIENT_DATA_DEF());
+ static_cast<void>(LibDHCP::D6O_LQ_RELAY_DATA_DEF());
+ static_cast<void>(LibDHCP::D6O_BOOTFILE_URL_DEF());
+ static_cast<void>(LibDHCP::D6O_RSOO_DEF());
+
return (true);
}
static_cast<void>(defs->push_back(definition));
}
}
+
+const OptionDefinition&
+LibDHCP::DHO_DHCP_REQUESTED_ADDRESS_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP4_OPTION_SPACE, DHO_DHCP_REQUESTED_ADDRESS);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "dhcp-requested-address");
+ isc_throw_assert(def->getCode() == DHO_DHCP_REQUESTED_ADDRESS);
+ isc_throw_assert(def->getType() == OPT_IPV4_ADDRESS_TYPE);
+ isc_throw_assert(!def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace().empty());
+ isc_throw_assert(def->getOptionSpaceName() == DHCP4_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
+
+const OptionDefinition&
+LibDHCP::DHO_DHCP_SERVER_IDENTIFIER_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP4_OPTION_SPACE, DHO_DHCP_SERVER_IDENTIFIER);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "dhcp-server-identifier");
+ isc_throw_assert(def->getCode() == DHO_DHCP_SERVER_IDENTIFIER);
+ isc_throw_assert(def->getType() == OPT_IPV4_ADDRESS_TYPE);
+ isc_throw_assert(!def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace().empty());
+ isc_throw_assert(def->getOptionSpaceName() == DHCP4_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
+
+const OptionDefinition&
+LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP4_OPTION_SPACE, DHO_DHCP_AGENT_OPTIONS);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "dhcp-agent-options");
+ isc_throw_assert(def->getCode() == DHO_DHCP_AGENT_OPTIONS);
+ isc_throw_assert(def->getType() == OPT_EMPTY_TYPE);
+ isc_throw_assert(!def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace() == DHCP_AGENT_OPTION_SPACE);
+ isc_throw_assert(def->getOptionSpaceName() == DHCP4_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
+
+const OptionDefinition&
+LibDHCP::DHO_SUBNET_SELECTION_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP4_OPTION_SPACE, DHO_SUBNET_SELECTION);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "subnet-selection");
+ isc_throw_assert(def->getCode() == DHO_SUBNET_SELECTION);
+ isc_throw_assert(def->getType() == OPT_IPV4_ADDRESS_TYPE);
+ isc_throw_assert(!def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace().empty());
+ isc_throw_assert(def->getOptionSpaceName() == DHCP4_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
+
+const OptionDefinition&
+LibDHCP::DHO_DOMAIN_SEARCH_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP4_OPTION_SPACE, DHO_DOMAIN_SEARCH);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "domain-search");
+ isc_throw_assert(def->getCode() == DHO_DOMAIN_SEARCH);
+ isc_throw_assert(def->getType() == OPT_FQDN_TYPE);
+ isc_throw_assert(def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace().empty());
+ isc_throw_assert(def->getOptionSpaceName() == DHCP4_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
+
+const OptionDefinition&
+LibDHCP::DHO_STATUS_CODE_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP4_OPTION_SPACE, DHO_STATUS_CODE);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "status-code");
+ isc_throw_assert(def->getCode() == DHO_STATUS_CODE);
+ isc_throw_assert(def->getType() == OPT_RECORD_TYPE);
+ isc_throw_assert(!def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace().empty());
+ isc_throw_assert(def->getOptionSpaceName() == DHCP4_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
+
+const OptionDefinition&
+LibDHCP::D6O_CLIENT_FQDN_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_CLIENT_FQDN);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "client-fqdn");
+ isc_throw_assert(def->getCode() == D6O_CLIENT_FQDN);
+ isc_throw_assert(def->getType() == OPT_RECORD_TYPE);
+ isc_throw_assert(!def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace().empty());
+ isc_throw_assert(def->getOptionSpaceName() == DHCP6_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
+
+const OptionDefinition&
+LibDHCP::D6O_LQ_QUERY_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_LQ_QUERY);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "lq-query");
+ isc_throw_assert(def->getCode() == D6O_LQ_QUERY);
+ isc_throw_assert(def->getType() == OPT_RECORD_TYPE);
+ isc_throw_assert(!def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace() == DHCP6_OPTION_SPACE);
+ isc_throw_assert(def->getOptionSpaceName() == DHCP6_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
+
+const OptionDefinition&
+LibDHCP::D6O_CLIENT_DATA_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_CLIENT_DATA);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "client-data");
+ isc_throw_assert(def->getCode() == D6O_CLIENT_DATA);
+ isc_throw_assert(def->getType() == OPT_EMPTY_TYPE);
+ isc_throw_assert(!def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace() == DHCP6_OPTION_SPACE);
+ isc_throw_assert(def->getOptionSpaceName() == DHCP6_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
+
+const OptionDefinition&
+LibDHCP::D6O_LQ_RELAY_DATA_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_LQ_RELAY_DATA);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "lq-relay-data");
+ isc_throw_assert(def->getCode() == D6O_LQ_RELAY_DATA);
+ isc_throw_assert(def->getType() == OPT_RECORD_TYPE);
+ isc_throw_assert(!def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace().empty());
+ isc_throw_assert(def->getOptionSpaceName() == DHCP6_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
+
+const OptionDefinition&
+LibDHCP::D6O_BOOTFILE_URL_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_BOOTFILE_URL);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "bootfile-url");
+ isc_throw_assert(def->getCode() == D6O_BOOTFILE_URL);
+ isc_throw_assert(def->getType() == OPT_STRING_TYPE);
+ isc_throw_assert(!def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace().empty());
+ isc_throw_assert(def->getOptionSpaceName() == DHCP6_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
+
+const OptionDefinition&
+LibDHCP::D6O_RSOO_DEF() {
+ static OptionDefinitionPtr def =
+ LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_RSOO);
+ static bool check_once(true);
+ if (check_once) {
+ isc_throw_assert(def);
+ isc_throw_assert(def->getName() == "rsoo");
+ isc_throw_assert(def->getCode() == D6O_RSOO);
+ isc_throw_assert(def->getType() == OPT_EMPTY_TYPE);
+ isc_throw_assert(!def->getArrayType());
+ isc_throw_assert(def->getEncapsulatedSpace() == "rsoo-opts");
+ isc_throw_assert(def->getOptionSpaceName() == DHCP6_OPTION_SPACE);
+ check_once = false;
+ }
+ return (*def);
+}
-// Copyright (C) 2011-2023 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2011-2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
/// @return vendor id.
static uint32_t optionSpaceToVendorId(const std::string& option_space);
+ /// @brief Get definition of DHO_DHCP_REQUESTED_ADDRESS option.
+ static const OptionDefinition& DHO_DHCP_REQUESTED_ADDRESS_DEF();
+
+ /// @brief Get definition of DHO_DHCP_SERVER_IDENTIFIER option.
+ static const OptionDefinition& DHO_DHCP_SERVER_IDENTIFIER_DEF();
+
+ /// @brief Get definition of DHO_DHCP_AGENT_OPTIONS option.
+ static const OptionDefinition& DHO_DHCP_AGENT_OPTIONS_DEF();
+
+ /// @brief Get definition of DHO_SUBNET_SELECTION option.
+ static const OptionDefinition& DHO_SUBNET_SELECTION_DEF();
+
+ /// @brief Get definition of DHO_DOMAIN_SEARCH option.
+ static const OptionDefinition& DHO_DOMAIN_SEARCH_DEF();
+
+ /// @brief Get definition of DHO_STATUS_CODE option.
+ static const OptionDefinition& DHO_STATUS_CODE_DEF();
+
+ /// @brief Get definition of D6O_CLIENT_FQDN option.
+ static const OptionDefinition& D6O_CLIENT_FQDN_DEF();
+
+ /// @brief Get definition of D6O_LQ_QUERY option.
+ static const OptionDefinition& D6O_LQ_QUERY_DEF();
+
+ /// @brief Get definition of D6O_CLIENT_DATA option.
+ static const OptionDefinition& D6O_CLIENT_DATA_DEF();
+
+ /// @brief Get definition of D6O_LQ_RELAY_DATA option.
+ static const OptionDefinition& D6O_LQ_RELAY_DATA_DEF();
+
+ /// @brief Get definition of D6O_BOOTFILE_URL option.
+ static const OptionDefinition& D6O_BOOTFILE_URL_DEF();
+
+ /// @brief Get definition of D6O_RSOO option.
+ static const OptionDefinition& D6O_RSOO_DEF();
+
private:
/// Initialize DHCP option definitions.
// every suboption is smaller than 255 bytes, but the parent option still
// overflows.
TEST_F(LibDhcpTest, splitOptionWithSuboptionWhichOverflow) {
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def);
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
// Create RAI options which should be fused by the server.
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
// Create a buffer holding some binary data. This data will be
// used as reference when we read back the data from a created
// every suboption is smaller than 255 bytes, but the parent option still
// overflows.
TEST_F(LibDhcpTest, splitOptionWithSuboptionWhichOverflowMultiThreading) {
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def);
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
// Create RAI options which should be fused by the server.
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
// Create a buffer holding some binary data. This data will be
// used as reference when we read back the data from a created
// This test verifies that split options for v4 is working correctly.
TEST_F(LibDhcpTest, splitLongOptionWithLongSuboption) {
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def);
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
// Create RAI options which should be fused by the server.
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
// Create a buffer holding some binary data. This data will be
// used as reference when we read back the data from a created
// This test verifies that split options for v4 is working correctly.
TEST_F(LibDhcpTest, splitLongOptionWithLongSuboptionMultiThreading) {
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def);
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
// Create RAI options which should be fused by the server.
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
// Create a buffer holding some binary data. This data will be
// used as reference when we read back the data from a created
TEST_F(LibDhcpTest, fuseLongOptionWithLongSuboption) {
OptionCollection col;
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def);
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
// Create RAI options which should be fused by the server.
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
for (uint32_t i = 0; i < 256; ++i) {
// Create a buffer holding some binary data. This data will be
// Get the option definition for RAI option. This option is represented
// by OptionCustom which requires a definition to be passed to
// the constructor.
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def);
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
// Create RAI option.
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4));
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4));
// The sub-options are created using the bits of v4_opts buffer because
// we want to use this buffer as a reference to verify that produced
// This test checks handling of uncompressed FQDN list.
TEST_F(LibDhcpTest, fqdnList) {
- OptionDefinitionPtr def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DOMAIN_SEARCH);
- ASSERT_TRUE(def);
-
+ const OptionDefinition& def = LibDHCP::DHO_DOMAIN_SEARCH_DEF();
// Prepare buffer holding an array of FQDNs.
const uint8_t fqdn[] = {
8, 109, 121, 100, 111, 109, 97, 105, 110, // "mydomain"
std::vector<uint8_t> fqdn_buf(fqdn, fqdn + sizeof(fqdn));
OptionPtr option;
- ASSERT_NO_THROW(option = def->optionFactory(Option::V4,
- DHO_DOMAIN_SEARCH,
- fqdn_buf.begin(),
- fqdn_buf.end()));
+ ASSERT_NO_THROW(option = def.optionFactory(Option::V4,
+ DHO_DOMAIN_SEARCH,
+ fqdn_buf.begin(),
+ fqdn_buf.end()));
ASSERT_TRUE(option);
OptionCustomPtr names = boost::dynamic_pointer_cast<OptionCustom>(option);
ASSERT_TRUE(names);
// See RFC3397, section 2 (and 4.1.4 of RFC1035 for the actual
// compression algorithm).
TEST_F(LibDhcpTest, fqdnListCompressed) {
- OptionDefinitionPtr def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DOMAIN_SEARCH);
- ASSERT_TRUE(def);
-
+ const OptionDefinition& def = LibDHCP::DHO_DOMAIN_SEARCH_DEF();
const uint8_t compressed[] = {
8, 109, 121, 100, 111, 109, 97, 105, 110, // "mydomain"
7, 101, 120, 97, 109, 112, 108, 101, // "example"
std::vector<uint8_t> compressed_buf(compressed,
compressed + sizeof(compressed));
OptionPtr option;
- ASSERT_NO_THROW(option = def->optionFactory(Option::V4,
- DHO_DOMAIN_SEARCH,
- compressed_buf.begin(),
- compressed_buf.end()));
+ ASSERT_NO_THROW(option = def.optionFactory(Option::V4,
+ DHO_DOMAIN_SEARCH,
+ compressed_buf.begin(),
+ compressed_buf.end()));
ASSERT_TRUE(option);
OptionCustomPtr names = boost::dynamic_pointer_cast<OptionCustom>(option);
ASSERT_TRUE(names);
// See RFC3397, section 2 (and 4.1.4 of RFC1035 for the actual
// compression algorithm).
TEST_F(LibDhcpTest, fqdnListBad) {
- OptionDefinitionPtr def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DOMAIN_SEARCH);
- ASSERT_TRUE(def);
-
+ const OptionDefinition& def = LibDHCP::DHO_DOMAIN_SEARCH_DEF();
const uint8_t bad[] = {
8, 109, 121, 100, 111, 109, 97, 105, 110, // "mydomain"
7, 101, 120, 97, 109, 112, 108, 101, // "example"
std::vector<uint8_t> bad_buf(bad, bad + sizeof(bad));
OptionPtr option;
- EXPECT_THROW(option = def->optionFactory(Option::V4,
- DHO_DOMAIN_SEARCH,
- bad_buf.begin(),
- bad_buf.end()),
+ EXPECT_THROW(option = def.optionFactory(Option::V4,
+ DHO_DOMAIN_SEARCH,
+ bad_buf.begin(),
+ bad_buf.end()),
InvalidOptionValue);
}
// Check that empty (truncated) option is rejected.
TEST_F(LibDhcpTest, fqdnListTrunc) {
- OptionDefinitionPtr def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DOMAIN_SEARCH);
- ASSERT_TRUE(def);
+ const OptionDefinition& def = LibDHCP::DHO_DOMAIN_SEARCH_DEF();
std::vector<uint8_t> empty;
OptionPtr option;
- EXPECT_THROW(option = def->optionFactory(Option::V4,
- DHO_DOMAIN_SEARCH,
- empty.begin(),
- empty.end()),
+ EXPECT_THROW(option = def.optionFactory(Option::V4,
+ DHO_DOMAIN_SEARCH,
+ empty.begin(),
+ empty.end()),
InvalidOptionValue);
}
// and unpacked correctly.
TEST_F(Pkt6Test, lqQueryOption) {
- OptionDefinitionPtr def = LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_LQ_QUERY);
- ASSERT_TRUE(def) << "D6O_LQ_QUERY is not undefined";
-
- OptionCustomPtr lq_option(new OptionCustom(*def, Option::V6));
+ const OptionDefinition& def = LibDHCP::D6O_LQ_QUERY_DEF();
+ OptionCustomPtr lq_option(new OptionCustom(def, Option::V6));
ASSERT_TRUE(lq_option);
// Add query type (77 is technically not valid but better visually).
// and unpacked correctly.
TEST_F(Pkt6Test, clientDataOption) {
- OptionDefinitionPtr def = LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_CLIENT_DATA);
- ASSERT_TRUE(def) << "D6O_CLIENT_DATA is not undefined";
+ const OptionDefinition& def = LibDHCP::D6O_CLIENT_DATA_DEF();
- OptionCustomPtr cd_option(new OptionCustom(*def, Option::V6));
+ OptionCustomPtr cd_option(new OptionCustom(def, Option::V6));
ASSERT_TRUE(cd_option);
// Now add supported sub-options: D6O_CLIENTID, D6O_IAADR, D6O_IAAPREFIX,
// This test verifies that D6O_LQ_RELAY_DATA options can be created, packed,
// and unpacked correctly.
TEST_F(Pkt6Test, relayDataOption) {
- OptionDefinitionPtr def = LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_LQ_RELAY_DATA);
- ASSERT_TRUE(def) << "D6O_LQ_RELAY_DATA is not undefined";
+ const OptionDefinition& def = LibDHCP::D6O_LQ_RELAY_DATA_DEF();
- OptionCustomPtr rd_option(new OptionCustom(*def, Option::V6));
+ OptionCustomPtr rd_option(new OptionCustom(def, Option::V6));
ASSERT_TRUE(rd_option);
// Write out the peer address.
bool
LeaseMgr::upgradeLease4ExtendedInfo(const Lease4Ptr& lease,
CfgConsistency::ExtendedInfoSanity check) {
- static OptionDefinitionPtr rai_def;
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
bool changed = false;
if (!lease) {
return (changed);
}
- if (!rai_def) {
- rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- }
-
- if (!rai_def) {
- // The definition is set when libdhcp++ is loaded so it is impossible
- // to not be able to get it... so should not happen!
- isc_throw(Unexpected, "can't find RAI option definition?!");
- }
-
ConstElementPtr isc;
ConstElementPtr extended_info;
ElementPtr mutable_user_context;
string rai_hex = extended_info->stringValue();
vector<uint8_t> rai_data;
str::decodeFormattedHexString(rai_hex, rai_data);
- OptionCustomPtr rai(new OptionCustom(*rai_def, Option::V4, rai_data));
+ OptionCustomPtr rai(new OptionCustom(rai_def, Option::V4, rai_data));
if (!rai) {
isc_throw(BadValue, "can't create RAI option");
}
std::vector<uint8_t> opt_data;
ASSERT_NO_THROW(util::str::decodeFormattedHexString(scenario.rai_data_, opt_data))
<< "scenario.rai_data_ is invalid, test is broken";
- OptionDefinitionPtr rai_def =
- LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def) << "could not get RAI definition, test is broken";
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
ASSERT_GT(opt_data.size(), 2);
ASSERT_EQ(DHO_DHCP_AGENT_OPTIONS, opt_data[0]);
ASSERT_EQ(opt_data[1] + 2, opt_data.size());
std::vector<uint8_t> rai_data(opt_data.cbegin() + 2,
opt_data.cend());
OptionCustomPtr rai;
- ASSERT_NO_THROW(rai.reset(new OptionCustom(*rai_def, Option::V4,
+ ASSERT_NO_THROW(rai.reset(new OptionCustom(rai_def, Option::V4,
rai_data)))
<< "could not create rai option, test is broken";
ctx.query_->addOption(rai);
std::string rai_str = "0104aabbccdd";
std::vector<uint8_t> rai_data;
ASSERT_NO_THROW(util::str::decodeFormattedHexString(rai_str, rai_data));
- OptionDefinitionPtr rai_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_AGENT_OPTIONS);
- ASSERT_TRUE(rai_def);
+ const OptionDefinition& rai_def = LibDHCP::DHO_DHCP_AGENT_OPTIONS_DEF();
OptionCustomPtr rai;
- ASSERT_NO_THROW(rai.reset(new OptionCustom(*rai_def, Option::V4, rai_data)));
+ ASSERT_NO_THROW(rai.reset(new OptionCustom(rai_def, Option::V4, rai_data)));
ctx.query_->addOption(rai);
// Verifies that the RAI is saved into lease extended info.
// Initially, there is no server identifier option present.
EXPECT_FALSE(cfg.hasSubnetWithServerId(IOAddress("1.2.3.4")));
- OptionDefinitionPtr def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_SERVER_IDENTIFIER);
- OptionCustomPtr opt_server_id(new OptionCustom(*def, Option::V4));
+ const OptionDefinition& def = LibDHCP::DHO_DHCP_SERVER_IDENTIFIER_DEF();
+ OptionCustomPtr opt_server_id(new OptionCustom(def, Option::V4));
opt_server_id->writeAddress(IOAddress("1.2.3.4"));
Subnet4Ptr subnet(new Subnet4(IOAddress("192.0.2.0"), 26, 1, 2, 3, 100));
subnet->getCfgOption()->add(opt_server_id, false, false,
// Verifies that parsing an option which encapsulates its own option space
// is detected.
TEST_F(ParseConfigTest, selfEncapsulationTest) {
- // Verify that the option definition can be retrieved.
- OptionDefinitionPtr def = LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_CLIENT_DATA);
- ASSERT_TRUE(def);
-
// Configuration string.
std::string config =
"{"
EXPECT_TRUE(subnet.getServerId().isV4Zero());
// Add server identifier.
- OptionDefinitionPtr option_def = LibDHCP::getOptionDef(DHCP4_OPTION_SPACE,
- DHO_DHCP_SERVER_IDENTIFIER);
- OptionCustomPtr option_server_id(new OptionCustom(*option_def, Option::V4));
+ const OptionDefinition& option_def = LibDHCP::DHO_DHCP_SERVER_IDENTIFIER_DEF();
+ OptionCustomPtr option_server_id(new OptionCustom(option_def, Option::V4));
option_server_id->writeAddress(IOAddress("1.2.3.4"));
CfgOptionPtr cfg_option = subnet.getCfgOption();