Skip to contentSkip to conversation

icmp: account for ICMP out errors because of socket limit

PATCH zhuyj 2 participants 3 messages May 12, 2014 – May 14, 2014

Subsystems (3)
lore
Share & tools
lore

zhuyj

author
#0 lore raw

Hi, Eric && David

____ ______________

|    |         |              |
| PC |<------->| MIPS 32 core |
|____|         |______________|

When ping from a PC to a board (MIPS 32 core), because of socket limit, ping echo will fail. But ICMP_MIB_OUTERRORS counter is not incremented. In this case, "netstat -s" can not report these errors.

This patch will fix this problem. Now it is in the attachment. Please check it.

Best Regards!
Zhu Yanjun

Quoted 1 line

From af800d0f123cf9c66a9ae167baa7dc1d25d0cd1f Mon Sep 17 00:00:00 2001

From: Zhu Yanjun <[email protected]>
Date: Mon, 12 May 2014 11:07:20 +0800
Subject: [PATCH 1/1] icmp: account for ICMP out errors because of socket
limit

When icmp_xmit_lock fails because of socket limit or memory shortage, increment ICMP_MIB_OUTERRORS counter, so that "netstat -s" can report these errors.

netstat -s | grep "ICMP messages failed"
0 ICMP messages failed

---
 net/ipv4/icmp.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
net/ipv4/icmp.c +3 -1
index 0134663..9a0bd7c 100644
@@ -342,8 +342,10 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
 		return;
 
 	sk = icmp_xmit_lock(net);
-	if (sk == NULL)
+	if (sk == NULL){
+		ICMP_INC_STATS_BH(net, ICMP_MIB_OUTERRORS);
 		return;
+	}
 	inet = inet_sk(sk);
 
 	icmp_param->data.icmph.checksum = 0;
Signature · 1 line
1.7.9.5
author
#1 lore raw

Hi, Eric && David

This patch is similar to the following patch.

commit 1f8438a853667d48055ad38384c63e94b32c6578

Author: Eric Dumazet <[email protected]>
Date:   Sat Apr 3 15:09:04 2010 -0700

icmp: Account for ICMP out errors

When ip_append() fails because of socket limit or memory shortage, increment ICMP_MIB_OUTERRORS counter, so that "netstat -s" can report these errors.

LANG=C netstat -s | grep "ICMP messages failed"
0 ICMP messages failed

For IPV6, implement ICMP6_MIB_OUTERRORS counter as well.

# grep Icmp6OutErrors /proc/net/dev_snmp6/*
/proc/net/dev_snmp6/eth0:Icmp6OutErrors 0
/proc/net/dev_snmp6/lo:Icmp6OutErrors 0

Best Regards!
Zhu Yanjun

Quoted 15 lines · zhuyj

Hi, Eric && David

____ ______________

|    |         |              |
| PC |<------->| MIPS 32 core |
|____|         |______________|

When ping from a PC to a board (MIPS 32 core), because of socket limit, ping echo will fail. But ICMP_MIB_OUTERRORS counter is not incremented. In this case, "netstat -s" can not report these errors.

This patch will fix this problem. Now it is in the attachment. Please check it.

Best Regards!
Zhu Yanjun

maintainer
#2 lore raw
In reply to zhuyj

From: zhuyj <[email protected]>
Date: Mon, 12 May 2014 11:19:28 +0800

Quoted 7 lines

Hi, Eric && David

____ ______________

|    |         |              |
| PC |<------->| MIPS 32 core |
|____|         |______________|
Quoted 8 lines

When ping from a PC to a board (MIPS 32 core), because of socket limit,
ping echo will fail. But ICMP_MIB_OUTERRORS counter is not incremented.
In this case, "netstat -s" can not report these errors.

This patch will fix this problem. Now it is in the attachment. Please check it.

The only time icmp_xmit_lock() can fail is if we try to generate an ICMP response to a failure to send another ICMP packet.

It is an entirely different situation from Eric's other patch which you've mentioned in this thread, and I do not think this case warrants a statistic bump at all.