[Devel] [PATCH RHEL9 COMMIT] net: ipv4: add skb drop reasons to ip_error()

Konstantin Khorenko khorenko at virtuozzo.com
Mon Jan 16 20:56:50 MSK 2023


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 <imagedong at 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 <imagedong at tencent.com>
    Reviewed-by: Jiang Biao <benbjiang at tencent.com>
    Reviewed-by: Hao Peng <flyingpeng at tencent.com>
    Signed-off-by: David S. Miller <davem at davemloft.net>
    Acked-by: Nikolay Borisov <nborisov at suse.com>
    Signed-off-by: Nikolay Borisov <nikolay.borisov at 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;
 }
 


More information about the Devel mailing list