/* main.c - Application main entry point */

/*
 * Copyright (c) 2017 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(net_test, CONFIG_NET_IPV6_LOG_LEVEL);

#include <zephyr/types.h>
#include <stdbool.h>
#include <stddef.h>
#include <string.h>
#include <errno.h>
#include <zephyr/sys/printk.h>
#include <zephyr/linker/sections.h>
#include <zephyr/random/random.h>

#include <zephyr/ztest.h>

#include <zephyr/net/ethernet.h>
#include <zephyr/net/dummy.h>
#include <zephyr/net/buf.h>
#include <zephyr/net/net_ip.h>
#include <zephyr/net/net_if.h>

#define NET_LOG_ENABLED 1
#include "net_private.h"

#include "ipv6.h"
#include "udp_internal.h"

/* Interface 1 addresses */
static struct in6_addr my_addr1 = { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0,
					0, 0, 0, 0, 0, 0, 0, 0x1 } } };

/* Interface 2 addresses */
static struct in6_addr my_addr2 = { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0,
					0, 0, 0, 0, 0, 0, 0, 0x2 } } };

/* Extra address is assigned to ll_addr */
static struct in6_addr ll_addr = { { { 0xfe, 0x80, 0x43, 0xb8, 0, 0, 0, 0,
				       0, 0, 0, 0xf2, 0xaa, 0x29, 0x02,
				       0x04 } } };

static uint8_t mac2_addr[] = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x02 };
static struct net_linkaddr ll_addr2 = {
	.addr = mac2_addr,
	.len = 6,
};

/* No extension header */
static const unsigned char ipv6_udp[] = {
/* IPv6 header starts here */
0x60, 0x00, 0x00, 0x00, 0x00, 0x36, 0x11, 0x3f, /* `....6.? */
0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
/* UDP header starts here (leave checksum field empty) */
0xaa, 0xdc, 0xbf, 0xd7, 0x00, 0x2e, 0x00, 0x00, /* ......M. */
/* User data starts here and is appended in corresponding function */
};

/* IPv6 hop-by-hop option in the message */
static const unsigned char ipv6_hbho[] = {
/* IPv6 header starts here */
0x60, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x3f, /* `....6.? */
0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
/* Hop-by-hop option starts here */
0x11, 0x00,
/* RPL sub-option starts here */
0x63, 0x04, 0x80, 0x1e, 0x01, 0x00, /* ..c..... */
/* UDP header starts here (leave checksum field empty) */
0xaa, 0xdc, 0xbf, 0xd7, 0x00, 0x2e, 0x00, 0x00, /* ......M. */
/* User data starts here and is appended in corresponding function */
};

/* IPv6 hop-by-hop option in the message HBHO (72 Bytes) */
static const unsigned char ipv6_hbho_1[] = {
/* IPv6 header starts here */
0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40,
0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0xc0, 0xde, 0xff, 0xfe, 0x9b, 0xb4, 0x47,
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
/* Hop-by-hop option starts here */
0x11, 0x08,
/* Padding */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* UDP header starts here (8 bytes) */
0x4e, 0x20, 0x10, 0x92, 0x00, 0x30, 0xa1, 0xc5,
/* User data starts here (40 bytes) */
0x30, 0x26, 0x02, 0x01, 0x00, 0x04, 0x06, 0x70,
0x75, 0x62, 0x6c, 0x69, 0x63, 0xa0, 0x19, 0x02,
0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00,
0x30, 0x0e, 0x30, 0x0c, 0x06, 0x08, 0x2b, 0x06,
0x01, 0x02, 0x01, 0x01, 0x05, 0x00, 0x05, 0x00 };

/* IPv6 hop-by-hop option in the message HBHO (104 Bytes) */
static const unsigned char ipv6_hbho_2[] = {
/* IPv6 header starts here */
0x60, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x40,
0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0xc0, 0xde, 0xff, 0xfe, 0x9b, 0xb4, 0x47,
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
/* Hop-by-hop option starts here */
0x11, 0x0c,
/* padding */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x04, 0x00, 0x00, 0x00, 0x00,
/* udp header starts here (8 bytes) */
0x4e, 0x20, 0x10, 0x92, 0x00, 0x30, 0xa1, 0xc5,
/* User data starts here (40 bytes) */
0x30, 0x26, 0x02, 0x01, 0x00, 0x04, 0x06, 0x70,
0x75, 0x62, 0x6c, 0x69, 0x63, 0xa0, 0x19, 0x02,
0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00,
0x30, 0x0e, 0x30, 0x0c, 0x06, 0x08, 0x2b, 0x06,
0x01, 0x02, 0x01, 0x01, 0x05, 0x00, 0x05, 0x00 };

/* IPv6 hop-by-hop option in the message HBHO (920 bytes) */
static const unsigned char ipv6_hbho_3[] = {
/* IPv6 header starts here */
0x60, 0x00, 0x00, 0x00, 0x03, 0xc8, 0x00, 0x40,
0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0xc0, 0xde, 0xff, 0xfe, 0x9b, 0xb4, 0x47,
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
/* Hop-by-hop option starts here */
0x11, 0x72,
/* padding */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x04, 0x00, 0x00, 0x00, 0x00,
/* udp header starts here (8 bytes) */
0x4e, 0x20, 0x10, 0x92, 0x00, 0x30, 0xa1, 0xc5,
/* User data starts here (40 bytes) */
0x30, 0x26, 0x02, 0x01, 0x00, 0x04, 0x06, 0x70,
0x75, 0x62, 0x6c, 0x69, 0x63, 0xa0, 0x19, 0x02,
0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00,
0x30, 0x0e, 0x30, 0x0c, 0x06, 0x08, 0x2b, 0x06,
0x01, 0x02, 0x01, 0x01, 0x05, 0x00, 0x05, 0x00
};

/* IPv6 hop-by-hop option in the message */
static const unsigned char ipv6_hbho_frag[] = {
/* IPv6 header starts here */
0x60, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x3f, /* `....6.? */
0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
/* Hop-by-hop option starts here */
0x2c, 0x00,
/* RPL sub-option starts here */
0x63, 0x04, 0x80, 0x1e, 0x01, 0x00, /* ..c..... */
/* IPv6 fragment header */
0x11, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04,
/* UDP header starts here (checksum is "fixed" in this example) */
0xaa, 0xdc, 0xbf, 0xd7, 0x00, 0x2e, 0xa2, 0x55, /* ......M. */
/* User data starts here and is appended in corresponding function */
};

/* IPv6 hop-by-hop option in the message */
static const unsigned char ipv6_hbho_frag_1[] = {
/* IPv6 header starts here */
0x60, 0x00, 0x00, 0x00, 0x05, 0xb0, 0x00, 0x40
, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x08, 0xc0, 0xde, 0xff, 0xfe, 0xc9, 0xa0, 0x4b
, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
/* Hop-by-hop option starts here */
, 0x2c, 0x80
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
/* IPv6 fragment header */
, 0x3a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02
/* ICMPv6 header and Data*/
, 0x80, 0x00, 0x13, 0xdf, 0x19, 0xc7, 0x19, 0xc7
, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f
, 0x75, 0x70, 0x3a, 0x49, 0x50, 0x76, 0x36, 0x2e
, 0x49, 0x50, 0x76, 0x36, 0x2e, 0x49, 0x43, 0x4d
, 0x50, 0x76, 0x36, 0x2e, 0x45, 0x63, 0x68, 0x6f
, 0x2d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74
, 0x2e, 0x49, 0x50, 0x76, 0x36, 0x2d, 0x50, 0x61
, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x70, 0x61, 0x79
, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x69, 0x70, 0x76
, 0x36, 0x2d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73
, 0x69, 0x6f, 0x6e, 0x2d, 0x68, 0x65, 0x61, 0x64
, 0x65, 0x72, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65
, 0x72, 0x2d, 0x68, 0x6f, 0x70, 0x2d, 0x62, 0x79
, 0x2d, 0x68, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x74
, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6f, 0x70, 0x74
, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6c, 0x65
, 0x6d, 0x65, 0x6e, 0x74, 0x3b, 0x54, 0x65, 0x73
, 0x74, 0x2d, 0x63, 0x61, 0x73, 0x65, 0x3a, 0x32
, 0x31, 0x33, 0x30, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
};

