Linux 6.10-rc3
[linux-block.git] / net / mac80211 / drop.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * mac80211 drop reason list
4  *
5  * Copyright (C) 2023 Intel Corporation
6  */
7
8 #ifndef MAC80211_DROP_H
9 #define MAC80211_DROP_H
10 #include <net/dropreason.h>
11
12 typedef unsigned int __bitwise ieee80211_rx_result;
13
14 #define MAC80211_DROP_REASONS_MONITOR(R)        \
15         R(RX_DROP_M_UNEXPECTED_4ADDR_FRAME)     \
16         R(RX_DROP_M_BAD_BCN_KEYIDX)             \
17         R(RX_DROP_M_BAD_MGMT_KEYIDX)            \
18 /* this line for the trailing \ - add before this */
19
20 #define MAC80211_DROP_REASONS_UNUSABLE(R)       \
21         /* 0x00 == ___RX_DROP_UNUSABLE */       \
22         R(RX_DROP_U_MIC_FAIL)                   \
23         R(RX_DROP_U_REPLAY)                     \
24         R(RX_DROP_U_BAD_MMIE)                   \
25         R(RX_DROP_U_DUP)                        \
26         R(RX_DROP_U_SPURIOUS)                   \
27         R(RX_DROP_U_DECRYPT_FAIL)               \
28         R(RX_DROP_U_NO_KEY_ID)                  \
29         R(RX_DROP_U_BAD_CIPHER)                 \
30         R(RX_DROP_U_OOM)                        \
31         R(RX_DROP_U_NONSEQ_PN)                  \
32         R(RX_DROP_U_BAD_KEY_COLOR)              \
33         R(RX_DROP_U_BAD_4ADDR)                  \
34         R(RX_DROP_U_BAD_AMSDU)                  \
35         R(RX_DROP_U_BAD_AMSDU_CIPHER)           \
36         R(RX_DROP_U_INVALID_8023)               \
37         /* 0x10 */                              \
38         R(RX_DROP_U_RUNT_ACTION)                \
39         R(RX_DROP_U_UNPROT_ACTION)              \
40         R(RX_DROP_U_UNPROT_DUAL)                \
41         R(RX_DROP_U_UNPROT_UCAST_MGMT)          \
42         R(RX_DROP_U_UNPROT_MCAST_MGMT)          \
43         R(RX_DROP_U_UNPROT_BEACON)              \
44         R(RX_DROP_U_UNPROT_UNICAST_PUB_ACTION)  \
45         R(RX_DROP_U_UNPROT_ROBUST_ACTION)       \
46         R(RX_DROP_U_ACTION_UNKNOWN_SRC)         \
47         R(RX_DROP_U_REJECTED_ACTION_RESPONSE)   \
48         R(RX_DROP_U_EXPECT_DEFRAG_PROT)         \
49         R(RX_DROP_U_WEP_DEC_FAIL)               \
50         R(RX_DROP_U_NO_IV)                      \
51         R(RX_DROP_U_NO_ICV)                     \
52         R(RX_DROP_U_AP_RX_GROUPCAST)            \
53         R(RX_DROP_U_SHORT_MMIC)                 \
54         /* 0x20 */                              \
55         R(RX_DROP_U_MMIC_FAIL)                  \
56         R(RX_DROP_U_SHORT_TKIP)                 \
57         R(RX_DROP_U_TKIP_FAIL)                  \
58         R(RX_DROP_U_SHORT_CCMP)                 \
59         R(RX_DROP_U_SHORT_CCMP_MIC)             \
60         R(RX_DROP_U_SHORT_GCMP)                 \
61         R(RX_DROP_U_SHORT_GCMP_MIC)             \
62         R(RX_DROP_U_SHORT_CMAC)                 \
63         R(RX_DROP_U_SHORT_CMAC256)              \
64         R(RX_DROP_U_SHORT_GMAC)                 \
65         R(RX_DROP_U_UNEXPECTED_VLAN_4ADDR)      \
66         R(RX_DROP_U_UNEXPECTED_STA_4ADDR)       \
67         R(RX_DROP_U_UNEXPECTED_VLAN_MCAST)      \
68         R(RX_DROP_U_NOT_PORT_CONTROL)           \
69 /* this line for the trailing \ - add before this */
70
71 /* having two enums allows for checking ieee80211_rx_result use with sparse */
72 enum ___mac80211_drop_reason {
73 /* if we get to the end of handlers with RX_CONTINUE this will be the reason */
74         ___RX_CONTINUE  = SKB_CONSUMED,
75
76 /* this never gets used as an argument to kfree_skb_reason() */
77         ___RX_QUEUED    = SKB_NOT_DROPPED_YET,
78
79 #define ENUM(x) ___ ## x,
80         ___RX_DROP_MONITOR = SKB_DROP_REASON_SUBSYS_MAC80211_MONITOR <<
81                 SKB_DROP_REASON_SUBSYS_SHIFT,
82         MAC80211_DROP_REASONS_MONITOR(ENUM)
83
84         ___RX_DROP_UNUSABLE = SKB_DROP_REASON_SUBSYS_MAC80211_UNUSABLE <<
85                 SKB_DROP_REASON_SUBSYS_SHIFT,
86         MAC80211_DROP_REASONS_UNUSABLE(ENUM)
87 #undef ENUM
88 };
89
90 enum mac80211_drop_reason {
91         RX_CONTINUE      = (__force ieee80211_rx_result)___RX_CONTINUE,
92         RX_QUEUED        = (__force ieee80211_rx_result)___RX_QUEUED,
93         RX_DROP_MONITOR  = (__force ieee80211_rx_result)___RX_DROP_MONITOR,
94 #define DEF(x) x = (__force ieee80211_rx_result)___ ## x,
95         MAC80211_DROP_REASONS_MONITOR(DEF)
96         MAC80211_DROP_REASONS_UNUSABLE(DEF)
97 #undef DEF
98 };
99
100 #define RX_RES_IS_UNUSABLE(result)      \
101         (((__force u32)(result) & SKB_DROP_REASON_SUBSYS_MASK) == ___RX_DROP_UNUSABLE)
102
103 #endif /* MAC80211_DROP_H */