return (generateIAAddr(IOAddress(addr), preferred_lft, valid_lft));
}
+ /// @brief Get IAADDR option from response.
+ ///
+ /// @param rsp The response.
+ /// @return The Option6IAAddrPtr to the unique IAADDR option or null.
+ Option6IAAddrPtr getIAAddr(const Pkt6Ptr& rsp) {
+ auto opts = rsp->getOptions(D6O_IAADDR);
+ if (opts.size() == 0) {
+ ADD_FAILURE() << "IAADDR option not present in response";
+ return (Option6IAAddrPtr());
+ }
+ if (opts.size() > 1) {
+ ADD_FAILURE() << "multiple IAADDR options present in response";
+ return (Option6IAAddrPtr());
+ }
+ return (boost::dynamic_pointer_cast<Option6IAAddr>(opts.begin()->second));
+ }
+
/// @brief Checks if the state of the callout handle associated
/// with a query was reset after the callout invocation.
///
// The query is silently rejected so no log to check.
}
-// Test that an IA_NA option is required.
-TEST_F(AddrRegTest, noIA_NA) {
+// Test that an IA_NA option is fordidden.
+TEST_F(AddrRegTest, iA_NA) {
IfaceMgrTestConfig test_config(true);
ASSERT_NO_THROW(configure(config_));
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
+ addr_reg_inf->addOption(generateIA(D6O_IA_NA, 234, 1500, 3000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
ASSERT_FALSE(drop);
ASSERT_TRUE(ctx.subnet_);
- // No IA_NA: no response.
+ // Unexpected IA_NA: no response.
EXPECT_FALSE(srv_->processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
expected += "error on ADDR-REG-INFORM from client fe80::abcd: ";
- expected += "Exactly 1 IA_NA option expected, but 0 received";
+ expected += "unexpected IA_NA option";
EXPECT_EQ(1, countFile(expected));
}
-// Test that exactly one IA_NA option is required.
-TEST_F(AddrRegTest, twoIA_NAs) {
+// Test that an IA_TA option is fordidden.
+TEST_F(AddrRegTest, iA_TA) {
IfaceMgrTestConfig test_config(true);
ASSERT_NO_THROW(configure(config_));
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- addr_reg_inf->addOption(generateIA(D6O_IA_NA, 234, 1500, 3000));
- addr_reg_inf->addOption(generateIA(D6O_IA_NA, 345, 1500, 3000));
+ Option6IAPtr ia(new Option6IA(D6O_IA_TA, 234));
+ addr_reg_inf->addOption(ia);
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
ASSERT_FALSE(drop);
ASSERT_TRUE(ctx.subnet_);
- // 2 IA_NA options: no response.
+ // Unexpected IA_TA: no response.
EXPECT_FALSE(srv_->processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
expected += "error on ADDR-REG-INFORM from client fe80::abcd: ";
- expected += "Exactly 1 IA_NA option expected, but 2 received";
+ expected += "unexpected IA_TA option";
EXPECT_EQ(1, countFile(expected));
}
-// Test that an IA_NA sub-option is required.
-TEST_F(AddrRegTest, noIA_NAsub) {
+// Test that an IA_PD option is fordidden.
+TEST_F(AddrRegTest, iA_PD) {
IfaceMgrTestConfig test_config(true);
ASSERT_NO_THROW(configure(config_));
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- addr_reg_inf->addOption(generateIA(D6O_IA_NA, 234, 1500, 3000));
+ addr_reg_inf->addOption(generateIA(D6O_IA_PD, 234, 1500, 3000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
ASSERT_FALSE(drop);
ASSERT_TRUE(ctx.subnet_);
- // No IA_NA sub-options: no response.
+ // Unexpected IA_PD: no response.
EXPECT_FALSE(srv_->processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
expected += "error on ADDR-REG-INFORM from client fe80::abcd: ";
- expected += "Exactly 1 IA_NA sub-option expected, but 0 received";
+ expected += "unexpected IA_PD option";
EXPECT_EQ(1, countFile(expected));
}
-// Test that an exactly one IA_NA sub-option is required.
-TEST_F(AddrRegTest, twoIA_NAsub) {
+// Test that an IAADDR option is required.
+TEST_F(AddrRegTest, noIAADDR) {
IfaceMgrTestConfig test_config(true);
ASSERT_NO_THROW(configure(config_));
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr("2001:db8:1::1", 3000, 4000));
- ia->addOption(generateIAAddr("2001:db8:1::2", 3000, 4000));
- addr_reg_inf->addOption(ia);
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
ASSERT_FALSE(drop);
ASSERT_TRUE(ctx.subnet_);
- // Two IA_NA sub-options: no response.
+ // No IAADDR options: no response.
+ EXPECT_FALSE(srv_->processAddrRegInform(ctx));
+
+ string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
+ expected += "error on ADDR-REG-INFORM from client fe80::abcd: ";
+ expected += "Exactly 1 IAADDRE option expected, but 0 received";
+ EXPECT_EQ(1, countFile(expected));
+}
+
+// Test that an exactly one IAADDR option is required.
+TEST_F(AddrRegTest, twoIAADDR) {
+ IfaceMgrTestConfig test_config(true);
+
+ ASSERT_NO_THROW(configure(config_));
+
+ Pkt6Ptr addr_reg_inf = Pkt6Ptr(new Pkt6(DHCPV6_ADDR_REG_INFORM, 1234));
+ addr_reg_inf->setRemoteAddr(IOAddress("fe80::abcd"));
+ addr_reg_inf->setIface("eth0");
+ addr_reg_inf->setIndex(ETH0_INDEX);
+ OptionPtr clientid = generateClientId();
+ addr_reg_inf->addOption(clientid);
+ addr_reg_inf->addOption(generateIAAddr("2001:db8:1::1", 3000, 4000));
+ addr_reg_inf->addOption(generateIAAddr("2001:db8:1::2", 3000, 4000));
+
+ // Pass it to the server.
+ AllocEngine::ClientContext6 ctx;
+ bool drop = !srv_->earlyGHRLookup(addr_reg_inf, ctx);
+ ASSERT_FALSE(drop);
+ ctx.subnet_ = srv_->selectSubnet(addr_reg_inf, drop);
+ ASSERT_FALSE(drop);
+ srv_->initContext(ctx, drop);
+ ASSERT_FALSE(drop);
+ ASSERT_TRUE(ctx.subnet_);
+
+ // Two IAADDR options: no response.
EXPECT_FALSE(srv_->processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
expected += "error on ADDR-REG-INFORM from client fe80::abcd: ";
- expected += "Exactly 1 IA_NA sub-option expected, but 2 received";
+ expected += "Exactly 1 IAADDR option expected, but 2 received";
EXPECT_EQ(1, countFile(expected));
}
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr("2001:db8:1::1", 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr("2001:db8:1::1", 3000, 4000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr("2001:db8:1::1", 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr("2001:db8:1::1", 3000, 4000));
// Add a relay.
Pkt6::RelayInfo relay;
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr("2001:db8:1::1", 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr("2001:db8:1::1", 3000, 4000));
// Add a relay: it will be the outer one.
Pkt6::RelayInfo relay;
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr("2001:db8::1", 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr("2001:db8::1", 3000, 4000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr("2001:db8:1::10", 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr("2001:db8:1::10", 3000, 4000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
// Create and add a lease.
IOAddress addr("2001:db8:1::1");
DuidPtr duid(new DUID(vector<uint8_t>(8, 0x44)));
- Lease6Ptr lease(new Lease6(Lease::TYPE_NA, addr, duid, 1234, 200, 300, 1));
+ Lease6Ptr lease(new Lease6(Lease::TYPE_NA, addr, duid, 234, 200, 300, 1));
lease->state_ = state;
lease->cltt_ = 1234;
ASSERT_TRUE(LeaseMgrFactory::instance().addLease(lease));
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr(addr, 3000, 4000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
addr_reg_inf_->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf_->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf_->addOption(ia);
+ addr_reg_inf_->addOption(generateIAAddr(addr, 3000, 4000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
EXPECT_EQ(DHCPV6_ADDR_REG_REPLY, response->getType());
EXPECT_EQ(addr_reg_inf_->getTransid(), response->getTransid());
- Option6IAAddrPtr iaaddr = checkIA_NA(response, 234, 1500, 3000);
+ Option6IAAddrPtr iaaddr = getIAAddr(response);
ASSERT_TRUE(iaaddr);
EXPECT_EQ(addr, iaaddr->getAddress());
EXPECT_EQ(3000, iaaddr->getPreferred());
EXPECT_EQ(addr, l->addr_);
ASSERT_TRUE(l->duid_);
EXPECT_TRUE(*l->duid_ == *duid_);
- EXPECT_EQ(ia->getIAID(), l->iaid_);
+ EXPECT_EQ(0, l->iaid_);
EXPECT_EQ(1, l->subnet_id_);
EXPECT_FALSE(l->fqdn_fwd_);
EXPECT_FALSE(l->fqdn_rev_);
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr(addr, 3000, 4000));
// Add a relay: it will be the outer one.
Pkt6::RelayInfo relay;
EXPECT_EQ(DHCPV6_ADDR_REG_REPLY, response->getType());
EXPECT_EQ(addr_reg_inf->getTransid(), response->getTransid());
- Option6IAAddrPtr iaaddr = checkIA_NA(response, 234, 1500, 3000);
+ Option6IAAddrPtr iaaddr = getIAAddr(response);
ASSERT_TRUE(iaaddr);
EXPECT_EQ(addr, iaaddr->getAddress());
EXPECT_EQ(3000, iaaddr->getPreferred());
EXPECT_EQ(addr, l->addr_);
ASSERT_TRUE(l->duid_);
EXPECT_TRUE(*l->duid_ == *duid_);
- EXPECT_EQ(ia->getIAID(), l->iaid_);
+ EXPECT_EQ(0, l->iaid_);
EXPECT_EQ(1, l->subnet_id_);
EXPECT_FALSE(l->fqdn_fwd_);
EXPECT_FALSE(l->fqdn_rev_);
// Create and add a lease.
IOAddress addr("2001:db8:1::1");
OptionPtr clientid = generateClientId();
- Lease6Ptr lease(new Lease6(Lease::TYPE_NA, addr, duid_, 2345, 200, 300, 1));
+ Lease6Ptr lease(new Lease6(Lease::TYPE_NA, addr, duid_, 0, 200, 300, 1));
lease->state_ = Lease::STATE_REGISTERED;
lease->cltt_ = 1234;
ASSERT_TRUE(LeaseMgrFactory::instance().addLease(lease));
addr_reg_inf_->setIface("eth0");
addr_reg_inf_->setIndex(ETH0_INDEX);
addr_reg_inf_->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf_->addOption(ia);
+ addr_reg_inf_->addOption(generateIAAddr(addr, 3000, 4000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
EXPECT_EQ(addr, l->addr_);
ASSERT_TRUE(l->duid_);
EXPECT_TRUE(*l->duid_ == *duid_);
- EXPECT_EQ(ia->getIAID(), l->iaid_);
+ EXPECT_EQ(0, l->iaid_);
EXPECT_EQ(1, l->subnet_id_);
EXPECT_FALSE(l->fqdn_fwd_);
EXPECT_FALSE(l->fqdn_rev_);
// Create and add a lease for another client.
IOAddress addr("2001:db8:1::1");
DuidPtr duid(new DUID(vector<uint8_t>(8, 0x44)));
- Lease6Ptr lease(new Lease6(Lease::TYPE_NA, addr, duid, 2345, 200, 300, 1));
+ Lease6Ptr lease(new Lease6(Lease::TYPE_NA, addr, duid, 0, 200, 300, 1));
lease->state_ = Lease::STATE_REGISTERED;
lease->cltt_ = 1234;
ASSERT_TRUE(LeaseMgrFactory::instance().addLease(lease));
addr_reg_inf_->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf_->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf_->addOption(ia);
+ addr_reg_inf_->addOption(generateIAAddr(addr, 3000, 4000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
EXPECT_EQ(addr, l->addr_);
ASSERT_TRUE(l->duid_);
EXPECT_TRUE(*l->duid_ == *duid_);
- EXPECT_EQ(ia->getIAID(), l->iaid_);
+ EXPECT_EQ(0, l->iaid_);
EXPECT_EQ(1, l->subnet_id_);
EXPECT_FALSE(l->fqdn_fwd_);
EXPECT_FALSE(l->fqdn_rev_);
// Create and add a lease.
IOAddress addr("2001:db8:1::1");
OptionPtr clientid = generateClientId();
- Lease6Ptr lease(new Lease6(Lease::TYPE_NA, addr, duid_, 2345, 200, 300, 2));
+ Lease6Ptr lease(new Lease6(Lease::TYPE_NA, addr, duid_, 0, 200, 300, 2));
lease->state_ = Lease::STATE_REGISTERED;
lease->cltt_ = 1234;
ASSERT_TRUE(LeaseMgrFactory::instance().addLease(lease));
addr_reg_inf_->setIface("eth0");
addr_reg_inf_->setIndex(ETH0_INDEX);
addr_reg_inf_->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf_->addOption(ia);
+ addr_reg_inf_->addOption(generateIAAddr(addr, 3000, 4000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
EXPECT_EQ(addr, l->addr_);
ASSERT_TRUE(l->duid_);
EXPECT_TRUE(*l->duid_ == *duid_);
- EXPECT_EQ(ia->getIAID(), l->iaid_);
+ EXPECT_EQ(0, l->iaid_);
EXPECT_EQ(1, l->subnet_id_);
EXPECT_FALSE(l->fqdn_fwd_);
EXPECT_FALSE(l->fqdn_rev_);
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr(addr, 3000, 4000));
// Add an FQDN option.
Option6ClientFqdnPtr fqdn(new Option6ClientFqdn(Option6ClientFqdn::FLAG_S,
EXPECT_EQ(DHCPV6_ADDR_REG_REPLY, response->getType());
EXPECT_EQ(addr_reg_inf->getTransid(), response->getTransid());
- Option6IAAddrPtr iaaddr = checkIA_NA(response, 234, 1500, 3000);
+ Option6IAAddrPtr iaaddr = getIAAddr(response);
ASSERT_TRUE(iaaddr);
EXPECT_EQ(addr, iaaddr->getAddress());
EXPECT_EQ(3000, iaaddr->getPreferred());
EXPECT_EQ(addr, l->addr_);
ASSERT_TRUE(l->duid_);
EXPECT_TRUE(*l->duid_ == *duid_);
- EXPECT_EQ(ia->getIAID(), l->iaid_);
+ EXPECT_EQ(0, l->iaid_);
EXPECT_EQ(1, l->subnet_id_);
EXPECT_EQ("client.example.com.", l->hostname_);
EXPECT_TRUE(l->fqdn_fwd_);
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr(addr, 3000, 4000));
// Add an FQDN option.
Option6ClientFqdnPtr fqdn(new Option6ClientFqdn(Option6ClientFqdn::FLAG_S,
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr(addr, 3000, 4000));
// Add an FQDN option.
Option6ClientFqdnPtr fqdn(new Option6ClientFqdn(Option6ClientFqdn::FLAG_S,
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr(addr, 3000, 4000));
// Add an FQDN option.
Option6ClientFqdnPtr fqdn(new Option6ClientFqdn(Option6ClientFqdn::FLAG_S,
addr_reg_inf->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf->addOption(ia);
+ addr_reg_inf->addOption(generateIAAddr(addr, 3000, 4000));
// Add an ORO option for the dns-servers option.
OptionUint16ArrayPtr oro(new OptionUint16Array(Option::V6, D6O_ORO));
EXPECT_EQ(DHCPV6_ADDR_REG_REPLY, response->getType());
EXPECT_EQ(addr_reg_inf->getTransid(), response->getTransid());
- Option6IAAddrPtr iaaddr = checkIA_NA(response, 234, 1500, 3000);
+ Option6IAAddrPtr iaaddr = getIAAddr(response);
ASSERT_TRUE(iaaddr);
EXPECT_EQ(addr, iaaddr->getAddress());
EXPECT_EQ(3000, iaaddr->getPreferred());
addr_reg_inf_->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf_->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf_->addOption(ia);
+ addr_reg_inf_->addOption(generateIAAddr(addr, 3000, 4000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
EXPECT_EQ(DHCPV6_ADDR_REG_REPLY, response->getType());
EXPECT_EQ(addr_reg_inf_->getTransid(), response->getTransid());
- Option6IAAddrPtr iaaddr = checkIA_NA(response, 234, 1500, 3000);
+ Option6IAAddrPtr iaaddr = getIAAddr(response);
ASSERT_TRUE(iaaddr);
EXPECT_EQ(addr, iaaddr->getAddress());
EXPECT_EQ(3000, iaaddr->getPreferred());
addr_reg_inf_->setIndex(ETH0_INDEX);
OptionPtr clientid = generateClientId();
addr_reg_inf_->addOption(clientid);
- auto ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
- ia->addOption(generateIAAddr(addr, 3000, 4000));
- addr_reg_inf_->addOption(ia);
+ addr_reg_inf_->addOption(generateIAAddr(addr, 3000, 4000));
// Pass it to the server.
AllocEngine::ClientContext6 ctx;
// Do the address registration.
IOAddress addr("2001:db8:1::1");
client.setLinkLocal(addr);
- client.requestAddress(234, addr);
+ client.addExtraOption(generateIAAddr(addr, 3000, 4000));
ASSERT_NO_THROW(client.doAddrRegInform());
// Check the response.
EXPECT_EQ(addr, l->addr_);
ASSERT_TRUE(l->duid_);
EXPECT_TRUE(*l->duid_ == *duid);
- EXPECT_EQ(234, l->iaid_);
+ EXPECT_EQ(0, l->iaid_);
EXPECT_EQ(1, l->subnet_id_);
- // Can be considered as a bug but the client set lifetimes to 0.
- EXPECT_EQ(0, l->preferred_lft_);
- EXPECT_EQ(0, l->valid_lft_);
+ EXPECT_EQ(3000, l->preferred_lft_);
+ EXPECT_EQ(4000, l->valid_lft_);
string expected = "DHCPSRV_MEMFILE_ADD_ADDR6 ";
expected += "adding IPv6 lease with address 2001:db8:1::1";
// Create and add a lease.
IOAddress addr("2001:db8:1::1");
- uint32_t iaid = 234;
- Lease6Ptr lease(new Lease6(Lease::TYPE_NA, addr, duid, iaid, 200, 300, 1));
+ Lease6Ptr lease(new Lease6(Lease::TYPE_NA, addr, duid, 0, 200, 300, 1));
lease->state_ = Lease::STATE_REGISTERED;
lease->cltt_ = 1234;
ASSERT_TRUE(LeaseMgrFactory::instance().addLease(lease));
// Do the address registration.
client.setLinkLocal(addr);
- client.requestAddress(iaid, addr);
+ client.addExtraOption(generateIAAddr(addr, 3000, 4000));
ASSERT_NO_THROW(client.doAddrRegInform());
// Check the response.
EXPECT_EQ(addr, l->addr_);
ASSERT_TRUE(l->duid_);
EXPECT_TRUE(*l->duid_ == *duid);
- EXPECT_EQ(iaid, l->iaid_);
+ EXPECT_EQ(0, l->iaid_);
EXPECT_EQ(1, l->subnet_id_);
- // Can be considered as a bug but the client set lifetimes to 0.
- EXPECT_EQ(0, l->preferred_lft_);
- EXPECT_EQ(0, l->valid_lft_);
+ EXPECT_EQ(3000, l->preferred_lft_);
+ EXPECT_EQ(4000, l->valid_lft_);
string expected = "DHCPSRV_MEMFILE_UPDATE_ADDR6 ";
expected += "updating IPv6 lease for address 2001:db8:1::1";