ok ?

On Sat, Aug 11, 2012 at 07:10:42PM +0200, Christiano F. Haesbaert wrote:
> Hi,
> 
> mikeb spotted this, we're actually calling the setsockopt for IPV6 too,
> which always fails, this uses setrtable which is less code and doesn't
> complain on IPV6 socks.
> 
> Can someone that uses rdomain test this please ?
> 
> Index: tcpbench.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/tcpbench/tcpbench.c,v
> retrieving revision 1.36
> diff -d -u -p -r1.36 tcpbench.c
> --- tcpbench.c        16 Jun 2012 17:18:11 -0000      1.36
> +++ tcpbench.c        11 Aug 2012 17:06:15 -0000
> @@ -61,7 +61,6 @@
>  
>  /* Our tcpbench globals */
>  struct {
> -     u_int     Vflag;        /* rtableid */
>       int       Sflag;        /* Socket buffer size (tcp mode) */
>       u_int     rflag;        /* Report rate (ms) */
>       int       sflag;        /* True if server */
> @@ -752,15 +751,6 @@ server_init(struct addrinfo *aitop, stru
>                               warn("socket");
>                       continue;
>               }
> -             if (ptb->Vflag) {
> -                     if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
> -                         &ptb->Vflag, sizeof(ptb->Vflag)) == -1) {
> -                             if (errno == ENOPROTOOPT)
> -                                     warn("set rtable");
> -                             else
> -                                     err(1, "setsockopt SO_RTABLE");
> -                     }
> -             }
>               if (ptb->Tflag != -1 && ai->ai_family == AF_INET) {
>                       if (setsockopt(sock, IPPROTO_IP, IP_TOS,
>                           &ptb->Tflag, sizeof(ptb->Tflag)))
> @@ -890,15 +880,6 @@ client_init(struct addrinfo *aitop, int 
>                                   &ptb->Tflag, sizeof(ptb->Tflag)))
>                                       err(1, "setsockopt IPV6_TCLASS");
>                       }
> -                     if (ptb->Vflag) {
> -                             if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
> -                                 &ptb->Vflag, sizeof(ptb->Vflag)) == -1) {
> -                                     if (errno == ENOPROTOOPT)
> -                                             warn("set rtable");
> -                                     else
> -                                             err(1, "setsockopt SO_RTABLE");
> -                             }
> -                     }
>                       if (ptb->Sflag) {
>                               if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF,
>                                   &ptb->Sflag, sizeof(ptb->Sflag)) == -1)
> @@ -1006,7 +987,7 @@ main(int argc, char **argv)
>       extern int optind;
>       extern char *optarg;
>       struct timeval tv;
> -     unsigned int secs;
> +     unsigned int secs, rtable;
>  
>       char kerr[_POSIX2_LINE_MAX], *tmp;
>       struct addrinfo *aitop, *aib, hints;
> @@ -1022,7 +1003,7 @@ main(int argc, char **argv)
>       setlinebuf(stdout);
>       ptb = &tcpbench;
>       ptb->dummybuf_len = 0;
> -     ptb->Sflag = ptb->sflag = ptb->vflag = ptb->Vflag = 0;
> +     ptb->Sflag = ptb->sflag = ptb->vflag = 0;
>       ptb->kvmh  = NULL;
>       ptb->kvars = NULL;
>       ptb->rflag = DEFAULT_STATS_INTERVAL;
> @@ -1076,11 +1057,13 @@ main(int argc, char **argv)
>                       ptb->vflag++;
>                       break;
>               case 'V':
> -                     ptb->Vflag = (unsigned int)strtonum(optarg, 0,
> +                     rtable = (unsigned int)strtonum(optarg, 0,
>                           RT_TABLEID_MAX, &errstr);
>                       if (errstr)
>                               errx(1, "rtable value is %s: %s",
>                                   errstr, optarg);
> +                     if (setrtable(rtable) == -1)
> +                             err(1, "setrtable");
>                       break;
>               case 'n':
>                       nconn = strtonum(optarg, 0, 65535, &errstr);

Reply via email to