Florian Forster [Tue, 9 May 2017 06:41:18 +0000 (08:41 +0200)]
src/liboping.c: Declare a variable at the shortest possible scope.
Florian Forster [Tue, 9 May 2017 06:40:33 +0000 (08:40 +0200)]
src/liboping.c: Use sizeof(*ptr) instead of sizeof(type_t).
Also remove an unnecessary cast from void* to pingobj_t*.
Florian Forster [Tue, 9 May 2017 06:39:44 +0000 (08:39 +0200)]
src/liboping.c: Use composite literals when calling setsockopt().
Florian Forster [Tue, 9 May 2017 06:38:08 +0000 (08:38 +0200)]
src/liboping.c: Don't check for NULL when calling free().
free(3) handles NULL pointers correctly, so these checks are not needed.
Florian Forster [Tue, 9 May 2017 06:19:57 +0000 (08:19 +0200)]
Merge remote-tracking branch 'github/pr/11'
Florian Forster [Tue, 9 May 2017 06:16:26 +0000 (08:16 +0200)]
Bump ABI version.
The new symbol ping_iterator_count() was introduced in
7950f924afbd902b506bbaedfc5f7f1bce6eacc9.
Pull-Request: #23
Hamish Coleman [Tue, 9 May 2017 01:32:04 +0000 (09:32 +0800)]
Add perl binding and documentation for new ping_iterator_count function
Hamish Coleman [Tue, 9 May 2017 01:16:29 +0000 (09:16 +0800)]
Fix up code style
Hamish Coleman [Fri, 17 Feb 2017 07:52:16 +0000 (15:52 +0800)]
Handle duplicate hosts without visual corruption
Hamish Coleman [Fri, 17 Feb 2017 07:51:35 +0000 (15:51 +0800)]
Add a helper to count the size of an iterator
Hamish Coleman [Fri, 17 Feb 2017 07:42:37 +0000 (15:42 +0800)]
Clean up screen in the case where we are adding a new row
Florian Forster [Mon, 8 May 2017 14:23:52 +0000 (16:23 +0200)]
Merge remote-tracking branch 'github/pr/20'
Florian Forster [Fri, 5 May 2017 12:43:29 +0000 (14:43 +0200)]
configure: Check if PKG_INSTALLDIR is defined before using it.
Florian Forster [Fri, 5 May 2017 12:29:49 +0000 (14:29 +0200)]
Add .travis.yml
Florian Forster [Fri, 5 May 2017 09:11:55 +0000 (11:11 +0200)]
src/liboping.c: Ensure ping_send() returns non-zero on success.
This is the documented behavior.
Florian Forster [Fri, 5 May 2017 09:07:48 +0000 (11:07 +0200)]
src/liboping.c: Fix debugging statement.
The dprintf() macro referred to a variable which no longer exists,
which only surfaced when compiling with --enable-debug.
Florian Forster [Fri, 5 May 2017 08:42:35 +0000 (10:42 +0200)]
src/liboping.c: Refactor ping_send() further.
* Give more meaningful names to the central "ptr" and "pings" variables
(now "host_to_ping" and "pings_in_flight").
* Remove special case for (errno == EINTR); effectively we only printed a
different debugging message in that case.
* Remove err_fds. We were not checking it at all.
* Simplify the logic so only one receive or send operation happens per
loop iteration. Previously, one IPv4 and one IPv6 operation might happen
in the same loop iteration. The new logic always receives all replies
before starting to send out more requests.
* Assign the write file descriptor to its own variable to make clear that
only file descriptor is set in the write_fds bitmask.
Florian Forster [Fri, 5 May 2017 08:07:19 +0000 (10:07 +0200)]
src/liboping.c: Start refactoring ping_send().
* Avoid the unnecessary copies of obj->head (ph), obj->fd4 (fd4) and
obj->fd6 (fd6). Assigning these to local variables suggests that the
decoupling is necessary, which is confusing when this is not really the
case.
* Only scan for IPv4 and IPv6 hosts when resetting their latency and TTL
and make sure appropriate sockets are open outside of the loop. This
makes it easier to read and understand under which circumstances which
socket is opened.
* Move some variables to inside the while loop.
Florian Forster [Fri, 5 May 2017 07:17:20 +0000 (09:17 +0200)]
src/liboping.c: Document ping_open_socket().
Also make sure that obj->errmsg is set on all error paths and evaluate
errno as soon as possible so that calls to close() and such don't reset it.
Florian Forster [Fri, 5 May 2017 07:06:17 +0000 (09:06 +0200)]
src/liboping.c: Improve coding style.
Don't have the if-condition and if-body in the same line.
Florian Forster [Fri, 5 May 2017 06:50:50 +0000 (08:50 +0200)]
src/liboping.c: Clean up untidy whitespace.
Florian Forster [Fri, 5 May 2017 06:43:52 +0000 (08:43 +0200)]
Merge remote-tracking branch 'github/master' into lh/performance
Florian Forster [Thu, 4 May 2017 12:08:21 +0000 (14:08 +0200)]
Improve docstring of the history_received field.
Florian Forster [Thu, 4 May 2017 12:07:31 +0000 (14:07 +0200)]
Refactor context_create().
Florian Forster [Thu, 4 May 2017 11:57:22 +0000 (13:57 +0200)]
Assure that no large file descriptors are passed to FD_SET().
When passing a large file descriptor, on many systems large means >= 1024,
FD_SET()s behavior is undefined. Mostly, it will corrupt the stack
because an out-of-bounds bit is flipped.
Florian Forster [Mon, 20 Mar 2017 07:09:20 +0000 (08:09 +0100)]
src/oping.c: Coding style fixes.
This also removes a "for loop initial declaration" which GCC complains
about when not in C99 mode. *sigh*
Hamish Coleman [Mon, 20 Mar 2017 02:19:47 +0000 (10:19 +0800)]
Use the correct macro for hostname max length
Hamish Coleman [Sun, 19 Mar 2017 12:13:56 +0000 (20:13 +0800)]
Whitespace changes
* Ensure that all touched lines use tabs for indentation
* Ensure operators have visible spaces around them
Florian Forster [Sun, 19 Mar 2017 09:53:40 +0000 (10:53 +0100)]
Merge commit 'refs/pull/15/head' of github.com:octo/liboping
Florian Forster [Sun, 19 Mar 2017 09:47:41 +0000 (10:47 +0100)]
Merge commit 'refs/pull/18/head' of github.com:octo/liboping
Fixes: #17
Florian Forster [Sat, 18 Mar 2017 11:18:14 +0000 (12:18 +0100)]
oping: Uset gettimeofday(2) instead of clock_gettime(2).
clock_gettime is not available on Mac OS X :(
Fixes: #19
Hamish Coleman [Fri, 17 Feb 2017 08:02:45 +0000 (16:02 +0800)]
Document the live add key press
Hamish Coleman [Fri, 17 Feb 2017 05:18:58 +0000 (13:18 +0800)]
Remove attempt to scroll old data in main window
Hamish Coleman [Fri, 17 Feb 2017 05:02:47 +0000 (13:02 +0800)]
Allow adding a new host after noping has started
Hamish Coleman [Fri, 17 Feb 2017 05:02:21 +0000 (13:02 +0800)]
Ensure that impossibly latency values do not affect stats
Hamish Coleman [Fri, 17 Feb 2017 05:01:39 +0000 (13:01 +0800)]
Remove unused variable
middleO [Sun, 5 Feb 2017 09:05:39 +0000 (11:05 +0200)]
Modified noping to follow terminal emulators color palette
Thomas Deutschmann [Sun, 15 Jan 2017 06:22:47 +0000 (07:22 +0100)]
configure: Make use of ncurses configurable
When ncurses is found the current build system will use it to build the
"noping" utility. However, that will create an automagic dependencies on
ncurses which is a problem for some distributions.
This commit adds the ability to control the ncurses usage:
a) If the user calls "configure" like before nothing changes: Configure
tries to find a suitable ncurses installation to build "noping". If
not found build system will just skip building of "noping" utility.
b) If the user calls "configure" with new "--with-ncurses" option,
configure will now fail if no suitable ncurses installation was
found.
c) If the user calls "configure" with new "--without-ncurses" option, the
build system will now skip building of "noping" utility and ncurses
will not be used.
In addition, this commit also changes the way configure will detect
ncurses: Configure now tries to use pkg-config to find ncurses but still
falls back to previous legacy checks. This will add support for ncurses
installation built with "--with-termlib" which causes several symbols to
get moved from libncurses.so to libtinfo.so.
Florian Forster [Thu, 18 Aug 2016 04:58:53 +0000 (06:58 +0200)]
Merge branch 'pr/6'
Antoine Beaupré [Mon, 5 Oct 2015 20:09:38 +0000 (16:09 -0400)]
add bell output on successful pings
the rationale here is that it's actually pretty hard to do this with a
regular ping. you need a silly shell loop and it doesn't always work
right everywhere, because the output of the system ping is
platform-dependant. it also buffers stdout in some weird ways sometimes.
therefore, i think it's a great addition to oping.
the purpose of this is that it can be useful to "hear" ping packets
come back when doing network diagnostics. obviously, this will be
useless in finding out *failed* hosts if multiple hosts are selected,
as any sucessful host will produce a beep. but it can nevertheless be
used to trace network cables or problems without looking at the
console. i also use audible pings to let me know when a hosts returns
after a reboot.
Note that I had to struggle quite a bit to make my terminal bell work,
the following articles were used to generate documentation on how to
make that work reliably:
https://askubuntu.com/questions/228096/terminal-bell-doesnt-ring
also see the following for the original inspiration for this:
http://catb.org/jargon/html/P/ping.html
https://groups.google.com/forum/#!msg/comp.sys.next/JDaeD8oqarU/v8xaDS8kXM0J
Florian Forster [Tue, 9 Aug 2016 14:35:15 +0000 (16:35 +0200)]
src/liboping.c: Simplify packet creation and parsing.
Florian Forster [Tue, 9 Aug 2016 14:22:55 +0000 (16:22 +0200)]
src/liboping.c: Replace sizeof(struct icmphdr) with ICMP_MINLEN.
The definitions of struct icmphdr differ between platforms, while
ICMP_MINLEN is always 8, which is what we need here.
Luke Heberling [Sat, 6 Aug 2016 12:46:30 +0000 (14:46 +0200)]
src/liboping.c: Performance improvements.
I'm finding collectd's ping plugin inadequate for host lists larger than
a few hundred. It consumes an entire 2.8Ghz CPU and reports random false
packet loss (Latest collectd and liboping from git.verplant.org on
debian squeeze and lenny). This seems to be because of some
inefficiencies in liboping. For instance, a FD is created for every
host. Since each raw socket receives all raw packets, only one FD would
be needed for all hosts (of the same addrfamily). Besides consuming all
those additional FD's, each reply packet is received and processed
separately on each FD causing O(n^2) complexity. Also for each packet
processed on each FD, a scan of all hosts is performed causing O(n^3).
So, I implemented some new features for liboping:
* use icmp ident as "hash" for table lookup on RX
* allocate one socket FD per addressfamily (not per host)
* multiplex socket writes in the same select loop as reads
* This was necessary because sometimes the first reply
is received before last request is sent.
It's working well for me in testing so far. 1-3% CPU with 1000 hosts,
compared to 100% and useless at 500 hosts before these changes. If
there's interest I'll update this thread with any significant changes.
As always, changes to address style/portability/other issues that
inhibit integration upstream will be my pleasure.
Kyle Zhou [Tue, 2 Aug 2016 12:33:03 +0000 (22:33 +1000)]
Fixed wrong icmp header length (20 extra zeros incorrectly appended to header)
Yann E. MORIN [Tue, 5 Jul 2016 13:31:28 +0000 (15:31 +0200)]
configure: also check for clockgettime()
clock_gettime() is also in -lrt so we also need to
check for it.
Use AC_SEARCH_LIBS() instead of our canned combo of
AC_CHECK_FUNC() + AC_CHECK_LIB(). AC_SEARCH_LIBS()
will automatically add the necessary -l flags to the
LIBS variable, so we don't need out AM_CONDITIONAL()
construct either, now.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Florian Forster [Fri, 1 Jul 2016 14:23:56 +0000 (16:23 +0200)]
src/oping.c: Add missing "break" in handling of the "O" option.
Florian Forster [Mon, 27 Jun 2016 10:49:52 +0000 (12:49 +0200)]
src/oping.c: Actually _comma_ separate output lines.
Florian Forster [Mon, 27 Jun 2016 10:49:32 +0000 (12:49 +0200)]
src/oping.c: Fix calculation of fractional time.
It's "ns", not "us", stoopid!
Florian Forster [Mon, 27 Jun 2016 06:48:35 +0000 (08:48 +0200)]
Update copyright notices.
Florian Forster [Mon, 27 Jun 2016 06:43:44 +0000 (08:43 +0200)]
Bump version to 1.9.0; Update ChangeLog.
Florian Forster [Mon, 27 Jun 2016 06:42:12 +0000 (08:42 +0200)]
src/oping.c: Implement the "-O" option.
This new option allows to write RTT measurements to a CSV file for later
reporting.
Florian Forster [Fri, 13 Feb 2015 13:07:36 +0000 (14:07 +0100)]
src/oping.c: Code style fixes.
Florian Forster [Fri, 13 Feb 2015 13:07:21 +0000 (14:07 +0100)]
oping(1): Document the "-m <mark>" command line option.
Florian Forster [Fri, 13 Feb 2015 13:01:30 +0000 (14:01 +0100)]
oping(1): Correct the lower bound of the box plot.
Florian Forster [Fri, 13 Feb 2015 13:00:59 +0000 (14:00 +0100)]
oping(1): Document the "-w timeout" option.
Florian Forster [Fri, 13 Feb 2015 12:46:06 +0000 (13:46 +0100)]
Merge branches 'mark' and 'timeout'
Florian Forster [Fri, 13 Feb 2015 12:01:13 +0000 (13:01 +0100)]
src/oping.c: Minor coding style changes.
Daniel Collins [Thu, 9 Jan 2014 11:38:54 +0000 (11:38 +0000)]
Implement the "-w <timeout>" command line option.
Daniel Collins [Thu, 9 Jan 2014 11:38:54 +0000 (11:38 +0000)]
oping: Add the "-m <mark>" command line option.
This exposes the new "MARK" functionatlity to command line users.
Daniel Collins [Thu, 9 Jan 2014 11:38:54 +0000 (11:38 +0000)]
liboping: Add support for SO_MARK.
Marks packets, which can be used for filtering and routing in Linux.
Florian Forster [Fri, 13 Feb 2015 11:39:26 +0000 (12:39 +0100)]
oping(1): Update fping's URL.
Thanks to Vincent Legout for reporting this issue.
Florian Forster [Thu, 27 Nov 2014 07:52:23 +0000 (08:52 +0100)]
Change the project's website to noping.cc/ everywhere.
Also change my preferred email address.
Florian Forster [Thu, 20 Nov 2014 14:33:43 +0000 (15:33 +0100)]
Bump version to 1.8.0; Update ChangeLog.
Florian Forster [Thu, 20 Nov 2014 13:46:40 +0000 (14:46 +0100)]
src/oping.c: Fix status output.
This is a really dirty hack: If the percentile and/or median output
decreases, the output may have less characters than previously. Add
spaces at the end of the string to clear digits with may have been
there, to avoid the "maximum" value be appear to go through the roof.
Florian Forster [Thu, 20 Nov 2014 13:35:53 +0000 (14:35 +0100)]
src/oping.c: Fix pretty ping graph movement.
Fixed the wrap-around case and adds support for windows larger than the
history size.
Florian Forster [Thu, 20 Nov 2014 11:42:03 +0000 (12:42 +0100)]
src/oping.c: Improve comments.
Also remove dead code.
Florian Forster [Thu, 20 Nov 2014 11:03:56 +0000 (12:03 +0100)]
src/oping.c: Change the order of graphs.
Florian Forster [Wed, 19 Nov 2014 17:08:14 +0000 (18:08 +0100)]
src/oping.c: Switch graphs when pressing "g".
Florian Forster [Wed, 19 Nov 2014 16:59:33 +0000 (17:59 +0100)]
src/oping.c: Rewrite of the percentile code.
Rather than bucketizing RTTs and approximating the percentile, keep the
last 900 replies (15 minutes by default) in memory and calculate the
percentile from that.
This allows the "prettyping" graph to "move to the left", which is a much
nicer user experience IMHO.
Florian Forster [Tue, 18 Nov 2014 17:23:56 +0000 (18:23 +0100)]
src/oping.c: Add median and 'n'th percentile, remove average and stddev.
Average and standard deviation are not very useful for network latency.
Median and (95th) percentiles are routinely used to measure network
performance, so provide them instead.
Florian Forster [Tue, 18 Nov 2014 16:43:11 +0000 (17:43 +0100)]
src/oping.c: Exit early if no host could be resolved.
Otherwise "noping" would drop the user into an empty ncurses window,
which is very confusing, annoying and unexpected.
Florian Forster [Sun, 12 Oct 2014 15:32:47 +0000 (17:32 +0200)]
src/oping.c: Define thresholds for coloring green and yellow in a central place.
Florian Forster [Sun, 12 Oct 2014 15:32:06 +0000 (17:32 +0200)]
src/oping.c: Make sure the reported percentile value doesn't exceed the maximum.
Florian Forster [Sun, 12 Oct 2014 15:31:41 +0000 (17:31 +0200)]
noping: Color response times based on their percentile.
Update the histogram's "ratio" array after ever response and use that to
color the response time in the noping application.
Florian Forster [Fri, 10 Oct 2014 10:53:40 +0000 (12:53 +0200)]
oping manual page: Document the "-g histogram" option.
Florian Forster [Thu, 9 Oct 2014 20:50:41 +0000 (22:50 +0200)]
src/oping.c: Add a "-g histrogram" option.
Florian Forster [Thu, 9 Oct 2014 14:39:00 +0000 (16:39 +0200)]
noping: Add the "-g" option.
Florian Forster [Thu, 9 Oct 2014 10:36:09 +0000 (12:36 +0200)]
Initial implementation of a box plot.
Still needs a command line switch and documentation.
Florian Forster [Sun, 28 Sep 2014 09:17:26 +0000 (02:17 -0700)]
oping, noping: Implement percentile reporting.
Florian Forster [Thu, 25 Sep 2014 19:29:11 +0000 (12:29 -0700)]
configure.ac: Change homepage and bug report address.
Florian Forster [Thu, 25 Sep 2014 19:23:10 +0000 (12:23 -0700)]
liboping.pc: Let configure create the pkg-config file.
Florian Forster [Thu, 25 Sep 2014 17:39:31 +0000 (10:39 -0700)]
Bump version to 1.7.0; Update ChangeLog.
Florian Forster [Thu, 25 Sep 2014 00:22:44 +0000 (17:22 -0700)]
Merge pull request #4 from barak/upstream
minor build system tweaks, to generate oping.pc file for pkg-config oping
Florian Forster [Thu, 25 Sep 2014 00:10:54 +0000 (17:10 -0700)]
Merge branch 'bp/exit'
Conflicts:
src/mans/oping.pod
src/oping.c
Florian Forster [Wed, 24 Sep 2014 23:55:36 +0000 (16:55 -0700)]
Merge branch 'ab/prettyping'
Florian Forster [Wed, 24 Sep 2014 23:44:58 +0000 (16:44 -0700)]
Make the prettyping output work with and without colors.
Barak A. Pearlmutter [Thu, 22 May 2014 22:20:32 +0000 (23:20 +0100)]
simplify autogen.sh
Barak A. Pearlmutter [Thu, 22 May 2014 22:12:53 +0000 (23:12 +0100)]
generate and install oping.pc file, for pkg-config oping
Barak A. Pearlmutter [Thu, 22 May 2014 22:12:12 +0000 (23:12 +0100)]
add bug email and project url to configure.ac AC_INIT
Florian Forster [Tue, 14 Jan 2014 12:36:33 +0000 (13:36 +0100)]
ping_receive_all(): Return immediately when select(2) is interrupted.
Previously the function would continue and only return when all hosts
were received or a timeout occurred. This meant that hitting ^C would
only stop "oping" after half a second or so. This this, oping also exits
immediately.
Florian Forster [Fri, 10 Jan 2014 11:28:02 +0000 (12:28 +0100)]
Add support for both, ncurses and ncursesw.
Florian Forster [Fri, 6 Dec 2013 10:02:35 +0000 (11:02 +0100)]
Add documentation for the "-u" and "-U" options.
Florian Forster [Fri, 6 Dec 2013 09:52:22 +0000 (10:52 +0100)]
src/oping.h: Don't use the ncurses internal _nc_unicode_locale() function.
The "-u" and "-U" options are now handled in a single variable so that the
last option "wins".
Antoine Beaupré [Fri, 6 Dec 2013 05:16:28 +0000 (00:16 -0500)]
add commandline flag for forcing or disabling unicode
note that "forcing" may not work: ncurses still expects your locale to
be correct, so maybe the force flag should also explicitely set a utf8
locale?
Antoine Beaupré [Fri, 6 Dec 2013 05:07:09 +0000 (00:07 -0500)]
move unicode detection to a separate function
this will ease transition to a commandline option override
Antoine Beaupré [Fri, 6 Dec 2013 04:35:00 +0000 (23:35 -0500)]
autodetect unicode, and fallback to ACS scancodes on failure
this is fairly ugly - we use a hidden ncurses function to detect
unicode (but at least we don't reimplement it), then we mess around
with the character arrays to display the rights symbols
i am not sure i like this, but i prefer to braindump than to stall, so
let's move forward.
Florian Forster [Thu, 5 Dec 2013 17:15:52 +0000 (18:15 +0100)]
Refactor the graph printing into its own function.
This makes it much easier and cleaner to add a second, non-Unicode
implementation and possibly even a non-color version.
Antoine Beaupré [Tue, 3 Dec 2013 05:33:39 +0000 (00:33 -0500)]
switch to ncursesw in the build chain
Florian Forster [Tue, 3 Dec 2013 14:33:18 +0000 (15:33 +0100)]
Merge remote-tracking branch 'anarcat/autogen'
Antoine Beaupré [Tue, 3 Dec 2013 05:34:32 +0000 (00:34 -0500)]
ignore generated file