On Fri, Nov 09, 2018 at 06:33:46AM +0100, Florian Obser wrote:
> please update usage(), then it's OK florian@
> 
> Could you do tracerute6, too?

like this?

Index: sbin/ping/ping.8
===================================================================
RCS file: /cvs/src/sbin/ping/ping.8,v
retrieving revision 1.59
diff -u -p -r1.59 ping.8
--- sbin/ping/ping.8    26 Oct 2016 16:18:45 -0000      1.59
+++ sbin/ping/ping.8    9 Nov 2018 07:00:46 -0000
@@ -87,6 +87,7 @@
 .Op Fl l Ar preload
 .Op Fl p Ar pattern
 .Op Fl s Ar packetsize
+.Op Fl T Ar toskeyword
 .Op Fl V Ar rtable
 .Op Fl w Ar maxwait
 .Ar host
@@ -221,8 +222,7 @@ which translates into 64 ICMP data bytes
 when combined with the 8 bytes of ICMP header data.
 The maximum packet size is 65467 for IPv4 and 65527 for IPv6.
 .It Fl T Ar toskeyword
-.Pq IPv4 only
-Change the TOS value.
+Change the IPv4 TOS or IPv6 Traffic Class value.
 .Ar toskeyword
 may be one of
 .Cm critical ,
Index: sbin/ping/ping.c
===================================================================
RCS file: /cvs/src/sbin/ping/ping.c,v
retrieving revision 1.230
diff -u -p -r1.230 ping.c
--- sbin/ping/ping.c    14 Oct 2018 19:47:53 -0000      1.230
+++ sbin/ping/ping.c    9 Nov 2018 07:00:46 -0000
@@ -150,7 +150,7 @@ int options;
 /*                     0x0200 */
 #define        F_HDRINCL       0x0400
 #define        F_TTL           0x0800
-/*                     0x1000 */
+#define        F_TOS           0x1000
 #define        F_AUD_RECV      0x2000
 #define        F_AUD_MISS      0x4000
 
@@ -291,7 +291,7 @@ main(int argc, char *argv[])
        preload = 0;
        datap = &outpack[ECHOLEN + ECHOTMLEN];
        while ((ch = getopt(argc, argv, v6flag ?
-           "c:dEefHh:I:i:Ll:mNnp:qS:s:V:vw:" :
+           "c:dEefHh:I:i:Ll:mNnp:qS:s:T:V:vw:" :
            "DEI:LRS:c:defHi:l:np:qs:T:t:V:vw:")) != -1) {
                switch(ch) {
                case 'c':
@@ -386,6 +386,7 @@ main(int argc, char *argv[])
 #ifndef SMALL
                case 'T':
                        options |= F_HDRINCL;
+                       options |= F_TOS;
                        errno = 0;
                        errstr = NULL;
                        if (map_tos(optarg, &tos))
@@ -673,6 +674,13 @@ main(int argc, char *argv[])
                        *(int *)(CMSG_DATA(scmsg)) = hoplimit;
                }
 
+               if (options & F_TOS) {
+                       optval = tos;
+                       if (setsockopt(s, IPPROTO_IPV6, IPV6_TCLASS, &optval,
+                           (socklen_t)sizeof(optval)) < 0)
+                               warn("setsockopt(IPV6_TVAL)"); /* XXX err? */
+               }
+
                optval = 1;
                if (setsockopt(s, IPPROTO_IPV6, IPV6_RECVPKTINFO, &optval,
                    (socklen_t)sizeof(optval)) < 0)
@@ -2160,7 +2168,8 @@ usage(void)
                fprintf(stderr,
                    "usage: ping6 [-dEefHLmnqv] [-c count] [-h hoplimit] "
                    "[-I sourceaddr]\n\t[-i wait] [-l preload] [-p pattern] "
-                   "[-s packetsize] [-V rtable]\n\t[-w maxwait] host\n");
+                   "[-s packetsize] [-T toskeyword]\n\t"
+                   "[-V rtable] [-w maxwait] host\n");
        } else {
                fprintf(stderr,
                    "usage: ping [-DdEefHLnqRv] [-c count] [-I ifaddr]"
Index: usr.sbin/traceroute/traceroute.c
===================================================================
RCS file: /cvs/src/usr.sbin/traceroute/traceroute.c,v
retrieving revision 1.157
diff -u -p -r1.157 traceroute.c
--- usr.sbin/traceroute/traceroute.c    20 Oct 2018 19:55:01 -0000      1.157
+++ usr.sbin/traceroute/traceroute.c    9 Nov 2018 07:00:46 -0000
@@ -414,7 +414,7 @@ main(int argc, char *argv[])
                err(1, "sysctl");
        conf->max_ttl = i;
 
-       while ((ch = getopt(argc, argv, v6flag ? "AcDdf:Ilm:np:q:Ss:w:vV:" :
+       while ((ch = getopt(argc, argv, v6flag ? "AcDdf:Ilm:np:q:Ss:t:w:vV:" :
            "AcDdf:g:Ilm:nP:p:q:Ss:t:V:vw:x")) != -1)
                switch (ch) {
                case 'A':
@@ -802,6 +802,12 @@ main(int argc, char *argv[])
                    0)
                        err(1, "bind sndsock");
 
+               if (conf->tflag) {
+                       if (setsockopt(sndsock, IPPROTO_IPV6, IPV6_TCLASS,
+                           &conf->tos, sizeof(conf->tos)) < 0)
+                               err(6, "IPV6_TCLASS");
+               }
+
                len = sizeof(from6);
                if (getsockname(sndsock, (struct sockaddr *)&from6, &len) < 0)
                        err(1, "getsockname");
@@ -943,10 +949,10 @@ void
 usage(int v6flag)
 {
        if (v6flag) {
-               fprintf(stderr, "usage: traceroute6 [-AcDdIlnSv] [-f first_hop] 
"
-                   "[-m max_hop] [-p port]\n"
-                   "\t[-q nqueries] [-s src_addr] [-V rtable] [-w waittime] "
-                   "host\n\t[datalen]\n");
+               fprintf(stderr, "usage: %s "
+                   "[-AcDdIlnSv] [-f first_hop] [-m max_hop] [-p port]\n"
+                   "\t[-q nqueries] [-s src_addr] [-t toskeyword] [-V rtable] "
+                   "[-w waittime]\n\thost [datalen]\n", __progname);
        } else {
                fprintf(stderr,
                    "usage: %s [-AcDdIlnSvx] [-f first_ttl] [-g gateway_addr] "

Reply via email to