The commit is pushed to "branch-rh9-5.14.0-162.6.1.vz9.18.x-ovz" and will 
appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh9-5.14.0-162.6.1.vz9.18.2
------>
commit 3477975ffac978549192fcbe8c32121fc9ca8989
Author: Menglong Dong <imaged...@tencent.com>
Date:   Tue Jan 3 17:39:31 2023 +0200

    net: ipv4: add skb drop reasons to ip_error()
    
    Eventually, I find out the handler function for inputting route lookup
    fail: ip_error().
    
    The drop reasons we used in ip_error() are almost corresponding to
    IPSTATS_MIB_*, and following new reasons are introduced:
    
    SKB_DROP_REASON_IP_INADDRERRORS
    SKB_DROP_REASON_IP_INNOROUTES
    
    Isn't the name SKB_DROP_REASON_IP_HOSTUNREACH and
    SKB_DROP_REASON_IP_NETUNREACH more accurate? To make them corresponding
    to IPSTATS_MIB_*, we keep their name still.
    
    Signed-off-by: Menglong Dong <imaged...@tencent.com>
    Reviewed-by: Jiang Biao <benbji...@tencent.com>
    Reviewed-by: Hao Peng <flyingp...@tencent.com>
    Signed-off-by: David S. Miller <da...@davemloft.net>
    Acked-by: Nikolay Borisov <nbori...@suse.com>
    Signed-off-by: Nikolay Borisov <nikolay.bori...@virtuozzo.com>
    
    ======
    Patchset description:
    ms/net: Annotate skb free sites with reason
    
    This series backports most of the patches that add a reason to skb free 
sites.
    
    https://jira.sw.ru/browse/PSBM-143302
    
    Feature: net: improve verbosity of dropped packets reporting
---
 include/linux/skbuff.h     | 7 +++++++
 include/trace/events/skb.h | 2 ++
 net/ipv4/route.c           | 6 +++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 47047dc588aa..cd9977a9fddd 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -445,6 +445,13 @@ enum skb_drop_reason {
                                         * 2211, such as a broadcasts
                                         * ICMP_TIMESTAMP
                                         */
+       SKB_DROP_REASON_IP_INADDRERRORS,        /* host unreachable, 
corresponding
+                                                * to IPSTATS_MIB_INADDRERRORS
+                                                */
+       SKB_DROP_REASON_IP_INNOROUTES,  /* network unreachable, corresponding
+                                        * to IPSTATS_MIB_INADDRERRORS
+                                        */
+
        SKB_DROP_REASON_MAX,
 };
 
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index ab554e14e651..729db7a7471a 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -63,6 +63,8 @@
        EM(SKB_DROP_REASON_TAP_TXFILTER, TAP_TXFILTER)          \
        EM(SKB_DROP_REASON_ICMP_CSUM, ICMP_CSUM)                \
        EM(SKB_DROP_REASON_INVALID_PROTO, INVALID_PROTO)        \
+       EM(SKB_DROP_REASON_IP_INADDRERRORS, IP_INADDRERRORS)    \
+       EM(SKB_DROP_REASON_IP_INNOROUTES, IP_INNOROUTES)        \
        EMe(SKB_DROP_REASON_MAX, MAX)
 
 #undef EM
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 2e39c674c213..587a0c44d1e1 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -952,6 +952,7 @@ static int ip_error(struct sk_buff *skb)
        struct inet_peer *peer;
        unsigned long now;
        struct net *net;
+       SKB_DR(reason);
        bool send;
        int code;
 
@@ -971,10 +972,12 @@ static int ip_error(struct sk_buff *skb)
        if (!IN_DEV_FORWARD(in_dev)) {
                switch (rt->dst.error) {
                case EHOSTUNREACH:
+                       SKB_DR_SET(reason, IP_INADDRERRORS);
                        __IP_INC_STATS(net, IPSTATS_MIB_INADDRERRORS);
                        break;
 
                case ENETUNREACH:
+                       SKB_DR_SET(reason, IP_INNOROUTES);
                        __IP_INC_STATS(net, IPSTATS_MIB_INNOROUTES);
                        break;
                }
@@ -990,6 +993,7 @@ static int ip_error(struct sk_buff *skb)
                break;
        case ENETUNREACH:
                code = ICMP_NET_UNREACH;
+               SKB_DR_SET(reason, IP_INNOROUTES);
                __IP_INC_STATS(net, IPSTATS_MIB_INNOROUTES);
                break;
        case EACCES:
@@ -1016,7 +1020,7 @@ static int ip_error(struct sk_buff *skb)
        if (send)
                icmp_send(skb, ICMP_DEST_UNREACH, code, 0);
 
-out:   kfree_skb(skb);
+out:   kfree_skb_reason(skb, reason);
        return 0;
 }
 
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to