The ping(8) utility has an -o switch that tells it to exit after
receiving the first reply. This is useful, but ping6(8) doesn't have
it.

Simple patch attached.

Comments/reviews/whatnots?

I'll commit to HEAD in a few days if I don't hear any objections.

--
Dima Dorfman
Index: ping6.8
===================================================================
RCS file: /home/ncvs/src/sbin/ping6/ping6.8,v
retrieving revision 1.23
diff -u -r1.23 ping6.8
--- ping6.8     10 Feb 2005 09:19:32 -0000      1.23
+++ ping6.8     15 Nov 2007 11:44:31 -0000
@@ -29,7 +29,7 @@
 .\"
 .\" $FreeBSD: src/sbin/ping6/ping6.8,v 1.23 2005/02/10 09:19:32 ru Exp $
 .\"
-.Dd May 17, 1998
+.Dd November 15, 2007
 .Dt PING6 8
 .Os
 .Sh NAME
@@ -40,7 +40,7 @@
 .Sh SYNOPSIS
 .Nm
 .\" without ipsec, or new ipsec
-.Op Fl dfHmnNqtvwW
+.Op Fl dfHmnNoqtvwW
 .\" old ipsec
 .\" .Op Fl AdEfmnNqRtvwW
 .Bk -words
@@ -225,6 +225,8 @@
 outgoing interface needs to be specified by
 .Fl I
 option.
+.It Fl o
+Exit successfully after receiving one reply packet.
 .It Fl p Ar pattern
 You may specify up to 16
 .Dq pad
Index: ping6.c
===================================================================
RCS file: /home/ncvs/src/sbin/ping6/ping6.c,v
retrieving revision 1.31
diff -u -r1.31 ping6.c
--- ping6.c     1 Jul 2007 12:08:06 -0000       1.31
+++ ping6.c     15 Nov 2007 11:45:12 -0000
@@ -188,6 +188,7 @@
 #define F_NIGROUP      0x40000
 #define F_SUPTYPES     0x80000
 #define F_NOMINMTU     0x100000
+#define F_ONCE         0x200000
 #define F_NOUSERDATA   (F_NODEADDR | F_FQDN | F_FQDNOLD | F_SUPTYPES)
 u_int options;
 
@@ -344,7 +345,7 @@
 #endif /*IPSEC_POLICY_IPSEC*/
 #endif
        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
                switch (ch) {
                case 'a':
@@ -485,6 +486,9 @@
                case 'N':
                        options |= F_NIGROUP;
                        break;
+               case 'o':
+                       options |= F_ONCE;
+                       break;
                case 'p':               /* fill buffer with user pattern */
                        options |= F_PINGFILLED;
                        fill((char *)datap, optarg);
@@ -1164,7 +1168,8 @@
                         */
                        pr_pack(packet, cc, &m);
                }
-               if (npackets && nreceived >= npackets)
+               if (( (options & F_ONCE) != 0 && nreceived > 0) ||
+                   (npackets > 0 && nreceived >= npackets))
                        break;
        }
        summary();
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to