N
  	   ˆÀÆ0ÄÃ     ˆÇÆ„ì€?ÅÄÃ ?÷     /* SPDX-License-Identifier: GPL-2.0-or-later */

#ifndef _LINUX_DROPREASON_CORE_H
#define _LINUX_DROPREASON_CORE_H

#define DEFINE_DROP_REASON(FN, FNe)	\
	FN(NOT_SPECIFIED)		\
	FN(NO_SOCKET)			\
	FN(SOCKET_CLOSE)		\
	FN(SOCKET_FILTER)		\
	FN(SOCKET_RCVBUFF)		\
	FN(UNIX_DISCONNECT)		\
	FN(PKT_TOO_SMALL)		\
	FN(TCP_CSUM)			\
	FN(UDP_CSUM)			\
	FN(NETFILTER_DROP)		\
	FN(OTHERHOST)			\
	FN(IP_CSUM)			\
	FN(IP_INHDR)			\
	FN(IP_RPFILTER)			\
	FN(UNICAST_IN_L2_MULTICAST)	\
	FN(XFRM_POLICY)			\
	FN(IP_NOPROTO)			\
	FN(PROTO_MEM)			\
	FN(TCP_MD5NOTFOUND)		\
	FN(TCP_MD5UNEXPECTED)		\
	FN(TCP_MD5FAILURE)		\
	FN(SOCKET_BACKLOG)		\
	FN(TCP_FLAGS)			\
	FN(TCP_ABORT_ON_DATA)		\
	FN(TCP_ZEROWINDOW)		\
	FN(TCP_OLD_DATA)		\
	FN(TCP_OVERWINDOW)		\
	FN(TCP_OFOMERGE)		\
	FN(TCP_RFC7323_PAWS)		\
	FN(TCP_RFC7323_PAWS_ACK)	\
	FN(TCP_RFC7323_TW_PAWS)		\
	FN(TCP_RFC7323_TSECR)		\
	FN(TCP_LISTEN_OVERFLOW)		\
	FN(TCP_OLD_SEQUENCE)		\
	FN(TCP_INVALID_SEQUENCE)	\
	FN(TCP_INVALID_ACK_SEQUENCE)	\
	FN(TCP_RESET)			\
	FN(TCP_INVALID_SYN)		\
	FN(TCP_CLOSE)			\
	FN(TCP_FASTOPEN)		\
	FN(TCP_OLD_ACK)			\
	FN(TCP_TOO_OLD_ACK)		\
	FN(TCP_ACK_UNSENT_DATA)		\
	FN(TCP_OFO_QUEUE_PRUNE)		\
	FN(TCP_OFO_DROP)		\
	FN(IP_OUTNOROUTES)		\
	FN(BPF_CGROUP_EGRESS)		\
	FN(IPV6DISABLED)		\
	FN(NEIGH_CREATEFAIL)		\
	FN(NEIGH_FAILED)		\
	FN(NEIGH_QUEUEFULL)		\
	FN(NEIGH_DEAD)			\
	FN(NEIGH_HH_FILLFAIL)		\
	FN(TC_EGRESS)			\
	FN(SECURITY_HOOK)		\
	FN(QDISC_DROP)			\
	FN(QDISC_OVERLIMIT)		\
	FN(QDISC_CONGESTED)		\
	FN(CAKE_FLOOD)			\
	FN(FQ_BAND_LIMIT)		\
	FN(FQ_HORIZON_LIMIT)		\
	FN(FQ_FLOW_LIMIT)		\
	FN(CPU_BACKLOG)			\
	FN(XDP)				\
	FN(TC_INGRESS)			\
	FN(UNHANDLED_PROTO)		\
	FN(SKB_CSUM)			\
	FN(SKB_GSO_SEG)			\
	FN(SKB_UCOPY_FAULT)		\
	FN(DEV_HDR)			\
	FN(DEV_READY)			\
	FN(FULL_RING)			\
	FN(NOMEM)			\
	FN(HDR_TRUNC)			\
	FN(TAP_FILTER)			\
	FN(TAP_TXFILTER)		\
	FN(ICMP_CSUM)			\
	FN(INVALID_PROTO)		\
	FN(IP_INADDRERRORS)		\
	FN(IP_INNOROUTES)		\
	FN(IP_LOCAL_SOURCE)		\
	FN(IP_INVALID_SOURCE)		\
	FN(IP_LOCALNET)			\
	FN(IP_INVALID_DEST)		\
	FN(PKT_TOO_BIG)			\
	FN(DUP_FRAG)			\
	FN(FRAG_REASM_TIMEOUT)		\
	FN(FRAG_TOO_FAR)		\
	FN(TCP_MINTTL)			\
	FN(IPV6_BAD_EXTHDR)		\
	FN(IPV6_NDISC_FRAG)		\
	FN(IPV6_NDISC_HOP_LIMIT)	\
	FN(IPV6_NDISC_BAD_CODE)		\
	FN(IPV6_NDISC_BAD_OPTIONS)	\
	FN(IPV6_NDISC_NS_OTHERHOST)	\
	FN(QUEUE_PURGE)			\
	FN(TC_COOKIE_ERROR)		\
	FN(PACKET_SOCK_ERROR)		\
	FN(TC_CHAIN_NOTFOUND)		\
	FN(TC_RECLASSIFY_LOOP)		\
	FN(VXLAN_INVALID_HDR)		\
	FN(VXLAN_VNI_NOT_FOUND)		\
	FN(MAC_INVALID_SOURCE)		\
	FN(VXLAN_ENTRY_EXISTS)		\
	FN(NO_TX_TARGET)		\
	FN(IP_TUNNEL_ECN)		\
	FN(TUNNEL_TXINFO)		\
	FN(LOCAL_MAC)			\
	FN(ARP_PVLAN_DISABLE)		\
	FN(MAC_IEEE_MAC_CONTROL)	\
	FN(BRIDGE_INGRESS_STP_STATE)	\
	FN(CAN_RX_INVALID_FRAME)	\
	FN(CANFD_RX_INVALID_FRAME)	\
	FN(CANXL_RX_INVALID_FRAME)	\
	FN(PFMEMALLOC)	\
	FNe(MAX)

