add first policy for ipv6 frag re-assembly

remotes/origin/master-1.0.x
Jason Ish 15 years ago committed by Victor Julien
parent d9380a8cb5
commit ecc50b8b2f

@ -771,6 +771,17 @@ Defrag6InsertFrag(DefragContext *dc, DefragTracker *tracker, Packet *p)
goto insert;
}
break;
case POLICY_FIRST:
if ((frag_offset >= prev->offset) &&
(frag_end <= prev->offset + prev->data_len))
goto done;
if (frag_offset < prev->offset)
goto insert;
if (frag_offset < prev->offset + prev->data_len) {
ltrim = prev->offset + prev->data_len - frag_offset;
goto insert;
}
break;
default:
break;
}
@ -2136,6 +2147,41 @@ DefragSturgesNovakFirstTest(void)
return DefragDoSturgesNovakTest(POLICY_FIRST, expected, sizeof(expected));
}
static int
IPV6DefragSturgesNovakFirstTest(void)
{
/* Expected data. */
u_char expected[] = {
"AAAAAAAA"
"AAAAAAAA"
"AAAAAAAA"
"JJJJJJJJ"
"BBBBBBBB"
"BBBBBBBB"
"CCCCCCCC"
"CCCCCCCC"
"CCCCCCCC"
"LLLLLLLL"
"DDDDDDDD"
"LLLLLLLL"
"MMMMMMMM"
"EEEEEEEE"
"EEEEEEEE"
"FFFFFFFF"
"FFFFFFFF"
"FFFFFFFF"
"GGGGGGGG"
"GGGGGGGG"
"HHHHHHHH"
"HHHHHHHH"
"IIIIIIII"
"QQQQQQQQ"
};
return IPV6DefragDoSturgesNovakTest(POLICY_FIRST, expected,
sizeof(expected));
}
static int
DefragSturgesNovakLastTest(void)
{
@ -2278,6 +2324,8 @@ DefragRegisterTests(void)
IPV6DefragSturgesNovakWindowsTest, 1);
UtRegisterTest("IPV6DefragSturgesNovakSolarisTest",
IPV6DefragSturgesNovakSolarisTest, 1);
UtRegisterTest("IPV6DefragSturgesNovakFirstTest",
IPV6DefragSturgesNovakFirstTest, 1);
#endif /* UNITTESTS */
}

Loading…
Cancel
Save