Skip to content

Commit

Permalink
When an assoc_resp is received the network structure is not completely
Browse files Browse the repository at this point in the history
initialized which can cause problems for drivers that expect the network
structure to be completely filled in.

This patch will make sure the network is filled in as much as possible.

Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: James Ketrenos <jketreno@linux.intel.com>
  • Loading branch information
Ivo van Doorn authored and James Ketrenos committed Oct 3, 2005
1 parent ff9e00f commit c1bda44
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions net/ieee80211/ieee80211_rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1106,10 +1106,41 @@ static int ieee80211_handle_assoc_resp(struct ieee80211_device *ieee, struct iee
//network->atim_window = le16_to_cpu(frame->aid) & (0x3FFF);
network->atim_window = le16_to_cpu(frame->aid);
network->listen_interval = le16_to_cpu(frame->status);
memcpy(network->bssid, frame->header.addr3, ETH_ALEN);
network->capability = le16_to_cpu(frame->capability);
network->last_scanned = jiffies;
network->rates_len = network->rates_ex_len = 0;
network->last_associate = 0;
network->ssid_len = 0;
network->erp_value = (network->capability & WLAN_CAPABILITY_IBSS) ? 0x3 : 0x0;

if (stats->freq == IEEE80211_52GHZ_BAND) {
/* for A band (No DS info) */
network->channel = stats->received_channel;
} else
network->flags |= NETWORK_HAS_CCK;

network->wpa_ie_len = 0;
network->rsn_ie_len = 0;

if(ieee80211_parse_info_param(frame->info_element, stats->len - sizeof(*frame), network))
return 1;

network->mode = 0;
if (stats->freq == IEEE80211_52GHZ_BAND)
network->mode = IEEE_A;
else {
if (network->flags & NETWORK_HAS_OFDM)
network->mode |= IEEE_G;
if (network->flags & NETWORK_HAS_CCK)
network->mode |= IEEE_B;
}

if (ieee80211_is_empty_essid(network->ssid, network->ssid_len))
network->flags |= NETWORK_EMPTY_ESSID;

memcpy(&network->stats, stats, sizeof(network->stats));

if (ieee->handle_assoc_response != NULL)
ieee->handle_assoc_response(dev, frame, network);

Expand All @@ -1126,6 +1157,7 @@ static inline int ieee80211_network_init(struct ieee80211_device *ieee, struct i
network->qos_data.active = 0;
network->qos_data.supported = 0;
network->qos_data.param_count = 0;
network->qos_data.old_param_count = 0;

/* Pull out fixed field data */
memcpy(network->bssid, beacon->header.addr3, ETH_ALEN);
Expand Down

0 comments on commit c1bda44

Please sign in to comment.