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"
41 #define OVERLAP_START(isn, policy) \
42 TcpReassemblyThreadCtx *ra_ctx = NULL; \
45 memset(&tv, 0, sizeof(tv)); \
47 StreamTcpUTInit(&ra_ctx); \
49 StreamTcpUTSetupSession(&ssn); \
50 StreamTcpUTSetupStream(&ssn.server, (isn)); \
51 StreamTcpUTSetupStream(&ssn.client, (isn)); \
53 TcpStream *stream = &ssn.client; \
54 stream->os_policy = (policy);
57 StreamTcpUTClearSession(&ssn); \
58 StreamTcpUTDeinit(ra_ctx); \
61 #define OVERLAP_STEP(rseq, seg, seglen, buf, buflen) \
62 StreamTcpUTAddPayload(&tv, ra_ctx, &ssn, stream, stream->isn + (rseq), (uint8_t *)(seg), (seglen)); \
63 FAIL_IF(!(VALIDATE(stream, (uint8_t *)(buf), (buflen))));
65 static int OverlapBSD(uint32_t isn)
74 OVERLAP_STEP(17,
"FFF", 3,
"\0AAA\0BBCCC\0D\0\0EEFFF", 19);
75 OVERLAP_STEP(20,
"GG", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGG", 21);
76 OVERLAP_STEP(22,
"HH", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHH", 23);
77 OVERLAP_STEP(24,
"I", 1,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHHI", 24);
79 OVERLAP_STEP(3,
"JJJJ", 4,
"\0AAAJJBCCC\0D\0\0EEFFFGGHHI", 24);
81 OVERLAP_STEP(8,
"KKK", 3,
"\0AAAJJBCCC\0D\0\0EEFFFGGHHI", 24);
83 OVERLAP_STEP(11,
"LLL", 3,
"\0AAAJJBCCCLLL\0EEFFFGGHHI", 24);
85 OVERLAP_STEP(14,
"MMM", 3,
"\0AAAJJBCCCLLLMMMFFFGGHHI", 24);
87 OVERLAP_STEP(18,
"N", 1,
"\0AAAJJBCCCLLLMMMFFFGGHHI", 24);
89 OVERLAP_STEP(21,
"O", 1,
"\0AAAJJBCCCLLLMMMFFFGGHHI", 24);
91 OVERLAP_STEP(22,
"P", 1,
"\0AAAJJBCCCLLLMMMFFFGGHHI", 24);
93 OVERLAP_STEP(24,
"QQ", 2,
"\0AAAJJBCCCLLLMMMFFFGGHHIQ", 25);
94 OVERLAP_STEP(1,
"0", 1,
"0AAAJJBCCCLLLMMMFFFGGHHIQ", 25);
99 static int OverlapBSDBefore(uint32_t isn)
105 OVERLAP_STEP(12,
"EE", 2,
"\0\0B\0\0\0\0\0D\0\0EE", 13);
114 static int OverlapBSDSame(uint32_t isn)
119 OVERLAP_STEP(15,
"HH", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HH", 16);
120 OVERLAP_STEP(17,
"II", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
122 OVERLAP_STEP(1,
"KKK", 3,
"CCC\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
124 OVERLAP_STEP(1,
"LLLL", 4,
"CCCL\0\0\0\0\0\0\0\0\0\0HHII", 18);
125 OVERLAP_STEP(15,
"P", 1,
"CCCL\0\0\0\0\0\0\0\0\0\0HHII", 18);
126 OVERLAP_STEP(15,
"QQ", 2,
"CCCL\0\0\0\0\0\0\0\0\0\0HHII", 18);
131 static int OverlapBSDAfter(uint32_t isn)
136 OVERLAP_STEP(16,
"FFF", 3,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFF", 18);
137 OVERLAP_STEP(19,
"GG", 2,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
138 OVERLAP_STEP(2,
"JJ", 2,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
139 OVERLAP_STEP(20,
"O", 1,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
140 OVERLAP_STEP(17,
"N", 1,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
145 static int OverlapVISTA(uint32_t isn)
154 OVERLAP_STEP(17,
"FFF", 3,
"\0AAA\0BBCCC\0D\0\0EEFFF", 19);
155 OVERLAP_STEP(20,
"GG", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGG", 21);
156 OVERLAP_STEP(22,
"HH", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHH", 23);
157 OVERLAP_STEP(24,
"I", 1,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHHI", 24);
159 OVERLAP_STEP(3,
"JJJJ", 4,
"\0AAAJBBCCC\0D\0\0EEFFFGGHHI", 24);
161 OVERLAP_STEP(8,
"KKK", 3,
"\0AAAJBBCCC\0D\0\0EEFFFGGHHI", 24);
163 OVERLAP_STEP(11,
"LLL", 3,
"\0AAAJBBCCCLDL\0EEFFFGGHHI", 24);
165 OVERLAP_STEP(14,
"MMM", 3,
"\0AAAJBBCCCLDLMEEFFFGGHHI", 24);
167 OVERLAP_STEP(18,
"N", 1,
"\0AAAJBBCCCLDLMEEFFFGGHHI", 24);
169 OVERLAP_STEP(21,
"O", 1,
"\0AAAJBBCCCLDLMEEFFFGGHHI", 24);
171 OVERLAP_STEP(22,
"P", 1,
"\0AAAJBBCCCLDLMEEFFFGGHHI", 24);
173 OVERLAP_STEP(24,
"QQ", 2,
"\0AAAJBBCCCLDLMEEFFFGGHHIQ", 25);
174 OVERLAP_STEP(1,
"0", 1,
"0AAAJBBCCCLDLMEEFFFGGHHIQ", 25);
179 static int OverlapVISTABefore(uint32_t isn)
185 OVERLAP_STEP(12,
"EE", 2,
"\0\0B\0\0\0\0\0D\0\0EE", 13);
194 static int OverlapVISTASame(uint32_t isn)
199 OVERLAP_STEP(15,
"HH", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HH", 16);
200 OVERLAP_STEP(17,
"II", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
201 OVERLAP_STEP(1,
"KKK", 3,
"CCC\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
202 OVERLAP_STEP(1,
"LLLL", 4,
"CCCL\0\0\0\0\0\0\0\0\0\0HHII", 18);
203 OVERLAP_STEP(15,
"P", 1,
"CCCL\0\0\0\0\0\0\0\0\0\0HHII", 18);
204 OVERLAP_STEP(15,
"QQ", 2,
"CCCL\0\0\0\0\0\0\0\0\0\0HHII", 18);
209 static int OverlapVISTAAfter(uint32_t isn)
214 OVERLAP_STEP(16,
"FFF", 3,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFF", 18);
215 OVERLAP_STEP(19,
"GG", 2,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
216 OVERLAP_STEP(2,
"JJ", 2,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
217 OVERLAP_STEP(20,
"O", 1,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
218 OVERLAP_STEP(17,
"N", 1,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
223 static int OverlapLINUX(uint32_t isn)
232 OVERLAP_STEP(17,
"FFF", 3,
"\0AAA\0BBCCC\0D\0\0EEFFF", 19);
233 OVERLAP_STEP(20,
"GG", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGG", 21);
234 OVERLAP_STEP(22,
"HH", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHH", 23);
235 OVERLAP_STEP(24,
"I", 1,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHHI", 24);
237 OVERLAP_STEP(3,
"JJJJ", 4,
"\0AAAJJBCCC\0D\0\0EEFFFGGHHI", 24);
239 OVERLAP_STEP(8,
"KKK", 3,
"\0AAAJJBCCC\0D\0\0EEFFFGGHHI", 24);
241 OVERLAP_STEP(11,
"LLL", 3,
"\0AAAJJBCCCLLL\0EEFFFGGHHI", 24);
243 OVERLAP_STEP(14,
"MMM", 3,
"\0AAAJJBCCCLLLMMMFFFGGHHI", 24);
245 OVERLAP_STEP(18,
"N", 1,
"\0AAAJJBCCCLLLMMMFFFGGHHI", 24);
247 OVERLAP_STEP(21,
"O", 1,
"\0AAAJJBCCCLLLMMMFFFGGHHI", 24);
249 OVERLAP_STEP(22,
"P", 1,
"\0AAAJJBCCCLLLMMMFFFGGHHI", 24);
251 OVERLAP_STEP(24,
"QQ", 2,
"\0AAAJJBCCCLLLMMMFFFGGHHQQ", 25);
252 OVERLAP_STEP(1,
"0", 1,
"0AAAJJBCCCLLLMMMFFFGGHHQQ", 25);
257 static int OverlapLINUXBefore(uint32_t isn)
263 OVERLAP_STEP(12,
"EE", 2,
"\0\0B\0\0\0\0\0D\0\0EE", 13);
272 static int OverlapLINUXSame(uint32_t isn)
277 OVERLAP_STEP(15,
"HH", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HH", 16);
278 OVERLAP_STEP(17,
"II", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
279 OVERLAP_STEP(1,
"KKK", 3,
"CCC\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
280 OVERLAP_STEP(1,
"LLLL", 4,
"LLLL\0\0\0\0\0\0\0\0\0\0HHII", 18);
281 OVERLAP_STEP(15,
"P", 1,
"LLLL\0\0\0\0\0\0\0\0\0\0HHII", 18);
282 OVERLAP_STEP(15,
"QQ", 2,
"LLLL\0\0\0\0\0\0\0\0\0\0HHII", 18);
287 static int OverlapLINUXAfter(uint32_t isn)
292 OVERLAP_STEP(16,
"FFF", 3,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFF", 18);
293 OVERLAP_STEP(19,
"GG", 2,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
294 OVERLAP_STEP(2,
"JJ", 2,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
295 OVERLAP_STEP(20,
"O", 1,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
296 OVERLAP_STEP(17,
"N", 1,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
301 static int OverlapLINUXOLD(uint32_t isn)
310 OVERLAP_STEP(17,
"FFF", 3,
"\0AAA\0BBCCC\0D\0\0EEFFF", 19);
311 OVERLAP_STEP(20,
"GG", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGG", 21);
312 OVERLAP_STEP(22,
"HH", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHH", 23);
313 OVERLAP_STEP(24,
"I", 1,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHHI", 24);
315 OVERLAP_STEP(3,
"JJJJ", 4,
"\0AAAJJBCCC\0D\0\0EEFFFGGHHI", 24);
317 OVERLAP_STEP(8,
"KKK", 3,
"\0AAAJJBKKK\0D\0\0EEFFFGGHHI", 24);
319 OVERLAP_STEP(11,
"LLL", 3,
"\0AAAJJBKKKLLL\0EEFFFGGHHI", 24);
321 OVERLAP_STEP(14,
"MMM", 3,
"\0AAAJJBKKKLLLMMMFFFGGHHI", 24);
323 OVERLAP_STEP(18,
"N", 1,
"\0AAAJJBKKKLLLMMMFFFGGHHI", 24);
325 OVERLAP_STEP(21,
"O", 1,
"\0AAAJJBKKKLLLMMMFFFGGHHI", 24);
327 OVERLAP_STEP(22,
"P", 1,
"\0AAAJJBKKKLLLMMMFFFGGHHI", 24);
329 OVERLAP_STEP(24,
"QQ", 2,
"\0AAAJJBKKKLLLMMMFFFGGHHQQ", 25);
330 OVERLAP_STEP(1,
"0", 1,
"0AAAJJBKKKLLLMMMFFFGGHHQQ", 25);
335 static int OverlapLINUXOLDBefore(uint32_t isn)
341 OVERLAP_STEP(12,
"EE", 2,
"\0\0B\0\0\0\0\0D\0\0EE", 13);
350 static int OverlapLINUXOLDSame(uint32_t isn)
355 OVERLAP_STEP(15,
"HH", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HH", 16);
356 OVERLAP_STEP(17,
"II", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
357 OVERLAP_STEP(1,
"KKK", 3,
"KKK\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
358 OVERLAP_STEP(1,
"LLLL", 4,
"LLLL\0\0\0\0\0\0\0\0\0\0HHII", 18);
359 OVERLAP_STEP(15,
"P", 1,
"LLLL\0\0\0\0\0\0\0\0\0\0HHII", 18);
360 OVERLAP_STEP(15,
"QQ", 2,
"LLLL\0\0\0\0\0\0\0\0\0\0QQII", 18);
365 static int OverlapLINUXOLDAfter(uint32_t isn)
370 OVERLAP_STEP(16,
"FFF", 3,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFF", 18);
371 OVERLAP_STEP(19,
"GG", 2,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
372 OVERLAP_STEP(2,
"JJ", 2,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
373 OVERLAP_STEP(20,
"O", 1,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
374 OVERLAP_STEP(17,
"N", 1,
"AAJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
379 static int OverlapSOLARIS(uint32_t isn)
388 OVERLAP_STEP(17,
"FFF", 3,
"\0AAA\0BBCCC\0D\0\0EEFFF", 19);
389 OVERLAP_STEP(20,
"GG", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGG", 21);
390 OVERLAP_STEP(22,
"HH", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHH", 23);
391 OVERLAP_STEP(24,
"I", 1,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHHI", 24);
392 OVERLAP_STEP(3,
"JJJJ", 4,
"\0AJJJBBCCC\0D\0\0EEFFFGGHHI", 24);
394 OVERLAP_STEP(8,
"KKK", 3,
"\0AJJJBBKKK\0D\0\0EEFFFGGHHI", 24);
396 OVERLAP_STEP(11,
"LLL", 3,
"\0AJJJBBKKKLLL\0EEFFFGGHHI", 24);
398 OVERLAP_STEP(14,
"MMM", 3,
"\0AJJJBBKKKLLLMMMFFFGGHHI", 24);
400 OVERLAP_STEP(18,
"N", 1,
"\0AJJJBBKKKLLLMMMFFFGGHHI", 24);
402 OVERLAP_STEP(21,
"O", 1,
"\0AJJJBBKKKLLLMMMFFFGGHHI", 24);
404 OVERLAP_STEP(22,
"P", 1,
"\0AJJJBBKKKLLLMMMFFFGGHHI", 24);
406 OVERLAP_STEP(24,
"QQ", 2,
"\0AJJJBBKKKLLLMMMFFFGGHHQQ", 25);
407 OVERLAP_STEP(1,
"0", 1,
"0AJJJBBKKKLLLMMMFFFGGHHQQ", 25);
412 static int OverlapSOLARISBefore(uint32_t isn)
418 OVERLAP_STEP(12,
"EE", 2,
"\0\0B\0\0\0\0\0D\0\0EE", 13);
427 static int OverlapSOLARISSame(uint32_t isn)
432 OVERLAP_STEP(15,
"HH", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HH", 16);
433 OVERLAP_STEP(17,
"II", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
434 OVERLAP_STEP(1,
"KKK", 3,
"KKK\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
435 OVERLAP_STEP(1,
"LLLL", 4,
"LLLL\0\0\0\0\0\0\0\0\0\0HHII", 18);
436 OVERLAP_STEP(15,
"P", 1,
"LLLL\0\0\0\0\0\0\0\0\0\0HHII", 18);
437 OVERLAP_STEP(15,
"QQ", 2,
"LLLL\0\0\0\0\0\0\0\0\0\0QQII", 18);
442 static int OverlapSOLARISAfter(uint32_t isn)
447 OVERLAP_STEP(16,
"FFF", 3,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFF", 18);
448 OVERLAP_STEP(19,
"GG", 2,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
449 OVERLAP_STEP(2,
"JJ", 2,
"AJJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
450 OVERLAP_STEP(20,
"O", 1,
"AJJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
451 OVERLAP_STEP(17,
"N", 1,
"AJJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
456 static int OverlapLAST(uint32_t isn)
465 OVERLAP_STEP(17,
"FFF", 3,
"\0AAA\0BBCCC\0D\0\0EEFFF", 19);
466 OVERLAP_STEP(20,
"GG", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGG", 21);
467 OVERLAP_STEP(22,
"HH", 2,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHH", 23);
468 OVERLAP_STEP(24,
"I", 1,
"\0AAA\0BBCCC\0D\0\0EEFFFGGHHI", 24);
469 OVERLAP_STEP(3,
"JJJJ", 4,
"\0AJJJJBCCC\0D\0\0EEFFFGGHHI", 24);
470 OVERLAP_STEP(8,
"KKK", 3,
"\0AJJJJBKKK\0D\0\0EEFFFGGHHI", 24);
471 OVERLAP_STEP(11,
"LLL", 3,
"\0AJJJJBKKKLLL\0EEFFFGGHHI", 24);
472 OVERLAP_STEP(14,
"MMM", 3,
"\0AJJJJBKKKLLLMMMFFFGGHHI", 24);
473 OVERLAP_STEP(18,
"N", 1,
"\0AJJJJBKKKLLLMMMFNFGGHHI", 24);
474 OVERLAP_STEP(21,
"O", 1,
"\0AJJJJBKKKLLLMMMFNFGOHHI", 24);
475 OVERLAP_STEP(22,
"P", 1,
"\0AJJJJBKKKLLLMMMFNFGOPHI", 24);
476 OVERLAP_STEP(24,
"QQ", 2,
"\0AJJJJBKKKLLLMMMFNFGOPHQQ", 25);
477 OVERLAP_STEP(1,
"0", 1,
"0AJJJJBKKKLLLMMMFNFGOPHQQ", 25);
482 static int OverlapLASTBefore(uint32_t isn)
488 OVERLAP_STEP(12,
"EE", 2,
"\0\0B\0\0\0\0\0D\0\0EE", 13);
497 static int OverlapLASTSame(uint32_t isn)
502 OVERLAP_STEP(15,
"HH", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HH", 16);
503 OVERLAP_STEP(17,
"II", 2,
"CCC\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
504 OVERLAP_STEP(1,
"KKK", 3,
"KKK\0\0\0\0\0\0\0\0\0\0\0HHII", 18);
505 OVERLAP_STEP(1,
"LLLL", 4,
"LLLL\0\0\0\0\0\0\0\0\0\0HHII", 18);
506 OVERLAP_STEP(15,
"P", 1,
"LLLL\0\0\0\0\0\0\0\0\0\0PHII", 18);
507 OVERLAP_STEP(15,
"QQ", 2,
"LLLL\0\0\0\0\0\0\0\0\0\0QQII", 18);
512 static int OverlapLASTAfter(uint32_t isn)
517 OVERLAP_STEP(16,
"FFF", 3,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFF", 18);
518 OVERLAP_STEP(19,
"GG", 2,
"AA\0\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
519 OVERLAP_STEP(2,
"JJ", 2,
"AJJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGG", 20);
520 OVERLAP_STEP(20,
"O", 1,
"AJJ\0\0\0\0\0\0\0\0\0\0\0\0FFFGO", 20);
521 OVERLAP_STEP(17,
"N", 1,
"AJJ\0\0\0\0\0\0\0\0\0\0\0\0FNFGO", 20);
528 static int StreamTcpReassembleTest01(
void)
540 OverlapBSD(UINT_MAX);
541 OverlapBSDBefore(UINT_MAX);
542 OverlapBSDSame(UINT_MAX);
543 OverlapBSDAfter(UINT_MAX);
545 OverlapBSD(UINT_MAX - 10);
546 OverlapBSDBefore(UINT_MAX - 10);
547 OverlapBSDSame(UINT_MAX - 10);
548 OverlapBSDAfter(UINT_MAX - 10);
555 static int StreamTcpReassembleTest02(
void)
558 OverlapVISTABefore(0);
560 OverlapVISTAAfter(0);
563 OverlapVISTABefore(1);
565 OverlapVISTAAfter(1);
567 OverlapVISTA(UINT_MAX);
568 OverlapVISTABefore(UINT_MAX);
569 OverlapVISTASame(UINT_MAX);
570 OverlapVISTAAfter(UINT_MAX);
572 OverlapVISTA(UINT_MAX - 10);
573 OverlapVISTABefore(UINT_MAX - 10);
574 OverlapVISTASame(UINT_MAX - 10);
575 OverlapVISTAAfter(UINT_MAX - 10);
582 static int StreamTcpReassembleTest03(
void)
585 OverlapLINUXBefore(0);
587 OverlapLINUXAfter(0);
590 OverlapLINUXBefore(1);
592 OverlapLINUXAfter(1);
594 OverlapLINUX(UINT_MAX);
595 OverlapLINUXBefore(UINT_MAX);
596 OverlapLINUXSame(UINT_MAX);
597 OverlapLINUXAfter(UINT_MAX);
599 OverlapLINUX(UINT_MAX - 10);
600 OverlapLINUXBefore(UINT_MAX - 10);
601 OverlapLINUXSame(UINT_MAX - 10);
602 OverlapLINUXAfter(UINT_MAX - 10);
608 static int StreamTcpReassembleTest04(
void)
611 OverlapLINUXOLDBefore(0);
612 OverlapLINUXOLDSame(0);
613 OverlapLINUXOLDAfter(0);
616 OverlapLINUXOLDBefore(1);
617 OverlapLINUXOLDSame(1);
618 OverlapLINUXOLDAfter(1);
620 OverlapLINUXOLD(UINT_MAX);
621 OverlapLINUXOLDBefore(UINT_MAX);
622 OverlapLINUXOLDSame(UINT_MAX);
623 OverlapLINUXOLDAfter(UINT_MAX);
625 OverlapLINUXOLD(UINT_MAX - 10);
626 OverlapLINUXOLDBefore(UINT_MAX - 10);
627 OverlapLINUXOLDSame(UINT_MAX - 10);
628 OverlapLINUXOLDAfter(UINT_MAX - 10);
634 static int StreamTcpReassembleTest05(
void)
637 OverlapSOLARISBefore(0);
638 OverlapSOLARISSame(0);
639 OverlapSOLARISAfter(0);
642 OverlapSOLARISBefore(1);
643 OverlapSOLARISSame(1);
644 OverlapSOLARISAfter(1);
646 OverlapSOLARIS(UINT_MAX);
647 OverlapSOLARISBefore(UINT_MAX);
648 OverlapSOLARISSame(UINT_MAX);
649 OverlapSOLARISAfter(UINT_MAX);
651 OverlapSOLARIS(UINT_MAX - 10);
652 OverlapSOLARISBefore(UINT_MAX - 10);
653 OverlapSOLARISSame(UINT_MAX - 10);
654 OverlapSOLARISAfter(UINT_MAX - 10);
660 static int StreamTcpReassembleTest06(
void)
663 OverlapLASTBefore(0);
668 OverlapLASTBefore(1);
672 OverlapLAST(UINT_MAX);
673 OverlapLASTBefore(UINT_MAX);
674 OverlapLASTSame(UINT_MAX);
675 OverlapLASTAfter(UINT_MAX);
677 OverlapLAST(UINT_MAX - 10);
678 OverlapLASTBefore(UINT_MAX - 10);
679 OverlapLASTSame(UINT_MAX - 10);
680 OverlapLASTAfter(UINT_MAX - 10);
684 static int StreamTcpReassembleTest30 (
void)
692 static int StreamTcpReassembleTest31 (
void)
700 static int StreamTcpReassembleTest32(
void)
703 OVERLAP_STEP(11,
"AAAAAAAAAA", 10,
"\0\0\0\0\0\0\0\0\0\0AAAAAAAAAA", 20);
704 OVERLAP_STEP(21,
"BBBBBBBBBB", 10,
"\0\0\0\0\0\0\0\0\0\0AAAAAAAAAABBBBBBBBBB", 30);
705 OVERLAP_STEP(41,
"CCCCCCCCCC", 10,
"\0\0\0\0\0\0\0\0\0\0AAAAAAAAAABBBBBBBBBB\0\0\0\0\0\0\0\0\0\0CCCCCCCCCC", 50);
706 OVERLAP_STEP(6,
"aaaaaaaaaaaaaaaaaaaa", 20,
"\0\0\0\0\0aaaaaaaaaaaaaaaaaaaaBBBBB\0\0\0\0\0\0\0\0\0\0CCCCCCCCCC", 50);
707 OVERLAP_STEP(1,
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 50,
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 50);
714 StreamTcpReassembleTest01);
716 StreamTcpReassembleTest02);
718 StreamTcpReassembleTest03);
720 StreamTcpReassembleTest04);
722 StreamTcpReassembleTest05);
724 StreamTcpReassembleTest06);
727 StreamTcpReassembleTest30);
729 StreamTcpReassembleTest31);
731 StreamTcpReassembleTest32);