Author: tuexen
Date: Thu Oct  1 16:09:23 2020
New Revision: 366319
URL: https://svnweb.freebsd.org/changeset/base/366319

Log:
  MFC r365685:
  Add a -t option to traceroute6 to control the traffic class used when
  sending probe packets.

Modified:
  stable/12/usr.sbin/traceroute6/traceroute6.8
  stable/12/usr.sbin/traceroute6/traceroute6.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/usr.sbin/traceroute6/traceroute6.8
==============================================================================
--- stable/12/usr.sbin/traceroute6/traceroute6.8        Thu Oct  1 15:45:07 
2020        (r366318)
+++ stable/12/usr.sbin/traceroute6/traceroute6.8        Thu Oct  1 16:09:23 
2020        (r366319)
@@ -29,7 +29,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd July 16, 2019
+.Dd September 13, 2020
 .Dt TRACEROUTE6 8
 .Os
 .\"
@@ -61,6 +61,9 @@
 .Op Fl s Ar src
 .Ek
 .Bk -words
+.Op Fl t Ar tclass
+.Ek
+.Bk -words
 .Op Fl w Ar waittime
 .Ek
 .Bk -words
@@ -148,6 +151,13 @@ If
 .Ar datalen
 is up to 28, probe packets consist of a SHUTDOWN-ACK chunk possibly bundled
 with a PAD chunk. For larger probe packets, an INIT chunk is used.
+.It Fl t Ar tclass
+.Ar tclass
+specifies the
+.Em traffic class
+used when sending probe packets.
+The value must be a decimal integer in the range 0 to 255.
+The default is 0.
 .It Fl T
 Use TCP segments for the probes.
 .It Fl U

Modified: stable/12/usr.sbin/traceroute6/traceroute6.c
==============================================================================
--- stable/12/usr.sbin/traceroute6/traceroute6.c        Thu Oct  1 15:45:07 
2020        (r366318)
+++ stable/12/usr.sbin/traceroute6/traceroute6.c        Thu Oct  1 16:09:23 
2020        (r366319)
@@ -341,6 +341,7 @@ static u_long max_hops = 30;
 static u_int16_t srcport;
 static u_int16_t port = 32768+666;     /* start udp dest port # for probe 
packets */
 static u_int16_t ident;
+static int tclass = -1;
 static int options;                    /* socket options */
 static int verbose;
 static int waittime = 5;               /* time to wait for response (in 
seconds) */
@@ -359,7 +360,7 @@ main(int argc, char *argv[])
        int ch, i, on = 1, seq, rcvcmsglen, error;
        struct addrinfo hints, *res;
        static u_char *rcvcmsgbuf;
-       u_long probe, hops, lport;
+       u_long probe, hops, lport, ltclass;
        struct hostent *hp;
        size_t size, minlen;
        uid_t uid;
@@ -406,7 +407,7 @@ main(int argc, char *argv[])
        seq = 0;
        ident = htons(getpid() & 0xffff); /* same as ping6 */
 
-       while ((ch = getopt(argc, argv, "aA:df:g:Ilm:nNp:q:rs:STUvw:")) != -1)
+       while ((ch = getopt(argc, argv, "aA:df:g:Ilm:nNp:q:rs:St:TUvw:")) != -1)
                switch (ch) {
                case 'a':
                        as_path = 1;
@@ -522,6 +523,17 @@ main(int argc, char *argv[])
                case 'S':
                        useproto = IPPROTO_SCTP;
                        break;
+               case 't':
+                       ep = NULL;
+                       errno = 0;
+                       ltclass = strtoul(optarg, &ep, 0);
+                       if (errno || !*optarg || *ep || ltclass > 255) {
+                               fprintf(stderr,
+                                   "traceroute6: invalid traffic class.\n");
+                               exit(1);
+                       }
+                       tclass = (int)ltclass;
+                       break;
                case 'T':
                        useproto = IPPROTO_TCP;
                        break;
@@ -591,6 +603,13 @@ main(int argc, char *argv[])
                exit(1);
        }
 
+       if (tclass != -1) {
+               if (setsockopt(sndsock, IPPROTO_IPV6, IPV6_TCLASS, &tclass,
+                   sizeof(int)) == -1) {
+                       perror("setsockopt(IPV6_TCLASS)");
+                       exit(7);
+               }
+       }
 
        if (argc < 1 || argc > 2)
                usage();
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to