please update usage(), then it's OK florian@

Could you do tracerute6, too?

On Fri, Nov 09, 2018 at 03:08:20PM +1000, David Gwynne wrote:
> This sets ping6 up to specify the traffic class field for the IPv6
> traffic class field. The v6 traffic class is equivalent to the IPv6
> TOS/DSCP field, so this uses the same getopt param and parsing to get
> the value.
> 
> ok?
> 
> Index: ping.8
> ===================================================================
> RCS file: /cvs/src/sbin/ping/ping.8,v
> retrieving revision 1.59
> diff -u -p -r1.59 ping.8
> --- ping.8    26 Oct 2016 16:18:45 -0000      1.59
> +++ ping.8    9 Nov 2018 05:05:35 -0000
> @@ -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 ,
> Index: ping.c
> ===================================================================
> RCS file: /cvs/src/sbin/ping/ping.c,v
> retrieving revision 1.230
> diff -u -p -r1.230 ping.c
> --- ping.c    14 Oct 2018 19:47:53 -0000      1.230
> +++ ping.c    9 Nov 2018 05:05:35 -0000
> @@ -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))
> @@ -671,6 +672,13 @@ main(int argc, char *argv[])
>                       scmsg->cmsg_level = IPPROTO_IPV6;
>                       scmsg->cmsg_type = IPV6_HOPLIMIT;
>                       *(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;
> 

-- 
I'm not entirely sure you are real.

Reply via email to