From patchwork Tue Nov 3 01:10:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arowa Suliman X-Patchwork-Id: 1392559 X-Patchwork-Delegate: j@w1.fi Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2001:8b0:10b:1231::1; helo=merlin.infradead.org; envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=merlin.20170209 header.b=BbOfT3Uo; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.a=rsa-sha256 header.s=google header.b=KsSK7qdI; dkim-atps=neutral Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CQBbC3bX4z9sVK for ; Tue, 3 Nov 2020 12:12:23 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=8gXjcISOt8J1vnLsynyMnbIKGhOjNwZhzWoTBDrWOxo=; b=BbOfT3UoDaBcSHTyXZ7r3BJp6Z czrSW+ET8taFsFZUyFzxA+NoKynzOeSeX8hahBjscZIz62K79kEwKwtHYGVGK4NskXlppbz3gDzBo bvx7GakbZ6JZqGUtc2plqCi4oADSOeqGXGv7Tq1PantdbcLQh2NG/coevTzxbtBkwJ0hXSPy5VvA3 xWQY+g4NKMLYPPgILwUIt2mmeAgJSddphiRf7TKNo2tA7ivau+dmyhrbvc1UyKlz0P7cWIMA7cgBU Bgh5d0x2vRhyh/J6Xvq956E4jeHsW2qZfO+fmBRTG5IIkO7RS4Jesw/wu9cbZtKFRT/1wSXvG7Fr7 iTdU1m1A==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kZkr2-00044a-W5; Tue, 03 Nov 2020 01:11:21 +0000 Received: from mail-pg1-x541.google.com ([2607:f8b0:4864:20::541]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kZkqx-00042i-TE for hostap@lists.infradead.org; Tue, 03 Nov 2020 01:11:17 +0000 Received: by mail-pg1-x541.google.com with SMTP id x13so12329085pgp.7 for ; Mon, 02 Nov 2020 17:11:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=x9UySJd6PO1XcY/b4qpcbIdJP0LxXwcirde976F2VC4=; b=KsSK7qdIvnX0L7y8esO9LKab/NB3qZBdEUisrkZGJoS4RHejW2+Ln5/0vZb01to3L2 W2A1bG/vOyakna553UdmJVmjxCUqeG92Zf2vx6Cbhx1E9bsH5DCyPP2dFeNIsp6DJxSM XJ+n6XEtE8uJUKuP5PbrqGgEa4JGqQwkPQHds= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=x9UySJd6PO1XcY/b4qpcbIdJP0LxXwcirde976F2VC4=; b=JDVhrfeLXFGGXhnEQFTfSzvc0O4AYxmhaZLmJFsV8ROrcqpHaDFrnepdmvaL+RSb6Q aShcrCxvKul7Dpw9u7MrZL9jdRlmo9HFVO4dfRNpftlaCkid3VG2gkg3MzcPprH2O73M i0ol82hPAL8MoIDamJ3a4dxT4KrD/DGXkPlf+lfSzgT3tjDtfIgUMDYb8QbQKqbA/5l3 dgvRUxDYCLBZCDBmzcfNiIco9PX3zdcsN7EOW0Qlpw15wGuRJ+qCnXLzOJWGVY5h15wR kLiYjubIBJe5zolonqS5tZ9kz4uKuZXAxJmxZD1b402NEyr8N1PKNlCzlAbcq3iQjfke fjrA== X-Gm-Message-State: AOAM532c/Ig9SVD/BGiT29+bIpeMY2sg4V25nSJhltGOLi8RpIqjmv7K 2yg98j9qvBkgj1In6dn6pRR/BoXbaEnZWw== X-Google-Smtp-Source: ABdhPJz25OLg+KuY7dR38+GH+DIOk3QmW1k4mz5uFymTVcMg9maAjH+HD9Zq5Wq/xg6ns0U8B7qxmA== X-Received: by 2002:a17:90a:f001:: with SMTP id bt1mr975807pjb.116.1604365872264; Mon, 02 Nov 2020 17:11:12 -0800 (PST) Received: from arowa.mtv.corp.google.com ([2620:15c:202:201:7220:84ff:fe09:cb0b]) by smtp.gmail.com with ESMTPSA id q8sm15569688pff.18.2020.11.02.17.11.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Nov 2020 17:11:11 -0800 (PST) From: Arowa Suliman X-Google-Original-From: Arowa Suliman To: hostap@lists.infradead.org Subject: [PATCH] wpa_supplicant: Notify freq change on CH_SWITCH Date: Mon, 2 Nov 2020 17:10:53 -0800 Message-Id: <20201103011053.2357991-1-arowa@google.com> X-Mailer: git-send-email 2.29.1.341.ge80a0c044ae-goog MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201102_201115_996016_830CF88F X-CRM114-Status: GOOD ( 20.84 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:541 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender X-BeenThere: hostap@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Arowa Suliman , Arowa Suliman Sender: "Hostap" Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org wpa_supplicant does not send a D-Bus notification of the BSS frequency change when a CSA happens. Sending a PropertyChanged signal with the updated frequency will notify the network manager quickly, instead of waiting for the next scan results. Signed-off-by: Arowa Suliman Change-Id: Ic68964d505e4d97334502f1a638394bc57291be3 Reviewed-by: Brian Norris --- ...cant-Notify-freq-change-on-CH_SWITCH.patch | 108 ++++++++++++++++++ wpa_supplicant/bss.c | 16 +-- wpa_supplicant/bss.h | 18 +++ wpa_supplicant/events.c | 6 + 4 files changed, 134 insertions(+), 14 deletions(-) create mode 100644 0001-wpa_supplicant-Notify-freq-change-on-CH_SWITCH.patch diff --git a/0001-wpa_supplicant-Notify-freq-change-on-CH_SWITCH.patch b/0001-wpa_supplicant-Notify-freq-change-on-CH_SWITCH.patch new file mode 100644 index 000000000..43a167e4c --- /dev/null +++ b/0001-wpa_supplicant-Notify-freq-change-on-CH_SWITCH.patch @@ -0,0 +1,108 @@ +From d57841fd7ef1042646b1f7260d5c8df2595eb180 Mon Sep 17 00:00:00 2001 +From: Arowa Suliman +Date: Fri, 23 Oct 2020 13:10:29 -0700 +Subject: [PATCH] wpa_supplicant: Notify freq change on CH_SWITCH + +wpa_supplicant does not send a D-Bus notification of the BSS frequency +change when a CSA happens. Sending a PropertyChanged signal with the +updated frequency will notify the network manager quickly, instead of +waiting for the next scan results. + +Signed-off-by: Arowa Suliman +Change-Id: Ic68964d505e4d97334502f1a638394bc57291be3 +--- + wpa_supplicant/bss.c | 16 ++-------------- + wpa_supplicant/bss.h | 18 ++++++++++++++++++ + wpa_supplicant/events.c | 6 ++++++ + 3 files changed, 26 insertions(+), 14 deletions(-) + +diff --git a/wpa_supplicant/bss.c b/wpa_supplicant/bss.c +index 4f64a4981..f01b6f799 100644 +--- a/wpa_supplicant/bss.c ++++ b/wpa_supplicant/bss.c +@@ -18,18 +18,6 @@ + #include "scan.h" + #include "bss.h" + +- +-#define WPA_BSS_FREQ_CHANGED_FLAG BIT(0) +-#define WPA_BSS_SIGNAL_CHANGED_FLAG BIT(1) +-#define WPA_BSS_PRIVACY_CHANGED_FLAG BIT(2) +-#define WPA_BSS_MODE_CHANGED_FLAG BIT(3) +-#define WPA_BSS_WPAIE_CHANGED_FLAG BIT(4) +-#define WPA_BSS_RSNIE_CHANGED_FLAG BIT(5) +-#define WPA_BSS_WPS_CHANGED_FLAG BIT(6) +-#define WPA_BSS_RATES_CHANGED_FLAG BIT(7) +-#define WPA_BSS_IES_CHANGED_FLAG BIT(8) +- +- + static void wpa_bss_set_hessid(struct wpa_bss *bss) + { + #ifdef CONFIG_INTERWORKING +@@ -497,8 +485,8 @@ static u32 wpa_bss_compare_res(const struct wpa_bss *old, + } + + +-static void notify_bss_changes(struct wpa_supplicant *wpa_s, u32 changes, +- const struct wpa_bss *bss) ++void notify_bss_changes(struct wpa_supplicant *wpa_s, u32 changes, ++ const struct wpa_bss *bss) + { + if (changes & WPA_BSS_FREQ_CHANGED_FLAG) + wpas_notify_bss_freq_changed(wpa_s, bss->id); +diff --git a/wpa_supplicant/bss.h b/wpa_supplicant/bss.h +index b4942272e..f372e5e56 100644 +--- a/wpa_supplicant/bss.h ++++ b/wpa_supplicant/bss.h +@@ -19,6 +19,22 @@ struct wpa_scan_res; + #define WPA_BSS_ASSOCIATED BIT(5) + #define WPA_BSS_ANQP_FETCH_TRIED BIT(6) + ++#define WPA_BSS_FREQ_CHANGED_FLAG BIT(0) ++#define WPA_BSS_SIGNAL_CHANGED_FLAG BIT(1) ++#define WPA_BSS_PRIVACY_CHANGED_FLAG BIT(2) ++#define WPA_BSS_MODE_CHANGED_FLAG BIT(3) ++#define WPA_BSS_WPAIE_CHANGED_FLAG BIT(4) ++#define WPA_BSS_RSNIE_CHANGED_FLAG BIT(5) ++#define WPA_BSS_WPS_CHANGED_FLAG BIT(6) ++#define WPA_BSS_RATES_CHANGED_FLAG BIT(7) ++#define WPA_BSS_IES_CHANGED_FLAG BIT(8) ++ ++struct wpa_bss_anqp_elem { ++ struct dl_list list; ++ u16 infoid; ++ struct wpabuf *payload; ++}; ++ + /** + * struct wpa_bss_anqp - ANQP data for a BSS entry (struct wpa_bss) + */ +@@ -102,6 +118,8 @@ struct wpa_bss { + /* followed by beacon_ie_len octets of IEs */ + }; + ++void notify_bss_changes(struct wpa_supplicant *wpa_s, u32 changes, ++ const struct wpa_bss *bss); + void wpa_bss_update_start(struct wpa_supplicant *wpa_s); + void wpa_bss_update_scan_res(struct wpa_supplicant *wpa_s, + struct wpa_scan_res *res, +diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c +index d7e769331..009222e10 100644 +--- a/wpa_supplicant/events.c ++++ b/wpa_supplicant/events.c +@@ -3573,6 +3573,12 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, + + wpa_s->assoc_freq = data->ch_switch.freq; + wpa_s->current_ssid->frequency = data->ch_switch.freq; ++ if (wpa_s->current_bss && ++ wpa_s->current_bss->freq != data->ch_switch.freq) { ++ wpa_s->current_bss->freq = data->ch_switch.freq; ++ notify_bss_changes(wpa_s, WPA_BSS_FREQ_CHANGED_FLAG, ++ wpa_s->current_bss); ++ } + + if (wpa_s->current_ssid->mode == WPAS_MODE_AP || + wpa_s->current_ssid->mode == WPAS_MODE_P2P_GO || +-- +2.29.1.341.ge80a0c044ae-goog + diff --git a/wpa_supplicant/bss.c b/wpa_supplicant/bss.c index 4f64a4981..f01b6f799 100644 --- a/wpa_supplicant/bss.c +++ b/wpa_supplicant/bss.c @@ -18,18 +18,6 @@ #include "scan.h" #include "bss.h" - -#define WPA_BSS_FREQ_CHANGED_FLAG BIT(0) -#define WPA_BSS_SIGNAL_CHANGED_FLAG BIT(1) -#define WPA_BSS_PRIVACY_CHANGED_FLAG BIT(2) -#define WPA_BSS_MODE_CHANGED_FLAG BIT(3) -#define WPA_BSS_WPAIE_CHANGED_FLAG BIT(4) -#define WPA_BSS_RSNIE_CHANGED_FLAG BIT(5) -#define WPA_BSS_WPS_CHANGED_FLAG BIT(6) -#define WPA_BSS_RATES_CHANGED_FLAG BIT(7) -#define WPA_BSS_IES_CHANGED_FLAG BIT(8) - - static void wpa_bss_set_hessid(struct wpa_bss *bss) { #ifdef CONFIG_INTERWORKING @@ -497,8 +485,8 @@ static u32 wpa_bss_compare_res(const struct wpa_bss *old, } -static void notify_bss_changes(struct wpa_supplicant *wpa_s, u32 changes, - const struct wpa_bss *bss) +void notify_bss_changes(struct wpa_supplicant *wpa_s, u32 changes, + const struct wpa_bss *bss) { if (changes & WPA_BSS_FREQ_CHANGED_FLAG) wpas_notify_bss_freq_changed(wpa_s, bss->id); diff --git a/wpa_supplicant/bss.h b/wpa_supplicant/bss.h index b4942272e..f372e5e56 100644 --- a/wpa_supplicant/bss.h +++ b/wpa_supplicant/bss.h @@ -19,6 +19,22 @@ struct wpa_scan_res; #define WPA_BSS_ASSOCIATED BIT(5) #define WPA_BSS_ANQP_FETCH_TRIED BIT(6) +#define WPA_BSS_FREQ_CHANGED_FLAG BIT(0) +#define WPA_BSS_SIGNAL_CHANGED_FLAG BIT(1) +#define WPA_BSS_PRIVACY_CHANGED_FLAG BIT(2) +#define WPA_BSS_MODE_CHANGED_FLAG BIT(3) +#define WPA_BSS_WPAIE_CHANGED_FLAG BIT(4) +#define WPA_BSS_RSNIE_CHANGED_FLAG BIT(5) +#define WPA_BSS_WPS_CHANGED_FLAG BIT(6) +#define WPA_BSS_RATES_CHANGED_FLAG BIT(7) +#define WPA_BSS_IES_CHANGED_FLAG BIT(8) + +struct wpa_bss_anqp_elem { + struct dl_list list; + u16 infoid; + struct wpabuf *payload; +}; + /** * struct wpa_bss_anqp - ANQP data for a BSS entry (struct wpa_bss) */ @@ -102,6 +118,8 @@ struct wpa_bss { /* followed by beacon_ie_len octets of IEs */ }; +void notify_bss_changes(struct wpa_supplicant *wpa_s, u32 changes, + const struct wpa_bss *bss); void wpa_bss_update_start(struct wpa_supplicant *wpa_s); void wpa_bss_update_scan_res(struct wpa_supplicant *wpa_s, struct wpa_scan_res *res, diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index d7e769331..009222e10 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -3573,6 +3573,12 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, wpa_s->assoc_freq = data->ch_switch.freq; wpa_s->current_ssid->frequency = data->ch_switch.freq; + if (wpa_s->current_bss && + wpa_s->current_bss->freq != data->ch_switch.freq) { + wpa_s->current_bss->freq = data->ch_switch.freq; + notify_bss_changes(wpa_s, WPA_BSS_FREQ_CHANGED_FLAG, + wpa_s->current_bss); + } if (wpa_s->current_ssid->mode == WPAS_MODE_AP || wpa_s->current_ssid->mode == WPAS_MODE_P2P_GO ||