162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __IEEE802154_6LOWPAN_I_H__
362306a36Sopenharmony_ci#define __IEEE802154_6LOWPAN_I_H__
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/list.h>
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <net/ieee802154_netdev.h>
862306a36Sopenharmony_ci#include <net/inet_frag.h>
962306a36Sopenharmony_ci#include <net/6lowpan.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_citypedef unsigned __bitwise lowpan_rx_result;
1262306a36Sopenharmony_ci#define RX_CONTINUE		((__force lowpan_rx_result) 0u)
1362306a36Sopenharmony_ci#define RX_DROP_UNUSABLE	((__force lowpan_rx_result) 1u)
1462306a36Sopenharmony_ci#define RX_DROP			((__force lowpan_rx_result) 2u)
1562306a36Sopenharmony_ci#define RX_QUEUED		((__force lowpan_rx_result) 3u)
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#define LOWPAN_DISPATCH_FRAG1           0xc0
1862306a36Sopenharmony_ci#define LOWPAN_DISPATCH_FRAGN           0xe0
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_cistruct frag_lowpan_compare_key {
2162306a36Sopenharmony_ci	u16 tag;
2262306a36Sopenharmony_ci	u16 d_size;
2362306a36Sopenharmony_ci	struct ieee802154_addr src;
2462306a36Sopenharmony_ci	struct ieee802154_addr dst;
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci/* Equivalent of ipv4 struct ipq
2862306a36Sopenharmony_ci */
2962306a36Sopenharmony_cistruct lowpan_frag_queue {
3062306a36Sopenharmony_ci	struct inet_frag_queue	q;
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciint lowpan_frag_rcv(struct sk_buff *skb, const u8 frag_type);
3462306a36Sopenharmony_civoid lowpan_net_frag_exit(void);
3562306a36Sopenharmony_ciint lowpan_net_frag_init(void);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_civoid lowpan_rx_init(void);
3862306a36Sopenharmony_civoid lowpan_rx_exit(void);
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciint lowpan_header_create(struct sk_buff *skb, struct net_device *dev,
4162306a36Sopenharmony_ci			 unsigned short type, const void *_daddr,
4262306a36Sopenharmony_ci			 const void *_saddr, unsigned int len);
4362306a36Sopenharmony_cinetdev_tx_t lowpan_xmit(struct sk_buff *skb, struct net_device *dev);
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ciint lowpan_iphc_decompress(struct sk_buff *skb);
4662306a36Sopenharmony_cilowpan_rx_result lowpan_rx_h_ipv6(struct sk_buff *skb);
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci#endif /* __IEEE802154_6LOWPAN_I_H__ */
49