dropreason-core.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  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(PKT_TOO_SMALL) \
  8. FN(TCP_CSUM) \
  9. FN(SOCKET_FILTER) \
  10. FN(UDP_CSUM) \
  11. FN(NETFILTER_DROP) \
  12. FN(OTHERHOST) \
  13. FN(IP_CSUM) \
  14. FN(IP_INHDR) \
  15. FN(IP_RPFILTER) \
  16. FN(UNICAST_IN_L2_MULTICAST) \
  17. FN(XFRM_POLICY) \
  18. FN(IP_NOPROTO) \
  19. FN(SOCKET_RCVBUFF) \
  20. FN(PROTO_MEM) \
  21. FN(TCP_AUTH_HDR) \
  22. FN(TCP_MD5NOTFOUND) \
  23. FN(TCP_MD5UNEXPECTED) \
  24. FN(TCP_MD5FAILURE) \
  25. FN(TCP_AONOTFOUND) \
  26. FN(TCP_AOUNEXPECTED) \
  27. FN(TCP_AOKEYNOTFOUND) \
  28. FN(TCP_AOFAILURE) \
  29. FN(SOCKET_BACKLOG) \
  30. FN(TCP_FLAGS) \
  31. FN(TCP_ABORT_ON_DATA) \
  32. FN(TCP_ZEROWINDOW) \
  33. FN(TCP_OLD_DATA) \
  34. FN(TCP_OVERWINDOW) \
  35. FN(TCP_OFOMERGE) \
  36. FN(TCP_RFC7323_PAWS) \
  37. FN(TCP_OLD_SEQUENCE) \
  38. FN(TCP_INVALID_SEQUENCE) \
  39. FN(TCP_INVALID_ACK_SEQUENCE) \
  40. FN(TCP_RESET) \
  41. FN(TCP_INVALID_SYN) \
  42. FN(TCP_CLOSE) \
  43. FN(TCP_FASTOPEN) \
  44. FN(TCP_OLD_ACK) \
  45. FN(TCP_TOO_OLD_ACK) \
  46. FN(TCP_ACK_UNSENT_DATA) \
  47. FN(TCP_OFO_QUEUE_PRUNE) \
  48. FN(TCP_OFO_DROP) \
  49. FN(IP_OUTNOROUTES) \
  50. FN(BPF_CGROUP_EGRESS) \
  51. FN(IPV6DISABLED) \
  52. FN(NEIGH_CREATEFAIL) \
  53. FN(NEIGH_FAILED) \
  54. FN(NEIGH_QUEUEFULL) \
  55. FN(NEIGH_DEAD) \
  56. FN(TC_EGRESS) \
  57. FN(SECURITY_HOOK) \
  58. FN(QDISC_DROP) \
  59. FN(CPU_BACKLOG) \
  60. FN(XDP) \
  61. FN(TC_INGRESS) \
  62. FN(UNHANDLED_PROTO) \
  63. FN(SKB_CSUM) \
  64. FN(SKB_GSO_SEG) \
  65. FN(SKB_UCOPY_FAULT) \
  66. FN(DEV_HDR) \
  67. FN(DEV_READY) \
  68. FN(FULL_RING) \
  69. FN(NOMEM) \
  70. FN(HDR_TRUNC) \
  71. FN(TAP_FILTER) \
  72. FN(TAP_TXFILTER) \
  73. FN(ICMP_CSUM) \
  74. FN(INVALID_PROTO) \
  75. FN(IP_INADDRERRORS) \
  76. FN(IP_INNOROUTES) \
  77. FN(PKT_TOO_BIG) \
  78. FN(DUP_FRAG) \
  79. FN(FRAG_REASM_TIMEOUT) \
  80. FN(FRAG_TOO_FAR) \
  81. FN(TCP_MINTTL) \
  82. FN(IPV6_BAD_EXTHDR) \
  83. FN(IPV6_NDISC_FRAG) \
  84. FN(IPV6_NDISC_HOP_LIMIT) \
  85. FN(IPV6_NDISC_BAD_CODE) \
  86. FN(IPV6_NDISC_BAD_OPTIONS) \
  87. FN(IPV6_NDISC_NS_OTHERHOST) \
  88. FN(QUEUE_PURGE) \
  89. FN(TC_COOKIE_ERROR) \
  90. FN(PACKET_SOCK_ERROR) \
  91. FN(TC_CHAIN_NOTFOUND) \
  92. FN(TC_RECLASSIFY_LOOP) \
  93. FN(VXLAN_INVALID_HDR) \
  94. FN(VXLAN_VNI_NOT_FOUND) \
  95. FN(MAC_INVALID_SOURCE) \
  96. FN(VXLAN_ENTRY_EXISTS) \
  97. FN(NO_TX_TARGET) \
  98. FN(IP_TUNNEL_ECN) \
  99. FN(TUNNEL_TXINFO) \
  100. FN(LOCAL_MAC) \
  101. FNe(MAX)
  102. /**
  103. * enum skb_drop_reason - the reasons of skb drops
  104. *
  105. * The reason of skb drop, which is used in kfree_skb_reason().
  106. */
  107. enum skb_drop_reason {
  108. /**
  109. * @SKB_NOT_DROPPED_YET: skb is not dropped yet (used for no-drop case)
  110. */
  111. SKB_NOT_DROPPED_YET = 0,
  112. /** @SKB_CONSUMED: packet has been consumed */
  113. SKB_CONSUMED,
  114. /** @SKB_DROP_REASON_NOT_SPECIFIED: drop reason is not specified */
  115. SKB_DROP_REASON_NOT_SPECIFIED,
  116. /**
  117. * @SKB_DROP_REASON_NO_SOCKET: no valid socket that can be used.
  118. * Reason could be one of three cases:
  119. * 1) no established/listening socket found during lookup process
  120. * 2) no valid request socket during 3WHS process
  121. * 3) no valid child socket during 3WHS process
  122. */
  123. SKB_DROP_REASON_NO_SOCKET,
  124. /** @SKB_DROP_REASON_PKT_TOO_SMALL: packet size is too small */
  125. SKB_DROP_REASON_PKT_TOO_SMALL,
  126. /** @SKB_DROP_REASON_TCP_CSUM: TCP checksum error */
  127. SKB_DROP_REASON_TCP_CSUM,
  128. /** @SKB_DROP_REASON_SOCKET_FILTER: dropped by socket filter */
  129. SKB_DROP_REASON_SOCKET_FILTER,
  130. /** @SKB_DROP_REASON_UDP_CSUM: UDP checksum error */
  131. SKB_DROP_REASON_UDP_CSUM,
  132. /** @SKB_DROP_REASON_NETFILTER_DROP: dropped by netfilter */
  133. SKB_DROP_REASON_NETFILTER_DROP,
  134. /**
  135. * @SKB_DROP_REASON_OTHERHOST: packet don't belong to current host
  136. * (interface is in promisc mode)
  137. */
  138. SKB_DROP_REASON_OTHERHOST,
  139. /** @SKB_DROP_REASON_IP_CSUM: IP checksum error */
  140. SKB_DROP_REASON_IP_CSUM,
  141. /**
  142. * @SKB_DROP_REASON_IP_INHDR: there is something wrong with IP header (see
  143. * IPSTATS_MIB_INHDRERRORS)
  144. */
  145. SKB_DROP_REASON_IP_INHDR,
  146. /**
  147. * @SKB_DROP_REASON_IP_RPFILTER: IP rpfilter validate failed. see the
  148. * document for rp_filter in ip-sysctl.rst for more information
  149. */
  150. SKB_DROP_REASON_IP_RPFILTER,
  151. /**
  152. * @SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST: destination address of L2 is
  153. * multicast, but L3 is unicast.
  154. */
  155. SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST,
  156. /** @SKB_DROP_REASON_XFRM_POLICY: xfrm policy check failed */
  157. SKB_DROP_REASON_XFRM_POLICY,
  158. /** @SKB_DROP_REASON_IP_NOPROTO: no support for IP protocol */
  159. SKB_DROP_REASON_IP_NOPROTO,
  160. /** @SKB_DROP_REASON_SOCKET_RCVBUFF: socket receive buff is full */
  161. SKB_DROP_REASON_SOCKET_RCVBUFF,
  162. /**
  163. * @SKB_DROP_REASON_PROTO_MEM: proto memory limitation, such as
  164. * udp packet drop out of udp_memory_allocated.
  165. */
  166. SKB_DROP_REASON_PROTO_MEM,
  167. /**
  168. * @SKB_DROP_REASON_TCP_AUTH_HDR: TCP-MD5 or TCP-AO hashes are met
  169. * twice or set incorrectly.
  170. */
  171. SKB_DROP_REASON_TCP_AUTH_HDR,
  172. /**
  173. * @SKB_DROP_REASON_TCP_MD5NOTFOUND: no MD5 hash and one expected,
  174. * corresponding to LINUX_MIB_TCPMD5NOTFOUND
  175. */
  176. SKB_DROP_REASON_TCP_MD5NOTFOUND,
  177. /**
  178. * @SKB_DROP_REASON_TCP_MD5UNEXPECTED: MD5 hash and we're not expecting
  179. * one, corresponding to LINUX_MIB_TCPMD5UNEXPECTED
  180. */
  181. SKB_DROP_REASON_TCP_MD5UNEXPECTED,
  182. /**
  183. * @SKB_DROP_REASON_TCP_MD5FAILURE: MD5 hash and its wrong, corresponding
  184. * to LINUX_MIB_TCPMD5FAILURE
  185. */
  186. SKB_DROP_REASON_TCP_MD5FAILURE,
  187. /**
  188. * @SKB_DROP_REASON_TCP_AONOTFOUND: no TCP-AO hash and one was expected,
  189. * corresponding to LINUX_MIB_TCPAOREQUIRED
  190. */
  191. SKB_DROP_REASON_TCP_AONOTFOUND,
  192. /**
  193. * @SKB_DROP_REASON_TCP_AOUNEXPECTED: TCP-AO hash is present and it
  194. * was not expected, corresponding to LINUX_MIB_TCPAOKEYNOTFOUND
  195. */
  196. SKB_DROP_REASON_TCP_AOUNEXPECTED,
  197. /**
  198. * @SKB_DROP_REASON_TCP_AOKEYNOTFOUND: TCP-AO key is unknown,
  199. * corresponding to LINUX_MIB_TCPAOKEYNOTFOUND
  200. */
  201. SKB_DROP_REASON_TCP_AOKEYNOTFOUND,
  202. /**
  203. * @SKB_DROP_REASON_TCP_AOFAILURE: TCP-AO hash is wrong,
  204. * corresponding to LINUX_MIB_TCPAOBAD
  205. */
  206. SKB_DROP_REASON_TCP_AOFAILURE,
  207. /**
  208. * @SKB_DROP_REASON_SOCKET_BACKLOG: failed to add skb to socket backlog (
  209. * see LINUX_MIB_TCPBACKLOGDROP)
  210. */
  211. SKB_DROP_REASON_SOCKET_BACKLOG,
  212. /** @SKB_DROP_REASON_TCP_FLAGS: TCP flags invalid */
  213. SKB_DROP_REASON_TCP_FLAGS,
  214. /**
  215. * @SKB_DROP_REASON_TCP_ABORT_ON_DATA: abort on data, corresponding to
  216. * LINUX_MIB_TCPABORTONDATA
  217. */
  218. SKB_DROP_REASON_TCP_ABORT_ON_DATA,
  219. /**
  220. * @SKB_DROP_REASON_TCP_ZEROWINDOW: TCP receive window size is zero,
  221. * see LINUX_MIB_TCPZEROWINDOWDROP
  222. */
  223. SKB_DROP_REASON_TCP_ZEROWINDOW,
  224. /**
  225. * @SKB_DROP_REASON_TCP_OLD_DATA: the TCP data received is already
  226. * received before (spurious retrans may happened), see
  227. * LINUX_MIB_DELAYEDACKLOST
  228. */
  229. SKB_DROP_REASON_TCP_OLD_DATA,
  230. /**
  231. * @SKB_DROP_REASON_TCP_OVERWINDOW: the TCP data is out of window,
  232. * the seq of the first byte exceed the right edges of receive
  233. * window
  234. */
  235. SKB_DROP_REASON_TCP_OVERWINDOW,
  236. /**
  237. * @SKB_DROP_REASON_TCP_OFOMERGE: the data of skb is already in the ofo
  238. * queue, corresponding to LINUX_MIB_TCPOFOMERGE
  239. */
  240. SKB_DROP_REASON_TCP_OFOMERGE,
  241. /**
  242. * @SKB_DROP_REASON_TCP_RFC7323_PAWS: PAWS check, corresponding to
  243. * LINUX_MIB_PAWSESTABREJECTED, LINUX_MIB_PAWSACTIVEREJECTED
  244. */
  245. SKB_DROP_REASON_TCP_RFC7323_PAWS,
  246. /** @SKB_DROP_REASON_TCP_OLD_SEQUENCE: Old SEQ field (duplicate packet) */
  247. SKB_DROP_REASON_TCP_OLD_SEQUENCE,
  248. /** @SKB_DROP_REASON_TCP_INVALID_SEQUENCE: Not acceptable SEQ field */
  249. SKB_DROP_REASON_TCP_INVALID_SEQUENCE,
  250. /**
  251. * @SKB_DROP_REASON_TCP_INVALID_ACK_SEQUENCE: Not acceptable ACK SEQ
  252. * field because ack sequence is not in the window between snd_una
  253. * and snd_nxt
  254. */
  255. SKB_DROP_REASON_TCP_INVALID_ACK_SEQUENCE,
  256. /** @SKB_DROP_REASON_TCP_RESET: Invalid RST packet */
  257. SKB_DROP_REASON_TCP_RESET,
  258. /**
  259. * @SKB_DROP_REASON_TCP_INVALID_SYN: Incoming packet has unexpected
  260. * SYN flag
  261. */
  262. SKB_DROP_REASON_TCP_INVALID_SYN,
  263. /** @SKB_DROP_REASON_TCP_CLOSE: TCP socket in CLOSE state */
  264. SKB_DROP_REASON_TCP_CLOSE,
  265. /** @SKB_DROP_REASON_TCP_FASTOPEN: dropped by FASTOPEN request socket */
  266. SKB_DROP_REASON_TCP_FASTOPEN,
  267. /** @SKB_DROP_REASON_TCP_OLD_ACK: TCP ACK is old, but in window */
  268. SKB_DROP_REASON_TCP_OLD_ACK,
  269. /** @SKB_DROP_REASON_TCP_TOO_OLD_ACK: TCP ACK is too old */
  270. SKB_DROP_REASON_TCP_TOO_OLD_ACK,
  271. /**
  272. * @SKB_DROP_REASON_TCP_ACK_UNSENT_DATA: TCP ACK for data we haven't
  273. * sent yet
  274. */
  275. SKB_DROP_REASON_TCP_ACK_UNSENT_DATA,
  276. /** @SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE: pruned from TCP OFO queue */
  277. SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE,
  278. /** @SKB_DROP_REASON_TCP_OFO_DROP: data already in receive queue */
  279. SKB_DROP_REASON_TCP_OFO_DROP,
  280. /** @SKB_DROP_REASON_IP_OUTNOROUTES: route lookup failed */
  281. SKB_DROP_REASON_IP_OUTNOROUTES,
  282. /**
  283. * @SKB_DROP_REASON_BPF_CGROUP_EGRESS: dropped by BPF_PROG_TYPE_CGROUP_SKB
  284. * eBPF program
  285. */
  286. SKB_DROP_REASON_BPF_CGROUP_EGRESS,
  287. /** @SKB_DROP_REASON_IPV6DISABLED: IPv6 is disabled on the device */
  288. SKB_DROP_REASON_IPV6DISABLED,
  289. /** @SKB_DROP_REASON_NEIGH_CREATEFAIL: failed to create neigh entry */
  290. SKB_DROP_REASON_NEIGH_CREATEFAIL,
  291. /** @SKB_DROP_REASON_NEIGH_FAILED: neigh entry in failed state */
  292. SKB_DROP_REASON_NEIGH_FAILED,
  293. /** @SKB_DROP_REASON_NEIGH_QUEUEFULL: arp_queue for neigh entry is full */
  294. SKB_DROP_REASON_NEIGH_QUEUEFULL,
  295. /** @SKB_DROP_REASON_NEIGH_DEAD: neigh entry is dead */
  296. SKB_DROP_REASON_NEIGH_DEAD,
  297. /** @SKB_DROP_REASON_TC_EGRESS: dropped in TC egress HOOK */
  298. SKB_DROP_REASON_TC_EGRESS,
  299. /** @SKB_DROP_REASON_SECURITY_HOOK: dropped due to security HOOK */
  300. SKB_DROP_REASON_SECURITY_HOOK,
  301. /**
  302. * @SKB_DROP_REASON_QDISC_DROP: dropped by qdisc when packet outputting (
  303. * failed to enqueue to current qdisc)
  304. */
  305. SKB_DROP_REASON_QDISC_DROP,
  306. /**
  307. * @SKB_DROP_REASON_CPU_BACKLOG: failed to enqueue the skb to the per CPU
  308. * backlog queue. This can be caused by backlog queue full (see
  309. * netdev_max_backlog in net.rst) or RPS flow limit
  310. */
  311. SKB_DROP_REASON_CPU_BACKLOG,
  312. /** @SKB_DROP_REASON_XDP: dropped by XDP in input path */
  313. SKB_DROP_REASON_XDP,
  314. /** @SKB_DROP_REASON_TC_INGRESS: dropped in TC ingress HOOK */
  315. SKB_DROP_REASON_TC_INGRESS,
  316. /** @SKB_DROP_REASON_UNHANDLED_PROTO: protocol not implemented or not supported */
  317. SKB_DROP_REASON_UNHANDLED_PROTO,
  318. /** @SKB_DROP_REASON_SKB_CSUM: sk_buff checksum computation error */
  319. SKB_DROP_REASON_SKB_CSUM,
  320. /** @SKB_DROP_REASON_SKB_GSO_SEG: gso segmentation error */
  321. SKB_DROP_REASON_SKB_GSO_SEG,
  322. /**
  323. * @SKB_DROP_REASON_SKB_UCOPY_FAULT: failed to copy data from user space,
  324. * e.g., via zerocopy_sg_from_iter() or skb_orphan_frags_rx()
  325. */
  326. SKB_DROP_REASON_SKB_UCOPY_FAULT,
  327. /** @SKB_DROP_REASON_DEV_HDR: device driver specific header/metadata is invalid */
  328. SKB_DROP_REASON_DEV_HDR,
  329. /**
  330. * @SKB_DROP_REASON_DEV_READY: the device is not ready to xmit/recv due to
  331. * any of its data structure that is not up/ready/initialized,
  332. * e.g., the IFF_UP is not set, or driver specific tun->tfiles[txq]
  333. * is not initialized
  334. */
  335. SKB_DROP_REASON_DEV_READY,
  336. /** @SKB_DROP_REASON_FULL_RING: ring buffer is full */
  337. SKB_DROP_REASON_FULL_RING,
  338. /** @SKB_DROP_REASON_NOMEM: error due to OOM */
  339. SKB_DROP_REASON_NOMEM,
  340. /**
  341. * @SKB_DROP_REASON_HDR_TRUNC: failed to trunc/extract the header from
  342. * networking data, e.g., failed to pull the protocol header from
  343. * frags via pskb_may_pull()
  344. */
  345. SKB_DROP_REASON_HDR_TRUNC,
  346. /**
  347. * @SKB_DROP_REASON_TAP_FILTER: dropped by (ebpf) filter directly attached
  348. * to tun/tap, e.g., via TUNSETFILTEREBPF
  349. */
  350. SKB_DROP_REASON_TAP_FILTER,
  351. /**
  352. * @SKB_DROP_REASON_TAP_TXFILTER: dropped by tx filter implemented at
  353. * tun/tap, e.g., check_filter()
  354. */
  355. SKB_DROP_REASON_TAP_TXFILTER,
  356. /** @SKB_DROP_REASON_ICMP_CSUM: ICMP checksum error */
  357. SKB_DROP_REASON_ICMP_CSUM,
  358. /**
  359. * @SKB_DROP_REASON_INVALID_PROTO: the packet doesn't follow RFC 2211,
  360. * such as a broadcasts ICMP_TIMESTAMP
  361. */
  362. SKB_DROP_REASON_INVALID_PROTO,
  363. /**
  364. * @SKB_DROP_REASON_IP_INADDRERRORS: host unreachable, corresponding to
  365. * IPSTATS_MIB_INADDRERRORS
  366. */
  367. SKB_DROP_REASON_IP_INADDRERRORS,
  368. /**
  369. * @SKB_DROP_REASON_IP_INNOROUTES: network unreachable, corresponding to
  370. * IPSTATS_MIB_INADDRERRORS
  371. */
  372. SKB_DROP_REASON_IP_INNOROUTES,
  373. /**
  374. * @SKB_DROP_REASON_PKT_TOO_BIG: packet size is too big (maybe exceed the
  375. * MTU)
  376. */
  377. SKB_DROP_REASON_PKT_TOO_BIG,
  378. /** @SKB_DROP_REASON_DUP_FRAG: duplicate fragment */
  379. SKB_DROP_REASON_DUP_FRAG,
  380. /** @SKB_DROP_REASON_FRAG_REASM_TIMEOUT: fragment reassembly timeout */
  381. SKB_DROP_REASON_FRAG_REASM_TIMEOUT,
  382. /**
  383. * @SKB_DROP_REASON_FRAG_TOO_FAR: ipv4 fragment too far.
  384. * (/proc/sys/net/ipv4/ipfrag_max_dist)
  385. */
  386. SKB_DROP_REASON_FRAG_TOO_FAR,
  387. /**
  388. * @SKB_DROP_REASON_TCP_MINTTL: ipv4 ttl or ipv6 hoplimit below
  389. * the threshold (IP_MINTTL or IPV6_MINHOPCOUNT).
  390. */
  391. SKB_DROP_REASON_TCP_MINTTL,
  392. /** @SKB_DROP_REASON_IPV6_BAD_EXTHDR: Bad IPv6 extension header. */
  393. SKB_DROP_REASON_IPV6_BAD_EXTHDR,
  394. /** @SKB_DROP_REASON_IPV6_NDISC_FRAG: invalid frag (suppress_frag_ndisc). */
  395. SKB_DROP_REASON_IPV6_NDISC_FRAG,
  396. /** @SKB_DROP_REASON_IPV6_NDISC_HOP_LIMIT: invalid hop limit. */
  397. SKB_DROP_REASON_IPV6_NDISC_HOP_LIMIT,
  398. /** @SKB_DROP_REASON_IPV6_NDISC_BAD_CODE: invalid NDISC icmp6 code. */
  399. SKB_DROP_REASON_IPV6_NDISC_BAD_CODE,
  400. /** @SKB_DROP_REASON_IPV6_NDISC_BAD_OPTIONS: invalid NDISC options. */
  401. SKB_DROP_REASON_IPV6_NDISC_BAD_OPTIONS,
  402. /**
  403. * @SKB_DROP_REASON_IPV6_NDISC_NS_OTHERHOST: NEIGHBOUR SOLICITATION
  404. * for another host.
  405. */
  406. SKB_DROP_REASON_IPV6_NDISC_NS_OTHERHOST,
  407. /** @SKB_DROP_REASON_QUEUE_PURGE: bulk free. */
  408. SKB_DROP_REASON_QUEUE_PURGE,
  409. /**
  410. * @SKB_DROP_REASON_TC_COOKIE_ERROR: An error occurred whilst
  411. * processing a tc ext cookie.
  412. */
  413. SKB_DROP_REASON_TC_COOKIE_ERROR,
  414. /**
  415. * @SKB_DROP_REASON_PACKET_SOCK_ERROR: generic packet socket errors
  416. * after its filter matches an incoming packet.
  417. */
  418. SKB_DROP_REASON_PACKET_SOCK_ERROR,
  419. /** @SKB_DROP_REASON_TC_CHAIN_NOTFOUND: tc chain lookup failed. */
  420. SKB_DROP_REASON_TC_CHAIN_NOTFOUND,
  421. /**
  422. * @SKB_DROP_REASON_TC_RECLASSIFY_LOOP: tc exceeded max reclassify loop
  423. * iterations.
  424. */
  425. SKB_DROP_REASON_TC_RECLASSIFY_LOOP,
  426. /**
  427. * @SKB_DROP_REASON_VXLAN_INVALID_HDR: VXLAN header is invalid. E.g.:
  428. * 1) reserved fields are not zero
  429. * 2) "I" flag is not set
  430. */
  431. SKB_DROP_REASON_VXLAN_INVALID_HDR,
  432. /** @SKB_DROP_REASON_VXLAN_VNI_NOT_FOUND: no VXLAN device found for VNI */
  433. SKB_DROP_REASON_VXLAN_VNI_NOT_FOUND,
  434. /** @SKB_DROP_REASON_MAC_INVALID_SOURCE: source mac is invalid */
  435. SKB_DROP_REASON_MAC_INVALID_SOURCE,
  436. /**
  437. * @SKB_DROP_REASON_VXLAN_ENTRY_EXISTS: trying to migrate a static
  438. * entry or an entry pointing to a nexthop.
  439. */
  440. SKB_DROP_REASON_VXLAN_ENTRY_EXISTS,
  441. /** @SKB_DROP_REASON_NO_TX_TARGET: no target found for xmit */
  442. SKB_DROP_REASON_NO_TX_TARGET,
  443. /**
  444. * @SKB_DROP_REASON_IP_TUNNEL_ECN: skb is dropped according to
  445. * RFC 6040 4.2, see __INET_ECN_decapsulate() for detail.
  446. */
  447. SKB_DROP_REASON_IP_TUNNEL_ECN,
  448. /**
  449. * @SKB_DROP_REASON_TUNNEL_TXINFO: packet without necessary metadata
  450. * reached a device which is in "external" mode.
  451. */
  452. SKB_DROP_REASON_TUNNEL_TXINFO,
  453. /**
  454. * @SKB_DROP_REASON_LOCAL_MAC: the source MAC address is equal to
  455. * the MAC address of the local netdev.
  456. */
  457. SKB_DROP_REASON_LOCAL_MAC,
  458. /**
  459. * @SKB_DROP_REASON_MAX: the maximum of core drop reasons, which
  460. * shouldn't be used as a real 'reason' - only for tracing code gen
  461. */
  462. SKB_DROP_REASON_MAX,
  463. /**
  464. * @SKB_DROP_REASON_SUBSYS_MASK: subsystem mask in drop reasons,
  465. * see &enum skb_drop_reason_subsys
  466. */
  467. SKB_DROP_REASON_SUBSYS_MASK = 0xffff0000,
  468. };
  469. #define SKB_DROP_REASON_SUBSYS_SHIFT 16
  470. #define SKB_DR_INIT(name, reason) \
  471. enum skb_drop_reason name = SKB_DROP_REASON_##reason
  472. #define SKB_DR(name) \
  473. SKB_DR_INIT(name, NOT_SPECIFIED)
  474. #define SKB_DR_SET(name, reason) \
  475. (name = SKB_DROP_REASON_##reason)
  476. #define SKB_DR_OR(name, reason) \
  477. do { \
  478. if (name == SKB_DROP_REASON_NOT_SPECIFIED || \
  479. name == SKB_NOT_DROPPED_YET) \
  480. SKB_DR_SET(name, reason); \
  481. } while (0)
  482. #endif