Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b2106ae authored by Luciano Coelho's avatar Luciano Coelho Committed by Johannes Berg
Browse files

cfg80211: remove radar requirements check from cfg80211_can_use_iftype_chan()



We don't have to double check whether the parameters passed to
cfg80211_can_use_iftype_chan() are correct.  We should just make sure
they *are* when we call this function.

Remove the radar_detect argument check in
cfg80211_can_use_iftype_chan() to simplify the code.

Signed-off-by: default avatarLuciano Coelho <luciano.coelho@intel.com>
[keep braces around a long comment + single statement]
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent e5d2f954
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -128,12 +128,11 @@ int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev,
#endif
	check_chan = params->chandef.chan;
	if (params->userspace_handles_dfs) {
		/* use channel NULL to check for radar even if the current
		 * channel is not a radar channel - it might decide to change
		 * to DFS channel later.
		/* Check for radar even if the current channel is not
		 * a radar channel - it might decide to change to DFS
		 * channel later.
		 */
		radar_detect_width = BIT(params->chandef.width);
		check_chan = NULL;
	}

	err = cfg80211_can_use_iftype_chan(rdev, wdev, wdev->iftype,
+6 −0
Original line number Diff line number Diff line
@@ -236,6 +236,12 @@ int cfg80211_set_mesh_channel(struct cfg80211_registered_device *rdev,
		if (!netif_running(wdev->netdev))
			return -ENETDOWN;

		/* cfg80211_can_use_chan() calls
		 * cfg80211_can_use_iftype_chan() with no radar
		 * detection, so if we're trying to use a radar
		 * channel here, something is wrong.
		 */
		WARN_ON_ONCE(chandef->chan->flags & IEEE80211_CHAN_RADAR);
		err = cfg80211_can_use_chan(rdev, wdev, chandef->chan,
					    CHAN_MODE_SHARED);
		if (err)
+1 −30
Original line number Diff line number Diff line
@@ -1269,7 +1269,6 @@ int cfg80211_can_use_iftype_chan(struct cfg80211_registered_device *rdev,
	enum cfg80211_chan_mode chmode;
	int num_different_channels = 0;
	int total = 1;
	bool radar_required = false;
	int i, j;

	ASSERT_RTNL();
@@ -1277,35 +1276,7 @@ int cfg80211_can_use_iftype_chan(struct cfg80211_registered_device *rdev,
	if (WARN_ON(hweight32(radar_detect) > 1))
		return -EINVAL;

	switch (iftype) {
	case NL80211_IFTYPE_ADHOC:
	case NL80211_IFTYPE_AP:
	case NL80211_IFTYPE_AP_VLAN:
	case NL80211_IFTYPE_MESH_POINT:
	case NL80211_IFTYPE_P2P_GO:
	case NL80211_IFTYPE_WDS:
		/* if the interface could potentially choose a DFS channel,
		 * then mark DFS as required.
		 */
		if (!chan) {
			if (chanmode != CHAN_MODE_UNDEFINED && radar_detect)
				radar_required = true;
			break;
		}
		radar_required = !!(chan->flags & IEEE80211_CHAN_RADAR);
		break;
	case NL80211_IFTYPE_P2P_CLIENT:
	case NL80211_IFTYPE_STATION:
	case NL80211_IFTYPE_P2P_DEVICE:
	case NL80211_IFTYPE_MONITOR:
		break;
	case NUM_NL80211_IFTYPES:
	case NL80211_IFTYPE_UNSPECIFIED:
	default:
		return -EINVAL;
	}

	if (radar_required && !radar_detect)
	if (WARN_ON(iftype >= NUM_NL80211_IFTYPES))
		return -EINVAL;

	/* Always allow software iftypes */