Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 13 Sep 2020 09:00:00 +0000 (UTC)
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r365685 - head/usr.sbin/traceroute6
Message-ID:  <202009130900.08D900xt084472@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: tuexen
Date: Sun Sep 13 09:00:00 2020
New Revision: 365685
URL: https://svnweb.freebsd.org/changeset/base/365685

Log:
  Add a -t option to traceroute6 to control the traffic class used when
  sending probe packets.
  
  Reviewed by:		rscheff
  MFC after:		1 week
  Sponsored by:		Netflix, Inc.
  Differential Revision:	https://reviews.freebsd.org/D26410

Modified:
  head/usr.sbin/traceroute6/traceroute6.8
  head/usr.sbin/traceroute6/traceroute6.c

Modified: head/usr.sbin/traceroute6/traceroute6.8
==============================================================================
--- head/usr.sbin/traceroute6/traceroute6.8	Sun Sep 13 02:17:57 2020	(r365684)
+++ head/usr.sbin/traceroute6/traceroute6.8	Sun Sep 13 09:00:00 2020	(r365685)
@@ -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: head/usr.sbin/traceroute6/traceroute6.c
==============================================================================
--- head/usr.sbin/traceroute6/traceroute6.c	Sun Sep 13 02:17:57 2020	(r365684)
+++ head/usr.sbin/traceroute6/traceroute6.c	Sun Sep 13 09:00:00 2020	(r365685)
@@ -346,6 +346,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) */
@@ -364,7 +365,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;
@@ -414,7 +415,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;
@@ -531,6 +532,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;
@@ -595,6 +607,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();



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202009130900.08D900xt084472>