/* IPv6 hop-by-hop option in the message */
static const unsigned char ipv6_large_hbho[] = {
/* IPv6 header starts here */
0x60, 0x00, 0x00, 0x00, 0x05, 0xa8, 0x00, 0x40
, 0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
/* Hop-by-hop option starts here */
, 0x3a, 0x80
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
/* ICMPv6 header and Data*/
, 0x80, 0x00, 0x13, 0xdf, 0x19, 0xc7, 0x19, 0xc7
, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f
, 0x75, 0x70, 0x3a, 0x49, 0x50, 0x76, 0x36, 0x2e
, 0x49, 0x50, 0x76, 0x36, 0x2e, 0x49, 0x43, 0x4d
, 0x50, 0x76, 0x36, 0x2e, 0x45, 0x63, 0x68, 0x6f
, 0x2d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74
, 0x2e, 0x49, 0x50, 0x76, 0x36, 0x2d, 0x50, 0x61
, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x70, 0x61, 0x79
, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x69, 0x70, 0x76
, 0x36, 0x2d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73
, 0x69, 0x6f, 0x6e, 0x2d, 0x68, 0x65, 0x61, 0x64
, 0x65, 0x72, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65
, 0x72, 0x2d, 0x68, 0x6f, 0x70, 0x2d, 0x62, 0x79
, 0x2d, 0x68, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x74
, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6f, 0x70, 0x74
, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6c, 0x65
, 0x6d, 0x65, 0x6e, 0x74, 0x3b, 0x54, 0x65, 0x73
, 0x74, 0x2d, 0x63, 0x61, 0x73, 0x65, 0x3a, 0x32
, 0x31, 0x33, 0x30, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01
};

static unsigned char ipv6_first_frag[] = {
/* IPv6 header starts here */
0x60, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x3f, /* `....6.? */
0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
/* Hop-by-hop option starts here */
0x2C, 0x00,
/* RPL sub-option starts here */
0x63, 0x04, 0x80, 0x1e, 0x01, 0x00, /* ..c..... */
/* IPv6 fragment header */
0x11, 0x00, 0x00, 0x01, 0x01, 0x02, 0x03, 0x04,
/* UDP header starts here (checksum is "fixed" in this example) */
0xaa, 0xdc, 0xbf, 0xd7, 0x00, 0x2e, 0xa2, 0x55, /* ......M. */
/* User data starts here and is appended in corresponding function */
};

static unsigned char ipv6_second_frag[] = {
/* IPv6 header starts here */
0x60, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x3f, /* `....6.? */
0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
/* Hop-by-hop option starts here */
0x2C, 0x00,
/* RPL sub-option starts here */
0x63, 0x04, 0x80, 0x1e, 0x01, 0x00, /* ..c..... */
/* IPv6 fragment header */
0x11, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04,
};

static unsigned char ipv6_frag_wo_hbho[] = {
0x60, 0x08, 0xd7, 0x22, 0x05, 0x1c, 0x3a, 0x40,
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
/* ICMPv6 header */
0x80, 0x00, 0xb2, 0xb2, 0x28, 0x5b, 0x00, 0x01,
/* Payload */
0x55, 0x85, 0x93, 0x5c, 0x00, 0x00, 0x00, 0x00,
0x72, 0xe0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13
};

static int frag_count;

static struct net_if *iface1;

static bool test_failed;
static bool test_started;
static bool test_complete;
static struct k_sem wait_data;

static uint16_t pkt_data_len;
static uint16_t pkt_recv_data_len;

#define WAIT_TIME K_SECONDS(1)

#define ALLOC_TIMEOUT K_MSEC(500)

struct net_if_test {
	uint8_t idx;
	uint8_t mac_addr[sizeof(struct net_eth_addr)];
	struct net_linkaddr ll_addr;
};

enum net_test_type {
	NO_TEST_TYPE,
	IPV6_SMALL_HBHO_FRAG,
	IPV6_LARGE_HBHO_FRAG,
	IPV6_WITHOUT_HBHO_FRAG,
	IPV6_UDP_LOOPBACK,
};

static enum net_test_type test_type = NO_TEST_TYPE;

static uint8_t *net_iface_get_mac(const struct device *dev)
{
	struct net_if_test *data = dev->data;

	if (data->mac_addr[2] == 0x00) {
		/* 00-00-5E-00-53-xx Documentation RFC 7042 */
		data->mac_addr[0] = 0x00;
		data->mac_addr[1] = 0x00;
		data->mac_addr[2] = 0x5E;
		data->mac_addr[3] = 0x00;
		data->mac_addr[4] = 0x53;
		data->mac_addr[5] = sys_rand8_get();
	}

	data->ll_addr.addr = data->mac_addr;
	data->ll_addr.len = 6U;

	return data->mac_addr;
}

static void net_iface_init(struct net_if *iface)
{
	uint8_t *mac = net_iface_get_mac(net_if_get_device(iface));

	net_if_set_link_addr(iface, mac, sizeof(struct net_eth_addr),
			     NET_LINK_ETHERNET);
}

static void test_pkt_loopback(struct net_pkt *pkt)
{
	struct net_pkt *recv_pkt;
	uint8_t buf_ip_src[NET_IPV6_ADDR_SIZE];
	uint8_t buf_ip_dst[NET_IPV6_ADDR_SIZE];
	uint16_t buf_port_src;
	uint16_t buf_port_dst;
	int ret;

	/* Duplicate the packet and flip the source/destination IPs and ports then
	 * re-insert the packets back into the same interface
	 */
	recv_pkt = net_pkt_rx_clone(pkt, K_NO_WAIT);
	net_pkt_set_overwrite(recv_pkt, true);

	/* Read IPs */
	net_pkt_cursor_init(recv_pkt);
	net_pkt_skip(recv_pkt, 8);
	net_pkt_read(recv_pkt, buf_ip_src, sizeof(buf_ip_src));
	net_pkt_read(recv_pkt, buf_ip_dst, sizeof(buf_ip_dst));

	/* Write opposite IPs */
	net_pkt_cursor_init(recv_pkt);
	net_pkt_skip(recv_pkt, 8);
	net_pkt_write(recv_pkt, buf_ip_dst, sizeof(buf_ip_dst));
	net_pkt_write(recv_pkt, buf_ip_src, sizeof(buf_ip_src));

	if (frag_count == 1) {
		/* Offset is 0, flip ports of packet */
		net_pkt_cursor_init(recv_pkt);
		net_pkt_skip(recv_pkt, NET_IPV6H_LEN + NET_IPV6_FRAGH_LEN);
		net_pkt_read_be16(recv_pkt, &buf_port_src);
		net_pkt_read_be16(recv_pkt, &buf_port_dst);

		net_pkt_cursor_init(recv_pkt);
		net_pkt_skip(recv_pkt, NET_IPV6H_LEN + NET_IPV6_FRAGH_LEN);
		net_pkt_write_be16(recv_pkt, buf_port_dst);
		net_pkt_write_be16(recv_pkt, buf_port_src);
	}

	/* Reset position to beginning and ready packet for insertion */
	net_pkt_cursor_init(recv_pkt);
	net_pkt_set_overwrite(recv_pkt, false);
	net_pkt_set_iface(recv_pkt, net_pkt_iface(pkt));

	ret = net_recv_data(net_pkt_iface(recv_pkt), recv_pkt);
	zassert_equal(ret, 0, "Cannot receive data (%d)", ret);
}

