Loading net/wireless/reg.c +63 −63 Original line number Diff line number Diff line Loading @@ -298,69 +298,6 @@ static int call_crda(const char *alpha2) return kobject_uevent_env(®_pdev->dev.kobj, KOBJ_CHANGE, envp); } /* This has the logic which determines when a new request * should be ignored. */ static int ignore_request(struct wiphy *wiphy, enum reg_set_by set_by, const char *alpha2) { /* All initial requests are respected */ if (!last_request) return 0; switch (set_by) { case REGDOM_SET_BY_INIT: return -EINVAL; case REGDOM_SET_BY_CORE: /* * Always respect new wireless core hints, should only happen * when updating the world regulatory domain at init. */ return 0; case REGDOM_SET_BY_COUNTRY_IE: if (unlikely(!is_an_alpha2(alpha2))) return -EINVAL; if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) { if (last_request->wiphy != wiphy) { /* * Two cards with two APs claiming different * different Country IE alpha2s. We could * intersect them, but that seems unlikely * to be correct. Reject second one for now. */ if (!alpha2_equal(alpha2, cfg80211_regdomain->alpha2)) return -EOPNOTSUPP; return -EALREADY; } /* Two consecutive Country IE hints on the same wiphy */ if (!alpha2_equal(cfg80211_regdomain->alpha2, alpha2)) return 0; return -EALREADY; } /* * Ignore Country IE hints for now, need to think about * what we need to do to support multi-domain operation. */ return -EOPNOTSUPP; case REGDOM_SET_BY_DRIVER: if (last_request->initiator == REGDOM_SET_BY_DRIVER) return -EALREADY; return 0; case REGDOM_SET_BY_USER: /* * If the user wants to override the AP's hint, we may * need to follow both and use the intersection. For now, * reject any such attempt (but we don't support country * IEs right now anyway.) */ if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) return -EOPNOTSUPP; return 0; } return -EINVAL; } /* Used by nl80211 before kmalloc'ing our regulatory domain */ bool reg_is_valid_request(const char *alpha2) { Loading Loading @@ -531,6 +468,69 @@ void wiphy_update_regulatory(struct wiphy *wiphy, enum reg_set_by setby) } } /* This has the logic which determines when a new request * should be ignored. */ static int ignore_request(struct wiphy *wiphy, enum reg_set_by set_by, const char *alpha2) { /* All initial requests are respected */ if (!last_request) return 0; switch (set_by) { case REGDOM_SET_BY_INIT: return -EINVAL; case REGDOM_SET_BY_CORE: /* * Always respect new wireless core hints, should only happen * when updating the world regulatory domain at init. */ return 0; case REGDOM_SET_BY_COUNTRY_IE: if (unlikely(!is_an_alpha2(alpha2))) return -EINVAL; if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) { if (last_request->wiphy != wiphy) { /* * Two cards with two APs claiming different * different Country IE alpha2s. We could * intersect them, but that seems unlikely * to be correct. Reject second one for now. */ if (!alpha2_equal(alpha2, cfg80211_regdomain->alpha2)) return -EOPNOTSUPP; return -EALREADY; } /* Two consecutive Country IE hints on the same wiphy */ if (!alpha2_equal(cfg80211_regdomain->alpha2, alpha2)) return 0; return -EALREADY; } /* * Ignore Country IE hints for now, need to think about * what we need to do to support multi-domain operation. */ return -EOPNOTSUPP; case REGDOM_SET_BY_DRIVER: if (last_request->initiator == REGDOM_SET_BY_DRIVER) return -EALREADY; return 0; case REGDOM_SET_BY_USER: /* * If the user wants to override the AP's hint, we may * need to follow both and use the intersection. For now, * reject any such attempt (but we don't support country * IEs right now anyway.) */ if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) return -EOPNOTSUPP; return 0; } return -EINVAL; } /* Caller must hold &cfg80211_drv_mutex */ int __regulatory_hint(struct wiphy *wiphy, enum reg_set_by set_by, const char *alpha2) Loading Loading
net/wireless/reg.c +63 −63 Original line number Diff line number Diff line Loading @@ -298,69 +298,6 @@ static int call_crda(const char *alpha2) return kobject_uevent_env(®_pdev->dev.kobj, KOBJ_CHANGE, envp); } /* This has the logic which determines when a new request * should be ignored. */ static int ignore_request(struct wiphy *wiphy, enum reg_set_by set_by, const char *alpha2) { /* All initial requests are respected */ if (!last_request) return 0; switch (set_by) { case REGDOM_SET_BY_INIT: return -EINVAL; case REGDOM_SET_BY_CORE: /* * Always respect new wireless core hints, should only happen * when updating the world regulatory domain at init. */ return 0; case REGDOM_SET_BY_COUNTRY_IE: if (unlikely(!is_an_alpha2(alpha2))) return -EINVAL; if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) { if (last_request->wiphy != wiphy) { /* * Two cards with two APs claiming different * different Country IE alpha2s. We could * intersect them, but that seems unlikely * to be correct. Reject second one for now. */ if (!alpha2_equal(alpha2, cfg80211_regdomain->alpha2)) return -EOPNOTSUPP; return -EALREADY; } /* Two consecutive Country IE hints on the same wiphy */ if (!alpha2_equal(cfg80211_regdomain->alpha2, alpha2)) return 0; return -EALREADY; } /* * Ignore Country IE hints for now, need to think about * what we need to do to support multi-domain operation. */ return -EOPNOTSUPP; case REGDOM_SET_BY_DRIVER: if (last_request->initiator == REGDOM_SET_BY_DRIVER) return -EALREADY; return 0; case REGDOM_SET_BY_USER: /* * If the user wants to override the AP's hint, we may * need to follow both and use the intersection. For now, * reject any such attempt (but we don't support country * IEs right now anyway.) */ if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) return -EOPNOTSUPP; return 0; } return -EINVAL; } /* Used by nl80211 before kmalloc'ing our regulatory domain */ bool reg_is_valid_request(const char *alpha2) { Loading Loading @@ -531,6 +468,69 @@ void wiphy_update_regulatory(struct wiphy *wiphy, enum reg_set_by setby) } } /* This has the logic which determines when a new request * should be ignored. */ static int ignore_request(struct wiphy *wiphy, enum reg_set_by set_by, const char *alpha2) { /* All initial requests are respected */ if (!last_request) return 0; switch (set_by) { case REGDOM_SET_BY_INIT: return -EINVAL; case REGDOM_SET_BY_CORE: /* * Always respect new wireless core hints, should only happen * when updating the world regulatory domain at init. */ return 0; case REGDOM_SET_BY_COUNTRY_IE: if (unlikely(!is_an_alpha2(alpha2))) return -EINVAL; if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) { if (last_request->wiphy != wiphy) { /* * Two cards with two APs claiming different * different Country IE alpha2s. We could * intersect them, but that seems unlikely * to be correct. Reject second one for now. */ if (!alpha2_equal(alpha2, cfg80211_regdomain->alpha2)) return -EOPNOTSUPP; return -EALREADY; } /* Two consecutive Country IE hints on the same wiphy */ if (!alpha2_equal(cfg80211_regdomain->alpha2, alpha2)) return 0; return -EALREADY; } /* * Ignore Country IE hints for now, need to think about * what we need to do to support multi-domain operation. */ return -EOPNOTSUPP; case REGDOM_SET_BY_DRIVER: if (last_request->initiator == REGDOM_SET_BY_DRIVER) return -EALREADY; return 0; case REGDOM_SET_BY_USER: /* * If the user wants to override the AP's hint, we may * need to follow both and use the intersection. For now, * reject any such attempt (but we don't support country * IEs right now anyway.) */ if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) return -EOPNOTSUPP; return 0; } return -EINVAL; } /* Caller must hold &cfg80211_drv_mutex */ int __regulatory_hint(struct wiphy *wiphy, enum reg_set_by set_by, const char *alpha2) Loading