Krishna Kumar2 写道: > Gui Jianfeng wrote on 10/22/2007 11:37:07 AM: > >> @@ -310,8 +310,12 @@ static inline int ip_rcv_finish(struct s >> * how the packet travels inside Linux networking. >> */ >> if (skb->dst == NULL) { >> - if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, dev)) >> - goto drop; >> + int err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, > dev); >> + if (unlikely(err)) { >> + if (err == -EHOSTUNREACH) >> + IP_INC_STATS_BH(IpInAddrErrors); >> + } >> + goto drop; >> } > > Shouldn't the "goto drop" be inside the "if (unlikely(err)) {" case? > And normally it is nice to have a blank line after variable declaration. sorry for my careless, here is the correct one
Signed-off-by: Gui Jianfeng <[EMAIL PROTECTED]> ------- diff -Narup linux-2.4.35.3/net/ipv4/ip_input.c linux-2.4.35.3-prep/net/ipv4/ip_input.c --- linux-2.4.35.3/net/ipv4/ip_input.c 2007-09-24 06:02:58.000000000 +0800 +++ linux-2.4.35.3-prep/net/ipv4/ip_input.c 2007-09-26 11:30:22.000000000 +0800 @@ -310,8 +310,13 @@ static inline int ip_rcv_finish(struct s * how the packet travels inside Linux networking. */ if (skb->dst == NULL) { - if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, dev)) + int err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, dev); + + if (unlikely(err)) { + if (err == -EHOSTUNREACH) + IP_INC_STATS_BH(IpInAddrErrors); goto drop; + } } #ifdef CONFIG_NET_CLS_ROUTE diff -Narup linux-2.4.35.3/net/ipv4/route.c linux-2.4.35.3-prep/net/ipv4/route.c --- linux-2.4.35.3/net/ipv4/route.c 2007-09-24 06:02:58.000000000 +0800 +++ linux-2.4.35.3-prep/net/ipv4/route.c 2007-09-26 11:29:19.000000000 +0800 @@ -1450,7 +1450,7 @@ int ip_route_input_slow(struct sk_buff * */ if ((err = fib_lookup(&key, &res)) != 0) { if (!IN_DEV_FORWARD(in_dev)) - goto e_inval; + goto e_hostunreach; goto no_route; } free_res = 1; @@ -1499,7 +1499,7 @@ int ip_route_input_slow(struct sk_buff * } if (!IN_DEV_FORWARD(in_dev)) - goto e_inval; + goto e_hostunreach; if (res.type != RTN_UNICAST) goto martian_destination; @@ -1668,6 +1668,11 @@ martian_destination: "%u.%u.%u.%u, dev %s\n", NIPQUAD(daddr), NIPQUAD(saddr), dev->name); #endif + +e_hostunreach: + err = -EHOSTUNREACH; + goto done; + e_inval: err = -EINVAL; goto done; > > - KK > > > - 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