mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-11-02 19:37:51 +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
327c048b30
commit
2a202eb697
@@ -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_rx_available_antenna(const char *name);
|
||||||
extern int phy_get_max_tx_power(const char *name , int channel);
|
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_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,
|
extern int phy_get_channels_state(const char *name,
|
||||||
struct schema_Wifi_Radio_State *rstate);
|
struct schema_Wifi_Radio_State *rstate);
|
||||||
extern int phy_get_band(const char *name, char *band);
|
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 = {
|
const struct uci_blob_param_list wifi_device_param = {
|
||||||
.n_params = __WDEV_ATTR_MAX,
|
.n_params = __WDEV_ATTR_MAX,
|
||||||
.params = wifi_device_policy,
|
.params = wifi_device_policy,
|
||||||
@@ -217,6 +247,8 @@ static bool radio_state_update(struct uci_section *s, struct schema_Wifi_Radio_C
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
update_channel_max_power(phy, &rstate);
|
||||||
|
|
||||||
if (tb[WDEV_ATTR_CHANNEL]) {
|
if (tb[WDEV_ATTR_CHANNEL]) {
|
||||||
nl80211_channel_get(phy, &chan);
|
nl80211_channel_get(phy, &chan);
|
||||||
if(chan)
|
if(chan)
|
||||||
|
|||||||
@@ -395,6 +395,7 @@ static void nl80211_add_phy(struct nlattr **tb, char *name)
|
|||||||
|
|
||||||
if (tb_freq[NL80211_FREQUENCY_ATTR_RADAR]) {
|
if (tb_freq[NL80211_FREQUENCY_ATTR_RADAR]) {
|
||||||
phy->chandfs[chan] = 1;
|
phy->chandfs[chan] = 1;
|
||||||
|
phy->chanpwr[chan] = nla_get_u32(tb_freq[NL80211_FREQUENCY_ATTR_MAX_TX_POWER]);
|
||||||
phy->chandisabled[chan] = 0;
|
phy->chandisabled[chan] = 0;
|
||||||
LOG(DEBUG, "%s: found dfs channel %d", phy->name, chan);
|
LOG(DEBUG, "%s: found dfs channel %d", phy->name, chan);
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -309,6 +309,21 @@ int phy_get_channels(const char *name, int *channel)
|
|||||||
return j;
|
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,
|
static void update_channels_state(struct schema_Wifi_Radio_State *rstate,
|
||||||
int *index, const char *key, int *value, int value_len)
|
int *index, const char *key, int *value, int value_len)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user