aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/traceroute6
diff options
context:
space:
mode:
authorMichael Tuexen <tuexen@FreeBSD.org>2020-09-13 09:00:00 +0000
committerMichael Tuexen <tuexen@FreeBSD.org>2020-09-13 09:00:00 +0000
commitc70906519af35070e22b5833c478bbb8151b04f9 (patch)
tree65dd64e2ecaa22bcbe1f91093dd77e6ea7055cf0 /usr.sbin/traceroute6
parent7be655c2b424320942b05b77e3615445d6923e3e (diff)
downloadsrc-c70906519af35070e22b5833c478bbb8151b04f9.tar.gz
src-c70906519af35070e22b5833c478bbb8151b04f9.zip
Notes
Diffstat (limited to 'usr.sbin/traceroute6')
-rw-r--r--usr.sbin/traceroute6/traceroute6.812
-rw-r--r--usr.sbin/traceroute6/traceroute6.c23
2 files changed, 32 insertions, 3 deletions
diff --git a/usr.sbin/traceroute6/traceroute6.8 b/usr.sbin/traceroute6/traceroute6.8
index ba52f146d72b..5166472f6e75 100644
--- a/usr.sbin/traceroute6/traceroute6.8
+++ b/usr.sbin/traceroute6/traceroute6.8
@@ -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
diff --git a/usr.sbin/traceroute6/traceroute6.c b/usr.sbin/traceroute6/traceroute6.c
index f4e48b657f26..89bcaaee01c0 100644
--- a/usr.sbin/traceroute6/traceroute6.c
+++ b/usr.sbin/traceroute6/traceroute6.c
@@ -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();