// Create option one replacement and add it to first backend.
OptionDefinitionPtr def;
- def.reset(new OptionDefinition("one", 101, "uint16"));
- def->setOptionSpaceName("isc");
+ def.reset(new OptionDefinition("one", 101, "isc", "uint16"));
db1_->createUpdateOptionDef4(ServerSelector::ALL(), def);
// Create option three and add it to first backend.
- def.reset(new OptionDefinition("three", 3, "string"));
- def->setOptionSpaceName("isc");
+ def.reset(new OptionDefinition("three", 3, "isc", "string"));
db1_->createUpdateOptionDef4(ServerSelector::ALL(), def);
// Create option four and add it to second backend.
- def.reset(new OptionDefinition("four", 4, "string"));
- def->setOptionSpaceName("isc");
+ def.reset(new OptionDefinition("four", 4, "isc", "string"));
db2_->createUpdateOptionDef4(ServerSelector::ALL(), def);
// Should parse and merge without error.
// should override it, but when the new configuration fails, it should
// revert to this original configuration.
OptionDefSpaceContainer defs;
- OptionDefinitionPtr def(new OptionDefinition("bar", 233, "string"));
+ OptionDefinitionPtr def(new OptionDefinition("bar", 233, "isc", "string"));
defs.addItem(def, "isc");
LibDHCP::setRuntimeOptionDefs(defs);
LibDHCP::commitRuntimeOptionDefs();
// Create definition of the server identifier option.
OptionDefinition def("server-identifier", DHO_DHCP_SERVER_IDENTIFIER,
- "ipv4-address", false);
+ DHCP4_OPTION_SPACE, "ipv4-address", false);
// Add a server identifier option which doesn't match server ids being
// used by the server. The accepted server ids are the IPv4 addresses
ASSERT_NO_THROW(subnet_->getCfgOption()->add(option_dns_servers, false, DHCP4_OPTION_SPACE));
// domain-name
- OptionDefinition def("domain-name", DHO_DOMAIN_NAME, OPT_FQDN_TYPE);
+ OptionDefinition def("domain-name", DHO_DOMAIN_NAME, DHCP4_OPTION_SPACE,
+ OPT_FQDN_TYPE);
OptionCustomPtr option_domain_name(new OptionCustom(def, Option::V4));
option_domain_name->writeFqdn("example.com");
subnet_->getCfgOption()->add(option_domain_name, false, DHCP4_OPTION_SPACE);
// Create option one replacement and add it to first backend.
OptionDefinitionPtr def;
- def.reset(new OptionDefinition("one", 101, "uint16"));
- def->setOptionSpaceName("isc");
+ def.reset(new OptionDefinition("one", 101, "isc", "uint16"));
db1_->createUpdateOptionDef6(ServerSelector::ALL(), def);
// Create option three and add it to first backend.
- def.reset(new OptionDefinition("three", 3, "string"));
- def->setOptionSpaceName("isc");
+ def.reset(new OptionDefinition("three", 3, "isc", "string"));
db1_->createUpdateOptionDef6(ServerSelector::ALL(), def);
// Create option four and add it to second backend.
- def.reset(new OptionDefinition("four", 4, "string"));
- def->setOptionSpaceName("isc");
+ def.reset(new OptionDefinition("four", 4, "isc", "string"));
db2_->createUpdateOptionDef6(ServerSelector::ALL(), def);
// Should parse and merge without error.
// should override it, but when the new configuration fails, it should
// revert to this original configuration.
OptionDefSpaceContainer defs;
- OptionDefinitionPtr def(new OptionDefinition("bar", 233, "string"));
+ OptionDefinitionPtr def(new OptionDefinition("bar", 233, "isc", "string"));
defs.addItem(def, "isc");
LibDHCP::setRuntimeOptionDefs(defs);
LibDHCP::commitRuntimeOptionDefs();
// Verify that the name can be an user defined option.
TEST_F(FlexOptionTest, optionConfigDefinedName) {
OptionDefSpaceContainer defs;
- OptionDefinitionPtr def(new OptionDefinition("my-option", 222, "string"));
+ OptionDefinitionPtr def(new OptionDefinition("my-option", 222,
+ DHCP4_OPTION_SPACE, "string"));
defs.addItem(def, DHCP4_OPTION_SPACE);
EXPECT_NO_THROW(LibDHCP::setRuntimeOptionDefs(defs));
Pkt6Ptr response(new Pkt6(DHCPV6_ADVERTISE, 12345));
OptionStringPtr str(new OptionString(Option::V6, D6O_BOOTFILE_URL, "http"));
response->addOption(str);
- OptionDefinition def("domain-name", D6O_DOMAIN_SEARCH, OPT_FQDN_TYPE);
+ OptionDefinition def("domain-name", D6O_DOMAIN_SEARCH, DHCP6_OPTION_SPACE,
+ OPT_FQDN_TYPE);
OptionCustomPtr option_domain_name(new OptionCustom(def, Option::V6));
option_domain_name->writeFqdn("old.example.com");
response->addOption(option_domain_name);
// Create array option.
last_def = OptionDefinition::create(out_bindings[2]->getString(),
out_bindings[1]->getInteger<uint16_t>(),
+ out_bindings[3]->getString(),
static_cast<OptionDataType>
(out_bindings[4]->getInteger<uint8_t>()),
array_type);
// Create non-array option.
last_def = OptionDefinition::create(out_bindings[2]->getString(),
out_bindings[1]->getInteger<uint16_t>(),
+ out_bindings[3]->getString(),
static_cast<OptionDataType>
(out_bindings[4]->getInteger<uint8_t>()),
out_bindings[7]->getStringOrDefault("").c_str());
}
- // space
- last_def->setOptionSpaceName(out_bindings[3]->getStringOrDefault(""));
-
// id
last_def->setId(last_def_id);
MySqlBindingCollection in_bindings = {
MySqlBinding::createInteger<uint16_t>(option_def->getCode()),
MySqlBinding::createString(option_def->getName()),
- MySqlBinding::createString(option_def->getOptionSpaceName().empty() ?
- space : option_def->getOptionSpaceName()),
+ MySqlBinding::createString(option_def->getOptionSpaceName()),
MySqlBinding::createInteger<uint8_t>(static_cast<uint8_t>(option_def->getType())),
MySqlBinding::createTimestamp(option_def->getModificationTime()),
MySqlBinding::createBool(option_def->getArrayType()),
ElementPtr user_context = Element::createMap();
user_context->set("foo", Element::create("bar"));
- OptionDefinitionPtr option_def(new OptionDefinition("foo", 234, "string",
+ OptionDefinitionPtr option_def(new OptionDefinition("foo", 234,
+ DHCP4_OPTION_SPACE,
+ "string",
"espace"));
- option_def->setOptionSpaceName(DHCP4_OPTION_SPACE);
test_option_defs_.push_back(option_def);
- option_def.reset(new OptionDefinition("bar", 234, "uint32", true));
- option_def->setOptionSpaceName(DHCP4_OPTION_SPACE);
+ option_def.reset(new OptionDefinition("bar", 234, DHCP4_OPTION_SPACE,
+ "uint32", true));
test_option_defs_.push_back(option_def);
- option_def.reset(new OptionDefinition("fish", 235, "record", true));
- option_def->setOptionSpaceName(DHCP4_OPTION_SPACE);
+ option_def.reset(new OptionDefinition("fish", 235, DHCP4_OPTION_SPACE,
+ "record", true));
option_def->addRecordField("uint32");
option_def->addRecordField("string");
test_option_defs_.push_back(option_def);
- option_def.reset(new OptionDefinition("whale", 236, "string"));
- option_def->setOptionSpaceName("xyz");
+ option_def.reset(new OptionDefinition("whale", 236, "xyz", "string"));
test_option_defs_.push_back(option_def);
- option_def.reset(new OptionDefinition("foobar", 234, "uint64", true));
- option_def->setOptionSpaceName(DHCP4_OPTION_SPACE);
+ option_def.reset(new OptionDefinition("foobar", 234, DHCP4_OPTION_SPACE,
+ "uint64", true));
test_option_defs_.push_back(option_def);
}
// the @c toElement functions require option definitions to generate the
// proper output.
defs.addItem(OptionDefinitionPtr(new OptionDefinition(
- "vendor-encapsulated-1", 1, "uint32")),
+ "vendor-encapsulated-1", 1,
+ "vendor-encapsulated-options", "uint32")),
"vendor-encapsulated-options");
defs.addItem(OptionDefinitionPtr(new OptionDefinition(
- "option-254", 254, "ipv4-address", true)),
+ "option-254", 254, DHCP4_OPTION_SPACE,
+ "ipv4-address", true)),
DHCP4_OPTION_SPACE);
- defs.addItem(OptionDefinitionPtr(new OptionDefinition("isc-1", 1, "empty")), "isc");
- defs.addItem(OptionDefinitionPtr(new OptionDefinition("isc-2", 2, "ipv4-address", true)),
+ defs.addItem(OptionDefinitionPtr(new OptionDefinition(
+ "isc-1", 1, "isc", "empty")),
+ "isc");
+ defs.addItem(OptionDefinitionPtr(new OptionDefinition(
+ "isc-2", 2, "isc", "ipv4-address", true)),
"isc");
// Register option definitions.
ElementPtr user_context = Element::createMap();
user_context->set("foo", Element::create("bar"));
- OptionDefinitionPtr option_def(new OptionDefinition("foo", 1234, "string",
+ OptionDefinitionPtr option_def(new OptionDefinition("foo", 1234,
+ DHCP6_OPTION_SPACE,
+ "string",
"espace"));
- option_def->setOptionSpaceName(DHCP6_OPTION_SPACE);
test_option_defs_.push_back(option_def);
- option_def.reset(new OptionDefinition("bar", 1234, "uint32", true));
- option_def->setOptionSpaceName(DHCP6_OPTION_SPACE);
+ option_def.reset(new OptionDefinition("bar", 1234, DHCP6_OPTION_SPACE,
+ "uint32", true));
test_option_defs_.push_back(option_def);
- option_def.reset(new OptionDefinition("fish", 5235, "record", true));
- option_def->setOptionSpaceName(DHCP6_OPTION_SPACE);
+ option_def.reset(new OptionDefinition("fish", 5235, DHCP6_OPTION_SPACE,
+ "record", true));
option_def->addRecordField("uint32");
option_def->addRecordField("string");
test_option_defs_.push_back(option_def);
- option_def.reset(new OptionDefinition("whale", 20236, "string"));
- option_def->setOptionSpaceName("xyz");
+ option_def.reset(new OptionDefinition("whale", 20236, "xyz", "string"));
test_option_defs_.push_back(option_def);
- option_def.reset(new OptionDefinition("bar", 1234, "uint64", true));
- option_def->setOptionSpaceName(DHCP6_OPTION_SPACE);
+ option_def.reset(new OptionDefinition("bar", 1234, DHCP6_OPTION_SPACE,
+ "uint64", true));
test_option_defs_.push_back(option_def);
}
// the @c toElement functions require option definitions to generate the
// proper output.
defs.addItem(OptionDefinitionPtr(new OptionDefinition(
- "vendor-encapsulated-1", 1, "uint32")),
+ "vendor-encapsulated-1", 1,
+ "vendor-encapsulated-options", "uint32")),
"vendor-encapsulated-options");
defs.addItem(OptionDefinitionPtr(new OptionDefinition(
- "option-1254", 1254, "ipv6-address", true)),
+ "option-1254", 1254, DHCP6_OPTION_SPACE,
+ "ipv6-address", true)),
DHCP6_OPTION_SPACE);
- defs.addItem(OptionDefinitionPtr(new OptionDefinition("isc-1", 1, "empty")), "isc");
- defs.addItem(OptionDefinitionPtr(new OptionDefinition("isc-2", 2, "ipv6-address", true)),
+ defs.addItem(OptionDefinitionPtr(new OptionDefinition(
+ "isc-1", 1, "isc", "empty")),
+ "isc");
+ defs.addItem(OptionDefinitionPtr(new OptionDefinition(
+ "isc-2", 2, "isc", "ipv6-address", true)),
"isc");
// Register option definitions.
<< option_def->getPosition() << ")");
} else {
- def.reset(new OptionDefinition(name, code, type,
+ def.reset(new OptionDefinition(name, code, space, type,
encapsulates.c_str()));
}
} else {
- def.reset(new OptionDefinition(name, code, type, array_type));
+ def.reset(new OptionDefinition(name, code, space, type, array_type));
}
global_parameter));
// Insert option definitions into the database.
- OptionDefinitionPtr def(new OptionDefinition("one", 101, "uint16"));
+ OptionDefinitionPtr def(new OptionDefinition("one", 101, "isc", "uint16"));
def->setId(1);
- def->setOptionSpaceName("isc");
def->setModificationTime(getTimestamp("dhcp4_option_def"));
ASSERT_NO_THROW(mgr.getPool()->createUpdateOptionDef4(BackendSelector::UNSPEC(),
ServerSelector::ALL(),
def));
- def.reset(new OptionDefinition("two", 102, "uint16"));
+ def.reset(new OptionDefinition("two", 102, "isc", "uint16"));
def->setId(2);
- def->setOptionSpaceName("isc");
def->setModificationTime(getTimestamp("dhcp4_option_def"));
ASSERT_NO_THROW(mgr.getPool()->createUpdateOptionDef4(BackendSelector::UNSPEC(),
ServerSelector::ALL(),
global_parameter));
// Insert option definitions into the database.
- OptionDefinitionPtr def(new OptionDefinition("one", 101, "uint16"));
+ OptionDefinitionPtr def(new OptionDefinition("one", 101, "isc", "uint16"));
def->setId(1);
- def->setOptionSpaceName("isc");
def->setModificationTime(getTimestamp("dhcp6_option_def"));
ASSERT_NO_THROW(mgr.getPool()->createUpdateOptionDef6(BackendSelector::UNSPEC(),
ServerSelector::ALL(),
def));
- def.reset(new OptionDefinition("two", 102, "uint16"));
+ def.reset(new OptionDefinition("two", 102, "isc", "uint16"));
def->setId(2);
- def->setOptionSpaceName("isc");
def->setModificationTime(getTimestamp("dhcp6_option_def"));
ASSERT_NO_THROW(mgr.getPool()->createUpdateOptionDef6(BackendSelector::UNSPEC(),
ServerSelector::ALL(),
ASSERT_FALSE(cfg1 != cfg2);
// Let's add the same option but to two different option spaces.
- cfg1.add(OptionDefinitionPtr(new OptionDefinition("option-foo",
- 5, "uint16")), "isc");
- cfg2.add(OptionDefinitionPtr(new OptionDefinition("option-foo",
- 5, "uint16")), "dns");
+ cfg1.add(OptionDefinitionPtr(new OptionDefinition("option-foo", 5, "isc",
+ "uint16")), "isc");
+ cfg2.add(OptionDefinitionPtr(new OptionDefinition("option-foo", 5, "dns",
+ "uint16")), "dns");
// Configurations must be unequal.
ASSERT_FALSE(cfg1 == cfg2);
ASSERT_TRUE(cfg1 != cfg2);
// Now, let's add them again but to original option spaces. Both objects
// should now contain the same options under two option spaces. The
// order should not matter so configurations should be equal.
- cfg1.add(OptionDefinitionPtr(new OptionDefinition("option-foo",
- 5, "uint16")), "dns");
- cfg2.add(OptionDefinitionPtr(new OptionDefinition("option-foo",
- 5, "uint16")), "isc");
+ cfg1.add(OptionDefinitionPtr(new OptionDefinition("option-foo", 5, "dns",
+ "uint16")), "dns");
+ cfg2.add(OptionDefinitionPtr(new OptionDefinition("option-foo", 5, "isc",
+ "uint16")), "isc");
EXPECT_TRUE(cfg1 == cfg2);
EXPECT_FALSE(cfg1 != cfg2);
// Option name is unique, e.g. option-100, option-101 etc.
option_name << "option-" << code;
OptionDefinitionPtr def(new OptionDefinition(option_name.str(), code,
- "uint16"));
+ "isc", "uint16"));
// We're setting id of 123 for all option definitions in this
// code range.
def->setId(123);
std::ostringstream option_name;
option_name << "option-" << code;
OptionDefinitionPtr def(new OptionDefinition(option_name.str(), code,
- "uint16"));
+ "abcde", "uint16"));
// We're setting id of 234 for all option definitions in this
// code range.
def->setId(234);
// Option name is unique, e.g. option-100, option-101 etc.
option_name << "option-" << code;
OptionDefinitionPtr def(new OptionDefinition(option_name.str(), code,
- "uint16"));
+ "isc", "uint16"));
// Add option definition to "isc" option space.
// Option codes are not duplicated so expect no error
// when adding them.
std::ostringstream option_name;
option_name << "option-other-" << code;
OptionDefinitionPtr def(new OptionDefinition(option_name.str(), code,
- "uint16"));
+ "abcde", "uint16"));
ASSERT_NO_THROW(cfg.add(def, "abcde"));
}
// Check that an option definition can be added to the standard
// (dhcp4 and dhcp6) option spaces when the option code is not
// reserved by the standard option.
- OptionDefinitionPtr def6(new OptionDefinition("option-foo", 1000, "uint16"));
+ OptionDefinitionPtr def6(new OptionDefinition("option-foo", 1000,
+ DHCP6_OPTION_SPACE,
+ "uint16"));
EXPECT_NO_THROW(cfg.add(def6, DHCP6_OPTION_SPACE));
- OptionDefinitionPtr def4(new OptionDefinition("option-foo", 222, "uint16"));
+ OptionDefinitionPtr def4(new OptionDefinition("option-foo", 222,
+ DHCP4_OPTION_SPACE,
+ "uint16"));
EXPECT_NO_THROW(cfg.add(def4, DHCP4_OPTION_SPACE));
// Try to query the option definition from an non-existing
OptionDefinitionPtr def;
// There is a definition for routers option in libdhcp++, so an attempt
// to add (override) another definition for this option should fail.
- def.reset(new OptionDefinition("routers", DHO_ROUTERS, "uint32"));
+ def.reset(new OptionDefinition("routers", DHO_ROUTERS,
+ DHCP4_OPTION_SPACE, "uint32"));
EXPECT_THROW(cfg.add(def, DHCP4_OPTION_SPACE), isc::BadValue);
// Check code duplicate (same code, different name).
- def.reset(new OptionDefinition("routers-bis", DHO_ROUTERS, "uint32"));
+ def.reset(new OptionDefinition("routers-bis", DHO_ROUTERS,
+ DHCP4_OPTION_SPACE, "uint32"));
EXPECT_THROW(cfg.add(def, DHCP4_OPTION_SPACE), isc::BadValue);
// Check name duplicate (different code, same name).
- def.reset(new OptionDefinition("routers", 170, "uint32"));
+ def.reset(new OptionDefinition("routers", 170, DHCP4_OPTION_SPACE,
+ "uint32"));
EXPECT_THROW(cfg.add(def, DHCP4_OPTION_SPACE), isc::BadValue);
/// There is no definition for unassigned option 170.
- def.reset(new OptionDefinition("unassigned-option-170", 170, "string"));
+ def.reset(new OptionDefinition("unassigned-option-170", 170,
+ DHCP4_OPTION_SPACE, "string"));
EXPECT_NO_THROW(cfg.add(def, DHCP4_OPTION_SPACE));
// It is not allowed to override the definition of the option which
// has its definition in the libdhcp++.
def.reset(new OptionDefinition("sntp-servers", D6O_SNTP_SERVERS,
- "ipv4-address"));
+ DHCP6_OPTION_SPACE, "ipv4-address"));
EXPECT_THROW(cfg.add(def, DHCP6_OPTION_SPACE), isc::BadValue);
// There is no definition for option 163 in libdhcp++ yet, so it should
// be possible provide a custom definition.
- def.reset(new OptionDefinition("geolocation", 163, "uint32"));
+ def.reset(new OptionDefinition("geolocation", 163, DHCP6_OPTION_SPACE,
+ "uint32"));
EXPECT_NO_THROW(cfg.add(def, DHCP6_OPTION_SPACE));
}
TEST(CfgOptionDefTest, addNegative) {
CfgOptionDef cfg;
- OptionDefinitionPtr def(new OptionDefinition("option-foo", 1000, "uint16"));
+ OptionDefinitionPtr def(new OptionDefinition("option-foo", 1000, "isc",
+ "uint16"));
// Try empty option space name.
ASSERT_THROW(cfg.add(def, ""), isc::BadValue);
// Add some options.
cfg.add(OptionDefinitionPtr(new
- OptionDefinition("option-foo", 5, "uint16")), "isc");
+ OptionDefinition("option-foo", 5, "isc", "uint16")), "isc");
cfg.add(OptionDefinitionPtr(new
- OptionDefinition("option-bar", 5, "uint16", true)), "dns");
+ OptionDefinition("option-bar", 5, "dns", "uint16", true)), "dns");
cfg.add(OptionDefinitionPtr(new
- OptionDefinition("option-baz", 6, "uint16", "dns")), "isc");
- OptionDefinitionPtr rec(new OptionDefinition("option-rec", 6, "record"));
+ OptionDefinition("option-baz", 6, "isc", "uint16", "dns")), "isc");
+ OptionDefinitionPtr rec(new OptionDefinition("option-rec", 6, "dns", "record"));
std::string json = "{ \"comment\": \"foo\", \"bar\": 1 }";
rec->setContext(data::Element::fromJSON(json));
rec->addRecordField("uint16");
CfgOptionDef to; // Configuration we are merging to.
// Add some options to the "to" config.
- to.add((OptionDefinitionPtr(new OptionDefinition("one", 1, "uint16"))), "isc");
- to.add((OptionDefinitionPtr(new OptionDefinition("two", 2, "uint16"))), "isc");
- to.add((OptionDefinitionPtr(new OptionDefinition("three", 3, "uint16"))), "fluff");
- to.add((OptionDefinitionPtr(new OptionDefinition("four", 4, "uint16"))), "fluff");
+ to.add((OptionDefinitionPtr(new OptionDefinition("one", 1, "isc", "uint16"))), "isc");
+ to.add((OptionDefinitionPtr(new OptionDefinition("two", 2, "isc", "uint16"))), "isc");
+ to.add((OptionDefinitionPtr(new OptionDefinition("three", 3, "fluff", "uint16"))), "fluff");
+ to.add((OptionDefinitionPtr(new OptionDefinition("four", 4, "fluff", "uint16"))), "fluff");
// Clone the "to" config and use that for merging.
CfgOptionDef to_clone;
// Construct a non-empty "from" config.
// Options "two" and "three" will be updated definitions and "five" will be new.
CfgOptionDef from;
- from.add((OptionDefinitionPtr(new OptionDefinition("two", 22, "uint16"))), "isc");
- from.add((OptionDefinitionPtr(new OptionDefinition("three", 3, "string"))), "fluff");
- from.add((OptionDefinitionPtr(new OptionDefinition("five", 5, "uint16"))), "fluff");
+ from.add((OptionDefinitionPtr(new OptionDefinition("two", 22, "isc", "uint16"))), "isc");
+ from.add((OptionDefinitionPtr(new OptionDefinition("three", 3, "fluff", "string"))), "fluff");
+ from.add((OptionDefinitionPtr(new OptionDefinition("five", 5, "fluff", "uint16"))), "fluff");
// Now let's clone "from" config and use that manually construct the expected config.
CfgOptionDef expected;
from.copyTo(expected);
- expected.add((OptionDefinitionPtr(new OptionDefinition("one", 1, "uint16"))), "isc");
- expected.add((OptionDefinitionPtr(new OptionDefinition("four", 4, "uint16"))), "fluff");
+ expected.add((OptionDefinitionPtr(new OptionDefinition("one", 1, "isc", "uint16"))), "isc");
+ expected.add((OptionDefinitionPtr(new OptionDefinition("four", 4, "fluff", "uint16"))), "fluff");
// Do the merge.
ASSERT_NO_THROW(to_clone.merge(from));
ASSERT_TRUE(expected.equals(to_clone));
}
-
}
CfgOption this_cfg;
CfgOption other_cfg;
- // We need to create a dictionary of defintions pass into option merge.
+ // We need to create a dictionary of definitions pass into option merge.
CfgOptionDefPtr defs(new CfgOptionDef());
- defs->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "uint8"))), "isc");
- defs->add((OptionDefinitionPtr(new OptionDefinition("two", 2, "uint8"))), "isc");
- defs->add((OptionDefinitionPtr(new OptionDefinition("four", 4, "uint8"))), "isc");
- defs->add((OptionDefinitionPtr(new OptionDefinition("three", 3, "uint8"))), "fluff");
- defs->add((OptionDefinitionPtr(new OptionDefinition("four", 4, "uint8"))), "fluff");
+ defs->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "isc", "uint8"))), "isc");
+ defs->add((OptionDefinitionPtr(new OptionDefinition("two", 2, "isc", "uint8"))), "isc");
+ defs->add((OptionDefinitionPtr(new OptionDefinition("four", 4, "isc", "uint8"))), "isc");
+ defs->add((OptionDefinitionPtr(new OptionDefinition("three", 3, "fluff", "uint8"))), "fluff");
+ defs->add((OptionDefinitionPtr(new OptionDefinition("four", 4, "fluff", "uint8"))), "fluff");
// Create our existing config, that gets merged into.
OptionPtr option(new Option(Option::V4, 1, OptionBuffer(1, 0x01)));
// Now let's add an option definition that will force data truncated
// error for option 1.
- defs->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "uint16"))), "isc");
+ defs->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "isc", "uint16"))), "isc");
// When we attempt to merge, it should fail because option 1's data
// is not valid per its definition.
TEST_F(CfgOptionTest, createDescriptorOptionValid) {
// First we'll create our "known" user definitions
CfgOptionDefPtr defs(new CfgOptionDef());
- defs->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "uint8"))), "isc");
- defs->add((OptionDefinitionPtr(new OptionDefinition("two", 2, "uint8", true))), "isc");
+ defs->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "isc", "uint8"))), "isc");
+ defs->add((OptionDefinitionPtr(new OptionDefinition("two", 2, "isc", "uint8", true))), "isc");
// We'll try a standard V4 option first.
std::string space = DHCP4_OPTION_SPACE;
// Create custom options dictionary for testing merge. We're keeping it
// simple because they are more rigorous tests elsewhere.
CfgOptionDefPtr cfg_def(new CfgOptionDef());
- cfg_def->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "string"))), "isc");
+ cfg_def->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "isc", "string"))), "isc");
Subnet4Ptr subnet1(new Subnet4(IOAddress("192.0.1.0"),
26, 1, 2, 100, SubnetID(1)));
// Create custom options dictionary for testing merge. We're keeping it
// simple because they are more rigorous tests elsewhere.
CfgOptionDefPtr cfg_def(new CfgOptionDef());
- cfg_def->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "string"))), "isc");
+ cfg_def->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "isc", "string"))), "isc");
Subnet6Ptr subnet1(new Subnet6(IOAddress("2001:1::"),
64, 60, 80, 100, 200, SubnetID(1)));
// Create custom options dictionary for testing merge. We're keeping it
// simple because they are more rigorous tests elsewhere.
CfgOptionDefPtr cfg_def(new CfgOptionDef());
- cfg_def->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "string"))), "isc");
+ cfg_def->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "isc", "string"))), "isc");
Subnet4Ptr subnet1(new Subnet4(IOAddress("192.0.1.0"),
26, 1, 2, 100, SubnetID(1)));
// Create custom options dictionary for testing merge. We're keeping it
// simple because they are more rigorous tests elsewhere.
CfgOptionDefPtr cfg_def(new CfgOptionDef());
- cfg_def->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "string"))), "isc");
+ cfg_def->add((OptionDefinitionPtr(new OptionDefinition("one", 1, "isc", "string"))), "isc");
Subnet6Ptr subnet1(new Subnet6(IOAddress("2001:1::"),
64, 1, 2, 100, 100, SubnetID(1)));
conf1.addLoggingInfo(info);
// Add option definition.
- OptionDefinitionPtr def(new OptionDefinition("option-foo", 5, "string"));
+ OptionDefinitionPtr def(new OptionDefinition("option-foo", 5, "isc", "string"));
conf1.getCfgOptionDef()->add(def, "isc");
// Add an option.
// Differ by option definitions.
conf1.getCfgOptionDef()->
- add(OptionDefinitionPtr(new OptionDefinition("option-foo", 123,
+ add(OptionDefinitionPtr(new OptionDefinition("option-foo", 123, "isc",
"uint16_t")), "isc");
EXPECT_FALSE(conf1 == conf2);
EXPECT_TRUE(conf1 != conf2);
conf2.getCfgOptionDef()->
- add(OptionDefinitionPtr(new OptionDefinition("option-foo", 123,
+ add(OptionDefinitionPtr(new OptionDefinition("option-foo", 123, "isc",
"uint16_t")), "isc");
EXPECT_TRUE(conf1 == conf2);
EXPECT_FALSE(conf1 != conf2);
// Add definitions for DHCPv4 non-standard options.
defs.addItem(OptionDefinitionPtr(new OptionDefinition(
- "vendor-encapsulated-1", 1, "uint32")),
+ "vendor-encapsulated-1", 1,
+ "vendor-encapsulated-options", "uint32")),
"vendor-encapsulated-options");
defs.addItem(OptionDefinitionPtr(new OptionDefinition(
- "option-254", 254, "ipv4-address", true)),
+ "option-254", 254, DHCP4_OPTION_SPACE,
+ "ipv4-address", true)),
DHCP4_OPTION_SPACE);
- defs.addItem(OptionDefinitionPtr(new OptionDefinition("isc-1", 1, "empty")), "isc");
- defs.addItem(OptionDefinitionPtr(new OptionDefinition("isc-2", 2, "ipv4-address", true)),
+ defs.addItem(OptionDefinitionPtr(new OptionDefinition(
+ "isc-1", 1, "isc", "empty")),
+ "isc");
+ defs.addItem(OptionDefinitionPtr(new OptionDefinition(
+ "isc-2", 2, "isc", "ipv4-address", true)),
"isc");
}
// Add definitions for DHCPv6 non-standard options.
defs.addItem(OptionDefinitionPtr(new OptionDefinition(
- "option-1024", 1024, "ipv6-address", true)),
+ "option-1024", 1024, DHCP6_OPTION_SPACE,
+ "ipv6-address", true)),
DHCP6_OPTION_SPACE);
- defs.addItem(OptionDefinitionPtr(new OptionDefinition("option-1", 1, "empty")), "isc2");
- defs.addItem(OptionDefinitionPtr(new OptionDefinition("option-2", 2, "ipv6-address", true)),
+ defs.addItem(OptionDefinitionPtr(new OptionDefinition(
+ "option-1", 1, "isc2", "empty")),
+ "isc2");
+ defs.addItem(OptionDefinitionPtr(new OptionDefinition(
+ "option-2", 2, "isc2", "ipv6-address", true)),
"isc2");
}
// Verifies that initCodesInternal works as expected.
TEST(AdaptorOptionTest, initCodesInternal) {
const OptionDefParams DEFS[] = {
- { "subnet-mask", DHO_SUBNET_MASK, OPT_IPV4_ADDRESS_TYPE,
- false, 0, 0, "" },
- { "time-offset", DHO_TIME_OFFSET, OPT_INT32_TYPE,
+ { "subnet-mask", DHO_SUBNET_MASK, DHCP4_OPTION_SPACE,
+ OPT_IPV4_ADDRESS_TYPE, false, 0, 0, "" },
+ { "time-offset", DHO_TIME_OFFSET, DHCP4_OPTION_SPACE, OPT_INT32_TYPE,
false, 0, 0, "" }
};
const size_t DEFS_SIZE = sizeof(DEFS) / sizeof(DEFS[0]);
EXPECT_EQ(ISC_V6_4O6_INTERFACE, codes["vendor-2495@4o6-interface"]);
}
-}; // end of anonymous namespace
+} // end of anonymous namespace