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-05-18 15:19:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/iwd (Old) and /work/SRC/openSUSE:Factory/.iwd.new.1533 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "iwd" Thu May 18 15:19:57 2023 rev:37 rq:1087773 version:2.4 Changes: -------- --- /work/SRC/openSUSE:Factory/iwd/iwd.changes 2023-02-15 13:41:25.587066271 +0100 +++ /work/SRC/openSUSE:Factory/.iwd.new.1533/iwd.changes 2023-05-18 15:20:09.594161191 +0200 @@ -1,0 +2,9 @@ +Wed May 17 13:36:03 UTC 2023 - Andrea Manzini <andrea.manz...@suse.com> + +- update to 2.4: + * Fix issue with FT-over-Air and same channel operation. + * Fix issue with AP mode and missing support for GTK. + * Fix issue with AP mode and channel switch event. + * Fix issue with SSID string conversion handling. + +------------------------------------------------------------------- Old: ---- iwd-2.3.tar.sign iwd-2.3.tar.xz New: ---- iwd-2.4.tar.sign iwd-2.4.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ iwd.spec ++++++ --- /var/tmp/diff_new_pack.i1RCw3/_old 2023-05-18 15:20:10.254165238 +0200 +++ /var/tmp/diff_new_pack.i1RCw3/_new 2023-05-18 15:20:10.262165287 +0200 @@ -17,7 +17,7 @@ Name: iwd -Version: 2.3 +Version: 2.4 Release: 0 Summary: Wireless daemon for Linux License: LGPL-2.1-or-later ++++++ iwd-2.3.tar.xz -> iwd-2.4.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/AUTHORS new/iwd-2.4/AUTHORS --- old/iwd-2.3/AUTHORS 2022-11-18 13:31:49.000000000 +0100 +++ new/iwd-2.4/AUTHORS 2023-03-27 17:38:25.000000000 +0200 @@ -39,3 +39,4 @@ Jesse Lentz <je...@twosheds.org> Pinghao Wu <xdavidw...@gmail.com> Neehar Vijay <env252...@gmail.com> +Jiajie Chen <c...@jia.je> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/ChangeLog new/iwd-2.4/ChangeLog --- old/iwd-2.3/ChangeLog 2023-02-02 13:57:32.000000000 +0100 +++ new/iwd-2.4/ChangeLog 2023-03-27 17:38:25.000000000 +0200 @@ -1,3 +1,9 @@ +ver 2.4: + Fix issue with FT-over-Air and same channel operation. + Fix issue with AP mode and missing support for GTK. + Fix issue with AP mode and channel switch event. + Fix issue with SSID string conversion handling. + ver 2.3: Fix issue with length calculation for WMM IE. Fix issue with channel number allocation off-by-one. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/aclocal.m4 new/iwd-2.4/aclocal.m4 --- old/iwd-2.3/aclocal.m4 2023-02-02 13:59:42.000000000 +0100 +++ new/iwd-2.4/aclocal.m4 2023-03-27 17:40:05.000000000 +0200 @@ -20,7 +20,7 @@ If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# pkg.m4 - Macros to locate and use pkg-config. -*- Autoconf -*- # serial 12 (pkg-config-0.29.2) dnl Copyright © 2004 Scott James Remnant <sc...@netsplit.com>. @@ -108,7 +108,7 @@ dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -dnl only at the first occurence in configure.ac, so if the first place +dnl only at the first occurrence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], @@ -177,14 +177,14 @@ AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then - $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else - $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi - # Put the nasty error message in config.log where it belongs - echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD - m4_default([$4], [AC_MSG_ERROR( + m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS @@ -196,7 +196,7 @@ ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) - m4_default([$4], [AC_MSG_FAILURE( + m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. @@ -206,10 +206,10 @@ To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl ]) else - $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS - $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) - $3 + $3 fi[]dnl ])dnl PKG_CHECK_MODULES @@ -296,6 +296,74 @@ AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR +dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, +dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], +dnl [DESCRIPTION], [DEFAULT]) +dnl ------------------------------------------ +dnl +dnl Prepare a "--with-" configure option using the lowercase +dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and +dnl PKG_CHECK_MODULES in a single macro. +AC_DEFUN([PKG_WITH_MODULES], +[ +m4_pushdef([with_arg], m4_tolower([$1])) + +m4_pushdef([description], + [m4_default([$5], [build with ]with_arg[ support])]) + +m4_pushdef([def_arg], [m4_default([$6], [auto])]) +m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) +m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) + +m4_case(def_arg, + [yes],[m4_pushdef([with_without], [--without-]with_arg)], + [m4_pushdef([with_without],[--with-]with_arg)]) + +AC_ARG_WITH(with_arg, + AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, + [AS_TR_SH([with_]with_arg)=def_arg]) + +AS_CASE([$AS_TR_SH([with_]with_arg)], + [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], + [auto],[PKG_CHECK_MODULES([$1],[$2], + [m4_n([def_action_if_found]) $3], + [m4_n([def_action_if_not_found]) $4])]) + +m4_popdef([with_arg]) +m4_popdef([description]) +m4_popdef([def_arg]) + +])dnl PKG_WITH_MODULES + +dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, +dnl [DESCRIPTION], [DEFAULT]) +dnl ----------------------------------------------- +dnl +dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES +dnl check._[VARIABLE-PREFIX] is exported as make variable. +AC_DEFUN([PKG_HAVE_WITH_MODULES], +[ +PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) + +AM_CONDITIONAL([HAVE_][$1], + [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) +])dnl PKG_HAVE_WITH_MODULES + +dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, +dnl [DESCRIPTION], [DEFAULT]) +dnl ------------------------------------------------------ +dnl +dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after +dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make +dnl and preprocessor variable. +AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], +[ +PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) + +AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], + [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) +])dnl PKG_HAVE_DEFINE_WITH_MODULES + # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/build-aux/ltmain.sh new/iwd-2.4/build-aux/ltmain.sh --- old/iwd-2.3/build-aux/ltmain.sh 2022-05-04 10:09:59.000000000 +0200 +++ new/iwd-2.4/build-aux/ltmain.sh 2022-11-23 12:34:12.000000000 +0100 @@ -31,7 +31,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.7 Debian-2.4.7-4" +VERSION="2.4.7 Debian-2.4.7-5" package_revision=2.4.7 @@ -2308,7 +2308,7 @@ compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname $scriptversion Debian-2.4.7-4 + version: $progname $scriptversion Debian-2.4.7-5 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/configure new/iwd-2.4/configure --- old/iwd-2.3/configure 2023-02-02 13:59:45.000000000 +0100 +++ new/iwd-2.4/configure 2023-03-27 17:40:08.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.3. +# Generated by GNU Autoconf 2.71 for iwd 2.4. # # # 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.3' -PACKAGE_STRING='iwd 2.3' +PACKAGE_VERSION='2.4' +PACKAGE_STRING='iwd 2.4' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1421,7 +1421,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.3 to adapt to many kinds of systems. +\`configure' configures iwd 2.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1492,7 +1492,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of iwd 2.3:";; + short | recursive ) echo "Configuration of iwd 2.4:";; esac cat <<\_ACEOF @@ -1643,7 +1643,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -iwd configure 2.3 +iwd configure 2.4 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1861,7 +1861,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.3, which was +It was created by iwd $as_me 2.4, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3136,7 +3136,7 @@ # Define the identity of the package. PACKAGE='iwd' - VERSION='2.3' + VERSION='2.4' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -13721,24 +13721,24 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - READLINE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "readline" 2>&1` + READLINE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "readline" 2>&1` else - READLINE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "readline" 2>&1` + READLINE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "readline" 2>&1` fi - # Put the nasty error message in config.log where it belongs - echo "$READLINE_PKG_ERRORS" >&5 + # Put the nasty error message in config.log where it belongs + echo "$READLINE_PKG_ERRORS" >&5 - READLINE_LIBS=-lreadline + READLINE_LIBS=-lreadline elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - READLINE_LIBS=-lreadline + READLINE_LIBS=-lreadline else - READLINE_CFLAGS=$pkg_cv_READLINE_CFLAGS - READLINE_LIBS=$pkg_cv_READLINE_LIBS + READLINE_CFLAGS=$pkg_cv_READLINE_CFLAGS + READLINE_LIBS=$pkg_cv_READLINE_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - dummy=yes + dummy=yes fi @@ -14042,24 +14042,24 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - ELL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ell >= ${ell_min_version}" 2>&1` + ELL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ell >= ${ell_min_version}" 2>&1` else - ELL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ell >= ${ell_min_version}" 2>&1` + ELL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ell >= ${ell_min_version}" 2>&1` fi - # Put the nasty error message in config.log where it belongs - echo "$ELL_PKG_ERRORS" >&5 + # Put the nasty error message in config.log where it belongs + echo "$ELL_PKG_ERRORS" >&5 - as_fn_error $? "Embedded Linux library >= ${ell_min_version} is required" "$LINENO" 5 + as_fn_error $? "Embedded Linux library >= ${ell_min_version} is required" "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - as_fn_error $? "Embedded Linux library >= ${ell_min_version} is required" "$LINENO" 5 + as_fn_error $? "Embedded Linux library >= ${ell_min_version} is required" "$LINENO" 5 else - ELL_CFLAGS=$pkg_cv_ELL_CFLAGS - ELL_LIBS=$pkg_cv_ELL_LIBS + ELL_CFLAGS=$pkg_cv_ELL_CFLAGS + ELL_LIBS=$pkg_cv_ELL_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - dummy=yes + dummy=yes fi @@ -14712,7 +14712,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.3, which was +This file was extended by iwd $as_me 2.4, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14780,7 +14780,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -iwd config.status 2.3 +iwd config.status 2.4 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.3/configure.ac new/iwd-2.4/configure.ac --- old/iwd-2.3/configure.ac 2023-02-02 13:57:32.000000000 +0100 +++ new/iwd-2.4/configure.ac 2023-03-27 17:38:25.000000000 +0200 @@ -1,5 +1,5 @@ AC_PREREQ([2.69]) -AC_INIT([iwd],[2.3]) +AC_INIT([iwd],[2.4]) AC_CONFIG_HEADERS(config.h) AC_CONFIG_AUX_DIR(build-aux) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/monitor/nlmon.c new/iwd-2.4/monitor/nlmon.c --- old/iwd-2.3/monitor/nlmon.c 2023-02-02 13:57:32.000000000 +0100 +++ new/iwd-2.4/monitor/nlmon.c 2023-03-27 17:38:25.000000000 +0200 @@ -5068,6 +5068,16 @@ (const uint8_t *) mmpdu + len - resp->ies); } +static void print_beacon(unsigned int level, + const struct mmpdu_header *mmpdu, size_t len) +{ + const struct mmpdu_beacon *beacon = mmpdu_body(mmpdu); + + print_attr(level, "Subtype: Beacon"); + print_ie(level + 1, "Beacon IEs", beacon->ies, + (const uint8_t *) mmpdu + len - beacon->ies); +} + static void print_frame_type(unsigned int level, const char *label, const void *data, uint16_t size) { @@ -5122,7 +5132,10 @@ str = "Timing Advertisement"; break; case 0x08: - str = "Beacon"; + if (mpdu) + print_beacon(level + 1, mpdu, size); + else + str = "Beacon"; break; case 0x09: str = "ATIM"; @@ -6240,9 +6253,10 @@ { NL80211_ATTR_DTIM_PERIOD, "DTIM Period", ATTR_U32 }, { NL80211_ATTR_BEACON_HEAD, - "Beacon Head", ATTR_BINARY }, + "Beacon Head", ATTR_CUSTOM, { .function = print_frame } }, { NL80211_ATTR_BEACON_TAIL, - "Beacon Tail", ATTR_BINARY }, + "Beacon Tail", ATTR_CUSTOM, + { .function = print_management_ies } }, { NL80211_ATTR_STA_AID, "Station AID", ATTR_U16 }, { NL80211_ATTR_STA_FLAGS, @@ -6520,7 +6534,8 @@ { NL80211_ATTR_PROBE_RESP_OFFLOAD, "Probe Response Offload" }, { NL80211_ATTR_PROBE_RESP, - "Probe Response" }, + "Probe Response", ATTR_CUSTOM, + { .function = print_frame} }, { NL80211_ATTR_DFS_REGION, "DFS Region", ATTR_U8 }, { NL80211_ATTR_DISABLE_HT, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/src/ap.c new/iwd-2.4/src/ap.c --- old/iwd-2.3/src/ap.c 2023-02-02 13:57:32.000000000 +0100 +++ new/iwd-2.4/src/ap.c 2023-03-27 17:38:25.000000000 +0200 @@ -1499,14 +1499,19 @@ struct sta_state *sta = user_data; const void *gtk_rsc; uint8_t zero_gtk_rsc[6]; + int err; sta->gtk_query_cmd_id = 0; - if (l_genl_msg_get_error(msg) < 0) + err = l_genl_msg_get_error(msg); + if (err == -ENOTSUP) + goto zero_rsc; + else if (err < 0) goto error; gtk_rsc = nl80211_parse_get_key_seq(msg); if (!gtk_rsc) { +zero_rsc: memset(zero_gtk_rsc, 0, 6); gtk_rsc = zero_gtk_rsc; } @@ -1643,19 +1648,22 @@ { struct l_genl_msg *msg; uint32_t ifindex = netdev_get_ifindex(sta->ap->netdev); - /* - * This should hopefully work both with and without - * NL80211_FEATURE_FULL_AP_CLIENT_STATE. - */ struct nl80211_sta_flag_update flags = { - .mask = (1 << NL80211_STA_FLAG_AUTHENTICATED) | - (1 << NL80211_STA_FLAG_ASSOCIATED) | - (1 << NL80211_STA_FLAG_AUTHORIZED) | + .mask = (1 << NL80211_STA_FLAG_AUTHORIZED) | (1 << NL80211_STA_FLAG_MFP), .set = (1 << NL80211_STA_FLAG_AUTHENTICATED) | (1 << NL80211_STA_FLAG_ASSOCIATED), }; + /* + * Without this feature nl80211 rejects NEW_STATION if the mask contains + * auth/assoc flags + */ + if (wiphy_has_feature(netdev_get_wiphy(sta->ap->netdev), + NL80211_FEATURE_FULL_AP_CLIENT_STATE)) + flags.mask |= (1 << NL80211_STA_FLAG_ASSOCIATED) | + (1 << NL80211_STA_FLAG_AUTHENTICATED); + msg = l_genl_msg_new_sized(NL80211_CMD_NEW_STATION, 300); l_genl_msg_append_attr(msg, NL80211_ATTR_IFINDEX, 4, &ifindex); @@ -3660,7 +3668,18 @@ ap->band = BAND_FREQ_2_4_GHZ; } - ap->supports_ht = wiphy_get_ht_capabilities(wiphy, ap->band, + if (l_settings_has_key(config, "General", "DisableHT")) { + bool boolval; + + if (!l_settings_get_bool(config, "General", "DisableHT", + &boolval)) { + l_error("AP [General].DisableHT not a valid boolean"); + return -EINVAL; + } + + ap->supports_ht = !boolval; + } else + ap->supports_ht = wiphy_get_ht_capabilities(wiphy, ap->band, NULL) != NULL; if (!ap_validate_band_channel(ap)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/src/eapol.c new/iwd-2.4/src/eapol.c --- old/iwd-2.3/src/eapol.c 2023-01-23 19:46:38.000000000 +0100 +++ new/iwd-2.4/src/eapol.c 2023-03-27 17:38:25.000000000 +0200 @@ -2783,6 +2783,8 @@ bool eapol_start(struct eapol_sm *sm) { + l_debug(""); + if (sm->handshake->settings_8021x) { _auto_(l_free) char *network_id = NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/src/ft.c new/iwd-2.4/src/ft.c --- old/iwd-2.3/src/ft.c 2022-12-18 20:59:36.000000000 +0100 +++ new/iwd-2.4/src/ft.c 2023-03-27 17:38:25.000000000 +0200 @@ -40,6 +40,8 @@ #include "src/offchannel.h" #include "src/wiphy.h" +static const unsigned int FT_ONCHANNEL_TIME = 300u; /* ms */ + static ft_tx_frame_func_t tx_frame = NULL; static ft_tx_associate_func_t tx_assoc = NULL; static struct l_queue *info_list = NULL; @@ -63,6 +65,7 @@ struct ie_ft_info ft_info; bool parsed : 1; + bool onchannel : 1; }; /* @@ -1009,8 +1012,17 @@ info->parsed = true; cancel: - /* Verified to be expected target, offchannel can be canceled */ - offchannel_cancel(netdev_get_wdev_id(netdev), info->offchannel_id); + /* + * Verified to be expected target, offchannel or onchannel work can + * now be canceled + */ + if (info->onchannel) { + l_timeout_remove(info->timeout); + info->timeout = NULL; + wiphy_radio_work_done(netdev_get_wiphy(netdev), info->work.id); + } else + offchannel_cancel(netdev_get_wdev_id(netdev), + info->offchannel_id); } static void ft_send_authenticate(void *user_data) @@ -1023,6 +1035,8 @@ struct iovec iov[2]; struct mmpdu_authentication auth; + l_debug(""); + /* Authentication body */ auth.algorithm = L_CPU_TO_LE16(MMPDU_AUTH_ALGO_FT); auth.transaction_sequence = L_CPU_TO_LE16(1); @@ -1077,6 +1091,45 @@ l_queue_push_tail(info_list, info); return 0; +} + +static void ft_onchannel_timeout(struct l_timeout *timeout, void *user_data) +{ + struct ft_info *info = user_data; + struct netdev *netdev = netdev_find(info->ifindex); + + wiphy_radio_work_done(netdev_get_wiphy(netdev), info->work.id); +} + +static bool ft_send_authenticate_onchannel(struct wiphy_radio_work_item *work) +{ + struct ft_info *info = l_container_of(work, struct ft_info, work); + + ft_send_authenticate(info); + + info->timeout = l_timeout_create_ms(FT_ONCHANNEL_TIME, + ft_onchannel_timeout, + info, NULL); + return false; +} + +struct wiphy_radio_work_item_ops ft_onchannel_ops = { + .do_work = ft_send_authenticate_onchannel, +}; + +int ft_authenticate_onchannel(uint32_t ifindex, const struct scan_bss *target) +{ + struct netdev *netdev = netdev_find(ifindex); + struct handshake_state *hs = netdev_get_handshake(netdev); + struct ft_info *info = ft_info_new(hs, target); + + info->onchannel = true; + + wiphy_radio_work_insert(netdev_get_wiphy(netdev), &info->work, + WIPHY_WORK_PRIORITY_FT, &ft_onchannel_ops); + l_queue_push_tail(info_list, info); + + return 0; } int ft_associate(uint32_t ifindex, const uint8_t *addr) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/src/ft.h new/iwd-2.4/src/ft.h --- old/iwd-2.3/src/ft.h 2022-11-18 13:31:49.000000000 +0100 +++ new/iwd-2.4/src/ft.h 2023-03-27 17:38:25.000000000 +0200 @@ -43,3 +43,4 @@ int ft_action(uint32_t ifindex, uint32_t freq, const struct scan_bss *target); int ft_associate(uint32_t ifindex, const uint8_t *addr); int ft_authenticate(uint32_t ifindex, const struct scan_bss *target); +int ft_authenticate_onchannel(uint32_t ifindex, const struct scan_bss *target); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/src/iwd.ap.5 new/iwd-2.4/src/iwd.ap.5 --- old/iwd-2.3/src/iwd.ap.5 2023-02-02 14:01:33.000000000 +0100 +++ new/iwd-2.4/src/iwd.ap.5 2023-03-27 17:41:58.000000000 +0200 @@ -83,6 +83,14 @@ not provided a default value of 0 is used (rekeying is disabled). T} _ +T{ +DisableHT +T} T{ +Boolean value +.sp +Explicitly disable HT capabilities for this AP. +T} +_ .TE .SS Network Authentication Settings .sp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/src/iwd.ap.rst new/iwd-2.4/src/iwd.ap.rst --- old/iwd-2.3/src/iwd.ap.rst 2023-01-23 19:46:38.000000000 +0100 +++ new/iwd-2.4/src/iwd.ap.rst 2023-03-27 17:38:25.000000000 +0200 @@ -73,6 +73,11 @@ The time interval at which the AP starts a rekey for a given station. If not provided a default value of 0 is used (rekeying is disabled). + * - DisableHT + - Boolean value + + Explicitly disable HT capabilities for this AP. + Network Authentication Settings ------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/src/iwd.debug.7 new/iwd-2.4/src/iwd.debug.7 --- old/iwd-2.3/src/iwd.debug.7 2023-02-02 14:01:30.000000000 +0100 +++ new/iwd-2.4/src/iwd.debug.7 2023-03-27 17:41:56.000000000 +0200 @@ -49,8 +49,8 @@ \fI$IWD_WSC_DEBUG_KEYS\fP set to \fB1\fP enables printing received WSC keys. .sp The granularity of the DHCP logging can also be tailored by setting -\fI$IWD_DHCP_DEBUG\fP to the maximum verbosity level, "debug", "info", "warn", or -"error". +\fI$IWD_DHCP_DEBUG\fP to the maximum verbosity level, \(dqdebug\(dq, \(dqinfo\(dq, \(dqwarn\(dq, or +\(dqerror\(dq. .SH SEE ALSO .sp iwd(8), iwmon(1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/src/knownnetworks.c new/iwd-2.4/src/knownnetworks.c --- old/iwd-2.3/src/knownnetworks.c 2022-03-22 19:12:13.000000000 +0100 +++ new/iwd-2.4/src/knownnetworks.c 2023-03-27 17:38:25.000000000 +0200 @@ -174,9 +174,10 @@ for (i = 0; network->ssid[i] && pos < sizeof(path); i++) pos += snprintf(path + pos, sizeof(path) - pos, "%02x", - network->ssid[i]); + (unsigned char)network->ssid[i]); - snprintf(path + pos, sizeof(path) - pos, "_%s", + if (pos < sizeof(path)) + snprintf(path + pos, sizeof(path) - pos, "_%s", security_to_str(network->type)); path[sizeof(path) - 1] = '\0'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/src/netdev.c new/iwd-2.4/src/netdev.c --- old/iwd-2.3/src/netdev.c 2023-01-23 19:46:38.000000000 +0100 +++ new/iwd-2.4/src/netdev.c 2023-03-27 17:38:25.000000000 +0200 @@ -1370,6 +1370,8 @@ static void netdev_connect_ok(struct netdev *netdev) { + l_debug(""); + l_rtnl_set_linkmode_and_operstate(rtnl, netdev->index, IF_LINK_MODE_DORMANT, IF_OPER_UP, netdev_operstate_cb, @@ -1469,7 +1471,14 @@ static void try_handshake_complete(struct netdev_handshake_state *nhs) { + l_debug("ptk_installed: %u, gtk_installed: %u, igtk_installed: %u", + nhs->ptk_installed, + nhs->gtk_installed, + nhs->igtk_installed); + if (nhs->ptk_installed && nhs->gtk_installed && nhs->igtk_installed) { + l_debug("nhs->complete: %u", nhs->complete); + if (nhs->complete) { handshake_event(&nhs->super, HANDSHAKE_EVENT_REKEY_COMPLETE); @@ -1478,6 +1487,8 @@ nhs->complete = true; + l_debug("Invoking handshake_event()"); + if (handshake_event(&nhs->super, HANDSHAKE_EVENT_COMPLETE)) return; @@ -1493,6 +1504,8 @@ struct netdev *netdev = nhs->netdev; int err; + l_debug(""); + nhs->set_station_cmd_id = 0; nhs->ptk_installed = true; @@ -1523,6 +1536,7 @@ struct netdev *netdev = nhs->netdev; int err = l_genl_msg_get_error(msg); + l_debug("ifindex: %u, err: %d", netdev->index, err); nhs->group_new_key_cmd_id = 0; if (err < 0) { @@ -1547,6 +1561,7 @@ struct netdev *netdev = nhs->netdev; int err = l_genl_msg_get_error(msg); + l_debug("ifindex: %u, err: %d", netdev->index, err); nhs->group_management_new_key_cmd_id = 0; if (err < 0) { @@ -2413,6 +2428,8 @@ struct l_genl_msg *msg = l_genl_msg_new_sized(NL80211_CMD_GET_INTERFACE, 64); + l_debug(""); + l_genl_msg_append_attr(msg, NL80211_ATTR_IFINDEX, 4, &netdev->index); netdev->get_oci_cmd_id = l_genl_family_send(nl80211, msg, @@ -2433,6 +2450,8 @@ const void *data; const uint8_t *rsnxe = NULL; + l_debug(""); + /* * The driver may have modified the IEs we passed to CMD_CONNECT * before sending them out, the actual IE sent is reflected in the @@ -2735,6 +2754,8 @@ if (netdev->ignore_connect_event) return; + l_debug("aborting and ignore_connect_event not set, proceed"); + /* Work around mwifiex which sends a Connect Event prior to the Ack */ if (netdev->connect_cmd_id) netdev_driver_connected(netdev); @@ -2794,6 +2815,8 @@ goto error; } + l_debug("expect_connect_failure not set, proceed"); + if (netdev->owe_sm && status_code && *status_code == MMPDU_STATUS_CODE_UNSUPP_FINITE_CYCLIC_GROUP) { if (!netdev_retry_owe(netdev)) @@ -2921,6 +2944,8 @@ netdev_send_qos_map_set(netdev, qos_set, qos_len); } + l_debug("Request / Response IEs parsed"); + if (netdev->sm) { if (!hs->chandef) { if (netdev_get_oci(netdev) < 0) @@ -5145,8 +5170,12 @@ static void netdev_channel_switch_event(struct l_genl_msg *msg, struct netdev *netdev) { - _auto_(l_free) struct band_chandef *chandef = - l_new(struct band_chandef, 1); + _auto_(l_free) struct band_chandef *chandef = NULL; + + if (netdev->type != NL80211_IFTYPE_STATION) + return; + + chandef = l_new(struct band_chandef, 1); if (nl80211_parse_chandef(msg, chandef) < 0) { l_debug("Couldn't parse operating channel info."); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.3/src/station.c new/iwd-2.4/src/station.c --- old/iwd-2.3/src/station.c 2023-01-23 19:46:38.000000000 +0100 +++ new/iwd-2.4/src/station.c 2023-03-27 17:38:25.000000000 +0200 @@ -368,8 +368,8 @@ netdev_get_path(station->netdev)); for (i = 0; ssid[i] && pos < sizeof(path); i++) - pos += snprintf(path + pos, sizeof(path) - pos, "%02x", - ssid[i]); + pos += snprintf(path + pos, sizeof(path) - pos, "%02hhx", + ssid[i]); snprintf(path + pos, sizeof(path) - pos, "_%s", security_to_str(security)); @@ -2298,12 +2298,21 @@ } /* Both ft_action/ft_authenticate will gate the associate work item */ - if ((hs->mde[4] & 1)) + if ((hs->mde[4] & 1)) { ft_action(netdev_get_ifindex(station->netdev), station->connected_bss->frequency, bss); - else - ft_authenticate(netdev_get_ifindex(station->netdev), bss); + goto done; + } + + if (station->connected_bss->frequency == bss->frequency) { + ft_authenticate_onchannel(netdev_get_ifindex(station->netdev), + bss); + goto done; + } + ft_authenticate(netdev_get_ifindex(station->netdev), bss); + +done: wiphy_radio_work_insert(station->wiphy, &station->ft_work, WIPHY_WORK_PRIORITY_CONNECT, &ft_work_ops);