Message ID | 20200820134946.10573-1-jan.seeger@thenybble.de |
---|---|
State | Superseded |
Headers | show |
Series | [Openvpn-devel] Added environment variable for IPv6 route metric. | expand |
Hi, On Thu, Aug 20, 2020 at 03:49:46PM +0200, Jan Seeger wrote: > --- a/src/openvpn/route.c > +++ b/src/openvpn/route.c > @@ -1463,6 +1463,7 @@ setenv_route_ipv6(struct env_set *es, const struct route_ipv6 *r6, int i) > struct buffer name1 = alloc_buf_gc( 256, &gc ); > struct buffer val = alloc_buf_gc( 256, &gc ); > struct buffer name2 = alloc_buf_gc( 256, &gc ); > + struct buffer name3 = alloc_buf_gc( 256, &gc ); > > buf_printf( &name1, "route_ipv6_network_%d", i ); > buf_printf( &val, "%s/%d", print_in6_addr( r6->network, 0, &gc ), > @@ -1471,6 +1472,11 @@ setenv_route_ipv6(struct env_set *es, const struct route_ipv6 *r6, int i) > > buf_printf( &name2, "route_ipv6_gateway_%d", i ); > setenv_str( es, BSTR(&name2), print_in6_addr( r6->gateway, 0, &gc )); > + > + if (r6->flags & RT_METRIC_DEFINED) { > + buf_printf( &name3, "route_ipv6_metric_%d", i) ; > + setenv_int( es, BSTR(&name3), r6->metric); > + } style guide demands "{" on a separate line, so if (r6->flags & RT_METRIC_DEFINED) { also, I'd move the allocation of "name3" into this block. if (r6->flags & RT_METRIC_DEFINED) { struct buffer name3 = alloc_buf_gc( 256, &gc ); ... (no need to allocate memory if this is never used - also, with our move towards C99, new code is encouraged to declare variables where first needed, not "at the top of the function") gert
Hello! Thanks for your feedback. I've added the necessary changes. Best regards, Jan
diff --git a/doc/man-sections/script-options.rst b/doc/man-sections/script-options.rst index b4bbf52f..062646b2 100644 --- a/doc/man-sections/script-options.rst +++ b/doc/man-sections/script-options.rst @@ -710,10 +710,10 @@ instances. A set of variables which define each IPv6 route to be added, and are set prior to **--up** script execution. - ``parm`` will be one of :code:`network` or :code:`gateway` + ``parm`` will be one of :code:`network`, :code:`gateway` (:code:`netmask` is contained as :code:`/nnn` in the ``route_ipv6_network_{n}``, unlike IPv4 where it is passed in a - separate environment variable). + separate environment variable) or :code:`metric`. ``n`` is the OpenVPN route number, starting from 1. diff --git a/src/openvpn/route.c b/src/openvpn/route.c index f127a90a..7174f518 100644 --- a/src/openvpn/route.c +++ b/src/openvpn/route.c @@ -1463,6 +1463,7 @@ setenv_route_ipv6(struct env_set *es, const struct route_ipv6 *r6, int i) struct buffer name1 = alloc_buf_gc( 256, &gc ); struct buffer val = alloc_buf_gc( 256, &gc ); struct buffer name2 = alloc_buf_gc( 256, &gc ); + struct buffer name3 = alloc_buf_gc( 256, &gc ); buf_printf( &name1, "route_ipv6_network_%d", i ); buf_printf( &val, "%s/%d", print_in6_addr( r6->network, 0, &gc ), @@ -1471,6 +1472,11 @@ setenv_route_ipv6(struct env_set *es, const struct route_ipv6 *r6, int i) buf_printf( &name2, "route_ipv6_gateway_%d", i ); setenv_str( es, BSTR(&name2), print_in6_addr( r6->gateway, 0, &gc )); + + if (r6->flags & RT_METRIC_DEFINED) { + buf_printf( &name3, "route_ipv6_metric_%d", i) ; + setenv_int( es, BSTR(&name3), r6->metric); + } } gc_free(&gc); }