Jarek Poplawski wrote:

Maybe ip_error() does not handle the ESRCH error. In this place ESRCH eq to ENETUNREACH?

static int ip_error(struct sk_buff *skb)
{
        struct rtable *rt = (struct rtable*)skb->dst;
        unsigned long now;
        int code;

        switch (rt->u.dst.error) {
                case EINVAL:
                default:
                        goto out;
                case EHOSTUNREACH:
                        code = ICMP_HOST_UNREACH;
                        break;
                case ENETUNREACH:
                        code = ICMP_NET_UNREACH;
                        break;
                case EACCES:
                        code = ICMP_PKT_FILTERED;
                        break;
        }
...............snip....................
}



On 26-02-2008 07:34, Li Yewang wrote:
Hi All

   There is a bug about icmp netunreach.
If the kernel does not find a route for a packet, it must send a icmp netunreach packet to the source host, and discard the packet. But the kernel does not send a icmp netunreach packet because of the fib_lookup return value of -ESRCH when a route is not found.

...or because some function doesn't handle -ESRCH return from
fib_lookup? It seems changing this to -ESRCH was needed in some cases.
And you don't explain enough why it can't be handled later (like in
ipv4/route.c: ip_route_input_slow)?


Regards,
Jarek P.

Signed-off-by: Li Yewang <[EMAIL PROTECTED]>

diff -Nurp net/core_back/fib_rules.c net/core/fib_rules.c
--- net/core_back/fib_rules.c   2008-02-25 13:15:37.000000000 +0800
+++ net/core/fib_rules.c        2008-02-25 13:16:01.000000000 +0800
@@ -188,7 +188,7 @@ jumped:
                }
        }
- err = -ESRCH;
+       err = -ENETUNREACH;
 out:
        rcu_read_unlock();


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to