Switch from setfib(2) moving the process to a different FIB to setsockopt(2)

with SO_SETFIB to only tag the socket with the right FIB.

That way either setfib(1) or nc -V can be used depending on what wants to be
achieved.  This also allows nc to be used for simple regression testing of
either feature.

Sponsored by:	Cisco Systems, Inc.
This commit is contained in:
Bjoern A. Zeeb 2012-02-14 11:37:04 +00:00
parent 9836132cd1
commit aaf04b7cb6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/projects/multi-fibv6/head/; revision=231670

View File

@ -605,8 +605,10 @@ remote_connect(const char *host, const char *port, struct addrinfo hints)
#endif
if (rtableid) {
if (setfib(rtableid) == -1)
err(1, "setfib");
if (setsockopt(s, SOL_SOCKET, SO_SETFIB, &rtableid,
sizeof(rtableid)) == -1)
err(1, "setsockopt(.., SO_SETFIB, %u, ..)",
rtableid);
}
/* Bind to a local port or source address if specified. */
@ -678,8 +680,11 @@ local_listen(char *host, char *port, struct addrinfo hints)
continue;
if (rtableid) {
if (setfib(rtableid) == -1)
err(1, "setfib");
ret = setsockopt(s, SOL_SOCKET, SO_SETFIB, &rtableid,
sizeof(rtableid));
if (ret == -1)
err(1, "setsockopt(.., SO_SETFIB, %u, ..)",
rtableid);
}
ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x));