On Sunday 24 August 2008 01:46, Denys Vlasenko wrote:
> In order to not waste too much of buffer space, I propose using
> (datalen | 0x7ff) + 1025 bytes instead of fixed 48k or 96k constant.
> 
> Please try attached patch.
> --
> vda

Actually, "standard" ping seems to do it in order to be able to buffer
more than one ping response. I bumbed up buffer size to ~8k
for normal (short) pings in this updated patch.

Please try it with variously-sized packets.
--
vda
diff -d -urpN busybox.2/networking/ping.c busybox.3/networking/ping.c
--- busybox.2/networking/ping.c	2008-08-06 00:55:59.000000000 +0200
+++ busybox.3/networking/ping.c	2008-08-24 01:59:54.000000000 +0200
@@ -576,8 +576,9 @@ static void ping4(len_and_sockaddr *lsa)
 	/* enable broadcast pings */
 	setsockopt_broadcast(pingsock);
 
-	/* set recv buf for broadcast pings */
-	sockopt = 48 * 1024; /* explain why 48k? */
+	/* set recv buf (needed if we can get lots of responses: flood ping,
+	 * broadcast ping etc) */
+	sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */
 	setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt));
 
 	signal(SIGINT, print_stats_and_exit);
@@ -640,8 +641,9 @@ static void ping6(len_and_sockaddr *lsa)
 	/* enable broadcast pings */
 	setsockopt_broadcast(pingsock);
 
-	/* set recv buf for broadcast pings */
-	sockopt = 48 * 1024; /* explain why 48k? */
+	/* set recv buf (needed if we can get lots of responses: flood ping,
+	 * broadcast ping etc) */
+	sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */
 	setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt));
 
 	sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox

Reply via email to