# HG changeset patch # User Joseph Jezak # Node ID bcd1477699bad89267d0a1cb45456d2dddaf8262 # Parent 97dd902a5a17ef754e3193288a99f4906113269e Added better rates support. diff -r 97dd902a5a17 -r bcd1477699ba ieee80211softmac_io.c --- a/ieee80211softmac_io.c Wed Nov 30 13:56:08 2005 +++ b/ieee80211softmac_io.c Wed Nov 30 14:03:15 2005 @@ -51,17 +51,19 @@ /* * Adds a Supported Rates Information Element to the frame - * This is wrong, as is the EX Rates (need to seperate them somehow) */ static u8 * -ieee80211softmac_add_rates(u8 *dst, const u8 *rates, u32 rates_count) -{ +ieee80211softmac_add_rates(u8 *dst, const struct ieee80211softmac_ratesinfo *r) +{ + int count; *dst++ = MFIE_TYPE_RATES; - if(rates_count > MAX_RATES_LENGTH) - rates_count = MAX_RATES_LENGTH; - *dst++ = rates_count; - memcpy(dst, rates, rates_count); - return dst + rates_count; + if(r->count > MAX_RATES_LENGTH) + count = MAX_RATES_LENGTH; + else + count = r->count; + *dst++ = count; + memcpy(dst, r->rates, count); + return dst + count; } /* @@ -69,14 +71,17 @@ * */ static u8 * -ieee80211softmac_add_ex_rates(u8 *dst, const u8 *rates, u32 rates_count) -{ +ieee80211softmac_add_ex_rates(u8 *dst, const struct ieee80211softmac_ratesinfo *r) +{ + int count; *dst++ = MFIE_TYPE_RATES_EX; - if(rates_count > MAX_RATES_EX_LENGTH) - rates_count = MAX_RATES_EX_LENGTH; - *dst++ = rates_count; - memcpy(dst, rates, rates_count); - return dst + rates_count; + if(r->count - MAX_RATES_LENGTH > MAX_RATES_EX_LENGTH) + count = MAX_RATES_EX_LENGTH; + else + count = r->count; + *dst++ = count; + memcpy(dst, r->rates + MAX_RATES_LENGTH, count); + return dst + count; } /* Allocate a management frame */ @@ -209,9 +214,7 @@ /* Add SSID */ data = ieee80211softmac_add_ssid(data, net->ssid, net->ssid_len); /* Add Rates */ - data = ieee80211softmac_add_rates(data, net->rates, net->rates_len); - /* Add extended rates */ - + data = ieee80211softmac_add_rates(data, &mac->ratesinfo); /* adjust pkt_size to the number of used bytes */ pkt_size = data - pkt; break; @@ -251,9 +254,7 @@ /* Add SSID */ data = ieee80211softmac_add_ssid(data, net->ssid, net->ssid_len); /* Add Rates */ - data = ieee80211softmac_add_rates(data, net->rates, net->rates_len); - /* Add extended rates */ - + data = ieee80211softmac_add_rates(data, &mac->ratesinfo); /* adjust pkt_size to the number of used bytes */ pkt_size = data - pkt; break; @@ -325,10 +326,6 @@ pkt_size = pkt_size + IEEE80211_3ADDR_LEN; break; case IEEE80211_STYPE_PROBE_REQ: - /* - * FIXME: Probe request implies that we don't have a network - * setup yet? - */ pkt_size = ( /* SSID of requested network */ 2 + 2 + IW_ESSID_MAX_SIZE + @@ -346,12 +343,12 @@ data = (u8 *)p.probe_req->info_element; /* Add SSID */ - data = ieee80211softmac_add_ssid(data, net->ssid, net->ssid_len); + if(net == NULL) + data = ieee80211softmac_add_ssid(data, NULL, 0); + else + data = ieee80211softmac_add_ssid(data, net->ssid, net->ssid_len); /* Add Rates */ - data = ieee80211softmac_add_rates(data, net->rates, net->rates_len); - /* Add Extended Rates */ - data = ieee80211softmac_add_ex_rates(data, net->rates, net->rates_len); - + data = ieee80211softmac_add_rates(data, &mac->ratesinfo); /* adjust pkt_size to the number of used bytes */ pkt_size = data - pkt; break; diff -r 97dd902a5a17 -r bcd1477699ba ieee80211softmac_priv.h --- a/ieee80211softmac_priv.h Wed Nov 30 13:56:08 2005 +++ b/ieee80211softmac_priv.h Wed Nov 30 14:03:15 2005 @@ -101,8 +101,6 @@ ) || ieee80211softmac_scan_handlers_check_self(sm); } -#define IEEE80211SOFTMAC_AUTH_REQ_TIMEOUT - #define IEEE80211SOFTMAC_PROBE_DELAY 5 #define IEEE80211SOFTMAC_WORKQUEUE_NAME_LEN (17 + IFNAMSIZ) diff -r 97dd902a5a17 -r bcd1477699ba net/ieee80211softmac.h --- a/net/ieee80211softmac.h Wed Nov 30 13:56:08 2005 +++ b/net/ieee80211softmac.h Wed Nov 30 14:03:15 2005 @@ -11,6 +11,11 @@ * this should be incremented on API incompatible changes. */ #define IEEE80211SOFTMAC_API 0 + +struct ieee80211softmac_ratesinfo { + u8 count; + u8 rates[MAX_RATES_LENGTH + MAX_RATES_EX_LENGTH]; +}; /* This structure is internal to our * scanning implementation. @@ -144,6 +149,8 @@ struct list_head auth_queue; struct list_head events; + + struct ieee80211softmac_ratesinfo ratesinfo; /* we need to keep a list of network structs we copied */ struct list_head network_list;