zehome / MLVPN

Multi-link VPN (ADSL/SDSL/xDSL/Network aggregation / bonding)
http://www.mlvpn.fr/
BSD 2-Clause "Simplified" License
521 stars 129 forks source link

fib handling on FreeBSD #153

Open botovq opened 3 years ago

botovq commented 3 years ago

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.

https://github.com/zehome/MLVPN/blob/2263bab7e5f983e1daa33887b53120c12646398f/src/mlvpn.c#L850-L860

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.