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);