Hello,
This is scenario:
1) insmod cfg80211.ko
2) iw reg set FR
3) modprobe ath10k_pci (default US will be registered)
4) intersection here - is it as designed? Country "98"
5) after that no way to setup new country using iw reg set (lock),
always fail in such code:
__reg_process_hint_user(...)
if ((lr->initiator == NL80211_REGDOM_SET_BY_CORE ||
lr->initiator == NL80211_REGDOM_SET_BY_DRIVER ||
lr->initiator == NL80211_REGDOM_SET_BY_USER) &&
regdom_changes(lr->alpha2))
return REG_REQ_IGNORE;
Last request still have "US" - shouldn't be "98" like we set in intersection?
Such patch setup same alpha2 for last request (also in case of we will
change this in intersection)
@Luis could you check this patch, I am not sure this is best fix for that?
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 1219a07..df70db7 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -271,6 +271,7 @@ static void reset_regdomains(bool full_reset,
const struct ieee80211_regdomain *new_regdom)
{
const struct ieee80211_regdomain *r;
+ struct regulatory_request *lr;
ASSERT_RTNL();
@@ -284,6 +285,12 @@ static void reset_regdomains(bool full_reset,
if (r == &world_regdom)
r = NULL;
+ lr = get_last_request();
+ if (lr && new_regdom) {
+ lr->alpha2[0] = new_regdom->alpha2[0];
+ lr->alpha2[1] = new_regdom->alpha2[1];
+ }
+
rcu_free_regdom(r);
rcu_free_regdom(cfg80211_world_regdom);
BR
Janusz