[Openvpn-devel] Added environment variable for IPv6 route metric.

Message ID 20200923125839.7519-2-jan.seeger@thenybble.de
State Superseded
Headers show
Series [Openvpn-devel] Added environment variable for IPv6 route metric. | expand

Commit Message

Jan Seeger Sept. 23, 2020, 2:58 a.m. UTC
---
 doc/man-sections/script-options.rst | 4 ++--
 src/openvpn/route.c                 | 7 +++++++
 2 files changed, 9 insertions(+), 2 deletions(-)

Comments

David Sommerseth Sept. 23, 2020, 7:18 a.m. UTC | #1
On 23/09/2020 14:58, Jan Seeger wrote:
> --- a/doc/man-sections/script-options.rst
> +++ b/doc/man-sections/script-options.rst
> @@ -709,10 +709,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`.

I would suggest to rewrite this slightly, to make it clearer.  The () sentence
should be incorporated as a normal sentence.

So the (text/plain) result will be something like:

  param will be one of network, code or metric.  The netmask is contained
  as /nnn in the route_ipv6_network_{n}, unlike IPv4 where it is passed in
  a separate environment variable.

Or maybe even (why do we highlight IPv4 differences so much?):

  param will be one of network, code or metric.  The netmask is
  not provided and is preserved as /nnn in the IPv6 range in
  route_ipv6_network_{n}.

(These examples needs the proper :code:`value` and ``value`` highlighting,
removed here for clarity)

Patch

diff --git a/doc/man-sections/script-options.rst b/doc/man-sections/script-options.rst
index a4df6732..0bf68c43 100644
--- a/doc/man-sections/script-options.rst
+++ b/doc/man-sections/script-options.rst
@@ -709,10 +709,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 bd6b968b..bab9b8e9 100644
--- a/src/openvpn/route.c
+++ b/src/openvpn/route.c
@@ -1479,6 +1479,13 @@  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)
+        {
+            struct buffer name3 = alloc_buf_gc( 256, &gc );
+            buf_printf( &name3, "route_ipv6_metric_%d", i) ;
+            setenv_int( es, BSTR(&name3), r6->metric);
+        }
     }
     gc_free(&gc);
 }