On Tue, Feb 7, 2023 at 8:22 AM Frank Lichtenheld <fr...@lichtenheld.com>
wrote:

> Automatically disabled when
> - iproute2 is enabled
>   (Don't want to force people specifying --disable-dco explicitely)
> - libnv is missing on FreeBSD
>   (FreeBSD version too old anyway)
>
> Will still error out if libnl-genl is missing on Linux to
> make people aware of the new dependency.
>
> Signed-off-by: Frank Lichtenheld <fr...@lichtenheld.com>
> ---
>  configure.ac | 82 ++++++++++++++++++++++++++++++++++++++++------------
>  1 file changed, 63 insertions(+), 19 deletions(-)
>
> v2: error out when libnl-genl is missing as discussed with ordex on
>     IRC.
>
> v3:
>  - improvements to the messages, suggested by Selva
>  - further improvements to the default specification, trying to make it
> clear
>  - if enabling iproute2, do not test for libnl-genl
>
>
> diff --git a/configure.ac b/configure.ac
> index 78c99740..ba33ccd8 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -146,14 +146,27 @@ AC_ARG_ENABLE(
>
>  AC_ARG_ENABLE(
>         [dco],
> -       [AS_HELP_STRING([--enable-dco], [enable data channel offload
> support using the ovpn-dco kernel module (always enabled on Windows)
> @<:@default=no@:>@])],
> +       [AS_HELP_STRING([--disable-dco], [disable data channel offload
> support using the ovpn-dco kernel module @<:@default=yes@:>@ on
> Linux/FreeBSD, can't disable on Windows])],
>         ,
> -       [enable_dco="no"]
> +       [
> +               case "$host" in
> +                       *-*-linux*)
> +                               enable_dco="auto"
> +                       ;;
> +                       *-*-freebsd*)
> +                               enable_dco="auto"
> +                       ;;
> +                       *)
> +                               # note that this does not disable it for
> Windows
> +                               enable_dco="no"
> +                       ;;
> +               esac
> +       ]
>  )
>
>  AC_ARG_ENABLE(
>         [iproute2],
> -       [AS_HELP_STRING([--enable-iproute2], [enable support for iproute2
> @<:@default=no@:>@])],
> +       [AS_HELP_STRING([--enable-iproute2], [enable support for iproute2
> (disables DCO) @<:@default=no@:>@])],
>         ,
>         [enable_iproute2="no"]
>  )
> @@ -536,7 +549,7 @@ AC_CHECK_DECLS(
>         ,
>         [[${SOCKET_INCLUDES}]]
>  )
> -AC_CHECKING([anonymous union support])
> +AC_MSG_CHECKING([anonymous union support])
>  AC_COMPILE_IFELSE(
>         [AC_LANG_PROGRAM(
>                 [[
> @@ -771,28 +784,59 @@ PKG_CHECK_MODULES(
>  )
>
>
> -if test "$enable_dco" = "yes"; then
> -dnl
> -dnl Include generic netlink library used to talk to ovpn-dco
> -dnl
> +if test "$enable_dco" != "no"; then
> +       enable_dco_arg="$enable_dco"
> +       if test "${enable_iproute2}" = "yes"; then
> +               AC_MSG_WARN([DCO cannot be enabled when using iproute2])
> +               enable_dco="no"
> +       fi
>         case "$host" in
>                 *-*-linux*)
> -                       PKG_CHECK_MODULES([LIBNL_GENL],
> +                       if test "$enable_dco" = "no"; then
> +                               if test "$enable_dco_arg" = "auto"; then
> +                                       AC_MSG_WARN([DCO support
> disabled])



+                               else
> +                                       AC_MSG_ERROR([DCO support can't be
> enabled])
> +                               fi
> +                       else
> +                               dnl
> +                               dnl Include generic netlink library used
> to talk to ovpn-dco
> +                               dnl
> +                               PKG_CHECK_MODULES([LIBNL_GENL],
>                                           [libnl-genl-3.0 >= 3.4.0],
>                                           [have_libnl="yes"],
> -                                         [AC_MSG_ERROR([libnl-genl-3.0
> package not found or too old. Is the development package and pkg-config
> installed? Must be version 3.4.0 or newer])]
> -                       )
> -
> -                       CFLAGS="${CFLAGS} ${LIBNL_GENL_CFLAGS}"
> -                       LIBS="${LIBS} ${LIBNL_GENL_LIBS}"
> +                                         [
> +                                          AC_MSG_ERROR([libnl-genl-3.0
> package not found or too old. Is the development package and pkg-config
> installed? Must be version 3.4.0 or newer for DCO])
> +                                         ]
> +                               )
> +                               CFLAGS="${CFLAGS} ${LIBNL_GENL_CFLAGS}"
> +                               LIBS="${LIBS} ${LIBNL_GENL_LIBS}"
>
> -                       AC_DEFINE(ENABLE_DCO, 1, [Enable shared data
> channel offload])
> -                       AC_MSG_NOTICE([Enabled ovpn-dco support for Linux])
> +                               AC_DEFINE(ENABLE_DCO, 1, [Enable shared
> data channel offload])
> +                               AC_MSG_NOTICE([Enabled ovpn-dco support
> for Linux])
> +                       fi
>                         ;;
>                 *-*-freebsd*)
> -                       LIBS="${LIBS} -lnv"
> -                       AC_DEFINE(ENABLE_DCO, 1, [Enable data channel
> offload for FreeBSD])
> -                       AC_MSG_NOTICE([Enabled ovpn-dco support for
> FreeBSD])
> +                       AC_CHECK_LIB(
> +                               [nv],
> +                               [nvlist_create],
> +                               [
> +                                LIBS="${LIBS} -lnv"
> +                                AC_DEFINE(ENABLE_DCO, 1, [Enable data
> channel offload for FreeBSD])
> +                                AC_MSG_NOTICE([Enabled ovpn-dco support
> for FreeBSD])
> +                               ],
> +                               [
> +                                enable_dco="no"
> +                                AC_MSG_WARN([Name/Value pair library not
> found.])
> +                               ]
> +                       )
> +                       if test "$enable_dco" = "no"; then
> +                               if test "$enable_dco_arg" = "auto"; then
> +                                       AC_MSG_WARN([DCO support disabled])
> +                               else
> +                                       AC_MSG_ERROR([DCO support can't be
> enabled])
> +                               fi
> +                       fi
>                         ;;
>                 *-mingw*)
>                         AC_MSG_NOTICE([NOTE: --enable-dco ignored on
> Windows because it's always enabled])
>

Looks good to me.

Acked-by: Selva Nair <selva.n...@gmail.com>

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

Reply via email to