Re: Convert SO_RTABLE protocol level to SOL_SOCKET

2011-06-21 Thread Mike Belopuhov
On Mon, Jun 20, 2011 at 20:22 +0200, Claudio Jeker wrote:
 On Mon, Jun 20, 2011 at 06:30:11PM +0200, Mike Belopuhov wrote:
  Now that we support SO_RTABLE on the socket level, it makes
  sense to cleanup the tree.  OK?
  
 
 The if (getsockopt()  errno != ENOPROTOOPT) constructs are in my opinion
 evil but the sa_family == AF_INET check is not much better but I guess you
 should have a closer look at tcpbench:
   if (ptb-Vflag) {
   if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
   ptb-Vflag, sizeof(ptb-Vflag)) == -1 
   errno != ENOPROTOOPT)
   err(1, setsockopt SO_RTABLE);
   } else if (ptb-Vflag)
   warnx(rtable only supported on AF_INET);
 
 That does not make sense.

indeed.

Index: sbin/ping/ping.c
===
RCS file: /home/cvs/src/sbin/ping/ping.c,v
retrieving revision 1.88
diff -u -p -r1.88 ping.c
--- sbin/ping/ping.c3 Jul 2010 04:44:51 -   1.88
+++ sbin/ping/ping.c20 Jun 2011 15:31:59 -
@@ -312,7 +312,7 @@ main(int argc, char *argv[])
errx(1, rtable value is %s: %s,
errstr, optarg);
 
