summaryrefslogtreecommitdiff
path: root/sbin/ping
diff options
context:
space:
mode:
authorDavid Gwynne <dlg@cvs.openbsd.org>2018-11-10 05:03:24 +0000
committerDavid Gwynne <dlg@cvs.openbsd.org>2018-11-10 05:03:24 +0000
commit31a1b528617e27f32fa79ea4f0e62fd701d6568b (patch)
tree5a29e49247be88719299830bfdfc3a40fd5c3fd1 /sbin/ping
parent321c24573a11933cda1e9ae37513b46c8b48fd66 (diff)
add support for setting the traffic class on ipv6 packets.
it reuses the toskeyword handling that ipv4 uses for setting the tos field, which is equiavlent to traffic class. ok florian@ denis@
Diffstat (limited to 'sbin/ping')
-rw-r--r--sbin/ping/ping.88
-rw-r--r--sbin/ping/ping.c17
2 files changed, 17 insertions, 8 deletions
diff --git a/sbin/ping/ping.8 b/sbin/ping/ping.8
index 36c3a8237d8..e5f58fdc434 100644
--- a/sbin/ping/ping.8
+++ b/sbin/ping/ping.8
@@ -1,4 +1,4 @@
-.\" $OpenBSD: ping.8,v 1.59 2016/10/26 16:18:45 jmc Exp $
+.\" $OpenBSD: ping.8,v 1.60 2018/11/10 05:03:23 dlg Exp $
.\" $NetBSD: ping.8,v 1.10 1995/12/31 04:55:35 ghudson Exp $
.\"
.\" Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -57,7 +57,7 @@
.\"
.\" @(#)ping.8 8.2 (Berkeley) 12/11/93
.\"
-.Dd $Mdocdate: October 26 2016 $
+.Dd $Mdocdate: November 10 2018 $
.Dt PING 8
.Os
.Sh NAME
@@ -87,6 +87,7 @@
.Op Fl l Ar preload
.Op Fl p Ar pattern
.Op Fl s Ar packetsize
+.Op Fl T Ar toskeyword
.Op Fl V Ar rtable
.Op Fl w Ar maxwait
.Ar host
@@ -221,8 +222,7 @@ which translates into 64 ICMP data bytes
when combined with the 8 bytes of ICMP header data.
The maximum packet size is 65467 for IPv4 and 65527 for IPv6.
.It Fl T Ar toskeyword
-.Pq IPv4 only
-Change the TOS value.
+Change the IPv4 TOS or IPv6 Traffic Class value.
.Ar toskeyword
may be one of
.Cm critical ,
diff --git a/sbin/ping/ping.c b/sbin/ping/ping.c
index 5dfbb02eef7..cde44350a5a 100644
--- a/sbin/ping/ping.c
+++ b/sbin/ping/ping.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ping.c,v 1.230 2018/10/14 19:47:53 kn Exp $ */
+/* $OpenBSD: ping.c,v 1.231 2018/11/10 05:03:23 dlg Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -150,7 +150,7 @@ int options;
/* 0x0200 */
#define F_HDRINCL 0x0400
#define F_TTL 0x0800
-/* 0x1000 */
+#define F_TOS 0x1000
#define F_AUD_RECV 0x2000
#define F_AUD_MISS 0x4000
@@ -291,7 +291,7 @@ main(int argc, char *argv[])
preload = 0;
datap = &outpack[ECHOLEN + ECHOTMLEN];
while ((ch = getopt(argc, argv, v6flag ?
- "c:dEefHh:I:i:Ll:mNnp:qS:s:V:vw:" :
+ "c:dEefHh:I:i:Ll:mNnp:qS:s:T:V:vw:" :
"DEI:LRS:c:defHi:l:np:qs:T:t:V:vw:")) != -1) {
switch(ch) {
case 'c':
@@ -386,6 +386,7 @@ main(int argc, char *argv[])
#ifndef SMALL
case 'T':
options |= F_HDRINCL;
+ options |= F_TOS;
errno = 0;
errstr = NULL;
if (map_tos(optarg, &tos))
@@ -673,6 +674,13 @@ main(int argc, char *argv[])
*(int *)(CMSG_DATA(scmsg)) = hoplimit;
}
+ if (options & F_TOS) {
+ optval = tos;
+ if (setsockopt(s, IPPROTO_IPV6, IPV6_TCLASS, &optval,
+ (socklen_t)sizeof(optval)) < 0)
+ warn("setsockopt(IPV6_TVAL)"); /* XXX err? */
+ }
+
optval = 1;
if (setsockopt(s, IPPROTO_IPV6, IPV6_RECVPKTINFO, &optval,
(socklen_t)sizeof(optval)) < 0)
@@ -2160,7 +2168,8 @@ usage(void)
fprintf(stderr,
"usage: ping6 [-dEefHLmnqv] [-c count] [-h hoplimit] "
"[-I sourceaddr]\n\t[-i wait] [-l preload] [-p pattern] "
- "[-s packetsize] [-V rtable]\n\t[-w maxwait] host\n");
+ "[-s packetsize] [-T toskeyword]\n\t"
+ "[-V rtable] [-w maxwait] host\n");
} else {
fprintf(stderr,
"usage: ping [-DdEefHLnqRv] [-c count] [-I ifaddr]"