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));
}
Example #2
0
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);
    }
}