Commit 96b66c0c authored by Thomas Markwalder's avatar Thomas Markwalder
Browse files

[master] Merge branch 'trac2784' correct perfdhcp crash on mismatched

command line parameters.
parents 937635d7 7a7dc17a
......@@ -592,19 +592,27 @@ TestControl::openSocket() const {
std::string localname = options.getLocalName();
std::string servername = options.getServerName();
uint16_t port = options.getLocalPort();
uint8_t family = AF_INET;
int sock = 0;
uint8_t family = (options.getIpVersion() == 6) ? AF_INET6 : AF_INET;
IOAddress remoteaddr(servername);
// Check for mismatch between IP option and server address
if (family != remoteaddr.getFamily()) {
isc_throw(InvalidParameter,
"Values for IP version: " <<
static_cast<unsigned int>(options.getIpVersion()) <<
" and server address: " << servername << " are mismatched.");
}
if (port == 0) {
if (options.getIpVersion() == 6) {
if (family == AF_INET6) {
port = DHCP6_CLIENT_PORT;
} else if (options.getIpVersion() == 4) {
port = 67; // TODO: find out why port 68 is wrong here.
}
}
if (options.getIpVersion() == 6) {
family = AF_INET6;
}
// Local name is specified along with '-l' option.
// It may point to interface name or local address.
if (!localname.empty()) {
......
......@@ -672,6 +672,18 @@ TEST_F(TestControlTest, GenerateDuid) {
testDuid();
}
TEST_F(TestControlTest, MisMatchVerionServer) {
NakedTestControl tc;
// make sure we catch -6 paired with v4 address
ASSERT_NO_THROW(processCmdLine("perfdhcp -l 127.0.0.1 -6 192.168.1.1"));
EXPECT_THROW(tc.openSocket(), isc::InvalidParameter);
// make sure we catch -4 paired with v6 address
ASSERT_NO_THROW(processCmdLine("perfdhcp -l 127.0.0.1 -4 ff02::1:2"));
EXPECT_THROW(tc.openSocket(), isc::InvalidParameter);
}
TEST_F(TestControlTest, GenerateMacAddress) {
// Simulate one client only. Always the same MAC address will be
// generated.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment