Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
xcap
xcap-capability-linux
Commits
ff1d2767
Commit
ff1d2767
authored
May 12, 2005
by
Jouni Malinen
Committed by
Jeff Garzik
May 12, 2005
Browse files
Add HostAP wireless driver.
Includes minor cleanups from Adrian Bunk <bunk@stusta.de>.
parent
88d7bd8c
Changes
34
Expand all
Hide whitespace changes
Inline
Side-by-side
MAINTAINERS
View file @
ff1d2767
...
...
@@ -965,6 +965,13 @@ M: mike.miller@hp.com
L: iss_storagedev@hp.com
S: Supported
HOST AP DRIVER
P: Jouni Malinen
M: jkmaline@cc.hut.fi
L: hostap@shmoo.com
W: http://hostap.epitest.fi/
S: Maintained
HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
P: Jaroslav Kysela
M: perex@suse.cz
...
...
drivers/net/wireless/Kconfig
View file @
ff1d2767
...
...
@@ -355,6 +355,8 @@ config PRISM54
say M here and read <file:Documentation/modules.txt>. The module
will be called prism54.ko.
source "drivers/net/wireless/hostap/Kconfig"
# yes, this works even when no drivers are selected
config NET_WIRELESS
bool
...
...
drivers/net/wireless/Makefile
View file @
ff1d2767
...
...
@@ -28,6 +28,8 @@ obj-$(CONFIG_PCMCIA_ATMEL) += atmel_cs.o
obj-$(CONFIG_PRISM54)
+=
prism54/
obj-$(CONFIG_HOSTAP)
+=
hostap/
# 16-bit wireless PCMCIA client drivers
obj-$(CONFIG_PCMCIA_RAYCS)
+=
ray_cs.o
obj-$(CONFIG_PCMCIA_WL3501)
+=
wl3501_cs.o
drivers/net/wireless/airo.c
View file @
ff1d2767
...
...
@@ -1040,7 +1040,7 @@ typedef struct {
u16
status
;
}
WifiCtlHdr
;
WifiCtlHdr
wifictlhdr8023
=
{
static
WifiCtlHdr
wifictlhdr8023
=
{
.
ctlhdr
=
{
.
ctl
=
HOST_DONT_RLSE
,
}
...
...
@@ -1111,13 +1111,13 @@ static int airo_thread(void *data);
static
void
timer_func
(
struct
net_device
*
dev
);
static
int
airo_ioctl
(
struct
net_device
*
dev
,
struct
ifreq
*
rq
,
int
cmd
);
#ifdef WIRELESS_EXT
struct
iw_statistics
*
airo_get_wireless_stats
(
struct
net_device
*
dev
);
static
struct
iw_statistics
*
airo_get_wireless_stats
(
struct
net_device
*
dev
);
static
void
airo_read_wireless_stats
(
struct
airo_info
*
local
);
#endif
/* WIRELESS_EXT */
#ifdef CISCO_EXT
static
int
readrids
(
struct
net_device
*
dev
,
aironet_ioctl
*
comp
);
static
int
writerids
(
struct
net_device
*
dev
,
aironet_ioctl
*
comp
);
int
flashcard
(
struct
net_device
*
dev
,
aironet_ioctl
*
comp
);
static
int
flashcard
(
struct
net_device
*
dev
,
aironet_ioctl
*
comp
);
#endif
/* CISCO_EXT */
#ifdef MICSUPPORT
static
void
micinit
(
struct
airo_info
*
ai
);
...
...
@@ -1223,6 +1223,12 @@ static int setup_proc_entry( struct net_device *dev,
static
int
takedown_proc_entry
(
struct
net_device
*
dev
,
struct
airo_info
*
apriv
);
static
int
cmdreset
(
struct
airo_info
*
ai
);
static
int
setflashmode
(
struct
airo_info
*
ai
);
static
int
flashgchar
(
struct
airo_info
*
ai
,
int
matchbyte
,
int
dwelltime
);
static
int
flashputbuf
(
struct
airo_info
*
ai
);
static
int
flashrestart
(
struct
airo_info
*
ai
,
struct
net_device
*
dev
);
#ifdef MICSUPPORT
/***********************************************************************
* MIC ROUTINES *
...
...
@@ -1231,10 +1237,11 @@ static int takedown_proc_entry( struct net_device *dev,
static
int
RxSeqValid
(
struct
airo_info
*
ai
,
miccntx
*
context
,
int
mcast
,
u32
micSeq
);
static
void
MoveWindow
(
miccntx
*
context
,
u32
micSeq
);
void
emmh32_setseed
(
emmh32_context
*
context
,
u8
*
pkey
,
int
keylen
,
struct
crypto_tfm
*
);
void
emmh32_init
(
emmh32_context
*
context
);
void
emmh32_update
(
emmh32_context
*
context
,
u8
*
pOctets
,
int
len
);
void
emmh32_final
(
emmh32_context
*
context
,
u8
digest
[
4
]);
static
void
emmh32_setseed
(
emmh32_context
*
context
,
u8
*
pkey
,
int
keylen
,
struct
crypto_tfm
*
);
static
void
emmh32_init
(
emmh32_context
*
context
);
static
void
emmh32_update
(
emmh32_context
*
context
,
u8
*
pOctets
,
int
len
);
static
void
emmh32_final
(
emmh32_context
*
context
,
u8
digest
[
4
]);
static
int
flashpchar
(
struct
airo_info
*
ai
,
int
byte
,
int
dwelltime
);
/* micinit - Initialize mic seed */
...
...
@@ -1312,7 +1319,7 @@ static int micsetup(struct airo_info *ai) {
return
SUCCESS
;
}
char
micsnap
[]
=
{
0xAA
,
0xAA
,
0x03
,
0x00
,
0x40
,
0x96
,
0x00
,
0x02
};
static
char
micsnap
[]
=
{
0xAA
,
0xAA
,
0x03
,
0x00
,
0x40
,
0x96
,
0x00
,
0x02
};
/*===========================================================================
* Description: Mic a packet
...
...
@@ -1567,7 +1574,7 @@ static void MoveWindow(miccntx *context, u32 micSeq)
static
unsigned
char
aes_counter
[
16
];
/* expand the key to fill the MMH coefficient array */
void
emmh32_setseed
(
emmh32_context
*
context
,
u8
*
pkey
,
int
keylen
,
struct
crypto_tfm
*
tfm
)
static
void
emmh32_setseed
(
emmh32_context
*
context
,
u8
*
pkey
,
int
keylen
,
struct
crypto_tfm
*
tfm
)
{
/* take the keying material, expand if necessary, truncate at 16-bytes */
/* run through AES counter mode to generate context->coeff[] */
...
...
@@ -1599,7 +1606,7 @@ void emmh32_setseed(emmh32_context *context, u8 *pkey, int keylen, struct crypto
}
/* prepare for calculation of a new mic */
void
emmh32_init
(
emmh32_context
*
context
)
static
void
emmh32_init
(
emmh32_context
*
context
)
{
/* prepare for new mic calculation */
context
->
accum
=
0
;
...
...
@@ -1607,7 +1614,7 @@ void emmh32_init(emmh32_context *context)
}
/* add some bytes to the mic calculation */
void
emmh32_update
(
emmh32_context
*
context
,
u8
*
pOctets
,
int
len
)
static
void
emmh32_update
(
emmh32_context
*
context
,
u8
*
pOctets
,
int
len
)
{
int
coeff_position
,
byte_position
;
...
...
@@ -1649,7 +1656,7 @@ void emmh32_update(emmh32_context *context, u8 *pOctets, int len)
static
u32
mask32
[
4
]
=
{
0x00000000L
,
0xFF000000L
,
0xFFFF0000L
,
0xFFFFFF00L
};
/* calculate the mic */
void
emmh32_final
(
emmh32_context
*
context
,
u8
digest
[
4
])
static
void
emmh32_final
(
emmh32_context
*
context
,
u8
digest
[
4
])
{
int
coeff_position
,
byte_position
;
u32
val
;
...
...
@@ -2251,7 +2258,7 @@ static void airo_read_stats(struct airo_info *ai) {
ai
->
stats
.
rx_fifo_errors
=
vals
[
0
];
}
struct
net_device_stats
*
airo_get_stats
(
struct
net_device
*
dev
)
static
struct
net_device_stats
*
airo_get_stats
(
struct
net_device
*
dev
)
{
struct
airo_info
*
local
=
dev
->
priv
;
...
...
@@ -2410,7 +2417,7 @@ EXPORT_SYMBOL(stop_airo_card);
static
int
add_airo_dev
(
struct
net_device
*
dev
);
int
wll_header_parse
(
struct
sk_buff
*
skb
,
unsigned
char
*
haddr
)
static
int
wll_header_parse
(
struct
sk_buff
*
skb
,
unsigned
char
*
haddr
)
{
memcpy
(
haddr
,
skb
->
mac
.
raw
+
10
,
ETH_ALEN
);
return
ETH_ALEN
;
...
...
@@ -2677,7 +2684,7 @@ static struct net_device *init_wifidev(struct airo_info *ai,
return
dev
;
}
int
reset_card
(
struct
net_device
*
dev
,
int
lock
)
{
static
int
reset_card
(
struct
net_device
*
dev
,
int
lock
)
{
struct
airo_info
*
ai
=
dev
->
priv
;
if
(
lock
&&
down_interruptible
(
&
ai
->
sem
))
...
...
@@ -2692,9 +2699,9 @@ int reset_card( struct net_device *dev , int lock) {
return
0
;
}
struct
net_device
*
_init_airo_card
(
unsigned
short
irq
,
int
port
,
int
is_pcmcia
,
struct
pci_dev
*
pci
,
struct
device
*
dmdev
)
static
struct
net_device
*
_init_airo_card
(
unsigned
short
irq
,
int
port
,
int
is_pcmcia
,
struct
pci_dev
*
pci
,
struct
device
*
dmdev
)
{
struct
net_device
*
dev
;
struct
airo_info
*
ai
;
...
...
@@ -7177,7 +7184,7 @@ static void airo_read_wireless_stats(struct airo_info *local)
local
->
wstats
.
miss
.
beacon
=
vals
[
34
];
}
struct
iw_statistics
*
airo_get_wireless_stats
(
struct
net_device
*
dev
)
static
struct
iw_statistics
*
airo_get_wireless_stats
(
struct
net_device
*
dev
)
{
struct
airo_info
*
local
=
dev
->
priv
;
...
...
@@ -7392,14 +7399,8 @@ static int writerids(struct net_device *dev, aironet_ioctl *comp) {
* Flash command switch table
*/
int
flashcard
(
struct
net_device
*
dev
,
aironet_ioctl
*
comp
)
{
static
int
flashcard
(
struct
net_device
*
dev
,
aironet_ioctl
*
comp
)
{
int
z
;
int
cmdreset
(
struct
airo_info
*
);
int
setflashmode
(
struct
airo_info
*
);
int
flashgchar
(
struct
airo_info
*
,
int
,
int
);
int
flashpchar
(
struct
airo_info
*
,
int
,
int
);
int
flashputbuf
(
struct
airo_info
*
);
int
flashrestart
(
struct
airo_info
*
,
struct
net_device
*
);
/* Only super-user can modify flash */
if
(
!
capable
(
CAP_NET_ADMIN
))
...
...
@@ -7457,7 +7458,7 @@ int flashcard(struct net_device *dev, aironet_ioctl *comp) {
* card.
*/
int
cmdreset
(
struct
airo_info
*
ai
)
{
static
int
cmdreset
(
struct
airo_info
*
ai
)
{
disable_MAC
(
ai
,
1
);
if
(
!
waitbusy
(
ai
)){
...
...
@@ -7481,7 +7482,7 @@ int cmdreset(struct airo_info *ai) {
* mode
*/
int
setflashmode
(
struct
airo_info
*
ai
)
{
static
int
setflashmode
(
struct
airo_info
*
ai
)
{
set_bit
(
FLAG_FLASHING
,
&
ai
->
flags
);
OUT4500
(
ai
,
SWS0
,
FLASH_COMMAND
);
...
...
@@ -7508,7 +7509,7 @@ int setflashmode (struct airo_info *ai) {
* x 50us for echo .
*/
int
flashpchar
(
struct
airo_info
*
ai
,
int
byte
,
int
dwelltime
)
{
static
int
flashpchar
(
struct
airo_info
*
ai
,
int
byte
,
int
dwelltime
)
{
int
echo
;
int
waittime
;
...
...
@@ -7548,7 +7549,7 @@ int flashpchar(struct airo_info *ai,int byte,int dwelltime) {
* Get a character from the card matching matchbyte
* Step 3)
*/
int
flashgchar
(
struct
airo_info
*
ai
,
int
matchbyte
,
int
dwelltime
){
static
int
flashgchar
(
struct
airo_info
*
ai
,
int
matchbyte
,
int
dwelltime
){
int
rchar
;
unsigned
char
rbyte
=
0
;
...
...
@@ -7579,7 +7580,7 @@ int flashgchar(struct airo_info *ai,int matchbyte,int dwelltime){
* send to the card
*/
int
flashputbuf
(
struct
airo_info
*
ai
){
static
int
flashputbuf
(
struct
airo_info
*
ai
){
int
nwords
;
/* Write stuff */
...
...
@@ -7601,7 +7602,7 @@ int flashputbuf(struct airo_info *ai){
/*
*
*/
int
flashrestart
(
struct
airo_info
*
ai
,
struct
net_device
*
dev
){
static
int
flashrestart
(
struct
airo_info
*
ai
,
struct
net_device
*
dev
){
int
i
,
status
;
ssleep
(
1
);
/* Added 12/7/00 */
...
...
drivers/net/wireless/hostap/Kconfig
0 → 100644
View file @
ff1d2767
config HOSTAP
tristate "IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)"
depends on NET_RADIO
---help---
Shared driver code for IEEE 802.11b wireless cards based on
Intersil Prism2/2.5/3 chipset. This driver supports so called
Host AP mode that allows the card to act as an IEEE 802.11
access point.
In addition, this includes generic IEEE 802.11 code, e.g., for
WEP/TKIP/CCMP encryption that can be shared with other drivers.
See <http://hostap.epitest.fi/> for more information about the
Host AP driver configuration and tools. This site includes
information and tools (hostapd and wpa_supplicant) for WPA/WPA2
support.
This option includes the base Host AP driver code that is shared by
different hardware models. You will also need to enable support for
PLX/PCI/CS version of the driver to actually use the driver.
The driver can be compiled as a module and it will be called
"hostap.ko".
config HOSTAP_WEP
tristate "IEEE 802.11 WEP encryption"
depends on HOSTAP
select CRYPTO
---help---
Software implementation of IEEE 802.11 WEP encryption.
This can be compiled as a modules and it will be called
"hostap_crypt_wep.ko".
config HOSTAP_TKIP
tristate "IEEE 802.11 TKIP encryption"
depends on HOSTAP
select CRYPTO
---help---
Software implementation of IEEE 802.11 TKIP encryption.
This can be compiled as a modules and it will be called
"hostap_crypt_tkip.ko".
config HOSTAP_CCMP
tristate "IEEE 802.11 CCMP encryption"
depends on HOSTAP
select CRYPTO
---help---
Software implementation of IEEE 802.11 CCMP encryption.
This can be compiled as a modules and it will be called
"hostap_crypt_ccmp.ko".
config HOSTAP_FIRMWARE
bool "Support downloading firmware images with Host AP driver"
depends on HOSTAP
---help---
Configure Host AP driver to include support for firmware image
download. Current version supports only downloading to volatile, i.e.,
RAM memory. Flash upgrade is not yet supported.
Firmware image downloading needs user space tool, prism2_srec. It is
available from http://hostap.epitest.fi/.
config HOSTAP_PLX
tristate "Host AP driver for Prism2/2.5/3 in PLX9052 PCI adaptors"
depends on PCI && HOSTAP
---help---
Host AP driver's version for Prism2/2.5/3 PC Cards in PLX9052 based
PCI adaptors.
"Host AP support for Prism2/2.5/3 IEEE 802.11b" is required for this
driver and its help text includes more information about the Host AP
driver.
The driver can be compiled as a module and will be named
"hostap_plx.ko".
config HOSTAP_PCI
tristate "Host AP driver for Prism2.5 PCI adaptors"
depends on PCI && HOSTAP
---help---
Host AP driver's version for Prism2.5 PCI adaptors.
"Host AP support for Prism2/2.5/3 IEEE 802.11b" is required for this
driver and its help text includes more information about the Host AP
driver.
The driver can be compiled as a module and will be named
"hostap_pci.ko".
config HOSTAP_CS
tristate "Host AP driver for Prism2/2.5/3 PC Cards"
depends on PCMCIA!=n && HOSTAP
---help---
Host AP driver's version for Prism2/2.5/3 PC Cards.
"Host AP support for Prism2/2.5/3 IEEE 802.11b" is required for this
driver and its help text includes more information about the Host AP
driver.
The driver can be compiled as a module and will be named
"hostap_cs.ko".
drivers/net/wireless/hostap/Makefile
0 → 100644
View file @
ff1d2767
obj-$(CONFIG_HOSTAP)
+=
hostap.o
obj-$(CONFIG_HOSTAP_WEP)
+=
hostap_crypt_wep.o
obj-$(CONFIG_HOSTAP_TKIP)
+=
hostap_crypt_tkip.o
obj-$(CONFIG_HOSTAP_CCMP)
+=
hostap_crypt_ccmp.o
obj-$(CONFIG_HOSTAP_CS)
+=
hostap_cs.o
obj-$(CONFIG_HOSTAP_PLX)
+=
hostap_plx.o
obj-$(CONFIG_HOSTAP_PCI)
+=
hostap_pci.o
drivers/net/wireless/hostap/hostap.c
0 → 100644
View file @
ff1d2767
This diff is collapsed.
Click to expand it.
drivers/net/wireless/hostap/hostap.h
0 → 100644
View file @
ff1d2767
#ifndef HOSTAP_H
#define HOSTAP_H
/* hostap.c */
extern
struct
proc_dir_entry
*
hostap_proc
;
u16
hostap_tx_callback_register
(
local_info_t
*
local
,
void
(
*
func
)(
struct
sk_buff
*
,
int
ok
,
void
*
),
void
*
data
);
int
hostap_tx_callback_unregister
(
local_info_t
*
local
,
u16
idx
);
int
hostap_set_word
(
struct
net_device
*
dev
,
int
rid
,
u16
val
);
int
hostap_set_string
(
struct
net_device
*
dev
,
int
rid
,
const
char
*
val
);
u16
hostap_get_porttype
(
local_info_t
*
local
);
int
hostap_set_encryption
(
local_info_t
*
local
);
int
hostap_set_antsel
(
local_info_t
*
local
);
int
hostap_set_roaming
(
local_info_t
*
local
);
int
hostap_set_auth_algs
(
local_info_t
*
local
);
void
hostap_dump_rx_header
(
const
char
*
name
,
const
struct
hfa384x_rx_frame
*
rx
);
void
hostap_dump_tx_header
(
const
char
*
name
,
const
struct
hfa384x_tx_frame
*
tx
);
int
hostap_80211_header_parse
(
struct
sk_buff
*
skb
,
unsigned
char
*
haddr
);
int
hostap_80211_prism_header_parse
(
struct
sk_buff
*
skb
,
unsigned
char
*
haddr
);
int
hostap_80211_get_hdrlen
(
u16
fc
);
struct
net_device_stats
*
hostap_get_stats
(
struct
net_device
*
dev
);
void
hostap_setup_dev
(
struct
net_device
*
dev
,
local_info_t
*
local
,
int
main_dev
);
void
hostap_set_multicast_list_queue
(
void
*
data
);
int
hostap_set_hostapd
(
local_info_t
*
local
,
int
val
,
int
rtnl_locked
);
int
hostap_set_hostapd_sta
(
local_info_t
*
local
,
int
val
,
int
rtnl_locked
);
void
hostap_cleanup
(
local_info_t
*
local
);
void
hostap_cleanup_handler
(
void
*
data
);
struct
net_device
*
hostap_add_interface
(
struct
local_info
*
local
,
int
type
,
int
rtnl_locked
,
const
char
*
prefix
,
const
char
*
name
);
void
hostap_remove_interface
(
struct
net_device
*
dev
,
int
rtnl_locked
,
int
remove_from_list
);
int
prism2_update_comms_qual
(
struct
net_device
*
dev
);
int
prism2_sta_send_mgmt
(
local_info_t
*
local
,
u8
*
dst
,
u8
stype
,
u8
*
body
,
size_t
bodylen
);
int
prism2_sta_deauth
(
local_info_t
*
local
,
u16
reason
);
/* hostap_proc.c */
void
hostap_init_proc
(
local_info_t
*
local
);
void
hostap_remove_proc
(
local_info_t
*
local
);
/* hostap_info.c */
void
hostap_info_init
(
local_info_t
*
local
);
void
hostap_info_process
(
local_info_t
*
local
,
struct
sk_buff
*
skb
);
#endif
/* HOSTAP_H */
drivers/net/wireless/hostap/hostap_80211.h
0 → 100644
View file @
ff1d2767
#ifndef HOSTAP_80211_H
#define HOSTAP_80211_H
struct
hostap_ieee80211_hdr
{
u16
frame_control
;
u16
duration_id
;
u8
addr1
[
6
];
u8
addr2
[
6
];
u8
addr3
[
6
];
u16
seq_ctrl
;
u8
addr4
[
6
];
}
__attribute__
((
packed
));
struct
hostap_ieee80211_mgmt
{
u16
frame_control
;
u16
duration
;
u8
da
[
6
];
u8
sa
[
6
];
u8
bssid
[
6
];
u16
seq_ctrl
;
union
{
struct
{
u16
auth_alg
;
u16
auth_transaction
;
u16
status_code
;
/* possibly followed by Challenge text */
u8
variable
[
0
];
}
__attribute__
((
packed
))
auth
;
struct
{
u16
reason_code
;
}
__attribute__
((
packed
))
deauth
;
struct
{
u16
capab_info
;
u16
listen_interval
;
/* followed by SSID and Supported rates */
u8
variable
[
0
];
}
__attribute__
((
packed
))
assoc_req
;
struct
{
u16
capab_info
;
u16
status_code
;
u16
aid
;
/* followed by Supported rates */
u8
variable
[
0
];
}
__attribute__
((
packed
))
assoc_resp
,
reassoc_resp
;
struct
{
u16
capab_info
;
u16
listen_interval
;
u8
current_ap
[
6
];
/* followed by SSID and Supported rates */
u8
variable
[
0
];
}
__attribute__
((
packed
))
reassoc_req
;
struct
{
u16
reason_code
;
}
__attribute__
((
packed
))
disassoc
;
struct
{
}
__attribute__
((
packed
))
probe_req
;
struct
{
u8
timestamp
[
8
];
u16
beacon_int
;
u16
capab_info
;
/* followed by some of SSID, Supported rates,
* FH Params, DS Params, CF Params, IBSS Params, TIM */
u8
variable
[
0
];
}
__attribute__
((
packed
))
beacon
,
probe_resp
;
}
u
;
}
__attribute__
((
packed
));
#define IEEE80211_MGMT_HDR_LEN 24
#define IEEE80211_DATA_HDR3_LEN 24
#define IEEE80211_DATA_HDR4_LEN 30
struct
hostap_80211_rx_status
{
u32
mac_time
;
u8
signal
;
u8
noise
;
u16
rate
;
/* in 100 kbps */
};
void
hostap_80211_rx
(
struct
net_device
*
dev
,
struct
sk_buff
*
skb
,
struct
hostap_80211_rx_status
*
rx_stats
);
/* prism2_rx_80211 'type' argument */
enum
{
PRISM2_RX_MONITOR
,
PRISM2_RX_MGMT
,
PRISM2_RX_NON_ASSOC
,
PRISM2_RX_NULLFUNC_ACK
};
int
prism2_rx_80211
(
struct
net_device
*
dev
,
struct
sk_buff
*
skb
,
struct
hostap_80211_rx_status
*
rx_stats
,
int
type
);
void
hostap_80211_rx
(
struct
net_device
*
dev
,
struct
sk_buff
*
skb
,
struct
hostap_80211_rx_status
*
rx_stats
);
void
hostap_dump_rx_80211
(
const
char
*
name
,
struct
sk_buff
*
skb
,
struct
hostap_80211_rx_status
*
rx_stats
);
void
hostap_dump_tx_80211
(
const
char
*
name
,
struct
sk_buff
*
skb
);
int
hostap_data_start_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
);
int
hostap_mgmt_start_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
);
struct
sk_buff
*
hostap_tx_encrypt
(
struct
sk_buff
*
skb
,
struct
prism2_crypt_data
*
crypt
);
int
hostap_master_start_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
);
#endif
/* HOSTAP_80211_H */
drivers/net/wireless/hostap/hostap_80211_rx.c
0 → 100644
View file @
ff1d2767
This diff is collapsed.
Click to expand it.
drivers/net/wireless/hostap/hostap_80211_tx.c
0 → 100644
View file @
ff1d2767
void
hostap_dump_tx_80211
(
const
char
*
name
,
struct
sk_buff
*
skb
)
{
struct
hostap_ieee80211_hdr
*
hdr
;
u16
fc
;
hdr
=
(
struct
hostap_ieee80211_hdr
*
)
skb
->
data
;
printk
(
KERN_DEBUG
"%s: TX len=%d jiffies=%ld
\n
"
,
name
,
skb
->
len
,
jiffies
);
if
(
skb
->
len
<
2
)
return
;
fc
=
le16_to_cpu
(
hdr
->
frame_control
);
printk
(
KERN_DEBUG
" FC=0x%04x (type=%d:%d)%s%s"
,
fc
,
WLAN_FC_GET_TYPE
(
fc
),
WLAN_FC_GET_STYPE
(
fc
),
fc
&
WLAN_FC_TODS
?
" [ToDS]"
:
""
,
fc
&
WLAN_FC_FROMDS
?
" [FromDS]"
:
""
);
if
(
skb
->
len
<
IEEE80211_DATA_HDR3_LEN
)
{
printk
(
"
\n
"
);
return
;
}
printk
(
" dur=0x%04x seq=0x%04x
\n
"
,
le16_to_cpu
(
hdr
->
duration_id
),
le16_to_cpu
(
hdr
->
seq_ctrl
));
printk
(
KERN_DEBUG
" A1="
MACSTR
" A2="
MACSTR
" A3="
MACSTR
,
MAC2STR
(
hdr
->
addr1
),
MAC2STR
(
hdr
->
addr2
),
MAC2STR
(
hdr
->
addr3
));
if
(
skb
->
len
>=
30
)
printk
(
" A4="
MACSTR
,
MAC2STR
(
hdr
->
addr4
));
printk
(
"
\n
"
);
}
/* hard_start_xmit function for data interfaces (wlan#, wlan#wds#, wlan#sta)
* Convert Ethernet header into a suitable IEEE 802.11 header depending on
* device configuration. */
int
hostap_data_start_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
{
struct
hostap_interface
*
iface
;
local_info_t
*
local
;
int
need_headroom
,
need_tailroom
=
0
;
struct
hostap_ieee80211_hdr
hdr
;
u16
fc
,
ethertype
=
0
;
enum
{
WDS_NO
=
0
,
WDS_OWN_FRAME
,
WDS_COMPLIANT_FRAME
}
use_wds
=
WDS_NO
;
u8
*
encaps_data
;
int
hdr_len
,
encaps_len
,
skip_header_bytes
;
int
to_assoc_ap
=
0
;
struct
hostap_skb_tx_data
*
meta
;
iface
=
netdev_priv
(
dev
);
local
=
iface
->
local
;
if
(
skb
->
len
<
ETH_HLEN
)
{
printk
(
KERN_DEBUG
"%s: hostap_data_start_xmit: short skb "
"(len=%d)
\n
"
,
dev
->
name
,
skb
->
len
);
kfree_skb
(
skb
);
return
0
;
}
if
(
local
->
ddev
!=
dev
)
{
use_wds
=
(
local
->
iw_mode
==
IW_MODE_MASTER
&&
!
(
local
->
wds_type
&
HOSTAP_WDS_STANDARD_FRAME
))
?
WDS_OWN_FRAME
:
WDS_COMPLIANT_FRAME
;
if
(
dev
==
local
->
stadev
)
{
to_assoc_ap
=
1
;
use_wds
=
WDS_NO
;
}
else
if
(
dev
==
local
->
apdev
)
{
printk
(
KERN_DEBUG
"%s: prism2_tx: trying to use "
"AP device with Ethernet net dev
\n
"
,
dev
->
name
);
kfree_skb
(
skb
);
return
0
;
}
}
else
{
if
(
local
->
iw_mode
==
IW_MODE_REPEAT
)
{
printk
(
KERN_DEBUG
"%s: prism2_tx: trying to use "
"non-WDS link in Repeater mode
\n
"
,
dev
->
name
);
kfree_skb
(
skb
);
return
0
;
}
else
if
(
local
-&g