Added --route-metric option to set a default route metric

for --route (Roy Marples).


git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@1011 e7ae566f-a301-0410-adde-c780ea21d3b5
This commit is contained in:
james 2006-04-13 20:40:39 +00:00
parent 151ea252ee
commit 40ac3d7ac1
7 changed files with 42 additions and 3 deletions

View File

@ -7,10 +7,15 @@ $Id$
* Fixed Windows server bug in time backtrack handling code which
could cause TLS negotiation failures on legitimate clients.
* Rewrote gettimeofday function for Windows to be
simpler and more efficient.
* Merged PKCS#11 extensions to easy-rsa/2.0 (Alon Bar-Lev).
* Added --route-metric option to set a default route metric
for --route (Roy Marples).
2006.04.12 -- Version 2.1-beta13
* Code added in 2.1-beta7 and 2.0.6-rc1 to extend byte counters

4
init.c
View File

@ -634,15 +634,19 @@ do_init_route_list (const struct options *options,
{
const char *gw = NULL;
int dev = dev_type_enum (options->dev, options->dev_type);
int metric = 0;
if (dev == DEV_TYPE_TUN && (options->topology == TOP_NET30 || options->topology == TOP_P2P))
gw = options->ifconfig_remote_netmask;
if (options->route_default_gateway)
gw = options->route_default_gateway;
if (options->route_default_metric)
metric = options->route_default_metric;
if (!init_route_list (route_list,
options->routes,
gw,
metric,
link_socket_current_remote (link_socket_info),
es))
{

View File

@ -240,6 +240,7 @@ openvpn \- secure IP tunnel daemon.
[\ \fB\-\-route\-delay\fR\ \fI[n]\ [w]\fR\ ]
[\ \fB\-\-route\-gateway\fR\ \fIgw\fR\ ]
[\ \fB\-\-route\-method\fR\ \fIm\fR\ ]
[\ \fB\-\-route\-metric\fR\ \fIm\fR\ ]
[\ \fB\-\-route\-noexec\fR\ ]
[\ \fB\-\-route\-nopull\fR\ ]
[\ \fB\-\-route\-up\fR\ \fIcmd\fR\ ]
@ -1037,6 +1038,11 @@ when
.B --dev tun
is specified.
.B metric
default -- taken from
.B --route-metric
otherwise 0.
The default can be specified by leaving an option blank or setting
it to "default".
@ -1073,6 +1079,12 @@ Specify a default gateway
.B gw
for use with
.B --route.
.TP
.B --route-metric m
Specify a default metric
.B m
for use with
.B --route.
.\"*********************************************************
.TP
.B --route-delay [n] [w]

View File

@ -166,6 +166,7 @@ static const char usage_message[] =
" gateway default: taken from --route-gateway or --ifconfig\n"
" Specify default by leaving blank or setting to \"nil\".\n"
"--route-gateway gw : Specify a default gateway for use with --route.\n"
"--route-metric m : Specify a default metric for use with --route.\n"
"--route-delay n [w] : Delay n seconds after connection initiation before\n"
" adding routes (may be 0). If not specified, routes will\n"
" be added immediately after tun/tap open. On Windows, wait\n"
@ -1175,6 +1176,7 @@ show_settings (const struct options *o)
SHOW_STR (route_script);
SHOW_STR (route_default_gateway);
SHOW_INT (route_default_metric);
SHOW_BOOL (route_noexec);
SHOW_INT (route_delay);
SHOW_INT (route_delay_window);
@ -3938,6 +3940,11 @@ add_option (struct options *options,
VERIFY_PERMISSION (OPT_P_ROUTE_EXTRAS);
options->route_default_gateway = p[1];
}
else if (streq (p[0], "route-metric") && p[1])
{
VERIFY_PERMISSION (OPT_P_ROUTE);
options->route_default_metric = positive_atoi (p[1]);
}
else if (streq (p[0], "route-delay"))
{
VERIFY_PERMISSION (OPT_P_ROUTE_EXTRAS);

View File

@ -243,6 +243,7 @@ struct options
/* route management */
const char *route_script;
const char *route_default_gateway;
int route_default_metric;
bool route_noexec;
int route_delay;
int route_delay_window;

13
route.c
View File

@ -276,10 +276,10 @@ init_route (struct route *r,
}
r->metric_defined = true;
}
else
else if (spec->default_metric_defined)
{
r->metric = 0;
r->metric_defined = false;
r->metric = spec->default_metric;
r->metric_defined = true;
}
r->defined = true;
@ -322,6 +322,7 @@ bool
init_route_list (struct route_list *rl,
const struct route_option_list *opt,
const char *remote_endpoint,
int default_metric,
in_addr_t remote_host,
struct env_set *es)
{
@ -338,6 +339,12 @@ init_route_list (struct route_list *rl,
rl->spec.remote_host_defined = true;
}
if (default_metric)
{
rl->spec.default_metric = default_metric;
rl->spec.default_metric_defined = true;
}
rl->spec.net_gateway_defined = get_default_gateway (&rl->spec.net_gateway);
if (rl->spec.net_gateway_defined)
{

View File

@ -65,6 +65,8 @@ struct route_special_addr
in_addr_t remote_host;
bool remote_host_defined;
struct route_bypass bypass;
int default_metric;
bool default_metric_defined;
};
struct route_option {
@ -132,6 +134,7 @@ void clear_route_list (struct route_list *rl);
bool init_route_list (struct route_list *rl,
const struct route_option_list *opt,
const char *remote_endpoint,
int default_metric,
in_addr_t remote_host,
struct env_set *es);