Age | Commit message (Collapse) | Author | Files | Lines |
|
There were a bug in ifpps, that would match the first occurance
of a device/interface name in /proc/net/dev, because it located
the device based on a substring.
If the device name were starting with the same characters,
e.g. having a device named eth4 and a VLAN device named eth4.100.
If specifying --dev eth4, then depending on the order of
/proc/net/dev the wrong device could be choosen for stats. (Note
kernel does not guarantee the order of devices in proc file)
Fix the bug, by matching with a colon ':' appended to the device
name, as the kernel proc format prints a ':' behind the device name.
Fixes #119
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
|
|
We don't need the file open to allocate the buffer so open it just
before it's used for the first time.
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
The number of CPUs can never be negative and get_number_cpus() returns
unsigned int too, so consistently conver all variables holding a CPU
number or number of CPUs to type unsigned int.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Even though the loop contains only one statement, add parentheses around
it to make it more readable.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Since entering/leaving promiscuous mode also is a device specific
function and all users of the `promisc' module also use `dev', integrate
it there. Also rename the functions to have a `device_' prefix like the
other functions in the module.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
term_csv() doesn't use the ifname and ms_interval parameters, they're
only used in term_csv_header(). Thus remove them from term_csv().
This fixes a warning when compiling with -W/-Wunused-parameter.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Since get_number_cpus() now returns unsigned int store it's return value
and derived values in unsigned int variables as well.
This fixes the some warnings when compiling with -W/-Wsign-compare:
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Those are fixes for the following warnings:
pcap_mm.c:119:29: warning: Using plain integer as NULL pointer
pcap_mm.c:141:29: warning: Using plain integer as NULL pointer
ring.c:24:31: warning: Using plain integer as NULL pointer
flowtop.c:1114:22: warning: Using plain integer as NULL pointer
ifpps.c:1133:29: warning: Using plain integer as NULL pointer
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Make this conform to trafgen/netsniff-ng and reduce it to 1 line
description.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
The stack trace of valgrind --leak-check=full --show-reachable=yes ifpps \
-lpcd wlan0 showed that at exit members from stats are still reachable.
They have been alloced through stats_alloc, but not freed.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
It is possible to use a interval even of 0, although it would not
really make sense. It's not a bug either, so throw a warning to the
user in that case on 1Gbit/s.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
ifpps always reported the same values for median as for average in the
CPU load fields (usr, sys, idle, iowait). This is of course incorrect.
The bug was due to 3 sub-problems:
- Summing up long double values (m_cpu_*) in an uint64_t (all)
- Not using %Lf (for long double) in mvwprintw()
- Explicitely use floating point division in MEDIAN_EVEN
Fix the bug by summing up in a separate accumulator of type long double,
use the correct format string for long double and divide by 2.0 in
MEDIAN_EVEN to force the result to be (long) double.
Reported-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Instead of (more or less) arbitrarily listing the command line options,
sort them according to the following rule:
- options with required argument, alphabetically by short option
- options without argument, alphabetically by short option
- common options -v/--version and -h/--help
Do this in the short options string, the long options struct, the
in-program usage and the man page.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add whitespace padding in one occurence of 'med:' output.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
This was missing in commit 971b1d95 ("ifpps: Optionally display median
values for CPU load and interrupts"). Update the usage to reflect the
changes too.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Using the -m/--median command line option, median values across all CPUs
are displayed for CPU load, interrupts per interval, sw interrupts per
interval and absolute number of interrupts.
Also update the manpage accordingly.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
When running ifpps on systems with 16, 32 or more CPUs, 'avg:...'
field is not being padded with witespaces as the rest of the CPU
lines. This patch does that.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Collecting device statistics on high speed every second can be very
costly, so warn about this in ncurses mode.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
In Fedora or RHEL/CentOS releases the machine type is already part
of the package name, so show it only, if it does not appear there.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Lets make the headline output a bit more useful and show the current
kernel version and well as the machine/hardware type.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
If will now look like the following:
cpu6 +: 237357 irqs
cpu2 |: 117538 irqs
cpu0 |: 8419 irqs
cpu7 |: 4523 irqs
cpu5 |: 4312 irqs
cpu1 -: 1432 irqs
avg: 47606.8
This makes it a bit more precise/intuitive that we sort from max
to min.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
In order to get a better overview, lets align the avg numbers to the
other shown decimals. However, for this we would need to remove the
avg units as we deal with floats here. But we know the units from the
above numbers anyway. I think this makes it more clear to follow.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
Just a whitespace fix to align the strings to the fmt string.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
stats_avg will be reset to 0 on the first call to stats_top() before
displaying any results, thus this memset() is not necessary.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Remove trailing whitespace where they're not necessary for the
background to extend beyond the text. Replace whitespaces needed for
tabbing by setting the appropriate format string field width modifiers.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Since we now also display the average (and in the future possibly also
the standard deviation), reduce the default number of CPUs displayed to
5, to keep terminal space usage low.
Suggested-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Calculate the average for CPU usage, IRQs/t and absolute IRQs across all
CPUs (also the ones which are not displayed) and show them below the
respective per-CPU values.
Mention this fact the man page accordingly.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
In order to be able to better track regressions or to give support,
let us track the Git id as well in version information. This makes
the ``--version'' switch actually useful.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
ncurses (de-)initialization is duplicated across flowtop and ifpps, so
move it to an own module and use it from both tools.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
We never use or report it anywhere, so remove it.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Since we've added '+'/'-' for max/min CPU values, we also need to shift
once whitespace to the left to properly align ncurses display again.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|
|
This is not the top number of CPUs but the total number. Rename the
variable to not confuse this.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Instead of just giving the percentage of memory usage, report the total,
used, active and inactive memory values. Also report total, free and
cached for swap.
Instead of reporting the memory in the 'sys' line add two new lines for
these reports and use the free space to report the total number of
processes.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
These stats values are not reported anywhere in relative terms, so it
makes no sense to calculate the difference for them.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
It's sufficient to calculate the difference of tx_bytes only once.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
In case we add new stats values, j might be higher already when entering
the loop. As j will have the proper number anyway, there is no point in
re-initializing.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Also display the least heavy hitter for the relative and absolute IRQ
list. Also check that the number passed with -n is actually 1 or larger.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Along with the topmost heavy hitters, we always display the least heavy
hitter (unless there's only 1 CPU). This is not influenced by the -n
command line parameter, so also display the according additional CPU in
the header line.
Also update the manpage accordingly.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Finally eliminate xutils.{c,h} and move the rest to epoll2.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
|