Search Linux Wireless

Re: [PATCH v4 2/2] mac80211: Add FILS discovery support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2020-07-30 07:47, Johannes Berg wrote:
On Wed, 2020-06-17 at 22:04 -0700, Aloka Dixit wrote:

+++ b/net/mac80211/cfg.c
@@ -837,6 +837,33 @@ static int ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata,
 	return 0;
 }

+static int ieee80211_set_fils_discovery(struct ieee80211_sub_if_data *sdata,
+					struct cfg80211_fils_discovery *params)
+{
+	struct fils_discovery_data *new, *old = NULL;
+	struct ieee80211_fils_discovery *fd;
+
+	fd = &sdata->vif.bss_conf.fils_discovery;
+	fd->min_interval = params->min_interval;
+	fd->max_interval = params->max_interval;
+
+	if (!params->tmpl || !params->tmpl_len) /* Optional template */
+		return 0;

Now I'm even more confused. If the template is optional, then if it's
not given it doesn't mean *everything* should be ignored, does it?

What would be the point of that? OTOH, if the template isn't there, what
would you do?

But it still doesn't make sense - if no template means you shouldn't do
anything then that doesn't mean the template should be optional, that
just means userspace shouldn't even put the NL80211_ATTR_FILS_DISCOVERY
attribute when it doesn't want anything to be done?

So it seems to me that something doesn't match. Either the template is
truly optional and then this shouldn't just return success, or the
template isn't actually optional?


Everything is not ignored, I set the minimum and maximum interval values before checking for the template so that those are accepted even if template isn't present.

For 6GHz, template is required, at least for ath11k driver.
But for 2.4GHz and 5GHz FILS discovery transmission is not offloaded to FW.

We can make the template mandatory instead and then the respective drivers will choose the handling.
Please suggest.

+	err = ieee80211_set_fils_discovery(sdata, &params->fils_discovery);
+	if (err < 0) {
+		ieee80211_vif_release_channel(sdata);
+		return err;

Is there no goto label for this error case?


Existing function doesn't use goto labels for error cases, only return.

+struct fils_discovery_data {
+	struct rcu_head rcu_head;
+	int len;
+	u8 data[0];

please use [] not [0].


Will fix in next version.

+struct sk_buff *ieee80211_get_fils_discovery_tmpl(struct ieee80211_hw *hw,
+						  struct ieee80211_vif *vif)
+{
+	struct sk_buff *skb = NULL;
+	struct fils_discovery_data *tmpl = NULL;
+	struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
+
+	if (sdata->vif.type != NL80211_IFTYPE_AP)
+		return NULL;
+
+	rcu_read_lock();
+	tmpl = rcu_dereference(sdata->u.ap.fils_discovery);
+	if (!tmpl) {
+		rcu_read_unlock();
+		return NULL;
+	}
+
+	skb = dev_alloc_skb(tmpl->len);
+	if (skb)
+		skb_put_data(skb, tmpl->data, tmpl->len);

You should consider the headroom that the driver may have requested.


I didn't understand this point, what would the driver request headroom for?
Thanks

johannes



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux