Re: Convert SO_RTABLE protocol level to SOL_SOCKET
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
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
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: