# ping

## albright

when I ping an unreachable address ping returns

```
WARNING: kernel is not very fresh, upgrade is recommended.

From olorin (192.168.0.5): icmp_seq=2 Destination Host Unreachable

```

It is true I am using that ancient kernel ... 4.0.0

so what is going on?

----------

## papahuhn

This is considered a bug and has been removed in Debian from iputils:

```

Remove buggy working_recverr checks per bug#709052

Index: iputils/ping.c

===================================================================

--- iputils.orig/ping.c 2013-12-08 13:41:47.077791445 -0800

+++ iputils/ping.c      2013-12-08 13:43:25.238278205 -0800

@@ -654,17 +654,6 @@

                acknowledge(ntohs(icmph.un.echo.sequence));

-               if (!working_recverr) {

-                       struct icmp_filter filt;

-                       working_recverr = 1;

-                       /* OK, it works. Add stronger filter. */

-                       filt.data = ~((1<<ICMP_SOURCE_QUENCH)|

-                                     (1<<ICMP_REDIRECT)|

-                                     (1<<ICMP_ECHOREPLY));

-                       if (setsockopt(icmp_sock, SOL_RAW, ICMP_FILTER, (char*)&filt, sizeof(filt)) == -1)

-                               perror("\rWARNING: setsockopt(ICMP_FILTER)");

-               }

-

                net_errors++;

                nerrors++;

                if (options & F_QUIET)

@@ -820,19 +809,7 @@

                                             icp->type != ICMP_SOURCE_QUENCH);

                                if (error_pkt) {

                                        acknowledge(ntohs(icp1->un.echo.sequence));

-                                       if (working_recverr) {

-                                               return 0;

-                                       } else {

-                                               static int once;

-                                               /* Sigh, IP_RECVERR for raw socket

-                                                * was broken until 2.4.9. So, we ignore

-                                                * the first error and warn on the second.

-                                                */

-                                               if (once++ == 1)

-                                                       fprintf(stderr, "\rWARNING: kernel is not very fresh, upgrade is recommended.\n");

-                                               if (once == 1)

-                                                       return 0;

-                                       }

+                                       return 0;

                                }

                                nerrors+=error_pkt;

                                if (options&F_QUIET)

```

----------

