From: Selva Nair
Use a unified logging format for various route-methods
- Route add/delete errors are always logged with M_WARN, so
log only additional information (succeed/exists) with D_ROUTE.
- Non-windows platforms log route errors with a prefix "ERROR:" and
debug info with "ROUTE:". Do the same on Windows. Do not log
errors or success multiple times.
- In add_route_ipv6, log the interface id instead of device name
as the latter always point to the tun/tap adapter name on Windows.
Log lines prefixed with a PACKAGE_NAME "ROUTE" are unchanged.
They appear to use the same format on all platforms.
v2: rebase to master
Signed-off-by: Selva Nair
---
src/openvpn/route.c | 66 +++--
1 file changed, 46 insertions(+), 20 deletions(-)
diff --git a/src/openvpn/route.c b/src/openvpn/route.c
index 61a40ff1..8f54eb50 100644
--- a/src/openvpn/route.c
+++ b/src/openvpn/route.c
@@ -1641,17 +1641,15 @@ add_route(struct route_ipv4 *r,
argv_msg(D_ROUTE, );
+const char *method = "service";
if ((flags & ROUTE_METHOD_MASK) == ROUTE_METHOD_SERVICE)
{
status = add_route_service(r, tt);
-msg(D_ROUTE, "Route addition via service %s",
-(status == RTA_SUCCESS) ? "succeeded" : "failed");
}
else if ((flags & ROUTE_METHOD_MASK) == ROUTE_METHOD_IPAPI)
{
status = add_route_ipapi(r, tt, ai);
-msg(D_ROUTE, "Route addition via IPAPI %s",
-(status == RTA_SUCCESS) ? "succeeded" : "failed");
+method = "ipapi";
}
else if ((flags & ROUTE_METHOD_MASK) == ROUTE_METHOD_EXE)
{
@@ -1660,12 +1658,12 @@ add_route(struct route_ipv4 *r,
"ERROR: Windows route add command
failed");
status = ret ? RTA_SUCCESS : RTA_ERROR;
netcmd_semaphore_release();
+method = "route.exe";
}
else if ((flags & ROUTE_METHOD_MASK) == ROUTE_METHOD_ADAPTIVE)
{
status = add_route_ipapi(r, tt, ai);
-msg(D_ROUTE, "Route addition via IPAPI %s [adaptive]",
-(status == RTA_SUCCESS) ? "succeeded" : "failed");
+method = "ipapi [adaptive]";
if (status == RTA_ERROR)
{
msg(D_ROUTE, "Route addition fallback to route.exe");
@@ -1674,12 +1672,18 @@ add_route(struct route_ipv4 *r,
"ERROR: Windows route add
command failed [adaptive]");
status = ret ? RTA_SUCCESS : RTA_ERROR;
netcmd_semaphore_release();
+method = "route.exe";
}
}
else
{
ASSERT(0);
}
+if (status != RTA_ERROR) /* error is logged upstream */
+{
+msg(D_ROUTE, "Route addition via %s %s", method,
+(status == RTA_SUCCESS) ? "succeeded" : "failed because route
exists");
+}
}
#elif defined (TARGET_SOLARIS)
@@ -1881,7 +1885,6 @@ add_route_ipv6(struct route_ipv6 *r6, const struct tuntap
*tt,
openvpn_net_ctx_t *ctx)
{
int status = 0;
-const char *device = tt->actual_name;
bool gateway_needed = false;
if (!(r6->flags & RT_DEFINED) )
@@ -1893,6 +1896,7 @@ add_route_ipv6(struct route_ipv6 *r6, const struct tuntap
*tt,
struct gc_arena gc = gc_new();
#ifndef _WIN32
+const char *device = tt->actual_name;
if (r6->iface != NULL) /* vpn server special route */
{
device = r6->iface;
@@ -1925,8 +1929,14 @@ add_route_ipv6(struct route_ipv6 *r6, const struct
tuntap *tt,
}
#endif
+#ifndef _WIN32
msg( M_INFO, "add_route_ipv6(%s/%d -> %s metric %d) dev %s",
network, r6->netbits, gateway, r6->metric, device );
+#else
+msg( M_INFO, "add_route_ipv6(%s/%d -> %s metric %d) IF %lu",
+ network, r6->netbits, gateway, r6->metric,
+ r6->adapter_index ? r6->adapter_index : tt->adapter_index);
+#endif
/*
* Filter out routes which are essentially no-ops
@@ -2871,14 +2881,16 @@ add_route_ipapi(const struct route_ipv4 *r, const
struct tuntap *tt, DWORD adapt
doublebreak:
if (status != NO_ERROR)
{
-msg(M_WARN, "ROUTE: route addition failed using
CreateIpForwardEntry: %s [status=%u if_index=%u]",
-strerror_win32(status, ),
-(unsigned int)status,
-(unsigned int)if_index);
if (status == ERROR_OBJECT_ALREADY_EXISTS)
{
ret = RTA_EEXIST;
}
+else
+{
+msg(M_WARN, "ERROR: route addition failed using
CreateIpForwardEntry: "
+"%s [status=%u if_index=%u]", strerror_win32(status,
),
+(unsigned int)status,