[IPV4]: Fix "ipOutNoRoutes" counter error for TCP and UDP

Signed-off-by: Wei Dong <weidong@cn.fujitsu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by Wei Dong and committed by David S. Miller 584bdf8c 4fcd6b99

+13 -3
+5 -1
net/ipv4/datagram.c
··· 50 50 RT_CONN_FLAGS(sk), oif, 51 51 sk->sk_protocol, 52 52 inet->sport, usin->sin_port, sk, 1); 53 - if (err) 53 + if (err) { 54 + if (err == -ENETUNREACH) 55 + IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); 54 56 return err; 57 + } 58 + 55 59 if ((rt->rt_flags & RTCF_BROADCAST) && !sock_flag(sk, SOCK_BROADCAST)) { 56 60 ip_rt_put(rt); 57 61 return -EACCES;
+4 -1
net/ipv4/tcp_ipv4.c
··· 192 192 RT_CONN_FLAGS(sk), sk->sk_bound_dev_if, 193 193 IPPROTO_TCP, 194 194 inet->sport, usin->sin_port, sk, 1); 195 - if (tmp < 0) 195 + if (tmp < 0) { 196 + if (tmp == -ENETUNREACH) 197 + IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); 196 198 return tmp; 199 + } 197 200 198 201 if (rt->rt_flags & (RTCF_MULTICAST | RTCF_BROADCAST)) { 199 202 ip_rt_put(rt);
+4 -1
net/ipv4/udp.c
··· 722 722 .dport = dport } } }; 723 723 security_sk_classify_flow(sk, &fl); 724 724 err = ip_route_output_flow(&rt, &fl, sk, 1); 725 - if (err) 725 + if (err) { 726 + if (err == -ENETUNREACH) 727 + IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); 726 728 goto out; 729 + } 727 730 728 731 err = -EACCES; 729 732 if ((rt->rt_flags & RTCF_BROADCAST) &&