|
@@ -31,12 +31,17 @@ using namespace isc;
|
|
using namespace isc::asiolink;
|
|
using namespace isc::asiolink;
|
|
using namespace isc::dhcp;
|
|
using namespace isc::dhcp;
|
|
|
|
|
|
-// name of loopback interface detection
|
|
|
|
-const size_t buf_size = 32;
|
|
|
|
-char LOOPBACK[buf_size] = "lo";
|
|
|
|
-
|
|
|
|
namespace {
|
|
namespace {
|
|
|
|
|
|
|
|
+// Name of loopback interface detection
|
|
|
|
+const size_t BUF_SIZE = 32;
|
|
|
|
+char LOOPBACK[BUF_SIZE] = "lo";
|
|
|
|
+
|
|
|
|
+// Ports used during testing
|
|
|
|
+const uint16_t PORT1 = 10547; // V6 socket
|
|
|
|
+const uint16_t PORT2 = 10548; // V4 socket
|
|
|
|
+
|
|
|
|
+
|
|
class NakedIfaceMgr: public IfaceMgr {
|
|
class NakedIfaceMgr: public IfaceMgr {
|
|
// "naked" Interface Manager, exposes internal fields
|
|
// "naked" Interface Manager, exposes internal fields
|
|
public:
|
|
public:
|
|
@@ -69,10 +74,10 @@ TEST_F(IfaceMgrTest, loDetect) {
|
|
// is implemented
|
|
// is implemented
|
|
if (if_nametoindex("lo") > 0) {
|
|
if (if_nametoindex("lo") > 0) {
|
|
cout << "This is Linux, using lo as loopback." << endl;
|
|
cout << "This is Linux, using lo as loopback." << endl;
|
|
- snprintf(LOOPBACK, buf_size - 1, "lo");
|
|
|
|
|
|
+ snprintf(LOOPBACK, BUF_SIZE - 1, "lo");
|
|
} else if (if_nametoindex("lo0") > 0) {
|
|
} else if (if_nametoindex("lo0") > 0) {
|
|
cout << "This is BSD, using lo0 as loopback." << endl;
|
|
cout << "This is BSD, using lo0 as loopback." << endl;
|
|
- snprintf(LOOPBACK, buf_size - 1, "lo0");
|
|
|
|
|
|
+ snprintf(LOOPBACK, BUF_SIZE - 1, "lo0");
|
|
} else {
|
|
} else {
|
|
cout << "Failed to detect loopback interface. Neither "
|
|
cout << "Failed to detect loopback interface. Neither "
|
|
<< "lo nor lo0 worked. I give up." << endl;
|
|
<< "lo nor lo0 worked. I give up." << endl;
|
|
@@ -80,7 +85,7 @@ TEST_F(IfaceMgrTest, loDetect) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-// uncomment this test to create packet writer. It will
|
|
|
|
|
|
+// Uncomment this test to create packet writer. It will
|
|
// write incoming DHCPv6 packets as C arrays. That is useful
|
|
// write incoming DHCPv6 packets as C arrays. That is useful
|
|
// for generating test sequences based on actual traffic
|
|
// for generating test sequences based on actual traffic
|
|
//
|
|
//
|
|
@@ -244,21 +249,19 @@ TEST_F(IfaceMgrTest, sockets6) {
|
|
TEST_F(IfaceMgrTest, socketsFromIface) {
|
|
TEST_F(IfaceMgrTest, socketsFromIface) {
|
|
boost::scoped_ptr<NakedIfaceMgr> ifacemgr(new NakedIfaceMgr());
|
|
boost::scoped_ptr<NakedIfaceMgr> ifacemgr(new NakedIfaceMgr());
|
|
|
|
|
|
- // open v6 socket on loopback interface and bind to 10547 port
|
|
|
|
|
|
+ // Open v6 socket on loopback interface and bind to port
|
|
int socket1 = 0;
|
|
int socket1 = 0;
|
|
- const uint16_t port1 = 10547;
|
|
|
|
EXPECT_NO_THROW(
|
|
EXPECT_NO_THROW(
|
|
- socket1 = ifacemgr->openSocketFromIface(LOOPBACK, port1, AF_INET6);
|
|
|
|
|
|
+ socket1 = ifacemgr->openSocketFromIface(LOOPBACK, PORT1, AF_INET6);
|
|
);
|
|
);
|
|
- // socket descriptor must be positive integer
|
|
|
|
|
|
+ // Socket descriptor must be positive integer
|
|
EXPECT_GT(socket1, 0);
|
|
EXPECT_GT(socket1, 0);
|
|
close(socket1);
|
|
close(socket1);
|
|
|
|
|
|
- // open v4 sicket on loopback interface and bind to 10548 port
|
|
|
|
|
|
+ // Open v4 socket on loopback interface and bind to different port
|
|
int socket2 = 0;
|
|
int socket2 = 0;
|
|
- const uint16_t port2 = 10548;
|
|
|
|
EXPECT_NO_THROW(
|
|
EXPECT_NO_THROW(
|
|
- socket2 = ifacemgr->openSocketFromIface(LOOPBACK, port2, AF_INET);
|
|
|
|
|
|
+ socket2 = ifacemgr->openSocketFromIface(LOOPBACK, PORT2, AF_INET);
|
|
);
|
|
);
|
|
// socket descriptor must be positive integer
|
|
// socket descriptor must be positive integer
|
|
EXPECT_GT(socket2, 0);
|
|
EXPECT_GT(socket2, 0);
|
|
@@ -270,23 +273,21 @@ TEST_F(IfaceMgrTest, socketsFromIface) {
|
|
TEST_F(IfaceMgrTest, socketsFromAddress) {
|
|
TEST_F(IfaceMgrTest, socketsFromAddress) {
|
|
boost::scoped_ptr<NakedIfaceMgr> ifacemgr(new NakedIfaceMgr());
|
|
boost::scoped_ptr<NakedIfaceMgr> ifacemgr(new NakedIfaceMgr());
|
|
|
|
|
|
- // open v6 socket on loopback address and bind to 10547 port
|
|
|
|
|
|
+ // Open v6 socket on loopback interface and bind to port
|
|
int socket1 = 0;
|
|
int socket1 = 0;
|
|
- const uint16_t port1 = 10547;
|
|
|
|
IOAddress loAddr6("::1");
|
|
IOAddress loAddr6("::1");
|
|
EXPECT_NO_THROW(
|
|
EXPECT_NO_THROW(
|
|
- socket1 = ifacemgr->openSocketFromAddress(loAddr6, port1);
|
|
|
|
|
|
+ socket1 = ifacemgr->openSocketFromAddress(loAddr6, PORT1);
|
|
);
|
|
);
|
|
// socket descriptor must be positive integer
|
|
// socket descriptor must be positive integer
|
|
EXPECT_GT(socket1, 0);
|
|
EXPECT_GT(socket1, 0);
|
|
close(socket1);
|
|
close(socket1);
|
|
|
|
|
|
- // open v4 socket on loopback address and bind to 10548 port
|
|
|
|
|
|
+ // Open v4 socket on loopback interface and bind to different port
|
|
int socket2 = 0;
|
|
int socket2 = 0;
|
|
- const uint16_t port2 = 10548;
|
|
|
|
IOAddress loAddr("127.0.0.1");
|
|
IOAddress loAddr("127.0.0.1");
|
|
EXPECT_NO_THROW(
|
|
EXPECT_NO_THROW(
|
|
- socket2 = ifacemgr->openSocketFromAddress(loAddr, port2);
|
|
|
|
|
|
+ socket2 = ifacemgr->openSocketFromAddress(loAddr, PORT2);
|
|
);
|
|
);
|
|
// socket descriptor must be positive integer
|
|
// socket descriptor must be positive integer
|
|
EXPECT_GT(socket2, 0);
|
|
EXPECT_GT(socket2, 0);
|
|
@@ -300,20 +301,18 @@ TEST_F(IfaceMgrTest, socketsFromRemoteAddress) {
|
|
// Loopback address is the only one that we know
|
|
// Loopback address is the only one that we know
|
|
// so let's treat it as remote address.
|
|
// so let's treat it as remote address.
|
|
int socket1 = 0;
|
|
int socket1 = 0;
|
|
- const uint16_t port1 = 10547;
|
|
|
|
IOAddress loAddr6("::1");
|
|
IOAddress loAddr6("::1");
|
|
EXPECT_NO_THROW(
|
|
EXPECT_NO_THROW(
|
|
- socket1 = ifacemgr->openSocketFromRemoteAddress(loAddr6, port1);
|
|
|
|
|
|
+ socket1 = ifacemgr->openSocketFromRemoteAddress(loAddr6, PORT1);
|
|
);
|
|
);
|
|
EXPECT_GT(socket1, 0);
|
|
EXPECT_GT(socket1, 0);
|
|
close(socket1);
|
|
close(socket1);
|
|
|
|
|
|
// Open v4 socket to connect to remote address.
|
|
// Open v4 socket to connect to remote address.
|
|
int socket2 = 0;
|
|
int socket2 = 0;
|
|
- const uint16_t port2 = 10548;
|
|
|
|
IOAddress loAddr("127.0.0.1");
|
|
IOAddress loAddr("127.0.0.1");
|
|
EXPECT_NO_THROW(
|
|
EXPECT_NO_THROW(
|
|
- socket2 = ifacemgr->openSocketFromRemoteAddress(loAddr, port2);
|
|
|
|
|
|
+ socket2 = ifacemgr->openSocketFromRemoteAddress(loAddr, PORT2);
|
|
);
|
|
);
|
|
EXPECT_GT(socket2, 0);
|
|
EXPECT_GT(socket2, 0);
|
|
close(socket2);
|
|
close(socket2);
|