Skip site navigation (1)Skip section navigation (2)
Date:      04 Feb 2003 01:16:15 +0000
From:      Wes Peters <wes@softweyr.com>
To:        Marko Zec <zec@tel.fer.hr>
Cc:        Matthew Dillon <dillon@apollo.backplane.com>, Peter Radcliffe <pir@pir.net>, stable@FreeBSD.ORG
Subject:   Re: "ping: sendto: No buffer space available"
Message-ID:  <1044321375.358.66.camel@zaphod.softweyr.com>
In-Reply-To: <3E3F152D.6BE3A41B@tel.fer.hr>
References:  <20030203212349.GG12779@pir.net> <20030204003205.T30858@marvin.sko.mh.se> <20030204000108.GA23967@pir.net> <200302040027.h140RwI8038634@apollo.backplane.com> <3E3F152D.6BE3A41B@tel.fer.hr>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 2003-02-04 at 01:19, Marko Zec wrote:
> Matthew Dillon wrote:
> 
> > :Mats Larsson <myrslok@marvin.sko.mh.se> probably said:
> > :> On a 4.4 box I got this error using some old ep(4) card, a card
> > :> switch Solved my problems back then. If you have the possible then
> > :> test with a different card.
> > :
> > :A different card isn't much use - it's the built in wireless.
> >
> >     Check the queue statistics.  It could be a queue overflow due to
> >     stalls in the wireless card accepting new packets, due to
> >     excessive collisions on a hard line.
> >
> >     test2:/home/dillon> sysctl -a | fgrep ip.intr_qu
> >     net.inet.ip.intr_queue_maxlen: 50
> >     net.inet.ip.intr_queue_drops: 0
> 
> Hmm... the issue here is with interface _outbound_ buffers, not with the IP
> inbound queue. Despite ping / ip_output() claiming ENOBUFS,
> net.inet.ip.intr_queue_drops will probably remain unchanged. netstat -s /
> netstat -i would probably offer better diagnostics in this case.

In particular, this is the warn() on line 786 of ping.c (4.7-R):

    777         i = sendto(s, (char *)outpack, cc, 0, (struct sockaddr
*)&whereto,
    778             sizeof(whereto));
    779
    780         if (i < 0 || i != cc)  {
    781                 if (i < 0) {
    782                         if (options & F_FLOOD && errno ==
ENOBUFS) {
    783                                 usleep(FLOOD_BACKOFF);
    784                                 return;
    785                         }
    786                         warn("sendto");
    787                 } else {
    788                         warn("%s: partial write: %d of %d
bytes",
    789                              hostname, i, cc);
    790                 }
    791         }

The sendto() on line 777 failed because there is insufficient buffer
space to buffer any more icmp packets.  The usual reason for this is the
machine you're attempting to ping can't be reached via whatever route
you're using.

--
 
        Where am I, and what am I doing in this handbasket?

Wes Peters                                               wes@softweyr.com


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1044321375.358.66.camel>