refactor struct route_ipv6, bring in line with struct route_ipv4 again
PATCH 1/2 refactor struct route_ipv6, bring in line with struct route_ipv4 again
adjust "struct route_ipv6" (and all users) to reflect changes to "struct route_ipv4" done in commit 7fb0e07e, namely:
- new member "r6->flags"
- "r6->defined" becomes "r6->flags & RT_DEFINED"
- "r6->metric_defined" becomes "r6->flags & RT_METRIC_DEFINED"
- route addition status is stored in "r6->flags & RT_ADDED"
--- src/openvpn/route.c | 35 ++++++++++++++++++----------------- src/openvpn/route.h | 3 +-- src/openvpn/tun.c | 6 ++---- 3 files changed, 21 insertions(+), 23 deletions(-)
src/openvpn/route.c +18 -17
@@ -374,7 +374,7 @@ init_route_ipv6 (struct route_ipv6 *r6,const struct route_ipv6_option *r6o, const struct route_ipv6_list *rl6 ) { - r6->defined = false; + CLEAR (*r6);if ( !get_ipv6_addr ( r6o->prefix, &r6->network, &r6->netbits,NULL ,M_WARN )) goto fail;
@@ -399,7 +399,6 @@ init_route_ipv6 (struct route_ipv6 *r6,/* metric */ - r6->metric_defined = false; r6->metric =-1 ;if (is_route_parm_defined (r6o->metric)) {
@@ -411,22 +410,21 @@ init_route_ipv6 (struct route_ipv6 *r6, r6o->metric); goto fail; } - r6->metric_defined = true; + r6->flags |=RT_METRIC_DEFINED ; }else if (rl6->default_metric_defined) { r6->metric = rl6->default_metric; - r6->metric_defined = true; + r6->flags |=RT_METRIC_DEFINED ; } - r6->defined = true; + r6->flags |=RT_DEFINED ;return true; fail:msg (M_WARN ,PACKAGE_NAME " ROUTE: failed to parse/resolve route for host/network: %s" , r6o->prefix); - r6->defined = false;return false; }
@@ -1168,7 +1166,7 @@ static void setenv_route_ipv6 (struct env_set *es, const struct route_ipv6 *r6, int i) { struct gc_arena gc = gc_new (); -if (r6->defined) +if (r6->flags &RT_DEFINED ) {struct buffer name1 =alloc_buf_gc (256 , &gc );struct buffer val =alloc_buf_gc (256 , &gc );
@@ -1545,7 +1543,7 @@ add_route_ipv6 (struct route_ipv6 *r6, const struct tuntap *tt, unsigned int flabool gateway_needed = false; -if (!r6->defined) +if (! (r6->flags &RT_DEFINED ) )return ;gc_init (&gc);
@@ -1576,7 +1574,7 @@ add_route_ipv6 (struct route_ipv6 *r6, const struct tuntap *tt, unsigned int fla* gateway unless the route is to be an on-link network */ if ( tt->type ==DEV_TYPE_TAP && - !(r6->metric_defined && r6->metric ==0 ) ) + !( (r6->flags &RT_METRIC_DEFINED ) && r6->metric ==0 ) ) { gateway_needed = true; }
@@ -1590,7 +1588,7 @@ add_route_ipv6 (struct route_ipv6 *r6, const struct tuntap *tt, unsigned int fla device);if (gateway_needed)argv_printf_cat (&argv,"via %s" , gateway); -if (r6->metric_defined && r6->metric >0 ) +if ( (r6->flags &RT_METRIC_DEFINED ) && r6->metric >0 )argv_printf_cat (&argv," metric %d" , r6->metric);#else
@@ -1601,7 +1599,7 @@ add_route_ipv6 (struct route_ipv6 *r6, const struct tuntap *tt, unsigned int fla device);if (gateway_needed)argv_printf_cat (&argv,"gw %s" , gateway); -if (r6->metric_defined && r6->metric >0 ) +if ( (r6->flags &RT_METRIC_DEFINED ) && r6->metric >0 )argv_printf_cat (&argv," metric %d" , r6->metric);#endif /*ENABLE_IPROUTE*/ argv_msg (D_ROUTE , &argv);
@@ -1635,7 +1633,7 @@ add_route_ipv6 (struct route_ipv6 *r6, const struct tuntap *tt, unsigned int flaargv_printf_cat ( &argv," %s" , gateway );#if 0 -if (r->metric_defined) +if (r6->flags &RT_METRIC_DEFINED )argv_printf_cat (&argv," METRIC %d" , r->metric);#endif
@@ -1727,7 +1725,10 @@ add_route_ipv6 (struct route_ipv6 *r6, const struct tuntap *tt, unsigned int flamsg (M_FATAL ,"Sorry, but I don't know how to do 'route ipv6' commands on this operating system. Try putting your routes in a --route-up script" );#endif - r6->defined = status; +if (status) + r6->flags |=RT_ADDED ; +else + r6->flags &= ~RT_ADDED ;argv_reset (&argv);gc_free (&gc); }
@@ -1916,7 +1917,7 @@ delete_route_ipv6 (const struct route_ipv6 *r6, const struct tuntap *tt, unsigneconst char *device = tt->actual_name;bool gateway_needed = false; -if (!r6->defined) +if ((r6->flags & (RT_DEFINED |RT_ADDED )) != (RT_DEFINED |RT_ADDED ))return ;gc_init (&gc);
@@ -1938,7 +1939,7 @@ delete_route_ipv6 (const struct route_ipv6 *r6, const struct tuntap *tt, unsigne* delete, otherwise some OSes will refuse to delete the route */ if ( tt->type ==DEV_TYPE_TAP && - !(r6->metric_defined && r6->metric ==0 ) ) + !( (r6->flags &RT_METRIC_DEFINED ) && r6->metric ==0 ) ) { gateway_needed = true; }
@@ -1961,7 +1962,7 @@ delete_route_ipv6 (const struct route_ipv6 *r6, const struct tuntap *tt, unsigne device);if (gateway_needed)argv_printf_cat (&argv,"gw %s" , gateway); -if (r6->metric_defined && r6->metric >0 ) +if ( (r6->flags &RT_METRIC_DEFINED ) && r6->metric >0 )argv_printf_cat (&argv," metric %d" , r6->metric);#endif /*ENABLE_IPROUTE*/ argv_msg (D_ROUTE , &argv);
@@ -1989,7 +1990,7 @@ delete_route_ipv6 (const struct route_ipv6 *r6, const struct tuntap *tt, unsigneargv_printf_cat ( &argv," %s" , gateway );#if 0 -if (r->metric_defined) +if (r6->flags &RT_METRIC_DEFINED )argv_printf_cat (&argv,"METRIC %d" , r->metric);#endif
src/openvpn/route.h +1 -2
@@ -123,11 +123,10 @@ struct route_ipv4 {struct route_ipv6 {struct route_ipv6 *next; -bool defined; +unsigned int flags;/* RT_ flags, see route_ipv4 */ struct in6_addr network;unsigned int netbits;struct in6_addr gateway; -bool metric_defined;int metric; };
src/openvpn/tun.c +2 -4
@@ -607,12 +607,11 @@ void add_route_connected_v6_net(struct tuntap * tt, {struct route_ipv6 r6; - r6.defined = true; r6.network = tt->local_ipv6; r6.netbits = tt->netbits_ipv6; r6.gateway = tt->local_ipv6; r6.metric =0 ;/* connected route */ - r6.metric_defined = true; + r6.flags =RT_DEFINED |RT_METRIC_DEFINED ;add_route_ipv6 (&r6, tt,0 , es); }
@@ -621,12 +620,11 @@ void delete_route_connected_v6_net(struct tuntap * tt, {struct route_ipv6 r6; - r6.defined = true; r6.network = tt->local_ipv6; r6.netbits = tt->netbits_ipv6; r6.gateway = tt->local_ipv6; r6.metric =0 ;/* connected route */ - r6.metric_defined = true; + r6.flags =RT_DEFINED |RT_ADDED |RT_METRIC_DEFINED ;delete_route_ipv6 (&r6, tt,0 , es); }#endif
Signature · 1 line
2.3.6
PATCH 2/2 refactor struct route_ipv6_list, bring in line with struct route_list again
adjust "struct route_ipv6_list" (and all users) to reflect changes to "struct route_list" done in commit 7fb0e07e, namely:
- new member "rl6->iflags" (RL_* flags)
- new member "rl6->spec_flags" (RTSA_* flags)
- new member "rl6->remote_host_ipv6" (--remote address we're talking to)
- "rl6->routes_added"
--> "rl6->iflags & RL_ROUTES_ADDED"
- "rl6->did_redirect_default_gateway"
--> "rl6->iflags & RL_DID_REDIRECT_DEFAULT_GATEWAY"
- "rl6->did_local"
--> "rl6->iflags & RL_DID_LOCAL"
- "rl6->remote_endpoint_defined"
--> "rl6->spec_flags & RTSA_REMOTE_ENDPOINT"
- "rl6->default_metric_defined"
--> "rl6->spec_flags & RTSA_DEFAULT_METRIC"deviating from IPv4 route_list, there is no "route_special_addr spec" sub-struct, because it's not considered useful (rl->spec.flags becomes rl6->spec_flags, the IPv6 equivalent of everything else in rl->spec just lives inside struct route_ipv6_list)
--- src/openvpn/route.c | 19 ++++++++----------- src/openvpn/route.h | 16 ++++++++-------- 2 files changed, 16 insertions(+), 19 deletions(-)
src/openvpn/route.c +8 -11
@@ -387,7 +387,7 @@ init_route_ipv6 (struct route_ipv6 *r6,msg (M_WARN ,PACKAGE_NAME "ROUTE6: cannot parse gateway spec '%s'" , r6o->gateway ); } } -else if (rl6->remote_endpoint_defined) +else if (rl6->spec_flags &RTSA_REMOTE_ENDPOINT ) { r6->gateway = rl6->remote_endpoint_ipv6; }
@@ -412,7 +412,7 @@ init_route_ipv6 (struct route_ipv6 *r6, } r6->flags |=RT_METRIC_DEFINED ; } -else if (rl6->default_metric_defined) +else if (rl6->spec_flags &RTSA_DEFAULT_METRIC ) { r6->metric = rl6->default_metric; r6->flags |=RT_METRIC_DEFINED ;
@@ -671,7 +671,7 @@ init_route_ipv6_list (struct route_ipv6_list *rl6,if (default_metric >=0 ) { rl6->default_metric = default_metric; - rl6->default_metric_defined = true; + rl6->spec_flags |=RTSA_DEFAULT_METRIC ; }/* "default_gateway" is stuff for "redirect-gateway", which we don't
@@ -686,7 +686,7 @@ init_route_ipv6_list (struct route_ipv6_list *rl6,if (inet_pton (AF_INET6 , remote_endpoint, &rl6->remote_endpoint_ipv6) ==1 ) { - rl6->remote_endpoint_defined = true; + rl6->spec_flags |=RTSA_REMOTE_ENDPOINT ; }else {
@@ -694,9 +694,6 @@ init_route_ipv6_list (struct route_ipv6_list *rl6, ret = false; } } -else - rl6->remote_endpoint_defined = false; -/* parse the routes from opt6 to rl6 */ {
@@ -1003,7 +1000,7 @@ add_routes (struct route_list *rl, struct route_ipv6_list *rl6, const struct tun } rl->iflags |=RL_ROUTES_ADDED ; } -if (rl6 && !rl6->routes_added) +if (rl6 && !(rl6->iflags &RL_ROUTES_ADDED ) ) {struct route_ipv6 *r;for (r = rl6->routes_ipv6; r; r = r->next)
@@ -1012,7 +1009,7 @@ add_routes (struct route_list *rl, struct route_ipv6_list *rl6, const struct tundelete_route_ipv6 (r, tt, flags, es);add_route_ipv6 (r, tt, flags, es); } - rl6->routes_added = true; + rl6->iflags |=RL_ROUTES_ADDED ; } }
@@ -1037,14 +1034,14 @@ delete_routes (struct route_list *rl, struct route_ipv6_list *rl6,clear_route_list (rl); } -if ( rl6 && rl6->routes_added ) +if ( rl6 && (rl6->iflags &RL_ROUTES_ADDED ) ) {struct route_ipv6 *r6;for (r6 = rl6->routes_ipv6; r6; r6 = r6->next) {delete_route_ipv6 (r6, tt, flags, es); } - rl6->routes_added = false; + rl6->iflags &= ~RL_ROUTES_ADDED ; }if ( rl6 )
src/openvpn/route.h +8 -8
@@ -103,7 +103,7 @@ struct route_ipv6_option { };struct route_ipv6_option_list { -unsigned int flags; +unsigned int flags;/* RG_x flags, see route_option-list */ struct route_ipv6_option *routes_ipv6;struct gc_arena *gc; };
@@ -131,14 +131,14 @@ struct route_ipv6 { };struct route_ipv6_list { -bool routes_added; -unsigned int flags; +unsigned int iflags;/* RL_ flags, see route_list */ + +unsigned int spec_flags;/* RTSA_ flags, route_special_addr */ +struct in6_addr remote_endpoint_ipv6;/* inside tun */ +struct in6_addr remote_host_ipv6;/* --remote address */ int default_metric; -bool default_metric_defined; -struct in6_addr remote_endpoint_ipv6; -bool remote_endpoint_defined; -bool did_redirect_default_gateway;/* TODO (?) */ -bool did_local;/* TODO (?) */ + +unsigned int flags;/* RG_x flags, see route_option_list */ struct route_ipv6 *routes_ipv6;struct gc_arena gc; };
Signature · 1 line
2.3.6