Age | Commit message (Collapse) | Author | Files | Lines |
|
Handle all termination signals that we're allowed to handle (SIGKILL
can't be handled) in order to exit gracefully in any regular termination
case.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Handle all termination signals that we're allowed to handle (SIGKILL
can't be handled) in order to exit gracefully in any regular termination
case.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Handle all termination signals that we're allowed to handle (SIGKILL
can't be handled) in order to exit gracefully in any regular termination
case.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Handle all termination signals that we're allowed to handle (SIGKILL
can't be handled) in order to exit gracefully in any regular termination
case. Without this fix, pcap files written by netsniff-ng might be
corrupted.
Reported-by: Mike Westmacott <mikewestmacott@googlemail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Emma was former also one of the maintainer in the old days.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Follow commit bed9b6bb ("netsniff-ng: Don't modify optarg/argv").
We shouldn't modify optarg (and thus argv) since it's e.g. used to
display the commandline string in `ps'. Since strtoul() reads until it
encounters the first non-numeric character and ignores the rest, we can
just revert from setting a NULL byte after the numeric part of the
string.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
For some reason the Debian ncurses version does not
contain a ncurses.pc pkg-config file.
Fix this by echoing "-lncurses" if the command fails:
pkg-config --libs ncurses
This fix will make ifpps compile on Debian Squeeze 6.0.8.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
|
|
Debian's version of linux/ethtool.h seems to be outdated
and does not contain define SPEED_UNKNOWN, fix this by a
manual define.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
|
|
Since Linux 3.14, the kernel supports a socket option PACKET_QDISC_BYPASS,
which trafgen enables by default. That allow us to bypass the kernels
normal qdisc (traffic control) layer.
An option -q, --qdisc-path is added to allow enabling the qdisc path
explicity, useful for testing purposes.
This will be avail in kernels >= 3.14 via
commit d346a3fae3 (packet: introduce PACKET_QDISC_BYPASS socket option).
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
|
|
The tool trafgen is used in a pktgen style transmit only scenario.
We discovered a performance bottleneck in the kernel, when
running trafgen, where the kernel stalled on a lock in
packet_rcv(). This call is unnecessary for trafgen given its
transmit only nature.
This packet_rcv() call can, easily be avoided by instructing the
RAW/PF_PACKET socket, to not listen to any protocols (by passing
protocol argument zero, when creating the socket).
The performance gain is huge, increasing performance from approx
max 2Mpps to 12Mpps, basically causing trafgen to scale with
the number of CPUs.
Following tests were run on a 2xCPU E5-2650 with Intel 10Gbit/s ixgbe:
Trafgen using sendto() syscall via parameter -t0:
* # CPUs -- *with* -- *without* packet_rcv() call
* 1 CPU == 1,232,244 -- 1,236,144 pkts/sec
* 2 CPUs == 1,592,720 -- 2,593,620 pkts/sec
* 3 CPUs == 1,635,623 -- 3,692,216 pkts/sec
* 4 CPUs == 1,567,768 -- 4,102,866 pkts/sec
* 5 CPUs == 1,700,270 -- 5,151,489 pkts/sec
* 6 CPUs == 1,762,392 -- 6,124,512 pkts/sec
* 7 CPUs == 1,850,139 -- 7,120,496 pkts/sec
* 8 CPUs == 1,770,909 -- 8,058,710 pkts/sec
* 9 CPUs == 1,721,072 -- 8,963,192 pkts/sec
* 10 CPUs == 1,359,157 -- 9,584,535 pkts/sec
* 11 CPUs == 1,175,520 -- 10,498,038 pkts/sec
* 12 CPUs == 1,075,867 -- 11,189,292 pkts/sec
* 13 CPUs == 1,012,602 -- 12,048,836 pkts/sec
* [...]
* 20 CPUs == 1,030,446 -- 11,202,449 pkts/sec
Trafgen using mmap() TX tpacket_v2 (default)
* # CPUs -- *with* -- *without* packet_rcv() call
* 1 CPU == 920,682 -- 927,984 pkts/sec
* 2 CPUs == 1,607,940 -- 2,061,406 pkts/sec
* 3 CPUs == 1,668,488 -- 2,979,463 pkts/sec
* 4 CPUs == 1,423,066 -- 3,169,565 pkts/sec
* 5 CPUs == 1,507,708 -- 3,910,756 pkts/sec
* 6 CPUs == 1,555,616 -- 4,625,844 pkts/sec
* 7 CPUs == 1,560,961 -- 5,298,441 pkts/sec
* 8 CPUs == 1,596,092 -- 6,000,465 pkts/sec
* 9 CPUs == 1,575,139 -- 6,722,130 pkts/sec
* 10 CPUs == 1,311,676 -- 7,114,202 pkts/sec
* 11 CPUs == 1,157,650 -- 7,859,399 pkts/sec
* 12 CPUs == 1,060,366 -- 8,491,004 pkts/sec
* 13 CPUs == 1,012,956 -- 9,269,761 pkts/sec
* [...]
* 20 CPUs == 955,716 -- 8,653,947 pkts/sec
It is fairly strange that the mmap() version runs slower than the
sendto() version. This is likely another performance problem related
to mmap() which seems worth fixing.
Note, that the mmap() version speed can be improved by reducing the
default --ring-size to around 1-2 MiB. But this does not fix general
trend with mmap() performance.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
|
|
Also make these options available to trafgen.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Check the return value of system() when invoking CPP in the BPF
parser and bail out in case of an error.
This fixes the following compiler warning:
trafgen_parser.y:598:9: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result [-Wunused-result]
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Check the return value of system() when invoking CPP in the BPF parser
and bail out in case of an error.
This fixes the following compiler warning:
bpf_parser.y:754:9: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result [-Wunused-result]
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
When viewing the bpfc man page I noticed a mistake saying that the BPF
compiler included in the pcap library is the *only* compiler. I changed
it to say the *only other* compiler since bpfc is also a BPF compiler.
Signed-off-by: Jon Schipp <jonschipp@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add LDFLAGS for libtinfo for cases where it is separate from ncurses.
[tklauser: Whitespace fixes in ifpps/Makefile and added patch
description]
Signed-off-by: Teguh <info@egeektronic.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
If we loose carrier, don't bother about panic'ing, but continue sending!
Only exit in case we're doing a smoke test.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Add ability to set IGP in time units in seconds, milliseconds,
microseconds, and nanoseconds by appending a postfix to --gap e.g. --gap
100ms. Also, update the man page and trafgen.zsh to reflect the
changes.
[Fix whitespaces, coding style and minor wording changes -- tklauser]
Signed-off-by: Jon Schipp <jonschipp@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Alias output format for tc/xt_bpf.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
We shouldn't modify optarg (and thus argv) since it's e.g. used to
display the commandline string in `ps'. Since strtoul() reads until it
encounters the first non-numeric character and ignores the rest, we can
just revert from setting a NULL byte after the numeric part of the
string.
Reported-by: Jon Schipp <jonschipp@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
If setting an unsigned long variable, use strtoul() instead of strtol().
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Create detached ASCII format GPG signatures for the to be released
tarballs.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
We can reuse the omit_header variable to get rid of the existing
variable 'first', which was used to make sure the header gets only
printed once at the beginning.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Otherwise we get a warning when compiling with "-W -Wall".
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Keep the options sorted alphabetically, argument options first.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add the -o/--omit-header option to ZSH autocompletion.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Incorrect usage of "i.e." leads one to believe that replaying is
possible only.
Signed-off-by: Jon Schipp <jonschipp@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Removed, word "be", which was seen twice and removed unnecessary comma.
Signed-off-by: Jon Schipp <jonschipp@gmail.com>
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Manual page entry for option -c|--omit-header.
Signed-off-by: Jon Schipp <jonschipp@gmail.com>
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Adds option -o|--omit-header which does not print the CSV header
e.g. when the user does not need it.
Signed-off-by: Jon Schipp <jonschipp@gmail.com>
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
If a user accidentially specifies more than one of --mm/--sg/--clrw, the
option specified last will be used - as expected from standard command
line tools. In order to still prevent users from being confused by this,
explicitely display the pcap I/O method used in verbose mode.
In order for the output to be more user-friendly, actually write out the
method names in const char *pcap_ops_group_to_str, which isn't used
anywhere else anyway.
Suggested-by: Jon Schipp <jonschipp@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Get rid of inner loop in fast path. This simplifies code and readability.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
We still have to get curvetun and mausezahn in line with the rest
of the landscape, as they are not ready and in a quality we wish
they would be. Therefore, mark and document them as experiemental
for now until they are fixed up.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Nothing changes in that regard, Tobias and myself are both maintaining
and continue to do so on one and the same level. Tobias does an awesome
job, so this should be credited to him right here!
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Combine multiple likely conditions into one.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
The line rate is given in Mbit rather than MiB (in which {rx,tx}_bytes
were converted). Correct the calculation by converting {rx,tx}_bytes to
Mbit:
(n bytes * 8 bits per byte) / 1000^2 = (n bytes) / 125000
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Let a and x register also be addressed as %x and %a.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Add an entry for autocompletion support.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Add a man page entry for the new -P option.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
In order to not to clutter the display too much, make the display of the
percentage of the theoretical line rate dependent on a command line
option.
Suggested-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Also show the percentage of the (theoretical) line rate, not just the
current rate.
Suggested-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Instead of issuing another call to device_bitrate(), reuse the the value
acquired in screen_update() and pass it to screen_header().
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
For consistency, allow for '#' prefix in numbers, which we currently
do not do. So keep old mode as compatibility to not break current
programs, and add new one with '#' prefix.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
The struct stat is filled by the call to stat(2) in the next line, so
there is no need to explicitely set it to 0 before.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add a note to the man-page that there's a other tool that is unrelated
to netsniff-ng.
Signed-off-by: Jon Schipp <jonschipp@gmail.com>
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Instead of using goto, just check stats if stat() returned 0 and used
ctx->dump_dir afterwards. This makes the logic a bit easier to follow.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
We don't use the IRQ number we read from /proc/interrupts, so just skip
it while reading. This also allows us to drop the irq_nr member from
struct ifstat.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
In case the interface ifpps is running on went down, ifpps bugged out
because the stats didn't look plausible anymore, due to the IRQ count
being reset:
ifpps: ifpps.c:563: stats_diff: Assertion `!((new->irqs[i] - old->irqs[i]) > (new->irqs[i]))' failed
Fix this by setting the difference to 0 in this case. ifpps will thus
display a irqs/t value of 0 instead of bugging out.
This fixes #74.
Reported-by: Jon Schipp <jonschipp@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|