From ecc50b8b2f2fc0782d0431adc45eb044d96ae685 Mon Sep 17 00:00:00 2001 From: Jason Ish Date: Wed, 30 Dec 2009 16:23:14 -0800 Subject: [PATCH] add first policy for ipv6 frag re-assembly --- src/defrag.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/defrag.c b/src/defrag.c index 4638d39faf..e6cd7d10d4 100644 --- a/src/defrag.c +++ b/src/defrag.c @@ -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 */ }