I just realized that this is broken in nl80211_channel_switch() and
ieee80211_set_csa_beacon(), doing a CSA will always disable FTM unless
it was actually included in the new configuration.
Hi Johannes

oops..Yes, there is a bug in the patch. The code below, I think, must fix this issue.
Please let me know your comments..

diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 51622333d460..70d6de29425b 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -2934,19 +2934,20 @@ static int ieee80211_start_radar_detection(struct wiphy *wiphy,
                memcpy(pos, beacon->probe_resp, beacon->probe_resp_len);
                pos += beacon->probe_resp_len;
        }
-       if (beacon->ftm_responder)
+       if (beacon->ftm_responder != -1) {
                new_beacon->ftm_responder = beacon->ftm_responder;
-       if (beacon->lci) {
-               new_beacon->lci_len = beacon->lci_len;
-               new_beacon->lci = pos;
-               memcpy(pos, beacon->lci, beacon->lci_len);
-               pos += beacon->lci_len;
-       }
-       if (beacon->civicloc) {
-               new_beacon->civicloc_len = beacon->civicloc_len;
-               new_beacon->civicloc = pos;
-               memcpy(pos, beacon->civicloc, beacon->civicloc_len);
-               pos += beacon->civicloc_len;
+               if (beacon->lci) {
+                       new_beacon->lci_len = beacon->lci_len;
+                       new_beacon->lci = pos;
+                       memcpy(pos, beacon->lci, beacon->lci_len);
+                       pos += beacon->lci_len;
+               }
+               if (beacon->civicloc) {
+                       new_beacon->civicloc_len = beacon->civicloc_len;
+                       new_beacon->civicloc = pos;
+ memcpy(pos, beacon->civicloc, beacon->civicloc_len);
+                       pos += beacon->civicloc_len;
+               }
        }

        return new_beacon;



Doing the trivial thing:

        memset(&params, 0, sizeof(params));
+       params.beacon_after.ftm_responder = -1;
This would not be needed then.

in nl80211_channel_switch() will not help because then mac80211 will
lose all the extra configuration, and will actually store -1 into its
enabled value which is really strange.

I'd appreciate if you could take a look at this.

Thanks,
johannes

Reply via email to