|
@@ -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;
|