static int verify_fragment(struct net_pkt *pkt)
{
	/* The fragment needs to have
	 *  1) IPv6 header
	 *  2) HBH option (if any)
	 *  3) IPv6 fragment header
	 *  4) UDP/ICMPv6/TCP header
	 *  5) data
	 */
	uint16_t offset;

	frag_count++;

	NET_DBG("test_type %d, frag count %d", test_type, frag_count);

	switch (test_type) {
	case IPV6_SMALL_HBHO_FRAG:
		goto small;
	case IPV6_LARGE_HBHO_FRAG:
		goto large;
	case IPV6_WITHOUT_HBHO_FRAG:
		goto without;
	case IPV6_UDP_LOOPBACK:
		goto udp_loopback;
	default:
		return 0;
	}

small:
	if (frag_count == 1) {
		/* First fragment received. Make sure that all the
		 * things are correct before the fragment header.
		 */
		size_t total_len = net_pkt_get_len(pkt);

		total_len -= sizeof(struct net_ipv6_hdr);

		ipv6_first_frag[4] = total_len / 256;
		ipv6_first_frag[5] = total_len -
			ipv6_first_frag[4] * 256U;

		if ((total_len / 256) != pkt->buffer->data[4]) {
			NET_DBG("Invalid length, 1st byte");
			return -EINVAL;
		}

		if ((total_len - pkt->buffer->data[4] * 256U) !=
		    pkt->buffer->data[5]) {
			NET_DBG("Invalid length, 2nd byte");
			return -EINVAL;
		}

		offset = pkt->buffer->data[6 * 8 + 2] * 256U +
			(pkt->buffer->data[6 * 8 + 3] & 0xfe);

		if (offset != 0U) {
			NET_DBG("Invalid offset %d", offset);
			return -EINVAL;
		}

		if ((ipv6_first_frag[6 * 8 + 3] & 0x01) != 1) {
			NET_DBG("Invalid MORE flag for first fragment");
			return -EINVAL;
		}

		pkt_recv_data_len += total_len - 8 /* HBHO */ -
			sizeof(struct net_ipv6_frag_hdr);

		/* Rewrite the fragment id so that the memcmp() will not fail */
		ipv6_first_frag[6 * 8 + 4] = pkt->buffer->data[6 * 8 + 4];
		ipv6_first_frag[6 * 8 + 5] = pkt->buffer->data[6 * 8 + 5];
		ipv6_first_frag[6 * 8 + 6] = pkt->buffer->data[6 * 8 + 6];
		ipv6_first_frag[6 * 8 + 7] = pkt->buffer->data[6 * 8 + 7];

		if (memcmp(pkt->buffer->data, ipv6_first_frag, 7 * 8) != 0) {
			net_hexdump("received", pkt->buffer->data, 7 * 8);
			NET_DBG("");
			net_hexdump("expected", ipv6_first_frag, 7 * 8);

			return -EINVAL;
		}
	}

	if (frag_count == 2) {
		/* Second fragment received. */
		size_t total_len = net_pkt_get_len(pkt);

		total_len -= sizeof(struct net_ipv6_hdr);

		ipv6_second_frag[4] = total_len / 256;
		ipv6_second_frag[5] = total_len -
			ipv6_second_frag[4] * 256U;

		if ((total_len / 256) != pkt->buffer->data[4]) {
			NET_DBG("Invalid length, 1st byte");
			return -EINVAL;
		}

		if ((total_len - pkt->buffer->data[4] * 256U) !=
		    pkt->buffer->data[5]) {
			NET_DBG("Invalid length, 2nd byte");
			return -EINVAL;
		}

		offset = pkt->buffer->data[6 * 8 + 2] * 256U +
			(pkt->buffer->data[6 * 8 + 3] & 0xfe);

		if (offset != pkt_recv_data_len) {
			NET_DBG("Invalid offset %d received %d",
				offset, pkt_recv_data_len);
			return -EINVAL;
		}

		/* Make sure the MORE flag is set correctly */
		if ((pkt->buffer->data[6 * 8 + 3] & 0x01) != 0U) {
			NET_DBG("Invalid MORE flag for second fragment");
			return -EINVAL;
		}

		pkt_recv_data_len += total_len - 8 /* HBHO */ - 8 /* UDP */ -
			sizeof(struct net_ipv6_frag_hdr);

		ipv6_second_frag[6 * 8 + 2] = pkt->buffer->data[6 * 8 + 2];
		ipv6_second_frag[6 * 8 + 3] = pkt->buffer->data[6 * 8 + 3];

		/* Rewrite the fragment id so that the memcmp() will not fail */
		ipv6_second_frag[6 * 8 + 4] = pkt->buffer->data[6 * 8 + 4];
		ipv6_second_frag[6 * 8 + 5] = pkt->buffer->data[6 * 8 + 5];
		ipv6_second_frag[6 * 8 + 6] = pkt->buffer->data[6 * 8 + 6];
		ipv6_second_frag[6 * 8 + 7] = pkt->buffer->data[6 * 8 + 7];

		if (memcmp(pkt->buffer->data, ipv6_second_frag, 7 * 8) != 0) {
			net_hexdump("received 2", pkt->buffer->data, 7 * 8);
			NET_DBG("");
			net_hexdump("expected 2", ipv6_second_frag, 7 * 8);

			return -EINVAL;
		}

		if (pkt_data_len != pkt_recv_data_len) {
			NET_DBG("Invalid amount of data received (%d vs %d)",
				pkt_data_len, pkt_recv_data_len);
			return -EINVAL;
		}

		test_complete = true;
	}

	return 0;

large:
	net_pkt_cursor_init(pkt);

	if (frag_count == 1) {
		uint16_t exp_ext_len = 1040U; /* 1032 (HBHO) + 8 (FRAG)*/
		uint16_t recv_ext_len;
		uint16_t exp_payload_len = 200U;
		uint16_t recv_payload_len;
		uint16_t frag_offset;

		recv_ext_len = net_pkt_ipv6_ext_len(pkt);
		if (recv_ext_len != exp_ext_len) {
			NET_DBG("Expected amount of Ext headers len is %d,"
				"but received %d", exp_ext_len, recv_ext_len);
			return -EINVAL;
		}

		/* IPv6 + HBHO + FRAG */
		recv_payload_len = net_pkt_get_len(pkt) - 40 - 1032 - 8;
		if (recv_payload_len != exp_payload_len) {
			NET_DBG("Expected amount of payload len is %d,"
				"but received %d", exp_payload_len,
				recv_payload_len);
			return -EINVAL;
		}

		if (net_pkt_skip(pkt, 40 + 1032 + 2) ||
		    net_pkt_read_be16(pkt, &frag_offset)) {
			return -EINVAL;
		}

		if ((frag_offset & 0xfff8) != 0U) {
			NET_DBG("Invalid fragment offset %d",
				frag_offset & 0xfff8);
			return -EINVAL;
		}

		if ((frag_offset & 0x0001) != 1U) {
			NET_DBG("Fragment More flag should be set");
			return -EINVAL;
		}
	}

	if (frag_count == 2) {
		uint16_t exp_ext_len = 1040U; /* 1032 (HBHO) + 8 (FRAG)*/
		uint16_t recv_ext_len;
		uint16_t exp_payload_len = 200U;
		uint16_t recv_payload_len;
		uint16_t frag_offset;

		recv_ext_len = net_pkt_ipv6_ext_len(pkt);
		if (recv_ext_len != exp_ext_len) {
			NET_DBG("Expected amount of Ext headers len is %d,"
				"but received %d", exp_ext_len, recv_ext_len);
			return -EINVAL;
		}

		/* IPv6 + HBHO + FRAG */
		recv_payload_len = net_pkt_get_len(pkt) - 40 - 1032 - 8;
		if (recv_payload_len != exp_payload_len) {
			NET_DBG("Expected amount of payload len is %d,"
				"but received %d", exp_payload_len,
				recv_payload_len);
			return -EINVAL;
		}

		if (net_pkt_skip(pkt, 40 + 1032 + 2) ||
		    net_pkt_read_be16(pkt, &frag_offset)) {
			return -EINVAL;
		}

		if ((frag_offset & 0xfff8) != 200U) {
			NET_DBG("Invalid fragment offset %d",
				frag_offset & 0xfff8);
			return -EINVAL;
		}

		if ((frag_offset & 0x0001) != 1U) {
			NET_DBG("Fragment More flag should be set");
			return -EINVAL;
		}
	}

	if (frag_count == 3) {
		uint16_t exp_ext_len = 1040U; /* 1032 (HBHO) + 8 (FRAG)*/
		uint16_t recv_ext_len;
		uint16_t exp_payload_len = 16U;
		uint16_t recv_payload_len;
		uint16_t frag_offset;

		recv_ext_len = net_pkt_ipv6_ext_len(pkt);
		if (recv_ext_len != exp_ext_len) {
			NET_DBG("Expected amount of Ext headers len is %d,"
				"but received %d", exp_ext_len, recv_ext_len);
			return -EINVAL;
		}

		/* IPv6 + HBHO + FRAG */
		recv_payload_len = net_pkt_get_len(pkt) - 40 - 1032 - 8;
		if (recv_payload_len != exp_payload_len) {
			NET_DBG("Expected amount of payload len is %d,"
				"but received %d", exp_payload_len,
				recv_payload_len);
			return -EINVAL;
		}

		if (net_pkt_skip(pkt, 40 + 1032 + 2) ||
		    net_pkt_read_be16(pkt, &frag_offset)) {
			return -EINVAL;
		}

		if ((frag_offset & 0xfff8) != 400U) {
			NET_DBG("Invalid fragment offset %d",
				frag_offset & 0xfff8);
			return -EINVAL;
		}

		if ((frag_offset & 0x0001) != 0U) {
			NET_DBG("Fragment More flag should be unset");
			return -EINVAL;
		}

		test_complete = true;
	}

	return 0;

without:
	net_pkt_cursor_init(pkt);

	if (frag_count == 1) {
		uint16_t exp_ext_len = 8U; /* 0 (HBHO) + 8 (FRAG)*/
		uint16_t recv_ext_len;
		uint16_t exp_payload_len = 1232U;
		uint16_t recv_payload_len;
		uint16_t frag_offset;

		recv_ext_len = net_pkt_ipv6_ext_len(pkt);
		if (recv_ext_len != exp_ext_len) {
			NET_DBG("Expected amount of Ext headers len is %d,"
				"but received %d", exp_ext_len, recv_ext_len);
			return -EINVAL;
		}

		/* IPv6 + FRAG */
		recv_payload_len = net_pkt_get_len(pkt) - 40 - 8;
		if (recv_payload_len != exp_payload_len) {
			NET_DBG("Expected amount of payload len is %d,"
				"but received %d", exp_payload_len,
				recv_payload_len);
			return -EINVAL;
		}

		if (pkt->buffer->data[6] != NET_IPV6_NEXTHDR_FRAG) {
			NET_DBG("Invalid IPv6 next header %d",
				pkt->buffer->data[6]);
			return -EINVAL;
		}

		if (net_pkt_skip(pkt, 40 + 2) ||
		    net_pkt_read_be16(pkt, &frag_offset)) {
			return -EINVAL;
		}

		if ((frag_offset & 0xfff8) != 0U) {
			NET_DBG("Invalid fragment offset %d",
				frag_offset & 0xfff8);
			return -EINVAL;
		}

		if ((frag_offset & 0x0001) != 1U) {
			NET_DBG("Fragment More flag should be set");
			return -EINVAL;
		}
	}

	if (frag_count == 2) {
		uint16_t exp_ext_len = 8U; /* 0 (HBHO) + 8 (FRAG)*/
		uint16_t recv_ext_len;
		uint16_t exp_payload_len = 76U;
		uint16_t recv_payload_len;
		uint16_t frag_offset;

		recv_ext_len = net_pkt_ipv6_ext_len(pkt);
		if (recv_ext_len != exp_ext_len) {
			NET_DBG("Expected amount of Ext headers len is %d,"
				"but received %d", exp_ext_len, recv_ext_len);
			return -EINVAL;
		}

		if (pkt->buffer->data[6] != NET_IPV6_NEXTHDR_FRAG) {
			NET_DBG("Invalid IPv6 next header %d",
				pkt->buffer->data[6]);
			return -EINVAL;
		}

		/* IPv6 + FRAG */
		recv_payload_len = net_pkt_get_len(pkt) - 40 - 8;
		if (recv_payload_len != exp_payload_len) {
			NET_DBG("Expected amount of payload len is %d,"
				"but received %d", exp_payload_len,
				recv_payload_len);
			return -EINVAL;
		}

		if (net_pkt_skip(pkt, 40 + 2) ||
		    net_pkt_read_be16(pkt, &frag_offset)) {
			return -EINVAL;
		}

		if ((frag_offset & 0xfff8) != 1232U) {
			NET_DBG("Invalid fragment offset %d",
				frag_offset & 0xfff8);
			return -EINVAL;
		}

		if ((frag_offset & 0x0001) != 0U) {
			NET_DBG("Fragment More flag should be unset");
			return -EINVAL;
		}

		test_complete = true;
	}

	return 0;

udp_loopback:
	net_pkt_cursor_init(pkt);

	if (frag_count == 1) {
		uint16_t exp_ext_len = 8U; /* 8 (FRAG)*/
		uint16_t recv_ext_len;
		uint16_t exp_payload_len = 1232U;
		uint16_t recv_payload_len;
		uint16_t frag_offset;

		recv_ext_len = net_pkt_ipv6_ext_len(pkt);
		if (recv_ext_len != exp_ext_len) {
			NET_DBG("Expected amount of Ext headers len is %d,"
				"but received %d", exp_ext_len, recv_ext_len);
			return -EINVAL;
		}

		/* IPv6 + FRAG */
		recv_payload_len = net_pkt_get_len(pkt) - 40 - 8;
		if (recv_payload_len != exp_payload_len) {
			NET_DBG("Expected amount of payload len is %d,"
				"but received %d", exp_payload_len,
				recv_payload_len);
			return -EINVAL;
		}

		if (pkt->buffer->data[6] != NET_IPV6_NEXTHDR_FRAG) {
			NET_DBG("Invalid IPv6 next header %d",
				pkt->buffer->data[6]);
			return -EINVAL;
		}

		if (net_pkt_skip(pkt, 40 + 2) ||
		    net_pkt_read_be16(pkt, &frag_offset)) {
			return -EINVAL;
		}

		if ((frag_offset & 0xfff8) != 0U) {
			NET_DBG("Invalid fragment offset %d",
				frag_offset & 0xfff8);
			return -EINVAL;
		}

		if ((frag_offset & 0x0001) != 1U) {
			NET_DBG("Fragment More flag should be set");
			return -EINVAL;
		}
	}

	if (frag_count == 2) {
		uint16_t exp_ext_len = 8U; /* 8 (FRAG)*/
		uint16_t recv_ext_len;
		uint16_t exp_payload_len = 376U; /* 1608 (data + UDP) - 1232 (fragment 1) */
		uint16_t recv_payload_len;
		uint16_t frag_offset;

		recv_ext_len = net_pkt_ipv6_ext_len(pkt);
		if (recv_ext_len != exp_ext_len) {
			NET_DBG("Expected amount of Ext headers len is %d,"
				"but received %d", exp_ext_len, recv_ext_len);
			return -EINVAL;
		}

		if (pkt->buffer->data[6] != NET_IPV6_NEXTHDR_FRAG) {
			NET_DBG("Invalid IPv6 next header %d",
				pkt->buffer->data[6]);
			return -EINVAL;
		}

		/* IPv6 + FRAG */
		recv_payload_len = net_pkt_get_len(pkt) - 40 - 8;
		if (recv_payload_len != exp_payload_len) {
			NET_DBG("Expected amount of payload len is %d,"
				"but received %d", exp_payload_len,
				recv_payload_len);
			return -EINVAL;
		}

		if (net_pkt_skip(pkt, 40 + 2) ||
		    net_pkt_read_be16(pkt, &frag_offset)) {
			return -EINVAL;
		}

		if ((frag_offset & 0xfff8) != 1232U) {
			NET_DBG("Invalid fragment offset %d",
				frag_offset & 0xfff8);
			return -EINVAL;
		}

		if ((frag_offset & 0x0001) != 0U) {
			NET_DBG("Fragment More flag should be unset");
			return -EINVAL;
		}
	}

	test_pkt_loopback(pkt);

	return 0;
}

