Author: maxim
Date: Tue Apr 20 06:10:05 2010
New Revision: 206889
URL: http://svn.freebsd.org/changeset/base/206889

Log:
  o Add do-not-fragment option support to ping6(8).
  
  PR:           bin/145759
  Submitted by: pluknet
  MFC after:    1 month

Modified:
  head/sbin/ping6/ping6.8
  head/sbin/ping6/ping6.c

Modified: head/sbin/ping6/ping6.8
==============================================================================
--- head/sbin/ping6/ping6.8     Tue Apr 20 06:08:34 2010        (r206888)
+++ head/sbin/ping6/ping6.8     Tue Apr 20 06:10:05 2010        (r206889)
@@ -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

Modified: head/sbin/ping6/ping6.c
==============================================================================
--- head/sbin/ping6/ping6.c     Tue Apr 20 06:08:34 2010        (r206888)
+++ head/sbin/ping6/ping6.c     Tue Apr 20 06:10:05 2010        (r206889)
@@ -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
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to