Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp7496875ybl; Tue, 24 Dec 2019 03:43:23 -0800 (PST) X-Google-Smtp-Source: APXvYqwE5gIgOrDi4ztVRyAubBC7sQIUtrov88Zj9GqSRpHB7lJQwTU0AyjYUtBDK2K2XrMaCw42 X-Received: by 2002:a9d:ee2:: with SMTP id 89mr28662812otj.270.1577187803621; Tue, 24 Dec 2019 03:43:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577187803; cv=none; d=google.com; s=arc-20160816; b=ncZT7wzJNbOdzKj5H28daMPq+1Rh99dWC3rjtIT4z42cPqecxGBcNpTavRxaMQyihG v6gIp/AoFhRjSkp8LZwcQ6A31hFWJgD4YQ7bQl1UbzkH47nb4coMKDmPVsEIL2yuYIG0 kvkAk2J5MzpflWBJsIyjd6sADKlmKjFHTRsyCTH8G/kVXFWVO5gWz6iNxoJDix89GdCN eH3fQSIzSY9TfHIdiptSSSgi3kyYSGJY2veGv6pyHLJ3yFfTMtU7GnVp0d/hjhnGhwcF LWXswyo58t2Hsx/tBsM/FhlRlSonAmbouP6g+0GxsPTtZPx3TCTBwYTYG+pj6DrB0VWG gecA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-transfer-encoding:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=OYWduoQaPz3/fAD9SEXfgk2ycSYLzq/KSQ7h5c0MpnI=; b=W04QKu2RWgEE7FozDKF5E8gK4sFjwFKFeiL+WnxDlOP+J8Bvvd4EL2sRKhXaHtqdoU mKmdYHr4zRBYwzXvDvC1QZPc6mCXUT1v6+JKJy8cE8PT+C337og2siV91Y6IiDfqCjOX P+j6dB6dH2ATz7rzqUiAGxp7PyN2Vmtnv+jUzzlmBS1PNyLmS3uAex+CRBwjGxS4a09p hm/nJFnzhEx/k/SmD8p/QqUdxH+BOXrEznhaI1CLfbuvlyPWGcr4GKz7GAciAzcYZukg FerYHMiKhVklhDmhi/HuuKkumyxxwTWfRneF9fn7sae0dfDuHpVxMwOKaq5M8WoasjX/ myig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="E/U0CPsd"; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b1si8990696oiy.9.2019.12.24.03.42.57; Tue, 24 Dec 2019 03:43:23 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="E/U0CPsd"; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726225AbfLXLmo (ORCPT + 99 others); Tue, 24 Dec 2019 06:42:44 -0500 Received: from mail-lf1-f67.google.com ([209.85.167.67]:40049 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726195AbfLXLmo (ORCPT ); Tue, 24 Dec 2019 06:42:44 -0500 Received: by mail-lf1-f67.google.com with SMTP id i23so14901803lfo.7 for ; Tue, 24 Dec 2019 03:42:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=OYWduoQaPz3/fAD9SEXfgk2ycSYLzq/KSQ7h5c0MpnI=; b=E/U0CPsd6ckk0OVSw/vaKIlpxRtVqTxPWqpI+AlRBcxknGomVvBPu/CYPTzv8LzP1V HdCQcbDw6tQjgC5I9xNPY+XdQ8QFIW9wklCUTwCC9Z/5W8rYmbXsG4/O3tUa7Y3lO7YZ fOW8AvRT41/Vtv9u0HYWOyfXN8WR6b3UdPIAgtMM0PeDFABvlq6XbVHu0N1jIwOFe3Rh 5iqkUZCmaGX5Z7jeqzmJ52DRE0nSEnqqa3xEDyO1Wg6rvvJC7rZyf6lC2MyM64QPS+k3 fkehmr6xG1BP8BKPI4nPOU2C/snFOWgnZad1MKxeBlRT2lSwk8HgltKAp2exWM8dl2+h vZww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=OYWduoQaPz3/fAD9SEXfgk2ycSYLzq/KSQ7h5c0MpnI=; b=Q44+520/VLXzqbpVhqnqNgbM63SWAwYnpA+QxF0fUDZyMmAM+/66grYejMxhrZFQWa 9hHSWM/Xsyfzpb4lSr7CKsH37zdaZpK5J8P7miNnnh6oDvgat44/tQ4Um5EeKjQNGkmg SGlFCSAqBOIWwsJyuP/v0iuD7HpYk98yONt2nk6zY3dFmV96+ejHKIyX0PUgtPq/9aTY Pj36pY7B9N/bdGjTZn5qUinnR9KpCa4mOi75VAiFpq1O3/tk6TPwPqg4C72yt6sq67BV tPfGdf2HUSNB01f4QxX2NKd1p5yHC7jj1Cvn5EuYmzJW32KzoDxKRxej5N6uQnZScRS/ CqvA== X-Gm-Message-State: APjAAAVdfNnwGt6w4+H1tzcEAc69nwE3VYzWSS6lg3dO3h/Jy7I/FFGb ikZqHJJUxPzREvJYqvuQVLJ/1Num3jE= X-Received: by 2002:a19:888:: with SMTP id 130mr20125401lfi.167.1577187762454; Tue, 24 Dec 2019 03:42:42 -0800 (PST) Received: from bars (ip-195-182-157-78.clients.cmk.ru. [195.182.157.78]) by smtp.gmail.com with ESMTPSA id y14sm9860541ljk.46.2019.12.24.03.42.41 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Dec 2019 03:42:41 -0800 (PST) Date: Tue, 24 Dec 2019 14:42:41 +0300 From: Sergey Matyukevich To: Orr Mazor Cc: Sergey Matyukevich , Johannes Berg , "linux-wireless@vger.kernel.org" Subject: Re: [PATCH] subsystem: Fix radar event during another phy CAC Message-ID: <20191224114241.uxfdifi2suocp2sa@bars> References: <20191222145449.15792-1-Orr.Mazor@tandemg.com> <20191223105234.lgsupxfapbmxuvc5@bars> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: NeoMutt/20170113 (1.7.2) Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Hi Orr, Thanks for detailed use-case clarification. > >> In case a radar event of CAC_FINISHED or RADAR_DETECTED happens during > >> another phy is during CAC we might need to cancel that CAC. > >> If we got a radar in a channel that another phy is now doing CAC on > >> then the CAC should be canceled. > >> If, for example, 2 phys doing CAC on the same channels, or on > >> comptable channels, once on of them will finish his CAC the other > >> might need to cancel his CAC, since it is no longer relevant. > >> > >> To fix that the commit adds an callback and implement it in mac80211 > >> to end CAC. > >> This commit also adds a call to said callback if after a radar event > >> we see the cac is no longer relevant > > > >>  net/mac80211/cfg.c      | 23 +++++++++++++++++++++++ > >>  net/wireless/rdev-ops.h | 10 ++++++++++ > >>  net/wireless/reg.c      | 24 +++++++++++++++++++++++- > >>  net/wireless/trace.h    |  5 +++++ > >>  5 files changed, 66 insertions(+), 1 deletion(-) > >> > >> diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index > >> 4ab2c49423dc..68782ba8b6e8 100644 > >> --- a/include/net/cfg80211.h > >> +++ b/include/net/cfg80211.h > >> @@ -3537,6 +3537,9 @@ struct cfg80211_update_owe_info { > >>   * > >>   * @start_radar_detection: Start radar detection in the driver. > >>   * > >> + * @end_cac: End running CAC, probably because a related CAC > >> + *   was finished on another phy. > >> + * > > > >Maybe it makes sense to follow existing naming convention here and to use > >something like 'stop_radar_detection' ? > > I think 'stop_radar_detection' might be misleading as we don’t stop radar_detection, > we only end cac, normal radar detection will continue. Ok, good point. > >>   * @update_ft_ies: Provide updated Fast BSS Transition information to the > >>   *   driver. If the SME is in the driver/firmware, this information can be > >>   *   used in building Authentication and Reassociation Request frames. > >> @@ -3863,6 +3866,8 @@ struct cfg80211_ops { > >>                                        struct net_device *dev, > >>                                        struct cfg80211_chan_def *chandef, > >>                                        u32 cac_time_ms); > >> +     void    (*end_cac)(struct wiphy *wiphy, > >> +                             struct net_device *dev); > > > >... > > > >> +static void cfg80211_check_and_end_cac(struct > >> +cfg80211_registered_device *rdev) { > >> +     struct wireless_dev *wdev; > >> +     /* If we finished CAC or received radar, we should end any > >> +      * CAC running on the same channels. > >> +      * the check !cfg80211_chandef_dfs_usable contain 2 options: > >> +      * either all channels are available - those the CAC_FINISHED > >> +      * event has effected another wdev state, or there is a channel > >> +      * in unavailable state in wdev chandef - those the RADAR_DETECTED > >> +      * event has effected another wdev state. > >> +      * In both cases we should end the CAC on the wdev. > >> +      * > >> +      */ > >> +     list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { > >> +             if (wdev->cac_started && > >> +                 !cfg80211_chandef_dfs_usable(&rdev->wiphy, &wdev- > >>chandef)) > >> +                     rdev_end_cac(rdev, wdev->netdev); > >> +     } > >> +} > >> + > > > >IIUC, this code does not match your commit message. You are stopping CAC > >on all the virtual wireless interfaces on the same PHY, but not CACs on > >different PHYs. Meanwhile CAC does not need to be started on multiple > >virtual interfaces. For instance, in multiple BSSID configuration, hostapd > >performs CAC only on primary interface. > > > > regulatory_propagate_dfs_state will call cfg80211_check_and_end_cac > only on phys != current phy. > So for each phy != current we will call mac80211 end_cac (if needed) > which in turn will end the cac on all that phys’ interfaces. Ok, so regulatory_propagate_dfs_state iterates over other PHYs from the same regulatory region updating state of DFS channel reported by the original PHY. Unless I am missing something, in this case there are two possible ways to proceed with CAC running on other PHYs: - to stop CAC on other PHYs with the same channel/bandwidth in both RADAR_DETECTION and CAC_FINISHED cases - to stop CAC on other PHYs if their channel has just become unusable due to RADAR_DETECTION event reported by the original PHY So it looks like you have chosen a more conservative second option. But then I don't quite understand your comment for the new function cfg80211_check_and_end_cac: why do you say that CAC_FINISHED case is also covered here ? Regards, Sergey