static enum net_verdict udp_data_received(struct net_conn *conn,
					  struct net_pkt *pkt,
					  union net_ip_header *ip_hdr,
					  union net_proto_header *proto_hdr,
					  void *user_data)
{
	const struct net_ipv6_hdr *hdr = NET_IPV6_HDR(pkt);
	uint8_t verify_buf[NET_IPV6H_LEN];
	size_t expected_pkt_length = NET_IPV6H_LEN + NET_UDPH_LEN + 1600U;
	uint16_t expected_udp_length = htons(1600U + NET_UDPH_LEN);
	static const char expected_data[] = "123456789.";
	const size_t expected_data_len = sizeof(expected_data) - 1;
	uint16_t i;

	NET_DBG("Data %p received", pkt);

	zassert_equal(test_type, IPV6_UDP_LOOPBACK,
		      "Packet should only be received in UDP loopback test");
	zassert_equal(net_pkt_get_len(pkt), expected_pkt_length, "Invalid packet length");

	/* Verify IPv6 header is valid */
	zassert_equal(hdr->vtc, ipv6_udp[offsetof(struct net_ipv6_hdr, vtc)],
		      "IPv6 header vtc mismatch");
	zassert_equal(hdr->tcflow, ipv6_udp[offsetof(struct net_ipv6_hdr, tcflow)],
		      "IPv6 header tcflow mismatch");
	zassert_mem_equal(&hdr->flow, &ipv6_udp[offsetof(struct net_ipv6_hdr, flow)],
			  sizeof(hdr->flow), "IPv6 header flow mismatch");
	zassert_equal(hdr->len, expected_udp_length, "IPv6 header len mismatch");
	zassert_equal(hdr->nexthdr, ipv6_udp[offsetof(struct net_ipv6_hdr, nexthdr)],
		      "IPv6 header nexthdr mismatch");
	zassert_equal(hdr->hop_limit, ipv6_udp[offsetof(struct net_ipv6_hdr, hop_limit)],
		      "IPv6 header hop_limit mismatch");
	zassert_mem_equal(hdr->src, &ipv6_udp[offsetof(struct net_ipv6_hdr, dst)],
			  NET_IPV6_ADDR_SIZE, "IPv6 header source IP mismatch");
	zassert_mem_equal(hdr->dst, &ipv6_udp[offsetof(struct net_ipv6_hdr, src)],
			  NET_IPV6_ADDR_SIZE, "IPv6 header destination IP mismatch");

	/* Verify UDP header is valid */
	net_pkt_cursor_init(pkt);
	net_pkt_read(pkt, verify_buf, NET_IPV6H_LEN);
	net_pkt_read(pkt, verify_buf, NET_UDPH_LEN);
	zassert_mem_equal(verify_buf, &ipv6_udp[NET_IPV6H_LEN + 2], 2,
			  "UDP header source port mismatch");
	zassert_mem_equal(verify_buf + 2, &ipv6_udp[NET_IPV6H_LEN], 2,
			  "UDP header destination port mismatch");
	zassert_mem_equal(verify_buf + 4, &expected_udp_length, 2,
			  "UDP header length mismatch");
	zassert_equal(net_calc_verify_chksum_udp(pkt), 0,
		      "UDP header invalid checksum");

	/* Verify data is valid */
	i = NET_IPV6H_LEN + NET_UDPH_LEN;
	while (i < net_pkt_get_len(pkt)) {
		memset(verify_buf, 0, sizeof(verify_buf));
		net_pkt_read(pkt, verify_buf, expected_data_len);

		zassert_mem_equal(verify_buf, expected_data, expected_data_len,
				  "UDP data verification failure");

		i += expected_data_len;
	}

	net_pkt_unref(pkt);

	test_complete = true;

	return NET_OK;
}

