cfg80211: remove enum station_info_flags
This is really just duplicating the list of information that's already available in the nl80211 attribute, so remove the list. Two small changes are needed: * remove STATION_INFO_ASSOC_REQ_IES complete, but the length (assoc_req_ies_len) can be used instead * add NL80211_STA_INFO_RX_DROP_MISC which exists internally but not in nl80211 yet This gets rid of the duplicate maintenance of the two lists. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
@@ -3671,115 +3671,77 @@ static int nl80211_send_station(struct sk_buff *msg, u32 cmd, u32 portid,
|
||||
sinfoattr = nla_nest_start(msg, NL80211_ATTR_STA_INFO);
|
||||
if (!sinfoattr)
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_CONNECTED_TIME) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_CONNECTED_TIME,
|
||||
sinfo->connected_time))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_INACTIVE_TIME) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_INACTIVE_TIME,
|
||||
sinfo->inactive_time))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & (STATION_INFO_RX_BYTES |
|
||||
STATION_INFO_RX_BYTES64)) &&
|
||||
|
||||
#define PUT_SINFO(attr, memb, type) do { \
|
||||
if (sinfo->filled & BIT(NL80211_STA_INFO_ ## attr) && \
|
||||
nla_put_ ## type(msg, NL80211_STA_INFO_ ## attr, \
|
||||
sinfo->memb)) \
|
||||
goto nla_put_failure; \
|
||||
} while (0)
|
||||
|
||||
PUT_SINFO(CONNECTED_TIME, connected_time, u32);
|
||||
PUT_SINFO(INACTIVE_TIME, inactive_time, u32);
|
||||
|
||||
if (sinfo->filled & (BIT(NL80211_STA_INFO_RX_BYTES) |
|
||||
BIT(NL80211_STA_INFO_RX_BYTES64)) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_RX_BYTES,
|
||||
(u32)sinfo->rx_bytes))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & (STATION_INFO_TX_BYTES |
|
||||
STATION_INFO_TX_BYTES64)) &&
|
||||
|
||||
if (sinfo->filled & (BIT(NL80211_STA_INFO_TX_BYTES) |
|
||||
BIT(NL80211_STA_INFO_TX_BYTES64)) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_TX_BYTES,
|
||||
(u32)sinfo->tx_bytes))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_RX_BYTES64) &&
|
||||
nla_put_u64(msg, NL80211_STA_INFO_RX_BYTES64,
|
||||
sinfo->rx_bytes))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_TX_BYTES64) &&
|
||||
nla_put_u64(msg, NL80211_STA_INFO_TX_BYTES64,
|
||||
sinfo->tx_bytes))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_LLID) &&
|
||||
nla_put_u16(msg, NL80211_STA_INFO_LLID, sinfo->llid))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_PLID) &&
|
||||
nla_put_u16(msg, NL80211_STA_INFO_PLID, sinfo->plid))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_PLINK_STATE) &&
|
||||
nla_put_u8(msg, NL80211_STA_INFO_PLINK_STATE,
|
||||
sinfo->plink_state))
|
||||
goto nla_put_failure;
|
||||
|
||||
PUT_SINFO(RX_BYTES64, rx_bytes, u64);
|
||||
PUT_SINFO(TX_BYTES64, tx_bytes, u64);
|
||||
PUT_SINFO(LLID, llid, u16);
|
||||
PUT_SINFO(PLID, plid, u16);
|
||||
PUT_SINFO(PLINK_STATE, plink_state, u8);
|
||||
|
||||
switch (rdev->wiphy.signal_type) {
|
||||
case CFG80211_SIGNAL_TYPE_MBM:
|
||||
if ((sinfo->filled & STATION_INFO_SIGNAL) &&
|
||||
nla_put_u8(msg, NL80211_STA_INFO_SIGNAL,
|
||||
sinfo->signal))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_SIGNAL_AVG) &&
|
||||
nla_put_u8(msg, NL80211_STA_INFO_SIGNAL_AVG,
|
||||
sinfo->signal_avg))
|
||||
goto nla_put_failure;
|
||||
PUT_SINFO(SIGNAL, signal, u8);
|
||||
PUT_SINFO(SIGNAL_AVG, signal_avg, u8);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (sinfo->filled & STATION_INFO_CHAIN_SIGNAL) {
|
||||
if (sinfo->filled & BIT(NL80211_STA_INFO_CHAIN_SIGNAL)) {
|
||||
if (!nl80211_put_signal(msg, sinfo->chains,
|
||||
sinfo->chain_signal,
|
||||
NL80211_STA_INFO_CHAIN_SIGNAL))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
if (sinfo->filled & STATION_INFO_CHAIN_SIGNAL_AVG) {
|
||||
if (sinfo->filled & BIT(NL80211_STA_INFO_CHAIN_SIGNAL_AVG)) {
|
||||
if (!nl80211_put_signal(msg, sinfo->chains,
|
||||
sinfo->chain_signal_avg,
|
||||
NL80211_STA_INFO_CHAIN_SIGNAL_AVG))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
if (sinfo->filled & STATION_INFO_TX_BITRATE) {
|
||||
if (sinfo->filled & BIT(NL80211_STA_INFO_TX_BITRATE)) {
|
||||
if (!nl80211_put_sta_rate(msg, &sinfo->txrate,
|
||||
NL80211_STA_INFO_TX_BITRATE))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
if (sinfo->filled & STATION_INFO_RX_BITRATE) {
|
||||
if (sinfo->filled & BIT(NL80211_STA_INFO_RX_BITRATE)) {
|
||||
if (!nl80211_put_sta_rate(msg, &sinfo->rxrate,
|
||||
NL80211_STA_INFO_RX_BITRATE))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
if ((sinfo->filled & STATION_INFO_RX_PACKETS) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_RX_PACKETS,
|
||||
sinfo->rx_packets))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_TX_PACKETS) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_TX_PACKETS,
|
||||
sinfo->tx_packets))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_TX_RETRIES) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_TX_RETRIES,
|
||||
sinfo->tx_retries))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_TX_FAILED) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_TX_FAILED,
|
||||
sinfo->tx_failed))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_EXPECTED_THROUGHPUT) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_EXPECTED_THROUGHPUT,
|
||||
sinfo->expected_throughput))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_BEACON_LOSS_COUNT) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_BEACON_LOSS,
|
||||
sinfo->beacon_loss_count))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_LOCAL_PM) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_LOCAL_PM,
|
||||
sinfo->local_pm))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_PEER_PM) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_PEER_PM,
|
||||
sinfo->peer_pm))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_NONPEER_PM) &&
|
||||
nla_put_u32(msg, NL80211_STA_INFO_NONPEER_PM,
|
||||
sinfo->nonpeer_pm))
|
||||
goto nla_put_failure;
|
||||
if (sinfo->filled & STATION_INFO_BSS_PARAM) {
|
||||
|
||||
PUT_SINFO(RX_PACKETS, rx_packets, u32);
|
||||
PUT_SINFO(TX_PACKETS, tx_packets, u32);
|
||||
PUT_SINFO(TX_RETRIES, tx_retries, u32);
|
||||
PUT_SINFO(TX_FAILED, tx_failed, u32);
|
||||
PUT_SINFO(EXPECTED_THROUGHPUT, expected_throughput, u32);
|
||||
PUT_SINFO(BEACON_LOSS, beacon_loss_count, u32);
|
||||
PUT_SINFO(LOCAL_PM, local_pm, u32);
|
||||
PUT_SINFO(PEER_PM, peer_pm, u32);
|
||||
PUT_SINFO(NONPEER_PM, nonpeer_pm, u32);
|
||||
|
||||
if (sinfo->filled & BIT(NL80211_STA_INFO_BSS_PARAM)) {
|
||||
bss_param = nla_nest_start(msg, NL80211_STA_INFO_BSS_PARAM);
|
||||
if (!bss_param)
|
||||
goto nla_put_failure;
|
||||
@@ -3798,18 +3760,19 @@ static int nl80211_send_station(struct sk_buff *msg, u32 cmd, u32 portid,
|
||||
|
||||
nla_nest_end(msg, bss_param);
|
||||
}
|
||||
if ((sinfo->filled & STATION_INFO_STA_FLAGS) &&
|
||||
if ((sinfo->filled & BIT(NL80211_STA_INFO_STA_FLAGS)) &&
|
||||
nla_put(msg, NL80211_STA_INFO_STA_FLAGS,
|
||||
sizeof(struct nl80211_sta_flag_update),
|
||||
&sinfo->sta_flags))
|
||||
goto nla_put_failure;
|
||||
if ((sinfo->filled & STATION_INFO_T_OFFSET) &&
|
||||
nla_put_u64(msg, NL80211_STA_INFO_T_OFFSET,
|
||||
sinfo->t_offset))
|
||||
goto nla_put_failure;
|
||||
|
||||
PUT_SINFO(T_OFFSET, t_offset, u64);
|
||||
PUT_SINFO(RX_DROP_MISC, rx_dropped_misc, u64);
|
||||
|
||||
#undef PUT_SINFO
|
||||
nla_nest_end(msg, sinfoattr);
|
||||
|
||||
if ((sinfo->filled & STATION_INFO_ASSOC_REQ_IES) &&
|
||||
if (sinfo->assoc_req_ies_len &&
|
||||
nla_put(msg, NL80211_ATTR_IE, sinfo->assoc_req_ies_len,
|
||||
sinfo->assoc_req_ies))
|
||||
goto nla_put_failure;
|
||||
|
@@ -1300,7 +1300,7 @@ static int cfg80211_wext_giwrate(struct net_device *dev,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (!(sinfo.filled & STATION_INFO_TX_BITRATE))
|
||||
if (!(sinfo.filled & BIT(NL80211_STA_INFO_TX_BITRATE)))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
rate->value = 100000 * cfg80211_calculate_bitrate(&sinfo.txrate);
|
||||
@@ -1340,7 +1340,7 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)
|
||||
|
||||
switch (rdev->wiphy.signal_type) {
|
||||
case CFG80211_SIGNAL_TYPE_MBM:
|
||||
if (sinfo.filled & STATION_INFO_SIGNAL) {
|
||||
if (sinfo.filled & BIT(NL80211_STA_INFO_SIGNAL)) {
|
||||
int sig = sinfo.signal;
|
||||
wstats.qual.updated |= IW_QUAL_LEVEL_UPDATED;
|
||||
wstats.qual.updated |= IW_QUAL_QUAL_UPDATED;
|
||||
@@ -1354,7 +1354,7 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)
|
||||
break;
|
||||
}
|
||||
case CFG80211_SIGNAL_TYPE_UNSPEC:
|
||||
if (sinfo.filled & STATION_INFO_SIGNAL) {
|
||||
if (sinfo.filled & BIT(NL80211_STA_INFO_SIGNAL)) {
|
||||
wstats.qual.updated |= IW_QUAL_LEVEL_UPDATED;
|
||||
wstats.qual.updated |= IW_QUAL_QUAL_UPDATED;
|
||||
wstats.qual.level = sinfo.signal;
|
||||
@@ -1367,9 +1367,9 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)
|
||||
}
|
||||
|
||||
wstats.qual.updated |= IW_QUAL_NOISE_INVALID;
|
||||
if (sinfo.filled & STATION_INFO_RX_DROP_MISC)
|
||||
if (sinfo.filled & BIT(NL80211_STA_INFO_RX_DROP_MISC))
|
||||
wstats.discard.misc = sinfo.rx_dropped_misc;
|
||||
if (sinfo.filled & STATION_INFO_TX_FAILED)
|
||||
if (sinfo.filled & BIT(NL80211_STA_INFO_TX_FAILED))
|
||||
wstats.discard.retries = sinfo.tx_failed;
|
||||
|
||||
return &wstats;
|
||||
|
Reference in New Issue
Block a user