Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd0f0b95 authored by Duan Jiong's avatar Duan Jiong Committed by David S. Miller
Browse files

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: default avatarDuan Jiong <duanj.fnst@cn.fujitsu.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 891de74d
Loading
Loading
Loading
Loading
+7 −2
Original line number Original line Diff line number Diff line
@@ -1695,8 +1695,11 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
	fl4.daddr = daddr;
	fl4.daddr = daddr;
	fl4.saddr = saddr;
	fl4.saddr = saddr;
	err = fib_lookup(net, &fl4, &res);
	err = fib_lookup(net, &fl4, &res);
	if (err != 0)
	if (err != 0) {
		if (!IN_DEV_FORWARD(in_dev))
			err = -EHOSTUNREACH;
		goto no_route;
		goto no_route;
	}


	RT_CACHE_STAT_INC(in_slow_tot);
	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;
		goto local_input;
	}
	}


	if (!IN_DEV_FORWARD(in_dev))
	if (!IN_DEV_FORWARD(in_dev)) {
		err = -EHOSTUNREACH;
		goto no_route;
		goto no_route;
	}
	if (res.type != RTN_UNICAST)
	if (res.type != RTN_UNICAST)
		goto martian_destination;
		goto martian_destination;