mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 23:12:32 +00:00
87033c3a0b
- add support for configuring allowed radios for a vif - add support for monitor mode on multiple channels Signed-off-by: Felix Fietkau <nbd@nbd.name>
65 lines
2.3 KiB
Diff
65 lines
2.3 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Wed, 7 Aug 2024 13:31:07 +0200
|
|
Subject: [PATCH] wifi: cfg80211: report per wiphy radio antenna mask
|
|
|
|
With multi-radio devices, each radio typically gets a fixed set of antennas.
|
|
In order to be able to disable specific antennas for some radios, user space
|
|
needs to know which antenna mask bits are assigned to which radio.
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/include/net/cfg80211.h
|
|
+++ b/include/net/cfg80211.h
|
|
@@ -5443,6 +5443,8 @@ struct wiphy_radio_freq_range {
|
|
* @iface_combinations: Valid interface combinations array, should not
|
|
* list single interface types.
|
|
* @n_iface_combinations: number of entries in @iface_combinations array.
|
|
+ *
|
|
+ * @antenna_mask: bitmask of antennas connected to this radio.
|
|
*/
|
|
struct wiphy_radio {
|
|
const struct wiphy_radio_freq_range *freq_range;
|
|
@@ -5450,6 +5452,8 @@ struct wiphy_radio {
|
|
|
|
const struct ieee80211_iface_combination *iface_combinations;
|
|
int n_iface_combinations;
|
|
+
|
|
+ u32 antenna_mask;
|
|
};
|
|
|
|
#define CFG80211_HW_TIMESTAMP_ALL_PEERS 0xffff
|
|
--- a/include/uapi/linux/nl80211.h
|
|
+++ b/include/uapi/linux/nl80211.h
|
|
@@ -8038,6 +8038,8 @@ enum nl80211_ap_settings_flags {
|
|
* @NL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION: Supported interface
|
|
* combination for this radio. Attribute may be present multiple times
|
|
* and contains attributes defined in &enum nl80211_if_combination_attrs.
|
|
+ * @NL80211_WIPHY_RADIO_ATTR_ANTENNA_MASK: bitmask (u32) of antennas
|
|
+ * connected to this radio.
|
|
*
|
|
* @__NL80211_WIPHY_RADIO_ATTR_LAST: Internal
|
|
* @NL80211_WIPHY_RADIO_ATTR_MAX: Highest attribute
|
|
@@ -8048,6 +8050,7 @@ enum nl80211_wiphy_radio_attrs {
|
|
NL80211_WIPHY_RADIO_ATTR_INDEX,
|
|
NL80211_WIPHY_RADIO_ATTR_FREQ_RANGE,
|
|
NL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION,
|
|
+ NL80211_WIPHY_RADIO_ATTR_ANTENNA_MASK,
|
|
|
|
/* keep last */
|
|
__NL80211_WIPHY_RADIO_ATTR_LAST,
|
|
--- a/net/wireless/nl80211.c
|
|
+++ b/net/wireless/nl80211.c
|
|
@@ -2431,6 +2431,11 @@ static int nl80211_put_radio(struct wiph
|
|
if (nla_put_u32(msg, NL80211_WIPHY_RADIO_ATTR_INDEX, idx))
|
|
goto nla_put_failure;
|
|
|
|
+ if (r->antenna_mask &&
|
|
+ nla_put_u32(msg, NL80211_WIPHY_RADIO_ATTR_ANTENNA_MASK,
|
|
+ r->antenna_mask))
|
|
+ goto nla_put_failure;
|
|
+
|
|
for (i = 0; i < r->n_freq_range; i++) {
|
|
const struct wiphy_radio_freq_range *range = &r->freq_range[i];
|
|
|