diff options
author | David Gwynne <dlg@cvs.openbsd.org> | 2018-11-10 05:03:24 +0000 |
---|---|---|
committer | David Gwynne <dlg@cvs.openbsd.org> | 2018-11-10 05:03:24 +0000 |
commit | 31a1b528617e27f32fa79ea4f0e62fd701d6568b (patch) | |
tree | 5a29e49247be88719299830bfdfc3a40fd5c3fd1 /sbin/ping | |
parent | 321c24573a11933cda1e9ae37513b46c8b48fd66 (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.8 | 8 | ||||
-rw-r--r-- | sbin/ping/ping.c | 17 |
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]" |