Date: Fri, 21 Feb 2025 01:57:23 GMT From: Mark Johnston <markj@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: b0f2df45e7a6 - stable/14 - socket: Add an option to retrieve a socket's FIB number Message-ID: <202502210157.51L1vNBQ067624@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/14 has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=b0f2df45e7a6f1db28bd96fc5da690618a0c38a6 commit b0f2df45e7a6f1db28bd96fc5da690618a0c38a6 Author: Mark Johnston <markj@FreeBSD.org> AuthorDate: 2025-02-06 14:17:19 +0000 Commit: Mark Johnston <markj@FreeBSD.org> CommitDate: 2025-02-21 01:04:50 +0000 socket: Add an option to retrieve a socket's FIB number The SO_SETFIB option can be used to set a socket's FIB number, but there is no way to retrieve it. Rename SO_SETFIB to SO_FIB and implement a handler for it for getsockopt(2). Reviewed by: glebius MFC after: 2 weeks Sponsored by: Klara, Inc. Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D48834 (cherry picked from commit ee951eb59f2136a604e3fbb12abf8d8344da0c99) --- lib/libc/sys/getsockopt.2 | 4 ++-- sys/kern/uipc_socket.c | 6 ++++++ sys/sys/socket.h | 3 ++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/libc/sys/getsockopt.2 b/lib/libc/sys/getsockopt.2 index 548e2f738e22..868f40e97773 100644 --- a/lib/libc/sys/getsockopt.2 +++ b/lib/libc/sys/getsockopt.2 @@ -177,7 +177,7 @@ for the socket .It Dv SO_PROTOTYPE Ta "SunOS alias for the Linux SO_PROTOCOL (get only)" .It Dv SO_ERROR Ta "get and clear error on the socket (get only)" .It Dv SO_RERROR Ta "enables receive error reporting" -.It Dv SO_SETFIB Ta "set the associated FIB (routing table) for the socket (set only)" +.It Dv SO_FIB Ta "get or set the associated FIB (routing table) for the socket" .El .Pp The following options are recognized in @@ -360,7 +360,7 @@ or with the error .Er EWOULDBLOCK if no data were received. .Pp -.Dv SO_SETFIB +.Dv SO_FIB can be used to over-ride the default FIB (routing table) for the given socket. The value must be from 0 to one less than the number returned from the sysctl diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 58090b28fcc8..58e374d7aed2 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -4101,6 +4101,12 @@ integer: error = sooptcopyout(sopt, &optval, sizeof optval); break; + case SO_FIB: + SOCK_LOCK(so); + optval = so->so_fibnum; + SOCK_UNLOCK(so); + goto integer; + case SO_DOMAIN: optval = so->so_proto->pr_domain->dom_family; goto integer; diff --git a/sys/sys/socket.h b/sys/sys/socket.h index 65b5c5ee001d..b2afc735a383 100644 --- a/sys/sys/socket.h +++ b/sys/sys/socket.h @@ -166,7 +166,8 @@ typedef __uintptr_t uintptr_t; #define SO_LISTENQLIMIT 0x1011 /* socket's backlog limit */ #define SO_LISTENQLEN 0x1012 /* socket's complete queue length */ #define SO_LISTENINCQLEN 0x1013 /* socket's incomplete queue length */ -#define SO_SETFIB 0x1014 /* use this FIB to route */ +#define SO_FIB 0x1014 /* get or set socket FIB */ +#define SO_SETFIB SO_FIB /* backward compat alias */ #define SO_USER_COOKIE 0x1015 /* user cookie (dummynet etc.) */ #define SO_PROTOCOL 0x1016 /* get socket protocol (Linux name) */ #define SO_PROTOTYPE SO_PROTOCOL /* alias for SO_PROTOCOL (SunOS name) */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202502210157.51L1vNBQ067624>