Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package iwd for openSUSE:Factory checked in 
at 2023-06-27 23:18:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/iwd (Old)
 and      /work/SRC/openSUSE:Factory/.iwd.new.15902 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "iwd"

Tue Jun 27 23:18:10 2023 rev:39 rq:1095655 version:2.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/iwd/iwd.changes  2023-06-20 16:48:49.823531632 
+0200
+++ /work/SRC/openSUSE:Factory/.iwd.new.15902/iwd.changes       2023-06-27 
23:18:28.468029938 +0200
@@ -1,0 +2,7 @@
+Tue Jun 27 14:51:57 UTC 2023 - Dirk Müller <dmuel...@suse.com>
+
+- update to 2.6:
+  * Add support for setting driver specific quirks.
+  * Add support for disabling power saving mode.
+
+-------------------------------------------------------------------

Old:
----
  iwd-2.5.tar.sign
  iwd-2.5.tar.xz

New:
----
  iwd-2.6.tar.sign
  iwd-2.6.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ iwd.spec ++++++
--- /var/tmp/diff_new_pack.3YuJbw/_old  2023-06-27 23:18:29.176034105 +0200
+++ /var/tmp/diff_new_pack.3YuJbw/_new  2023-06-27 23:18:29.180034128 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           iwd
-Version:        2.5
+Version:        2.6
 Release:        0
 Summary:        Wireless daemon for Linux
 License:        LGPL-2.1-or-later

++++++ iwd-2.5.tar.xz -> iwd-2.6.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/ChangeLog new/iwd-2.6/ChangeLog
--- old/iwd-2.5/ChangeLog       2023-05-24 17:38:48.000000000 +0200
+++ new/iwd-2.6/ChangeLog       2023-06-22 17:17:27.000000000 +0200
@@ -1,3 +1,7 @@
+ver 2.6:
+       Add support for setting driver specific quirks.
+       Add support for disabling power saving mode.
+
 ver 2.5:
        Fix issue with HT40+/- checks when creating chandef.
        Fix issue with handling support for FT-8021X-SHA384.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/Makefile.am new/iwd-2.6/Makefile.am
--- old/iwd-2.5/Makefile.am     2023-05-24 17:38:48.000000000 +0200
+++ new/iwd-2.6/Makefile.am     2023-06-22 17:17:27.000000000 +0200
@@ -749,12 +749,25 @@
 endif
 endif
 
-clean-local:
+gcov-clean:
+if GCOV
+       -$(LCOV) --quiet --directory $(builddir) -z
+       -rm -rf "$(builddir)/iwd-coverage.info" "$(builddir)/gcov"
+       -find . -name "*.gcda" -o -name "*.gcov" -o -name "*.gcno" -delete
+endif
+
+clean-local: gcov-clean
        -rm -f unit/cert-*.pem unit/cert-*.csr unit/cert-*.srl 
