Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F115190660
D34882.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D34882.diff
View Options
diff --git a/sbin/ping/main.h b/sbin/ping/main.h
--- a/sbin/ping/main.h
+++ b/sbin/ping/main.h
@@ -40,7 +40,7 @@
#else
#define PING4ADDOPTS
#endif
-#define PING4OPTS "4AaC:c:DdfG:g:Hh:I:i:Ll:M:m:nop:QqRrS:s:T:t:vW:z:" PING4ADDOPTS
+#define PING4OPTS ".::4AaC:c:DdfG:g:Hh:I:i:Ll:M:m:nop:QqRrS:s:T:t:vW:z:" PING4ADDOPTS
#if defined(INET6) && defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
#define PING6ADDOPTS "P:"
@@ -49,7 +49,7 @@
#else
#define PING6ADDOPTS
#endif
-#define PING6OPTS "6Aab:C:c:Dde:fHI:i:k:l:m:nNoOp:qS:s:t:uvyYW:z:" PING6ADDOPTS
+#define PING6OPTS ".::6Aab:C:c:Dde:fHI:i:k:l:m:nNoOp:qS:s:t:uvyYW:z:" PING6ADDOPTS
void usage(void) __dead2;
diff --git a/sbin/ping/ping.8 b/sbin/ping/ping.8
--- a/sbin/ping/ping.8
+++ b/sbin/ping/ping.8
@@ -41,6 +41,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl 4AaDdfHnoQqRrv
+.Op Fl .\& Ns Ar chars
.Op Fl C Ar pcp
.Op Fl c Ar count
.Op Fl G Ar sweepmaxsize
@@ -60,6 +61,7 @@
.Ar IPv4-host
.Nm
.Op Fl 4AaDdfHLnoQqRrv
+.Op Fl .\& Ns Ar chars
.Op Fl C Ar pcp
.Op Fl c Ar count
.Op Fl I Ar iface
@@ -78,6 +80,7 @@
.Ar IPv4-mcast-group
.Nm
.Op Fl 6AaDdEfHNnOoquvYyZ
+.Op Fl .\& Ns Ar chars
.Op Fl b Ar bufsiz
.Op Fl c Ar count
.Op Fl e Ar gateway
@@ -145,6 +148,22 @@
.Nm ping6 .
.Ss Options common to both IPv4 and IPv6 targets
.Bl -tag -width indent
+.It Fl .\& Ns Ar chars
+By default, for every
+.Tn ECHO_REQUEST
+sent, a period
+.Dq .\&
+is printed, while for every
+.Tn ECHO_REPLY
+received, a backspace is printed.
+This option takes an optional string argument listing characters
+that will be printed one by one in the provided order
+instead of the default period.
+.Pp
+Example usage:
+.Bd -literal -offset indent
+ping -.0123456789 freebsd.org
+.Ed
.It Fl A
Audible.
Output a bell
@@ -188,13 +207,13 @@
Flood ping.
Outputs packets as fast as they come back or one hundred times per second,
whichever is more.
-For every
+Implies
+.Fl .\&
+to print a period for every
.Tn ECHO_REQUEST
-sent a period
-.Dq .\&
-is printed, while for every
+sent and a backspace for every
.Tn ECHO_REPLY
-received a backspace is printed.
+received.
This provides a rapid display of how many packets are being dropped.
Only the super-user may use this option.
.Bf -emphasis
diff --git a/sbin/ping/ping.c b/sbin/ping/ping.c
--- a/sbin/ping/ping.c
+++ b/sbin/ping/ping.c
@@ -158,6 +158,7 @@
#define F_SWEEP 0x200000
#define F_WAITTIME 0x400000
#define F_IP_VLAN_PCP 0x800000
+#define F_DOT 0x1000000
/*
* MAX_DUP_CHK is the number of bits in received table, i.e. the maximum
@@ -176,7 +177,9 @@
static u_char outpackhdr[IP_MAXPACKET], *outpack;
static char BBELL = '\a'; /* characters written for MISSED and AUDIBLE */
static char BSPACE = '\b'; /* characters written for flood */
-static char DOT = '.';
+static const char *DOT = ".";
+static size_t DOTlen = 1;
+static size_t DOTidx = 0;
static char *hostname;
static char *shostname;
static int ident; /* process id to identify our packets */
@@ -303,6 +306,13 @@
outpack = outpackhdr + sizeof(struct ip);
while ((ch = getopt(argc, argv, PING4OPTS)) != -1) {
switch(ch) {
+ case '.':
+ options |= F_DOT;
+ if (optarg != NULL) {
+ DOT = optarg;
+ DOTlen = strlen(optarg);
+ }
+ break;
case '4':
/* This option is processed in main(). */
break;
@@ -340,6 +350,7 @@
err(EX_NOPERM, "-f flag");
}
options |= F_FLOOD;
+ options |= F_DOT;
setbuf(stdout, (char *)NULL);
break;
case 'G': /* Maximum packet size for ping sweep */
@@ -1114,8 +1125,8 @@
}
ntransmitted++;
sntransmitted++;
- if (!(options & F_QUIET) && options & F_FLOOD)
- (void)write(STDOUT_FILENO, &DOT, 1);
+ if (!(options & F_QUIET) && options & F_DOT)
+ (void)write(STDOUT_FILENO, &DOT[DOTidx++ % DOTlen], 1);
}
/*
@@ -1220,7 +1231,7 @@
return;
}
- if (options & F_FLOOD)
+ if (options & F_DOT)
(void)write(STDOUT_FILENO, &BSPACE, 1);
else {
(void)printf("%zd bytes from %s: icmp_seq=%u", cc,
@@ -1361,7 +1372,7 @@
}
if (i == old_rrlen
&& !bcmp((char *)cp, old_rr, i)
- && !(options & F_FLOOD)) {
+ && !(options & F_DOT)) {
(void)printf("\t(same route)");
hlen -= i;
cp += i;
@@ -1396,7 +1407,7 @@
(void)printf("\nunknown option %x", *cp);
break;
}
- if (!(options & F_FLOOD)) {
+ if (!(options & F_DOT)) {
(void)putchar('\n');
(void)fflush(stdout);
}
diff --git a/sbin/ping/ping6.c b/sbin/ping/ping6.c
--- a/sbin/ping/ping6.c
+++ b/sbin/ping/ping6.c
@@ -201,6 +201,7 @@
#define F_DONTFRAG 0x1000000
#define F_NOUSERDATA (F_NODEADDR | F_FQDN | F_FQDNOLD | F_SUPTYPES)
#define F_WAITTIME 0x2000000
+#define F_DOT 0x4000000
static u_int options;
#define IN6LEN sizeof(struct in6_addr)
@@ -227,7 +228,9 @@
static u_char outpack[MAXPACKETLEN];
static char BSPACE = '\b'; /* characters written for flood */
static char BBELL = '\a'; /* characters written for AUDIBLE */
-static char DOT = '.';
+static const char *DOT = ".";
+static size_t DOTlen = 1;
+static size_t DOTidx = 0;
static char *hostname;
static int ident; /* process id to identify our packets */
static u_int8_t nonce[8]; /* nonce field for node information */
@@ -352,6 +355,13 @@
while ((ch = getopt(argc, argv, PING6OPTS)) != -1) {
switch (ch) {
+ case '.':
+ options |= F_DOT;
+ if (optarg != NULL) {
+ DOT = optarg;
+ DOTlen = strlen(optarg);
+ }
+ break;
case '6':
/* This option is processed in main(). */
break;
@@ -437,6 +447,7 @@
errx(1, "Must be superuser to flood ping");
}
options |= F_FLOOD;
+ options |= F_DOT;
setbuf(stdout, (char *)NULL);
break;
case 'e':
@@ -1463,8 +1474,8 @@
(void)printf("ping6: wrote %s %d chars, ret=%d\n",
hostname, cc, i);
}
- if (!(options & F_QUIET) && options & F_FLOOD)
- (void)write(STDOUT_FILENO, &DOT, 1);
+ if (!(options & F_QUIET) && options & F_DOT)
+ (void)write(STDOUT_FILENO, &DOT[DOTidx++ % DOTlen], 1);
return(0);
}
@@ -1661,7 +1672,7 @@
return;
}
- if (options & F_FLOOD)
+ if (options & F_DOT)
(void)write(STDOUT_FILENO, &BSPACE, 1);
else {
if (options & F_AUDIBLE)
@@ -1853,7 +1864,7 @@
pr_icmph(icp, end);
}
- if (!(options & F_FLOOD)) {
+ if (!(options & F_DOT)) {
(void)putchar('\n');
if (options & F_VERBOSE)
pr_exthdrs(mhdr);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Apr 22, 7:14 AM (1 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17697994
Default Alt Text
D34882.diff (6 KB)
Attached To
Mode
D34882: ping: split the visual part of -f into a new option -.
Attached
Detach File
Event Timeline
Log In to Comment