aboutsummaryrefslogtreecommitdiff
path: root/sbin/ping6/ping6.c
diff options
context:
space:
mode:
authorRichard Scheffenegger <rscheff@FreeBSD.org>2020-09-10 00:50:18 +0000
committerRichard Scheffenegger <rscheff@FreeBSD.org>2020-09-10 00:50:18 +0000
commit6034024daddb87df2e7a9880070e6c76ac6a1223 (patch)
tree64262ef599bbd2506c7da76ef737bfb9f24f5437 /sbin/ping6/ping6.c
parente74e64a1912707c2f4b5ab7b03d424834aacfc56 (diff)
Add -z "TOS" option to ping6, to test DSCP/ECN values
ping has the option to add the (deprecated) TOS byte using the -z option. Adding the same option, with the same (deprecated) Traffic Class Byte (nowadays actually DSCP and ECN fields) to ping6 to validate proper QoS processing in network switches. Reviewed by: tuexen MFC after: 2 weeks Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D26384
Notes
Notes: svn path=/head/; revision=365547
Diffstat (limited to 'sbin/ping6/ping6.c')
-rw-r--r--sbin/ping6/ping6.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/sbin/ping6/ping6.c b/sbin/ping6/ping6.c
index 998f4a51ff3a..756d4d6b50e1 100644
--- a/sbin/ping6/ping6.c
+++ b/sbin/ping6/ping6.c
@@ -229,6 +229,7 @@ static char *hostname;
static int ident; /* process id to identify our packets */
static u_int8_t nonce[8]; /* nonce field for node information */
static int hoplimit = -1; /* hoplimit */
+static int tclass = -1; /* traffic class */
static u_char *packet = NULL;
static cap_channel_t *capdns;
@@ -352,7 +353,7 @@ main(int argc, char *argv[])
#endif /*IPSEC_POLICY_IPSEC*/
#endif
while ((ch = getopt(argc, argv,
- "k:b:c:DdfHe:m:I:i:l:unNop:qaAS:s:OvyYW:t:" ADDOPTS)) != -1) {
+ "k:b:c:DdfHe:m:I:i:l:unNop:qaAS:s:OvyYW:t:z:" ADDOPTS)) != -1) {
#undef ADDOPTS
switch (ch) {
case 'k':
@@ -585,6 +586,14 @@ main(int argc, char *argv[])
err(1, "setitimer");
}
break;
+ case 'z': /* traffic class */
+ tclass = strtol(optarg, &e, 10);
+ if (*optarg == '\0' || *e != '\0')
+ errx(1, "illegal traffic class %s", optarg);
+ if (255 < tclass || tclass < -1)
+ errx(1,
+ "illegal traffic class -- %s", optarg);
+ break;
#ifdef IPSEC
#ifdef IPSEC_POLICY_IPSEC
case 'P':
@@ -937,6 +946,12 @@ main(int argc, char *argv[])
scmsgp = CMSG_NXTHDR(&smsghdr, scmsgp);
}
+ if (tclass != -1) {
+ if (setsockopt(ssend, IPPROTO_IPV6, IPV6_TCLASS,
+ &tclass, sizeof(tclass)) == -1)
+ err(1, "setsockopt(IPV6_TCLASS)");
+ }
+
if (argc > 1) { /* some intermediate addrs are specified */
int hops;
int rthdrlen;