unit/*-settings.8021x
 
 maintainer-clean-local:
        -rm -rf build-aux ell
 
+gcov-report:
+if GCOV
+       $(LCOV) --quiet --directory $(builddir) --capture --output-file 
"iwd-coverage.info"
+       LANG=C $(GENHTML) --quiet --prefix $(builddir) --output-directory 
"$(builddir)/gcov" --title "iwd Code Coverage" --legend 
"$(builddir)/iwd-coverage.info"
+endif
+
 src/builtin.h: src/genbuiltin config.status
        $(AM_V_at)$(MKDIR_P) $(@D)
        $(AM_V_GEN)$(srcdir)/src/genbuiltin $(builtin_modules) > $@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/Makefile.in new/iwd-2.6/Makefile.in
--- old/iwd-2.5/Makefile.in     2023-05-24 17:40:48.000000000 +0200
+++ new/iwd-2.6/Makefile.in     2023-06-22 17:19:21.000000000 +0200
@@ -1101,12 +1101,14 @@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 FILECMD = @FILECMD@
+GENHTML = @GENHTML@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@
@@ -4030,12 +4032,21 @@
 @DAEMON_TRUE@@SYSTEMD_SERVICE_FALSE@   $(MKDIR_P) -m 700 
$(DESTDIR)$(daemon_storagedir)
 @SYSTEMD_SERVICE_FALSE@@WIRED_TRUE@    $(MKDIR_P) -m 700 
$(DESTDIR)$(wired_storagedir)
 
-clean-local:
+gcov-clean:
+@GCOV_TRUE@    -$(LCOV) --quiet --directory $(builddir) -z
+@GCOV_TRUE@    -rm -rf "$(builddir)/iwd-coverage.info" "$(builddir)/gcov"
+@GCOV_TRUE@    -find . -name "*.gcda" -o -name "*.gcov" -o -name "*.gcno" 
-delete
+
+clean-local: gcov-clean
        -rm -f unit/cert-*.pem unit/cert-*.csr unit/cert-*.srl 
unit/*-settings.8021x
 
 maintainer-clean-local:
        -rm -rf build-aux ell
 
+gcov-report:
+@GCOV_TRUE@    $(LCOV) --quiet --directory $(builddir) --capture --output-file 
"iwd-coverage.info"
+@GCOV_TRUE@    LANG=C $(GENHTML) --quiet --prefix $(builddir) 
--output-directory "$(builddir)/gcov" --title "iwd Code Coverage" --legend 
"$(builddir)/iwd-coverage.info"
+
 src/builtin.h: src/genbuiltin config.status
        $(AM_V_at)$(MKDIR_P) $(@D)
        $(AM_V_GEN)$(srcdir)/src/genbuiltin $(builtin_modules) > $@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/acinclude.m4 new/iwd-2.6/acinclude.m4
--- old/iwd-2.5/acinclude.m4    2023-05-24 17:38:48.000000000 +0200
+++ new/iwd-2.6/acinclude.m4    2023-06-22 17:17:27.000000000 +0200
@@ -46,10 +46,30 @@
        ])
 ])
 
+AC_DEFUN([AC_PROG_CC_GCOV], [
+       AC_CACHE_CHECK([whether ${CC-cc} accepts -fprofile-arcs], 
ac_cv_prog_cc_profile_arcs, [
+               echo 'void f(){}' > conftest.c
+               if test -z "`${CC-cc} -fprofile-arcs -c conftest.c 2>&1`"; then
+                       ac_cv_prog_cc_profile_arcs=yes
+               else
+                       ac_cv_prog_cc_profile_arcs=no
+               fi
+               rm -rf conftest*
+       ])
+       AC_CACHE_CHECK([whether ${CC-cc} accepts -ftest_coverage], 
ac_cv_prog_cc_test_coverage, [
+               echo 'void f(){}' > conftest.c
+               if test -z "`${CC-cc} -ftest-coverage -c conftest.c 2>&1`"; then
+                       ac_cv_prog_cc_test_coverage=yes
+               else
+                       ac_cv_prog_cc_test_coverage=no
+               fi
+               rm -rf conftest*
+       ])
+])
+
 AC_DEFUN([COMPILER_FLAGS], [
        if (test "${CFLAGS}" = ""); then
-               CFLAGS="-Wall -O2 -fsigned-char -fno-exceptions"
-               CFLAGS+=" -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"
+               CFLAGS="-Wall -fsigned-char -fno-exceptions"
        fi
        if (test "$USE_MAINTAINER_MODE" = "yes"); then
                CFLAGS+=" -Werror -Wextra"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/configure new/iwd-2.6/configure
--- old/iwd-2.5/configure       2023-05-24 17:40:43.000000000 +0200
+++ new/iwd-2.6/configure       2023-06-22 17:19:16.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for iwd 2.5.
+# Generated by GNU Autoconf 2.71 for iwd 2.6.
 #
 #
 # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -618,8 +618,8 @@
 # Identity of this package.
 PACKAGE_NAME='iwd'
 PACKAGE_TARNAME='iwd'
-PACKAGE_VERSION='2.5'
-PACKAGE_STRING='iwd 2.5'
+PACKAGE_VERSION='2.6'
+PACKAGE_STRING='iwd 2.6'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -700,6 +700,10 @@
 DAEMON_TRUE
 wired_storagedir
 daemon_storagedir
+GCOV_FALSE
+GCOV_TRUE
+GENHTML
+LCOV
 LT_SYS_LIBRARY_PATH
 OTOOL64
 OTOOL
@@ -840,6 +844,7 @@
 enable_libtool_lock
 enable_optimization
 enable_debug
+enable_gcov
 enable_pie
 enable_asan
 enable_lsan
@@ -1428,7 +1433,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures iwd 2.5 to adapt to many kinds of systems.
+\`configure' configures iwd 2.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1499,7 +1504,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of iwd 2.5:";;
+     short | recursive ) echo "Configuration of iwd 2.6:";;
    esac
   cat <<\_ACEOF
 
@@ -1524,6 +1529,7 @@
   --disable-libtool-lock  avoid locking (might break parallel builds)
   --disable-optimization  disable code optimization through compiler
   --enable-debug          enable compiling with debugging information
+  --enable-gcov           enable compiling with code coverage information
   --enable-pie            enable position independent executables flag
   --enable-asan           enable linking with address sanitizer
   --enable-lsan           enable linking with leak sanitizer
@@ -1655,7 +1661,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-iwd configure 2.5
+iwd configure 2.6
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1873,7 +1879,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by iwd $as_me 2.5, which was
+It was created by iwd $as_me 2.6, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3148,7 +3154,7 @@
 
 # Define the identity of the package.
  PACKAGE='iwd'
- VERSION='2.5'
+ VERSION='2.6'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -3540,8 +3546,7 @@
 
 
        if (test "${CFLAGS}" = ""); then
-               CFLAGS="-Wall -O2 -fsigned-char -fno-exceptions"
-               CFLAGS+=" -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"
+               CFLAGS="-Wall -fsigned-char -fno-exceptions"
        fi
        if (test "$USE_MAINTAINER_MODE" = "yes"); then
                CFLAGS+=" -Werror -Wextra"
@@ -4899,6 +4904,44 @@
 printf "%s\n" "$ac_cv_prog_cc_ubsan" >&6; }
 
 
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CC-cc} 
accepts -fprofile-arcs" >&5
+printf %s "checking whether ${CC-cc} accepts -fprofile-arcs... " >&6; }
+if test ${ac_cv_prog_cc_profile_arcs+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+               echo 'void f(){}' > conftest.c
+               if test -z "`${CC-cc} -fprofile-arcs -c conftest.c 2>&1`"; then
+                       ac_cv_prog_cc_profile_arcs=yes
+               else
+                       ac_cv_prog_cc_profile_arcs=no
+               fi
+               rm -rf conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: 
$ac_cv_prog_cc_profile_arcs" >&5
+printf "%s\n" "$ac_cv_prog_cc_profile_arcs" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CC-cc} 
accepts -ftest_coverage" >&5
+printf %s "checking whether ${CC-cc} accepts -ftest_coverage... " >&6; }
+if test ${ac_cv_prog_cc_test_coverage+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+               echo 'void f(){}' > conftest.c
+               if test -z "`${CC-cc} -ftest-coverage -c conftest.c 2>&1`"; then
+                       ac_cv_prog_cc_test_coverage=yes
+               else
+                       ac_cv_prog_cc_test_coverage=no
+               fi
+               rm -rf conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: 
$ac_cv_prog_cc_test_coverage" >&5
+printf "%s\n" "$ac_cv_prog_cc_test_coverage" >&6; }
+
+
 
 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
 printf %s "checking whether ln -s works... " >&6; }
@@ -13298,12 +13341,17 @@
 then :
   enableval=$enable_optimization;
        if (test "${enableval}" = "no"); then
-               CFLAGS="$CFLAGS -U_FORTIFY_SOURCE -O0"
+               CFLAGS="$CFLAGS -O0"
        fi
 
 fi
 
 
+if (test "${enable_optimization}" != "no"); then
+       CFLAGS="$CFLAGS -O2"
+       CFLAGS+=" -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"
+fi
+
 # Check whether --enable-debug was given.
 if test ${enable_debug+y}
 then :
@@ -13316,6 +13364,133 @@
 fi
 
 
+# Check whether --enable-gcov was given.
+if test ${enable_gcov+y}
+then :
+  enableval=$enable_gcov;
+       if (test "${enableval}" = "yes" &&
+                       test "${ac_cv_prog_cc_profile_arcs}" = "yes" &&
+                       test "${ac_cv_prog_cc_test_coverage}" = "yes"); then
+               CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
+       fi
+
+fi
+
+
+if (test "${enable_gcov}" = "yes"); then
+       for ac_prog in lcov
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with 
args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LCOV+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -n "$LCOV"; then
+  ac_cv_prog_LCOV="$LCOV" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_LCOV="$ac_prog"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found 
$as_dir$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LCOV=$ac_cv_prog_LCOV
+if test -n "$LCOV"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LCOV" >&5
+printf "%s\n" "$LCOV" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+  test -n "$LCOV" && break
+done
+test -n "$LCOV" || LCOV=""no""
+
+       for ac_prog in genhtml
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with 
args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GENHTML+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -n "$GENHTML"; then
+  ac_cv_prog_GENHTML="$GENHTML" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GENHTML="$ac_prog"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found 
$as_dir$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GENHTML=$ac_cv_prog_GENHTML
+if test -n "$GENHTML"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GENHTML" >&5
+printf "%s\n" "$GENHTML" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+  test -n "$GENHTML" && break
+done
+test -n "$GENHTML" || GENHTML=""no""
+
+       if (test "${LCOV}" == "no"); then
+               as_fn_error $? "lcov is required" "$LINENO" 5
+       fi
+       if (test "${GENHTML}" == "no"); then
+               as_fn_error $? "genhtml is required" "$LINENO" 5
+       fi
+fi
+
+ if test "${enable_gcov}" != "no"; then
+  GCOV_TRUE=
+  GCOV_FALSE='#'
+else
+  GCOV_TRUE='#'
+  GCOV_FALSE=
+fi
+
+
 # Check whether --enable-pie was given.
 if test ${enable_pie+y}
 then :
@@ -14363,6 +14538,10 @@
   as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${GCOV_TRUE}" && test -z "${GCOV_FALSE}"; then
+  as_fn_error $? "conditional \"GCOV\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${DAEMON_TRUE}" && test -z "${DAEMON_FALSE}"; then
   as_fn_error $? "conditional \"DAEMON\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -14805,7 +14984,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by iwd $as_me 2.5, which was
+This file was extended by iwd $as_me 2.6, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -14873,7 +15052,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-iwd config.status 2.5
+iwd config.status 2.6
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/configure.ac new/iwd-2.6/configure.ac
--- old/iwd-2.5/configure.ac    2023-05-24 17:38:48.000000000 +0200
+++ new/iwd-2.6/configure.ac    2023-06-22 17:17:27.000000000 +0200
@@ -1,5 +1,5 @@
 AC_PREREQ([2.69])
-AC_INIT([iwd],[2.5])
+AC_INIT([iwd],[2.6])
 
 AC_CONFIG_HEADERS(config.h)
 AC_CONFIG_AUX_DIR(build-aux)
@@ -25,6 +25,7 @@
 AC_PROG_CC_ASAN
 AC_PROG_CC_LSAN
 AC_PROG_CC_UBSAN
+AC_PROG_CC_GCOV
 AC_PROG_INSTALL
 AC_PROG_MKDIR_P
 AC_PROG_LN_S
@@ -37,10 +38,15 @@
 AC_ARG_ENABLE(optimization, AS_HELP_STRING([--disable-optimization],
                        [disable code optimization through compiler]), [
        if (test "${enableval}" = "no"); then
-               CFLAGS="$CFLAGS -U_FORTIFY_SOURCE -O0"
+               CFLAGS="$CFLAGS -O0"
        fi
 ])
 
+if (test "${enable_optimization}" != "no"); then
+       CFLAGS="$CFLAGS -O2"
+       CFLAGS+=" -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"
+fi
+
 AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],
                        [enable compiling with debugging information]), [
        if (test "${enableval}" = "yes" &&
@@ -49,6 +55,28 @@
        fi
 ])
 
+AC_ARG_ENABLE(gcov, AS_HELP_STRING([--enable-gcov],
+                       [enable compiling with code coverage information]), [
+       if (test "${enableval}" = "yes" &&
+                       test "${ac_cv_prog_cc_profile_arcs}" = "yes" &&
+                       test "${ac_cv_prog_cc_test_coverage}" = "yes"); then
+               CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
+       fi
+])
+
+if (test "${enable_gcov}" = "yes"); then
+       AC_CHECK_PROGS(LCOV, [lcov], "no")
+       AC_CHECK_PROGS(GENHTML, [genhtml], "no")
+       if (test "${LCOV}" == "no"); then
+               AC_MSG_ERROR([lcov is required])
+       fi
+       if (test "${GENHTML}" == "no"); then
+               AC_MSG_ERROR([genhtml is required])
+       fi
+fi
+
+AM_CONDITIONAL(GCOV, test "${enable_gcov}" != "no")
+
 AC_ARG_ENABLE(pie, AS_HELP_STRING([--enable-pie],
                        [enable position independent executables flag]), [
        if (test "${enableval}" = "yes" &&
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/doc/main.conf new/iwd-2.6/doc/main.conf
--- old/iwd-2.5/doc/main.conf   2022-01-05 22:23:11.000000000 +0100
+++ new/iwd-2.6/doc/main.conf   2023-06-22 17:17:27.000000000 +0200
@@ -31,14 +31,14 @@
 # the system resolving service.  The currently supported services are:
 # - systemd-resolved ["systemd"]
 # - openresolv / resolvconf ["resolvconf"]
+# - none
 #
 # If not set, the value "systemd" is used by default.  Uncomment the value
 # below if you are using openresolv:
 #
 #NameResolvingService=resolvconf
 #
-# iwd's support for IPv6 is still experimental and is disabled by default.
-# If you want to try it anyway, uncomment the setting below.  Note that
-# configuration via SLAAC is currently not supported (DHCPv6 only).
-#
-#EnableIPv6=true
+# iwd's support for IPv6 should be stable enough and is now enabled by default.
+# If you experience any problems and want to force IPv6 to be disabled,
+# uncomment the setting below:
+#EnableIPv6=false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/src/ft.c new/iwd-2.6/src/ft.c
--- old/iwd-2.5/src/ft.c        2023-05-24 17:38:48.000000000 +0200
+++ new/iwd-2.6/src/ft.c        2023-06-22 17:17:27.000000000 +0200
@@ -1000,14 +1000,21 @@
 
        if (!ft_parse_authentication_resp_frame(frame, frame_len,
                                        info->spa, info->aa, info->aa, 2,
-                                       &status, &ies, &ies_len))
+                                       &status, &ies, &ies_len)) {
+               l_debug("Could not parse auth response");
                return;
+       }
 
-       if (status != 0)
+       if (status != 0) {
+               l_debug("BSS "MAC" rejected FT auth with status=%u",
+                               MAC_STR(info->aa), status);
                goto cancel;
+       }
 
-       if (!ft_parse_ies(info, hs, ies, ies_len))
+       if (!ft_parse_ies(info, hs, ies, ies_len)) {
+               l_debug("Could not parse auth response IEs");
                goto cancel;
+       }
 
        info->parsed = true;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/src/iwd.config.5 new/iwd-2.6/src/iwd.config.5
--- old/iwd-2.5/src/iwd.config.5        2023-05-24 17:42:33.000000000 +0200
+++ new/iwd-2.6/src/iwd.config.5        2023-06-22 17:21:27.000000000 +0200
@@ -448,6 +448,42 @@
 T}
 _
 .TE
+.SS DriverQuirks
+.sp
+The group \fB[DriverQuirks]\fP contains special flags associated with drivers 
that
+are buggy or just don\(aqt behave similar enough to the majority of other 
drivers.
+.TS
+center;
+|l|l|.
+_
+T{
+DefaultInterface
+T}     T{
+Values: comma\-separated list of drivers or glob matches
+.sp
+If a driver in use matches one in this list IWD will not attempt to
+remove and re\-create the default interface.
+T}
+_
+T{
+ForcePae
+T}     T{
+Values: comma\-separated list of drivers or glob matches
+.sp
+If a driver in use matches one in this list ControlPortOverNL80211 will
+not be used, and PAE will be used instead. Some drivers do not properly
+support ControlPortOverNL80211 even though they advertise support for it.
+T}
+_
+T{
+PowerSaveDisable
+T}     T{
+Values: comma\-separated list of drivers or glob matches
+.sp
+If a driver in user matches one in this list power save will be disabled.
+T}
+_
+.TE
 .SH SEE ALSO
 .sp
 iwd(8), iwd.network(5)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/src/iwd.config.rst 
new/iwd-2.6/src/iwd.config.rst
--- old/iwd-2.5/src/iwd.config.rst      2022-12-18 20:59:36.000000000 +0100
+++ new/iwd-2.6/src/iwd.config.rst      2023-06-22 17:17:27.000000000 +0200
@@ -378,6 +378,36 @@
        will limit the number of access points that can be running
        simultaneously on different interfaces.
 
+DriverQuirks
+------------
+
+The group ``[DriverQuirks]`` contains special flags associated with drivers 
that
+are buggy or just don't behave similar enough to the majority of other drivers.
+
+.. list-table::
+   :header-rows: 0
+   :stub-columns: 0
+   :widths: 20 80
+   :align: left
+
+   * - DefaultInterface
+     - Values: comma-separated list of drivers or glob matches
+
+       If a driver in use matches one in this list IWD will not attempt to
+       remove and re-create the default interface.
+
+   * - ForcePae
+     - Values: comma-separated list of drivers or glob matches
+
+       If a driver in use matches one in this list ControlPortOverNL80211 will
+       not be used, and PAE will be used instead. Some drivers do not properly
+       support ControlPortOverNL80211 even though they advertise support for 
it.
+
+   * - PowerSaveDisable
+     - Values: comma-separated list of drivers or glob matches
+
+       If a driver in user matches one in this list power save will be 
disabled.
+
 SEE ALSO
 ========
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/src/netdev.c new/iwd-2.6/src/netdev.c
--- old/iwd-2.5/src/netdev.c    2023-05-24 17:38:48.000000000 +0200
+++ new/iwd-2.6/src/netdev.c    2023-06-22 17:17:27.000000000 +0200
@@ -131,6 +131,8 @@
        uint32_t qos_map_cmd_id;
        uint32_t mac_change_cmd_id;
        uint32_t get_oci_cmd_id;
+       uint32_t get_link_cmd_id;
+       uint32_t power_save_cmd_id;
        enum netdev_result result;
        uint16_t last_code; /* reason or status, depending on result */
        struct l_timeout *neighbor_report_timeout;