/**
 * enum skb_drop_reason - the reasons of skb drops
 *
 * The reason of skb drop, which is used in kfree_skb_reason().
 */
enum skb_drop_reason {
	/**
	 * @SKB_NOT_DROPPED_YET: skb is not dropped yet (used for no-drop case)
	 */
	SKB_NOT_DROPPED_YET = 0,
	/** @SKB_CONSUMED: packet has been consumed */
	SKB_CONSUMED,
	/** @SKB_DROP_REASON_NOT_SPECIFIED: drop reason is not specified */
	SKB_DROP_REASON_NOT_SPECIFIED,
	/**
	 * @SKB_DROP_REASON_NO_SOCKET: no valid socket that can be used.
	 * Reason could be one of three cases:
	 * 1) no established/listening socket found during lookup process
	 * 2) no valid request socket during 3WHS process
	 * 3) no valid child socket during 3WHS process
	 */
	SKB_DROP_REASON_NO_SOCKET,
	/** @SKB_DROP_REASON_SOCKET_CLOSE: socket is close()d */
	SKB_DROP_REASON_SOCKET_CLOSE,
	/** @SKB_DROP_REASON_SOCKET_FILTER: dropped by socket filter */
	SKB_DROP_REASON_SOCKET_FILTER,
	/** @SKB_DROP_REASON_SOCKET_RCVBUFF: socket receive buff is full */
	SKB_DROP_REASON_SOCKET_RCVBUFF,
	/**
	 * @SKB_DROP_REASON_UNIX_DISCONNECT: recv queue is purged when SOCK_DGRAM
	 * or SOCK_SEQPACKET socket re-connect()s to another socket or notices
	 * during send() that the peer has been close()d.
	 */
	