TEST_F(IPv4ReassemblerTest, PacketHasMFAndDF) { const uint8_t raw_packet1[] = { 0, 80, 86, 173, 75, 110, 170, 0, 4, 0, 10, 4, 8, 0, 69, 0, 0, 124, 146, 205, 96, 0, 64, 6, 107, 153, 7, 7, 7, 7, 7, 7, 7, 1, 152, 191, 0, 80, 160, 119, 38, 106, 125, 14, 42, 154, 128, 24, 0, 115, 148, 65, 0, 0, 1, 1, 8, 10, 4, 255, 180, 163, 4, 255, 176, 151, 71, 69, 84, 32, 47, 49, 46, 104, 116, 109, 108, 63, 32, 72, 84, 84, 80, 47, 49, 46, 49, 13, 10, 85, 115, 101, 114, 45, 65, 103, 101, 110, 116, 58, 32, 87, 103, 101, 116, 47, 49, 46, 49, 51, 46, 52, 32, 40, 108, 105, 110, 117, 120, 45, 103, 110, 117, 41, 13, 10, 65, 99, 99, 101, 112, 116, 58, 32, 42, 47, 42, 13 }; const uint8_t raw_packet2[] = { 0, 80, 86, 173, 75, 110, 170, 0, 4, 0, 10, 4, 8, 0, 69, 0, 0, 62, 146, 205, 64, 13, 64, 6, 139, 202, 7, 7, 7, 7, 7, 7, 7, 1, 10, 72, 111, 115, 116, 58, 32, 55, 46, 55, 46, 55, 46, 49, 13, 10, 67, 111, 110, 110, 101, 99, 116, 105, 111, 110, 58, 32, 75, 101, 101, 112, 45, 65, 108, 105, 118, 101, 13, 10, 13, 10 }; EthernetII packet1(raw_packet1, sizeof(raw_packet1)); EthernetII packet2(raw_packet2, sizeof(raw_packet2)); EXPECT_TRUE(packet1.rfind_pdu<IP>().is_fragmented()); EXPECT_TRUE(packet2.rfind_pdu<IP>().is_fragmented()); IPv4Reassembler reassembler; EXPECT_EQ(IPv4Reassembler::FRAGMENTED, reassembler.process(packet1)); EXPECT_EQ(IPv4Reassembler::REASSEMBLED, reassembler.process(packet2)); }
void IPv4ReassemblerTest::test_packets(const std::vector<std::pair<const uint8_t*, size_t> > &vt) { IPv4Reassembler reassembler; for(size_t i = 0; i < vt.size(); ++i) { EthernetII eth(vt[i].first, (uint32_t)vt[i].second); IPv4Reassembler::packet_status status = reassembler.process(eth); EXPECT_NE(IPv4Reassembler::NOT_FRAGMENTED, status); if(status == IPv4Reassembler::REASSEMBLED) { ASSERT_EQ(static_cast<size_t>(vt.size() - 1), i); ASSERT_TRUE(eth.find_pdu<UDP>() != NULL); RawPDU *raw = eth.find_pdu<RawPDU>(); ASSERT_TRUE(raw != NULL); ASSERT_EQ(15000ULL, raw->payload().size()); } else if(status == IPv4Reassembler::FRAGMENTED) EXPECT_NE(vt.size() - 1, i); } }