-   if (setsockopt(s, IPPROTO_IP, SO_RTABLE, rtableid,
+   if (setsockopt(s, SOL_SOCKET, SO_RTABLE, rtableid,
sizeof(rtableid)) == -1)
err(1, setsockopt SO_RTABLE);
break;
Index: usr.bin/nc/netcat.c
===
RCS file: /home/cvs/src/usr.bin/nc/netcat.c,v
retrieving revision 1.100
diff -u -p -r1.100 netcat.c
--- usr.bin/nc/netcat.c 9 Jan 2011 22:16:46 -   1.100
+++ usr.bin/nc/netcat.c 20 Jun 2011 15:50:35 -
@@ -552,7 +552,7 @@ remote_connect(const char *host, const c
continue;
 
if (rtableid) {
-   if (setsockopt(s, IPPROTO_IP, SO_RTABLE, rtableid,
+   if (setsockopt(s, SOL_SOCKET, SO_RTABLE, rtableid,
sizeof(rtableid)) == -1)
err(1, setsockopt SO_RTABLE);
}
Index: usr.bin/tcpbench/tcpbench.c
===
RCS file: /home/cvs/src/usr.bin/tcpbench/tcpbench.c,v
retrieving revision 1.21
diff -u -p -r1.21 tcpbench.c
--- usr.bin/tcpbench/tcpbench.c 16 Mar 2011 08:06:10 -  1.21
+++ usr.bin/tcpbench/tcpbench.c 21 Jun 2011 16:15:44 -
@@ -719,12 +719,11 @@ server_init(struct addrinfo *aitop, stru
warn(socket);
continue;
}
-   if (ptb-Vflag  ai-ai_family == AF_INET) {
-   if (setsockopt(sock, IPPROTO_IP, SO_RTABLE,
+   if (ptb-Vflag) {
+   if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
ptb-Vflag, sizeof(ptb-Vflag)) == -1)
-   err(1, setsockopt SO_RTABLE);
-   } else if (ptb-Vflag)
-   warnx(rtable only supported on AF_INET);
+   warn(set rtable);
+   }
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
on, sizeof(on)) == -1)
warn(reuse port);
@@ -817,12 +816,11 @@ client_init(struct addrinfo *aitop, int 
warn(socket);
continue;
}
-   if (ptb-Vflag  ai-ai_family == AF_INET) {
-   if (setsockopt(sock, IPPROTO_IP, SO_RTABLE,
+   if (ptb-Vflag) {
+   if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
ptb-Vflag, sizeof(ptb-Vflag)) == -1)
-   err(1, setsockopt SO_RTABLE);
-   } else if (ptb-Vflag)
-   warnx(rtable only supported on AF_INET);
+   warn(set rtable);
+   }
if (ptb-Sflag) {
if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF,
ptb-Sflag, sizeof(ptb-Sflag)) == -1)
Index: usr.bin/telnet/commands.c
===
RCS file: /home/cvs/src/usr.bin/telnet/commands.c,v
retrieving revision 1.52
diff -u -p -r1.52 commands.c
--- usr.bin/telnet/commands.c   3 Jul 2010 04:44:51 -   1.52
+++ usr.bin/telnet/commands.c   20 Jun 2011 16:00:02 -
@@ -2397,7 +2397,7 @@ tn(argc, argv)
continue;
 
if (rtableid) {
-   if (setsockopt(net, IPPROTO_IP, SO_RTABLE, rtableid,
+   if (setsockopt(net, SOL_SOCKET, 

Convert SO_RTABLE protocol level to SOL_SOCKET

2011-06-20 Thread Mike Belopuhov
Now that we support SO_RTABLE on the socket level, it makes
sense to cleanup the tree.  OK?

Index: sbin/ping/ping.c
===
RCS file: /home/cvs/src/sbin/ping/ping.c,v
retrieving revision 1.88
diff -u -p -r1.88 ping.c
--- sbin/ping/ping.c3 Jul 2010 04:44:51 -   1.88
+++ sbin/ping/ping.c20 Jun 2011 15:31:59 -
@@ -312,7 +312,7 @@ main(int argc, char *argv[])
errx(1, rtable value is %s: %s,
errstr, optarg);
 
-   if (setsockopt(s, IPPROTO_IP, SO_RTABLE, rtableid,
+   if (setsockopt(s, SOL_SOCKET, SO_RTABLE, rtableid,
sizeof(rtableid)) == -1)
err(1, setsockopt SO_RTABLE);
break;
Index: usr.bin/nc/netcat.c
===
RCS file: /home/cvs/src/usr.bin/nc/netcat.c,v
retrieving revision 1.100
diff -u -p -r1.100 netcat.c
--- usr.bin/nc/netcat.c 9 Jan 2011 22:16:46 -   1.100
+++ usr.bin/nc/netcat.c 20 Jun 2011 15:50:35 -
@@ -552,7 +552,7 @@ remote_connect(const char *host, const c
continue;
 
if (rtableid) {
-   if (setsockopt(s, IPPROTO_IP, SO_RTABLE, rtableid,
+   if (setsockopt(s, SOL_SOCKET, SO_RTABLE, rtableid,
sizeof(rtableid)) == -1)
err(1, setsockopt SO_RTABLE);
}
Index: usr.bin/tcpbench/tcpbench.c
===
RCS file: /home/cvs/src/usr.bin/tcpbench/tcpbench.c,v
retrieving revision 1.21
diff -u -p -r1.21 tcpbench.c
--- usr.bin/tcpbench/tcpbench.c 16 Mar 2011 08:06:10 -  1.21
+++ usr.bin/tcpbench/tcpbench.c 20 Jun 2011 15:53:59 -
@@ -719,9 +719,10 @@ server_init(struct addrinfo *aitop, stru
warn(socket);
continue;
}
-   if (ptb-Vflag  ai-ai_family == AF_INET) {
-   if (setsockopt(sock, IPPROTO_IP, SO_RTABLE,
-   ptb-Vflag, sizeof(ptb-Vflag)) == -1)
+   if (ptb-Vflag) {
+   if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
+   ptb-Vflag, sizeof(ptb-Vflag)) == -1 
+   errno != ENOPROTOOPT)
err(1, setsockopt SO_RTABLE);
} else if (ptb-Vflag)
warnx(rtable only supported on AF_INET);
@@ -817,9 +818,10 @@ client_init(struct addrinfo *aitop, int 
warn(socket);
continue;
}
-   if (ptb-Vflag  ai-ai_family == AF_INET) {
-   if (setsockopt(sock, IPPROTO_IP, SO_RTABLE,
-   ptb-Vflag, sizeof(ptb-Vflag)) == -1)
+   if (ptb-Vflag) {
+   if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
+   ptb-Vflag, sizeof(ptb-Vflag)) == -1 
+   errno != ENOPROTOOPT)
err(1, setsockopt SO_RTABLE);
} else if (ptb-Vflag)
warnx(rtable only supported on AF_INET);
Index: usr.bin/telnet/commands.c
===
RCS file: /home/cvs/src/usr.bin/telnet/commands.c,v
retrieving revision 1.52
diff -u -p -r1.52 commands.c
--- usr.bin/telnet/commands.c   3 Jul 2010 04:44:51 -   1.52
+++ usr.bin/telnet/commands.c   20 Jun 2011 16:00:02 -
@@ -2397,7 +2397,7 @@ tn(argc, argv)
continue;
 
if (rtableid) {
-   if (setsockopt(net, IPPROTO_IP, SO_RTABLE, rtableid,
+   if (setsockopt(net, SOL_SOCKET, SO_RTABLE, rtableid,
sizeof(rtableid)) == -1)
perror(setsockopt (SO_RTABLE));
}
Index: usr.sbin/dhcrelay/dhcrelay.c
===
RCS file: /home/cvs/src/usr.sbin/dhcrelay/dhcrelay.c,v
retrieving revision 1.34
diff -u -p -r1.34 dhcrelay.c
--- usr.sbin/dhcrelay/dhcrelay.c3 Jul 2010 04:44:52 -   1.34
+++ usr.sbin/dhcrelay/dhcrelay.c20 Jun 2011 16:05:40 -
@@ -176,7 +176,7 @@ main(int argc, char *argv[])
if (setsockopt(sp-fd, SOL_SOCKET, SO_REUSEPORT,
opt, sizeof(opt)) == -1)
error(setsockopt: %m);
-   if (setsockopt(sp-fd, IPPROTO_IP, SO_RTABLE, rdomain,
+   if (setsockopt(sp-fd, SOL_SOCKET, SO_RTABLE, rdomain,
sizeof(rdomain)) == -1)
error(setsockopt: %m);
if (bind(sp-fd, (struct sockaddr 

Re: Convert SO_RTABLE protocol level to SOL_SOCKET

2011-06-20 Thread Claudio Jeker
On Mon, Jun 20, 2011 at 06:30:11PM +0200, Mike Belopuhov wrote:
 Now that we support SO_RTABLE on the socket level, it makes
 sense to cleanup the tree.  OK?
 

The if (getsockopt()  errno != ENOPROTOOPT) constructs are in my opinion
evil but the sa_family == AF_INET check is not much better but I guess you
should have a closer look at tcpbench:
if (ptb-Vflag) {
if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
ptb-Vflag, sizeof(ptb-Vflag)) == -1 
errno != ENOPROTOOPT)
err(1, setsockopt SO_RTABLE);
} else if (ptb-Vflag)
warnx(rtable only supported on AF_INET);

That does not make sense.
The other changes are OK claudio@

 Index: sbin/ping/ping.c
 ===
 RCS file: /home/cvs/src/sbin/ping/ping.c,v
 retrieving revision 1.88
 diff -u -p -r1.88 ping.c
 --- sbin/ping/ping.c  3 Jul 2010 04:44:51 -   1.88
 +++ sbin/ping/ping.c  20 Jun 2011 15:31:59 -
 @@ -312,7 +312,7 @@ main(int argc, char *argv[])
   errx(1, rtable value is %s: %s,
   errstr, optarg);
  
 - if (setsockopt(s, IPPROTO_IP, SO_RTABLE, rtableid,
 + if (setsockopt(s, SOL_SOCKET, SO_RTABLE, rtableid,
   sizeof(rtableid)) == -1)
   err(1, setsockopt SO_RTABLE);
   break;
 Index: usr.bin/nc/netcat.c
 ===
 RCS file: /home/cvs/src/usr.bin/nc/netcat.c,v
 retrieving revision 1.100
 diff -u -p -r1.100 netcat.c
 --- usr.bin/nc/netcat.c   9 Jan 2011 22:16:46 -   1.100
 +++ usr.bin/nc/netcat.c   20 Jun 2011 15:50:35 -
 @@ -552,7 +552,7 @@ remote_connect(const char *host, const c
   continue;
  
   if (rtableid) {
 - if (setsockopt(s, IPPROTO_IP, SO_RTABLE, rtableid,
 + if (setsockopt(s, SOL_SOCKET, SO_RTABLE, rtableid,
   sizeof(rtableid)) == -1)
   err(1, setsockopt SO_RTABLE);
   }
 Index: usr.bin/tcpbench/tcpbench.c
 ===
 RCS file: /home/cvs/src/usr.bin/tcpbench/tcpbench.c,v
 retrieving revision 1.21
 diff -u -p -r1.21 tcpbench.c
 --- usr.bin/tcpbench/tcpbench.c   16 Mar 2011 08:06:10 -  1.21
 +++ usr.bin/tcpbench/tcpbench.c   20 Jun 2011 15:53:59 -
 @@ -719,9 +719,10 @@ server_init(struct addrinfo *aitop, stru
   warn(socket);
   continue;
   }
 - if (ptb-Vflag  ai-ai_family == AF_INET) {
 - if (setsockopt(sock, IPPROTO_IP, SO_RTABLE,
 - ptb-Vflag, sizeof(ptb-Vflag)) == -1)
 + if (ptb-Vflag) {
 + if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
 + ptb-Vflag, sizeof(ptb-Vflag)) == -1 
 + errno != ENOPROTOOPT)
   err(1, setsockopt SO_RTABLE);
   } else if (ptb-Vflag)
   warnx(rtable only supported on AF_INET);
 @@ -817,9 +818,10 @@ client_init(struct addrinfo *aitop, int 
   warn(socket);
   continue;
   }
 - if (ptb-Vflag  ai-ai_family == AF_INET) {
 - if (setsockopt(sock, IPPROTO_IP, SO_RTABLE,
 - ptb-Vflag, sizeof(ptb-Vflag)) == -1)
 + if (ptb-Vflag) {
 + if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
 + ptb-Vflag, sizeof(ptb-Vflag)) == -1 
 + errno != ENOPROTOOPT)
   err(1, setsockopt SO_RTABLE);
   } else if (ptb-Vflag)
   warnx(rtable only supported on AF_INET);
 Index: usr.bin/telnet/commands.c
 ===
 RCS file: /home/cvs/src/usr.bin/telnet/commands.c,v
 retrieving revision 1.52
 diff -u -p -r1.52 commands.c
 --- usr.bin/telnet/commands.c 3 Jul 2010 04:44:51 -   1.52
 +++ usr.bin/telnet/commands.c 20 Jun 2011 16:00:02 -
 @@ -2397,7 +2397,7 @@ tn(argc, argv)
   continue;
  
   if (rtableid) {
 - if (setsockopt(net, IPPROTO_IP, SO_RTABLE, rtableid,
 + if (setsockopt(net, SOL_SOCKET, SO_RTABLE, rtableid,
   sizeof(rtableid)) == -1)
   perror(setsockopt (SO_RTABLE));
   }
 Index: usr.sbin/dhcrelay/dhcrelay.c
 ===
 RCS file: