@@ -1119,7 +1119,7 @@ ieee80211_rx_h_check_dup(struct ieee80211_rx_data *rx)
1119
1119
if (unlikely (ieee80211_has_retry (hdr -> frame_control ) &&
1120
1120
rx -> sta -> last_seq_ctrl [rx -> seqno_idx ] == hdr -> seq_ctrl )) {
1121
1121
I802_DEBUG_INC (rx -> local -> dot11FrameDuplicateCount );
1122
- rx -> sta -> num_duplicates ++ ;
1122
+ rx -> sta -> rx_stats . num_duplicates ++ ;
1123
1123
return RX_DROP_UNUSABLE ;
1124
1124
} else if (!(status -> flag & RX_FLAG_AMSDU_MORE )) {
1125
1125
rx -> sta -> last_seq_ctrl [rx -> seqno_idx ] = hdr -> seq_ctrl ;
@@ -1396,51 +1396,56 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
1396
1396
NL80211_IFTYPE_ADHOC );
1397
1397
if (ether_addr_equal (bssid , rx -> sdata -> u .ibss .bssid ) &&
1398
1398
test_sta_flag (sta , WLAN_STA_AUTHORIZED )) {
1399
- sta -> last_rx = jiffies ;
1399
+ sta -> rx_stats . last_rx = jiffies ;
1400
1400
if (ieee80211_is_data (hdr -> frame_control ) &&
1401
1401
!is_multicast_ether_addr (hdr -> addr1 )) {
1402
- sta -> last_rx_rate_idx = status -> rate_idx ;
1403
- sta -> last_rx_rate_flag = status -> flag ;
1404
- sta -> last_rx_rate_vht_flag = status -> vht_flag ;
1405
- sta -> last_rx_rate_vht_nss = status -> vht_nss ;
1402
+ sta -> rx_stats .last_rate_idx =
1403
+ status -> rate_idx ;
1404
+ sta -> rx_stats .last_rate_flag =
1405
+ status -> flag ;
1406
+ sta -> rx_stats .last_rate_vht_flag =
1407
+ status -> vht_flag ;
1408
+ sta -> rx_stats .last_rate_vht_nss =
1409
+ status -> vht_nss ;
1406
1410
}
1407
1411
}
1408
1412
} else if (rx -> sdata -> vif .type == NL80211_IFTYPE_OCB ) {
1409
- sta -> last_rx = jiffies ;
1413
+ sta -> rx_stats . last_rx = jiffies ;
1410
1414
} else if (!is_multicast_ether_addr (hdr -> addr1 )) {
1411
1415
/*
1412
1416
* Mesh beacons will update last_rx when if they are found to
1413
1417
* match the current local configuration when processed.
1414
1418
*/
1415
- sta -> last_rx = jiffies ;
1419
+ sta -> rx_stats . last_rx = jiffies ;
1416
1420
if (ieee80211_is_data (hdr -> frame_control )) {
1417
- sta -> last_rx_rate_idx = status -> rate_idx ;
1418
- sta -> last_rx_rate_flag = status -> flag ;
1419
- sta -> last_rx_rate_vht_flag = status -> vht_flag ;
1420
- sta -> last_rx_rate_vht_nss = status -> vht_nss ;
1421
+ sta -> rx_stats . last_rate_idx = status -> rate_idx ;
1422
+ sta -> rx_stats . last_rate_flag = status -> flag ;
1423
+ sta -> rx_stats . last_rate_vht_flag = status -> vht_flag ;
1424
+ sta -> rx_stats . last_rate_vht_nss = status -> vht_nss ;
1421
1425
}
1422
1426
}
1423
1427
1424
1428
if (rx -> sdata -> vif .type == NL80211_IFTYPE_STATION )
1425
1429
ieee80211_sta_rx_notify (rx -> sdata , hdr );
1426
1430
1427
- sta -> rx_fragments ++ ;
1428
- sta -> rx_bytes += rx -> skb -> len ;
1431
+ sta -> rx_stats . fragments ++ ;
1432
+ sta -> rx_stats . bytes += rx -> skb -> len ;
1429
1433
if (!(status -> flag & RX_FLAG_NO_SIGNAL_VAL )) {
1430
- sta -> last_signal = status -> signal ;
1431
- ewma_signal_add (& sta -> avg_signal , - status -> signal );
1434
+ sta -> rx_stats . last_signal = status -> signal ;
1435
+ ewma_signal_add (& sta -> rx_stats . avg_signal , - status -> signal );
1432
1436
}
1433
1437
1434
1438
if (status -> chains ) {
1435
- sta -> chains = status -> chains ;
1439
+ sta -> rx_stats . chains = status -> chains ;
1436
1440
for (i = 0 ; i < ARRAY_SIZE (status -> chain_signal ); i ++ ) {
1437
1441
int signal = status -> chain_signal [i ];
1438
1442
1439
1443
if (!(status -> chains & BIT (i )))
1440
1444
continue ;
1441
1445
1442
- sta -> chain_signal_last [i ] = signal ;
1443
- ewma_signal_add (& sta -> chain_signal_avg [i ], - signal );
1446
+ sta -> rx_stats .chain_signal_last [i ] = signal ;
1447
+ ewma_signal_add (& sta -> rx_stats .chain_signal_avg [i ],
1448
+ - signal );
1444
1449
}
1445
1450
}
1446
1451
@@ -1500,7 +1505,7 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
1500
1505
* Update counter and free packet here to avoid
1501
1506
* counting this as a dropped packed.
1502
1507
*/
1503
- sta -> rx_packets ++ ;
1508
+ sta -> rx_stats . packets ++ ;
1504
1509
dev_kfree_skb (rx -> skb );
1505
1510
return RX_QUEUED ;
1506
1511
}
@@ -1922,7 +1927,7 @@ ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
1922
1927
ieee80211_led_rx (rx -> local );
1923
1928
out_no_led :
1924
1929
if (rx -> sta )
1925
- rx -> sta -> rx_packets ++ ;
1930
+ rx -> sta -> rx_stats . packets ++ ;
1926
1931
return RX_CONTINUE ;
1927
1932
}
1928
1933
@@ -2376,7 +2381,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
2376
2381
* for non-QoS-data frames. Here we know it's a data
2377
2382
* frame, so count MSDUs.
2378
2383
*/
2379
- rx -> sta -> rx_msdu [rx -> seqno_idx ]++ ;
2384
+ rx -> sta -> rx_stats . msdu [rx -> seqno_idx ]++ ;
2380
2385
}
2381
2386
2382
2387
/*
@@ -2413,7 +2418,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
2413
2418
skb_queue_tail (& local -> skb_queue_tdls_chsw , rx -> skb );
2414
2419
schedule_work (& local -> tdls_chsw_work );
2415
2420
if (rx -> sta )
2416
- rx -> sta -> rx_packets ++ ;
2421
+ rx -> sta -> rx_stats . packets ++ ;
2417
2422
2418
2423
return RX_QUEUED ;
2419
2424
}
@@ -2875,7 +2880,7 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
2875
2880
2876
2881
handled :
2877
2882
if (rx -> sta )
2878
- rx -> sta -> rx_packets ++ ;
2883
+ rx -> sta -> rx_stats . packets ++ ;
2879
2884
dev_kfree_skb (rx -> skb );
2880
2885
return RX_QUEUED ;
2881
2886
@@ -2884,7 +2889,7 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
2884
2889
skb_queue_tail (& sdata -> skb_queue , rx -> skb );
2885
2890
ieee80211_queue_work (& local -> hw , & sdata -> work );
2886
2891
if (rx -> sta )
2887
- rx -> sta -> rx_packets ++ ;
2892
+ rx -> sta -> rx_stats . packets ++ ;
2888
2893
return RX_QUEUED ;
2889
2894
}
2890
2895
@@ -2911,7 +2916,7 @@ ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx)
2911
2916
if (cfg80211_rx_mgmt (& rx -> sdata -> wdev , status -> freq , sig ,
2912
2917
rx -> skb -> data , rx -> skb -> len , 0 )) {
2913
2918
if (rx -> sta )
2914
- rx -> sta -> rx_packets ++ ;
2919
+ rx -> sta -> rx_stats . packets ++ ;
2915
2920
dev_kfree_skb (rx -> skb );
2916
2921
return RX_QUEUED ;
2917
2922
}
@@ -3030,7 +3035,7 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx)
3030
3035
skb_queue_tail (& sdata -> skb_queue , rx -> skb );
3031
3036
ieee80211_queue_work (& rx -> local -> hw , & sdata -> work );
3032
3037
if (rx -> sta )
3033
- rx -> sta -> rx_packets ++ ;
3038
+ rx -> sta -> rx_stats . packets ++ ;
3034
3039
3035
3040
return RX_QUEUED ;
3036
3041
}
@@ -3112,7 +3117,7 @@ static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx,
3112
3117
case RX_DROP_MONITOR :
3113
3118
I802_DEBUG_INC (rx -> sdata -> local -> rx_handlers_drop );
3114
3119
if (rx -> sta )
3115
- rx -> sta -> rx_dropped ++ ;
3120
+ rx -> sta -> rx_stats . dropped ++ ;
3116
3121
/* fall through */
3117
3122
case RX_CONTINUE : {
3118
3123
struct ieee80211_rate * rate = NULL ;
@@ -3132,7 +3137,7 @@ static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx,
3132
3137
case RX_DROP_UNUSABLE :
3133
3138
I802_DEBUG_INC (rx -> sdata -> local -> rx_handlers_drop );
3134
3139
if (rx -> sta )
3135
- rx -> sta -> rx_dropped ++ ;
3140
+ rx -> sta -> rx_stats . dropped ++ ;
3136
3141
dev_kfree_skb (rx -> skb );
3137
3142
break ;
3138
3143
case RX_QUEUED :
0 commit comments