"DHCP6_ADDITIONAL_CLASS_EVAL_RESULT", "%1: Expression '%2' evaluated to %3",
"DHCP6_ADDITIONAL_CLASS_NO_TEST", "additional class %1 has no test expression, adding it to client's classes unconditionally",
"DHCP6_ADDITIONAL_CLASS_UNDEFINED", "additional class %1 has no definition",
- "DHCP6_ADDR_REG_INFORM_CLIENT_CHANGE", "received an addr-reg-inform for %1 from client '%2' but the address was registered by another client '%3'",
- "DHCP6_ADDR_REG_INFORM_FAIL", "error on addr-reg-inform from client %1: %2",
+ "DHCP6_ADDR_REG_INFORM_CLIENT_CHANGE", "received an ADDR-REG-INFORM for %1 from client '%2' but the address was registered by another client '%3'",
+ "DHCP6_ADDR_REG_INFORM_FAIL", "error on ADDR-REG-INFORM from client %1: %2",
"DHCP6_ADD_GLOBAL_STATUS_CODE", "%1: adding Status Code to DHCPv6 packet: %2",
"DHCP6_ADD_STATUS_CODE_FOR_IA", "%1: adding Status Code to IA with iaid=%2: %3",
"DHCP6_ALREADY_RUNNING", "%1 already running? %2",
"DHCP6_DYNAMIC_RECONFIGURATION_FAIL", "dynamic server reconfiguration failed with file: %1",
"DHCP6_DYNAMIC_RECONFIGURATION_SUCCESS", "dynamic server reconfiguration succeeded with file: %1",
"DHCP6_FLEX_ID", "%1: flexible identifier generated for incoming packet: %2",
- "DHCP6_HOOK_ADDR6_REGISTER_SKIP", "%1: addr-reg-inform for %2 is dropped, because a callout set the next step to SKIP",
+ "DHCP6_HOOK_ADDR6_REGISTER_SKIP", "%1: ADDR-REG-INFORM for %2 is dropped, because a callout set the next step to SKIP",
"DHCP6_HOOK_BUFFER_RCVD_DROP", "received buffer from %1 to %2 over interface %3 was dropped because a callout set the drop flag",
"DHCP6_HOOK_BUFFER_RCVD_SKIP", "received buffer from %1 to %2 over interface %3 is not parsed because a callout set the next step to SKIP",
"DHCP6_HOOK_BUFFER_SEND_SKIP", "%1: prepared DHCPv6 response was dropped because a callout set the next step to SKIP",
EXPECT_FALSE(srv_.sanityCheck(addr_reg_inf));
}
+// Test that more than one client-id are forbidden for Addr-reg-inform messages
+TEST_F(AddrRegTest, sanityCheck2) {
+ Pkt6Ptr addr_reg_inf = Pkt6Ptr(new Pkt6(DHCPV6_ADDR_REG_INFORM, 1234));
+
+ // A message with more than one client-id options should fail.
+ OptionPtr clientid = generateClientId();
+ addr_reg_inf->addOption(clientid);
+ addr_reg_inf->addOption(clientid);
+ EXPECT_FALSE(srv_.sanityCheck(addr_reg_inf));
+}
+
// Test that subnet selection must return a subnet for processAddrRegInform.
TEST_F(AddrRegTest, noSubnet) {
Pkt6Ptr addr_reg_inf = Pkt6Ptr(new Pkt6(DHCPV6_ADDR_REG_INFORM, 1234));
EXPECT_FALSE(srv_.processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
- expected += "error on addr-reg-inform from client fe80::abcd: ";
+ expected += "error on ADDR-REG-INFORM from client fe80::abcd: ";
expected += "Exactly 1 IA_NA option expected, but 0 received";
EXPECT_EQ(1, countFile(expected));
}
EXPECT_FALSE(srv_.processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
- expected += "error on addr-reg-inform from client fe80::abcd: ";
+ expected += "error on ADDR-REG-INFORM from client fe80::abcd: ";
expected += "Exactly 1 IA_NA option expected, but 2 received";
EXPECT_EQ(1, countFile(expected));
}
EXPECT_FALSE(srv_.processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
- expected += "error on addr-reg-inform from client fe80::abcd: ";
+ expected += "error on ADDR-REG-INFORM from client fe80::abcd: ";
expected += "Exactly 1 IA_NA sub-option expected, but 0 received";
EXPECT_EQ(1, countFile(expected));
}
EXPECT_FALSE(srv_.processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
- expected += "error on addr-reg-inform from client fe80::abcd: ";
+ expected += "error on ADDR-REG-INFORM from client fe80::abcd: ";
expected += "Exactly 1 IA_NA sub-option expected, but 2 received";
EXPECT_EQ(1, countFile(expected));
}
EXPECT_FALSE(srv_.processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
- expected += "error on addr-reg-inform from client fe80::abcd: ";
+ expected += "error on ADDR-REG-INFORM from client fe80::abcd: ";
expected += "Address mismatch: client at fe80::abcd ";
expected += "wants to register 2001:db8:1::1";
EXPECT_EQ(1, countFile(expected));
EXPECT_FALSE(srv_.processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
- expected += "error on addr-reg-inform from client fe80::ef01: ";
+ expected += "error on ADDR-REG-INFORM from client fe80::ef01: ";
expected += "Address mismatch: client at fe80::ef01 ";
expected += "wants to register 2001:db8:1::1";
EXPECT_EQ(1, countFile(expected));
EXPECT_FALSE(srv_.processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
- expected += "error on addr-reg-inform from client fe80::2345: ";
+ expected += "error on ADDR-REG-INFORM from client fe80::2345: ";
expected += "Address mismatch: client at fe80::2345 ";
expected += "wants to register 2001:db8:1::1";
EXPECT_EQ(1, countFile(expected));
EXPECT_FALSE(srv_.processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
- expected += "error on addr-reg-inform from client 2001:db8::1: ";
+ expected += "error on ADDR-REG-INFORM from client 2001:db8::1: ";
expected += "Address 2001:db8::1 is not in subnet ";
expected += "2001:db8:1::/64 (id 1)";
EXPECT_EQ(1, countFile(expected));
EXPECT_FALSE(srv_.processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
- expected += "error on addr-reg-inform from client 2001:db8:1::10: ";
+ expected += "error on ADDR-REG-INFORM from client 2001:db8:1::10: ";
expected += "Address 2001:db8:1::10 is reserved";
EXPECT_EQ(1, countFile(expected));
}
EXPECT_FALSE(srv_.processAddrRegInform(ctx));
string expected = "DHCP6_ADDR_REG_INFORM_FAIL ";
- expected += "error on addr-reg-inform from client 2001:db8:1::1: ";
+ expected += "error on ADDR-REG-INFORM from client 2001:db8:1::1: ";
expected += "Address 2001:db8:1::1 already in use Type:";
EXPECT_EQ(1, countFile(expected));
}
expected += "updating IPv6 lease for address 2001:db8:1::1";
EXPECT_EQ(1, countFile(expected));
expected = "DHCP6_ADDR_REG_INFORM_CLIENT_CHANGE ";
- expected += "received an addr-reg-inform for 2001:db8:1::1 from client '";
+ expected += "received an ADDR-REG-INFORM for 2001:db8:1::1 from client '";
expected += duid_->toText();
expected += "' but the address was registered by another client ";
expected += "'44:44:44:44:44:44:44:44'";
static_cast<int64_t>(5));
StatsMgr::instance().setValue(cumulative_registered_nas_name_,
static_cast<int64_t>(10));
+ StatsMgr::instance().setValue("cumulative-registered-nas",
+ static_cast<int64_t>(20));
testBasic();
stat = StatsMgr::instance().getObservation(cumulative_registered_nas_name_);
ASSERT_TRUE(stat);
EXPECT_EQ(11, stat->getInteger().first);
+ stat = StatsMgr::instance().getObservation("cumulative-registered-nas");
+ EXPECT_EQ(21, stat->getInteger().first);
}
// Check the statictics for the renew scenario.
static_cast<int64_t>(5));
StatsMgr::instance().setValue(cumulative_registered_nas_name_,
static_cast<int64_t>(10));
+ StatsMgr::instance().setValue("cumulative-registered-nas",
+ static_cast<int64_t>(20));
testRenew();
stat = StatsMgr::instance().getObservation(cumulative_registered_nas_name_);
ASSERT_TRUE(stat);
EXPECT_EQ(10, stat->getInteger().first);
+ stat = StatsMgr::instance().getObservation("cumulative-registered-nas");
+ EXPECT_EQ(20, stat->getInteger().first);
}
} // end of anonymous namespace