staging: rtl8723au: collect_bss_info23a(): Use struct ieee80211_mgmt

Somplify code by using struct ieee80211_mgmt to calculate offsets

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Jes Sorensen 2014-04-15 19:44:49 +02:00 committed by Greg Kroah-Hartman
parent 7ca9ed219b
commit d944b7218b

View file

@ -4471,15 +4471,14 @@ u8 collect_bss_info23a(struct rtw_adapter *padapter,
{ {
int i, length; int i, length;
const u8 *p; const u8 *p;
u16 val16;
struct sk_buff *skb = precv_frame->pkt; struct sk_buff *skb = precv_frame->pkt;
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
u8 *pframe = skb->data;
int packet_len = skb->len; int packet_len = skb->len;
u8 ie_offset; u8 ie_offset;
struct registry_priv *pregistrypriv = &padapter->registrypriv; struct registry_priv *pregistrypriv = &padapter->registrypriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
u16 capab_info;
length = packet_len - sizeof(struct ieee80211_hdr_3addr); length = packet_len - sizeof(struct ieee80211_hdr_3addr);
@ -4490,29 +4489,32 @@ u8 collect_bss_info23a(struct rtw_adapter *padapter,
memset(bssid, 0, sizeof(struct wlan_bssid_ex)); memset(bssid, 0, sizeof(struct wlan_bssid_ex));
if (ieee80211_is_beacon(hdr->frame_control)) { if (ieee80211_is_beacon(mgmt->frame_control)) {
bssid->reserved = 1; bssid->reserved = 1;
ie_offset = _BEACON_IE_OFFSET_; ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable);
capab_info = mgmt->u.beacon.capab_info;
} else if (ieee80211_is_probe_req(mgmt->frame_control)) {
ie_offset = offsetof(struct ieee80211_mgmt,
u.probe_req.variable);
bssid->reserved = 2;
capab_info = 0;
} else if (ieee80211_is_probe_resp(mgmt->frame_control)) {
ie_offset = offsetof(struct ieee80211_mgmt,
u.probe_resp.variable);
bssid->reserved = 3;
capab_info = mgmt->u.probe_resp.capab_info;
} else { } else {
/* FIXME : more type */ bssid->reserved = 0;
if (ieee80211_is_probe_req(hdr->frame_control)) { ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable);
ie_offset = _PROBEREQ_IE_OFFSET_; capab_info = mgmt->u.beacon.capab_info;
bssid->reserved = 2;
} else if (ieee80211_is_probe_resp(hdr->frame_control)) {
ie_offset = _PROBERSP_IE_OFFSET_;
bssid->reserved = 3;
} else {
bssid->reserved = 0;
ie_offset = _FIXED_IE_LENGTH_;
}
} }
ie_offset -= offsetof(struct ieee80211_mgmt, u);
bssid->Length = sizeof(struct wlan_bssid_ex) - MAX_IE_SZ + length; bssid->Length = sizeof(struct wlan_bssid_ex) - MAX_IE_SZ + length;
/* below is to copy the information element */ /* below is to copy the information element */
bssid->IELength = length; bssid->IELength = length;
memcpy(bssid->IEs, pframe + sizeof(struct ieee80211_hdr_3addr), memcpy(bssid->IEs, &mgmt->u, bssid->IELength);
bssid->IELength);
/* get the signal strength */ /* get the signal strength */
/* in dBM.raw data */ /* in dBM.raw data */
@ -4596,10 +4598,10 @@ u8 collect_bss_info23a(struct rtw_adapter *padapter,
} }
} }
if (ieee80211_is_probe_req(hdr->frame_control)) { if (ieee80211_is_probe_req(mgmt->frame_control)) {
/* FIXME */ /* FIXME */
bssid->InfrastructureMode = Ndis802_11Infrastructure; bssid->InfrastructureMode = Ndis802_11Infrastructure;
ether_addr_copy(bssid->MacAddress, hdr->addr2); ether_addr_copy(bssid->MacAddress, mgmt->sa);
bssid->Privacy = 1; bssid->Privacy = 1;
return _SUCCESS; return _SUCCESS;
} }
@ -4609,17 +4611,15 @@ u8 collect_bss_info23a(struct rtw_adapter *padapter,
bssid->Configuration.BeaconPeriod = bssid->Configuration.BeaconPeriod =
le32_to_cpu(bssid->Configuration.BeaconPeriod); le32_to_cpu(bssid->Configuration.BeaconPeriod);
val16 = rtw_get_capability23a(bssid); if (capab_info & BIT(0)) {
if (val16 & BIT(0)) {
bssid->InfrastructureMode = Ndis802_11Infrastructure; bssid->InfrastructureMode = Ndis802_11Infrastructure;
ether_addr_copy(bssid->MacAddress, hdr->addr2); ether_addr_copy(bssid->MacAddress, mgmt->sa);
} else { } else {
bssid->InfrastructureMode = Ndis802_11IBSS; bssid->InfrastructureMode = Ndis802_11IBSS;
ether_addr_copy(bssid->MacAddress, hdr->addr3); ether_addr_copy(bssid->MacAddress, mgmt->bssid);
} }
if (val16 & BIT(4)) if (capab_info & BIT(4))
bssid->Privacy = 1; bssid->Privacy = 1;
else else
bssid->Privacy = 0; bssid->Privacy = 0;