Merge branch 'upstream-fixes'
This commit is contained in:
commit
0cc349d130
4 changed files with 31 additions and 11 deletions
|
@ -261,13 +261,13 @@ orinoco_cs_config(dev_link_t *link)
|
||||||
/* Note that the CIS values need to be rescaled */
|
/* Note that the CIS values need to be rescaled */
|
||||||
if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) {
|
if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) {
|
||||||
if (conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM] / 10000) {
|
if (conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM] / 10000) {
|
||||||
DEBUG(2, "orinoco_cs_config: Vcc mismatch (conf.Vcc = %d, CIS = %d)\n", conf.Vcc, cfg->vcc.param[CISTPL_POWER_VNOM] / 10000);
|
DEBUG(2, "orinoco_cs_config: Vcc mismatch (conf.Vcc = %d, cfg CIS = %d)\n", conf.Vcc, cfg->vcc.param[CISTPL_POWER_VNOM] / 10000);
|
||||||
if (!ignore_cis_vcc)
|
if (!ignore_cis_vcc)
|
||||||
goto next_entry;
|
goto next_entry;
|
||||||
}
|
}
|
||||||
} else if (dflt.vcc.present & (1 << CISTPL_POWER_VNOM)) {
|
} else if (dflt.vcc.present & (1 << CISTPL_POWER_VNOM)) {
|
||||||
if (conf.Vcc != dflt.vcc.param[CISTPL_POWER_VNOM] / 10000) {
|
if (conf.Vcc != dflt.vcc.param[CISTPL_POWER_VNOM] / 10000) {
|
||||||
DEBUG(2, "orinoco_cs_config: Vcc mismatch (conf.Vcc = %d, CIS = %d)\n", conf.Vcc, dflt.vcc.param[CISTPL_POWER_VNOM] / 10000);
|
DEBUG(2, "orinoco_cs_config: Vcc mismatch (conf.Vcc = %d, dflt CIS = %d)\n", conf.Vcc, dflt.vcc.param[CISTPL_POWER_VNOM] / 10000);
|
||||||
if(!ignore_cis_vcc)
|
if(!ignore_cis_vcc)
|
||||||
goto next_entry;
|
goto next_entry;
|
||||||
}
|
}
|
||||||
|
|
|
@ -803,9 +803,9 @@ enum ieee80211_state {
|
||||||
#define IEEE80211_24GHZ_MAX_CHANNEL 14
|
#define IEEE80211_24GHZ_MAX_CHANNEL 14
|
||||||
#define IEEE80211_24GHZ_CHANNELS 14
|
#define IEEE80211_24GHZ_CHANNELS 14
|
||||||
|
|
||||||
#define IEEE80211_52GHZ_MIN_CHANNEL 36
|
#define IEEE80211_52GHZ_MIN_CHANNEL 34
|
||||||
#define IEEE80211_52GHZ_MAX_CHANNEL 165
|
#define IEEE80211_52GHZ_MAX_CHANNEL 165
|
||||||
#define IEEE80211_52GHZ_CHANNELS 32
|
#define IEEE80211_52GHZ_CHANNELS 131
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
IEEE80211_CH_PASSIVE_ONLY = (1 << 0),
|
IEEE80211_CH_PASSIVE_ONLY = (1 << 0),
|
||||||
|
|
|
@ -350,6 +350,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
||||||
u8 src[ETH_ALEN];
|
u8 src[ETH_ALEN];
|
||||||
struct ieee80211_crypt_data *crypt = NULL;
|
struct ieee80211_crypt_data *crypt = NULL;
|
||||||
int keyidx = 0;
|
int keyidx = 0;
|
||||||
|
int can_be_decrypted = 0;
|
||||||
|
|
||||||
hdr = (struct ieee80211_hdr_4addr *)skb->data;
|
hdr = (struct ieee80211_hdr_4addr *)skb->data;
|
||||||
stats = &ieee->stats;
|
stats = &ieee->stats;
|
||||||
|
@ -410,12 +411,23 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_multicast_ether_addr(hdr->addr1)
|
can_be_decrypted = (is_multicast_ether_addr(hdr->addr1) ||
|
||||||
? ieee->host_mc_decrypt : ieee->host_decrypt) {
|
is_broadcast_ether_addr(hdr->addr2)) ?
|
||||||
|
ieee->host_mc_decrypt : ieee->host_decrypt;
|
||||||
|
|
||||||
|
if (can_be_decrypted) {
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
if (skb->len >= hdrlen + 3)
|
if (skb->len >= hdrlen + 3) {
|
||||||
|
/* Top two-bits of byte 3 are the key index */
|
||||||
idx = skb->data[hdrlen + 3] >> 6;
|
idx = skb->data[hdrlen + 3] >> 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ieee->crypt[] is WEP_KEY (4) in length. Given that idx
|
||||||
|
* is only allowed 2-bits of storage, no value of idx can
|
||||||
|
* be provided via above code that would result in idx
|
||||||
|
* being out of range */
|
||||||
crypt = ieee->crypt[idx];
|
crypt = ieee->crypt[idx];
|
||||||
|
|
||||||
#ifdef NOT_YET
|
#ifdef NOT_YET
|
||||||
sta = NULL;
|
sta = NULL;
|
||||||
|
|
||||||
|
@ -553,7 +565,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
||||||
|
|
||||||
/* skb: hdr + (possibly fragmented, possibly encrypted) payload */
|
/* skb: hdr + (possibly fragmented, possibly encrypted) payload */
|
||||||
|
|
||||||
if (ieee->host_decrypt && (fc & IEEE80211_FCTL_PROTECTED) &&
|
if ((fc & IEEE80211_FCTL_PROTECTED) && can_be_decrypted &&
|
||||||
(keyidx = ieee80211_rx_frame_decrypt(ieee, skb, crypt)) < 0)
|
(keyidx = ieee80211_rx_frame_decrypt(ieee, skb, crypt)) < 0)
|
||||||
goto rx_dropped;
|
goto rx_dropped;
|
||||||
|
|
||||||
|
@ -617,7 +629,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
||||||
|
|
||||||
/* skb: hdr + (possible reassembled) full MSDU payload; possibly still
|
/* skb: hdr + (possible reassembled) full MSDU payload; possibly still
|
||||||
* encrypted/authenticated */
|
* encrypted/authenticated */
|
||||||
if (ieee->host_decrypt && (fc & IEEE80211_FCTL_PROTECTED) &&
|
if ((fc & IEEE80211_FCTL_PROTECTED) && can_be_decrypted &&
|
||||||
ieee80211_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt))
|
ieee80211_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt))
|
||||||
goto rx_dropped;
|
goto rx_dropped;
|
||||||
|
|
||||||
|
|
|
@ -232,15 +232,18 @@ static char *ipw2100_translate_scan(struct ieee80211_device *ieee,
|
||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define SCAN_ITEM_SIZE 128
|
||||||
|
|
||||||
int ieee80211_wx_get_scan(struct ieee80211_device *ieee,
|
int ieee80211_wx_get_scan(struct ieee80211_device *ieee,
|
||||||
struct iw_request_info *info,
|
struct iw_request_info *info,
|
||||||
union iwreq_data *wrqu, char *extra)
|
union iwreq_data *wrqu, char *extra)
|
||||||
{
|
{
|
||||||
struct ieee80211_network *network;
|
struct ieee80211_network *network;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
char *ev = extra;
|
char *ev = extra;
|
||||||
char *stop = ev + IW_SCAN_MAX_DATA;
|
char *stop = ev + wrqu->data.length;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
IEEE80211_DEBUG_WX("Getting scan\n");
|
IEEE80211_DEBUG_WX("Getting scan\n");
|
||||||
|
@ -249,6 +252,11 @@ int ieee80211_wx_get_scan(struct ieee80211_device *ieee,
|
||||||
|
|
||||||
list_for_each_entry(network, &ieee->network_list, list) {
|
list_for_each_entry(network, &ieee->network_list, list) {
|
||||||
i++;
|
i++;
|
||||||
|
if (stop - ev < SCAN_ITEM_SIZE) {
|
||||||
|
err = -E2BIG;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (ieee->scan_age == 0 ||
|
if (ieee->scan_age == 0 ||
|
||||||
time_after(network->last_scanned + ieee->scan_age, jiffies))
|
time_after(network->last_scanned + ieee->scan_age, jiffies))
|
||||||
ev = ipw2100_translate_scan(ieee, ev, stop, network);
|
ev = ipw2100_translate_scan(ieee, ev, stop, network);
|
||||||
|
@ -270,7 +278,7 @@ int ieee80211_wx_get_scan(struct ieee80211_device *ieee,
|
||||||
|
|
||||||
IEEE80211_DEBUG_WX("exit: %d networks returned.\n", i);
|
IEEE80211_DEBUG_WX("exit: %d networks returned.\n", i);
|
||||||
|
|
||||||
return 0;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
|
int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
|
||||||
|
|
Loading…
Add table
Reference in a new issue