@@ -940,6 +942,11 @@
        if (netdev->fw_roam_bss)
                scan_bss_free(netdev->fw_roam_bss);
 
+       if (netdev->get_link_cmd_id) {
+               l_netlink_cancel(rtnl, netdev->get_link_cmd_id);
+               netdev->get_link_cmd_id = 0;
+       }
+
        scan_wdev_remove(netdev->wdev_id);
 
        watchlist_destroy(&netdev->station_watches);
@@ -6116,12 +6123,14 @@
 static void netdev_getlink_cb(int error, uint16_t type, const void *data,
                        uint32_t len, void *user_data)
 {
+       struct netdev *netdev = user_data;
        const struct ifinfomsg *ifi = data;
        unsigned int bytes;
-       struct netdev *netdev;
        l_netlink_command_func_t cb;
        bool powered;
 
+       netdev->get_link_cmd_id = 0;
+
        if (error != 0) {
                l_error("RTM_GETLINK error %i: %s", error, strerror(-error));
                return;
@@ -6133,8 +6142,7 @@
                return;
        }
 
-       netdev = netdev_find(ifi->ifi_index);
-       if (!netdev)
+       if (L_WARN_ON((uint32_t)ifi->ifi_index != netdev->index))
                return;
 
        bytes = len - NLMSG_ALIGN(sizeof(struct ifinfomsg));
@@ -6212,6 +6220,63 @@
        return NULL;
 }
 
