Place signal quality and per antenna rssi into radiotap header

This commit is contained in:
kimocoder 2018-08-04 20:55:45 +02:00
parent f475f2ff74
commit 2ae015fb87

View File

@ -3669,11 +3669,32 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe,
u8 hdr_buf[64] = {0}; u8 hdr_buf[64] = {0};
u16 rt_len = 8; u16 rt_len = 8;
u32 tmp_32bit;
int i;
/* create header */ /* create header */
rtap_hdr = (struct ieee80211_radiotap_header *)&hdr_buf[0]; rtap_hdr = (struct ieee80211_radiotap_header *)&hdr_buf[0];
rtap_hdr->it_version = PKTHDR_RADIOTAP_VERSION; rtap_hdr->it_version = PKTHDR_RADIOTAP_VERSION;
if(pHalData->NumTotalRFPath>0) {
rtap_hdr->it_present |= (1<<IEEE80211_RADIOTAP_EXT) |
(1<<IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE);
if(pHalData->NumTotalRFPath>1) {
tmp_32bit = (1<<IEEE80211_RADIOTAP_ANTENNA) |
(1<<IEEE80211_RADIOTAP_DBM_ANTSIGNAL) |
(1<<IEEE80211_RADIOTAP_EXT) |
(1<<IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE);
for(i=0; i<pHalData->NumTotalRFPath-1; i++) {
memcpy(&hdr_buf[rt_len], &tmp_32bit, 4);
rt_len += 4;
}
}
tmp_32bit = (1<<IEEE80211_RADIOTAP_ANTENNA) |
(1<<IEEE80211_RADIOTAP_DBM_ANTSIGNAL);
memcpy(&hdr_buf[rt_len], &tmp_32bit, 4);
rt_len += 4;
}
/* tsft */ /* tsft */
if (pattrib->tsfl) { if (pattrib->tsfl) {
u64 tmp_64bit; u64 tmp_64bit;
@ -3765,18 +3786,21 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe,
rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE); rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE);
hdr_buf[rt_len] = 0; hdr_buf[rt_len] = 0;
rt_len += 1; rt_len += 1;
#endif
rt_len++; // alignment
/* Signal Quality */ /* Signal Quality */
rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_LOCK_QUALITY); rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_LOCK_QUALITY);
hdr_buf[rt_len] = pattrib->phy_info.signal_quality; tmp_16bit = cpu_to_le16(pattrib->phy_info.signal_quality);
rt_len += 1; memcpy(&hdr_buf[rt_len], &tmp_16bit, 2);
#endif rt_len += 2;
#if 0
/* Antenna */ /* Antenna */
rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_ANTENNA); rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_ANTENNA);
hdr_buf[rt_len] = 0; /* pHalData->rf_type; */ hdr_buf[rt_len] = pHalData->rf_type;
rt_len += 1; rt_len += 1;
rt_len++; // alignment
#endif
/* RX flags */ /* RX flags */
rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_RX_FLAGS); rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_RX_FLAGS);
#if 0 #if 0
@ -3882,6 +3906,13 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe,
rt_len += 2; rt_len += 2;
} }
for(i=0; i<pHalData->NumTotalRFPath; i++) {
hdr_buf[rt_len] = pattrib->phy_info.rx_pwr[i];
rt_len ++;
hdr_buf[rt_len] = i;
rt_len ++;
}
/* push to skb */ /* push to skb */
pskb = (_pkt *)buf; pskb = (_pkt *)buf;
if (skb_headroom(pskb) < rt_len) { if (skb_headroom(pskb) < rt_len) {