1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * mac80211 drop reason list 4 * 5 * Copyright (C) 2023-2024, 2026 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_UNUSABLE(R) \ 15 /* 0x00 == ___RX_DROP_UNUSABLE */ \ 16 R(RX_DROP_U_MIC_FAIL) \ 17 R(RX_DROP_U_REPLAY) \ 18 R(RX_DROP_U_BAD_MMIE) \ 19 R(RX_DROP_U_DUP) \ 20 R(RX_DROP_U_SPURIOUS) \ 21 R(RX_DROP_U_DECRYPT_FAIL) \ 22 R(RX_DROP_U_NO_KEY_ID) \ 23 R(RX_DROP_U_BAD_CIPHER) \ 24 R(RX_DROP_U_OOM) \ 25 R(RX_DROP_U_NONSEQ_PN) \ 26 R(RX_DROP_U_BAD_KEY_COLOR) \ 27 R(RX_DROP_U_BAD_4ADDR) \ 28 R(RX_DROP_U_BAD_AMSDU) \ 29 R(RX_DROP_U_BAD_AMSDU_CIPHER) \ 30 R(RX_DROP_U_INVALID_8023) \ 31 /* 0x10 */ \ 32 R(RX_DROP_U_RUNT_ACTION) \ 33 R(RX_DROP_U_UNPROT_ACTION) \ 34 R(RX_DROP_U_UNPROT_DUAL) \ 35 R(RX_DROP_U_UNPROT_UCAST_MGMT) \ 36 R(RX_DROP_U_UNPROT_MCAST_MGMT) \ 37 R(RX_DROP_U_UNPROT_BEACON) \ 38 R(RX_DROP_U_UNPROT_UNICAST_PUB_ACTION) \ 39 R(RX_DROP_U_UNPROT_ROBUST_ACTION) \ 40 R(RX_DROP_U_ACTION_UNKNOWN_SRC) \ 41 R(RX_DROP_U_REJECTED_ACTION_RESPONSE) \ 42 R(RX_DROP_U_EXPECT_DEFRAG_PROT) \ 43 R(RX_DROP_U_WEP_DEC_FAIL) \ 44 R(RX_DROP_U_NO_IV) \ 45 R(RX_DROP_U_NO_ICV) \ 46 R(RX_DROP_U_AP_RX_GROUPCAST) \ 47 R(RX_DROP_U_SHORT_MMIC) \ 48 /* 0x20 */ \ 49 R(RX_DROP_U_MMIC_FAIL) \ 50 R(RX_DROP_U_SHORT_TKIP) \ 51 R(RX_DROP_U_TKIP_FAIL) \ 52 R(RX_DROP_U_SHORT_CCMP) \ 53 R(RX_DROP_U_SHORT_CCMP_MIC) \ 54 R(RX_DROP_U_SHORT_GCMP) \ 55 R(RX_DROP_U_SHORT_GCMP_MIC) \ 56 R(RX_DROP_U_SHORT_CMAC) \ 57 R(RX_DROP_U_SHORT_CMAC256) \ 58 R(RX_DROP_U_SHORT_GMAC) \ 59 R(RX_DROP_U_UNEXPECTED_VLAN_4ADDR) \ 60 R(RX_DROP_U_UNEXPECTED_STA_4ADDR) \ 61 R(RX_DROP_U_UNEXPECTED_VLAN_MCAST) \ 62 R(RX_DROP_U_NOT_PORT_CONTROL) \ 63 R(RX_DROP_U_UNEXPECTED_4ADDR_FRAME) \ 64 R(RX_DROP_U_BAD_BCN_KEYIDX) \ 65 /* 0x30 */ \ 66 R(RX_DROP_U_BAD_MGMT_KEYIDX) \ 67 R(RX_DROP_U_UNKNOWN_ACTION_REJECTED) \ 68 R(RX_DROP_U_MESH_DS_BITS) \ 69 R(RX_DROP_U_MESH_A3_MISMATCH) \ 70 R(RX_DROP_U_MESH_NO_A4) \ 71 R(RX_DROP_U_MESH_A4_MISMATCH) \ 72 R(RX_DROP_U_MESH_UNEXP_DATA) \ 73 R(RX_DROP_U_MESH_WRONG_ACTION) \ 74 R(RX_DROP_U_MESH_UNEXP_MGMT) \ 75 R(RX_DROP_U_SPURIOUS_NOTIF) \ 76 R(RX_DROP_U_RUNT_DATA) \ 77 R(RX_DROP_U_KEY_TAINTED) \ 78 R(RX_DROP_U_UNPROTECTED) \ 79 R(RX_DROP_U_MCAST_FRAGMENT) \ 80 R(RX_DROP_U_DEFRAG_MISMATCH) \ 81 R(RX_DROP_U_RUNT_MESH_DATA) \ 82 /* 0x40 */ \ 83 R(RX_DROP_U_MESH_NO_TTL) \ 84 R(RX_DROP_U_MESH_RMC) \ 85 R(RX_DROP_U_MESH_BAD_AE) \ 86 R(RX_DROP_U_MESH_TTL_EXPIRED) \ 87 R(RX_DROP_U_MESH_NOT_FORWARDING) \ 88 R(RX_DROP_U_AMSDU_WITHOUT_DATA) \ 89 R(RX_DROP_U_NULL_DATA) \ 90 R(RX_DROP_U_UNEXPECTED_4ADDR) \ 91 R(RX_DROP_U_PORT_CONTROL) \ 92 R(RX_DROP_U_UNKNOWN_STA) \ 93 R(RX_DROP_U_RUNT_BAR) \ 94 R(RX_DROP_U_BAR_OUTSIDE_SESSION) \ 95 R(RX_DROP_U_CTRL_FRAME) \ 96 R(RX_DROP_U_RUNT_MGMT) \ 97 R(RX_DROP_U_EXPECTED_MGMT) \ 98 R(RX_DROP_U_NONBCAST_BEACON) \ 99 /* 0x50 */ \ 100 R(RX_DROP_U_MALFORMED_ACTION) \ 101 R(RX_DROP_U_UNKNOWN_MCAST_ACTION) \ 102 R(RX_DROP_U_UNEXPECTED_EXT_FRAME) \ 103 R(RX_DROP_U_UNHANDLED_MGMT) \ 104 R(RX_DROP_U_MCAST_DEAUTH) \ 105 R(RX_DROP_U_UNHANDLED_DEAUTH) \ 106 R(RX_DROP_U_MCAST_DISASSOC) \ 107 R(RX_DROP_U_UNHANDLED_DISASSOC) \ 108 R(RX_DROP_U_UNHANDLED_PREQ) \ 109 R(RX_DROP_U_UNHANDLED_MGMT_STYPE) \ 110 R(RX_DROP_U_NO_LINK) \ 111 /* this line for the trailing \ - add before this */ 112 113 /* having two enums allows for checking ieee80211_rx_result use with sparse */ 114 enum ___mac80211_drop_reason { 115 /* if we get to the end of handlers with RX_CONTINUE this will be the reason */ 116 ___RX_CONTINUE = SKB_CONSUMED, 117 118 /* this never gets used as an argument to kfree_skb_reason() */ 119 ___RX_QUEUED = SKB_NOT_DROPPED_YET, 120 121 #define ENUM(x) ___ ## x, 122 ___RX_DROP_UNUSABLE = SKB_DROP_REASON_SUBSYS_MAC80211_UNUSABLE << 123 SKB_DROP_REASON_SUBSYS_SHIFT, 124 MAC80211_DROP_REASONS_UNUSABLE(ENUM) 125 #undef ENUM 126 }; 127 128 enum mac80211_drop_reason { 129 RX_CONTINUE = (__force ieee80211_rx_result)___RX_CONTINUE, 130 RX_QUEUED = (__force ieee80211_rx_result)___RX_QUEUED, 131 #define DEF(x) x = (__force ieee80211_rx_result)___ ## x, 132 MAC80211_DROP_REASONS_UNUSABLE(DEF) 133 #undef DEF 134 }; 135 136 #define RX_RES_IS_UNUSABLE(result) \ 137 (((__force u32)(result) & SKB_DROP_REASON_SUBSYS_MASK) == ___RX_DROP_UNUSABLE) 138 139 #endif /* MAC80211_DROP_H */ 140