Skip to content
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

fib handling on FreeBSD #153

Open
botovq opened this issue Apr 7, 2021 · 0 comments
Open

fib handling on FreeBSD #153

botovq opened this issue Apr 7, 2021 · 0 comments

Comments

@botovq
Copy link

botovq commented Apr 7, 2021

While looking at #152, I noticed that the fib handling on FreeBSD looks odd. It assigns to t->fd only if the setsockopt call fails.

MLVPN/src/mlvpn.c

Lines 850 to 860 in 2263bab

/* Setting fib/routing-table is supported on FreeBSD and OpenBSD only */
#if defined(HAVE_FREEBSD)
if (fib > 0 && setsockopt(fd, SOL_SOCKET, SO_SETFIB, &fib, sizeof(fib)) < 0)
#elif defined(HAVE_OPENBSD)
if (fib > 0 && setsockopt(fd, SOL_SOCKET, SO_RTABLE, &fib, sizeof(fib)) < 0)
{
log_warn(NULL, "Cannot set FIB %d for kernel socket", fib);
goto error;
}
#endif
t->fd = fd;

This will likely need a further #if to work as intended, something like

#if defined(HAVE_FREEBSD) || defined(HAVE_OPENBSD)
#if defined(HAVE_FREEBSD)
            if (fib > 0 && setsockopt(fd, SOL_SOCKET, SO_SETFIB, &fib, sizeof(fib)) < 0)
#elif defined(HAVE_OPEBSD)
            if (fib > 0 && setsockopt(fd, SOL_SOCKET, SO_RTABLE, &fib, sizeof(fib)) < 0)
#endif
            {
                log_warn(NULL, "Cannot set FIB %d for kernel socket", fib);
                goto error;
            }
#endif

Or assign SO_SETFIB or SO_RTABLE to a variable and avoid the duplicated conditional.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant