Code

add bell output on successful pings
authorAntoine Beaupré <anarcat@koumbit.org>
Mon, 5 Oct 2015 20:09:38 +0000 (16:09 -0400)
committerAntoine Beaupré <anarcat@debian.org>
Wed, 17 Aug 2016 18:30:47 +0000 (14:30 -0400)
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

src/mans/oping.pod
src/oping.c

index 6f1f5c300721580f5d72c6c7b4d99338e84fe913..f1e08071d1119311caf0f791507475e3bddb272e 100644 (file)
@@ -238,6 +238,50 @@ remainder.
 
 =back
 
 
 =back
 
+=item B<-b>
+
+Audible bell. Print a ASCII BEL character (\a or 0x07) when a packet
+is received before the timeout occurs. This can be useful in order to
+monitory hosts' connectivity without looking physically at the
+console, for example to trace network cables (start audible beep,
+disconnect cable N: if beep stops, the cable was in use) or to tell
+when a host returns from a reboot.
+
+This relies on the terminal bell to be functional. To enable the
+terminal bell, use the following instructions.
+
+=over 4
+
+=item
+
+the visual bell is disabled in your terminal emulator, with the +vb
+commandline flag or the following in your .Xresources:
+
+ XTerm*visualBell: false
+
+=item
+
+the PC speaker module is loaded in your kernel:
+
+ modprobe pcspkr
+
+=item
+
+X11 has the terminal bell enabled:
+
+ xset b on; xset b 100
+
+=item
+
+and finally, if you are using PulseAudio, that the module-x11-bell
+module is loaded with a pre-loaded sample defined in your pulseaudio
+configuration:
+
+ load-sample-lazy x11-bell /usr/share/sounds/freedesktop/stereo/complete.oga
+ load-module module-x11-bell sample=x11-bell
+
+=back
+
 =item B<-P> I<percent>
 
 Configures the latency percentile to report. I<percent> must be a number
 =item B<-P> I<percent>
 
 Configures the latency percentile to report. I<percent> must be a number
index 3e114f574acfbacae5026a258ba2f17d91aaa014..0ec67947310e7b73d5d8ae1cb8afbf016bdc0577 100644 (file)
@@ -209,6 +209,7 @@ static int     opt_show_graph = 1;
 static int     opt_utf8       = 0;
 #endif
 static char   *opt_outfile    = NULL;
 static int     opt_utf8       = 0;
 #endif
 static char   *opt_outfile    = NULL;
+static int     opt_bell       = 0;
 
 static int host_num  = 0;
 static FILE *outfile = NULL;
 
 static int host_num  = 0;
 static FILE *outfile = NULL;
@@ -652,7 +653,7 @@ static int read_options (int argc, char **argv) /* {{{ */
 
        while (1)
        {
 
        while (1)
        {
-               optchar = getopt (argc, argv, "46c:hi:I:t:Q:f:D:Z:O:P:m:w:"
+               optchar = getopt (argc, argv, "46c:hi:I:t:Q:f:D:Z:O:P:m:w:b"
 #if USE_NCURSES
                                "uUg:"
 #endif
 #if USE_NCURSES
                                "uUg:"
 #endif
@@ -790,6 +791,9 @@ static int read_options (int argc, char **argv) /* {{{ */
                                opt_utf8 = 1;
                                break;
 #endif
                                opt_utf8 = 1;
                                break;
 #endif
+                       case 'b':
+                               opt_bell = 1;
+                               break;
 
                        case 'Z':
                        {
 
                        case 'Z':
                        {
@@ -1575,6 +1579,13 @@ static void update_host_hook (pingobj_iter_t *iter, /* {{{ */
 #if USE_NCURSES
                }
 #endif
 #if USE_NCURSES
                }
 #endif
+                if (opt_bell) {
+#if USE_NCURSES
+                       beep();
+#else
+                       HOST_PRINTF ("\a");
+#endif
+                }
        }
        else /* if (!(latency > 0.0)) */
        {
        }
        else /* if (!(latency > 0.0)) */
        {