- #1: add support for on-link routes - #2, #3: don't advertise an RTA_IFP that is not actually included Index: src/openvpn/route.c --- src/openvpn/route.c.orig +++ src/openvpn/route.c @@ -1545,7 +1545,7 @@ local_route(in_addr_t network, /* Return true if the "on-link" form of the route should be used. This is when the gateway for * a route is specified as an interface rather than an address. */ -#if defined(TARGET_LINUX) || defined(_WIN32) || defined(TARGET_DARWIN) +#if defined(TARGET_LINUX) || defined(_WIN32) || defined(TARGET_DARWIN) || defined(TARGET_OPENBSD) static inline bool is_on_link(const int is_local_route, const unsigned int flags, const struct route_gateway_info *rgi) { @@ -1817,12 +1817,17 @@ add_route(struct route_ipv4 *r, } #endif - argv_printf_cat(&argv, "-net %s %s -netmask %s", + argv_printf_cat (&argv, "-net %s -netmask %s", network, - gateway, netmask); - /* FIXME -- add on-link support for OpenBSD/NetBSD */ + /* FIXME -- add on-link support for NetBSD */ +#ifdef TARGET_OPENBSD + if (is_on_link (is_local_route, flags, rgi)) + argv_printf_cat (&argv, "-link -iface %s", rgi->iface); + else +#endif + argv_printf_cat (&argv, "%s", gateway); argv_msg(D_ROUTE, &argv); bool ret = openvpn_execve_check(&argv, es, 0, @@ -3513,7 +3518,7 @@ get_default_gateway(struct route_gateway_info *rgi, op /* setup data to send to routing socket */ pid = getpid(); seq = 0; - rtm_addrs = RTA_DST | RTA_NETMASK | RTA_IFP; + rtm_addrs = RTA_DST | RTA_NETMASK; bzero(&m_rtmsg, sizeof(m_rtmsg)); bzero(&so_dst, sizeof(so_dst)); @@ -3731,7 +3736,7 @@ get_default_gateway_ipv6(struct route_ipv6_gateway_inf /* setup data to send to routing socket */ pid = getpid(); seq = 0; - rtm_addrs = RTA_DST | RTA_NETMASK | RTA_IFP; + rtm_addrs = RTA_DST | RTA_NETMASK; bzero(&m_rtmsg, sizeof(m_rtmsg)); bzero(&so_dst, sizeof(so_dst));