netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: weidong <weid@np.css.fujitsu.com>
To: netdev@vger.kernel.org
Cc: davem@davemloft.net
Subject: Fix "ipOutNoRoutes" counter error for TCP and UDP
Date: Wed, 14 Feb 2007 10:03:49 -0500	[thread overview]
Message-ID: <1171465429.7069.18.camel@LINE> (raw)

Hi, All
  When I tested Linux-2.6.20 and found that counter "ipOutNoRoutes" can
not increase correctly.
  The criteria is RFC2011

ipOutNoRoutes OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The number of IP datagrams discarded because no route could
            be found to transmit them to their destination.  Note that
            this counter includes any packets counted in ipForwDatagrams
            which meet this `no-route' criterion.  Note that this
            includes any datagrams which a host cannot route because all
            of its default routers are down."
    ::= { ip 12 }

In current Linux TCP/IP stack, maybe we should not increase this counter
in "input path", but only increase it in "output path" due to the TCP/IP
stack performance.

Now in "output path", when TCP client tries to connect to an unreachable
server(net unreachable, so no route can be found), this counter has no
increment. When we use UDP sending UDP datagram to an net unreachable
address, this counter also has no increment.

Function need to fix:
tcp_v4_connect(); ip4_datagram_connect(); udp_sendmsg();

The following patch can fix the problems mentioned above

BR 
Wei Dong

signed-off-by: Wei Dong <weid@np.css.fujitsu.com>

diff -ruN old/net/ipv4/datagram.c new/net/ipv4/datagram.c
--- old/net/ipv4/datagram.c	2007-02-02 12:28:54.000000000 -0500
+++ new/net/ipv4/datagram.c	2007-02-02 12:29:01.000000000 -0500
@@ -50,8 +50,10 @@
 			       RT_CONN_FLAGS(sk), oif,
 			       sk->sk_protocol,
 			       inet->sport, usin->sin_port, sk);
-	if (err)
+	if (err) {
+		IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
 		return err;
+	}
 	if ((rt->rt_flags & RTCF_BROADCAST) && !sock_flag(sk, SOCK_BROADCAST)) {
 		ip_rt_put(rt);
 		return -EACCES;
diff -ruN old/net/ipv4/tcp_ipv4.c new/net/ipv4/tcp_ipv4.c
--- old/net/ipv4/tcp_ipv4.c	2007-02-02 12:28:54.000000000 -0500
+++ new/net/ipv4/tcp_ipv4.c	2007-02-02 12:29:01.000000000 -0500
@@ -192,8 +192,10 @@
 			       RT_CONN_FLAGS(sk), sk->sk_bound_dev_if,
 			       IPPROTO_TCP,
 			       inet->sport, usin->sin_port, sk);
-	if (tmp < 0)
+	if (tmp < 0) {
+		IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
 		return tmp;
+	}
 
 	if (rt->rt_flags & (RTCF_MULTICAST | RTCF_BROADCAST)) {
 		ip_rt_put(rt);
diff -ruN old/net/ipv4/udp.c new/net/ipv4/udp.c
--- old/net/ipv4/udp.c	2007-02-02 12:28:54.000000000 -0500
+++ new/net/ipv4/udp.c	2007-02-02 12:29:01.000000000 -0500
@@ -630,8 +630,10 @@
 						 .dport = dport } } };
 		security_sk_classify_flow(sk, &fl);
 		err = ip_route_output_flow(&rt, &fl, sk, !(msg->msg_flags&MSG_DONTWAIT));
-		if (err)
+		if (err) {
+			IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
 			goto out;
+		}
 
 		err = -EACCES;
 		if ((rt->rt_flags & RTCF_BROADCAST) &&





             reply	other threads:[~2007-02-14  2:58 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-14 15:03 weidong [this message]
2007-02-27  1:08 ` Fix "ipOutNoRoutes" counter error for TCP and UDP David Miller
  -- strict thread matches above, loose matches on Subject: below --
2007-03-27 10:53 Wei Dong
2007-03-28  1:15 weidong
2007-04-25  7:39 weidong
     [not found] <462F029D.5070301@cn.fujitsu.com>
2007-04-25  8:27 ` David Miller
2007-04-25  9:04 weidong
2007-05-31  1:16 Wei Dong
2007-05-31  1:38 ` David Miller
2007-06-01  4:41 ` David Miller
2007-06-01  5:37   ` weidong
2007-06-01  5:49     ` David Miller
2007-05-31  1:18 Wei Dong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1171465429.7069.18.camel@LINE \
    --to=weid@np.css.fujitsu.com \
    --cc=davem@davemloft.net \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).