1 #include <sys/socket.h>
2 #include <netinet/in.h>
10 #include "tut/tut.hpp"
12 #include "raw_ip_packet_old.h"
13 #include "stg/raw_ip_packet.h"
16 #define ITERATIONS 1000
19 void genVector(uint8_t * buf);
21 std::ostream & operator<<(std::ostream & stream, const RAW_PACKET & p);
28 typedef test_group<rp_data> tg;
29 tg rp_test_group("RAW_PACKET tests group");
31 typedef tg::object testobject;
35 void testobject::test<1>()
37 set_test_name("Check structure consistency");
40 rp.rawPacket.header.ipHeader.ip_v = 4;
41 rp.rawPacket.header.ipHeader.ip_hl = 5;
42 rp.rawPacket.header.ipHeader.ip_tos = 0;
43 rp.rawPacket.header.ipHeader.ip_len = htons(40); // 20 of header + 20 of data
44 rp.rawPacket.header.ipHeader.ip_p = 6;
45 rp.rawPacket.header.ipHeader.ip_src.s_addr = inet_addr("192.168.0.1");
46 rp.rawPacket.header.ipHeader.ip_dst.s_addr = inet_addr("192.168.0.101");
47 rp.rawPacket.header.sPort = htons(80);
48 rp.rawPacket.header.dPort = htons(38546);
50 ensure_equals("IP header size (explicitly)", sizeof(rp.rawPacket.header.ipHeader), static_cast<size_t>(20));
51 ensure_equals("IP version", rp.GetIPVersion(), 4);
52 ensure_equals("IP header size (with options)", rp.GetHeaderLen(), 20);
53 ensure_equals("Underlying protocol version", rp.GetProto(), 6);
54 ensure_equals("Packet length", rp.GetLen(), static_cast<uint32_t>(40));
55 ensure_equals("Source IP address", rp.GetSrcIP(), inet_addr("192.168.0.1"));
56 ensure_equals("Destination IP address", rp.GetDstIP(), inet_addr("192.168.0.101"));
57 ensure_equals("Source port number", rp.GetSrcPort(), 80);
58 ensure_equals("Destination port number", rp.GetDstPort(), 38546);
63 void testobject::test<2>()
66 for (size_t i = 0; i < ITERATIONS; ++i) {
74 memcpy(p1.pckt, buf, 68);
75 memcpy(p2.rawPacket.pckt, buf, 68);
76 memcpy(p3.rawPacket.pckt, buf, 68);
78 ensure_equals("IP versions", p1.GetIPVersion(), p2.GetIPVersion());
79 ensure_equals("IP headers length", p1.GetHeaderLen(), p2.GetHeaderLen());
80 ensure_equals("Protocols", p1.GetProto(), p2.GetProto());
81 ensure_equals("Source IPs", p1.GetSrcIP(), p2.GetSrcIP());
82 ensure_equals("Destination IPs", p1.GetDstIP(), p2.GetDstIP());
83 ensure_equals("Source ports", p1.GetSrcPort(), p2.GetSrcPort());
84 ensure_equals("Destination ports", p1.GetDstPort(), p2.GetDstPort());
86 ensure_equals("Self equallity", p2, p3);
87 ensure_equals("Reverse self equallity", p3, p2);
93 void genVector(uint8_t * buf)
95 for (size_t i = 0; i < 68; ++i) {
96 buf[i] = rand() % 256;
98 buf[0] = (buf[0] & 0xF0) | 0x05; // Fix header length
101 std::ostream & operator<<(std::ostream & stream, const RAW_PACKET & p)
103 stream.unsetf(std::ios::dec);
104 stream.setf(std::ios::hex);
105 for (size_t i = 0; i < sizeof(p.rawPacket.pckt); ++i) {
106 stream << static_cast<unsigned>(p.rawPacket.pckt[i]);
108 stream.unsetf(std::ios::hex);
109 stream.setf(std::ios::dec);