static int sender_iface(const struct device *dev, struct net_pkt *pkt)
{
	if (!pkt->buffer) {
		NET_DBG("No data to send!");
		return -ENODATA;
	}

	if (test_started) {
		/* Verify the fragments */
		if (verify_fragment(pkt) < 0) {
			NET_DBG("Fragments cannot be verified");
			test_failed = true;
		}
	}

	zassert_false(test_failed, "Fragment verify failed");

	if (test_complete) {
		k_sem_give(&wait_data);
	}

	return 0;
}

struct net_if_test net_iface1_data;

static struct dummy_api net_iface_api = {
	.iface_api.init = net_iface_init,
	.send = sender_iface,
};

#define _ETH_L2_LAYER DUMMY_L2
#define _ETH_L2_CTX_TYPE NET_L2_GET_CTX_TYPE(DUMMY_L2)

NET_DEVICE_INIT_INSTANCE(net_iface1_test,
			 "iface1",
			 iface1,
			 NULL,
			 NULL,
			 &net_iface1_data,
			 NULL,
			 CONFIG_KERNEL_INIT_PRIORITY_DEFAULT,
			 &net_iface_api,
			 _ETH_L2_LAYER,
			 _ETH_L2_CTX_TYPE,
			 NET_IPV6_MTU);

static void add_nbr(struct net_if *iface,
		    struct in6_addr *addr,
		    struct net_linkaddr *lladdr)
{
	struct net_nbr *nbr;

	nbr = net_ipv6_nbr_add(iface, addr, lladdr, false,
			       NET_IPV6_NBR_STATE_REACHABLE);
	zassert_not_null(nbr, "Cannot add neighbor");
}

static void setup_udp_handler(const struct in6_addr *raddr,
			      const struct in6_addr *laddr,
			      uint16_t remote_port,
			      uint16_t local_port)
{
	static struct net_conn_handle *handle;
	struct sockaddr remote_addr = { 0 };
	struct sockaddr local_addr = { 0 };
	int ret;

	net_ipaddr_copy(&net_sin6(&local_addr)->sin6_addr, laddr);
	local_addr.sa_family = AF_INET6;

	net_ipaddr_copy(&net_sin6(&remote_addr)->sin6_addr, raddr);
	remote_addr.sa_family = AF_INET6;

	ret = net_udp_register(AF_INET6, &remote_addr, &local_addr,
			       remote_port, local_port, NULL, udp_data_received,
			       NULL, &handle);
	zassert_equal(ret, 0, "Cannot register UDP handler");
}

static void *test_setup(void)
{
	struct net_if_addr *ifaddr;
	int idx;

	/* The semaphore is there to wait the data to be received. */
	k_sem_init(&wait_data, 0, UINT_MAX);

	iface1 = net_if_get_by_index(1);

	((struct net_if_test *) net_if_get_device(iface1)->data)->idx =
		net_if_get_by_iface(iface1);

	idx = net_if_get_by_iface(iface1);
	zassert_equal(idx, 1, "Invalid index iface1");

	zassert_not_null(iface1, "Interface 1");

	ifaddr = net_if_ipv6_addr_add(iface1, &my_addr1,
				      NET_ADDR_MANUAL, 0);
	if (!ifaddr) {
		NET_DBG("Cannot add IPv6 address %s",
			net_sprint_ipv6_addr(&my_addr1));
		zassert_not_null(ifaddr, "addr1");
	}

	ifaddr = net_if_ipv6_addr_add(iface1, &ll_addr,
				      NET_ADDR_MANUAL, 0);
	if (!ifaddr) {
		NET_DBG("Cannot add IPv6 address %s",
			net_sprint_ipv6_addr(&ll_addr));
		zassert_not_null(ifaddr, "ll_addr");
	} else {
		/* we need to set the addresses preferred */
		ifaddr->addr_state = NET_ADDR_PREFERRED;
	}

	net_if_up(iface1);

	add_nbr(iface1, &my_addr2, &ll_addr2);

	/* Remote and local are swapped so that we can receive the sent
	 * packet.
	 */
	setup_udp_handler(&my_addr2, &my_addr1, 49111, 43740);

	/* The interface might receive data which might fail the checks
	 * in the iface sending function, so we need to reset the failure
	 * flag.
	 */
	test_failed = false;

	test_started = true;

	return NULL;
}

ZTEST(net_ipv6_fragment, test_find_last_ipv6_fragment_udp)
{
	uint16_t next_hdr_pos = 0U;
	uint16_t last_hdr_pos = 0U;
	struct net_pkt *pkt;
	int ret;

	pkt = net_pkt_alloc_with_buffer(iface1, sizeof(ipv6_udp), AF_INET6,
					IPPROTO_UDP, ALLOC_TIMEOUT);
	zassert_not_null(pkt, "packet");

	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr));
	net_pkt_set_ipv6_ext_len(pkt, sizeof(ipv6_udp) -
				 sizeof(struct net_ipv6_hdr));

	/* Add IPv6 header + UDP */
	ret = net_pkt_write(pkt, ipv6_udp, sizeof(ipv6_udp));

	zassert_true(ret == 0, "IPv6 header append failed");

	ret = net_ipv6_find_last_ext_hdr(pkt, &next_hdr_pos, &last_hdr_pos);
	zassert_equal(ret, 0, "Cannot find last header");

	zassert_equal(next_hdr_pos, 6, "Next header index wrong");
	zassert_equal(last_hdr_pos, sizeof(struct net_ipv6_hdr),
		      "Last header position wrong");

	zassert_equal(NET_IPV6_HDR(pkt)->nexthdr, 0x11, "Invalid next header");
	zassert_equal(pkt->buffer->data[next_hdr_pos], 0x11, "Invalid next "
		      "header");

	net_pkt_unref(pkt);
}

ZTEST(net_ipv6_fragment, test_find_last_ipv6_fragment_hbho_udp)
{
	uint16_t next_hdr_pos = 0U;
	uint16_t last_hdr_pos = 0U;
	struct net_pkt *pkt;
	int ret;

	pkt = net_pkt_alloc_with_buffer(iface1, sizeof(ipv6_hbho) +
					sizeof(struct net_ipv6_hdr) + 6,
					AF_UNSPEC, 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt, "packet");

	net_pkt_set_family(pkt, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr));
	net_pkt_set_ipv6_ext_len(pkt, sizeof(ipv6_hbho) -
				 sizeof(struct net_ipv6_hdr));
	/* Add IPv6 header + HBH option */
	ret = net_pkt_write(pkt, ipv6_hbho, sizeof(ipv6_hbho));
	zassert_true(ret == 0, "IPv6 header append failed");

	ret = net_ipv6_find_last_ext_hdr(pkt, &next_hdr_pos, &last_hdr_pos);
	zassert_equal(ret, 0, "Cannot find last header");

	zassert_equal(next_hdr_pos, sizeof(struct net_ipv6_hdr),
		      "Next header index wrong");
	zassert_equal(last_hdr_pos, sizeof(struct net_ipv6_hdr) + 8,
		      "Last header position wrong");

	zassert_equal(NET_IPV6_HDR(pkt)->nexthdr, 0, "Invalid next header");
	zassert_equal(pkt->buffer->data[next_hdr_pos], 0x11, "Invalid next "
		      "header");

	net_pkt_unref(pkt);
}

