summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2001-05-24 09:17:52 +0000
committerphk <phk@FreeBSD.org>2001-05-24 09:17:52 +0000
commitf77345ea800c2b51c9688ef79af6b5826eb2712e (patch)
tree8cb3f23c7687335518af5fef193b04a543065fd4
parent4474a53d43ac9275a9eb0a2fda8efa7f9c18fe0d (diff)
downloadFreeBSD-src-f77345ea800c2b51c9688ef79af6b5826eb2712e.zip
FreeBSD-src-f77345ea800c2b51c9688ef79af6b5826eb2712e.tar.gz
Add a -A option to ping which beeps when packets are lost.
PR: 11818 Submitted by: Marc Evans marc@destek.net
-rw-r--r--sbin/ping/ping.88
-rw-r--r--sbin/ping/ping.c12
2 files changed, 17 insertions, 3 deletions
diff --git a/sbin/ping/ping.8 b/sbin/ping/ping.8
index 9a29388..509b010 100644
--- a/sbin/ping/ping.8
+++ b/sbin/ping/ping.8
@@ -42,7 +42,7 @@
packets to network hosts
.Sh SYNOPSIS
.Nm
-.Op Fl QRadfnqrv
+.Op Fl AQRadfnqrv
.Op Fl c Ar count
.Op Fl i Ar wait
.Op Fl l Ar preload
@@ -79,6 +79,12 @@ and then an arbitrary number of
.Dq pad
bytes used to fill out the packet. The options are as follows:
.Bl -tag -width indent
+.It Fl A
+Audible.
+Include a bell
+.Pq ASCII 0x07
+character in the output when no packet is received before the next packet
+is transmitted.
.It Fl a
Audible.
Include a bell
diff --git a/sbin/ping/ping.c b/sbin/ping/ping.c
index 3b573c6..1209dc8 100644
--- a/sbin/ping/ping.c
+++ b/sbin/ping/ping.c
@@ -135,6 +135,7 @@ int options;
#endif /*IPSEC_POLICY_IPSEC*/
#endif /*IPSEC*/
#define F_TTL 0x8000
+#define F_MISSED 0x10000
/*
* MAX_DUP_CHK is the number of bits in received table, i.e. the maximum
@@ -150,6 +151,7 @@ int datalen = DEFDATALEN;
int s; /* socket file descriptor */
u_char outpack[MAXPACKET];
char BSPACE = '\b'; /* characters written for flood */
+char BBELL = '\a'; /* characters written for MISSED and AUDIBLE */
char DOT = '.';
char *hostname;
char *shostname;
@@ -236,7 +238,7 @@ main(argc, argv)
datap = &outpack[8 + PHDR_LEN];
while ((ch = getopt(argc, argv,
- "I:LQRS:T:c:adfi:l:m:np:qrs:t:v"
+ "AI:LQRS:T:c:adfi:l:m:np:qrs:t:v"
#ifdef IPSEC
#ifdef IPSEC_POLICY_IPSEC
"P:"
@@ -245,6 +247,9 @@ main(argc, argv)
)) != -1)
{
switch(ch) {
+ case 'A':
+ options |= F_MISSED;
+ break;
case 'a':
options |= F_AUDIBLE;
break;
@@ -695,6 +700,9 @@ main(argc, argv)
intvl.tv_sec = MAXWAIT;
}
(void)gettimeofday(&last, NULL);
+
+ if (ntransmitted != nreceived+1 && options & F_MISSED)
+ (void)write(STDOUT_FILENO, &BBELL, 1);
}
}
finish();
@@ -855,7 +863,7 @@ pr_pack(buf, cc, from, tv)
if (dupflag)
(void)printf(" (DUP!)");
if (options & F_AUDIBLE)
- (void)printf("\a");
+ (void)write(STDOUT_FILENO, &BBELL, 1);
/* check the data */
cp = (u_char*)&icp->icmp_data[PHDR_LEN];
dp = &outpack[8 + PHDR_LEN];
OpenPOWER on IntegriCloud