-
Notifications
You must be signed in to change notification settings - Fork 237
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support to bind socket to FIB on a FreeBSD #271
Conversation
any(target_os = "freebsd", target_os = "dragonfly", target_os = "openbsd") | ||
))) | ||
)] | ||
pub fn set_fib(&self, fib: u32) -> io::Result<()> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
According to https://www.freebsd.org/cgi/man.cgi?query=setfib&sektion=2 fib
should be a u16
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
setfib - it's another syscall, that set FIB for current process, so all sockets will have specified fib by default.
setsockopt set fib only for exact socket.
In freebsd sources SO_SETFIB using with int.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
setfib - it's another syscall, that set FIB for current process, so all sockets will have specified fib by default. setsockopt set fib only for exact socket.
Right, but it's the same option right? That system call just does it process wide.
In freebsd sources SO_SETFIB using with int.
But in C 80% of the input is an int
, which b.t.w only has to be 16 bits. However we should try to provide a type that matches the expected input better. For example you're already using an unsigned integer, not a signed one.
P.S. please don't resolve conversations that aren't resolved.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've check with the FreeBSD discord and they recommend u32
as well so going with that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we will take a look on freebsd sources:
user side
https://github.com/freebsd/freebsd-src/blob/main/sbin/route/route.c
it uses exactly int
at kernel side (https://github.com/freebsd/freebsd-src/blob/main/sys/sys/socketvar.h) field so_fibnum also has type int.
FreeBSD has only up to 16 FIBs and FIB should not be negative. So I think it for possible future extensions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, since our FreeBSD build is somewhat broken I'll test it locally this weekend.
Thanks @wladwm. |
Hi.
This patch simply add support SO_SETFIB option to socket on a FreeBSD+ OS.
It allow to build VRF-aware applications on FreeBSD and partially solve problem with missing Bind-To-Device option on BSD.