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);