@@ -1403,7 +1403,6 @@
/* local_route() return values */
#define LR_NOMATCH 0 /* route is not local */
#define LR_MATCH 1 /* route is local */
-#define LR_ERROR 2 /* caller should abort adding route */
static int
local_route(in_addr_t network, in_addr_t netmask, in_addr_t gateway,
@@ -1438,10 +1437,11 @@
* a route is specified as an interface rather than an address. */
#if defined(TARGET_LINUX) || defined(_WIN32) || defined(TARGET_DARWIN)
static inline bool
-is_on_link(const int is_local_route, const unsigned int flags, const struct route_gateway_info *rgi)
+is_on_link(const struct route_ipv4 *r, const unsigned int flags,
+ const struct route_gateway_info *rgi)
{
return rgi
- && (is_local_route == LR_MATCH
+ && (local_route(r->network, r->netmask, r->gateway, rgi) == LR_MATCH
|| ((flags & ROUTE_REF_GW) && (rgi->flags & RGI_ON_LINK)));
}
#endif
@@ -1452,7 +1452,6 @@
const struct env_set *es, openvpn_net_ctx_t *ctx)
{
int status = 0;
- int is_local_route;
if (!(r->flags & RT_DEFINED))
{
@@ -1470,17 +1469,12 @@
const char *gateway = print_in_addr_t(r->gateway, 0, &gc);
#endif
- is_local_route = local_route(r->network, r->netmask, r->gateway, rgi);
- if (is_local_route == LR_ERROR)
- {
- goto done;
- }
#if defined(TARGET_LINUX)
const char *iface = NULL;
int metric = -1;
- if (is_on_link(is_local_route, flags, rgi))
+ if (is_on_link(r, flags, rgi))
{
iface = rgi->iface;
}
@@ -1528,7 +1522,7 @@
{
argv_printf_cat(&argv, "METRIC %d", r->metric);
}
- if (is_on_link(is_local_route, flags, rgi))
+ if (is_on_link(r, flags, rgi))
{
ai = rgi->adapter_index;
argv_printf_cat(&argv, "IF %lu", ai);
@@ -1654,7 +1648,7 @@
}
#endif
- if (is_on_link(is_local_route, flags, rgi))
+ if (is_on_link(r, flags, rgi))
{
/* Mac OS X route syntax for ON_LINK:
* route add -cloning -net 10.10.0.1 -netmask 255.255.255.255 -interface en0 */
@@ -1713,7 +1707,6 @@
"Sorry, but I don't know how to do 'route' commands on this operating system. Try putting your routes in a --route-up script");
#endif /* if defined(TARGET_LINUX) */
-done:
if (status == RTA_SUCCESS)
{
r->flags |= RT_ADDED;
@@ -2004,7 +1997,6 @@
#else /* if !defined(TARGET_LINUX) */
int metric;
#endif
- int is_local_route;
if ((r->flags & (RT_DEFINED | RT_ADDED)) != (RT_DEFINED | RT_ADDED))
{
@@ -2022,11 +2014,6 @@
gateway = print_in_addr_t(r->gateway, 0, &gc);
#endif
- is_local_route = local_route(r->network, r->netmask, r->gateway, rgi);
- if (is_local_route == LR_ERROR)
- {
- goto done;
- }
#if defined(TARGET_LINUX)
metric = -1;
@@ -2105,7 +2092,7 @@
#elif defined(TARGET_DARWIN)
- if (is_on_link(is_local_route, flags, rgi))
+ if (is_on_link(r, flags, rgi))
{
argv_printf(&argv, "%s delete -cloning -net %s -netmask %s -interface %s", ROUTE_PATH,
network, netmask, rgi->iface);
@@ -2155,7 +2142,6 @@
"Sorry, but I don't know how to do 'route' commands on this operating system. Try putting your routes in a --route-up script");
#endif /* if defined(TARGET_LINUX) */
-done:
r->flags &= ~RT_ADDED;
argv_free(&argv);
gc_free(&gc);