staging: rtl8192e: Comment cleanup (style/format)
- Multiline comments use "network subsystem comment style" - Merge short multiline comments - Remove empty comments - Remove function name comment at the end of small (<1 screen) functions - Reformat 802.11 data frame format to use spaces and network format Signed-off-by: Mateusz Kulikowski <mateusz.kulikowski@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
e725fb6f81
Коммит
14b40d9288
|
@ -165,7 +165,7 @@ static void cmdpkt_beacontimerinterrupt_819xusb(struct net_device *dev)
|
|||
|
||||
static void cmpk_handle_interrupt_status(struct net_device *dev, u8 *pmsg)
|
||||
{
|
||||
struct cmpk_intr_sta rx_intr_status; /* */
|
||||
struct cmpk_intr_sta rx_intr_status;
|
||||
struct r8192_priv *priv = rtllib_priv(dev);
|
||||
|
||||
DMESG("---> cmpk_Handle_Interrupt_Status()\n");
|
||||
|
|
|
@ -33,28 +33,28 @@
|
|||
struct cmpk_txfb {
|
||||
u8 element_id;
|
||||
u8 length;
|
||||
u8 TID:4; /* */
|
||||
u8 fail_reason:3; /* */
|
||||
u8 TID:4;
|
||||
u8 fail_reason:3;
|
||||
u8 tok:1;
|
||||
u8 reserve1:4; /* */
|
||||
u8 pkt_type:2; /* */
|
||||
u8 bandwidth:1; /* */
|
||||
u8 qos_pkt:1; /* */
|
||||
u8 reserve1:4;
|
||||
u8 pkt_type:2;
|
||||
u8 bandwidth:1;
|
||||
u8 qos_pkt:1;
|
||||
|
||||
u8 reserve2; /* */
|
||||
u8 retry_cnt; /* */
|
||||
u16 pkt_id; /* */
|
||||
u8 reserve2;
|
||||
u8 retry_cnt;
|
||||
u16 pkt_id;
|
||||
|
||||
u16 seq_num; /* */
|
||||
u16 seq_num;
|
||||
u8 s_rate;
|
||||
u8 f_rate;
|
||||
|
||||
u8 s_rts_rate; /* */
|
||||
u8 f_rts_rate; /* */
|
||||
u16 pkt_length; /* */
|
||||
u8 s_rts_rate;
|
||||
u8 f_rts_rate;
|
||||
u16 pkt_length;
|
||||
|
||||
u16 reserve3; /* */
|
||||
u16 duration; /* */
|
||||
u16 reserve3;
|
||||
u16 duration;
|
||||
};
|
||||
|
||||
struct cmpk_intr_sta {
|
||||
|
|
|
@ -304,7 +304,7 @@ static u32 phy_FwRFSerialRead(struct net_device *dev,
|
|||
}
|
||||
return read_nic_dword(dev, RF_DATA);
|
||||
|
||||
} /* phy_FwRFSerialRead */
|
||||
}
|
||||
|
||||
static void phy_FwRFSerialWrite(struct net_device *dev,
|
||||
enum rf90_radio_path eRFPath,
|
||||
|
@ -325,7 +325,7 @@ static void phy_FwRFSerialWrite(struct net_device *dev,
|
|||
}
|
||||
write_nic_dword(dev, QPNR, Data);
|
||||
|
||||
} /* phy_FwRFSerialWrite */
|
||||
}
|
||||
|
||||
|
||||
void rtl8192_phy_configmac(struct net_device *dev)
|
||||
|
|
|
@ -2332,7 +2332,8 @@ static void rtl8192_rx_normal(struct net_device *dev)
|
|||
goto done;
|
||||
new_skb = dev_alloc_skb(priv->rxbuffersize);
|
||||
/* if allocation of new skb failed - drop current packet
|
||||
* and reuse skb */
|
||||
* and reuse skb
|
||||
*/
|
||||
if (unlikely(!new_skb))
|
||||
goto done;
|
||||
|
||||
|
|
|
@ -1221,11 +1221,10 @@ static iw_handler r8192_wx_handlers[] = {
|
|||
IW_IOCTL(SIOCSIWENCODEEXT) = r8192_wx_set_enc_ext,
|
||||
};
|
||||
|
||||
/*
|
||||
* the following rule need to be following,
|
||||
/* the following rule need to be following,
|
||||
* Odd : get (world access),
|
||||
* even : set (root access)
|
||||
* */
|
||||
*/
|
||||
static const struct iw_priv_args r8192_private_args[] = {
|
||||
{
|
||||
SIOCIWFIRSTPRIV + 0x0,
|
||||
|
|
|
@ -719,7 +719,8 @@ void HTResetSelfAndSavePeerSetting(struct rtllib_device *ieee,
|
|||
|
||||
RTLLIB_DEBUG(RTLLIB_DL_HT, "==============>%s()\n", __func__);
|
||||
/* unmark bEnableHT flag here is the same reason why unmarked in
|
||||
* function rtllib_softmac_new_net. WB 2008.09.10*/
|
||||
* function rtllib_softmac_new_net. WB 2008.09.10
|
||||
*/
|
||||
if (pNetwork->bssht.bdSupportHT) {
|
||||
pHTInfo->bCurrentHTSupport = true;
|
||||
pHTInfo->ePeerHTSpecVer = pNetwork->bssht.bdHTSpecVer;
|
||||
|
|
|
@ -509,12 +509,13 @@ struct ieee_param {
|
|||
|
||||
#define RTLLIB_DATA_LEN 2304
|
||||
/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section
|
||||
6.2.1.1.2.
|
||||
|
||||
The figure in section 7.1.2 suggests a body size of up to 2312
|
||||
bytes is allowed, which is a bit confusing, I suspect this
|
||||
represents the 2304 bytes of real data, plus a possible 8 bytes of
|
||||
WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */
|
||||
* 6.2.1.1.2.
|
||||
*
|
||||
* The figure in section 7.1.2 suggests a body size of up to 2312
|
||||
* bytes is allowed, which is a bit confusing, I suspect this
|
||||
* represents the 2304 bytes of real data, plus a possible 8 bytes of
|
||||
* WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro)
|
||||
*/
|
||||
#define RTLLIB_1ADDR_LEN 10
|
||||
#define RTLLIB_2ADDR_LEN 16
|
||||
#define RTLLIB_3ADDR_LEN 24
|
||||
|
@ -696,8 +697,7 @@ do { \
|
|||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* To use the debug system;
|
||||
/* To use the debug system;
|
||||
*
|
||||
* If you are defining a new debug classification, simply add it to the #define
|
||||
* list here in the form of:
|
||||
|
@ -716,8 +716,6 @@ do { \
|
|||
* % cat /proc/net/ipw/debug_level
|
||||
*
|
||||
* you simply need to add your entry to the ipw_debug_levels array.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#define RTLLIB_DL_INFO (1<<0)
|
||||
|
@ -975,7 +973,8 @@ struct rtllib_rx_stats {
|
|||
/* IEEE 802.11 requires that STA supports concurrent reception of at least
|
||||
* three fragmented frames. This define can be increased to support more
|
||||
* concurrent frames, but it should be noted that each entry can consume about
|
||||
* 2 kB of RAM and increasing cache size will slow down frame reassembly. */
|
||||
* 2 kB of RAM and increasing cache size will slow down frame reassembly.
|
||||
*/
|
||||
#define RTLLIB_FRAG_CACHE_LEN 4
|
||||
|
||||
struct rtllib_frag_entry {
|
||||
|
@ -1053,16 +1052,15 @@ struct rtllib_security {
|
|||
} __packed;
|
||||
|
||||
|
||||
/*
|
||||
802.11 data frame from AP
|
||||
,-------------------------------------------------------------------.
|
||||
Bytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 |
|
||||
|------|------|---------|---------|---------|------|---------|------|
|
||||
Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | frame | fcs |
|
||||
| | tion | (BSSID) | | | ence | data | |
|
||||
`-------------------------------------------------------------------'
|
||||
Total: 28-2340 bytes
|
||||
*/
|
||||
/* 802.11 data frame from AP
|
||||
* ,-------------------------------------------------------------------.
|
||||
* Bytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 |
|
||||
* |------|------|---------|---------|---------|------|---------|------|
|
||||
* Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | frame | fcs |
|
||||
* | | tion | (BSSID) | | | ence | data | |
|
||||
* `-------------------------------------------------------------------'
|
||||
* Total: 28-2340 bytes
|
||||
*/
|
||||
|
||||
/* Management Frame Information Element Types */
|
||||
enum rtllib_mfie {
|
||||
|
@ -1100,7 +1098,8 @@ enum rtllib_mfie {
|
|||
|
||||
/* Minimal header; can be used for passing 802.11 frames with sufficient
|
||||
* information to determine what type of underlying data type is actually
|
||||
* stored in the data. */
|
||||
* stored in the data.
|
||||
*/
|
||||
struct rtllib_pspoll_hdr {
|
||||
__le16 frame_ctl;
|
||||
__le16 aid;
|
||||
|
@ -1210,7 +1209,8 @@ struct rtllib_probe_response {
|
|||
__le16 beacon_interval;
|
||||
__le16 capability;
|
||||
/* SSID, supported rates, FH params, DS params,
|
||||
* CF params, IBSS params, TIM (if beacon), RSN */
|
||||
* CF params, IBSS params, TIM (if beacon), RSN
|
||||
*/
|
||||
struct rtllib_info_element info_element[0];
|
||||
} __packed;
|
||||
|
||||
|
@ -1285,7 +1285,8 @@ union frameqos {
|
|||
/* MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs
|
||||
* only use 8, and then use extended rates for the remaining supported
|
||||
* rates. Other APs, however, stick all of their supported rates on the
|
||||
* main rates information element... */
|
||||
* main rates information element...
|
||||
*/
|
||||
#define MAX_RATES_LENGTH ((u8)12)
|
||||
#define MAX_RATES_EX_LENGTH ((u8)16)
|
||||
#define MAX_NETWORK_COUNT 96
|
||||
|
@ -1472,22 +1473,21 @@ struct rtllib_info_element_hdr {
|
|||
u8 len;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* These are the data types that can make up management packets
|
||||
/* These are the data types that can make up management packets
|
||||
*
|
||||
u16 auth_algorithm;
|
||||
u16 auth_sequence;
|
||||
u16 beacon_interval;
|
||||
u16 capability;
|
||||
u8 current_ap[ETH_ALEN];
|
||||
u16 listen_interval;
|
||||
struct {
|
||||
u16 association_id:14, reserved:2;
|
||||
} __packed;
|
||||
u32 time_stamp[2];
|
||||
u16 reason;
|
||||
u16 status;
|
||||
*/
|
||||
* u16 auth_algorithm;
|
||||
* u16 auth_sequence;
|
||||
* u16 beacon_interval;
|
||||
* u16 capability;
|
||||
* u8 current_ap[ETH_ALEN];
|
||||
* u16 listen_interval;
|
||||
* struct {
|
||||
* u16 association_id:14, reserved:2;
|
||||
* } __packed;
|
||||
* u32 time_stamp[2];
|
||||
* u16 reason;
|
||||
* u16 status;
|
||||
*/
|
||||
|
||||
#define RTLLIB_DEFAULT_TX_ESSID "Penguin"
|
||||
#define RTLLIB_DEFAULT_BASIC_RATE 2
|
||||
|
@ -2085,14 +2085,16 @@ struct rtllib_device {
|
|||
spinlock_t wpax_suitlist_lock;
|
||||
|
||||
int tx_headroom; /* Set to size of any additional room needed at front
|
||||
* of allocated Tx SKBs */
|
||||
* of allocated Tx SKBs
|
||||
*/
|
||||
u32 config;
|
||||
|
||||
/* WEP and other encryption related settings at the device level */
|
||||
int open_wep; /* Set to 1 to allow unencrypted frames */
|
||||
int auth_mode;
|
||||
int reset_on_keychange; /* Set to 1 if the HW needs to be reset on
|
||||
* WEP key changes */
|
||||
* WEP key changes
|
||||
*/
|
||||
|
||||
/* If the host performs {en,de}cryption, then set to 1 */
|
||||
int host_encrypt;
|
||||
|
@ -2362,7 +2364,7 @@ struct rtllib_device {
|
|||
/* OK this is complementing to data_poll_hard_stop */
|
||||
void (*data_hard_resume)(struct net_device *dev);
|
||||
|
||||
/* ask to the driver to retune the radio .
|
||||
/* ask to the driver to retune the radio.
|
||||
* This function can sleep. the driver should ensure
|
||||
* the radio has been switched before return.
|
||||
*/
|
||||
|
@ -2456,7 +2458,8 @@ struct rtllib_device {
|
|||
void (*rtllib_rfkill_poll)(struct net_device *dev);
|
||||
|
||||
/* This must be the last item so that it points to the data
|
||||
* allocated beyond this structure by alloc_rtllib */
|
||||
* allocated beyond this structure by alloc_rtllib
|
||||
*/
|
||||
u8 priv[0];
|
||||
};
|
||||
|
||||
|
@ -2485,7 +2488,8 @@ struct rtllib_device {
|
|||
|
||||
/* The ieee802.11 stack will manage the netif queue
|
||||
* wake/stop for the driver, taking care of 802.11
|
||||
* fragmentation. See softmac.c for details. */
|
||||
* fragmentation. See softmac.c for details.
|
||||
*/
|
||||
#define IEEE_SOFTMAC_TX_QUEUE (1<<7)
|
||||
|
||||
/* Uses only the softmac_data_hard_start_xmit
|
||||
|
@ -2522,11 +2526,9 @@ static inline int rtllib_is_empty_essid(const char *essid, int essid_len)
|
|||
|
||||
static inline int rtllib_is_valid_mode(struct rtllib_device *ieee, int mode)
|
||||
{
|
||||
/*
|
||||
* It is possible for both access points and our device to support
|
||||
/* It is possible for both access points and our device to support
|
||||
* combinations of modes, so as long as there is one valid combination
|
||||
* of ap/device supported modes, then return success
|
||||
*
|
||||
*/
|
||||
if ((mode & IEEE_A) &&
|
||||
(ieee->modulation & RTLLIB_OFDM_MODULATION) &&
|
||||
|
|
|
@ -87,7 +87,8 @@ void rtllib_crypt_delayed_deinit(struct lib80211_crypt_info *info,
|
|||
|
||||
/* must not run ops->deinit() while there may be pending encrypt or
|
||||
* decrypt operations. Use a list of delayed deinits to avoid needing
|
||||
* locking. */
|
||||
* locking.
|
||||
*/
|
||||
|
||||
spin_lock_irqsave(info->lock, flags);
|
||||
list_add(&tmp->list, &info->crypt_deinit_list);
|
||||
|
|
|
@ -17,8 +17,7 @@
|
|||
* more details.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file defines the interface to the rtllib crypto module.
|
||||
/* This file defines the interface to the rtllib crypto module.
|
||||
*/
|
||||
#ifndef RTLLIB_CRYPT_H
|
||||
#define RTLLIB_CRYPT_H
|
||||
|
|
|
@ -140,7 +140,8 @@ static void ccmp_init_blocks(struct crypto_tfm *tfm,
|
|||
* Flag (Include authentication header, M=3 (8-octet MIC),
|
||||
* L=1 (2-octet Dlen))
|
||||
* Nonce: 0x00 | A2 | PN
|
||||
* Dlen */
|
||||
* Dlen
|
||||
*/
|
||||
b0[0] = 0x59;
|
||||
b0[1] = qc;
|
||||
memcpy(b0 + 2, hdr->addr2, ETH_ALEN);
|
||||
|
|
|
@ -249,7 +249,8 @@ static void tkip_mixing_phase2(u8 *WEPSeed, const u8 *TK, const u16 *TTAK,
|
|||
u16 IV16)
|
||||
{
|
||||
/* Make temporary area overlap WEP seed so that the final copy can be
|
||||
* avoided on little endian hosts. */
|
||||
* avoided on little endian hosts.
|
||||
*/
|
||||
u16 *PPK = (u16 *) &WEPSeed[4];
|
||||
|
||||
/* Step 1 - make copy of TTAK and bring in TSC */
|
||||
|
@ -276,7 +277,8 @@ static void tkip_mixing_phase2(u8 *WEPSeed, const u8 *TK, const u16 *TTAK,
|
|||
PPK[5] += RotR1(PPK[4]);
|
||||
|
||||
/* Step 3 - bring in last of TK bits, assign 24-bit WEP IV value
|
||||
* WEPSeed[0..2] is transmitted as WEP IV */
|
||||
* WEPSeed[0..2] is transmitted as WEP IV
|
||||
*/
|
||||
WEPSeed[0] = Hi8(IV16);
|
||||
WEPSeed[1] = (Hi8(IV16) | 0x20) & 0x7F;
|
||||
WEPSeed[2] = Lo8(IV16);
|
||||
|
@ -470,7 +472,8 @@ static int rtllib_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
|||
if (iv32 != tkey->rx_iv32) {
|
||||
/* Previously cached Phase1 result was already
|
||||
* lost, so it needs to be recalculated for the
|
||||
* next packet. */
|
||||
* next packet.
|
||||
*/
|
||||
tkey->rx_phase1_done = 0;
|
||||
}
|
||||
if (net_ratelimit()) {
|
||||
|
@ -485,7 +488,8 @@ static int rtllib_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
|||
}
|
||||
|
||||
/* Update real counters only after Michael MIC verification has
|
||||
* completed */
|
||||
* completed
|
||||
*/
|
||||
tkey->rx_iv32_new = iv32;
|
||||
tkey->rx_iv16_new = iv16;
|
||||
|
||||
|
@ -639,7 +643,8 @@ static int rtllib_michael_mic_verify(struct sk_buff *skb, int keyidx,
|
|||
}
|
||||
|
||||
/* Update TSC counters for RX now that the packet verification has
|
||||
* completed. */
|
||||
* completed.
|
||||
*/
|
||||
tkey->rx_iv32 = tkey->rx_iv32_new;
|
||||
tkey->rx_iv16 = tkey->rx_iv16_new;
|
||||
|
||||
|
|
|
@ -121,7 +121,8 @@ static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
|||
|
||||
/* Fluhrer, Mantin, and Shamir have reported weaknesses in the key
|
||||
* scheduling algorithm of RC4. At least IVs (KeyByte + 3, 0xff, N)
|
||||
* can be used to speedup attacks, so avoid using them. */
|
||||
* can be used to speedup attacks, so avoid using them.
|
||||
*/
|
||||
if ((wep->iv & 0xff00) == 0xff00) {
|
||||
u8 B = (wep->iv >> 16) & 0xff;
|
||||
|
||||
|
|
|
@ -143,7 +143,8 @@ rtllib_frag_cache_get(struct rtllib_device *ieee,
|
|||
memcpy(entry->dst_addr, hdr->addr1, ETH_ALEN);
|
||||
} else {
|
||||
/* received a fragment of a frame for which the head fragment
|
||||
* should have already been received */
|
||||
* should have already been received
|
||||
*/
|
||||
entry = rtllib_frag_cache_find(ieee, seq, frag, tid, hdr->addr2,
|
||||
hdr->addr1);
|
||||
if (entry != NULL) {
|
||||
|
@ -199,7 +200,8 @@ static int rtllib_frag_cache_invalidate(struct rtllib_device *ieee,
|
|||
*
|
||||
* Responsible for handling management control frames
|
||||
*
|
||||
* Called by rtllib_rx */
|
||||
* Called by rtllib_rx
|
||||
*/
|
||||
static inline int
|
||||
rtllib_rx_frame_mgmt(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
struct rtllib_rx_stats *rx_stats, u16 type,
|
||||
|
@ -224,8 +226,9 @@ rtllib_rx_frame_mgmt(struct rtllib_device *ieee, struct sk_buff *skb,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */
|
||||
/* Ethernet-II snap header (RFC1042 for most EtherTypes) */
|
||||
/* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation
|
||||
* Ethernet-II snap header (RFC1042 for most EtherTypes)
|
||||
*/
|
||||
static unsigned char rfc1042_header[] = {
|
||||
0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
@ -482,7 +485,8 @@ void rtllib_indicate_packets(struct rtllib_device *ieee, struct rtllib_rxb **prx
|
|||
ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) ||
|
||||
memcmp(sub_skb->data, bridge_tunnel_header, SNAP_SIZE) == 0)) {
|
||||
/* remove RFC1042 or Bridge-Tunnel encapsulation
|
||||
* and replace EtherType */
|
||||
* and replace EtherType
|
||||
*/
|
||||
skb_pull(sub_skb, SNAP_SIZE);
|
||||
memcpy(skb_push(sub_skb, ETH_ALEN), prxb->src, ETH_ALEN);
|
||||
memcpy(skb_push(sub_skb, ETH_ALEN), prxb->dst, ETH_ALEN);
|
||||
|
@ -582,8 +586,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
|||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sliding window manipulation. Conditions includes:
|
||||
/* Sliding window manipulation. Conditions includes:
|
||||
* 1. Incoming SeqNum is equal to WinStart =>Window shift 1
|
||||
* 2. Incoming SeqNum is larger than the WinEnd => Window shift N
|
||||
*/
|
||||
|
@ -598,13 +601,12 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
|||
RTLLIB_DEBUG(RTLLIB_DL_REORDER, "Window Shift! IndicateSeq: %d, NewSeq: %d\n", pTS->RxIndicateSeq, SeqNum);
|
||||
}
|
||||
|
||||
/*
|
||||
* Indication process.
|
||||
/* Indication process.
|
||||
* After Packet dropping and Sliding Window shifting as above, we can
|
||||
* now just indicate the packets with the SeqNum smaller than latest
|
||||
* WinStart and struct buffer other packets.
|
||||
*/
|
||||
/* For Rx Reorder condition:
|
||||
*
|
||||
* For Rx Reorder condition:
|
||||
* 1. All packets with SeqNum smaller than WinStart => Indicate
|
||||
* 2. All packets with SeqNum larger than or equal to
|
||||
* WinStart => Buffer it.
|
||||
|
@ -647,8 +649,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
|||
pTS->RxIndicateSeq, SeqNum);
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* Packets are dropped if there are not enough reorder
|
||||
/* Packets are dropped if there are not enough reorder
|
||||
* entries. This part should be modified!! We can just
|
||||
* indicate all the packets in struct buffer and get
|
||||
* reorder entries.
|
||||
|
@ -698,7 +699,8 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
|||
}
|
||||
|
||||
/* Handling pending timer. Set this timer to prevent from long time
|
||||
* Rx buffering.*/
|
||||
* Rx buffering.
|
||||
*/
|
||||
if (index > 0) {
|
||||
if (timer_pending(&pTS->RxPktPendingTimer))
|
||||
del_timer_sync(&pTS->RxPktPendingTimer);
|
||||
|
@ -973,7 +975,8 @@ static int rtllib_rx_data_filter(struct rtllib_device *ieee, u16 fc,
|
|||
}
|
||||
|
||||
/* Nullfunc frames may have PS-bit set, so they must be passed to
|
||||
* hostap_handle_sta_rx() before being dropped here. */
|
||||
* hostap_handle_sta_rx() before being dropped here.
|
||||
*/
|
||||
if (!ieee->IntelPromiscuousModeInfo.bPromiscuousOn) {
|
||||
if (stype != RTLLIB_STYPE_DATA &&
|
||||
stype != RTLLIB_STYPE_DATA_CFACK &&
|
||||
|
@ -1015,7 +1018,8 @@ static int rtllib_rx_get_crypt(struct rtllib_device *ieee, struct sk_buff *skb,
|
|||
|
||||
*crypt = ieee->crypt_info.crypt[idx];
|
||||
/* allow NULL decrypt to indicate an station specific override
|
||||
* for default encryption */
|
||||
* for default encryption
|
||||
*/
|
||||
if (*crypt && ((*crypt)->ops == NULL ||
|
||||
(*crypt)->ops->decrypt_mpdu == NULL))
|
||||
*crypt = NULL;
|
||||
|
@ -1024,7 +1028,8 @@ static int rtllib_rx_get_crypt(struct rtllib_device *ieee, struct sk_buff *skb,
|
|||
/* This seems to be triggered by some (multicast?)
|
||||
* frames from other than current BSS, so just drop the
|
||||
* frames silently instead of filling system log with
|
||||
* these reports. */
|
||||
* these reports.
|
||||
*/
|
||||
RTLLIB_DEBUG_DROP("Decryption failed (not set) (SA= %pM)\n",
|
||||
hdr->addr2);
|
||||
ieee->ieee_stats.rx_discards_undecryptable++;
|
||||
|
@ -1088,11 +1093,13 @@ static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct sk_buff *skb,
|
|||
|
||||
if (frag == 0) {
|
||||
/* copy first fragment (including full headers) into
|
||||
* beginning of the fragment cache skb */
|
||||
* beginning of the fragment cache skb
|
||||
*/
|
||||
memcpy(skb_put(frag_skb, flen), skb->data, flen);
|
||||
} else {
|
||||
/* append frame payload to the end of the fragment
|
||||
* cache skb */
|
||||
* cache skb
|
||||
*/
|
||||
memcpy(skb_put(frag_skb, flen), skb->data + hdrlen,
|
||||
flen);
|
||||
}
|
||||
|
@ -1102,19 +1109,22 @@ static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct sk_buff *skb,
|
|||
if (fc & RTLLIB_FCTL_MOREFRAGS) {
|
||||
/* more fragments expected - leave the skb in fragment
|
||||
* cache for now; it will be delivered to upper layers
|
||||
* after all fragments have been received */
|
||||
* after all fragments have been received
|
||||
*/
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* this was the last fragment and the frame will be
|
||||
* delivered, so remove skb from fragment cache */
|
||||
* delivered, so remove skb from fragment cache
|
||||
*/
|
||||
skb = frag_skb;
|
||||
hdr = (struct rtllib_hdr_4addr *) skb->data;
|
||||
rtllib_frag_cache_invalidate(ieee, hdr);
|
||||
}
|
||||
|
||||
/* skb: hdr + (possible reassembled) full MSDU payload; possibly still
|
||||
* encrypted/authenticated */
|
||||
* encrypted/authenticated
|
||||
*/
|
||||
if (ieee->host_decrypt && (fc & RTLLIB_FCTL_WEP) &&
|
||||
rtllib_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt)) {
|
||||
netdev_info(ieee->dev, "%s: ==>decrypt msdu error\n", __func__);
|
||||
|
@ -1127,7 +1137,8 @@ static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct sk_buff *skb,
|
|||
rtllib_is_eapol_frame(ieee, skb, hdrlen)) {
|
||||
|
||||
/* pass unencrypted EAPOL frames even if encryption is
|
||||
* configured */
|
||||
* configured
|
||||
*/
|
||||
struct eapol *eap = (struct eapol *)(skb->data +
|
||||
24);
|
||||
RTLLIB_DEBUG_EAP("RX: IEEE 802.1X EAPOL frame: %s\n",
|
||||
|
@ -1204,7 +1215,8 @@ static void rtllib_rx_indicate_pkt_legacy(struct rtllib_device *ieee,
|
|||
ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) ||
|
||||
memcmp(sub_skb->data, bridge_tunnel_header, SNAP_SIZE) == 0)) {
|
||||
/* remove RFC1042 or Bridge-Tunnel encapsulation and
|
||||
* replace EtherType */
|
||||
* replace EtherType
|
||||
*/
|
||||
skb_pull(sub_skb, SNAP_SIZE);
|
||||
memcpy(skb_push(sub_skb, ETH_ALEN), src, ETH_ALEN);
|
||||
memcpy(skb_push(sub_skb, ETH_ALEN), dst, ETH_ALEN);
|
||||
|
@ -1396,7 +1408,8 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb,
|
|||
|
||||
/* Returning 0 indicates to caller that we have not handled the SKB--
|
||||
* so it is still allocated and can be used again by underlying
|
||||
* hardware as a DMA target */
|
||||
* hardware as a DMA target
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1442,7 +1455,8 @@ static int rtllib_rx_Mesh(struct rtllib_device *ieee, struct sk_buff *skb,
|
|||
|
||||
/* All received frames are sent to this function. @skb contains the frame in
|
||||
* IEEE 802.11 format, i.e., in the format it was sent over air.
|
||||
* This function is called only as a tasklet (software IRQ). */
|
||||
* This function is called only as a tasklet (software IRQ).
|
||||
*/
|
||||
int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
struct rtllib_rx_stats *rx_stats)
|
||||
{
|
||||
|
@ -1488,10 +1502,7 @@ EXPORT_SYMBOL(rtllib_rx);
|
|||
|
||||
static u8 qos_oui[QOS_OUI_LEN] = { 0x00, 0x50, 0xF2 };
|
||||
|
||||
/*
|
||||
* Make ther structure we read from the beacon packet has
|
||||
* the right values
|
||||
*/
|
||||
/* Make ther structure we read from the beacon packet has the right values */
|
||||
static int rtllib_verify_qos_info(struct rtllib_qos_information_element
|
||||
*info_element, int sub_type)
|
||||
{
|
||||
|
@ -1509,9 +1520,7 @@ static int rtllib_verify_qos_info(struct rtllib_qos_information_element
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* Parse a QoS parameter element
|
||||
*/
|
||||
/* Parse a QoS parameter element */
|
||||
static int rtllib_read_qos_param_element(struct rtllib_qos_parameter_info
|
||||
*element_param, struct rtllib_info_element
|
||||
*info_element)
|
||||
|
@ -1535,9 +1544,7 @@ static int rtllib_read_qos_param_element(struct rtllib_qos_parameter_info
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse a QoS information element
|
||||
*/
|
||||
/* Parse a QoS information element */
|
||||
static int rtllib_read_qos_info_element(struct
|
||||
rtllib_qos_information_element
|
||||
*element_info, struct rtllib_info_element
|
||||
|
@ -1566,9 +1573,7 @@ static int rtllib_read_qos_info_element(struct
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* Write QoS parameters from the ac parameters.
|
||||
*/
|
||||
/* Write QoS parameters from the ac parameters. */
|
||||
static int rtllib_qos_convert_ac_to_parameters(struct rtllib_qos_parameter_info *param_elm,
|
||||
struct rtllib_qos_data *qos_data)
|
||||
{
|
||||
|
@ -1627,8 +1632,7 @@ static int rtllib_qos_convert_ac_to_parameters(struct rtllib_qos_parameter_info
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* we have a generic data element which it may contain QoS information or
|
||||
/* we have a generic data element which it may contain QoS information or
|
||||
* parameters element. check the information element length to decide
|
||||
* which type to read
|
||||
*/
|
||||
|
@ -1750,7 +1754,8 @@ int rtllib_parse_info_param(struct rtllib_device *ieee,
|
|||
length, info_element->id);
|
||||
/* We stop processing but don't return an error here
|
||||
* because some misbehaviour APs break this rule. ie.
|
||||
* Orinoco AP1000. */
|
||||
* Orinoco AP1000.
|
||||
*/
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2302,7 +2307,8 @@ static inline int is_same_network(struct rtllib_network *src,
|
|||
/* A network is only a duplicate if the channel, BSSID, ESSID
|
||||
* and the capability field (in particular IBSS and BSS) all match.
|
||||
* We treat all <hidden> with the same BSSID and channel
|
||||
* as one network */
|
||||
* as one network
|
||||
*/
|
||||
return (((src->ssid_len == dst->ssid_len) || (!ssidbroad)) &&
|
||||
(src->channel == dst->channel) &&
|
||||
!memcmp(src->bssid, dst->bssid, ETH_ALEN) &&
|
||||
|
@ -2524,10 +2530,12 @@ static inline void rtllib_process_probe_response(
|
|||
*
|
||||
* NOTE: This search is definitely not optimized. Once its doing
|
||||
* the "right thing" we'll optimize it for efficiency if
|
||||
* necessary */
|
||||
* necessary
|
||||
*/
|
||||
|
||||
/* Search for this entry in the list and update it if it is
|
||||
* already there. */
|
||||
* already there.
|
||||
*/
|
||||
|
||||
spin_lock_irqsave(&ieee->lock, flags);
|
||||
if (is_same_network(&ieee->current_network, network,
|
||||
|
@ -2556,7 +2564,8 @@ static inline void rtllib_process_probe_response(
|
|||
}
|
||||
|
||||
/* If we didn't find a match, then get a new network slot to initialize
|
||||
* with this beacon's information */
|
||||
* with this beacon's information
|
||||
*/
|
||||
if (&target->list == &ieee->network_list) {
|
||||
if (list_empty(&ieee->network_free_list)) {
|
||||
/* If there are no more slots, expire the oldest */
|
||||
|
|
|
@ -68,7 +68,8 @@ static void rtllib_MFIE_Brate(struct rtllib_device *ieee, u8 **tag_p)
|
|||
}
|
||||
|
||||
/* We may add an option for custom rates that specific HW
|
||||
* might support */
|
||||
* might support
|
||||
*/
|
||||
*tag_p = tag;
|
||||
}
|
||||
|
||||
|
@ -89,7 +90,8 @@ static void rtllib_MFIE_Grate(struct rtllib_device *ieee, u8 **tag_p)
|
|||
*tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_54MB;
|
||||
}
|
||||
/* We may add an option for custom rates that specific HW might
|
||||
* support */
|
||||
* support
|
||||
*/
|
||||
*tag_p = tag;
|
||||
}
|
||||
|
||||
|
@ -133,8 +135,7 @@ static void enqueue_mgmt(struct rtllib_device *ieee, struct sk_buff *skb)
|
|||
|
||||
nh = (ieee->mgmt_queue_head + 1) % MGMT_QUEUE_NUM;
|
||||
|
||||
/*
|
||||
* if the queue is full but we have newer frames then
|
||||
/* if the queue is full but we have newer frames then
|
||||
* just overwrites the oldest.
|
||||
*
|
||||
* if (nh == ieee->mgmt_queue_tail)
|
||||
|
@ -273,10 +274,11 @@ inline void softmac_mgmt_xmit(struct sk_buff *skb, struct rtllib_device *ieee)
|
|||
if (!ieee->check_nic_enough_desc(ieee->dev, tcb_desc->queue_index) ||
|
||||
(skb_queue_len(&ieee->skb_waitQ[tcb_desc->queue_index]) != 0) ||
|
||||
(ieee->queue_stop)) {
|
||||
/* insert the skb packet to the management queue */
|
||||
/* as for the completion function, it does not need
|
||||
/* insert the skb packet to the management queue
|
||||
*
|
||||
* as for the completion function, it does not need
|
||||
* to check it any more.
|
||||
* */
|
||||
*/
|
||||
netdev_info(ieee->dev,
|
||||
"%s():insert to waitqueue, queue_index:%d!\n",
|
||||
__func__, tcb_desc->queue_index);
|
||||
|
@ -417,10 +419,7 @@ static void rtllib_send_beacon_cb(unsigned long _ieee)
|
|||
spin_unlock_irqrestore(&ieee->beacon_lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Description:
|
||||
* Enable network monitor mode, all rx packets will be received.
|
||||
*/
|
||||
/* Enables network monitor mode, all rx packets will be received. */
|
||||
void rtllib_EnableNetMonitorMode(struct net_device *dev,
|
||||
bool bInitState)
|
||||
{
|
||||
|
@ -432,10 +431,8 @@ void rtllib_EnableNetMonitorMode(struct net_device *dev,
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* Description:
|
||||
* Disable network network monitor mode, only packets destinated to
|
||||
* us will be received.
|
||||
/* Disables network monitor mode. Only packets destinated to
|
||||
* us will be received.
|
||||
*/
|
||||
void rtllib_DisableNetMonitorMode(struct net_device *dev,
|
||||
bool bInitState)
|
||||
|
@ -448,9 +445,7 @@ void rtllib_DisableNetMonitorMode(struct net_device *dev,
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* Description:
|
||||
* This enables the specialized promiscuous mode required by Intel.
|
||||
/* Enables the specialized promiscuous mode required by Intel.
|
||||
* In this mode, Intel intends to hear traffics from/to other STAs in the
|
||||
* same BSS. Therefore we don't have to disable checking BSSID and we only need
|
||||
* to allow all dest. BUT: if we enable checking BSSID then we can't recv
|
||||
|
@ -474,10 +469,8 @@ void rtllib_EnableIntelPromiscuousMode(struct net_device *dev,
|
|||
EXPORT_SYMBOL(rtllib_EnableIntelPromiscuousMode);
|
||||
|
||||
|
||||
/*
|
||||
* Description:
|
||||
* This disables the specialized promiscuous mode required by Intel.
|
||||
* See MgntEnableIntelPromiscuousMode for detail.
|
||||
/* Disables the specialized promiscuous mode required by Intel.
|
||||
* See MgntEnableIntelPromiscuousMode for detail.
|
||||
*/
|
||||
void rtllib_DisableIntelPromiscuousMode(struct net_device *dev,
|
||||
bool bInitState)
|
||||
|
@ -1709,8 +1702,8 @@ inline void rtllib_softmac_new_net(struct rtllib_device *ieee,
|
|||
(!apset && ssidset && ssidbroad && ssidmatch) ||
|
||||
(ieee->is_roaming && ssidset && ssidbroad && ssidmatch)) {
|
||||
/* if the essid is hidden replace it with the
|
||||
* essid provided by the user.
|
||||
*/
|
||||
* essid provided by the user.
|
||||
*/
|
||||
if (!ssidbroad) {
|
||||
strncpy(tmp_ssid, ieee->current_network.ssid,
|
||||
IW_ESSID_MAX_SIZE);
|
||||
|
@ -2008,7 +2001,8 @@ static short rtllib_sta_ps_sleep(struct rtllib_device *ieee, u64 *time)
|
|||
timeout = ieee->current_network.beacon_interval;
|
||||
ieee->current_network.dtim_data = RTLLIB_DTIM_INVALID;
|
||||
/* there's no need to nofity AP that I find you buffered
|
||||
* with broadcast packet */
|
||||
* with broadcast packet
|
||||
*/
|
||||
if (dtim & (RTLLIB_DTIM_UCAST & ieee->ps))
|
||||
return 2;
|
||||
|
||||
|
@ -2348,8 +2342,7 @@ static void rtllib_rx_auth_resp(struct rtllib_device *ieee, struct sk_buff *skb)
|
|||
}
|
||||
}
|
||||
}
|
||||
/* Dummy wirless mode setting to avoid
|
||||
* encryption issue */
|
||||
/* Dummy wirless mode setting to avoid encryption issue */
|
||||
if (bSupportNmode) {
|
||||
ieee->SetWirelessMode(ieee->dev,
|
||||
ieee->current_network.mode);
|
||||
|
@ -2395,8 +2388,8 @@ inline int rtllib_rx_deauth(struct rtllib_device *ieee, struct sk_buff *skb)
|
|||
return 0;
|
||||
|
||||
/* FIXME for now repeat all the association procedure
|
||||
* both for disassociation and deauthentication
|
||||
*/
|
||||
* both for disassociation and deauthentication
|
||||
*/
|
||||
if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) &&
|
||||
ieee->state == RTLLIB_LINKED &&
|
||||
(ieee->iw_mode == IW_MODE_INFRA)) {
|
||||
|
@ -2499,16 +2492,17 @@ void rtllib_softmac_xmit(struct rtllib_txb *txb, struct rtllib_device *ieee)
|
|||
ieee->stats.multicast++;
|
||||
|
||||
/* if xmit available, just xmit it immediately, else just insert it to
|
||||
* the wait queue */
|
||||
* the wait queue
|
||||
*/
|
||||
for (i = 0; i < txb->nr_frags; i++) {
|
||||
queue_len = skb_queue_len(&ieee->skb_waitQ[queue_index]);
|
||||
if ((queue_len != 0) ||
|
||||
(!ieee->check_nic_enough_desc(ieee->dev, queue_index)) ||
|
||||
(ieee->queue_stop)) {
|
||||
/* insert the skb packet to the wait queue */
|
||||
/* as for the completion function, it does not need
|
||||
/* insert the skb packet to the wait queue
|
||||
* as for the completion function, it does not need
|
||||
* to check it any more.
|
||||
* */
|
||||
*/
|
||||
if (queue_len < 200)
|
||||
skb_queue_tail(&ieee->skb_waitQ[queue_index],
|
||||
txb->fragments[i]);
|
||||
|
@ -2886,18 +2880,18 @@ static void rtllib_associate_retry_wq(void *data)
|
|||
goto exit;
|
||||
|
||||
/* until we do not set the state to RTLLIB_NOLINK
|
||||
* there are no possibility to have someone else trying
|
||||
* to start an association procedure (we get here with
|
||||
* ieee->state = RTLLIB_ASSOCIATING).
|
||||
* When we set the state to RTLLIB_NOLINK it is possible
|
||||
* that the RX path run an attempt to associate, but
|
||||
* both rtllib_softmac_check_all_nets and the
|
||||
* RX path works with ieee->lock held so there are no
|
||||
* problems. If we are still disassociated then start a scan.
|
||||
* the lock here is necessary to ensure no one try to start
|
||||
* an association procedure when we have just checked the
|
||||
* state and we are going to start the scan.
|
||||
*/
|
||||
* there are no possibility to have someone else trying
|
||||
* to start an association procedure (we get here with
|
||||
* ieee->state = RTLLIB_ASSOCIATING).
|
||||
* When we set the state to RTLLIB_NOLINK it is possible
|
||||
* that the RX path run an attempt to associate, but
|
||||
* both rtllib_softmac_check_all_nets and the
|
||||
* RX path works with ieee->lock held so there are no
|
||||
* problems. If we are still disassociated then start a scan.
|
||||
* the lock here is necessary to ensure no one try to start
|
||||
* an association procedure when we have just checked the
|
||||
* state and we are going to start the scan.
|
||||
*/
|
||||
ieee->beinretry = true;
|
||||
ieee->state = RTLLIB_NOLINK;
|
||||
|
||||
|
@ -3185,7 +3179,8 @@ void rtllib_softmac_free(struct rtllib_device *ieee)
|
|||
static int rtllib_wpa_enable(struct rtllib_device *ieee, int value)
|
||||
{
|
||||
/* This is called when wpa_supplicant loads and closes the driver
|
||||
* interface. */
|
||||
* interface.
|
||||
*/
|
||||
netdev_info(ieee->dev, "%s WPA\n", value ? "enabling" : "disabling");
|
||||
ieee->wpa_enabled = value;
|
||||
memset(ieee->ap_mac_addr, 0, 6);
|
||||
|
@ -3490,7 +3485,8 @@ static int rtllib_wpa_set_encryption(struct rtllib_device *ieee,
|
|||
* generate new IEEE 802.11 authentication which may end up in looping
|
||||
* with IEEE 802.1X. If your hardware requires a reset after WEP
|
||||
* configuration (for example... Prism2), implement the reset_port in
|
||||
* the callbacks structures used to initialize the 802.11 stack. */
|
||||
* the callbacks structures used to initialize the 802.11 stack.
|
||||
*/
|
||||
if (ieee->reset_on_keychange &&
|
||||
ieee->iw_mode != IW_MODE_INFRA &&
|
||||
ieee->reset_port &&
|
||||
|
|
|
@ -53,102 +53,99 @@
|
|||
|
||||
#include "rtllib.h"
|
||||
|
||||
/*
|
||||
|
||||
|
||||
802.11 Data Frame
|
||||
|
||||
|
||||
802.11 frame_control for data frames - 2 bytes
|
||||
,-----------------------------------------------------------------------------------------.
|
||||
bits | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e |
|
||||
|----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|------|
|
||||
val | 0 | 0 | 0 | 1 | x | 0 | 0 | 0 | 1 | 0 | x | x | x | x | x |
|
||||
|----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|------|
|
||||
desc | ^-ver-^ | ^type-^ | ^-----subtype-----^ | to |from |more |retry| pwr |more |wep |
|
||||
| | | x=0 data,x=1 data+ack | DS | DS |frag | | mgm |data | |
|
||||
'-----------------------------------------------------------------------------------------'
|
||||
/\
|
||||
|
|
||||
802.11 Data Frame |
|
||||
,--------- 'ctrl' expands to >-----------'
|
||||
|
|
||||
,--'---,-------------------------------------------------------------.
|
||||
Bytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 |
|
||||
|------|------|---------|---------|---------|------|---------|------|
|
||||
Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | Frame | fcs |
|
||||
| | tion | (BSSID) | | | ence | data | |
|
||||
`--------------------------------------------------| |------'
|
||||
Total: 28 non-data bytes `----.----'
|
||||
|
|
||||
.- 'Frame data' expands to <---------------------------'
|
||||
|
|
||||
V
|
||||
,---------------------------------------------------.
|
||||
Bytes | 1 | 1 | 1 | 3 | 2 | 0-2304 |
|
||||
|------|------|---------|----------|------|---------|
|
||||
Desc. | SNAP | SNAP | Control |Eth Tunnel| Type | IP |
|
||||
| DSAP | SSAP | | | | Packet |
|
||||
| 0xAA | 0xAA |0x03 (UI)|0x00-00-F8| | |
|
||||
`-----------------------------------------| |
|
||||
Total: 8 non-data bytes `----.----'
|
||||
|
|
||||
.- 'IP Packet' expands, if WEP enabled, to <--'
|
||||
|
|
||||
V
|
||||
,-----------------------.
|
||||
Bytes | 4 | 0-2296 | 4 |
|
||||
|-----|-----------|-----|
|
||||
Desc. | IV | Encrypted | ICV |
|
||||
| | IP Packet | |
|
||||
`-----------------------'
|
||||
Total: 8 non-data bytes
|
||||
|
||||
|
||||
802.3 Ethernet Data Frame
|
||||
|
||||
,-----------------------------------------.
|
||||
Bytes | 6 | 6 | 2 | Variable | 4 |
|
||||
|-------|-------|------|-----------|------|
|
||||
Desc. | Dest. | Source| Type | IP Packet | fcs |
|
||||
| MAC | MAC | | | |
|
||||
`-----------------------------------------'
|
||||
Total: 18 non-data bytes
|
||||
|
||||
In the event that fragmentation is required, the incoming payload is split into
|
||||
N parts of size ieee->fts. The first fragment contains the SNAP header and the
|
||||
remaining packets are just data.
|
||||
|
||||
If encryption is enabled, each fragment payload size is reduced by enough space
|
||||
to add the prefix and postfix (IV and ICV totalling 8 bytes in the case of WEP)
|
||||
So if you have 1500 bytes of payload with ieee->fts set to 500 without
|
||||
encryption it will take 3 frames. With WEP it will take 4 frames as the
|
||||
payload of each frame is reduced to 492 bytes.
|
||||
|
||||
* SKB visualization
|
||||
*
|
||||
* ,- skb->data
|
||||
* |
|
||||
* | ETHERNET HEADER ,-<-- PAYLOAD
|
||||
* | | 14 bytes from skb->data
|
||||
* | 2 bytes for Type --> ,T. | (sizeof ethhdr)
|
||||
* | | | |
|
||||
* |,-Dest.--. ,--Src.---. | | |
|
||||
* | 6 bytes| | 6 bytes | | | |
|
||||
* v | | | | | |
|
||||
* 0 | v 1 | v | v 2
|
||||
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||
* ^ | ^ | ^ |
|
||||
* | | | | | |
|
||||
* | | | | `T' <---- 2 bytes for Type
|
||||
* | | | |
|
||||
* | | '---SNAP--' <-------- 6 bytes for SNAP
|
||||
* | |
|
||||
* `-IV--' <-------------------- 4 bytes for IV (WEP)
|
||||
*
|
||||
* SNAP HEADER
|
||||
*
|
||||
*/
|
||||
/* 802.11 Data Frame
|
||||
*
|
||||
*
|
||||
* 802.11 frame_control for data frames - 2 bytes
|
||||
* ,-----------------------------------------------------------------------------------------.
|
||||
* bits | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e |
|
||||
* |----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|------|
|
||||
* val | 0 | 0 | 0 | 1 | x | 0 | 0 | 0 | 1 | 0 | x | x | x | x | x |
|
||||
* |----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|------|
|
||||
* desc | ^-ver-^ | ^type-^ | ^-----subtype-----^ | to |from |more |retry| pwr |more |wep |
|
||||
* | | | x=0 data,x=1 data+ack | DS | DS |frag | | mgm |data | |
|
||||
* '-----------------------------------------------------------------------------------------'
|
||||
* /\
|
||||
* |
|
||||
* 802.11 Data Frame |
|
||||
* ,--------- 'ctrl' expands to >-----------'
|
||||
* |
|
||||
* ,--'---,-------------------------------------------------------------.
|
||||
* Bytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 |
|
||||
* |------|------|---------|---------|---------|------|---------|------|
|
||||
* Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | Frame | fcs |
|
||||
* | | tion | (BSSID) | | | ence | data | |
|
||||
* `--------------------------------------------------| |------'
|
||||
* Total: 28 non-data bytes `----.----'
|
||||
* |
|
||||
* .- 'Frame data' expands to <---------------------------'
|
||||
* |
|
||||
* V
|
||||
* ,---------------------------------------------------.
|
||||
* Bytes | 1 | 1 | 1 | 3 | 2 | 0-2304 |
|
||||
* |------|------|---------|----------|------|---------|
|
||||
* Desc. | SNAP | SNAP | Control |Eth Tunnel| Type | IP |
|
||||
* | DSAP | SSAP | | | | Packet |
|
||||
* | 0xAA | 0xAA |0x03 (UI)|0x00-00-F8| | |
|
||||
* `-----------------------------------------| |
|
||||
* Total: 8 non-data bytes `----.----'
|
||||
* |
|
||||
* .- 'IP Packet' expands, if WEP enabled, to <--'
|
||||
* |
|
||||
* V
|
||||
* ,-----------------------.
|
||||
* Bytes | 4 | 0-2296 | 4 |
|
||||
* |-----|-----------|-----|
|
||||
* Desc. | IV | Encrypted | ICV |
|
||||
* | | IP Packet | |
|
||||
* `-----------------------'
|
||||
* Total: 8 non-data bytes
|
||||
*
|
||||
*
|
||||
* 802.3 Ethernet Data Frame
|
||||
*
|
||||
* ,-----------------------------------------.
|
||||
* Bytes | 6 | 6 | 2 | Variable | 4 |
|
||||
* |-------|-------|------|-----------|------|
|
||||
* Desc. | Dest. | Source| Type | IP Packet | fcs |
|
||||
* | MAC | MAC | | | |
|
||||
* `-----------------------------------------'
|
||||
* Total: 18 non-data bytes
|
||||
*
|
||||
* In the event that fragmentation is required, the incoming payload is split into
|
||||
* N parts of size ieee->fts. The first fragment contains the SNAP header and the
|
||||
* remaining packets are just data.
|
||||
*
|
||||
* If encryption is enabled, each fragment payload size is reduced by enough space
|
||||
* to add the prefix and postfix (IV and ICV totalling 8 bytes in the case of WEP)
|
||||
* So if you have 1500 bytes of payload with ieee->fts set to 500 without
|
||||
* encryption it will take 3 frames. With WEP it will take 4 frames as the
|
||||
* payload of each frame is reduced to 492 bytes.
|
||||
*
|
||||
* SKB visualization
|
||||
*
|
||||
* ,- skb->data
|
||||
* |
|
||||
* | ETHERNET HEADER ,-<-- PAYLOAD
|
||||
* | | 14 bytes from skb->data
|
||||
* | 2 bytes for Type --> ,T. | (sizeof ethhdr)
|
||||
* | | | |
|
||||
* |,-Dest.--. ,--Src.---. | | |
|
||||
* | 6 bytes| | 6 bytes | | | |
|
||||
* v | | | | | |
|
||||
* 0 | v 1 | v | v 2
|
||||
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||
* ^ | ^ | ^ |
|
||||
* | | | | | |
|
||||
* | | | | `T' <---- 2 bytes for Type
|
||||
* | | | |
|
||||
* | | '---SNAP--' <-------- 6 bytes for SNAP
|
||||
* | |
|
||||
* `-IV--' <-------------------- 4 bytes for IV (WEP)
|
||||
*
|
||||
* SNAP HEADER
|
||||
*
|
||||
*/
|
||||
|
||||
static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 };
|
||||
static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 };
|
||||
|
@ -190,10 +187,12 @@ int rtllib_encrypt_fragment(struct rtllib_device *ieee, struct sk_buff *frag,
|
|||
return -1;
|
||||
}
|
||||
/* To encrypt, frame format is:
|
||||
* IV (4 bytes), clear payload (including SNAP), ICV (4 bytes) */
|
||||
* IV (4 bytes), clear payload (including SNAP), ICV (4 bytes)
|
||||
*/
|
||||
|
||||
/* Host-based IEEE 802.11 fragmentation for TX is not yet supported, so
|
||||
* call both MSDU and MPDU encryption functions from here. */
|
||||
* call both MSDU and MPDU encryption functions from here.
|
||||
*/
|
||||
atomic_inc(&crypt->refcnt);
|
||||
res = 0;
|
||||
if (crypt->ops->encrypt_msdu)
|
||||
|
@ -591,7 +590,8 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
|||
spin_lock_irqsave(&ieee->lock, flags);
|
||||
|
||||
/* If there is no driver handler to take the TXB, don't bother
|
||||
* creating it... */
|
||||
* creating it...
|
||||
*/
|
||||
if ((!ieee->hard_start_xmit && !(ieee->softmac_features &
|
||||
IEEE_SOFTMAC_TX_QUEUE)) ||
|
||||
((!ieee->softmac_data_hard_start_xmit &&
|
||||
|
@ -692,7 +692,8 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
|||
if (ieee->iw_mode == IW_MODE_INFRA) {
|
||||
fc |= RTLLIB_FCTL_TODS;
|
||||
/* To DS: Addr1 = BSSID, Addr2 = SA,
|
||||
Addr3 = DA */
|
||||
* Addr3 = DA
|
||||
*/
|
||||
memcpy(&header.addr1, ieee->current_network.bssid,
|
||||
ETH_ALEN);
|
||||
memcpy(&header.addr2, &src, ETH_ALEN);
|
||||
|
@ -703,7 +704,8 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
|||
memcpy(&header.addr3, &dest, ETH_ALEN);
|
||||
} else if (ieee->iw_mode == IW_MODE_ADHOC) {
|
||||
/* not From/To DS: Addr1 = DA, Addr2 = SA,
|
||||
Addr3 = BSSID */
|
||||
* Addr3 = BSSID
|
||||
*/
|
||||
memcpy(&header.addr1, dest, ETH_ALEN);
|
||||
memcpy(&header.addr2, src, ETH_ALEN);
|
||||
memcpy(&header.addr3, ieee->current_network.bssid,
|
||||
|
@ -715,7 +717,8 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
|||
header.frame_ctl = cpu_to_le16(fc);
|
||||
|
||||
/* Determine fragmentation size based on destination (multicast
|
||||
* and broadcast are not fragmented) */
|
||||
* and broadcast are not fragmented)
|
||||
*/
|
||||
if (bIsMulticast) {
|
||||
frag_size = MAX_FRAG_THRESHOLD;
|
||||
qos_ctl |= QOS_CTL_NOTCONTAIN_ACK;
|
||||
|
@ -744,14 +747,16 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
|||
/* Determine amount of payload per fragment. Regardless of if
|
||||
* this stack is providing the full 802.11 header, one will
|
||||
* eventually be affixed to this fragment -- so we must account
|
||||
* for it when determining the amount of payload space. */
|
||||
* for it when determining the amount of payload space.
|
||||
*/
|
||||
bytes_per_frag = frag_size - hdr_len;
|
||||
if (ieee->config &
|
||||
(CFG_RTLLIB_COMPUTE_FCS | CFG_RTLLIB_RESERVE_FCS))
|
||||
bytes_per_frag -= RTLLIB_FCS_LEN;
|
||||
|
||||
/* Each fragment may need to have room for encrypting
|
||||
* pre/postfix */
|
||||
* pre/postfix
|
||||
*/
|
||||
if (encrypt) {
|
||||
bytes_per_frag -= crypt->ops->extra_mpdu_prefix_len +
|
||||
crypt->ops->extra_mpdu_postfix_len +
|
||||
|
@ -759,7 +764,8 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
|||
crypt->ops->extra_msdu_postfix_len;
|
||||
}
|
||||
/* Number of fragments is the total bytes_per_frag /
|
||||
* payload_per_fragment */
|
||||
* payload_per_fragment
|
||||
*/
|
||||
nr_frags = bytes / bytes_per_frag;
|
||||
bytes_last_frag = bytes % bytes_per_frag;
|
||||
if (bytes_last_frag)
|
||||
|
@ -769,7 +775,8 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
|||
|
||||
/* When we allocate the TXB we allocate enough space for the
|
||||
* reserve and full fragment bytes (bytes_per_frag doesn't
|
||||
* include prefix, postfix, header, FCS, etc.) */
|
||||
* include prefix, postfix, header, FCS, etc.)
|
||||
*/
|
||||
txb = rtllib_alloc_txb(nr_frags, frag_size +
|
||||
ieee->tx_headroom, GFP_ATOMIC);
|
||||
if (unlikely(!txb)) {
|
||||
|
@ -813,7 +820,8 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
|||
memcpy(frag_hdr, &header, hdr_len);
|
||||
|
||||
/* If this is not the last fragment, then add the
|
||||
* MOREFRAGS bit to the frame control */
|
||||
* MOREFRAGS bit to the frame control
|
||||
*/
|
||||
if (i != nr_frags - 1) {
|
||||
frag_hdr->frame_ctl = cpu_to_le16(
|
||||
fc | RTLLIB_FCTL_MOREFRAGS);
|
||||
|
@ -848,7 +856,8 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
|||
|
||||
/* Encryption routine will move the header forward in
|
||||
* order to insert the IV between the header and the
|
||||
* payload */
|
||||
* payload
|
||||
*/
|
||||
if (encrypt)
|
||||
rtllib_encrypt_fragment(ieee, skb_frag,
|
||||
hdr_len);
|
||||
|
|
|
@ -241,7 +241,8 @@ static inline char *rtl819x_translate_scan(struct rtllib_device *ieee,
|
|||
}
|
||||
|
||||
/* Add EXTRA: Age to display seconds since last beacon/probe response
|
||||
* for given network. */
|
||||
* for given network.
|
||||
*/
|
||||
iwe.cmd = IWEVCUSTOM;
|
||||
p = custom;
|
||||
p += snprintf(p, MAX_CUSTOM_LEN - (p - custom),
|
||||
|
@ -337,7 +338,8 @@ int rtllib_wx_set_encode(struct rtllib_device *ieee,
|
|||
RTLLIB_DEBUG_WX("Disabling encryption.\n");
|
||||
|
||||
/* Check all the keys to see if any are still configured,
|
||||
* and if no key index was provided, de-init them all */
|
||||
* and if no key index was provided, de-init them all
|
||||
*/
|
||||
for (i = 0; i < NUM_WEP_KEYS; i++) {
|
||||
if (ieee->crypt_info.crypt[i] != NULL) {
|
||||
if (key_provided)
|
||||
|
@ -364,7 +366,8 @@ int rtllib_wx_set_encode(struct rtllib_device *ieee,
|
|||
if (*crypt != NULL && (*crypt)->ops != NULL &&
|
||||
strcmp((*crypt)->ops->name, "R-WEP") != 0) {
|
||||
/* changing to use WEP; deinit previously used algorithm
|
||||
* on this key */
|
||||
* on this key
|
||||
*/
|
||||
lib80211_crypt_delayed_deinit(&ieee->crypt_info, crypt);
|
||||
}
|
||||
|
||||
|
@ -412,7 +415,8 @@ int rtllib_wx_set_encode(struct rtllib_device *ieee,
|
|||
(*crypt)->priv);
|
||||
sec.flags |= (1 << key);
|
||||
/* This ensures a key will be activated if no key is
|
||||
* explicitly set */
|
||||
* explicitly set
|
||||
*/
|
||||
if (key == sec.active_key)
|
||||
sec.flags |= SEC_ACTIVE_KEY;
|
||||
ieee->crypt_info.tx_keyidx = key;
|
||||
|
@ -451,7 +455,8 @@ int rtllib_wx_set_encode(struct rtllib_device *ieee,
|
|||
"OPEN" : "SHARED KEY");
|
||||
|
||||
/* For now we just support WEP, so only set that security level...
|
||||
* TODO: When WPA is added this is one place that needs to change */
|
||||
* TODO: When WPA is added this is one place that needs to change
|
||||
*/
|
||||
sec.flags |= SEC_LEVEL;
|
||||
sec.level = SEC_LEVEL_1; /* 40 and 104 bit WEP */
|
||||
|
||||
|
@ -462,7 +467,8 @@ int rtllib_wx_set_encode(struct rtllib_device *ieee,
|
|||
* generate new IEEE 802.11 authentication which may end up in looping
|
||||
* with IEEE 802.1X. If your hardware requires a reset after WEP
|
||||
* configuration (for example... Prism2), implement the reset_port in
|
||||
* the callbacks structures used to initialize the 802.11 stack. */
|
||||
* the callbacks structures used to initialize the 802.11 stack.
|
||||
*/
|
||||
if (ieee->reset_on_keychange &&
|
||||
ieee->iw_mode != IW_MODE_INFRA &&
|
||||
ieee->reset_port && ieee->reset_port(dev)) {
|
||||
|
@ -791,8 +797,7 @@ int rtllib_wx_set_auth(struct rtllib_device *ieee,
|
|||
case IW_AUTH_CIPHER_PAIRWISE:
|
||||
case IW_AUTH_CIPHER_GROUP:
|
||||
case IW_AUTH_KEY_MGMT:
|
||||
/*
|
||||
* Host AP driver does not use these parameters and allows
|
||||
/* Host AP driver does not use these parameters and allows
|
||||
* wpa_supplicant to control them internally.
|
||||
*/
|
||||
break;
|
||||
|
|
Загрузка…
Ссылка в новой задаче