Wei Yongjun
Tue, 26 Feb 2008 02:00:43 -0800
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