reincarnation of bug kern/95665: [if_tun] "ping: sendto: No buffer space available"

Oleg agile.quad at gmail.com
Tue Jul 31 12:07:06 UTC 2007


2007/7/27, Oleg <agile.quad at gmail.com>:
>
> Hi All,
>
> I can reproduce this bug easly with tap echo server (attached here), that
> I was small reworked.
>
> steps (almost same):
> (All ip addresses/macs hardcoded in code).
>
> On first machine run echo server, on second add
>
> root at pc2# route add -net 192.168.125.1/24 ip-addr-of-first-machine
>
> and
>
> root at pc2# ping -f -n  192.168.125.2
>
> While flood pinging, on first machine run ping for checking:
>
> root at pc1#  ping 192.168.125.2
> PING 192.168.125.2 ( 192.168.125.2): 56 data bytes
> 64 bytes from 192.168.125.2 : icmp_seq=0 ttl=64 time=0.554 ms
> 64 bytes from 192.168.125.2: icmp_seq=1 ttl=64 time=0.180 ms
> ...
> wait for a while
> ...
> ping: sendto: No buffer space available
> ping: sendto: No buffer space available
> ping: sendto: No buffer space available
>
> With best regards,
>     Oleg Dolgov.
>
>
I find ugly solution: if
in echo tap server we add select before read, all work perfectly!
...
while (1)
{
      if (select(tap_fd+1, &fd, NULL, NULL, NULL) == -1) {
            break;
      }

      if ((ip_pkt_len = read(tap_fd, buf, sizeof(buf))) == -1) {
            break;
      }

      ...
...
I don't have any ideas, why this hack fix trouble..
p.s. a few more details look here
http://lists.freebsd.org/pipermail/freebsd-net/2007-April/014064.html

p.p.s. bug reproduce on FreeBSD 6.2-RELEASE, but can't on FreeBSD
7.0-CURRENT =/


More information about the freebsd-net mailing list