mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-29 09:32:34 +00:00
WIFI-721: Added new var to Radio State that stores max channel power
Signed-off-by: Owen Anderson <owenthomasanderson@gmail.com>
This commit is contained in:
committed by
Rick Sommerville
parent
c0cb6baa89
commit
e6bb6f7d4f
@@ -0,0 +1,19 @@
|
||||
--- a/interfaces/opensync.ovsschema
|
||||
+++ b/interfaces/opensync.ovsschema
|
||||
@@ -1880,7 +1880,15 @@
|
||||
"min": 0,
|
||||
"max": "unlimited"
|
||||
}
|
||||
- }
|
||||
+ },
|
||||
+ "channel_max_power": {
|
||||
+ "type": {
|
||||
+ "key": "integer",
|
||||
+ "value": "integer",
|
||||
+ "min": 0,
|
||||
+ "max": "unlimited"
|
||||
+ }
|
||||
+ }
|
||||
},
|
||||
"isRoot": true,
|
||||
"maxRows": 256
|
||||
@@ -12,6 +12,7 @@ extern int phy_get_tx_available_antenna(const char *name);
|
||||
extern int phy_get_rx_available_antenna(const char *name);
|
||||
extern int phy_get_max_tx_power(const char *name , int channel);
|
||||
extern int phy_get_channels(const char *name, int *channel);
|
||||
extern int phy_get_dfs_channels(const char *name, int *channel);
|
||||
extern int phy_get_channels_state(const char *name,
|
||||
struct schema_Wifi_Radio_State *rstate);
|
||||
extern int phy_get_band(const char *name, char *band);
|
||||
|
||||
@@ -182,6 +182,36 @@ static void radio_state_custom_options_get(struct schema_Wifi_Radio_State *rstat
|
||||
}
|
||||
}
|
||||
|
||||
static void set_channel_max_power(struct schema_Wifi_Radio_State *rstate,
|
||||
int *index, int channel,
|
||||
int max_power)
|
||||
{
|
||||
rstate->channel_max_power_keys[*index] = channel;
|
||||
rstate->channel_max_power[*index] = max_power;
|
||||
*index += 1;
|
||||
rstate->channel_max_power_len = *index;
|
||||
}
|
||||
|
||||
// Update the entire channel_max_power map in the radio state
|
||||
static void update_channel_max_power(char* phy, struct schema_Wifi_Radio_State *rstate) {
|
||||
int channels[64];
|
||||
int channel_count = phy_get_channels(phy, channels);
|
||||
channel_count += phy_get_dfs_channels(phy, channels + channel_count);
|
||||
|
||||
// Clear the data previously stored in channel_max_power
|
||||
memset(rstate->channel_max_power_keys, 0, sizeof(rstate->channel_max_power_keys));
|
||||
memset(rstate->channel_max_power, 0, sizeof(rstate->channel_max_power));
|
||||
rstate->channel_max_power_len = 0;
|
||||
|
||||
// Set the new values for channel_max_power
|
||||
int i, index = 0;
|
||||
for (i = 0; i < channel_count && i < 64; i++) {
|
||||
int channel = channels[i];
|
||||
int max_tx_power = phy_get_max_tx_power(phy, channel);
|
||||
set_channel_max_power(rstate, &index, channel, max_tx_power);
|
||||
}
|
||||
}
|
||||
|
||||
const struct uci_blob_param_list wifi_device_param = {
|
||||
.n_params = __WDEV_ATTR_MAX,
|
||||
.params = wifi_device_policy,
|
||||
@@ -217,6 +247,8 @@ static bool radio_state_update(struct uci_section *s, struct schema_Wifi_Radio_C
|
||||
return false;
|
||||
}
|
||||
|
||||
update_channel_max_power(phy, &rstate);
|
||||
|
||||
if (tb[WDEV_ATTR_CHANNEL]) {
|
||||
nl80211_channel_get(phy, &chan);
|
||||
if(chan)
|
||||
|
||||
@@ -395,6 +395,7 @@ static void nl80211_add_phy(struct nlattr **tb, char *name)
|
||||
|
||||
if (tb_freq[NL80211_FREQUENCY_ATTR_RADAR]) {
|
||||
phy->chandfs[chan] = 1;
|
||||
phy->chanpwr[chan] = nla_get_u32(tb_freq[NL80211_FREQUENCY_ATTR_MAX_TX_POWER]);
|
||||
phy->chandisabled[chan] = 0;
|
||||
LOG(DEBUG, "%s: found dfs channel %d", phy->name, chan);
|
||||
continue;
|
||||
|
||||
@@ -309,6 +309,21 @@ int phy_get_channels(const char *name, int *channel)
|
||||
return j;
|
||||
}
|
||||
|
||||
// Gets all the dfs channels avaible for a radio
|
||||
int phy_get_dfs_channels(const char *name, int *dfs_channels)
|
||||
{
|
||||
struct wifi_phy *phy = phy_find(name);
|
||||
int i, j = 0;
|
||||
|
||||
if (!phy)
|
||||
return 0;
|
||||
|
||||
for (i = 0; (i < IEEE80211_CHAN_MAX) && (j < 64); i++)
|
||||
if (phy->chandfs[i])
|
||||
dfs_channels[j++] = i;
|
||||
return j;
|
||||
}
|
||||
|
||||
static void update_channels_state(struct schema_Wifi_Radio_State *rstate,
|
||||
int *index, const char *key, int *value, int value_len)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user