net: dropreason: add SKB_DROP_REASON_FRAG_TOO_FAR
authorEric Dumazet <edumazet@google.com>
Sat, 29 Oct 2022 15:45:20 +0000 (15:45 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 1 Nov 2022 03:14:27 +0000 (20:14 -0700)
IPv4 reassembly unit can decide to drop frags based on
/proc/sys/net/ipv4/ipfrag_max_dist sysctl.

Add a specific drop reason to track this specific
and weird case.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/dropreason.h
net/ipv4/ip_fragment.c

index 1d45a74..7053928 100644 (file)
@@ -70,6 +70,7 @@
        FN(PKT_TOO_BIG)                 \
        FN(DUP_FRAG)                    \
        FN(FRAG_REASM_TIMEOUT)          \
+       FN(FRAG_TOO_FAR)                \
        FNe(MAX)
 
 /**
@@ -307,6 +308,11 @@ enum skb_drop_reason {
        /** @SKB_DROP_REASON_FRAG_REASM_TIMEOUT: fragment reassembly timeout */
        SKB_DROP_REASON_FRAG_REASM_TIMEOUT,
        /**
+        * @SKB_DROP_REASON_FRAG_TOO_FAR: ipv4 fragment too far.
+        * (/proc/sys/net/ipv4/ipfrag_max_dist)
+        */
+       SKB_DROP_REASON_FRAG_TOO_FAR,
+       /**
         * @SKB_DROP_REASON_MAX: the maximum of drop reason, which shouldn't be
         * used as a real 'reason'
         */
index 85e8113..69c00ff 100644 (file)
@@ -256,7 +256,7 @@ static int ip_frag_reinit(struct ipq *qp)
        }
 
        sum_truesize = inet_frag_rbtree_purge(&qp->q.rb_fragments,
-                                             SKB_DROP_REASON_NOT_SPECIFIED);
+                                             SKB_DROP_REASON_FRAG_TOO_FAR);
        sub_frag_mem_limit(qp->q.fqdir, sum_truesize);
 
        qp->q.flags = 0;