On Tue, Apr 18, 2023 at 05:26:55PM +0200, Gianmarco De Gregori wrote:
> Add the ability for users to specify a custom
> routing table where routes should be installed in.
> As of now routes are always installed in the main
> routing table of the operating system, however,
> with the new --route-table option it is possibile
> to specify the ID of the default routing table
> to be used by --route(-ipv6).
> 
> The --route(-ipv6) directives have been extended
> with an additional argument (5th for --route)
> (4th for --route-ipv6) so that each of them
> can possibly use an independent routing table.
> 
> Please note: this feature is currently supported
> only by Linux/SITNL.
> Support for other platforms should be added in related backends.
> 
> Fixes: Trac #1399
> Signed-off-by: Gianmarco De Gregori <gianma...@mandelbit.com>
> ---
> Changes from v1:
> * Fixed parameters (metric and table_id) order in init_route_list() call in 
> init.c : 1535.
> 
> Changes from v2:
> * Add route_default_table_id to show_settings() in options.c : 1800.
> 
> Changes from v3:
> * Switched table_id data type from uint32_t to int.
> * Added discard to pulled routing table_id from server in case of pull mode.

One question about that, see below.

[...]
> diff --git a/src/openvpn/options.c b/src/openvpn/options.c
> index 2680f268..a908566a 100644
> --- a/src/openvpn/options.c
> +++ b/src/openvpn/options.c

side-note: --route-table missing in usage_message.

> @@ -1912,6 +1912,7 @@ show_settings(const struct options *o)
>      SHOW_STR(route_script);
>      SHOW_STR(route_default_gateway);
>      SHOW_INT(route_default_metric);
> +    SHOW_INT(route_default_table_id);
>      SHOW_BOOL(route_noexec);
>      SHOW_INT(route_delay);
>      SHOW_INT(route_delay_window);
> @@ -6956,7 +6957,15 @@ add_option(struct options *options,
>          cnol_check_alloc(options);
>          add_client_nat_to_option_list(options->client_nat, p[1], p[2], p[3], 
> p[4], msglevel);
>      }
> -    else if (streq(p[0], "route") && p[1] && !p[5])
> +    else if (streq(p[0], "route-table") && p[1] && !p[2])
> +    {
> +#ifndef ENABLE_SITNL
> +        msg(M_WARN, "NOTE: --route-table specified, but not supported on 
> this platform");
> +#endif
> +        VERIFY_PERMISSION(OPT_P_ROUTE);
> +        options->route_default_table_id = positive_atoi(p[1]);
> +    }
> +    else if (streq(p[0], "route") && p[1] && !p[6])
>      {
>          VERIFY_PERMISSION(OPT_P_ROUTE);
>          rol_check_alloc(options);
> @@ -6977,10 +6986,31 @@ add_option(struct options *options,
>                  msg(msglevel, "route parameter gateway '%s' must be a valid 
> address", p[3]);
>                  goto err;
>              }
> +            /* p[4] is metric, if specified */
> +
> +            /* discard pulled routing table_id from server
> +             * since this must be an entirely local choice */


Don't you need that check for --route-table as well?

> +            if (p[5])
> +            {
> +                p[5] = NULL;
> +            }
> +        }
> +        /* at the moment the routing table id is supported only by 
> Linux/SITNL */
> +#ifndef ENABLE_SITNL
> +        if (p[5])
> +        {
> +            static bool route_table_warned = false;
> +
> +            if (!route_table_warned)
> +            {
> +                msg(M_WARN, "NOTE: table specified for --route, but not 
> supported on this platform");
> +                route_table_warned = true;
> +            }
>          }
> -        add_route_to_option_list(options->routes, p[1], p[2], p[3], p[4]);
> +#endif
> +        add_route_to_option_list(options->routes, p[1], p[2], p[3], p[4], 
> p[5]);
>      }
> -    else if (streq(p[0], "route-ipv6") && p[1] && !p[4])
> +    else if (streq(p[0], "route-ipv6") && p[1] && !p[5])
>      {
>          VERIFY_PERMISSION(OPT_P_ROUTE);
>          rol6_check_alloc(options);

Regards,
-- 
  Frank Lichtenheld


_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to