diff options
author | Richard Scheffenegger <rscheff@FreeBSD.org> | 2020-09-10 00:50:18 +0000 |
---|---|---|
committer | Richard Scheffenegger <rscheff@FreeBSD.org> | 2020-09-10 00:50:18 +0000 |
commit | 6034024daddb87df2e7a9880070e6c76ac6a1223 (patch) | |
tree | 64262ef599bbd2506c7da76ef737bfb9f24f5437 /sbin/ping6/ping6.c | |
parent | e74e64a1912707c2f4b5ab7b03d424834aacfc56 (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.c | 17 |
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; |