ZTEST(net_ipv6_fragment, test_find_last_ipv6_fragment_hbho_1)
{
	uint16_t next_hdr_pos = 0U;
	uint16_t last_hdr_pos = 0U;
	struct net_pkt *pkt;
	uint8_t next_hdr;
	uint8_t last_hdr;
	int ret;

	pkt = net_pkt_alloc_with_buffer(iface1, sizeof(ipv6_hbho_1),
					AF_UNSPEC, 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt, "packet");

	net_pkt_set_family(pkt, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr));

	/* Add IPv6 header + HBH option + fragment header */
	ret = net_pkt_write(pkt, ipv6_hbho_1, sizeof(ipv6_hbho_1));
	zassert_true(ret == 0, "IPv6 header append failed");

	net_pkt_set_overwrite(pkt, true);

	ret = net_ipv6_find_last_ext_hdr(pkt, &next_hdr_pos, &last_hdr_pos);
	zassert_equal(ret, 0, "Cannot find last header");

	zassert_equal(next_hdr_pos, 40, "Next header position wrong");
	zassert_equal(last_hdr_pos, 112, "Last header position wrong");

	net_pkt_cursor_init(pkt);
	net_pkt_skip(pkt, next_hdr_pos);
	net_pkt_read_u8(pkt, &next_hdr);

	zassert_equal(next_hdr, 0x11, "Invalid next header");

	net_pkt_cursor_init(pkt);
	net_pkt_skip(pkt, last_hdr_pos);
	net_pkt_read_u8(pkt, &last_hdr);

	zassert_equal(last_hdr, 0x4e, "Invalid last header");

	net_pkt_unref(pkt);
}

ZTEST(net_ipv6_fragment, test_find_last_ipv6_fragment_hbho_2)
{
	uint16_t next_hdr_pos = 0U;
	uint16_t last_hdr_pos = 0U;
	struct net_pkt *pkt;
	uint8_t next_hdr;
	uint8_t last_hdr;
	int ret;

	pkt = net_pkt_alloc_with_buffer(iface1, sizeof(ipv6_hbho_2),
					AF_UNSPEC, 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt, "packet");

	net_pkt_set_family(pkt, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr));

	/* Add IPv6 header + HBH option + fragment header */
	ret = net_pkt_write(pkt, ipv6_hbho_2, sizeof(ipv6_hbho_2));
	zassert_true(ret == 0, "IPv6 header append failed");

	net_pkt_set_overwrite(pkt, true);

	ret = net_ipv6_find_last_ext_hdr(pkt, &next_hdr_pos, &last_hdr_pos);
	zassert_equal(ret, 0, "Cannot find last header");

	zassert_equal(next_hdr_pos, 40, "Next header position wrong");
	zassert_equal(last_hdr_pos, 144, "Last header position wrong");

	net_pkt_cursor_init(pkt);
	net_pkt_skip(pkt, next_hdr_pos);
	net_pkt_read_u8(pkt, &next_hdr);

	zassert_equal(next_hdr, 0x11, "Invalid next header");

	net_pkt_cursor_init(pkt);
	net_pkt_skip(pkt, last_hdr_pos);
	net_pkt_read_u8(pkt, &last_hdr);

	zassert_equal(last_hdr, 0x4e, "Invalid last header");

	net_pkt_unref(pkt);
}

ZTEST(net_ipv6_fragment, test_find_last_ipv6_fragment_hbho_3)
{
	uint16_t next_hdr_pos = 0U;
	uint16_t last_hdr_pos = 0U;
	struct net_pkt *pkt;
	uint8_t next_hdr;
	uint8_t last_hdr;
	int ret;

	pkt = net_pkt_alloc_with_buffer(iface1, sizeof(ipv6_hbho_3),
					AF_UNSPEC, 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt, "packet");

	net_pkt_set_family(pkt, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr));

	/* Add IPv6 header + HBH option + fragment header */
	ret = net_pkt_write(pkt, ipv6_hbho_3, sizeof(ipv6_hbho_3));
	zassert_true(ret == 0, "IPv6 header append failed");

	net_pkt_set_overwrite(pkt, true);

	ret = net_ipv6_find_last_ext_hdr(pkt, &next_hdr_pos, &last_hdr_pos);
	zassert_equal(ret, 0, "Cannot find last header");

	zassert_equal(next_hdr_pos, 40, "Next header position wrong");
	zassert_equal(last_hdr_pos, 960, "Last header position wrong");

	net_pkt_cursor_init(pkt);
	net_pkt_skip(pkt, next_hdr_pos);
	net_pkt_read_u8(pkt, &next_hdr);

	zassert_equal(next_hdr, 0x11, "Invalid next header");

	net_pkt_cursor_init(pkt);
	net_pkt_skip(pkt, last_hdr_pos);
	net_pkt_read_u8(pkt, &last_hdr);

	zassert_equal(last_hdr, 0x4e, "Invalid last header");

	net_pkt_unref(pkt);
}

ZTEST(net_ipv6_fragment, test_find_last_ipv6_fragment_hbho_frag)
{
	uint16_t next_hdr_pos = 0U;
	uint16_t last_hdr_pos = 0U;
	struct net_pkt *pkt;
	int ret;

	pkt = net_pkt_alloc_with_buffer(iface1, sizeof(ipv6_hbho_frag),
					AF_UNSPEC, 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt, "packet");

	net_pkt_set_family(pkt, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr));

	/* Add IPv6 header + HBH option + fragment header */
	ret = net_pkt_write(pkt, ipv6_hbho_frag, sizeof(ipv6_hbho_frag));
	zassert_true(ret == 0, "IPv6 header append failed");

	net_pkt_set_overwrite(pkt, true);

	ret = net_ipv6_find_last_ext_hdr(pkt, &next_hdr_pos, &last_hdr_pos);
	zassert_equal(ret, 0, "Cannot find last header");

	zassert_equal(next_hdr_pos, sizeof(struct net_ipv6_hdr) + 8,
		      "Next header position wrong");
	zassert_equal(last_hdr_pos, sizeof(struct net_ipv6_hdr) + 8 + 8,
		      "Last header position wrong");

	zassert_equal(NET_IPV6_HDR(pkt)->nexthdr, 0, "Invalid next header");
	zassert_equal(pkt->buffer->data[next_hdr_pos], 0x11,
		      "Invalid next header");

	net_pkt_unref(pkt);
}

ZTEST(net_ipv6_fragment, test_find_last_ipv6_fragment_hbho_frag_1)
{
	uint16_t next_hdr_pos = 0U;
	uint16_t last_hdr_pos = 0U;
	struct net_pkt *pkt;
	uint8_t next_hdr;
	uint8_t last_hdr;
	int ret;

	pkt = net_pkt_alloc_with_buffer(iface1, sizeof(ipv6_hbho_frag_1),
					AF_UNSPEC, 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt, "packet");

	net_pkt_set_family(pkt, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr));

	/* Add IPv6 header + HBH option + fragment header */
	ret = net_pkt_write(pkt, ipv6_hbho_frag_1,
			    sizeof(ipv6_hbho_frag_1));
	zassert_true(ret == 0, "IPv6 header append failed");

	net_pkt_set_overwrite(pkt, true);

	ret = net_ipv6_find_last_ext_hdr(pkt, &next_hdr_pos, &last_hdr_pos);
	zassert_equal(ret, 0, "Cannot find last header");

	zassert_equal(next_hdr_pos, 1072, "Next header position wrong");
	zassert_equal(last_hdr_pos, 1080, "Last header position wrong");

	net_pkt_cursor_init(pkt);
	net_pkt_skip(pkt, next_hdr_pos);
	net_pkt_read_u8(pkt, &next_hdr);

	zassert_equal(next_hdr, 0x3a, "Invalid next header");

	net_pkt_cursor_init(pkt);
	net_pkt_skip(pkt, last_hdr_pos);
	net_pkt_read_u8(pkt, &last_hdr);

	zassert_equal(last_hdr, 0x80, "Invalid next header");

	net_pkt_unref(pkt);
}

ZTEST(net_ipv6_fragment, test_send_ipv6_fragment)
{
#define MAX_LEN 1600
	static char data[] = "123456789.";
	int data_len = sizeof(data) - 1;
	int count = MAX_LEN / data_len;
	struct net_pkt *pkt;
	size_t total_len;
	int i, ret;

	test_type = IPV6_SMALL_HBHO_FRAG;
	pkt_data_len = 0U;

	pkt = net_pkt_alloc_with_buffer(iface1,
					sizeof(ipv6_hbho) + (count * data_len),
					AF_UNSPEC, 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt, "packet");

	net_pkt_set_iface(pkt, iface1);
	net_pkt_set_family(pkt, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr));
	net_pkt_set_ipv6_ext_len(pkt, 8); /* hbho */

	/* Add IPv6 header + HBH option */
	ret = net_pkt_write(pkt, ipv6_hbho, sizeof(ipv6_hbho));
	zassert_true(ret == 0, "IPv6 header append failed");

	/* Then add some data that is over 1280 bytes long */
	for (i = 0; i < count; i++) {
		ret = net_pkt_write(pkt, data, data_len);

		zassert_true(ret == 0, "Cannot append data");

		pkt_data_len += data_len;
	}

	zassert_equal(pkt_data_len, count * data_len, "Data size mismatch");

	total_len = net_pkt_get_len(pkt) - sizeof(struct net_ipv6_hdr);

	NET_DBG("Sending %zd bytes of which ext %d and data %d bytes",
		total_len, net_pkt_ipv6_ext_len(pkt), pkt_data_len);

	zassert_equal(total_len - net_pkt_ipv6_ext_len(pkt) - 8, pkt_data_len,
		      "Packet size invalid");

	NET_IPV6_HDR(pkt)->len = htons(total_len);

	net_pkt_cursor_init(pkt);
	net_pkt_set_overwrite(pkt, true);
	net_pkt_skip(pkt, net_pkt_ip_hdr_len(pkt) + net_pkt_ipv6_ext_len(pkt));

	net_udp_finalize(pkt, false);

	test_failed = false;
	test_complete = false;

	ret = net_send_data(pkt);
	if (ret < 0) {
		NET_DBG("Cannot send test packet (%d)", ret);
		zassert_equal(ret, 0, "Cannot send");
	}

	if (k_sem_take(&wait_data, WAIT_TIME)) {
		NET_DBG("Timeout while waiting interface data");
		zassert_true(false, "Timeout");
	}
}

ZTEST(net_ipv6_fragment, test_send_ipv6_fragment_large_hbho)
{
	struct net_pkt *pkt;
	size_t total_len;
	int ret;

	frag_count = 0;
	pkt_data_len = 416U;
	test_type = IPV6_LARGE_HBHO_FRAG;

	pkt = net_pkt_alloc_with_buffer(iface1, sizeof(ipv6_large_hbho),
					AF_UNSPEC, 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt, "packet");

	net_pkt_set_family(pkt, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr));
	net_pkt_set_ipv6_ext_len(pkt, 1032); /* hbho */

	ret = net_pkt_write(pkt, ipv6_large_hbho, sizeof(ipv6_large_hbho));
	zassert_true(ret == 0, "IPv6 header append failed");

	net_pkt_set_overwrite(pkt, true);

	total_len = net_pkt_get_len(pkt) - sizeof(struct net_ipv6_hdr);

	NET_DBG("Sending %zd bytes of which ext %d and data %d bytes",
		total_len, net_pkt_ipv6_ext_len(pkt), pkt_data_len);

	test_failed = false;
	test_complete = false;

	ret = net_send_data(pkt);
	if (ret < 0) {
		NET_DBG("Cannot send test packet (%d)", ret);
		zassert_equal(ret, 0, "Cannot send");
	}

	if (k_sem_take(&wait_data, WAIT_TIME)) {
		NET_DBG("Timeout while waiting interface data");
		zassert_true(false, "Timeout");
	}
}

ZTEST(net_ipv6_fragment, test_send_ipv6_fragment_without_hbho)
{
	struct net_pkt *pkt;
	size_t total_len;
	int ret;

	frag_count = 0;
	pkt_data_len = sizeof(ipv6_frag_wo_hbho) -
			sizeof(struct net_ipv6_hdr) -
			NET_IPV6_FRAGH_LEN;
	test_type = IPV6_WITHOUT_HBHO_FRAG;

	pkt = net_pkt_alloc_with_buffer(iface1, sizeof(ipv6_frag_wo_hbho),
					AF_UNSPEC, 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt, "packet");

	net_pkt_set_family(pkt, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr));
	net_pkt_set_ipv6_ext_len(pkt, NET_IPV6_FRAGH_LEN); /* without hbho*/

	ret = net_pkt_write(pkt, ipv6_frag_wo_hbho,
			    sizeof(ipv6_frag_wo_hbho));
	zassert_true(ret == 0, "IPv6 header append failed");

	net_pkt_set_overwrite(pkt, true);

	total_len = net_pkt_get_len(pkt) - sizeof(struct net_ipv6_hdr) -
		    NET_IPV6_FRAGH_LEN;

	NET_DBG("Sending %zd bytes of which ext %d and data %d bytes",
		total_len, net_pkt_ipv6_ext_len(pkt), pkt_data_len);

	test_failed = false;
	test_complete = false;

	ret = net_send_data(pkt);
	if (ret < 0) {
		NET_DBG("Cannot send test packet (%d)", ret);
		zassert_equal(ret, 0, "Cannot send");
	}

	if (k_sem_take(&wait_data, WAIT_TIME)) {
		NET_DBG("Timeout while waiting interface data");
		zassert_true(false, "Timeout");
	}
}

ZTEST(net_ipv6_fragment, test_send_ipv6_fragment_udp_loopback)
{
#define MAX_LEN 1600
	static const char data[] = "123456789.";
	int data_len = sizeof(data) - 1;
	int count = MAX_LEN / data_len;
	struct net_pkt *pkt;
	size_t total_len;
	int i, ret;

	frag_count = 0;
	test_type = IPV6_UDP_LOOPBACK;
	pkt_data_len = 0U;

	pkt = net_pkt_alloc_with_buffer(iface1,
					sizeof(ipv6_udp) + (count * data_len),
					AF_UNSPEC, 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt, "packet");

	net_pkt_set_iface(pkt, iface1);
	net_pkt_set_family(pkt, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr));
	net_pkt_set_ipv6_ext_len(pkt, 0);

	/* Add IPv6 header + HBH option */
	ret = net_pkt_write(pkt, ipv6_udp, sizeof(ipv6_udp));
	zassert_true(ret == 0, "IPv6 header append failed");

	/* Then add some data that is over 1280 bytes long */
	for (i = 0; i < count; i++) {
		ret = net_pkt_write(pkt, data, data_len);

		zassert_true(ret == 0, "Cannot append data");

		pkt_data_len += data_len;
	}

	zassert_equal(pkt_data_len, count * data_len, "Data size mismatch");

	total_len = net_pkt_get_len(pkt) - sizeof(struct net_ipv6_hdr);

	NET_DBG("Sending %zd bytes of which ext %d and data %d bytes",
		total_len, net_pkt_ipv6_ext_len(pkt), pkt_data_len);

	zassert_equal(total_len - net_pkt_ipv6_ext_len(pkt) - 8, pkt_data_len,
		      "Packet size invalid");

	NET_IPV6_HDR(pkt)->len = htons(total_len);

	net_pkt_cursor_init(pkt);
	net_pkt_set_overwrite(pkt, true);
	net_pkt_skip(pkt, net_pkt_ip_hdr_len(pkt) + net_pkt_ipv6_ext_len(pkt));

	net_udp_finalize(pkt, false);

	test_failed = false;
	test_complete = false;

	ret = net_send_data(pkt);
	if (ret < 0) {
		NET_DBG("Cannot send test packet (%d)", ret);
		zassert_equal(ret, 0, "Cannot send");
	}

	if (k_sem_take(&wait_data, WAIT_TIME)) {
		NET_DBG("Timeout while waiting interface data");
		zassert_true(false, "Timeout");
	}
}

static uint8_t ipv6_reass_frag1[] = {
0x60, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x2c, 0x40,
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x3a, 0x00, 0x00, 0x01, 0x7c, 0x8e, 0x53, 0x49,
0x81, 0x00, 0xda, 0x34, 0x28, 0x5b, 0x00, 0x01
};

static uint8_t ipv6_reass_frag2[] = {
0x60, 0x00, 0x00, 0x00, 0x00, 0x54, 0x2c, 0x40,
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x3a, 0x00, 0x04, 0xd0, 0x7c, 0x8e, 0x53, 0x49
};

#define ECHO_REPLY_H_LEN 8
#define ECHO_REPLY_ID_OFFSET (NET_IPV6H_LEN + NET_IPV6_FRAGH_LEN + 4)
#define ECHO_REPLY_SEQ_OFFSET (NET_IPV6H_LEN + NET_IPV6_FRAGH_LEN + 6)

static uint16_t test_recv_payload_len = 1300U;

