/** @file
 @brief 802.15.4 fragment handler

 This is not to be included by the application.
 */

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

#ifndef __NET_IEEE802154_FRAGMENT_H__
#define __NET_IEEE802154_FRAGMENT_H__

#include <misc/slist.h>
#include <zephyr/types.h>

#include <net/net_pkt.h>

#include "ieee802154_frame.h"

struct ieee802154_fragment_ctx {
	struct net_buf *buf;
	u8_t *pos;
	u16_t pkt_size;
	u16_t processed;
	u8_t hdr_diff;
	u8_t offset;
};

static inline bool ieee802154_fragment_is_needed(struct net_pkt *pkt,
						 u8_t ll_hdr_size)
{
	return (net_pkt_get_len(pkt) + ll_hdr_size >
			IEEE802154_MTU - IEEE802154_MFR_LENGTH);
}

static inline
void ieee802154_fragment_ctx_init(struct ieee802154_fragment_ctx *ctx,
				  struct net_pkt *pkt, u16_t hdr_diff,
				  bool iphc)
{
	ctx->buf = pkt->buffer;
	ctx->pos = ctx->buf->data;
	ctx->hdr_diff = hdr_diff;
	ctx->pkt_size = net_pkt_get_len(pkt) + (iphc ? hdr_diff : -1);
	ctx->offset = 0;
	ctx->processed = 0;
}

/**
 *  @brief Fragment IPv6 packet as per RFC 6282
 *
 *  @details After IPv6 compression, transmission of IPv6 over 802.15.4
 *  needs to be fragmented. Every fragment will have fragmentation header
 *  data size, data offset, data tag and payload.
 *
 *  @param Pointer to valid fragmentation context
 *  @param Pointer to valid buffer where to write the fragment
 *  @param bool true for IPHC compression, false for IPv6 dispatch header
 *
 *  @return True in case of success, false otherwise
 */
#ifdef CONFIG_NET_L2_IEEE802154_FRAGMENT
void ieee802154_fragment(struct ieee802154_fragment_ctx *ctx,
			 struct net_buf *frame_buf, bool iphc);
#else
#define ieee802154_fragment(...)
#endif

/**
 *  @brief Reassemble 802.15.4 fragments as per RFC 6282
 *
 *  @details If the data does not fit into single fragment whole IPv6 packet
 *  comes in number of fragments. This function will reassemble them all as
 *  per data tag, data offset and data size. First packet is uncompressed
 *  immediately after reception.
 *
 *  @param Pointer to network fragment, which gets updated to full reassembled
 *         packet when verdict is NET_CONTINUE
 *
 *  @return NET_CONTINUE reassembly done, pkt is complete
 *          NET_OK waiting for other fragments,
 *          NET_DROP invalid fragment.
 */
#ifdef CONFIG_NET_L2_IEEE802154_FRAGMENT
enum net_verdict ieee802154_reassemble(struct net_pkt *pkt);
#else
#define ieee802154_reassemble(...)
#endif /* CONFIG_NET_L2_IEEE802154_FRAGMENT */

#endif /* __NET_IEEE802154_FRAGMENT_H__ */
