o Add do-not-fragment option support to ping6(8).

PR:		bin/145759
Submitted by:	pluknet
MFC after:	1 month
This commit is contained in:
Maxim Konovalov 2010-04-20 06:10:05 +00:00
parent 5d4a7b7945
commit a8734ffdb3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=206889
2 changed files with 16 additions and 6 deletions

View File

@ -29,7 +29,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd August 27, 2008
.Dd April 20, 2010
.Dt PING6 8
.Os
.Sh NAME
@ -40,9 +40,9 @@ packets to network hosts
.Sh SYNOPSIS
.Nm
.\" without ipsec, or new ipsec
.Op Fl dfHmnNoqrRtvwW
.Op Fl DdfHmnNoqrRtvwW
.\" old ipsec
.\" .Op Fl AdEfmnNqRtvwW
.\" .Op Fl ADdEfmnNqRtvwW
.Bk -words
.Op Fl a Ar addrtype
.Ek
@ -141,6 +141,8 @@ Stop after sending
.Ar count
.Tn ECHO_RESPONSE
packets.
.It Fl D
Disable IPv6 fragmentation.
.It Fl d
Set the
.Dv SO_DEBUG

View File

@ -191,6 +191,7 @@ struct tv32 {
#define F_ONCE 0x200000
#define F_AUDIBLE 0x400000
#define F_MISSED 0x800000
#define F_DONTFRAG 0x1000000
#define F_NOUSERDATA (F_NODEADDR | F_FQDN | F_FQDNOLD | F_SUPTYPES)
u_int options;
@ -349,7 +350,7 @@ main(argc, argv)
#endif /*IPSEC_POLICY_IPSEC*/
#endif
while ((ch = getopt(argc, argv,
"a:b:c:dfHg:h:I:i:l:mnNop:qrRS:s:tvwW" ADDOPTS)) != -1) {
"a:b:c:DdfHg:h:I:i:l:mnNop:qrRS:s:tvwW" ADDOPTS)) != -1) {
#undef ADDOPTS
switch (ch) {
case 'a':
@ -415,6 +416,9 @@ main(argc, argv)
errx(1,
"illegal number of packets -- %s", optarg);
break;
case 'D':
options |= F_DONTFRAG;
break;
case 'd':
options |= F_SO_DEBUG;
break;
@ -742,7 +746,11 @@ main(argc, argv)
for (i = 0; i < sizeof(nonce); i += sizeof(u_int32_t))
*((u_int32_t *)&nonce[i]) = arc4random();
#endif
optval = 1;
if (options & F_DONTFRAG)
if (setsockopt(s, IPPROTO_IPV6, IPV6_DONTFRAG,
&optval, sizeof(optval)) == -1)
err(1, "IPV6_DONTFRAG");
hold = 1;
if (options & F_SO_DEBUG)
@ -2780,7 +2788,7 @@ usage()
"A"
#endif
"usage: ping6 [-"
"d"
"Dd"
#if defined(IPSEC) && !defined(IPSEC_POLICY_IPSEC)
"E"
#endif