Skip to content

fib handling on FreeBSD #153

@botovq

Description

@botovq

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions