From: Robert Olsson <Robert.Olsson@data.slu.se>
To: "Jörn Engel" <joern@wohnheim.fh-wedel.de>
Cc: Lennert Buytenhek <buytenh@gnu.org>,
linux-kernel@vger.kernel.org, netdev@oss.sgi.com
Subject: [PATCH] Re: [2.6.0, pktgen] divide-by-zero
Date: Mon, 19 Jan 2004 00:15:41 +0100 [thread overview]
Message-ID: <16395.5021.616055.384516@robur.slu.se> (raw)
In-Reply-To: <20040118154802.GE10397@wohnheim.fh-wedel.de>
Hello!
Jörn Engel writes:
> On Wed, 31 December 2003 06:13:16 -0500, Lennert Buytenhek wrote:
> >
> > When generating packets with pktgen with count=10, I get a divide-by-zero
> > oops in inject().
> >
> > Line 273 in net/core/pktgen.c seems unsafe:
> > __u64 pps = (__u32)(info->sofar * 1000) / ((__u32)(total) / 1000);
> >
> > What if total < 1000 ?
>
> Since noone else seemed to care, try this patch. Against -test11,
> yeah, I'm lazy again.
Sorry I missed Lennerts original posting...
I suggest the patch below to get integer precision at very short time
intervals too.
--- linux-2.6.1/net/core/pktgen.c.orig Sun Jan 18 21:56:56 2004
+++ linux-2.6.1/net/core/pktgen.c Sun Jan 18 23:15:03 2004
@@ -88,7 +88,7 @@
#define cycles() ((u32)get_cycles())
-#define VERSION "pktgen version 1.3"
+#define VERSION "pktgen version 1.31"
static char version[] __initdata =
"pktgen.c: v1.3: Packet Generator for packet performance testing.\n";
@@ -720,8 +720,18 @@
{
char *p = info->result;
- __u64 pps = (__u32)(info->sofar * 1000) / ((__u32)(total) / 1000);
- __u64 bps = pps * 8 * (info->pkt_size + 4); /* take 32bit ethernet CRC into account */
+ __u64 bps, pps = 0;
+
+ if (total > 1000)
+ pps = (__u32)(info->sofar * 1000) / ((__u32)(total) / 1000);
+ else if(total > 100)
+ pps = (__u32)(info->sofar * 10000) / ((__u32)(total) / 100);
+ else if(total > 10)
+ pps = (__u32)(info->sofar * 100000) / ((__u32)(total) / 10);
+ else if(total > 1)
+ pps = (__u32)(info->sofar * 1000000) / (__u32)total;
+
+ bps = pps * 8 * (info->pkt_size + 4); /* take 32bit ethernet CRC into account */
p += sprintf(p, "OK: %llu(c%llu+d%llu) usec, %llu (%dbyte,%dfrags) %llupps %lluMb/sec (%llubps) errors: %llu",
(unsigned long long) total,
(unsigned long long) (total - idle),
Cheers.
--ro
next prev parent reply other threads:[~2004-01-18 23:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-12-31 11:13 [2.6.0, pktgen] divide-by-zero Lennert Buytenhek
2004-01-18 15:48 ` [PATCH] " Jörn Engel
2004-01-18 23:15 ` Robert Olsson [this message]
2004-01-19 17:24 ` David S. Miller
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=16395.5021.616055.384516@robur.slu.se \
--to=robert.olsson@data.slu.se \
--cc=buytenh@gnu.org \
--cc=joern@wohnheim.fh-wedel.de \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@oss.sgi.com \
/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).