ipv4: distinguish EHOSTUNREACH from the ENETUNREACH
Subsystems (3)
PATCH 1/1 ipv4: distinguish EHOSTUNREACH from the ENETUNREACH
since commit 251da413("ipv4: Cache ip_error() routes even when not forwarding."), the counter IPSTATS_MIB_INADDRERRORS can't work correctly, because the value of err was always set to ENETUNREACH.
Signed-off-by Duan Jiong <[email protected]>
--- net/ipv4/route.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
net/ipv4/route.c +7 -2
@@ -1695,8 +1695,11 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr, fl4.daddr = daddr; fl4.saddr = saddr; err =fib_lookup (net, &fl4, &res); -if (err !=0 ) +if (err !=0 ) { +if (!IN_DEV_FORWARD (in_dev)) + err = -EHOSTUNREACH ; goto no_route; + }RT_CACHE_STAT_INC (in_slow_tot);
@@ -1712,8 +1715,10 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr, goto local_input; } -if (!IN_DEV_FORWARD (in_dev)) +if (!IN_DEV_FORWARD (in_dev)) { + err = -EHOSTUNREACH ; goto no_route; + }if (res.type !=RTN_UNICAST ) goto martian_destination;
Signature · 1 line
1.8.3.1
From: Duan Jiong <[email protected]>
Date: Fri, 14 Feb 2014 18:26:22 +0800
Quoted 5 lines
since commit 251da413("ipv4: Cache
ip_error()routes even when not forwarding."), the counterIPSTATS_MIB_INADDRERRORScan't work correctly, because the value of err was always set to ENETUNREACH.Signed-off-by Duan Jiong <[email protected]>
Applied, thanks.