* --ip-win32 netsh (or --ip-win32 adaptive when in netsh
mode) can now set DNS/WINS addresses on the TAP-Win32
adapter.
+* Added new option --route-method adaptive (Win32)
+ which tries IP helper API first, then falls back to
+ route.exe.
+* Made --route-method adaptive the default.
2005.11.12 -- Version 2.1-beta7
#endif
o->tuntap_options.dhcp_lease_time = 31536000; /* one year */
o->tuntap_options.dhcp_masq_offset = 0; /* use network address as internal DHCP server address */
- o->route_method = ROUTE_METHOD_IPAPI;
+ o->route_method = ROUTE_METHOD_ADAPTIVE;
#endif
#ifdef USE_PTHREAD
o->n_threads = 1;
else if (streq (p[0], "route-method") && p[1])
{
VERIFY_PERMISSION (OPT_P_ROUTE_EXTRAS);
- if (streq (p[1], "ipapi"))
+ if (streq (p[1], "adaptive"))
+ options->route_method = ROUTE_METHOD_ADAPTIVE;
+ else if (streq (p[1], "ipapi"))
options->route_method = ROUTE_METHOD_IPAPI;
else if (streq (p[1], "exe"))
options->route_method = ROUTE_METHOD_EXE;
else
{
- msg (msglevel, "--route method must be 'ipapi' or 'exe'");
+ msg (msglevel, "--route method must be 'adaptive', 'ipapi', or 'exe'");
goto err;
}
}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* JYFIXME WIN32 todo: add adaptive route-method */
-
/*
* Support routines for adding/deleting network routes.
*/
status = system_check (BSTR (&buf), es, 0, "ERROR: Windows route add command failed");
netcmd_semaphore_release ();
}
+ else if ((flags & ROUTE_METHOD_MASK) == ROUTE_METHOD_ADAPTIVE)
+ {
+ status = add_route_ipapi (r, tt);
+ msg (D_ROUTE, "Route addition via IPAPI %s [adaptive]", status ? "succeeded" : "failed");
+ if (!status)
+ {
+ msg (D_ROUTE, "Route addition fallback to route.exe");
+ netcmd_semaphore_lock ();
+ status = system_check (BSTR (&buf), es, 0, "ERROR: Windows route add command failed [adaptive]");
+ netcmd_semaphore_release ();
+ }
+ }
else
{
ASSERT (0);
system_check (BSTR (&buf), es, 0, "ERROR: Windows route delete command failed");
netcmd_semaphore_release ();
}
+ else if ((flags & ROUTE_METHOD_MASK) == ROUTE_METHOD_ADAPTIVE)
+ {
+ const bool status = del_route_ipapi (r, tt);
+ msg (D_ROUTE, "Route deletion via IPAPI %s [adaptive]", status ? "succeeded" : "failed");
+ if (!status)
+ {
+ msg (D_ROUTE, "Route deletion fallback to route.exe");
+ netcmd_semaphore_lock ();
+ system_check (BSTR (&buf), es, 0, "ERROR: Windows route delete command failed [adaptive]");
+ netcmd_semaphore_release ();
+ }
+ }
else
{
ASSERT (0);
/*
* Windows route methods
*/
-#define ROUTE_METHOD_IPAPI 0 /* use IP helper API */
-#define ROUTE_METHOD_EXE 1 /* use route.exe */
-#define ROUTE_METHOD_MASK 1
+#define ROUTE_METHOD_ADAPTIVE 0 /* try IP helper first then route.exe */
+#define ROUTE_METHOD_IPAPI 1 /* use IP helper API */
+#define ROUTE_METHOD_EXE 2 /* use route.exe */
+#define ROUTE_METHOD_MASK 3
#endif
/*
* Route add flags (must stay clear of ROUTE_METHOD bits)
*/
-#define ROUTE_DELETE_FIRST 2
+#define ROUTE_DELETE_FIRST 4
struct route_bypass
{