Add -o option to match ping(8)

Reviewed by:	dwmalone, maxim
MFC after:	2 weeks
This commit is contained in:
Dima Dorfman 2007-11-20 01:58:34 +00:00
parent 56589eb7b4
commit 3ad1a3ea69
2 changed files with 12 additions and 5 deletions

View File

@ -29,7 +29,7 @@
.\" .\"
.\" $FreeBSD$ .\" $FreeBSD$
.\" .\"
.Dd May 17, 1998 .Dd November 15, 2007
.Dt PING6 8 .Dt PING6 8
.Os .Os
.Sh NAME .Sh NAME
@ -40,7 +40,7 @@ packets to network hosts
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.\" without ipsec, or new ipsec .\" without ipsec, or new ipsec
.Op Fl dfHmnNqtvwW .Op Fl dfHmnNoqtvwW
.\" old ipsec .\" old ipsec
.\" .Op Fl AdEfmnNqRtvwW .\" .Op Fl AdEfmnNqRtvwW
.Bk -words .Bk -words
@ -225,6 +225,8 @@ Since node information multicast group is a link-local multicast group,
outgoing interface needs to be specified by outgoing interface needs to be specified by
.Fl I .Fl I
option. option.
.It Fl o
Exit successfully after receiving one reply packet.
.It Fl p Ar pattern .It Fl p Ar pattern
You may specify up to 16 You may specify up to 16
.Dq pad .Dq pad

View File

@ -188,6 +188,7 @@ struct tv32 {
#define F_NIGROUP 0x40000 #define F_NIGROUP 0x40000
#define F_SUPTYPES 0x80000 #define F_SUPTYPES 0x80000
#define F_NOMINMTU 0x100000 #define F_NOMINMTU 0x100000
#define F_ONCE 0x200000
#define F_NOUSERDATA (F_NODEADDR | F_FQDN | F_FQDNOLD | F_SUPTYPES) #define F_NOUSERDATA (F_NODEADDR | F_FQDN | F_FQDNOLD | F_SUPTYPES)
u_int options; u_int options;
@ -344,7 +345,7 @@ main(argc, argv)
#endif /*IPSEC_POLICY_IPSEC*/ #endif /*IPSEC_POLICY_IPSEC*/
#endif #endif
while ((ch = getopt(argc, argv, while ((ch = getopt(argc, argv,
"a:b:c:dfHg:h:I:i:l:mnNp:qS:s:tvwW" ADDOPTS)) != -1) { "a:b:c:dfHg:h:I:i:l:mnNop:qS:s:tvwW" ADDOPTS)) != -1) {
#undef ADDOPTS #undef ADDOPTS
switch (ch) { switch (ch) {
case 'a': case 'a':
@ -485,6 +486,9 @@ main(argc, argv)
case 'N': case 'N':
options |= F_NIGROUP; options |= F_NIGROUP;
break; break;
case 'o':
options |= F_ONCE;
break;
case 'p': /* fill buffer with user pattern */ case 'p': /* fill buffer with user pattern */
options |= F_PINGFILLED; options |= F_PINGFILLED;
fill((char *)datap, optarg); fill((char *)datap, optarg);
@ -1164,7 +1168,8 @@ main(argc, argv)
*/ */
pr_pack(packet, cc, &m); pr_pack(packet, cc, &m);
} }
if (npackets && nreceived >= npackets) if (((options & F_ONCE) != 0 && nreceived > 0) ||
(npackets > 0 && nreceived >= npackets))
break; break;
} }
summary(); summary();
@ -2763,7 +2768,7 @@ usage()
#ifdef IPV6_USE_MIN_MTU #ifdef IPV6_USE_MIN_MTU
"m" "m"
#endif #endif
"nNqtvwW] " "nNoqtvwW] "
"[-a addrtype] [-b bufsiz] [-c count] [-g gateway]\n" "[-a addrtype] [-b bufsiz] [-c count] [-g gateway]\n"
" [-h hoplimit] [-I interface] [-i wait] [-l preload]" " [-h hoplimit] [-I interface] [-i wait] [-l preload]"
#if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC) #if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)