|
@@ -103,32 +103,6 @@ TEST_F(PktFilterLPFTest, DISABLED_openSocket) {
|
|
// This test verifies correctness of sending DHCP packet through the raw
|
|
// This test verifies correctness of sending DHCP packet through the raw
|
|
// socket, whereby all IP stack headers are hand-crafted.
|
|
// socket, whereby all IP stack headers are hand-crafted.
|
|
TEST_F(PktFilterLPFTest, DISABLED_send) {
|
|
TEST_F(PktFilterLPFTest, DISABLED_send) {
|
|
- // Let's create a DHCPv4 packet.
|
|
|
|
- Pkt4Ptr pkt(new Pkt4(DHCPOFFER, 0));
|
|
|
|
- ASSERT_TRUE(pkt);
|
|
|
|
-
|
|
|
|
- // Set required fields.
|
|
|
|
- // By setting the local address to broadcast we simulate the
|
|
|
|
- // typical scenario when client's request was send to broadcast
|
|
|
|
- // address and server by default used it as a source address
|
|
|
|
- // in its response. The send() function should be able to detect
|
|
|
|
- // it and correct the source address.
|
|
|
|
- pkt->setLocalAddr(IOAddress("255.255.255.255"));
|
|
|
|
- pkt->setRemoteAddr(IOAddress("127.0.0.1"));
|
|
|
|
- pkt->setRemotePort(PORT);
|
|
|
|
- pkt->setLocalPort(PORT + 1);
|
|
|
|
- pkt->setIndex(ifindex_);
|
|
|
|
- pkt->setIface(ifname_);
|
|
|
|
- pkt->setHops(6);
|
|
|
|
- pkt->setSecs(42);
|
|
|
|
- pkt->setCiaddr(IOAddress("192.0.2.1"));
|
|
|
|
- pkt->setSiaddr(IOAddress("192.0.2.2"));
|
|
|
|
- pkt->setYiaddr(IOAddress("192.0.2.3"));
|
|
|
|
- pkt->setGiaddr(IOAddress("192.0.2.4"));
|
|
|
|
-
|
|
|
|
- // Create the on-wire data.
|
|
|
|
- ASSERT_NO_THROW(pkt->pack());
|
|
|
|
-
|
|
|
|
// Packet will be sent over loopback interface.
|
|
// Packet will be sent over loopback interface.
|
|
Iface iface(ifname_, ifindex_);
|
|
Iface iface(ifname_, ifindex_);
|
|
IOAddress addr("127.0.0.1");
|
|
IOAddress addr("127.0.0.1");
|
|
@@ -144,7 +118,7 @@ TEST_F(PktFilterLPFTest, DISABLED_send) {
|
|
ASSERT_GE(sock_info_.sockfd_, 0);
|
|
ASSERT_GE(sock_info_.sockfd_, 0);
|
|
|
|
|
|
// Send the packet over the socket.
|
|
// Send the packet over the socket.
|
|
- ASSERT_NO_THROW(pkt_filter.send(iface, sock_info_.sockfd_, pkt));
|
|
|
|
|
|
+ ASSERT_NO_THROW(pkt_filter.send(iface, sock_info_.sockfd_, test_message_));
|
|
|
|
|
|
// Read the data from socket.
|
|
// Read the data from socket.
|
|
fd_set readfds;
|
|
fd_set readfds;
|
|
@@ -180,48 +154,15 @@ TEST_F(PktFilterLPFTest, DISABLED_send) {
|
|
// Parse the packet.
|
|
// Parse the packet.
|
|
ASSERT_NO_THROW(rcvd_pkt->unpack());
|
|
ASSERT_NO_THROW(rcvd_pkt->unpack());
|
|
|
|
|
|
- // Verify that the received packet matches sent packet.
|
|
|
|
- EXPECT_EQ(pkt->getHops(), rcvd_pkt->getHops());
|
|
|
|
- EXPECT_EQ(pkt->getOp(), rcvd_pkt->getOp());
|
|
|
|
- EXPECT_EQ(pkt->getSecs(), rcvd_pkt->getSecs());
|
|
|
|
- EXPECT_EQ(pkt->getFlags(), rcvd_pkt->getFlags());
|
|
|
|
- EXPECT_EQ(pkt->getCiaddr(), rcvd_pkt->getCiaddr());
|
|
|
|
- EXPECT_EQ(pkt->getSiaddr(), rcvd_pkt->getSiaddr());
|
|
|
|
- EXPECT_EQ(pkt->getYiaddr(), rcvd_pkt->getYiaddr());
|
|
|
|
- EXPECT_EQ(pkt->getGiaddr(), rcvd_pkt->getGiaddr());
|
|
|
|
- EXPECT_EQ(pkt->getTransid(), rcvd_pkt->getTransid());
|
|
|
|
- EXPECT_TRUE(pkt->getSname() == rcvd_pkt->getSname());
|
|
|
|
- EXPECT_TRUE(pkt->getFile() == rcvd_pkt->getFile());
|
|
|
|
- EXPECT_EQ(pkt->getHtype(), rcvd_pkt->getHtype());
|
|
|
|
- EXPECT_EQ(pkt->getHlen(), rcvd_pkt->getHlen());
|
|
|
|
|
|
+ // Check if the received message is correct.
|
|
|
|
+ testRcvdMessage(rcvd_pkt);
|
|
}
|
|
}
|
|
|
|
|
|
// This test verifies correctness of reception of the DHCP packet over
|
|
// This test verifies correctness of reception of the DHCP packet over
|
|
// raw socket, whereby all IP stack headers are hand-crafted.
|
|
// raw socket, whereby all IP stack headers are hand-crafted.
|
|
TEST_F(PktFilterLPFTest, DISABLED_receive) {
|
|
TEST_F(PktFilterLPFTest, DISABLED_receive) {
|
|
|
|
|
|
- // Let's create a DHCPv4 packet.
|
|
|
|
- Pkt4Ptr pkt(new Pkt4(DHCPOFFER, 0));
|
|
|
|
- ASSERT_TRUE(pkt);
|
|
|
|
-
|
|
|
|
- // Set required fields.
|
|
|
|
- pkt->setLocalAddr(IOAddress("127.0.0.1"));
|
|
|
|
- pkt->setRemoteAddr(IOAddress("127.0.0.1"));
|
|
|
|
- pkt->setRemotePort(PORT);
|
|
|
|
- pkt->setLocalPort(PORT + 1);
|
|
|
|
- pkt->setIndex(ifindex_);
|
|
|
|
- pkt->setIface(ifname_);
|
|
|
|
- pkt->setHops(6);
|
|
|
|
- pkt->setSecs(42);
|
|
|
|
- pkt->setCiaddr(IOAddress("192.0.2.1"));
|
|
|
|
- pkt->setSiaddr(IOAddress("192.0.2.2"));
|
|
|
|
- pkt->setYiaddr(IOAddress("192.0.2.3"));
|
|
|
|
- pkt->setGiaddr(IOAddress("192.0.2.4"));
|
|
|
|
-
|
|
|
|
- // Create the on-wire data.
|
|
|
|
- ASSERT_NO_THROW(pkt->pack());
|
|
|
|
-
|
|
|
|
- // Packet will be sent over loopback interface.
|
|
|
|
|
|
+ // Packet will be received over loopback interface.
|
|
Iface iface(ifname_, ifindex_);
|
|
Iface iface(ifname_, ifindex_);
|
|
IOAddress addr("127.0.0.1");
|
|
IOAddress addr("127.0.0.1");
|
|
|
|
|
|
@@ -233,10 +174,10 @@ TEST_F(PktFilterLPFTest, DISABLED_receive) {
|
|
sock_info_ = pkt_filter.openSocket(iface, addr, PORT, false, false);
|
|
sock_info_ = pkt_filter.openSocket(iface, addr, PORT, false, false);
|
|
ASSERT_GE(sock_info_.sockfd_, 0);
|
|
ASSERT_GE(sock_info_.sockfd_, 0);
|
|
|
|
|
|
- // Send the packet over the socket.
|
|
|
|
- ASSERT_NO_THROW(pkt_filter.send(iface, sock_info_.sockfd_, pkt));
|
|
|
|
|
|
+ // Send DHCPv4 message to the local loopback address and server's port.
|
|
|
|
+ sendMessage();
|
|
|
|
|
|
- // Receive the packet.
|
|
|
|
|
|
+ // Receive the packet using LPF packet filter.
|
|
Pkt4Ptr rcvd_pkt = pkt_filter.receive(iface, sock_info_);
|
|
Pkt4Ptr rcvd_pkt = pkt_filter.receive(iface, sock_info_);
|
|
// Check that the packet has been correctly received.
|
|
// Check that the packet has been correctly received.
|
|
ASSERT_TRUE(rcvd_pkt);
|
|
ASSERT_TRUE(rcvd_pkt);
|
|
@@ -244,20 +185,8 @@ TEST_F(PktFilterLPFTest, DISABLED_receive) {
|
|
// Parse the packet.
|
|
// Parse the packet.
|
|
ASSERT_NO_THROW(rcvd_pkt->unpack());
|
|
ASSERT_NO_THROW(rcvd_pkt->unpack());
|
|
|
|
|
|
- // Verify that the received packet matches sent packet.
|
|
|
|
- EXPECT_EQ(pkt->getHops(), rcvd_pkt->getHops());
|
|
|
|
- EXPECT_EQ(pkt->getOp(), rcvd_pkt->getOp());
|
|
|
|
- EXPECT_EQ(pkt->getSecs(), rcvd_pkt->getSecs());
|
|
|
|
- EXPECT_EQ(pkt->getFlags(), rcvd_pkt->getFlags());
|
|
|
|
- EXPECT_EQ(pkt->getCiaddr(), rcvd_pkt->getCiaddr());
|
|
|
|
- EXPECT_EQ(pkt->getSiaddr(), rcvd_pkt->getSiaddr());
|
|
|
|
- EXPECT_EQ(pkt->getYiaddr(), rcvd_pkt->getYiaddr());
|
|
|
|
- EXPECT_EQ(pkt->getGiaddr(), rcvd_pkt->getGiaddr());
|
|
|
|
- EXPECT_EQ(pkt->getTransid(), rcvd_pkt->getTransid());
|
|
|
|
- EXPECT_TRUE(pkt->getSname() == rcvd_pkt->getSname());
|
|
|
|
- EXPECT_TRUE(pkt->getFile() == rcvd_pkt->getFile());
|
|
|
|
- EXPECT_EQ(pkt->getHtype(), rcvd_pkt->getHtype());
|
|
|
|
- EXPECT_EQ(pkt->getHlen(), rcvd_pkt->getHlen());
|
|
|
|
|
|
+ // Check if the received message is correct.
|
|
|
|
+ testRcvdMessage(rcvd_pkt);
|
|
}
|
|
}
|
|
|
|
|
|
} // anonymous namespace
|
|
} // anonymous namespace
|