diff options
author | Warner Losh <imp@FreeBSD.org> | 2002-04-11 07:21:16 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 2002-04-11 07:21:16 +0000 |
commit | 1bd2b5b4cd289645a3fa77a1601dfb74d7ff2d32 (patch) | |
tree | b390bad81164cedb04a4ef4eb55f523388a229a7 /sys/dev/wi/wi_hostap.h | |
parent | 5ed43a1e8e6026bc26ac4effd716e2375053ac78 (diff) | |
download | src-1bd2b5b4cd289645a3fa77a1601dfb74d7ff2d32.tar.gz src-1bd2b5b4cd289645a3fa77a1601dfb74d7ff2d32.zip |
Integrate the hostap stuff that Thomas Skibo <skibo@packbell.net>
wrote. This code was for 4.5-release, so I've ported it to -current
and made a few minor tweaks. The biggest non-style tweak was to not
make access point the default.
More changes will be needed to get this actually working, but I wanted
to get a relatively pure baseline. This doesn't seem to break what
works now.
Notes
Notes:
svn path=/head/; revision=94405
Diffstat (limited to 'sys/dev/wi/wi_hostap.h')
-rw-r--r-- | sys/dev/wi/wi_hostap.h | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/sys/dev/wi/wi_hostap.h b/sys/dev/wi/wi_hostap.h new file mode 100644 index 000000000000..493b5ad15ffa --- /dev/null +++ b/sys/dev/wi/wi_hostap.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2002 + * Thomas Skibo <skibo@pacbell.net>. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Thomas Skibo. + * 4. Neither the name of the author nor the names of any co-contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY Thomas Skibo AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL Thomas Skibo OR HIS DRINKING PALS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef __WI_HOSTAP_H__ +#define __WI_HOSTAP_H__ + +#define WIHAP_MAX_STATIONS 1800 + +struct hostap_sta { + u_int8_t addr[6]; + u_int16_t asid; + u_int16_t flags; + u_int16_t sig_info; /* 15:8 signal, 7:0 noise */ + u_int16_t capinfo; + u_int8_t rates; +}; + +#define HOSTAP_FLAGS_AUTHEN 0x0001 +#define HOSTAP_FLAGS_ASSOC 0x0002 +#define HOSTAP_FLAGS_PERM 0x0004 + +#define SIOCHOSTAP_GET _IOWR('i', 210, struct ifreq) +#define SIOCHOSTAP_ADD _IOWR('i', 211, struct ifreq) +#define SIOCHOSTAP_DEL _IOWR('i', 212, struct ifreq) +#define SIOCHOSTAP_GETALL _IOWR('i', 213, struct ifreq) +#define SIOCHOSTAP_GFLAGS _IOWR('i', 214, struct ifreq) +#define SIOCHOSTAP_SFLAGS _IOWR('i', 215, struct ifreq) + +/* Flags for SIOCHOSTAP_GFLAGS/SFLAGS */ +#define WIHAPFL_ACTIVE 0x0001 +#define WIHAPFL_MAC_FILT 0x0002 + +/* Flags set inernally only: */ +#define WIHAPFL_CANTCHANGE (WIHAPFL_ACTIVE) + +struct hostap_getall { + int nstations; + struct hostap_sta *addr; + int size; +}; + + + +#ifdef _KERNEL +struct wihap_sta_info { + LIST_ENTRY(wihap_sta_info) list; + LIST_ENTRY(wihap_sta_info) hash; + + u_int8_t addr[6]; + u_short flags; + int inactivity_timer; + + u_int16_t asid; + u_int16_t capinfo; + u_int16_t sig_info; /* 15:8 signal, 7:0 noise */ + u_int8_t rates; + u_int8_t tx_curr_rate; + u_int8_t tx_max_rate; +}; + +#define WI_SIFLAGS_ASSOC HOSTAP_FLAGS_ASSOC +#define WI_SIFLAGS_AUTHEN HOSTAP_FLAGS_AUTHEN +#define WI_SIFLAGS_PERM HOSTAP_FLAGS_PERM + +#define WI_STA_HASH_SIZE 113 + +#if WI_STA_HASH_SIZE*16 >= 2007 /* will generate ASID's too large. */ +#error "WI_STA_HASH_SIZE too big" +#endif +#if WI_STA_HASH_SIZE*16 < WIHAP_MAX_STATIONS +#error "WI_STA_HASH_SIZE too small" +#endif + +struct wihap_info { + LIST_HEAD(sta_list, wihap_sta_info) sta_list; + LIST_HEAD(sta_hash, wihap_sta_info) sta_hash[WI_STA_HASH_SIZE]; + + u_int16_t apflags; + + int n_stations; + u_int16_t asid_inuse_mask[WI_STA_HASH_SIZE]; + + int inactivity_time; + struct callout_handle hostap_ch; +}; + +#define WIHAP_INTERVAL 5 +#define WIHAP_DFLT_INACTIVITY_TIME (120/WIHAP_INTERVAL) /* 2 minutes */ + +struct wi_softc; +struct wi_frame; + +void wihap_timer __P((void *)); +void wihap_mgmt_input __P((struct wi_softc *, struct wi_frame *, + struct mbuf *)); +int wihap_data_input __P((struct wi_softc *, struct wi_frame *, + struct mbuf *)); +int wihap_check_tx __P((struct wihap_info *, u_int8_t [], + u_int8_t *)); +void wihap_init __P((struct wi_softc *)); +void wihap_shutdown __P((struct wi_softc *)); +int wihap_ioctl __P((struct wi_softc *, u_long, caddr_t)); + +#endif /* _KERNEL */ +#endif /* __WI_HOSTAP_H__ */ |