Skip to content

Commit d19097f

Browse files
rveerama1jukkar
authored andcommitted
tests: net: Add more tests to ipv6 fragmentation
IPv6 fragmentation test case for reassembly. Signed-off-by: Ravi kumar Veeramally <[email protected]>
1 parent 25309eb commit d19097f

File tree

1 file changed

+110
-3
lines changed
  • tests/net/ipv6_fragment/src

1 file changed

+110
-3
lines changed

tests/net/ipv6_fragment/src/main.c

Lines changed: 110 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,6 +1349,7 @@ static int sender_iface(struct device *dev, struct net_pkt *pkt)
13491349
}
13501350
}
13511351

1352+
net_pkt_unref(pkt);
13521353
zassert_false(test_failed, "Fragment verify failed");
13531354

13541355
return 0;
@@ -1930,11 +1931,117 @@ static void test_send_ipv6_fragment_without_hbho(void)
19301931
}
19311932
}
19321933

1934+
static u8_t ipv6_reass_frag1[] = {
1935+
0x60, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x2c, 0x40,
1936+
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
1937+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
1938+
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
1939+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1940+
0x3a, 0x00, 0x00, 0x01, 0x7c, 0x8e, 0x53, 0x49,
1941+
0x81, 0x00, 0xb1, 0xb2, 0x28, 0x5b, 0x00, 0x01
1942+
};
1943+
1944+
static u8_t ipv6_reass_frag2[] = {
1945+
0x60, 0x00, 0x00, 0x00, 0x00, 0x54, 0x2c, 0x40,
1946+
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
1947+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
1948+
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
1949+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1950+
0x3a, 0x00, 0x04, 0xd0, 0x7c, 0x8e, 0x53, 0x49
1951+
};
1952+
19331953
static void test_recv_ipv6_fragment(void)
19341954
{
1935-
/* TODO: Verify that we can receive individual fragments and
1936-
* then reassemble them back.
1937-
*/
1955+
struct net_ipv6_hdr ipv6_hdr;
1956+
struct net_pkt_cursor backup;
1957+
struct net_pkt *pkt1;
1958+
struct net_pkt *pkt2;
1959+
u16_t total_payload_len;
1960+
u16_t payload1_len;
1961+
u16_t payload2_len;
1962+
u8_t data;
1963+
int ret;
1964+
1965+
/* Fragment 1 */
1966+
data = 0U;
1967+
total_payload_len = 1300U;
1968+
payload1_len = NET_IPV6_MTU - sizeof(ipv6_reass_frag1);
1969+
payload2_len = total_payload_len - payload1_len;
1970+
1971+
pkt1 = net_pkt_alloc_with_buffer(iface1, NET_IPV6_MTU, AF_UNSPEC,
1972+
0, ALLOC_TIMEOUT);
1973+
zassert_not_null(pkt1, "packet");
1974+
1975+
net_pkt_set_family(pkt1, AF_INET6);
1976+
net_pkt_set_ip_hdr_len(pkt1, sizeof(struct net_ipv6_hdr));
1977+
net_pkt_cursor_init(pkt1);
1978+
1979+
memcpy(&ipv6_hdr, ipv6_reass_frag1, sizeof(struct net_ipv6_hdr));
1980+
1981+
ret = net_pkt_write(pkt1, ipv6_reass_frag1,
1982+
sizeof(struct net_ipv6_hdr) + 1);
1983+
zassert_true(ret == 0, "IPv6 header append failed");
1984+
1985+
net_pkt_cursor_backup(pkt1, &backup);
1986+
1987+
ret = net_pkt_write(pkt1,
1988+
ipv6_reass_frag1 + sizeof(struct net_ipv6_hdr) + 1,
1989+
sizeof(ipv6_reass_frag1) -
1990+
sizeof(struct net_ipv6_hdr) - 1);
1991+
zassert_true(ret == 0, "IPv6 fragment header append failed");
1992+
1993+
while (payload1_len--) {
1994+
ret = net_pkt_write_u8(pkt1, data++);
1995+
zassert_true(ret == 0, "IPv6 header append failed");
1996+
}
1997+
1998+
net_pkt_set_ipv6_fragment_start(pkt1, sizeof(struct net_ipv6_hdr));
1999+
net_pkt_set_overwrite(pkt1, true);
2000+
2001+
net_pkt_cursor_restore(pkt1, &backup);
2002+
2003+
ret = net_ipv6_handle_fragment_hdr(pkt1, &ipv6_hdr,
2004+
NET_IPV6_NEXTHDR_FRAG);
2005+
zassert_true(ret == NET_OK, "IPv6 frag1 reassembly failed");
2006+
2007+
/* Fragment 2 */
2008+
2009+
pkt2 = net_pkt_alloc_with_buffer(iface1, payload2_len +
2010+
sizeof(ipv6_reass_frag2),
2011+
AF_UNSPEC, 0, ALLOC_TIMEOUT);
2012+
zassert_not_null(pkt2, "packet");
2013+
2014+
net_pkt_set_family(pkt2, AF_INET6);
2015+
net_pkt_set_ip_hdr_len(pkt2, sizeof(struct net_ipv6_hdr));
2016+
net_pkt_cursor_init(pkt2);
2017+
2018+
memcpy(&ipv6_hdr, ipv6_reass_frag2, sizeof(struct net_ipv6_hdr));
2019+
2020+
ret = net_pkt_write(pkt2, ipv6_reass_frag2,
2021+
sizeof(struct net_ipv6_hdr) + 1);
2022+
zassert_true(ret == 0, "IPv6 header append failed");
2023+
2024+
net_pkt_cursor_backup(pkt2, &backup);
2025+
2026+
ret = net_pkt_write(pkt2,
2027+
ipv6_reass_frag2 + sizeof(struct net_ipv6_hdr) + 1,
2028+
sizeof(ipv6_reass_frag2) -
2029+
sizeof(struct net_ipv6_hdr) - 1);
2030+
zassert_true(ret == 0, "IPv6 fragment header append failed");
2031+
2032+
while (payload2_len--) {
2033+
ret = net_pkt_write_u8(pkt2, data++);
2034+
zassert_true(ret == 0, "IPv6 header append failed");
2035+
}
2036+
2037+
net_pkt_set_ipv6_fragment_start(pkt2, sizeof(struct net_ipv6_hdr));
2038+
net_pkt_set_overwrite(pkt2, true);
2039+
2040+
net_pkt_cursor_restore(pkt2, &backup);
2041+
2042+
ret = net_ipv6_handle_fragment_hdr(pkt2, &ipv6_hdr,
2043+
NET_IPV6_NEXTHDR_FRAG);
2044+
zassert_true(ret == NET_OK, "IPv6 frag2 reassembly failed");
19382045
}
19392046

19402047
void test_main(void)

0 commit comments

Comments
 (0)