18 #include "../suricata-common.h"
19 #include "../stream-tcp-private.h"
20 #include "../stream-tcp.h"
21 #include "../stream-tcp-reassemble.h"
22 #include "../stream-tcp-inline.h"
23 #include "../stream-tcp-list.h"
24 #include "../stream-tcp-util.h"
25 #include "../util-streaming-buffer.h"
26 #include "../util-print.h"
27 #include "../util-unittest.h"
29 #define SET_ISN(stream, setseq) \
30 (stream)->isn = (setseq); \
31 (stream)->base_seq = (setseq) + 1
40 static int StreamTcpTest01(
void)
46 memset(&f, 0,
sizeof(
Flow));
50 TcpSession *ssn = StreamTcpNewSession(NULL, &stt, p, 0);
70 static int StreamTcpTest02(
void)
80 memset(&pq, 0,
sizeof(pq));
81 memset(&f, 0,
sizeof(
Flow));
84 memset(&tcph, 0,
sizeof(TCPHdr));
88 tcph.th_win = htons(5480);
97 p->
tcph->th_ack = htonl(1);
103 p->
tcph->th_ack = htonl(1);
104 p->
tcph->th_seq = htonl(1);
110 p->
tcph->th_ack = htonl(1);
111 p->
tcph->th_seq = htonl(2);
124 p->
tcph->th_ack = htonl(1);
125 p->
tcph->th_seq = htonl(6);
155 static int StreamTcpTest03(
void)
164 memset(&pq, 0,
sizeof(pq));
165 memset(&f, 0,
sizeof(
Flow));
168 memset(&tcph, 0,
sizeof(TCPHdr));
174 tcph.th_win = htons(5480);
175 tcph.th_seq = htonl(10);
176 tcph.th_ack = htonl(20);
184 p->
tcph->th_seq = htonl(20);
185 p->
tcph->th_ack = htonl(11);
192 p->
tcph->th_seq = htonl(19);
193 p->
tcph->th_ack = htonl(11);
229 static int StreamTcpTest04(
void)
238 memset(&pq, 0,
sizeof(pq));
239 memset(&f, 0,
sizeof(
Flow));
242 memset(&tcph, 0,
sizeof(TCPHdr));
248 tcph.th_win = htons(5480);
249 tcph.th_seq = htonl(10);
250 tcph.th_ack = htonl(20);
259 p->
tcph->th_seq = htonl(9);
260 p->
tcph->th_ack = htonl(19);
296 static int StreamTcpTest05(
void)
307 memset(&f, 0,
sizeof(
Flow));
310 memset(&tcph, 0,
sizeof(TCPHdr));
316 tcph.th_win = htons(5480);
317 tcph.th_seq = htonl(10);
318 tcph.th_ack = htonl(20);
329 p->
tcph->th_seq = htonl(20);
330 p->
tcph->th_ack = htonl(13);
341 p->
tcph->th_seq = htonl(13);
342 p->
tcph->th_ack = htonl(23);
353 p->
tcph->th_seq = htonl(19);
354 p->
tcph->th_ack = htonl(16);
394 static int StreamTcpTest06(
void)
405 memset(&f, 0,
sizeof(
Flow));
409 memset(&tcph, 0,
sizeof(TCPHdr));
421 printf(
"StreamTcpPacket failed: ");
426 printf(
"we have a ssn while we shouldn't: ");
433 printf(
"StreamTcpPacket failed (2): ");
438 printf(
"we have a ssn while we shouldn't (2): ");
455 static int StreamTcpTest07(
void)
463 uint8_t payload[1] = { 0x42 };
467 memset(&f, 0,
sizeof(
Flow));
470 memset(&tcph, 0,
sizeof(TCPHdr));
478 tcph.th_win = htons(5480);
479 tcph.th_seq = htonl(10);
480 tcph.th_ack = htonl(20);
493 p->
tcph->th_seq = htonl(11);
494 p->
tcph->th_ack = htonl(23);
516 static int StreamTcpTest08(
void)
524 uint8_t payload[1] = { 0x42 };
528 memset(&f, 0,
sizeof(
Flow));
531 memset(&tcph, 0,
sizeof(TCPHdr));
539 tcph.th_win = htons(5480);
540 tcph.th_seq = htonl(10);
541 tcph.th_ack = htonl(20);
554 p->
tcph->th_seq = htonl(11);
555 p->
tcph->th_ack = htonl(20);
578 static int StreamTcpTest09(
void)
586 uint8_t payload[1] = { 0x42 };
590 memset(&f, 0,
sizeof(
Flow));
593 memset(&tcph, 0,
sizeof(TCPHdr));
601 tcph.th_win = htons(5480);
602 tcph.th_seq = htonl(10);
603 tcph.th_ack = htonl(20);
612 p->
tcph->th_seq = htonl(12);
613 p->
tcph->th_ack = htonl(23);
623 p->
tcph->th_seq = htonl(11);
624 p->
tcph->th_ack = htonl(23);
634 FAIL_IF(TCPSEG_RB_NEXT(seg) != NULL);
648 static int StreamTcpTest10(
void)
659 memset(&f, 0,
sizeof(
Flow));
662 memset(&tcph, 0,
sizeof(TCPHdr));
669 tcph.th_win = htons(5480);
670 tcph.th_seq = htonl(10);
677 p->
tcph->th_seq = htonl(11);
678 p->
tcph->th_ack = htonl(11);
684 p->
tcph->th_seq = htonl(11);
685 p->
tcph->th_ack = htonl(11);
695 p->
tcph->th_seq = htonl(6);
696 p->
tcph->th_ack = htonl(11);
726 static int StreamTcpTest11(
void)
737 memset(&f, 0,
sizeof(
Flow));
740 memset(&tcph, 0,
sizeof(TCPHdr));
747 tcph.th_win = htons(5480);
748 tcph.th_seq = htonl(10);
749 tcph.th_ack = htonl(1);
755 p->
tcph->th_seq = htonl(11);
756 p->
tcph->th_ack = htonl(1);
762 p->
tcph->th_seq = htonl(11);
763 p->
tcph->th_ack = htonl(1);
773 p->
tcph->th_seq = htonl(2);
774 p->
tcph->th_ack = htonl(1);
805 static int StreamTcpTest12(
void)
816 memset(&f, 0,
sizeof(
Flow));
819 memset(&tcph, 0,
sizeof(TCPHdr));
825 tcph.th_win = htons(5480);
826 tcph.th_seq = htonl(10);
827 tcph.th_ack = htonl(11);
835 p->
tcph->th_seq = htonl(10);
836 p->
tcph->th_ack = htonl(11);
847 p->
tcph->th_seq = htonl(6);
848 p->
tcph->th_ack = htonl(11);
865 printf(
"failed in setting asynchronous session\n");
870 printf(
"failed in setting state\n");
876 printf(
"failed in seq %" PRIu32
" match\n",
899 static int StreamTcpTest13(
void)
910 memset(&f, 0,
sizeof(
Flow));
913 memset(&tcph, 0,
sizeof(TCPHdr));
919 tcph.th_win = htons(5480);
920 tcph.th_seq = htonl(10);
921 tcph.th_ack = htonl(11);
929 p->
tcph->th_seq = htonl(10);
930 p->
tcph->th_ack = htonl(11);
941 p->
tcph->th_seq = htonl(6);
942 p->
tcph->th_ack = htonl(11);
959 printf(
"failed in setting asynchronous session\n");
964 printf(
"failed in setting state\n");
968 p->
tcph->th_seq = htonl(11);
969 p->
tcph->th_ack = htonl(9);
982 printf(
"failed in seq %" PRIu32
" match\n",
998 static const char *dummy_conf_string =
"%YAML 1.1\n"
1001 "default-log-dir: /var/log/eidps\n"
1005 " default-log-level: debug\n"
1007 " default-format: \"<%t> - <%l>\"\n"
1009 " default-startup-message: Your IDS has started.\n"
1011 " default-output-filter:\n"
1015 " windows: 192.168.0.1\n"
1017 " linux: 192.168.0.2\n"
1020 static const char *dummy_conf_string1 =
"%YAML 1.1\n"
1023 "default-log-dir: /var/log/eidps\n"
1027 " default-log-level: debug\n"
1029 " default-format: \"<%t> - <%l>\"\n"
1031 " default-startup-message: Your IDS has started.\n"
1033 " default-output-filter:\n"
1037 " windows: 192.168.0.0/24,"
1040 " linux: 192.168.1.0/24,"
1051 static const char *StreamTcpParseOSPolicy(
char *conf_var_name)
1054 char conf_var_type_name[15] =
"host-os-policy";
1055 char *conf_var_full_name = NULL;
1056 const char *conf_var_value = NULL;
1058 if (conf_var_name == NULL)
1062 conf_var_full_name = (
char *)
SCMalloc(strlen(conf_var_type_name) + strlen(conf_var_name) + 2);
1063 if (conf_var_full_name == NULL)
1066 if (snprintf(conf_var_full_name, strlen(conf_var_type_name) + strlen(conf_var_name) + 2,
1067 "%s.%s", conf_var_type_name, conf_var_name) < 0) {
1068 SCLogError(
"Error in making the conf full name");
1072 if (
ConfGet(conf_var_full_name, &conf_var_value) != 1) {
1073 SCLogError(
"Error in getting conf value for conf name %s", conf_var_full_name);
1077 SCLogDebug(
"Value obtained from the yaml conf file, for the var "
1079 conf_var_name, conf_var_value);
1082 if (conf_var_full_name != NULL)
1083 SCFree(conf_var_full_name);
1093 static int StreamTcpTest14(
void)
1102 struct in_addr addr;
1104 char os_policy_name[10] =
"windows";
1105 const char *ip_addr;
1109 memset(&f, 0,
sizeof(
Flow));
1112 memset(&tcph, 0,
sizeof(TCPHdr));
1113 memset(&addr, 0,
sizeof(addr));
1114 memset(&ipv4h, 0,
sizeof(ipv4h));
1127 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
1129 strlcpy(os_policy_name,
"linux\0",
sizeof(os_policy_name));
1130 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
1132 addr.s_addr = inet_addr(
"192.168.0.1");
1133 tcph.th_win = htons(5480);
1134 tcph.th_seq = htonl(10);
1135 tcph.th_ack = htonl(20);
1149 p->
tcph->th_seq = htonl(20);
1150 p->
tcph->th_ack = htonl(13);
1161 p->
tcph->th_seq = htonl(15);
1162 p->
tcph->th_ack = htonl(23);
1173 p->
tcph->th_seq = htonl(14);
1174 p->
tcph->th_ack = htonl(23);
1185 addr.s_addr = inet_addr(
"192.168.0.2");
1186 p->
tcph->th_seq = htonl(25);
1187 p->
tcph->th_ack = htonl(13);
1199 p->
tcph->th_seq = htonl(24);
1200 p->
tcph->th_ack = htonl(13);
1220 printf(
"failed in next_seq match client.next_seq %" PRIu32
""
1221 " server.next_seq %" PRIu32
"\n",
1229 printf(
"failed in setting up OS policy, client.os_policy: %" PRIu8
""
1230 " should be %" PRIu8
" and server.os_policy: %" PRIu8
""
1231 " should be %" PRIu8
"\n",
1255 static int StreamTcp4WHSTest01(
void)
1266 memset(&f, 0,
sizeof(
Flow));
1269 memset(&tcph, 0,
sizeof(TCPHdr));
1275 tcph.th_win = htons(5480);
1276 tcph.th_seq = htonl(10);
1284 p->
tcph->th_seq = htonl(20);
1285 p->
tcph->th_ack = 0;
1293 printf(
"STREAMTCP_FLAG_4WHS flag not set: ");
1297 p->
tcph->th_seq = htonl(10);
1298 p->
tcph->th_ack = htonl(21);
1305 p->
tcph->th_seq = htonl(21);
1306 p->
tcph->th_ack = htonl(10);
1314 printf(
"state is not ESTABLISHED: ");
1335 static int StreamTcp4WHSTest02(
void)
1346 memset(&f, 0,
sizeof(
Flow));
1349 memset(&tcph, 0,
sizeof(TCPHdr));
1355 tcph.th_win = htons(5480);
1356 tcph.th_seq = htonl(10);
1364 p->
tcph->th_seq = htonl(20);
1365 p->
tcph->th_ack = 0;
1373 printf(
"STREAMTCP_FLAG_4WHS flag not set: ");
1377 p->
tcph->th_seq = htonl(30);
1378 p->
tcph->th_ack = htonl(21);
1383 printf(
"SYN/ACK pkt not rejected but it should have: ");
1404 static int StreamTcp4WHSTest03(
void)
1415 memset(&f, 0,
sizeof(
Flow));
1418 memset(&tcph, 0,
sizeof(TCPHdr));
1424 tcph.th_win = htons(5480);
1425 tcph.th_seq = htonl(10);
1433 p->
tcph->th_seq = htonl(20);
1434 p->
tcph->th_ack = 0;
1442 printf(
"STREAMTCP_FLAG_4WHS flag not set: ");
1446 p->
tcph->th_seq = htonl(30);
1447 p->
tcph->th_ack = htonl(11);
1454 p->
tcph->th_seq = htonl(11);
1455 p->
tcph->th_ack = htonl(31);
1463 printf(
"state is not ESTABLISHED: ");
1483 static int StreamTcpTest15(
void)
1492 struct in_addr addr;
1494 char os_policy_name[10] =
"windows";
1495 const char *ip_addr;
1499 memset(&f, 0,
sizeof(
Flow));
1502 memset(&tcph, 0,
sizeof(TCPHdr));
1503 memset(&addr, 0,
sizeof(addr));
1504 memset(&ipv4h, 0,
sizeof(ipv4h));
1517 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
1519 strlcpy(os_policy_name,
"linux\0",
sizeof(os_policy_name));
1520 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
1522 addr.s_addr = inet_addr(
"192.168.0.20");
1523 tcph.th_win = htons(5480);
1524 tcph.th_seq = htonl(10);
1525 tcph.th_ack = htonl(20);
1539 p->
tcph->th_seq = htonl(20);
1540 p->
tcph->th_ack = htonl(13);
1551 p->
tcph->th_seq = htonl(15);
1552 p->
tcph->th_ack = htonl(23);
1563 p->
tcph->th_seq = htonl(14);
1564 p->
tcph->th_ack = htonl(23);
1575 addr.s_addr = inet_addr(
"192.168.1.20");
1576 p->
tcph->th_seq = htonl(25);
1577 p->
tcph->th_ack = htonl(13);
1589 p->
tcph->th_seq = htonl(24);
1590 p->
tcph->th_ack = htonl(13);
1610 printf(
"failed in next_seq match client.next_seq %" PRIu32
""
1611 " server.next_seq %" PRIu32
"\n",
1619 printf(
"failed in setting up OS policy, client.os_policy: %" PRIu8
""
1620 " should be %" PRIu8
" and server.os_policy: %" PRIu8
""
1621 " should be %" PRIu8
"\n",
1645 static int StreamTcpTest16(
void)
1654 struct in_addr addr;
1656 char os_policy_name[10] =
"windows";
1657 const char *ip_addr;
1661 memset(&f, 0,
sizeof(
Flow));
1664 memset(&tcph, 0,
sizeof(TCPHdr));
1665 memset(&addr, 0,
sizeof(addr));
1666 memset(&ipv4h, 0,
sizeof(ipv4h));
1679 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
1681 strlcpy(os_policy_name,
"linux\0",
sizeof(os_policy_name));
1682 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
1684 addr.s_addr = inet_addr(
"192.168.0.1");
1685 tcph.th_win = htons(5480);
1686 tcph.th_seq = htonl(10);
1687 tcph.th_ack = htonl(20);
1701 p->
tcph->th_seq = htonl(20);
1702 p->
tcph->th_ack = htonl(13);
1713 p->
tcph->th_seq = htonl(15);
1714 p->
tcph->th_ack = htonl(23);
1725 p->
tcph->th_seq = htonl(14);
1726 p->
tcph->th_ack = htonl(23);
1737 addr.s_addr = inet_addr(
"192.168.1.1");
1738 p->
tcph->th_seq = htonl(25);
1739 p->
tcph->th_ack = htonl(13);
1751 p->
tcph->th_seq = htonl(24);
1752 p->
tcph->th_ack = htonl(13);
1772 printf(
"failed in next_seq match client.next_seq %" PRIu32
""
1773 " server.next_seq %" PRIu32
"\n",
1781 printf(
"failed in setting up OS policy, client.os_policy: %" PRIu8
""
1782 " should be %" PRIu8
" and server.os_policy: %" PRIu8
""
1783 " should be %" PRIu8
"\n",
1808 static int StreamTcpTest17(
void)
1817 struct in_addr addr;
1819 char os_policy_name[10] =
"windows";
1820 const char *ip_addr;
1824 memset(&f, 0,
sizeof(
Flow));
1827 memset(&tcph, 0,
sizeof(TCPHdr));
1828 memset(&addr, 0,
sizeof(addr));
1829 memset(&ipv4h, 0,
sizeof(ipv4h));
1842 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
1844 strlcpy(os_policy_name,
"linux\0",
sizeof(os_policy_name));
1845 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
1847 addr.s_addr = inet_addr(
"192.168.0.1");
1848 tcph.th_win = htons(5480);
1849 tcph.th_seq = htonl(10);
1850 tcph.th_ack = htonl(20);
1864 p->
tcph->th_seq = htonl(20);
1865 p->
tcph->th_ack = htonl(13);
1876 p->
tcph->th_seq = htonl(15);
1877 p->
tcph->th_ack = htonl(23);
1888 p->
tcph->th_seq = htonl(14);
1889 p->
tcph->th_ack = htonl(23);
1900 addr.s_addr = inet_addr(
"10.1.1.1");
1901 p->
tcph->th_seq = htonl(25);
1902 p->
tcph->th_ack = htonl(13);
1914 p->
tcph->th_seq = htonl(24);
1915 p->
tcph->th_ack = htonl(13);
1935 printf(
"failed in next_seq match client.next_seq %" PRIu32
""
1936 " server.next_seq %" PRIu32
"\n",
1944 printf(
"failed in setting up OS policy, client.os_policy: %" PRIu8
""
1945 " should be %" PRIu8
" and server.os_policy: %" PRIu8
""
1946 " should be %" PRIu8
"\n",
1965 static int StreamTcpTest18(
void)
1968 struct in_addr addr;
1969 char os_policy_name[10] =
"windows";
1970 const char *ip_addr;
1977 memset(&addr, 0,
sizeof(addr));
1978 memset(&stream, 0,
sizeof(stream));
1979 memset(&ipv4h, 0,
sizeof(ipv4h));
1990 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
1995 addr.s_addr = inet_addr(
"192.168.1.1");
2012 static int StreamTcpTest19(
void)
2015 struct in_addr addr;
2016 char os_policy_name[10] =
"windows";
2017 const char *ip_addr;
2024 memset(&addr, 0,
sizeof(addr));
2025 memset(&stream, 0,
sizeof(stream));
2026 memset(&ipv4h, 0,
sizeof(ipv4h));
2037 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
2042 addr.s_addr = inet_addr(
"192.168.0.30");
2047 printf(
"expected os_policy: %" PRIu8
" but received %" PRIu8
": ",
2062 static int StreamTcpTest20(
void)
2065 struct in_addr addr;
2066 char os_policy_name[10] =
"linux";
2067 const char *ip_addr;
2074 memset(&addr, 0,
sizeof(addr));
2075 memset(&stream, 0,
sizeof(stream));
2076 memset(&ipv4h, 0,
sizeof(ipv4h));
2087 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
2092 addr.s_addr = inet_addr(
"192.168.0.1");
2097 printf(
"expected os_policy: %" PRIu8
" but received %" PRIu8
"\n", (uint8_t)
OS_POLICY_LINUX,
2112 static int StreamTcpTest21(
void)
2115 struct in_addr addr;
2116 char os_policy_name[10] =
"linux";
2117 const char *ip_addr;
2124 memset(&addr, 0,
sizeof(addr));
2125 memset(&stream, 0,
sizeof(stream));
2126 memset(&ipv4h, 0,
sizeof(ipv4h));
2137 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
2142 addr.s_addr = inet_addr(
"192.168.1.30");
2147 printf(
"expected os_policy: %" PRIu8
" but received %" PRIu8
"\n", (uint8_t)
OS_POLICY_LINUX,
2162 static int StreamTcpTest22(
void)
2165 struct in_addr addr;
2166 char os_policy_name[10] =
"windows";
2167 const char *ip_addr;
2174 memset(&addr, 0,
sizeof(addr));
2175 memset(&stream, 0,
sizeof(stream));
2176 memset(&ipv4h, 0,
sizeof(ipv4h));
2187 ip_addr = StreamTcpParseOSPolicy(os_policy_name);
2192 addr.s_addr = inet_addr(
"123.231.2.1");
2197 printf(
"expected os_policy: %" PRIu8
" but received %" PRIu8
"\n",
2212 static int StreamTcpTest23(
void)
2218 uint8_t packet[1460] =
"";
2226 memset(&f, 0,
sizeof(
Flow));
2227 memset(&tcph, 0,
sizeof(TCPHdr));
2237 p->
proto = IPPROTO_TCP;
2246 p->
tcph->th_seq = htonl(3184324453UL);
2247 p->
tcph->th_ack = htonl(3373419609UL);
2252 p->
tcph->th_seq = htonl(3184324455UL);
2253 p->
tcph->th_ack = htonl(3373419621UL);
2258 p->
tcph->th_seq = htonl(3184324453UL);
2259 p->
tcph->th_ack = htonl(3373419621UL);
2277 static int StreamTcpTest24(
void)
2285 uint8_t packet[1460] =
"";
2294 memset(&f, 0,
sizeof(
Flow));
2295 memset(&tcph, 0,
sizeof(TCPHdr));
2301 p->
proto = IPPROTO_TCP;
2311 p->
tcph->th_seq = htonl(3184324455UL);
2312 p->
tcph->th_ack = htonl(3373419621UL);
2317 p->
tcph->th_seq = htonl(3184324459UL);
2318 p->
tcph->th_ack = htonl(3373419633UL);
2323 p->
tcph->th_seq = htonl(3184324459UL);
2324 p->
tcph->th_ack = htonl(3373419657UL);
2346 static int StreamTcpTest25(
void)
2359 memset(&f, 0,
sizeof(
Flow));
2362 memset(&tcph, 0,
sizeof(TCPHdr));
2366 tcph.th_win = htons(5480);
2375 p->
tcph->th_ack = htonl(1);
2382 p->
tcph->th_ack = htonl(1);
2383 p->
tcph->th_seq = htonl(1);
2390 p->
tcph->th_ack = htonl(1);
2391 p->
tcph->th_seq = htonl(2);
2406 p->
tcph->th_ack = htonl(1);
2407 p->
tcph->th_seq = htonl(6);
2437 static int StreamTcpTest26(
void)
2450 memset(&f, 0,
sizeof(
Flow));
2453 memset(&tcph, 0,
sizeof(TCPHdr));
2457 tcph.th_win = htons(5480);
2467 p->
tcph->th_ack = htonl(1);
2474 p->
tcph->th_ack = htonl(1);
2475 p->
tcph->th_seq = htonl(1);
2482 p->
tcph->th_ack = htonl(1);
2483 p->
tcph->th_seq = htonl(2);
2498 p->
tcph->th_ack = htonl(1);
2499 p->
tcph->th_seq = htonl(6);
2529 static int StreamTcpTest27(
void)
2542 memset(&f, 0,
sizeof(
Flow));
2545 memset(&tcph, 0,
sizeof(TCPHdr));
2549 tcph.th_win = htons(5480);
2559 p->
tcph->th_ack = htonl(1);
2566 p->
tcph->th_ack = htonl(1);
2567 p->
tcph->th_seq = htonl(1);
2574 p->
tcph->th_ack = htonl(1);
2575 p->
tcph->th_seq = htonl(2);
2590 p->
tcph->th_ack = htonl(1);
2591 p->
tcph->th_seq = htonl(6);
2617 static int StreamTcpTest28(
void)
2645 static int StreamTcpTest37(
void)
2658 memset(&f, 0,
sizeof(
Flow));
2661 memset(&tcph, 0,
sizeof(TCPHdr));
2666 tcph.th_win = htons(5480);
2674 printf(
"failed in processing packet\n");
2678 p->
tcph->th_ack = htonl(1);
2683 printf(
"failed in processing packet\n");
2687 p->
tcph->th_ack = htonl(1);
2688 p->
tcph->th_seq = htonl(1);
2693 printf(
"failed in processing packet\n");
2698 printf(
"the TCP state should be TCP_ESTABLISEHD\n");
2702 p->
tcph->th_ack = htonl(2);
2703 p->
tcph->th_seq = htonl(4);
2708 printf(
"failed in processing packet\n");
2713 printf(
"the TCP state should be TCP_CLOSE_WAIT\n");
2717 p->
tcph->th_ack = htonl(1);
2718 p->
tcph->th_seq = htonl(1);
2727 printf(
"failed in processing packet\n");
2731 p->
tcph->th_ack = htonl(4);
2732 p->
tcph->th_seq = htonl(2);
2738 printf(
"failed in processing packet\n");
2762 static int StreamTcpTest38(
void)
2768 uint8_t payload[128];
2772 memset(&f, 0,
sizeof(
Flow));
2775 memset(&tcph, 0,
sizeof(TCPHdr));
2783 tcph.th_win = htons(5480);
2790 printf(
"failed in processing packet in StreamTcpPacket\n");
2794 p->
tcph->th_ack = htonl(1);
2799 printf(
"failed in processing packet in StreamTcpPacket\n");
2803 p->
tcph->th_ack = htonl(1);
2804 p->
tcph->th_seq = htonl(1);
2809 printf(
"failed in processing packet in StreamTcpPacket\n");
2813 p->
tcph->th_ack = htonl(29847);
2814 p->
tcph->th_seq = htonl(2);
2823 printf(
"failed in processing packet in StreamTcpPacket\n");
2830 printf(
"the server.last_ack should be 1, but it is %" PRIu32
"\n",
2835 p->
tcph->th_ack = htonl(1);
2836 p->
tcph->th_seq = htonl(1);
2845 printf(
"failed in processing packet in StreamTcpPacket\n");
2850 printf(
"the server.next_seq should be 128, but it is %" PRIu32
"\n",
2855 p->
tcph->th_ack = htonl(256);
2856 p->
tcph->th_seq = htonl(5);
2865 printf(
"failed in processing packet in StreamTcpPacket\n");
2872 printf(
"the server.last_ack should be 1, but it is %" PRIu32
"\n",
2877 p->
tcph->th_ack = htonl(128);
2878 p->
tcph->th_seq = htonl(8);
2887 printf(
"failed in processing packet in StreamTcpPacket\n");
2894 printf(
"the server.last_ack should be 256, but it is %" PRIu32
"\n",
2916 static int StreamTcpTest39(
void)
2925 memset(&f, 0,
sizeof(
Flow));
2928 memset(&tcph, 0,
sizeof(TCPHdr));
2936 tcph.th_win = htons(5480);
2945 printf(
"failed in processing packet in StreamTcpPacket\n");
2949 p->
tcph->th_ack = htonl(1);
2954 printf(
"failed in processing packet in StreamTcpPacket\n");
2958 p->
tcph->th_ack = htonl(1);
2959 p->
tcph->th_seq = htonl(1);
2964 printf(
"failed in processing packet in StreamTcpPacket\n");
2968 p->
tcph->th_ack = htonl(1);
2969 p->
tcph->th_seq = htonl(1);
2978 printf(
"failed in processing packet in StreamTcpPacket\n");
2983 printf(
"the server.next_seq should be 4, but it is %" PRIu32
"\n",
2988 p->
tcph->th_ack = htonl(4);
2989 p->
tcph->th_seq = htonl(2);
2998 printf(
"failed in processing packet in StreamTcpPacket\n");
3005 printf(
"the server.last_ack should be 4, but it is %" PRIu32
"\n",
3010 p->
tcph->th_seq = htonl(4);
3011 p->
tcph->th_ack = htonl(5);
3020 printf(
"failed in processing packet in StreamTcpPacket\n");
3027 printf(
"the server.next_seq should be 7, but it is %" PRIu32
"\n",
3043 static int StreamTcpTest42(
void)
3056 memset(&f, 0,
sizeof(
Flow));
3059 memset(&tcph, 0,
sizeof(TCPHdr));
3065 tcph.th_win = htons(5480);
3070 tcph.th_seq = htonl(100);
3077 p->
tcph->th_seq = htonl(500);
3078 p->
tcph->th_ack = htonl(101);
3086 p->
tcph->th_seq = htonl(1000);
3087 p->
tcph->th_ack = htonl(101);
3095 p->
tcph->th_ack = htonl(501);
3096 p->
tcph->th_seq = htonl(101);
3106 printf(
"state not TCP_ESTABLISHED: ");
3130 static int StreamTcpTest43(
void)
3143 memset(&f, 0,
sizeof(
Flow));
3146 memset(&tcph, 0,
sizeof(TCPHdr));
3152 tcph.th_win = htons(5480);
3157 tcph.th_seq = htonl(100);
3164 p->
tcph->th_seq = htonl(500);
3165 p->
tcph->th_ack = htonl(101);
3173 p->
tcph->th_seq = htonl(1000);
3174 p->
tcph->th_ack = htonl(101);
3182 p->
tcph->th_ack = htonl(1001);
3183 p->
tcph->th_seq = htonl(101);
3193 printf(
"state not TCP_ESTABLISHED: ");
3217 static int StreamTcpTest44(
void)
3230 memset(&f, 0,
sizeof(
Flow));
3233 memset(&tcph, 0,
sizeof(TCPHdr));
3239 tcph.th_win = htons(5480);
3244 tcph.th_seq = htonl(100);
3251 p->
tcph->th_seq = htonl(500);
3252 p->
tcph->th_ack = htonl(101);
3260 p->
tcph->th_seq = htonl(1000);
3261 p->
tcph->th_ack = htonl(101);
3269 p->
tcph->th_ack = htonl(3001);
3270 p->
tcph->th_seq = htonl(101);
3300 static int StreamTcpTest45(
void)
3313 memset(&f, 0,
sizeof(
Flow));
3316 memset(&tcph, 0,
sizeof(TCPHdr));
3323 tcph.th_win = htons(5480);
3328 tcph.th_seq = htonl(100);
3335 p->
tcph->th_seq = htonl(500);
3336 p->
tcph->th_ack = htonl(101);
3344 p->
tcph->th_seq = htonl(1000);
3345 p->
tcph->th_ack = htonl(101);
3353 p->
tcph->th_seq = htonl(2000);
3354 p->
tcph->th_ack = htonl(101);
3362 p->
tcph->th_seq = htonl(3000);
3363 p->
tcph->th_ack = htonl(101);
3371 p->
tcph->th_ack = htonl(1001);
3372 p->
tcph->th_seq = htonl(101);
3382 printf(
"state not TCP_ESTABLISHED: ");
3406 UtRegisterTest(
"StreamTcpTest01 -- TCP session allocation", StreamTcpTest01);
3407 UtRegisterTest(
"StreamTcpTest02 -- TCP session deallocation", StreamTcpTest02);
3408 UtRegisterTest(
"StreamTcpTest03 -- SYN missed MidStream session", StreamTcpTest03);
3409 UtRegisterTest(
"StreamTcpTest04 -- SYN/ACK missed MidStream session", StreamTcpTest04);
3410 UtRegisterTest(
"StreamTcpTest05 -- 3WHS missed MidStream session", StreamTcpTest05);
3411 UtRegisterTest(
"StreamTcpTest06 -- FIN, RST message MidStream session", StreamTcpTest06);
3412 UtRegisterTest(
"StreamTcpTest07 -- PAWS invalid timestamp", StreamTcpTest07);
3413 UtRegisterTest(
"StreamTcpTest08 -- PAWS valid timestamp", StreamTcpTest08);
3414 UtRegisterTest(
"StreamTcpTest09 -- No Client Reassembly", StreamTcpTest09);
3415 UtRegisterTest(
"StreamTcpTest10 -- No missed packet Async stream", StreamTcpTest10);
3416 UtRegisterTest(
"StreamTcpTest11 -- SYN missed Async stream", StreamTcpTest11);
3417 UtRegisterTest(
"StreamTcpTest12 -- SYN/ACK missed Async stream", StreamTcpTest12);
3418 UtRegisterTest(
"StreamTcpTest13 -- opposite stream packets for Async "
3424 UtRegisterTest(
"StreamTcpTest14 -- setup OS policy", StreamTcpTest14);
3425 UtRegisterTest(
"StreamTcpTest15 -- setup OS policy", StreamTcpTest15);
3426 UtRegisterTest(
"StreamTcpTest16 -- setup OS policy", StreamTcpTest16);
3427 UtRegisterTest(
"StreamTcpTest17 -- setup OS policy", StreamTcpTest17);
3428 UtRegisterTest(
"StreamTcpTest18 -- setup OS policy", StreamTcpTest18);
3429 UtRegisterTest(
"StreamTcpTest19 -- setup OS policy", StreamTcpTest19);
3430 UtRegisterTest(
"StreamTcpTest20 -- setup OS policy", StreamTcpTest20);
3431 UtRegisterTest(
"StreamTcpTest21 -- setup OS policy", StreamTcpTest21);
3432 UtRegisterTest(
"StreamTcpTest22 -- setup OS policy", StreamTcpTest22);
3433 UtRegisterTest(
"StreamTcpTest23 -- stream memory leaks", StreamTcpTest23);
3434 UtRegisterTest(
"StreamTcpTest24 -- stream memory leaks", StreamTcpTest24);
3435 UtRegisterTest(
"StreamTcpTest25 -- test ecn/cwr sessions", StreamTcpTest25);
3436 UtRegisterTest(
"StreamTcpTest26 -- test ecn/cwr sessions", StreamTcpTest26);
3437 UtRegisterTest(
"StreamTcpTest27 -- test ecn/cwr sessions", StreamTcpTest27);
3438 UtRegisterTest(
"StreamTcpTest28 -- Memcap Test", StreamTcpTest28);
3443 UtRegisterTest(
"StreamTcpTest29 -- Badchecksum Reset Test", StreamTcpTest29, 1);
3444 UtRegisterTest(
"StreamTcpTest30 -- Badchecksum Overlap Test", StreamTcpTest30, 1);
3445 UtRegisterTest(
"StreamTcpTest31 -- MultipleSyns Test", StreamTcpTest31, 1);
3446 UtRegisterTest(
"StreamTcpTest32 -- Bogus CWR Test", StreamTcpTest32, 1);
3447 UtRegisterTest(
"StreamTcpTest33 -- RST-SYN Again Test", StreamTcpTest33, 1);
3448 UtRegisterTest(
"StreamTcpTest34 -- SYN-PUSH Test", StreamTcpTest34, 1);
3449 UtRegisterTest(
"StreamTcpTest35 -- SYN-URG Test", StreamTcpTest35, 1);
3450 UtRegisterTest(
"StreamTcpTest36 -- PUSH-URG Test", StreamTcpTest36, 1);
3452 UtRegisterTest(
"StreamTcpTest37 -- Out of order FIN Test", StreamTcpTest37);
3454 UtRegisterTest(
"StreamTcpTest38 -- validate ACK", StreamTcpTest38);
3455 UtRegisterTest(
"StreamTcpTest39 -- update next_seq", StreamTcpTest39);
3457 UtRegisterTest(
"StreamTcpTest42 -- SYN/ACK queue", StreamTcpTest42);
3458 UtRegisterTest(
"StreamTcpTest43 -- SYN/ACK queue", StreamTcpTest43);
3459 UtRegisterTest(
"StreamTcpTest44 -- SYN/ACK queue", StreamTcpTest44);
3460 UtRegisterTest(
"StreamTcpTest45 -- SYN/ACK queue", StreamTcpTest45);