diff options
author | dd <dd@FreeBSD.org> | 2002-10-02 03:24:27 +0000 |
---|---|---|
committer | dd <dd@FreeBSD.org> | 2002-10-02 03:24:27 +0000 |
commit | e49b56bfca88ba96da91bc14f9dfc149741da965 (patch) | |
tree | e57064d8a849900780d05e95486ed114ebe853dc /sbin/ping | |
parent | 4be0d09ad35a2492cce9a9a891c2c800ad5c9669 (diff) | |
download | FreeBSD-src-e49b56bfca88ba96da91bc14f9dfc149741da965.zip FreeBSD-src-e49b56bfca88ba96da91bc14f9dfc149741da965.tar.gz |
Add an -o option to exit after receiving one reply. This can be used
to test whether a link is live.
PR: 38573
Submitted by: David Taylor <davidt@yadt.co.uk>
Obtained from: NetBSD
Diffstat (limited to 'sbin/ping')
-rw-r--r-- | sbin/ping/ping.8 | 6 | ||||
-rw-r--r-- | sbin/ping/ping.c | 11 |
2 files changed, 12 insertions, 5 deletions
diff --git a/sbin/ping/ping.8 b/sbin/ping/ping.8 index 9f05cff..b71d138 100644 --- a/sbin/ping/ping.8 +++ b/sbin/ping/ping.8 @@ -32,7 +32,7 @@ .\" @(#)ping.8 8.2 (Berkeley) 12/11/93 .\" $FreeBSD$ .\" -.Dd September 25, 2001 +.Dd October 2, 2002 .Dt PING 8 .Os .Sh NAME @@ -42,7 +42,7 @@ packets to network hosts .Sh SYNOPSIS .Nm -.Op Fl AQRadfnqrv +.Op Fl AQRadfnoqrv .Op Fl c Ar count .Op Fl i Ar wait .Op Fl l Ar preload @@ -160,6 +160,8 @@ This flag only applies if the ping destination is a multicast address. .It Fl n Numeric output only. No attempt will be made to lookup symbolic names for host addresses. +.It Fl o +Exit successfully after receiving one reply packet. .It Fl p Ar pattern You may specify up to 16 .Dq pad diff --git a/sbin/ping/ping.c b/sbin/ping/ping.c index ca7a69b..99a4c0e 100644 --- a/sbin/ping/ping.c +++ b/sbin/ping/ping.c @@ -137,6 +137,7 @@ int options; #endif /*IPSEC*/ #define F_TTL 0x8000 #define F_MISSED 0x10000 +#define F_ONCE 0x20000 /* * MAX_DUP_CHK is the number of bits in received table, i.e. the maximum @@ -242,7 +243,7 @@ main(argc, argv) datap = &outpack[MINICMPLEN + PHDR_LEN]; while ((ch = getopt(argc, argv, - "AI:LQRS:T:c:adfi:l:m:np:qrs:t:v" + "AI:LQRS:T:c:adfi:l:m:nop:qrs:t:v" #ifdef IPSEC #ifdef IPSEC_POLICY_IPSEC "P:" @@ -320,6 +321,9 @@ main(argc, argv) case 'n': options |= F_NUMERIC; break; + case 'o': + options |= F_ONCE; + break; case 'p': /* fill buffer with user pattern */ options |= F_PINGFILLED; fill((char *)datap, optarg); @@ -696,7 +700,8 @@ main(argc, argv) t = &now; } pr_pack((char *)packet, cc, &from, t); - if (npackets && nreceived >= npackets) + if (options & F_ONCE && nreceived || + npackets && nreceived >= npackets) break; } if (n == 0 || options & F_FLOOD) { @@ -1441,7 +1446,7 @@ static void usage() { (void)fprintf(stderr, "%s\n%s\n%s\n", -"usage: ping [-AQRadfnqrv] [-c count] [-i wait] [-l preload] [-m ttl]", +"usage: ping [-AQRadfnoqrv] [-c count] [-i wait] [-l preload] [-m ttl]", " [-p pattern] " #ifdef IPSEC #ifdef IPSEC_POLICY_IPSEC |