+static void netdev_get_link(struct netdev *netdev)
+{
+       struct ifinfomsg *rtmmsg;
+       size_t bufsize;
+
+       /* Query interface flags */
+       bufsize = NLMSG_ALIGN(sizeof(struct ifinfomsg));
+       rtmmsg = l_malloc(bufsize);
+       memset(rtmmsg, 0, bufsize);
+
+       rtmmsg->ifi_family = AF_UNSPEC;
+       rtmmsg->ifi_index = netdev->index;
+
+       netdev->get_link_cmd_id = l_netlink_send(rtnl, RTM_GETLINK, 0, rtmmsg,
+                                               bufsize, netdev_getlink_cb,
+                                               netdev, NULL);
+       L_WARN_ON(netdev->get_link_cmd_id == 0);
+
+       l_free(rtmmsg);
+}
+
+static void netdev_disable_ps_cb(struct l_genl_msg *msg, void *user_data)
+{
+       struct netdev *netdev = user_data;
+       int err = l_genl_msg_get_error(msg);
+
+       netdev->power_save_cmd_id = 0;
+
+       /* Can't do anything about it but inform the user */
+       if (err < 0)
+               l_error("Failed to disable power save for ifindex %u (%s: %d)",
+                               netdev->index, strerror(-err), err);
+       else
+               l_debug("Disabled power save for ifindex %u", netdev->index);
+
+       netdev_get_link(netdev);
+}
+
+static bool netdev_disable_power_save(struct netdev *netdev)
+{
+       struct l_genl_msg *msg = l_genl_msg_new(NL80211_CMD_SET_POWER_SAVE);
+       uint32_t disabled = NL80211_PS_DISABLED;
+
+       l_genl_msg_append_attr(msg, NL80211_ATTR_IFINDEX, 4, &netdev->index);
+       l_genl_msg_append_attr(msg, NL80211_ATTR_PS_STATE, 4, &disabled);
+
+       netdev->power_save_cmd_id = l_genl_family_send(nl80211, msg,
+                                                       netdev_disable_ps_cb,
+                                                       netdev, NULL);
+       if (!netdev->power_save_cmd_id) {
+               l_error("Failed to send SET_POWER_SAVE (-EIO)");
+               return false;
+       }
+
+       return true;
+}
+
 struct netdev *netdev_create_from_genl(struct l_genl_msg *msg,
                                        const uint8_t *set_mac)
 {
@@ -6223,8 +6288,6 @@
        uint32_t wiphy_id;
        struct netdev *netdev;
        struct wiphy *wiphy = NULL;
-       struct ifinfomsg *rtmmsg;
-       size_t bufsize;
        struct l_io *pae_io = NULL;
 
        if (nl80211_parse_attrs(msg, NL80211_ATTR_IFINDEX, &ifindex,
@@ -6283,20 +6346,15 @@
        l_debug("Created interface %s[%d %" PRIx64 "]", netdev->name,
                netdev->index, netdev->wdev_id);
 
-       /* Query interface flags */
-       bufsize = NLMSG_ALIGN(sizeof(struct ifinfomsg));
-       rtmmsg = l_malloc(bufsize);
-       memset(rtmmsg, 0, bufsize);
-
-       rtmmsg->ifi_family = AF_UNSPEC;
-       rtmmsg->ifi_index = ifindex;
-
-       l_netlink_send(rtnl, RTM_GETLINK, 0, rtmmsg, bufsize,
-                                       netdev_getlink_cb, NULL, NULL);
+       netdev_setup_interface(netdev);
 
-       l_free(rtmmsg);
+       if (wiphy_power_save_disabled(wiphy)) {
+               /* Wait to issue GET_LINK until PS is disabled */
+               if (netdev_disable_power_save(netdev))
+                       return netdev;
+       }
 
-       netdev_setup_interface(netdev);
+       netdev_get_link(netdev);
 
        return netdev;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/src/wiphy.c new/iwd-2.6/src/wiphy.c
--- old/iwd-2.5/src/wiphy.c     2023-05-24 17:38:48.000000000 +0200
+++ new/iwd-2.6/src/wiphy.c     2023-06-22 17:17:27.000000000 +0200
@@ -71,6 +71,12 @@
 enum driver_flag {
        DEFAULT_IF = 0x1,
        FORCE_PAE = 0x2,
+       POWER_SAVE_DISABLE = 0x4,
+};
+
+struct driver_flag_name {
+       const char *name;
+       enum driver_flag flag;
 };
 
 struct driver_info {
@@ -93,6 +99,12 @@
        { "bcmsdh_sdmmc",    DEFAULT_IF },
 };
 
+static const struct driver_flag_name driver_flag_names[] = {
+       { "DefaultInterface", DEFAULT_IF },
+       { "ForcePae",         FORCE_PAE },
+       { "PowerSaveDisable", POWER_SAVE_DISABLE },
+};
+
 struct wiphy {
        uint32_t id;
        char name[20];
@@ -111,7 +123,7 @@
        char *model_str;
        char *vendor_str;
        char *driver_str;
-       const struct driver_info *driver_info;
+       uint32_t driver_flags;
        struct watchlist state_watches;
        uint8_t extended_capabilities[EXT_CAP_LEN + 2]; /* max bitmap size + IE 
header */
        uint8_t *iftype_extended_capabilities[NUM_NL80211_IFTYPES];
@@ -685,8 +697,7 @@
        if (!wiphy_get_driver(wiphy))
                return true;
 
-       if (wiphy->driver_info &&
-                       wiphy->driver_info->flags & DEFAULT_IF)
+       if (wiphy->driver_flags & DEFAULT_IF)
                return true;
 
        return false;
@@ -697,12 +708,8 @@
        const struct l_settings *settings = iwd_get_config();
        bool enabled;
 
-       if (wiphy->driver_info &&
-                       wiphy->driver_info->flags & FORCE_PAE) {
-               l_info("Not using Control Port due to driver quirks: %s",
-                               wiphy_get_driver(wiphy));
+       if (wiphy->driver_flags & FORCE_PAE)
                return false;
-       }
 
        if (!wiphy_has_ext_feature(wiphy,
                        NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211))
@@ -715,6 +722,14 @@
        return enabled;
 }
 
+bool wiphy_power_save_disabled(struct wiphy *wiphy)
+{
+       if (wiphy->driver_flags & POWER_SAVE_DISABLE)
+               return true;
+
+       return false;
+}
+
 const uint8_t *wiphy_get_permanent_address(struct wiphy *wiphy)
 {
        return wiphy->permanent_addr;
@@ -1312,6 +1327,27 @@
                l_free(joined);
                l_strfreev(iftypes);
        }
+
+       if (wiphy->driver_flags) {
+               char **flags = l_strv_new();
+               char *joined;
+
+               if (wiphy->driver_flags & DEFAULT_IF)
+                       flags = l_strv_append(flags, "DefaultInterface");
+
+               if (wiphy->driver_flags & FORCE_PAE)
+                       flags = l_strv_append(flags, "ForcePae");
+
+               if (wiphy->driver_flags & POWER_SAVE_DISABLE)
+                       flags = l_strv_append(flags, "PowerSaveDisable");
+
+               joined = l_strjoinv(flags, ' ');
+
+               l_info("\tDriver Flags: %s", joined);
+
+               l_free(joined);
+               l_strfreev(flags);
+       }
 }
 
 static void parse_supported_commands(struct wiphy *wiphy,
@@ -1870,6 +1906,9 @@
        char driver_path[256];
        ssize_t len;
        unsigned int i;
+       unsigned int j;
+       const struct l_settings *config = iwd_get_config();
+       char **flag_list;
 
        driver_link = l_strdup_printf("/sys/class/ieee80211/%s/device/driver",
                                        wiphy->name);
@@ -1885,7 +1924,25 @@
 
        for (i = 0; i < L_ARRAY_SIZE(driver_infos); i++)
                if (!fnmatch(driver_infos[i].prefix, wiphy->driver_str, 0))
-                       wiphy->driver_info = &driver_infos[i];
+                       wiphy->driver_flags |= driver_infos[i].flags;
+
+       /* Check for any user-defined driver flags */
+       if (!l_settings_has_group(config, "DriverQuirks"))
+               return true;
+
+       for (i = 0; i < L_ARRAY_SIZE(driver_flag_names); i++) {
+               flag_list = l_settings_get_string_list(config, "DriverQuirks",
+                                               driver_flag_names[i].name, ',');
+               if (!flag_list)
+                       continue;
+
+               for (j = 0; flag_list[j]; j++)
+                       if (!fnmatch(flag_list[j], wiphy->driver_str, 0))
+                               wiphy->driver_flags |=
+                                               driver_flag_names[i].flag;
+
+               l_strv_free(flag_list);
+       }
 
        return true;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iwd-2.5/src/wiphy.h new/iwd-2.6/src/wiphy.h
--- old/iwd-2.5/src/wiphy.h     2023-05-24 17:38:48.000000000 +0200
+++ new/iwd-2.6/src/wiphy.h     2023-06-22 17:17:27.000000000 +0200
@@ -135,6 +135,7 @@
 const char *wiphy_get_name(struct wiphy *wiphy);
 bool wiphy_uses_default_if(struct wiphy *wiphy);
 bool wiphy_control_port_enabled(struct wiphy *wiphy);
+bool wiphy_power_save_disabled(struct wiphy *wiphy);
 const uint8_t *wiphy_get_permanent_address(struct wiphy *wiphy);
 const uint8_t *wiphy_get_extended_capabilities(struct wiphy *wiphy,
                                                        uint32_t iftype);

Reply via email to