dropreason-core.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. #ifndef _LINUX_DROPREASON_CORE_H
  3. #define _LINUX_DROPREASON_CORE_H
  4. #define DEFINE_DROP_REASON(FN, FNe) \
  5. FN(NOT_SPECIFIED) \
  6. FN(NO_SOCKET) \
  7. FN(SOCKET_CLOSE) \
  8. FN(SOCKET_FILTER) \
  9. FN(SOCKET_RCVBUFF) \
  10. FN(UNIX_DISCONNECT) \
  11. FN(UNIX_SKIP_OOB) \
  12. FN(PKT_TOO_SMALL) \
  13. FN(TCP_CSUM) \
  14. FN(UDP_CSUM) \
  15. FN(NETFILTER_DROP) \
  16. FN(OTHERHOST) \
  17. FN(IP_CSUM) \
  18. FN(IP_INHDR) \
  19. FN(IP_RPFILTER) \
  20. FN(UNICAST_IN_L2_MULTICAST) \
  21. FN(XFRM_POLICY) \
  22. FN(IP_NOPROTO) \
  23. FN(PROTO_MEM) \
  24. FN(TCP_AUTH_HDR) \
  25. FN(TCP_MD5NOTFOUND) \
  26. FN(TCP_MD5UNEXPECTED) \
  27. FN(TCP_MD5FAILURE) \
  28. FN(TCP_AONOTFOUND) \
  29. FN(TCP_AOUNEXPECTED) \
  30. FN(TCP_AOKEYNOTFOUND) \
  31. FN(TCP_AOFAILURE) \
  32. FN(SOCKET_BACKLOG) \
  33. FN(TCP_FLAGS) \
  34. FN(TCP_ABORT_ON_DATA) \
  35. FN(TCP_ZEROWINDOW) \
  36. FN(TCP_OLD_DATA) \
  37. FN(TCP_OVERWINDOW) \
  38. FN(TCP_OFOMERGE) \
  39. FN(TCP_RFC7323_PAWS) \
  40. FN(TCP_RFC7323_PAWS_ACK) \
  41. FN(TCP_RFC7323_TW_PAWS) \
  42. FN(TCP_RFC7323_TSECR) \
  43. FN(TCP_LISTEN_OVERFLOW) \
  44. FN(TCP_OLD_SEQUENCE) \
  45. FN(TCP_INVALID_SEQUENCE) \
  46. FN(TCP_INVALID_END_SEQUENCE) \
  47. FN(TCP_INVALID_ACK_SEQUENCE) \
  48. FN(TCP_RESET) \
  49. FN(TCP_INVALID_SYN) \
  50. FN(TCP_CLOSE) \
  51. FN(TCP_FASTOPEN) \
  52. FN(TCP_OLD_ACK) \
  53. FN(TCP_TOO_OLD_ACK) \
  54. FN(TCP_ACK_UNSENT_DATA) \
  55. FN(TCP_OFO_QUEUE_PRUNE) \
  56. FN(TCP_OFO_DROP) \
  57. FN(IP_OUTNOROUTES) \
  58. FN(BPF_CGROUP_EGRESS) \
  59. FN(IPV6DISABLED) \
  60. FN(NEIGH_CREATEFAIL) \
  61. FN(NEIGH_FAILED) \
  62. FN(NEIGH_QUEUEFULL) \
  63. FN(NEIGH_DEAD) \
  64. FN(NEIGH_HH_FILLFAIL) \
  65. FN(TC_EGRESS) \
  66. FN(SECURITY_HOOK) \
  67. FN(QDISC_DROP) \
  68. FN(QDISC_BURST_DROP) \
  69. FN(QDISC_OVERLIMIT) \
  70. FN(QDISC_CONGESTED) \
  71. FN(CAKE_FLOOD) \
  72. FN(FQ_BAND_LIMIT) \
  73. FN(FQ_HORIZON_LIMIT) \
  74. FN(FQ_FLOW_LIMIT) \
  75. FN(CPU_BACKLOG) \
  76. FN(XDP) \
  77. FN(TC_INGRESS) \
  78. FN(UNHANDLED_PROTO) \
  79. FN(SKB_CSUM) \
  80. FN(SKB_GSO_SEG) \
  81. FN(SKB_UCOPY_FAULT) \
  82. FN(DEV_HDR) \
  83. FN(DEV_READY) \
  84. FN(FULL_RING) \
  85. FN(NOMEM) \
  86. FN(HDR_TRUNC) \
  87. FN(TAP_FILTER) \
  88. FN(TAP_TXFILTER) \
  89. FN(ICMP_CSUM) \
  90. FN(INVALID_PROTO) \
  91. FN(IP_INADDRERRORS) \
  92. FN(IP_INNOROUTES) \
  93. FN(IP_LOCAL_SOURCE) \
  94. FN(IP_INVALID_SOURCE) \
  95. FN(IP_LOCALNET) \
  96. FN(IP_INVALID_DEST) \
  97. FN(PKT_TOO_BIG) \
  98. FN(DUP_FRAG) \
  99. FN(FRAG_REASM_TIMEOUT) \
  100. FN(FRAG_TOO_FAR) \
  101. FN(TCP_MINTTL) \
  102. FN(IPV6_BAD_EXTHDR) \
  103. FN(IPV6_NDISC_FRAG) \
  104. FN(IPV6_NDISC_HOP_LIMIT) \
  105. FN(IPV6_NDISC_BAD_CODE) \
  106. FN(IPV6_NDISC_BAD_OPTIONS) \
  107. FN(IPV6_NDISC_NS_OTHERHOST) \
  108. FN(QUEUE_PURGE) \
  109. FN(TC_COOKIE_ERROR) \
  110. FN(PACKET_SOCK_ERROR) \
  111. FN(TC_CHAIN_NOTFOUND) \
  112. FN(TC_RECLASSIFY_LOOP) \
  113. FN(VXLAN_INVALID_HDR) \
  114. FN(VXLAN_VNI_NOT_FOUND) \
  115. FN(MAC_INVALID_SOURCE) \
  116. FN(VXLAN_ENTRY_EXISTS) \
  117. FN(NO_TX_TARGET) \
  118. FN(IP_TUNNEL_ECN) \
  119. FN(TUNNEL_TXINFO) \
  120. FN(LOCAL_MAC) \
  121. FN(ARP_PVLAN_DISABLE) \
  122. FN(MAC_IEEE_MAC_CONTROL) \
  123. FN(BRIDGE_INGRESS_STP_STATE) \
  124. FN(CAN_RX_INVALID_FRAME) \
  125. FN(CANFD_RX_INVALID_FRAME) \
  126. FN(CANXL_RX_INVALID_FRAME) \
  127. FN(PFMEMALLOC) \
  128. FN(DUALPI2_STEP_DROP) \
  129. FN(PSP_INPUT) \
  130. FN(PSP_OUTPUT) \
  131. FNe(MAX)
  132. /**
  133. * enum skb_drop_reason - the reasons of skb drops
  134. *
  135. * The reason of skb drop, which is used in kfree_skb_reason().
  136. */
  137. enum skb_drop_reason {
  138. /**
  139. * @SKB_NOT_DROPPED_YET: skb is not dropped yet (used for no-drop case)
  140. */
  141. SKB_NOT_DROPPED_YET = 0,
  142. /** @SKB_CONSUMED: packet has been consumed */
  143. SKB_CONSUMED,
  144. /** @SKB_DROP_REASON_NOT_SPECIFIED: drop reason is not specified */
  145. SKB_DROP_REASON_NOT_SPECIFIED,
  146. /**
  147. * @SKB_DROP_REASON_NO_SOCKET: no valid socket that can be used.
  148. * Reason could be one of three cases:
  149. * 1) no established/listening socket found during lookup process
  150. * 2) no valid request socket during 3WHS process
  151. * 3) no valid child socket during 3WHS process
  152. */
  153. SKB_DROP_REASON_NO_SOCKET,
  154. /** @SKB_DROP_REASON_SOCKET_CLOSE: socket is close()d */
  155. SKB_DROP_REASON_SOCKET_CLOSE,
  156. /** @SKB_DROP_REASON_SOCKET_FILTER: dropped by socket filter */
  157. SKB_DROP_REASON_SOCKET_FILTER,
  158. /** @SKB_DROP_REASON_SOCKET_RCVBUFF: socket receive buff is full */
  159. SKB_DROP_REASON_SOCKET_RCVBUFF,
  160. /**
  161. * @SKB_DROP_REASON_UNIX_DISCONNECT: recv queue is purged when SOCK_DGRAM
  162. * or SOCK_SEQPACKET socket re-connect()s to another socket or notices
  163. * during send() that the peer has been close()d.
  164. */
  165. SKB_DROP_REASON_UNIX_DISCONNECT,
  166. /**
  167. * @SKB_DROP_REASON_UNIX_SKIP_OOB: Out-Of-Band data is skipped by
  168. * recv() without MSG_OOB so dropped.
  169. */
  170. SKB_DROP_REASON_UNIX_SKIP_OOB,
  171. /** @SKB_DROP_REASON_PKT_TOO_SMALL: packet size is too small */
  172. SKB_DROP_REASON_PKT_TOO_SMALL,
  173. /** @SKB_DROP_REASON_TCP_CSUM: TCP checksum error */
  174. SKB_DROP_REASON_TCP_CSUM,
  175. /** @SKB_DROP_REASON_UDP_CSUM: UDP checksum error */
  176. SKB_DROP_REASON_UDP_CSUM,
  177. /** @SKB_DROP_REASON_NETFILTER_DROP: dropped by netfilter */
  178. SKB_DROP_REASON_NETFILTER_DROP,
  179. /**
  180. * @SKB_DROP_REASON_OTHERHOST: packet don't belong to current host
  181. * (interface is in promisc mode)
  182. */
  183. SKB_DROP_REASON_OTHERHOST,
  184. /** @SKB_DROP_REASON_IP_CSUM: IP checksum error */
  185. SKB_DROP_REASON_IP_CSUM,
  186. /**
  187. * @SKB_DROP_REASON_IP_INHDR: there is something wrong with IP header (see
  188. * IPSTATS_MIB_INHDRERRORS)
  189. */
  190. SKB_DROP_REASON_IP_INHDR,
  191. /**
  192. * @SKB_DROP_REASON_IP_RPFILTER: IP rpfilter validate failed. see the
  193. * document for rp_filter in ip-sysctl.rst for more information
  194. */
  195. SKB_DROP_REASON_IP_RPFILTER,
  196. /**
  197. * @SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST: destination address of L2 is
  198. * multicast, but L3 is unicast.
  199. */
  200. SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST,
  201. /** @SKB_DROP_REASON_XFRM_POLICY: xfrm policy check failed */
  202. SKB_DROP_REASON_XFRM_POLICY,
  203. /** @SKB_DROP_REASON_IP_NOPROTO: no support for IP protocol */
  204. SKB_DROP_REASON_IP_NOPROTO,
  205. /**
  206. * @SKB_DROP_REASON_PROTO_MEM: proto memory limitation, such as
  207. * udp packet drop out of udp_memory_allocated.
  208. */
  209. SKB_DROP_REASON_PROTO_MEM,
  210. /**
  211. * @SKB_DROP_REASON_TCP_AUTH_HDR: TCP-MD5 or TCP-AO hashes are met
  212. * twice or set incorrectly.
  213. */
  214. SKB_DROP_REASON_TCP_AUTH_HDR,
  215. /**
  216. * @SKB_DROP_REASON_TCP_MD5NOTFOUND: no MD5 hash and one expected,
  217. * corresponding to LINUX_MIB_TCPMD5NOTFOUND
  218. */
  219. SKB_DROP_REASON_TCP_MD5NOTFOUND,
  220. /**
  221. * @SKB_DROP_REASON_TCP_MD5UNEXPECTED: MD5 hash and we're not expecting
  222. * one, corresponding to LINUX_MIB_TCPMD5UNEXPECTED
  223. */
  224. SKB_DROP_REASON_TCP_MD5UNEXPECTED,
  225. /**
  226. * @SKB_DROP_REASON_TCP_MD5FAILURE: MD5 hash and its wrong, corresponding
  227. * to LINUX_MIB_TCPMD5FAILURE
  228. */
  229. SKB_DROP_REASON_TCP_MD5FAILURE,
  230. /**
  231. * @SKB_DROP_REASON_TCP_AONOTFOUND: no TCP-AO hash and one was expected,
  232. * corresponding to LINUX_MIB_TCPAOREQUIRED
  233. */
  234. SKB_DROP_REASON_TCP_AONOTFOUND,
  235. /**
  236. * @SKB_DROP_REASON_TCP_AOUNEXPECTED: TCP-AO hash is present and it
  237. * was not expected, corresponding to LINUX_MIB_TCPAOKEYNOTFOUND
  238. */
  239. SKB_DROP_REASON_TCP_AOUNEXPECTED,
  240. /**
  241. * @SKB_DROP_REASON_TCP_AOKEYNOTFOUND: TCP-AO key is unknown,
  242. * corresponding to LINUX_MIB_TCPAOKEYNOTFOUND
  243. */
  244. SKB_DROP_REASON_TCP_AOKEYNOTFOUND,
  245. /**
  246. * @SKB_DROP_REASON_TCP_AOFAILURE: TCP-AO hash is wrong,
  247. * corresponding to LINUX_MIB_TCPAOBAD
  248. */
  249. SKB_DROP_REASON_TCP_AOFAILURE,
  250. /**
  251. * @SKB_DROP_REASON_SOCKET_BACKLOG: failed to add skb to socket backlog (
  252. * see LINUX_MIB_TCPBACKLOGDROP)
  253. */
  254. SKB_DROP_REASON_SOCKET_BACKLOG,
  255. /** @SKB_DROP_REASON_TCP_FLAGS: TCP flags invalid */
  256. SKB_DROP_REASON_TCP_FLAGS,
  257. /**
  258. * @SKB_DROP_REASON_TCP_ABORT_ON_DATA: abort on data, corresponding to
  259. * LINUX_MIB_TCPABORTONDATA
  260. */
  261. SKB_DROP_REASON_TCP_ABORT_ON_DATA,
  262. /**
  263. * @SKB_DROP_REASON_TCP_ZEROWINDOW: TCP receive window size is zero,
  264. * see LINUX_MIB_TCPZEROWINDOWDROP
  265. */
  266. SKB_DROP_REASON_TCP_ZEROWINDOW,
  267. /**
  268. * @SKB_DROP_REASON_TCP_OLD_DATA: the TCP data received is already
  269. * received before (spurious retrans may happened), see
  270. * LINUX_MIB_DELAYEDACKLOST
  271. */
  272. SKB_DROP_REASON_TCP_OLD_DATA,
  273. /**
  274. * @SKB_DROP_REASON_TCP_OVERWINDOW: the TCP data is out of window,
  275. * the seq of the first byte exceed the right edges of receive
  276. * window
  277. */
  278. SKB_DROP_REASON_TCP_OVERWINDOW,
  279. /**
  280. * @SKB_DROP_REASON_TCP_OFOMERGE: the data of skb is already in the ofo
  281. * queue, corresponding to LINUX_MIB_TCPOFOMERGE
  282. */
  283. SKB_DROP_REASON_TCP_OFOMERGE,
  284. /**
  285. * @SKB_DROP_REASON_TCP_RFC7323_PAWS: PAWS check, corresponding to
  286. * LINUX_MIB_PAWSESTABREJECTED, LINUX_MIB_PAWSACTIVEREJECTED
  287. */
  288. SKB_DROP_REASON_TCP_RFC7323_PAWS,
  289. /**
  290. * @SKB_DROP_REASON_TCP_RFC7323_PAWS_ACK: PAWS check, old ACK packet.
  291. * Corresponds to LINUX_MIB_PAWS_OLD_ACK.
  292. */
  293. SKB_DROP_REASON_TCP_RFC7323_PAWS_ACK,
  294. /**
  295. * @SKB_DROP_REASON_TCP_RFC7323_TW_PAWS: PAWS check, socket is in
  296. * TIME_WAIT state.
  297. * Corresponds to LINUX_MIB_PAWS_TW_REJECTED.
  298. */
  299. SKB_DROP_REASON_TCP_RFC7323_TW_PAWS,
  300. /**
  301. * @SKB_DROP_REASON_TCP_RFC7323_TSECR: PAWS check, invalid TSEcr.
  302. * Corresponds to LINUX_MIB_TSECRREJECTED.
  303. */
  304. SKB_DROP_REASON_TCP_RFC7323_TSECR,
  305. /** @SKB_DROP_REASON_TCP_LISTEN_OVERFLOW: listener queue full. */
  306. SKB_DROP_REASON_TCP_LISTEN_OVERFLOW,
  307. /** @SKB_DROP_REASON_TCP_OLD_SEQUENCE: Old SEQ field (duplicate packet) */
  308. SKB_DROP_REASON_TCP_OLD_SEQUENCE,
  309. /** @SKB_DROP_REASON_TCP_INVALID_SEQUENCE: Not acceptable SEQ field. */
  310. SKB_DROP_REASON_TCP_INVALID_SEQUENCE,
  311. /**
  312. * @SKB_DROP_REASON_TCP_INVALID_END_SEQUENCE:
  313. * Not acceptable END_SEQ field.
  314. * Corresponds to LINUX_MIB_BEYOND_WINDOW.
  315. */
  316. SKB_DROP_REASON_TCP_INVALID_END_SEQUENCE,
  317. /**
  318. * @SKB_DROP_REASON_TCP_INVALID_ACK_SEQUENCE: Not acceptable ACK SEQ
  319. * field because ack sequence is not in the window between snd_una
  320. * and snd_nxt
  321. */
  322. SKB_DROP_REASON_TCP_INVALID_ACK_SEQUENCE,
  323. /** @SKB_DROP_REASON_TCP_RESET: Invalid RST packet */
  324. SKB_DROP_REASON_TCP_RESET,
  325. /**
  326. * @SKB_DROP_REASON_TCP_INVALID_SYN: Incoming packet has unexpected
  327. * SYN flag
  328. */
  329. SKB_DROP_REASON_TCP_INVALID_SYN,
  330. /** @SKB_DROP_REASON_TCP_CLOSE: TCP socket in CLOSE state */
  331. SKB_DROP_REASON_TCP_CLOSE,
  332. /** @SKB_DROP_REASON_TCP_FASTOPEN: dropped by FASTOPEN request socket */
  333. SKB_DROP_REASON_TCP_FASTOPEN,
  334. /** @SKB_DROP_REASON_TCP_OLD_ACK: TCP ACK is old, but in window */
  335. SKB_DROP_REASON_TCP_OLD_ACK,
  336. /** @SKB_DROP_REASON_TCP_TOO_OLD_ACK: TCP ACK is too old */
  337. SKB_DROP_REASON_TCP_TOO_OLD_ACK,
  338. /**
  339. * @SKB_DROP_REASON_TCP_ACK_UNSENT_DATA: TCP ACK for data we haven't
  340. * sent yet
  341. */
  342. SKB_DROP_REASON_TCP_ACK_UNSENT_DATA,
  343. /** @SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE: pruned from TCP OFO queue */
  344. SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE,
  345. /** @SKB_DROP_REASON_TCP_OFO_DROP: data already in receive queue */
  346. SKB_DROP_REASON_TCP_OFO_DROP,
  347. /** @SKB_DROP_REASON_IP_OUTNOROUTES: route lookup failed */
  348. SKB_DROP_REASON_IP_OUTNOROUTES,
  349. /**
  350. * @SKB_DROP_REASON_BPF_CGROUP_EGRESS: dropped by BPF_PROG_TYPE_CGROUP_SKB
  351. * eBPF program
  352. */
  353. SKB_DROP_REASON_BPF_CGROUP_EGRESS,
  354. /** @SKB_DROP_REASON_IPV6DISABLED: IPv6 is disabled on the device */
  355. SKB_DROP_REASON_IPV6DISABLED,
  356. /** @SKB_DROP_REASON_NEIGH_CREATEFAIL: failed to create neigh entry */
  357. SKB_DROP_REASON_NEIGH_CREATEFAIL,
  358. /** @SKB_DROP_REASON_NEIGH_FAILED: neigh entry in failed state */
  359. SKB_DROP_REASON_NEIGH_FAILED,
  360. /** @SKB_DROP_REASON_NEIGH_QUEUEFULL: arp_queue for neigh entry is full */
  361. SKB_DROP_REASON_NEIGH_QUEUEFULL,
  362. /** @SKB_DROP_REASON_NEIGH_DEAD: neigh entry is dead */
  363. SKB_DROP_REASON_NEIGH_DEAD,
  364. /** @SKB_DROP_REASON_NEIGH_HH_FILLFAIL: failed to fill the device hard header */
  365. SKB_DROP_REASON_NEIGH_HH_FILLFAIL,
  366. /** @SKB_DROP_REASON_TC_EGRESS: dropped in TC egress HOOK */
  367. SKB_DROP_REASON_TC_EGRESS,
  368. /** @SKB_DROP_REASON_SECURITY_HOOK: dropped due to security HOOK */
  369. SKB_DROP_REASON_SECURITY_HOOK,
  370. /**
  371. * @SKB_DROP_REASON_QDISC_DROP: dropped by qdisc when packet outputting (
  372. * failed to enqueue to current qdisc)
  373. */
  374. SKB_DROP_REASON_QDISC_DROP,
  375. /**
  376. * @SKB_DROP_REASON_QDISC_BURST_DROP: dropped when net.core.qdisc_max_burst
  377. * limit is hit.
  378. */
  379. SKB_DROP_REASON_QDISC_BURST_DROP,
  380. /**
  381. * @SKB_DROP_REASON_QDISC_OVERLIMIT: dropped by qdisc when a qdisc
  382. * instance exceeds its total buffer size limit.
  383. */
  384. SKB_DROP_REASON_QDISC_OVERLIMIT,
  385. /**
  386. * @SKB_DROP_REASON_QDISC_CONGESTED: dropped by a qdisc AQM algorithm
  387. * due to congestion.
  388. */
  389. SKB_DROP_REASON_QDISC_CONGESTED,
  390. /**
  391. * @SKB_DROP_REASON_CAKE_FLOOD: dropped by the flood protection part of
  392. * CAKE qdisc AQM algorithm (BLUE).
  393. */
  394. SKB_DROP_REASON_CAKE_FLOOD,
  395. /**
  396. * @SKB_DROP_REASON_FQ_BAND_LIMIT: dropped by fq qdisc when per band
  397. * limit is reached.
  398. */
  399. SKB_DROP_REASON_FQ_BAND_LIMIT,
  400. /**
  401. * @SKB_DROP_REASON_FQ_HORIZON_LIMIT: dropped by fq qdisc when packet
  402. * timestamp is too far in the future.
  403. */
  404. SKB_DROP_REASON_FQ_HORIZON_LIMIT,
  405. /**
  406. * @SKB_DROP_REASON_FQ_FLOW_LIMIT: dropped by fq qdisc when a flow
  407. * exceeds its limits.
  408. */
  409. SKB_DROP_REASON_FQ_FLOW_LIMIT,
  410. /**
  411. * @SKB_DROP_REASON_CPU_BACKLOG: failed to enqueue the skb to the per CPU
  412. * backlog queue. This can be caused by backlog queue full (see
  413. * netdev_max_backlog in net.rst) or RPS flow limit
  414. */
  415. SKB_DROP_REASON_CPU_BACKLOG,
  416. /** @SKB_DROP_REASON_XDP: dropped by XDP in input path */
  417. SKB_DROP_REASON_XDP,
  418. /** @SKB_DROP_REASON_TC_INGRESS: dropped in TC ingress HOOK */
  419. SKB_DROP_REASON_TC_INGRESS,
  420. /** @SKB_DROP_REASON_UNHANDLED_PROTO: protocol not implemented or not supported */
  421. SKB_DROP_REASON_UNHANDLED_PROTO,
  422. /** @SKB_DROP_REASON_SKB_CSUM: sk_buff checksum computation error */
  423. SKB_DROP_REASON_SKB_CSUM,
  424. /** @SKB_DROP_REASON_SKB_GSO_SEG: gso segmentation error */
  425. SKB_DROP_REASON_SKB_GSO_SEG,
  426. /**
  427. * @SKB_DROP_REASON_SKB_UCOPY_FAULT: failed to copy data from user space,
  428. * e.g., via zerocopy_sg_from_iter() or skb_orphan_frags_rx()
  429. */
  430. SKB_DROP_REASON_SKB_UCOPY_FAULT,
  431. /** @SKB_DROP_REASON_DEV_HDR: device driver specific header/metadata is invalid */
  432. SKB_DROP_REASON_DEV_HDR,
  433. /**
  434. * @SKB_DROP_REASON_DEV_READY: the device is not ready to xmit/recv due to
  435. * any of its data structure that is not up/ready/initialized,
  436. * e.g., the IFF_UP is not set, or driver specific tun->tfiles[txq]
  437. * is not initialized
  438. */
  439. SKB_DROP_REASON_DEV_READY,
  440. /** @SKB_DROP_REASON_FULL_RING: ring buffer is full */
  441. SKB_DROP_REASON_FULL_RING,
  442. /** @SKB_DROP_REASON_NOMEM: error due to OOM */
  443. SKB_DROP_REASON_NOMEM,
  444. /**
  445. * @SKB_DROP_REASON_HDR_TRUNC: failed to trunc/extract the header from
  446. * networking data, e.g., failed to pull the protocol header from
  447. * frags via pskb_may_pull()
  448. */
  449. SKB_DROP_REASON_HDR_TRUNC,
  450. /**
  451. * @SKB_DROP_REASON_TAP_FILTER: dropped by (ebpf) filter directly attached
  452. * to tun/tap, e.g., via TUNSETFILTEREBPF
  453. */
  454. SKB_DROP_REASON_TAP_FILTER,
  455. /**
  456. * @SKB_DROP_REASON_TAP_TXFILTER: dropped by tx filter implemented at
  457. * tun/tap, e.g., check_filter()
  458. */
  459. SKB_DROP_REASON_TAP_TXFILTER,
  460. /** @SKB_DROP_REASON_ICMP_CSUM: ICMP checksum error */
  461. SKB_DROP_REASON_ICMP_CSUM,
  462. /**
  463. * @SKB_DROP_REASON_INVALID_PROTO: the packet doesn't follow RFC 2211,
  464. * such as a broadcasts ICMP_TIMESTAMP
  465. */
  466. SKB_DROP_REASON_INVALID_PROTO,
  467. /**
  468. * @SKB_DROP_REASON_IP_INADDRERRORS: host unreachable, corresponding to
  469. * IPSTATS_MIB_INADDRERRORS
  470. */
  471. SKB_DROP_REASON_IP_INADDRERRORS,
  472. /**
  473. * @SKB_DROP_REASON_IP_INNOROUTES: network unreachable, corresponding to
  474. * IPSTATS_MIB_INADDRERRORS
  475. */
  476. SKB_DROP_REASON_IP_INNOROUTES,
  477. /** @SKB_DROP_REASON_IP_LOCAL_SOURCE: the source ip is local */
  478. SKB_DROP_REASON_IP_LOCAL_SOURCE,
  479. /**
  480. * @SKB_DROP_REASON_IP_INVALID_SOURCE: the source ip is invalid:
  481. * 1) source ip is multicast or limited broadcast
  482. * 2) source ip is zero and not IGMP
  483. */
  484. SKB_DROP_REASON_IP_INVALID_SOURCE,
  485. /** @SKB_DROP_REASON_IP_LOCALNET: source or dest ip is local net */
  486. SKB_DROP_REASON_IP_LOCALNET,
  487. /**
  488. * @SKB_DROP_REASON_IP_INVALID_DEST: the dest ip is invalid:
  489. * 1) dest ip is 0
  490. */
  491. SKB_DROP_REASON_IP_INVALID_DEST,
  492. /**
  493. * @SKB_DROP_REASON_PKT_TOO_BIG: packet size is too big (maybe exceed the
  494. * MTU)
  495. */
  496. SKB_DROP_REASON_PKT_TOO_BIG,
  497. /** @SKB_DROP_REASON_DUP_FRAG: duplicate fragment */
  498. SKB_DROP_REASON_DUP_FRAG,
  499. /** @SKB_DROP_REASON_FRAG_REASM_TIMEOUT: fragment reassembly timeout */
  500. SKB_DROP_REASON_FRAG_REASM_TIMEOUT,
  501. /**
  502. * @SKB_DROP_REASON_FRAG_TOO_FAR: ipv4 fragment too far.
  503. * (/proc/sys/net/ipv4/ipfrag_max_dist)
  504. */
  505. SKB_DROP_REASON_FRAG_TOO_FAR,
  506. /**
  507. * @SKB_DROP_REASON_TCP_MINTTL: ipv4 ttl or ipv6 hoplimit below
  508. * the threshold (IP_MINTTL or IPV6_MINHOPCOUNT).
  509. */
  510. SKB_DROP_REASON_TCP_MINTTL,
  511. /** @SKB_DROP_REASON_IPV6_BAD_EXTHDR: Bad IPv6 extension header. */
  512. SKB_DROP_REASON_IPV6_BAD_EXTHDR,
  513. /** @SKB_DROP_REASON_IPV6_NDISC_FRAG: invalid frag (suppress_frag_ndisc). */
  514. SKB_DROP_REASON_IPV6_NDISC_FRAG,
  515. /** @SKB_DROP_REASON_IPV6_NDISC_HOP_LIMIT: invalid hop limit. */
  516. SKB_DROP_REASON_IPV6_NDISC_HOP_LIMIT,
  517. /** @SKB_DROP_REASON_IPV6_NDISC_BAD_CODE: invalid NDISC icmp6 code. */
  518. SKB_DROP_REASON_IPV6_NDISC_BAD_CODE,
  519. /** @SKB_DROP_REASON_IPV6_NDISC_BAD_OPTIONS: invalid NDISC options. */
  520. SKB_DROP_REASON_IPV6_NDISC_BAD_OPTIONS,
  521. /**
  522. * @SKB_DROP_REASON_IPV6_NDISC_NS_OTHERHOST: NEIGHBOUR SOLICITATION
  523. * for another host.
  524. */
  525. SKB_DROP_REASON_IPV6_NDISC_NS_OTHERHOST,
  526. /** @SKB_DROP_REASON_QUEUE_PURGE: bulk free. */
  527. SKB_DROP_REASON_QUEUE_PURGE,
  528. /**
  529. * @SKB_DROP_REASON_TC_COOKIE_ERROR: An error occurred whilst
  530. * processing a tc ext cookie.
  531. */
  532. SKB_DROP_REASON_TC_COOKIE_ERROR,
  533. /**
  534. * @SKB_DROP_REASON_PACKET_SOCK_ERROR: generic packet socket errors
  535. * after its filter matches an incoming packet.
  536. */
  537. SKB_DROP_REASON_PACKET_SOCK_ERROR,
  538. /** @SKB_DROP_REASON_TC_CHAIN_NOTFOUND: tc chain lookup failed. */
  539. SKB_DROP_REASON_TC_CHAIN_NOTFOUND,
  540. /**
  541. * @SKB_DROP_REASON_TC_RECLASSIFY_LOOP: tc exceeded max reclassify loop
  542. * iterations.
  543. */
  544. SKB_DROP_REASON_TC_RECLASSIFY_LOOP,
  545. /**
  546. * @SKB_DROP_REASON_VXLAN_INVALID_HDR: VXLAN header is invalid. E.g.:
  547. * 1) reserved fields are not zero
  548. * 2) "I" flag is not set
  549. */
  550. SKB_DROP_REASON_VXLAN_INVALID_HDR,
  551. /** @SKB_DROP_REASON_VXLAN_VNI_NOT_FOUND: no VXLAN device found for VNI */
  552. SKB_DROP_REASON_VXLAN_VNI_NOT_FOUND,
  553. /** @SKB_DROP_REASON_MAC_INVALID_SOURCE: source mac is invalid */
  554. SKB_DROP_REASON_MAC_INVALID_SOURCE,
  555. /**
  556. * @SKB_DROP_REASON_VXLAN_ENTRY_EXISTS: trying to migrate a static
  557. * entry or an entry pointing to a nexthop.
  558. */
  559. SKB_DROP_REASON_VXLAN_ENTRY_EXISTS,
  560. /** @SKB_DROP_REASON_NO_TX_TARGET: no target found for xmit */
  561. SKB_DROP_REASON_NO_TX_TARGET,
  562. /**
  563. * @SKB_DROP_REASON_IP_TUNNEL_ECN: skb is dropped according to
  564. * RFC 6040 4.2, see __INET_ECN_decapsulate() for detail.
  565. */
  566. SKB_DROP_REASON_IP_TUNNEL_ECN,
  567. /**
  568. * @SKB_DROP_REASON_TUNNEL_TXINFO: packet without necessary metadata
  569. * reached a device which is in "external" mode.
  570. */
  571. SKB_DROP_REASON_TUNNEL_TXINFO,
  572. /**
  573. * @SKB_DROP_REASON_LOCAL_MAC: the source MAC address is equal to
  574. * the MAC address of the local netdev.
  575. */
  576. SKB_DROP_REASON_LOCAL_MAC,
  577. /**
  578. * @SKB_DROP_REASON_ARP_PVLAN_DISABLE: packet which is not IP is
  579. * forwarded to the in_dev, and the proxy_arp_pvlan is not
  580. * enabled.
  581. */
  582. SKB_DROP_REASON_ARP_PVLAN_DISABLE,
  583. /**
  584. * @SKB_DROP_REASON_MAC_IEEE_MAC_CONTROL: the destination MAC address
  585. * is an IEEE MAC Control address.
  586. */
  587. SKB_DROP_REASON_MAC_IEEE_MAC_CONTROL,
  588. /**
  589. * @SKB_DROP_REASON_BRIDGE_INGRESS_STP_STATE: the STP state of the
  590. * ingress bridge port does not allow frames to be forwarded.
  591. */
  592. SKB_DROP_REASON_BRIDGE_INGRESS_STP_STATE,
  593. /**
  594. * @SKB_DROP_REASON_CAN_RX_INVALID_FRAME: received
  595. * non conform CAN frame (or device is unable to receive CAN frames)
  596. */
  597. SKB_DROP_REASON_CAN_RX_INVALID_FRAME,
  598. /**
  599. * @SKB_DROP_REASON_CANFD_RX_INVALID_FRAME: received
  600. * non conform CAN-FD frame (or device is unable to receive CAN frames)
  601. */
  602. SKB_DROP_REASON_CANFD_RX_INVALID_FRAME,
  603. /**
  604. * @SKB_DROP_REASON_CANXL_RX_INVALID_FRAME: received
  605. * non conform CAN-XL frame (or device is unable to receive CAN frames)
  606. */
  607. SKB_DROP_REASON_CANXL_RX_INVALID_FRAME,
  608. /**
  609. * @SKB_DROP_REASON_PFMEMALLOC: packet allocated from memory reserve
  610. * reached a path or socket not eligible for use of memory reserves
  611. */
  612. SKB_DROP_REASON_PFMEMALLOC,
  613. /**
  614. * @SKB_DROP_REASON_DUALPI2_STEP_DROP: dropped by the step drop
  615. * threshold of DualPI2 qdisc.
  616. */
  617. SKB_DROP_REASON_DUALPI2_STEP_DROP,
  618. /** @SKB_DROP_REASON_PSP_INPUT: PSP input checks failed */
  619. SKB_DROP_REASON_PSP_INPUT,
  620. /** @SKB_DROP_REASON_PSP_OUTPUT: PSP output checks failed */
  621. SKB_DROP_REASON_PSP_OUTPUT,
  622. /**
  623. * @SKB_DROP_REASON_MAX: the maximum of core drop reasons, which
  624. * shouldn't be used as a real 'reason' - only for tracing code gen
  625. */
  626. SKB_DROP_REASON_MAX,
  627. /**
  628. * @SKB_DROP_REASON_SUBSYS_MASK: subsystem mask in drop reasons,
  629. * see &enum skb_drop_reason_subsys
  630. */
  631. SKB_DROP_REASON_SUBSYS_MASK = 0xffff0000,
  632. };
  633. #define SKB_DROP_REASON_SUBSYS_SHIFT 16
  634. #define SKB_DR_INIT(name, reason) \
  635. enum skb_drop_reason name = SKB_DROP_REASON_##reason
  636. #define SKB_DR(name) \
  637. SKB_DR_INIT(name, NOT_SPECIFIED)
  638. #define SKB_DR_SET(name, reason) \
  639. (name = SKB_DROP_REASON_##reason)
  640. #define SKB_DR_OR(name, reason) \
  641. do { \
  642. if (name == SKB_DROP_REASON_NOT_SPECIFIED || \
  643. name == SKB_NOT_DROPPED_YET) \
  644. SKB_DR_SET(name, reason); \
  645. } while (0)
  646. #endif