diff --git a/sbin/ping/ping.8 b/sbin/ping/ping.8 index 9a29388d3f35..509b010a78d9 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 3b573c6296c4..1209dc894090 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];