static int handle_ipv6_echo_reply(struct net_icmp_ctx *ctx,
				  struct net_pkt *pkt,
				  struct net_icmp_ip_hdr *ip_hdr,
				  struct net_icmp_hdr *icmp_hdr,
				  void *user_data)
{
	const struct net_ipv6_hdr *hdr = NET_IPV6_HDR(pkt);
	uint8_t verify_buf[NET_IPV6H_LEN];
	size_t expected_pkt_length = NET_IPV6H_LEN + ECHO_REPLY_H_LEN + test_recv_payload_len;
	uint16_t expected_icmpv6_length = htons(test_recv_payload_len + ECHO_REPLY_H_LEN);
	uint16_t i;
	uint8_t expected_data = 0;

	ARG_UNUSED(ctx);
	ARG_UNUSED(ip_hdr);
	ARG_UNUSED(icmp_hdr);
	ARG_UNUSED(user_data);

	NET_DBG("Data %p received", pkt);

	zassert_equal(net_pkt_get_len(pkt), expected_pkt_length, "Invalid packet length");

	/* Verify IPv6 header is valid */
	zassert_equal(hdr->vtc, ipv6_reass_frag1[offsetof(struct net_ipv6_hdr, vtc)],
		      "IPv6 header vtc mismatch");
	zassert_equal(hdr->tcflow, ipv6_reass_frag1[offsetof(struct net_ipv6_hdr, tcflow)],
		      "IPv6 header tcflow mismatch");
	zassert_mem_equal(&hdr->flow, &ipv6_reass_frag1[offsetof(struct net_ipv6_hdr, flow)],
			  sizeof(hdr->flow), "IPv6 header flow mismatch");
	zassert_equal(hdr->len, expected_icmpv6_length, "IPv6 header len mismatch");
	zassert_equal(hdr->nexthdr, IPPROTO_ICMPV6, "IPv6 header nexthdr mismatch");
	zassert_equal(hdr->hop_limit, ipv6_reass_frag1[offsetof(struct net_ipv6_hdr, hop_limit)],
		      "IPv6 header hop_limit mismatch");
	zassert_mem_equal(hdr->src, &ipv6_reass_frag1[offsetof(struct net_ipv6_hdr, src)],
			  NET_IPV6_ADDR_SIZE, "IPv6 header source IP mismatch");
	zassert_mem_equal(hdr->dst, &ipv6_reass_frag1[offsetof(struct net_ipv6_hdr, dst)],
			  NET_IPV6_ADDR_SIZE, "IPv6 header destination IP mismatch");

	/* Verify Echo Reply header is valid */
	net_pkt_cursor_init(pkt);
	net_pkt_read(pkt, verify_buf, NET_IPV6H_LEN);
	net_pkt_read(pkt, verify_buf, ECHO_REPLY_H_LEN);

	zassert_equal(verify_buf[0], NET_ICMPV6_ECHO_REPLY,
		      "Echo reply header invalid type");
	zassert_equal(verify_buf[1], 0, "Echo reply header invalid code");
	zassert_equal(net_calc_chksum_icmpv6(pkt), 0,
		      "Echo reply header invalid checksum");
	zassert_mem_equal(verify_buf + 4, ipv6_reass_frag1 + ECHO_REPLY_ID_OFFSET, 2,
			  "Echo reply header invalid identifier");
	zassert_mem_equal(verify_buf + 6, ipv6_reass_frag1 + ECHO_REPLY_SEQ_OFFSET, 2,
			  "Echo reply header invalid sequence");

	/* Verify data is valid */
	i = NET_IPV6H_LEN + ECHO_REPLY_H_LEN;
	while (i < net_pkt_get_len(pkt)) {
		uint8_t data;

		net_pkt_read_u8(pkt, &data);
		zassert_equal(data, expected_data,
			      "Echo reply data verification failure");
		expected_data++;
		i++;
	}

	k_sem_give(&wait_data);

	return NET_OK;
}

ZTEST(net_ipv6_fragment, test_recv_ipv6_fragment)
{
	struct net_ipv6_hdr ipv6_hdr;
	struct net_pkt_cursor backup;
	struct net_pkt *pkt1;
	struct net_pkt *pkt2;
	uint16_t payload1_len;
	uint16_t payload2_len;
	uint8_t data;
	int ret;
	struct net_icmp_ctx ctx;

	ret = net_icmp_init_ctx(&ctx, NET_ICMPV6_ECHO_REPLY,
				0, handle_ipv6_echo_reply);
	zassert_equal(ret, 0, "Cannot register %s handler (%d)",
		      STRINGIFY(NET_ICMPV6_ECHO_REPLY), ret);

	/* Fragment 1 */
	data = 0U;
	payload1_len = NET_IPV6_MTU - sizeof(ipv6_reass_frag1);
	payload2_len = test_recv_payload_len - payload1_len;

	pkt1 = net_pkt_alloc_with_buffer(iface1, NET_IPV6_MTU, AF_UNSPEC,
					 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt1, "packet");

	net_pkt_set_family(pkt1, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt1, sizeof(struct net_ipv6_hdr));
	net_pkt_cursor_init(pkt1);

	memcpy(&ipv6_hdr, ipv6_reass_frag1, sizeof(struct net_ipv6_hdr));

	ret = net_pkt_write(pkt1, ipv6_reass_frag1,
			    sizeof(struct net_ipv6_hdr) + 1);
	zassert_true(ret == 0, "IPv6 header append failed");

	net_pkt_cursor_backup(pkt1, &backup);

	ret = net_pkt_write(pkt1,
			    ipv6_reass_frag1 + sizeof(struct net_ipv6_hdr) + 1,
			    sizeof(ipv6_reass_frag1) -
			    sizeof(struct net_ipv6_hdr) - 1);
	zassert_true(ret == 0, "IPv6 fragment header append failed");

	while (payload1_len--) {
		ret = net_pkt_write_u8(pkt1, data++);
		zassert_true(ret == 0, "IPv6 header append failed");
	}

	net_pkt_set_ipv6_hdr_prev(pkt1, offsetof(struct net_ipv6_hdr, nexthdr));
	net_pkt_set_ipv6_fragment_start(pkt1, sizeof(struct net_ipv6_hdr));
	net_pkt_set_overwrite(pkt1, true);

	net_pkt_cursor_restore(pkt1, &backup);

	ret = net_ipv6_handle_fragment_hdr(pkt1, &ipv6_hdr,
					   NET_IPV6_NEXTHDR_FRAG);
	zassert_true(ret == NET_OK, "IPv6 frag1 reassembly failed");

	/* Fragment 2 */

	pkt2 = net_pkt_alloc_with_buffer(iface1, payload2_len +
					 sizeof(ipv6_reass_frag2),
					 AF_UNSPEC, 0, ALLOC_TIMEOUT);
	zassert_not_null(pkt2, "packet");

	net_pkt_set_family(pkt2, AF_INET6);
	net_pkt_set_ip_hdr_len(pkt2, sizeof(struct net_ipv6_hdr));
	net_pkt_cursor_init(pkt2);

	memcpy(&ipv6_hdr, ipv6_reass_frag2, sizeof(struct net_ipv6_hdr));

	ret = net_pkt_write(pkt2, ipv6_reass_frag2,
			    sizeof(struct net_ipv6_hdr) + 1);
	zassert_true(ret == 0, "IPv6 header append failed");

	net_pkt_cursor_backup(pkt2, &backup);

	ret = net_pkt_write(pkt2,
			    ipv6_reass_frag2 + sizeof(struct net_ipv6_hdr) + 1,
			    sizeof(ipv6_reass_frag2) -
			    sizeof(struct net_ipv6_hdr) - 1);
	zassert_true(ret == 0, "IPv6 fragment header append failed");

	while (payload2_len--) {
		ret = net_pkt_write_u8(pkt2, data++);
		zassert_true(ret == 0, "IPv6 header append failed");
	}

	net_pkt_set_ipv6_hdr_prev(pkt2, offsetof(struct net_ipv6_hdr, nexthdr));
	net_pkt_set_ipv6_fragment_start(pkt2, sizeof(struct net_ipv6_hdr));
	net_pkt_set_overwrite(pkt2, true);

	net_pkt_cursor_restore(pkt2, &backup);

	ret = net_ipv6_handle_fragment_hdr(pkt2, &ipv6_hdr,
					   NET_IPV6_NEXTHDR_FRAG);
	zassert_true(ret == NET_OK, "IPv6 frag2 reassembly failed");

	if (k_sem_take(&wait_data, WAIT_TIME)) {
		NET_DBG("Timeout while waiting interface data");
		zassert_true(false, "Timeout");
	}

	net_icmp_cleanup_ctx(&ctx);
}

ZTEST_SUITE(net_ipv6_fragment, NULL, test_setup, NULL, NULL, NULL);
