[pkg-wpa-devel] [sven@svenhartge.de: Re: Bug#354388: wpasupplicant: please recompile with madwifi-dev]

Reinhard Tartler siretart at tauware.de
Fri Mar 3 12:38:33 UTC 2006


Thank you for your patch, sven, I'm forwarding it to the pkg-wpa-devel
mailing list. Kel is working on both packages, so maybe he can comment
on how to proceed from this point..

Gruesse,
	Reinhard

----- Forwarded message from Sven Hartge <sven at svenhartge.de> -----

Envelope-to: siretart at tauware.de
Delivery-date: Mon, 27 Feb 2006 00:28:57 +0100
Date: Mon, 27 Feb 2006 00:28:43 +0100 (CET)
From: Sven Hartge <sven at svenhartge.de>
To: Reinhard Tartler <siretart at tauware.de>
Subject: Re: Bug#354388: wpasupplicant: please recompile with madwifi-dev
X-Bogosity: Ham, tests=bogofilter, spamicity=0.025402, version=0.94.4
X-Spam-Level: 
X-Spam-Status: No, score=0.3 required=5.5 tests=AWL,UPPERCASE_25_50 
	autolearn=disabled version=3.0.3

Um 13:32 Uhr am 26.02.06 schrieb Sven Hartge:
> Um 12:27 Uhr am 26.02.06 schrieb Reinhard Tartler:
 
>> The current status about that branch can be seen here: 
>> http://svn.debian.org/wsvn/pkg-wpa/branches/wpasupplicant-0.5/?rev=0&sc=0
 
> Ich habe mir das Ding einmal ausgecheckt. Mal sehen, wie schwer es ist, 
> den madwifi-ng-Kram da hinein zu bekommen. 

So, hier mein Patch, der einfach die Includes aus madwifi-dev via dpatch 
einbringt und dafür sorgt, das driver_madwifi dagegen kompiliert wird.

Grüße,
S°

-- 
Sven Hartge -- professioneller Unix-Geek
Meine Gedanken im Netz: http://www.svenhartge.de/

Achtung, neue Mail-Adresse: sven at svenhartge.de
Index: debian/patches/09_madwifi-ng_includes.dpatch
===================================================================
--- debian/patches/09_madwifi-ng_includes.dpatch	(revision 0)
+++ debian/patches/09_madwifi-ng_includes.dpatch	(revision 0)
@@ -0,0 +1,1683 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 09_madwifi-ng_includes.dpatch by  <debian at svenhartge.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+ at DPATCH@
+diff -urNad wpasupplicant-0.5~/Makefile wpasupplicant-0.5/Makefile
+--- wpasupplicant-0.5~/Makefile	2006-02-26 13:27:30.000000000 +0100
++++ wpasupplicant-0.5/Makefile	2006-02-26 23:46:29.000000000 +0100
+@@ -106,7 +106,7 @@
+ endif
+ 
+ ifdef CONFIG_DRIVER_MADWIFI
+-CFLAGS += -DCONFIG_DRIVER_MADWIFI
++CFLAGS += -DCONFIG_DRIVER_MADWIFI -I./madwifi/
+ OBJS_d += driver_madwifi.o
+ CONFIG_WIRELESS_EXTENSION=y
+ endif
+diff -urNad wpasupplicant-0.5~/madwifi/include/compat.h wpasupplicant-0.5/madwifi/include/compat.h
+--- wpasupplicant-0.5~/madwifi/include/compat.h	1970-01-01 01:00:00.000000000 +0100
++++ wpasupplicant-0.5/madwifi/include/compat.h	2005-02-16 17:09:10.000000000 +0100
+@@ -0,0 +1,86 @@
++/*-
++ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
++ * 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,
++ *    without modification.
++ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
++ *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
++ *    redistribution must be conditioned upon including a substantially
++ *    similar Disclaimer requirement for further binary redistribution.
++ * 3. Neither the names of the above-listed copyright holders nor the names
++ *    of any contributors may be used to endorse or promote products derived
++ *    from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2 as published by the Free
++ * Software Foundation.
++ *
++ * NO WARRANTY
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
++ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
++ *
++ * $Id: compat.h 846 2005-02-16 16:09:10Z samleffler $
++ */
++#ifndef _ATH_COMPAT_H_
++#define _ATH_COMPAT_H_
++/*
++ * BSD/Linux compatibility shims.  These are used mainly to
++ * minimize differences when importing necesary BSD code.
++ */
++#define	NBBY	8			/* number of bits/byte */
++
++#define	roundup(x, y)	((((x)+((y)-1))/(y))*(y))  /* to any y */
++#define	howmany(x, y)	(((x)+((y)-1))/(y))
++
++/* Bit map related macros. */
++#define	setbit(a,i)	((a)[(i)/NBBY] |= 1<<((i)%NBBY))
++#define	clrbit(a,i)	((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
++#define	isset(a,i)	((a)[(i)/NBBY] & (1<<((i)%NBBY)))
++#define	isclr(a,i)	(((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
++
++#define	__packed	__attribute__((__packed__))
++#define	__printflike(_a,_b) \
++	__attribute__ ((__format__ (__printf__, _a, _b)))
++
++#ifndef ALIGNED_POINTER
++/*
++ * ALIGNED_POINTER is a boolean macro that checks whether an address
++ * is valid to fetch data elements of type t from on this architecture.
++ * This does not reflect the optimal alignment, just the possibility
++ * (within reasonable limits). 
++ *
++ */
++#define ALIGNED_POINTER(p,t)	1
++#endif
++
++#ifdef __KERNEL__
++#include <asm/page.h>
++
++#define	KASSERT(exp, msg) do {			\
++	if (unlikely(!(exp))) {			\
++		printk msg;			\
++		BUG();				\
++	}					\
++} while (0)
++#endif /* __KERNEL__ */
++
++/*
++ * NetBSD/FreeBSD defines for file version.
++ */
++#define	__FBSDID(_s)
++#define	__KERNEL_RCSID(_n,_s)
++#endif /* _ATH_COMPAT_H_ */
+diff -urNad wpasupplicant-0.5~/madwifi/net80211/_ieee80211.h wpasupplicant-0.5/madwifi/net80211/_ieee80211.h
+--- wpasupplicant-0.5~/madwifi/net80211/_ieee80211.h	1970-01-01 01:00:00.000000000 +0100
++++ wpasupplicant-0.5/madwifi/net80211/_ieee80211.h	2005-07-11 15:24:17.000000000 +0200
+@@ -0,0 +1,188 @@
++/*-
++ * Copyright (c) 2001 Atsushi Onoe
++ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
++ * 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. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2 as published by the Free
++ * Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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: src/sys/net80211/_ieee80211.h,v 1.2 2004/12/31 22:42:38 sam Exp $
++ */
++#ifndef _NET80211__IEEE80211_H_
++#define _NET80211__IEEE80211_H_
++
++enum ieee80211_phytype {
++	IEEE80211_T_DS,			/* direct sequence spread spectrum */
++	IEEE80211_T_FH,			/* frequency hopping */
++	IEEE80211_T_OFDM,		/* frequency division multiplexing */
++	IEEE80211_T_TURBO		/* high rate OFDM, aka turbo mode */
++};
++#define	IEEE80211_T_CCK	IEEE80211_T_DS	/* more common nomenclature */
++
++/* XXX not really a mode; there are really multiple PHY's */
++enum ieee80211_phymode {
++	IEEE80211_MODE_AUTO	= 0,	/* autoselect */
++	IEEE80211_MODE_11A	= 1,	/* 5GHz, OFDM */
++	IEEE80211_MODE_11B	= 2,	/* 2GHz, CCK */
++	IEEE80211_MODE_11G	= 3,	/* 2GHz, OFDM */
++	IEEE80211_MODE_FH	= 4,	/* 2GHz, GFSK */
++	IEEE80211_MODE_TURBO_A	= 5,	/* 5GHz, OFDM, 2x clock */
++	IEEE80211_MODE_TURBO_G	= 6	/* 2GHz, OFDM, 2x clock */
++};
++#define	IEEE80211_MODE_MAX	(IEEE80211_MODE_TURBO_G+1)
++
++enum ieee80211_opmode {
++	IEEE80211_M_STA		= 1,	/* infrastructure station */
++	IEEE80211_M_IBSS 	= 0,	/* IBSS (adhoc) station */
++	IEEE80211_M_AHDEMO	= 3,	/* Old lucent compatible adhoc demo */
++	IEEE80211_M_HOSTAP	= 6,	/* Software Access Point */
++	IEEE80211_M_MONITOR	= 8	/* Monitor mode */
++};
++
++/*
++ * 802.11g protection mode.
++ */
++enum ieee80211_protmode {
++	IEEE80211_PROT_NONE	= 0,	/* no protection */
++	IEEE80211_PROT_CTSONLY	= 1,	/* CTS to self */
++	IEEE80211_PROT_RTSCTS	= 2	/* RTS-CTS */
++};
++
++/*
++ * Authentication mode.
++ */
++enum ieee80211_authmode {
++	IEEE80211_AUTH_NONE	= 0,
++	IEEE80211_AUTH_OPEN	= 1,		/* open */
++	IEEE80211_AUTH_SHARED	= 2,		/* shared-key */
++	IEEE80211_AUTH_8021X	= 3,		/* 802.1x */
++	IEEE80211_AUTH_AUTO	= 4,		/* auto-select/accept */
++	/* NB: these are used only for ioctls */
++	IEEE80211_AUTH_WPA	= 5		/* WPA/RSN w/ 802.1x/PSK */
++};
++
++/*
++ * Roaming mode is effectively who controls the operation
++ * of the 802.11 state machine when operating as a station.
++ * State transitions are controlled either by the driver
++ * (typically when management frames are processed by the
++ * hardware/firmware), the host (auto/normal operation of
++ * the 802.11 layer), or explicitly through ioctl requests
++ * when applications like wpa_supplicant want control.
++ */
++enum ieee80211_roamingmode {
++	IEEE80211_ROAMING_DEVICE= 0,	/* driver/hardware control */
++	IEEE80211_ROAMING_AUTO	= 1,	/* 802.11 layer control */
++	IEEE80211_ROAMING_MANUAL= 2	/* application control */
++};
++
++/*
++ * Channels are specified by frequency and attributes.
++ */
++struct ieee80211_channel {
++	u_int16_t	ic_freq;	/* setting in Mhz */
++	u_int16_t	ic_flags;	/* see below */
++};
++
++#define	IEEE80211_CHAN_MAX	255
++#define	IEEE80211_CHAN_BYTES	32	/* howmany(IEEE80211_CHAN_MAX, NBBY) */
++#define	IEEE80211_CHAN_ANY	0xffff	/* token for ``any channel'' */
++#define	IEEE80211_CHAN_ANYC \
++	((struct ieee80211_channel *) IEEE80211_CHAN_ANY)
++
++/* bits 0-3 are for private use by drivers */
++/* channel attributes */
++#define	IEEE80211_CHAN_TURBO	0x0010	/* Turbo channel */
++#define	IEEE80211_CHAN_CCK	0x0020	/* CCK channel */
++#define	IEEE80211_CHAN_OFDM	0x0040	/* OFDM channel */
++#define	IEEE80211_CHAN_2GHZ	0x0080	/* 2 GHz spectrum channel. */
++#define	IEEE80211_CHAN_5GHZ	0x0100	/* 5 GHz spectrum channel */
++#define	IEEE80211_CHAN_PASSIVE	0x0200	/* Only passive scan allowed */
++#define	IEEE80211_CHAN_DYN	0x0400	/* Dynamic CCK-OFDM channel */
++#define	IEEE80211_CHAN_GFSK	0x0800	/* GFSK channel (FHSS PHY) */
++
++/*
++ * Useful combinations of channel characteristics.
++ */
++#define	IEEE80211_CHAN_FHSS \
++	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_GFSK)
++#define	IEEE80211_CHAN_A \
++	(IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
++#define	IEEE80211_CHAN_B \
++	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
++#define	IEEE80211_CHAN_PUREG \
++	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM)
++#define	IEEE80211_CHAN_G \
++	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
++#define	IEEE80211_CHAN_T \
++	(IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
++#define	IEEE80211_CHAN_108G \
++	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
++
++#define	IEEE80211_IS_CHAN_FHSS(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_FHSS) == IEEE80211_CHAN_FHSS)
++#define	IEEE80211_IS_CHAN_A(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_A) == IEEE80211_CHAN_A)
++#define	IEEE80211_IS_CHAN_B(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_B) == IEEE80211_CHAN_B)
++#define	IEEE80211_IS_CHAN_PUREG(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_PUREG) == IEEE80211_CHAN_PUREG)
++#define	IEEE80211_IS_CHAN_G(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_G) == IEEE80211_CHAN_G)
++#define	IEEE80211_IS_CHAN_T(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_T) == IEEE80211_CHAN_T)
++#define	IEEE80211_IS_CHAN_108G(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_108G) == IEEE80211_CHAN_108G)
++
++#define	IEEE80211_IS_CHAN_2GHZ(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_2GHZ) != 0)
++#define	IEEE80211_IS_CHAN_5GHZ(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_5GHZ) != 0)
++#define	IEEE80211_IS_CHAN_OFDM(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_OFDM) != 0)
++#define	IEEE80211_IS_CHAN_CCK(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_CCK) != 0)
++#define	IEEE80211_IS_CHAN_GFSK(_c) \
++	(((_c)->ic_flags & IEEE80211_CHAN_GFSK) != 0)
++
++/* ni_chan encoding for FH phy */
++#define	IEEE80211_FH_CHANMOD	80
++#define	IEEE80211_FH_CHAN(set,pat)	(((set)-1)*IEEE80211_FH_CHANMOD+(pat))
++#define	IEEE80211_FH_CHANSET(chan)	((chan)/IEEE80211_FH_CHANMOD+1)
++#define	IEEE80211_FH_CHANPAT(chan)	((chan)%IEEE80211_FH_CHANMOD)
++
++/*
++ * 802.11 rate set.
++ */
++#define	IEEE80211_RATE_SIZE	8		/* 802.11 standard */
++#define	IEEE80211_RATE_MAXSIZE	15		/* max rates we'll handle */
++
++struct ieee80211_rateset {
++	u_int8_t		rs_nrates;
++	u_int8_t		rs_rates[IEEE80211_RATE_MAXSIZE];
++};
++
++#endif /* _NET80211__IEEE80211_H_ */
+diff -urNad wpasupplicant-0.5~/madwifi/net80211/ieee80211.h wpasupplicant-0.5/madwifi/net80211/ieee80211.h
+--- wpasupplicant-0.5~/madwifi/net80211/ieee80211.h	1970-01-01 01:00:00.000000000 +0100
++++ wpasupplicant-0.5/madwifi/net80211/ieee80211.h	2005-07-11 15:24:17.000000000 +0200
+@@ -0,0 +1,631 @@
++/*-
++ * Copyright (c) 2001 Atsushi Onoe
++ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
++ * 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. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2 as published by the Free
++ * Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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: src/sys/net80211/ieee80211.h,v 1.8 2004/12/31 22:44:26 sam Exp $
++ */
++#ifndef _NET80211_IEEE80211_H_
++#define _NET80211_IEEE80211_H_
++
++/*
++ * 802.11 protocol definitions.
++ */
++
++#define	IEEE80211_ADDR_LEN	6		/* size of 802.11 address */
++/* is 802.11 address multicast/broadcast? */
++#define	IEEE80211_IS_MULTICAST(_a)	(*(_a) & 0x01)
++
++/* IEEE 802.11 PLCP header */
++struct ieee80211_plcp_hdr {
++	u_int16_t	i_sfd;
++	u_int8_t	i_signal;
++	u_int8_t	i_service;
++	u_int16_t	i_length;
++	u_int16_t	i_crc;
++} __packed;
++
++#define IEEE80211_PLCP_SFD      0xF3A0 
++#define IEEE80211_PLCP_SERVICE  0x00
++
++/*
++ * generic definitions for IEEE 802.11 frames
++ */
++struct ieee80211_frame {
++	u_int8_t	i_fc[2];
++	u_int8_t	i_dur[2];
++	u_int8_t	i_addr1[IEEE80211_ADDR_LEN];
++	u_int8_t	i_addr2[IEEE80211_ADDR_LEN];
++	u_int8_t	i_addr3[IEEE80211_ADDR_LEN];
++	u_int8_t	i_seq[2];
++	/* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
++	/* see below */
++} __packed;
++
++struct ieee80211_qosframe {
++	u_int8_t	i_fc[2];
++	u_int8_t	i_dur[2];
++	u_int8_t	i_addr1[IEEE80211_ADDR_LEN];
++	u_int8_t	i_addr2[IEEE80211_ADDR_LEN];
++	u_int8_t	i_addr3[IEEE80211_ADDR_LEN];
++	u_int8_t	i_seq[2];
++	u_int8_t	i_qos[2];
++	/* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
++	/* see below */
++} __packed;
++
++struct ieee80211_qoscntl {
++	u_int8_t	i_qos[2];
++};
++
++struct ieee80211_frame_addr4 {
++	u_int8_t	i_fc[2];
++	u_int8_t	i_dur[2];
++	u_int8_t	i_addr1[IEEE80211_ADDR_LEN];
++	u_int8_t	i_addr2[IEEE80211_ADDR_LEN];
++	u_int8_t	i_addr3[IEEE80211_ADDR_LEN];
++	u_int8_t	i_seq[2];
++	u_int8_t	i_addr4[IEEE80211_ADDR_LEN];
++} __packed;
++
++
++struct ieee80211_qosframe_addr4 {
++	u_int8_t	i_fc[2];
++	u_int8_t	i_dur[2];
++	u_int8_t	i_addr1[IEEE80211_ADDR_LEN];
++	u_int8_t	i_addr2[IEEE80211_ADDR_LEN];
++	u_int8_t	i_addr3[IEEE80211_ADDR_LEN];
++	u_int8_t	i_seq[2];
++	u_int8_t	i_addr4[IEEE80211_ADDR_LEN];
++	u_int8_t	i_qos[2];
++} __packed;
++
++#define	IEEE80211_FC0_VERSION_MASK		0x03
++#define	IEEE80211_FC0_VERSION_SHIFT		0
++#define	IEEE80211_FC0_VERSION_0			0x00
++#define	IEEE80211_FC0_TYPE_MASK			0x0c
++#define	IEEE80211_FC0_TYPE_SHIFT		2
++#define	IEEE80211_FC0_TYPE_MGT			0x00
++#define	IEEE80211_FC0_TYPE_CTL			0x04
++#define	IEEE80211_FC0_TYPE_DATA			0x08
++
++#define	IEEE80211_FC0_SUBTYPE_MASK		0xf0
++#define	IEEE80211_FC0_SUBTYPE_SHIFT		4
++/* for TYPE_MGT */
++#define	IEEE80211_FC0_SUBTYPE_ASSOC_REQ		0x00
++#define	IEEE80211_FC0_SUBTYPE_ASSOC_RESP	0x10
++#define	IEEE80211_FC0_SUBTYPE_REASSOC_REQ	0x20
++#define	IEEE80211_FC0_SUBTYPE_REASSOC_RESP	0x30
++#define	IEEE80211_FC0_SUBTYPE_PROBE_REQ		0x40
++#define	IEEE80211_FC0_SUBTYPE_PROBE_RESP	0x50
++#define	IEEE80211_FC0_SUBTYPE_BEACON		0x80
++#define	IEEE80211_FC0_SUBTYPE_ATIM		0x90
++#define	IEEE80211_FC0_SUBTYPE_DISASSOC		0xa0
++#define	IEEE80211_FC0_SUBTYPE_AUTH		0xb0
++#define	IEEE80211_FC0_SUBTYPE_DEAUTH		0xc0
++/* for TYPE_CTL */
++#define	IEEE80211_FC0_SUBTYPE_PS_POLL		0xa0
++#define	IEEE80211_FC0_SUBTYPE_RTS		0xb0
++#define	IEEE80211_FC0_SUBTYPE_CTS		0xc0
++#define	IEEE80211_FC0_SUBTYPE_ACK		0xd0
++#define	IEEE80211_FC0_SUBTYPE_CF_END		0xe0
++#define	IEEE80211_FC0_SUBTYPE_CF_END_ACK	0xf0
++/* for TYPE_DATA (bit combination) */
++#define	IEEE80211_FC0_SUBTYPE_DATA		0x00
++#define	IEEE80211_FC0_SUBTYPE_CF_ACK		0x10
++#define	IEEE80211_FC0_SUBTYPE_CF_POLL		0x20
++#define	IEEE80211_FC0_SUBTYPE_CF_ACPL		0x30
++#define	IEEE80211_FC0_SUBTYPE_NODATA		0x40
++#define	IEEE80211_FC0_SUBTYPE_CFACK		0x50
++#define	IEEE80211_FC0_SUBTYPE_CFPOLL		0x60
++#define	IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK	0x70
++#define	IEEE80211_FC0_SUBTYPE_QOS		0x80
++#define	IEEE80211_FC0_SUBTYPE_QOS_NULL		0xc0
++
++#define	IEEE80211_FC1_DIR_MASK			0x03
++#define	IEEE80211_FC1_DIR_NODS			0x00	/* STA->STA */
++#define	IEEE80211_FC1_DIR_TODS			0x01	/* STA->AP  */
++#define	IEEE80211_FC1_DIR_FROMDS		0x02	/* AP ->STA */
++#define	IEEE80211_FC1_DIR_DSTODS		0x03	/* AP ->AP  */
++
++#define	IEEE80211_FC1_MORE_FRAG			0x04
++#define	IEEE80211_FC1_RETRY			0x08
++#define	IEEE80211_FC1_PWR_MGT			0x10
++#define	IEEE80211_FC1_MORE_DATA			0x20
++#define	IEEE80211_FC1_WEP			0x40
++#define	IEEE80211_FC1_ORDER			0x80
++
++#define	IEEE80211_SEQ_FRAG_MASK			0x000f
++#define	IEEE80211_SEQ_FRAG_SHIFT		0
++#define	IEEE80211_SEQ_SEQ_MASK			0xfff0
++#define	IEEE80211_SEQ_SEQ_SHIFT			4
++
++#define	IEEE80211_NWID_LEN			32
++
++#define	IEEE80211_QOS_TXOP			0x00ff
++/* bit 8 is reserved */
++#define	IEEE80211_QOS_ACKPOLICY			0x60
++#define	IEEE80211_QOS_ACKPOLICY_S		5
++#define	IEEE80211_QOS_ESOP			0x10
++#define	IEEE80211_QOS_ESOP_S			4
++#define	IEEE80211_QOS_TID			0x0f
++
++/* does frame have QoS sequence control data */
++#define	IEEE80211_QOS_HAS_SEQ(wh) \
++	(((wh)->i_fc[0] & \
++	  (IEEE80211_FC0_TYPE_MASK | IEEE80211_FC0_SUBTYPE_QOS)) == \
++	  (IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_QOS))
++
++/*
++ * WME/802.11e information element.
++ */
++struct ieee80211_wme_info {
++	u_int8_t	wme_id;		/* IEEE80211_ELEMID_VENDOR */
++	u_int8_t	wme_len;	/* length in bytes */
++	u_int8_t	wme_oui[3];	/* 0x00, 0x50, 0xf2 */
++	u_int8_t	wme_type;	/* OUI type */
++	u_int8_t	wme_subtype;	/* OUI subtype */
++	u_int8_t	wme_version;	/* spec revision */
++	u_int8_t	wme_info;	/* QoS info */
++} __packed;
++
++/*
++ * WME/802.11e Tspec Element
++ */
++struct ieee80211_wme_tspec {
++	u_int8_t	ts_id;
++	u_int8_t	ts_len;
++	u_int8_t	ts_oui[3];
++	u_int8_t	ts_oui_type;
++	u_int8_t	ts_oui_subtype;
++	u_int8_t	ts_version;
++	u_int8_t	ts_tsinfo[3];
++	u_int8_t	ts_nom_msdu[2];
++	u_int8_t	ts_max_msdu[2];
++	u_int8_t	ts_min_svc[4];
++	u_int8_t	ts_max_svc[4];
++	u_int8_t	ts_inactv_intv[4];
++	u_int8_t	ts_susp_intv[4];
++	u_int8_t	ts_start_svc[4];
++	u_int8_t	ts_min_rate[4];
++	u_int8_t	ts_mean_rate[4];
++	u_int8_t	ts_max_burst[4];
++	u_int8_t	ts_min_phy[4];
++	u_int8_t	ts_peak_rate[4];
++	u_int8_t	ts_delay[4];
++	u_int8_t	ts_surplus[2];
++	u_int8_t	ts_medium_time[2];
++} __packed;
++
++/*
++ * WME AC parameter field
++ */
++struct ieee80211_wme_acparams {
++	u_int8_t	acp_aci_aifsn;
++	u_int8_t	acp_logcwminmax;
++	u_int16_t	acp_txop;
++} __packed;
++
++#define WME_NUM_AC		4	/* 4 AC categories */
++
++#define WME_PARAM_ACI		0x60	/* Mask for ACI field */
++#define WME_PARAM_ACI_S		5	/* Shift for ACI field */
++#define WME_PARAM_ACM		0x10	/* Mask for ACM bit */
++#define WME_PARAM_ACM_S		4	/* Shift for ACM bit */
++#define WME_PARAM_AIFSN		0x0f	/* Mask for aifsn field */
++#define WME_PARAM_AIFSN_S	0	/* Shift for aifsn field */
++#define WME_PARAM_LOGCWMIN	0x0f	/* Mask for CwMin field (in log) */
++#define WME_PARAM_LOGCWMIN_S	0	/* Shift for CwMin field */
++#define WME_PARAM_LOGCWMAX	0xf0	/* Mask for CwMax field (in log) */
++#define WME_PARAM_LOGCWMAX_S	4	/* Shift for CwMax field */
++
++#define WME_AC_TO_TID(_ac) (       \
++	((_ac) == WME_AC_VO) ? 6 : \
++	((_ac) == WME_AC_VI) ? 5 : \
++	((_ac) == WME_AC_BK) ? 1 : \
++	0)
++
++#define TID_TO_WME_AC(_tid) (      \
++	((_tid) < 1) ? WME_AC_BE : \
++	((_tid) < 3) ? WME_AC_BK : \
++	((_tid) < 6) ? WME_AC_VI : \
++	WME_AC_VO)
++
++/*
++ * WME Parameter Element
++ */
++struct ieee80211_wme_param {
++	u_int8_t	param_id;
++	u_int8_t	param_len;
++	u_int8_t	param_oui[3];
++	u_int8_t	param_oui_type;
++	u_int8_t	param_oui_sybtype;
++	u_int8_t	param_version;
++	u_int8_t	param_qosInfo;
++#define	WME_QOSINFO_COUNT	0x0f	/* Mask for param count field */
++	u_int8_t	param_reserved;
++	struct ieee80211_wme_acparams	params_acParams[WME_NUM_AC];
++} __packed;
++
++/*
++ * Management Notification Frame
++ */
++struct ieee80211_mnf {
++	u_int8_t	mnf_category;
++	u_int8_t	mnf_action;
++	u_int8_t	mnf_dialog;
++	u_int8_t	mnf_status;
++} __packed;
++#define	MNF_SETUP_REQ	0
++#define	MNF_SETUP_RESP	1
++#define	MNF_TEARDOWN	2
++
++/*
++ * Control frames.
++ */
++struct ieee80211_frame_min {
++	u_int8_t	i_fc[2];
++	u_int8_t	i_dur[2];
++	u_int8_t	i_addr1[IEEE80211_ADDR_LEN];
++	u_int8_t	i_addr2[IEEE80211_ADDR_LEN];
++	/* FCS */
++} __packed;
++
++struct ieee80211_frame_rts {
++	u_int8_t	i_fc[2];
++	u_int8_t	i_dur[2];
++	u_int8_t	i_ra[IEEE80211_ADDR_LEN];
++	u_int8_t	i_ta[IEEE80211_ADDR_LEN];
++	/* FCS */
++} __packed;
++
++struct ieee80211_frame_cts {
++	u_int8_t	i_fc[2];
++	u_int8_t	i_dur[2];
++	u_int8_t	i_ra[IEEE80211_ADDR_LEN];
++	/* FCS */
++} __packed;
++
++struct ieee80211_frame_ack {
++	u_int8_t	i_fc[2];
++	u_int8_t	i_dur[2];
++	u_int8_t	i_ra[IEEE80211_ADDR_LEN];
++	/* FCS */
++} __packed;
++
++struct ieee80211_frame_pspoll {
++	u_int8_t	i_fc[2];
++	u_int8_t	i_aid[2];
++	u_int8_t	i_bssid[IEEE80211_ADDR_LEN];
++	u_int8_t	i_ta[IEEE80211_ADDR_LEN];
++	/* FCS */
++} __packed;
++
++struct ieee80211_frame_cfend {		/* NB: also CF-End+CF-Ack */
++	u_int8_t	i_fc[2];
++	u_int8_t	i_dur[2];	/* should be zero */
++	u_int8_t	i_ra[IEEE80211_ADDR_LEN];
++	u_int8_t	i_bssid[IEEE80211_ADDR_LEN];
++	/* FCS */
++} __packed;
++
++/*
++ * BEACON management packets
++ *
++ *	octet timestamp[8]
++ *	octet beacon interval[2]
++ *	octet capability information[2]
++ *	information element
++ *		octet elemid
++ *		octet length
++ *		octet information[length]
++ */
++
++typedef u_int8_t *ieee80211_mgt_beacon_t;
++
++#define	IEEE80211_BEACON_INTERVAL(beacon) \
++	((beacon)[8] | ((beacon)[9] << 8))
++#define	IEEE80211_BEACON_CAPABILITY(beacon) \
++	((beacon)[10] | ((beacon)[11] << 8))
++
++#define	IEEE80211_CAPINFO_ESS			0x0001
++#define	IEEE80211_CAPINFO_IBSS			0x0002
++#define	IEEE80211_CAPINFO_CF_POLLABLE		0x0004
++#define	IEEE80211_CAPINFO_CF_POLLREQ		0x0008
++#define	IEEE80211_CAPINFO_PRIVACY		0x0010
++#define	IEEE80211_CAPINFO_SHORT_PREAMBLE	0x0020
++#define	IEEE80211_CAPINFO_PBCC			0x0040
++#define	IEEE80211_CAPINFO_CHNL_AGILITY		0x0080
++/* bits 8-9 are reserved */
++#define	IEEE80211_CAPINFO_SHORT_SLOTTIME	0x0400
++#define	IEEE80211_CAPINFO_RSN			0x0800
++/* bit 12 is reserved */
++#define	IEEE80211_CAPINFO_DSSSOFDM		0x2000
++/* bits 14-15 are reserved */
++
++/*
++ * 802.11i/WPA information element (maximally sized).
++ */
++struct ieee80211_ie_wpa {
++	u_int8_t	wpa_id;		/* IEEE80211_ELEMID_VENDOR */
++	u_int8_t	wpa_len;	/* length in bytes */
++	u_int8_t	wpa_oui[3];	/* 0x00, 0x50, 0xf2 */
++	u_int8_t	wpa_type;	/* OUI type */
++	u_int16_t	wpa_version;	/* spec revision */
++	u_int32_t	wpa_mcipher[1];	/* multicast/group key cipher */
++	u_int16_t	wpa_uciphercnt;	/* # pairwise key ciphers */
++	u_int32_t	wpa_uciphers[8];/* ciphers */
++	u_int16_t	wpa_authselcnt;	/* authentication selector cnt*/
++	u_int32_t	wpa_authsels[8];/* selectors */
++	u_int16_t	wpa_caps;	/* 802.11i capabilities */
++	u_int16_t	wpa_pmkidcnt;	/* 802.11i pmkid count */
++	u_int16_t	wpa_pmkids[8];	/* 802.11i pmkids */
++} __packed;
++
++/*
++ * Management information element payloads.
++ */
++
++enum {
++	IEEE80211_ELEMID_SSID		= 0,
++	IEEE80211_ELEMID_RATES		= 1,
++	IEEE80211_ELEMID_FHPARMS	= 2,
++	IEEE80211_ELEMID_DSPARMS	= 3,
++	IEEE80211_ELEMID_CFPARMS	= 4,
++	IEEE80211_ELEMID_TIM		= 5,
++	IEEE80211_ELEMID_IBSSPARMS	= 6,
++	IEEE80211_ELEMID_COUNTRY	= 7,
++	IEEE80211_ELEMID_CHALLENGE	= 16,
++	/* 17-31 reserved for challenge text extension */
++	IEEE80211_ELEMID_ERP		= 42,
++	IEEE80211_ELEMID_RSN		= 48,
++	IEEE80211_ELEMID_XRATES		= 50,
++	IEEE80211_ELEMID_TPC		= 150,
++	IEEE80211_ELEMID_CCKM		= 156,
++	IEEE80211_ELEMID_VENDOR		= 221	/* vendor private */
++};
++
++struct ieee80211_tim_ie {
++	u_int8_t	tim_ie;			/* IEEE80211_ELEMID_TIM */
++	u_int8_t	tim_len;
++	u_int8_t	tim_count;		/* DTIM count */
++	u_int8_t	tim_period;		/* DTIM period */
++	u_int8_t	tim_bitctl;		/* bitmap control */
++	u_int8_t	tim_bitmap[1];		/* variable-length bitmap */
++} __packed;
++
++struct ieee80211_country_ie {
++	u_int8_t	ie;			/* IEEE80211_ELEMID_COUNTRY */
++	u_int8_t	len;
++	u_int8_t	cc[3];			/* ISO CC+(I)ndoor/(O)utdoor */
++	struct {
++		u_int8_t schan;			/* starting channel */
++		u_int8_t nchan;			/* number channels */
++		u_int8_t maxtxpwr;		/* tx power cap */
++	} band[4] __packed;			/* up to 4 sub bands */
++} __packed;
++
++#define IEEE80211_CHALLENGE_LEN		128
++
++#define	IEEE80211_RATE_BASIC		0x80
++#define	IEEE80211_RATE_VAL		0x7f
++
++/* EPR information element flags */
++#define	IEEE80211_ERP_NON_ERP_PRESENT	0x01
++#define	IEEE80211_ERP_USE_PROTECTION	0x02
++#define	IEEE80211_ERP_LONG_PREAMBLE	0x04
++
++/* Atheros private advanced capabilities info */
++#define	ATHEROS_CAP_TURBO_PRIME		0x01
++#define	ATHEROS_CAP_COMPRESSION		0x02
++#define	ATHEROS_CAP_FAST_FRAME		0x04
++/* bits 3-6 reserved */
++#define	ATHEROS_CAP_BOOST		0x80
++
++#define	ATH_OUI			0x7f0300		/* Atheros OUI */
++#define	ATH_OUI_TYPE		0x01
++#define	ATH_OUI_VERSION		0x01
++
++#define	WPA_OUI			0xf25000
++#define	WPA_OUI_TYPE		0x01
++#define	WPA_VERSION		1		/* current supported version */
++
++#define	WPA_CSE_NULL		0x00
++#define	WPA_CSE_WEP40		0x01
++#define	WPA_CSE_TKIP		0x02
++#define	WPA_CSE_CCMP		0x04
++#define	WPA_CSE_WEP104		0x05
++
++#define	WPA_ASE_NONE		0x00
++#define	WPA_ASE_8021X_UNSPEC	0x01
++#define	WPA_ASE_8021X_PSK	0x02
++
++#define	RSN_OUI			0xac0f00
++#define	RSN_VERSION		1		/* current supported version */
++
++#define	RSN_CSE_NULL		0x00
++#define	RSN_CSE_WEP40		0x01
++#define	RSN_CSE_TKIP		0x02
++#define	RSN_CSE_WRAP		0x03
++#define	RSN_CSE_CCMP		0x04
++#define	RSN_CSE_WEP104		0x05
++
++#define	RSN_ASE_NONE		0x00
++#define	RSN_ASE_8021X_UNSPEC	0x01
++#define	RSN_ASE_8021X_PSK	0x02
++
++#define	RSN_CAP_PREAUTH		0x01
++
++#define	WME_OUI			0xf25000
++#define	WME_OUI_TYPE		0x02
++#define	WME_INFO_OUI_SUBTYPE	0x00
++#define	WME_PARAM_OUI_SUBTYPE	0x01
++#define	WME_VERSION		1
++
++/* WME stream classes */
++#define	WME_AC_BE	0		/* best effort */
++#define	WME_AC_BK	1		/* background */
++#define	WME_AC_VI	2		/* video */
++#define	WME_AC_VO	3		/* voice */
++
++/*
++ * AUTH management packets
++ *
++ *	octet algo[2]
++ *	octet seq[2]
++ *	octet status[2]
++ *	octet chal.id
++ *	octet chal.length
++ *	octet chal.text[253]
++ */
++
++typedef u_int8_t *ieee80211_mgt_auth_t;
++
++#define	IEEE80211_AUTH_ALGORITHM(auth) \
++	((auth)[0] | ((auth)[1] << 8))
++#define	IEEE80211_AUTH_TRANSACTION(auth) \
++	((auth)[2] | ((auth)[3] << 8))
++#define	IEEE80211_AUTH_STATUS(auth) \
++	((auth)[4] | ((auth)[5] << 8))
++
++#define	IEEE80211_AUTH_ALG_OPEN		0x0000
++#define	IEEE80211_AUTH_ALG_SHARED	0x0001
++#define	IEEE80211_AUTH_ALG_LEAP		0x0080
++
++enum {
++	IEEE80211_AUTH_OPEN_REQUEST		= 1,
++	IEEE80211_AUTH_OPEN_RESPONSE		= 2
++};
++
++enum {
++	IEEE80211_AUTH_SHARED_REQUEST		= 1,
++	IEEE80211_AUTH_SHARED_CHALLENGE		= 2,
++	IEEE80211_AUTH_SHARED_RESPONSE		= 3,
++	IEEE80211_AUTH_SHARED_PASS		= 4
++};
++
++/*
++ * Reason codes
++ *
++ * Unlisted codes are reserved
++ */
++
++enum {
++	IEEE80211_REASON_UNSPECIFIED		= 1,
++	IEEE80211_REASON_AUTH_EXPIRE		= 2,
++	IEEE80211_REASON_AUTH_LEAVE		= 3,
++	IEEE80211_REASON_ASSOC_EXPIRE		= 4,
++	IEEE80211_REASON_ASSOC_TOOMANY		= 5,
++	IEEE80211_REASON_NOT_AUTHED		= 6,
++	IEEE80211_REASON_NOT_ASSOCED		= 7,
++	IEEE80211_REASON_ASSOC_LEAVE		= 8,
++	IEEE80211_REASON_ASSOC_NOT_AUTHED	= 9,
++
++	IEEE80211_REASON_RSN_REQUIRED		= 11,
++	IEEE80211_REASON_RSN_INCONSISTENT	= 12,
++	IEEE80211_REASON_IE_INVALID		= 13,
++	IEEE80211_REASON_MIC_FAILURE		= 14,
++
++	IEEE80211_STATUS_SUCCESS		= 0,
++	IEEE80211_STATUS_UNSPECIFIED		= 1,
++	IEEE80211_STATUS_CAPINFO		= 10,
++	IEEE80211_STATUS_NOT_ASSOCED		= 11,
++	IEEE80211_STATUS_OTHER			= 12,
++	IEEE80211_STATUS_ALG			= 13,
++	IEEE80211_STATUS_SEQUENCE		= 14,
++	IEEE80211_STATUS_CHALLENGE		= 15,
++	IEEE80211_STATUS_TIMEOUT		= 16,
++	IEEE80211_STATUS_TOOMANY		= 17,
++	IEEE80211_STATUS_BASIC_RATE		= 18,
++	IEEE80211_STATUS_SP_REQUIRED		= 19,
++	IEEE80211_STATUS_PBCC_REQUIRED		= 20,
++	IEEE80211_STATUS_CA_REQUIRED		= 21,
++	IEEE80211_STATUS_TOO_MANY_STATIONS	= 22,
++	IEEE80211_STATUS_RATES			= 23,
++	IEEE80211_STATUS_SHORTSLOT_REQUIRED	= 25,
++	IEEE80211_STATUS_DSSSOFDM_REQUIRED	= 26
++};
++
++#define	IEEE80211_WEP_KEYLEN		5	/* 40bit */
++#define	IEEE80211_WEP_IVLEN		3	/* 24bit */
++#define	IEEE80211_WEP_KIDLEN		1	/* 1 octet */
++#define	IEEE80211_WEP_CRCLEN		4	/* CRC-32 */
++#define	IEEE80211_WEP_NKID		4	/* number of key ids */
++
++/*
++ * 802.11i defines an extended IV for use with non-WEP ciphers.
++ * When the EXTIV bit is set in the key id byte an additional
++ * 4 bytes immediately follow the IV for TKIP.  For CCMP the
++ * EXTIV bit is likewise set but the 8 bytes represent the
++ * CCMP header rather than IV+extended-IV.
++ */
++#define	IEEE80211_WEP_EXTIV		0x20
++#define	IEEE80211_WEP_EXTIVLEN		4	/* extended IV length */
++#define	IEEE80211_WEP_MICLEN		8	/* trailing MIC */
++
++#define	IEEE80211_CRC_LEN		4
++
++/*
++ * Maximum acceptable MTU is:
++ *	IEEE80211_MAX_LEN - WEP overhead - CRC -
++ *		QoS overhead - RSN/WPA overhead
++ * Min is arbitrarily chosen > IEEE80211_MIN_LEN.  The default
++ * mtu is Ethernet-compatible; it's set by ether_ifattach.
++ */
++#define	IEEE80211_MTU_MAX		2290
++#define	IEEE80211_MTU_MIN		32
++
++#define	IEEE80211_MAX_LEN		(2300 + IEEE80211_CRC_LEN + \
++    (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))
++#define	IEEE80211_ACK_LEN \
++	(sizeof(struct ieee80211_frame_ack) + IEEE80211_CRC_LEN)
++#define	IEEE80211_MIN_LEN \
++	(sizeof(struct ieee80211_frame_min) + IEEE80211_CRC_LEN)
++
++/*
++ * The 802.11 spec says at most 2007 stations may be
++ * associated at once.  For most AP's this is way more
++ * than is feasible so we use a default of 128.  This
++ * number may be overridden by the driver and/or by
++ * user configuration.
++ */
++#define	IEEE80211_AID_MAX		2007
++#define	IEEE80211_AID_DEF		128
++
++#define	IEEE80211_AID(b)	((b) &~ 0xc000)
++
++/* 
++ * RTS frame length parameters.  The default is specified in
++ * the 802.11 spec.  The max may be wrong for jumbo frames.
++ */
++#define	IEEE80211_RTS_DEFAULT		512
++#define	IEEE80211_RTS_MIN		1
++#define	IEEE80211_RTS_MAX		IEEE80211_MAX_LEN
++
++#endif /* _NET80211_IEEE80211_H_ */
+diff -urNad wpasupplicant-0.5~/madwifi/net80211/ieee80211_crypto.h wpasupplicant-0.5/madwifi/net80211/ieee80211_crypto.h
+--- wpasupplicant-0.5~/madwifi/net80211/ieee80211_crypto.h	1970-01-01 01:00:00.000000000 +0100
++++ wpasupplicant-0.5/madwifi/net80211/ieee80211_crypto.h	2005-07-11 15:24:17.000000000 +0200
+@@ -0,0 +1,225 @@
++/*-
++ * Copyright (c) 2001 Atsushi Onoe
++ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
++ * 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. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2 as published by the Free
++ * Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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: src/sys/net80211/ieee80211_crypto.h,v 1.5 2004/12/31 22:44:26 sam Exp $
++ */
++#ifndef _NET80211_IEEE80211_CRYPTO_H_
++#define _NET80211_IEEE80211_CRYPTO_H_
++
++/*
++ * 802.11 protocol crypto-related definitions.
++ */
++#define	IEEE80211_KEYBUF_SIZE	16
++#define	IEEE80211_MICBUF_SIZE	(8+8)	/* space for both tx+rx keys */
++
++/*
++ * Old WEP-style key.  Deprecated.
++ */
++struct ieee80211_wepkey {
++	u_int		wk_len;		/* key length in bytes */
++	u_int8_t	wk_key[IEEE80211_KEYBUF_SIZE];
++};
++
++struct ieee80211_cipher;
++
++/*
++ * Crypto key state.  There is sufficient room for all supported
++ * ciphers (see below).  The underlying ciphers are handled
++ * separately through loadable cipher modules that register with
++ * the generic crypto support.  A key has a reference to an instance
++ * of the cipher; any per-key state is hung off wk_private by the
++ * cipher when it is attached.  Ciphers are automatically called
++ * to detach and cleanup any such state when the key is deleted.
++ *
++ * The generic crypto support handles encap/decap of cipher-related
++ * frame contents for both hardware- and software-based implementations.
++ * A key requiring software crypto support is automatically flagged and
++ * the cipher is expected to honor this and do the necessary work.
++ * Ciphers such as TKIP may also support mixed hardware/software
++ * encrypt/decrypt and MIC processing.
++ */
++/* XXX need key index typedef */
++/* XXX pack better? */
++/* XXX 48-bit rsc/tsc */
++struct ieee80211_key {
++	u_int8_t	wk_keylen;	/* key length in bytes */
++	u_int8_t	wk_flags;
++#define	IEEE80211_KEY_XMIT	0x01	/* key used for xmit */
++#define	IEEE80211_KEY_RECV	0x02	/* key used for recv */
++#define	IEEE80211_KEY_GROUP	0x04	/* key used for WPA group operation */
++#define	IEEE80211_KEY_SWCRYPT	0x10	/* host-based encrypt/decrypt */
++#define	IEEE80211_KEY_SWMIC	0x20	/* host-based enmic/demic */
++	u_int16_t	wk_keyix;	/* key index */
++	u_int8_t	wk_key[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
++#define	wk_txmic	wk_key+IEEE80211_KEYBUF_SIZE+0	/* XXX can't () right */
++#define	wk_rxmic	wk_key+IEEE80211_KEYBUF_SIZE+8	/* XXX can't () right */
++	u_int64_t	wk_keyrsc;	/* key receive sequence counter */
++	u_int64_t	wk_keytsc;	/* key transmit sequence counter */
++	const struct ieee80211_cipher *wk_cipher;
++	void		*wk_private;	/* private cipher state */
++};
++#define	IEEE80211_KEY_COMMON 		/* common flags passed in by apps */\
++	(IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV | IEEE80211_KEY_GROUP)
++
++/*
++ * NB: these values are ordered carefully; there are lots of
++ * of implications in any reordering.  In particular beware
++ * that 4 is not used to avoid conflicting with IEEE80211_F_PRIVACY.
++ */
++#define	IEEE80211_CIPHER_WEP		0
++#define	IEEE80211_CIPHER_TKIP		1
++#define	IEEE80211_CIPHER_AES_OCB	2
++#define	IEEE80211_CIPHER_AES_CCM	3
++#define	IEEE80211_CIPHER_CKIP		5
++#define	IEEE80211_CIPHER_NONE		6	/* pseudo value */
++
++#define	IEEE80211_CIPHER_MAX		(IEEE80211_CIPHER_NONE+1)
++
++#define	IEEE80211_KEYIX_NONE	((u_int16_t) -1)
++
++#if defined(__KERNEL__) || defined(_KERNEL)
++
++struct ieee80211com;
++struct ieee80211_node;
++struct sk_buff;
++
++/*
++ * Crypto state kept in each ieee80211com.  Some of this
++ * can/should be shared when virtual AP's are supported.
++ *
++ * XXX save reference to ieee80211com to properly encapsulate state.
++ * XXX split out crypto capabilities from ic_caps
++ */
++struct ieee80211_crypto_state {
++	struct ieee80211_key	cs_nw_keys[IEEE80211_WEP_NKID];
++	u_int16_t		cs_def_txkey;	/* default/group tx key index */
++
++	int			(*cs_key_alloc)(struct ieee80211com *,
++					const struct ieee80211_key *);
++	int			(*cs_key_delete)(struct ieee80211com *, 
++					const struct ieee80211_key *);
++	int			(*cs_key_set)(struct ieee80211com *,
++					const struct ieee80211_key *,
++					const u_int8_t mac[IEEE80211_ADDR_LEN]);
++	void			(*cs_key_update_begin)(struct ieee80211com *);
++	void			(*cs_key_update_end)(struct ieee80211com *);
++};
++
++extern	void ieee80211_crypto_attach(struct ieee80211com *);
++extern	void ieee80211_crypto_detach(struct ieee80211com *);
++extern	int ieee80211_crypto_newkey(struct ieee80211com *,
++		int cipher, int flags, struct ieee80211_key *);
++extern	int ieee80211_crypto_delkey(struct ieee80211com *,
++		struct ieee80211_key *);
++extern	int ieee80211_crypto_setkey(struct ieee80211com *,
++		struct ieee80211_key *, const u_int8_t macaddr[IEEE80211_ADDR_LEN]);
++extern	void ieee80211_crypto_delglobalkeys(struct ieee80211com *);
++
++/*
++ * Template for a supported cipher.  Ciphers register with the
++ * crypto code and are typically loaded as separate modules
++ * (the null cipher is always present).
++ * XXX may need refcnts
++ */
++struct ieee80211_cipher {
++	const char *ic_name;		/* printable name */
++	u_int	ic_cipher;		/* IEEE80211_CIPHER_* */
++	u_int	ic_header;		/* size of privacy header (bytes) */
++	u_int	ic_trailer;		/* size of privacy trailer (bytes) */
++	u_int	ic_miclen;		/* size of mic trailer (bytes) */
++	void*	(*ic_attach)(struct ieee80211com *, struct ieee80211_key *);
++	void	(*ic_detach)(struct ieee80211_key *);
++	int	(*ic_setkey)(struct ieee80211_key *);
++	int	(*ic_encap)(struct ieee80211_key *, struct sk_buff *,
++			u_int8_t keyid);
++	int	(*ic_decap)(struct ieee80211_key *, struct sk_buff *, int);
++	int	(*ic_enmic)(struct ieee80211_key *, struct sk_buff *, int);
++	int	(*ic_demic)(struct ieee80211_key *, struct sk_buff *, int);
++};
++extern	const struct ieee80211_cipher ieee80211_cipher_none;
++
++extern	void ieee80211_crypto_register(const struct ieee80211_cipher *);
++extern	void ieee80211_crypto_unregister(const struct ieee80211_cipher *);
++extern	int ieee80211_crypto_available(u_int cipher);
++
++extern	struct ieee80211_key *ieee80211_crypto_encap(struct ieee80211com *,
++		struct ieee80211_node *, struct sk_buff *);
++extern	struct ieee80211_key *ieee80211_crypto_decap(struct ieee80211com *,
++		struct ieee80211_node *, struct sk_buff *, int);
++
++/*
++ * Check and remove any MIC.
++ */
++static inline int
++ieee80211_crypto_demic(struct ieee80211com *ic, struct ieee80211_key *k,
++	struct sk_buff *skb, int force)
++{
++	const struct ieee80211_cipher *cip = k->wk_cipher;
++	return (cip->ic_miclen > 0 ? (*cip->ic_demic)(k, skb, force) : 1);
++}
++
++/*
++ * Add any MIC.
++ */
++static inline int
++ieee80211_crypto_enmic(struct ieee80211com *ic,
++	struct ieee80211_key *k, struct sk_buff *skb, int force)
++{
++	const struct ieee80211_cipher *cip = k->wk_cipher;
++	return (cip->ic_miclen > 0 ? (*cip->ic_enmic)(k, skb, force) : 1);
++}
++
++/* 
++ * Reset key state to an unused state.  The crypto
++ * key allocation mechanism insures other state (e.g.
++ * key data) is properly setup before a key is used.
++ */
++static inline void
++ieee80211_crypto_resetkey(struct ieee80211com *ic,
++	struct ieee80211_key *k, u_int16_t ix)
++{
++	k->wk_cipher = &ieee80211_cipher_none;
++	k->wk_private = k->wk_cipher->ic_attach(ic, k);
++	k->wk_keyix = ix;
++	k->wk_flags = IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
++}
++
++/*
++ * Crypt-related notification methods.
++ */
++extern	void ieee80211_notify_replay_failure(struct ieee80211com *,
++		const struct ieee80211_frame *, const struct ieee80211_key *,
++		u_int64_t rsc);
++extern	void ieee80211_notify_michael_failure(struct ieee80211com *,
++		const struct ieee80211_frame *, u_int keyix);
++
++#endif /* defined(__KERNEL__) || defined(_KERNEL) */
++#endif /* _NET80211_IEEE80211_CRYPTO_H_ */
+diff -urNad wpasupplicant-0.5~/madwifi/net80211/ieee80211_ioctl.h wpasupplicant-0.5/madwifi/net80211/ieee80211_ioctl.h
+--- wpasupplicant-0.5~/madwifi/net80211/ieee80211_ioctl.h	1970-01-01 01:00:00.000000000 +0100
++++ wpasupplicant-0.5/madwifi/net80211/ieee80211_ioctl.h	2005-10-19 17:46:20.000000000 +0200
+@@ -0,0 +1,514 @@
++/*	$NetBSD: ieee80211_ioctl.h,v 1.5 2003/10/13 04:16:59 dyoung Exp $	*/
++/*-
++ * Copyright (c) 2001 Atsushi Onoe
++ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
++ * 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. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2 as published by the Free
++ * Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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: src/sys/net80211/ieee80211_ioctl.h,v 1.8 2004/12/31 22:42:38 sam Exp $
++ */
++#ifndef _NET80211_IEEE80211_IOCTL_H_
++#define _NET80211_IEEE80211_IOCTL_H_
++
++#include <net80211/_ieee80211.h>
++
++/*
++ * IEEE 802.11 ioctls.
++ */
++
++/*
++ * Per/node (station) statistics available when operating as an AP.
++ */
++struct ieee80211_nodestats {
++	u_int32_t	ns_rx_data;		/* rx data frames */
++	u_int32_t	ns_rx_mgmt;		/* rx management frames */
++	u_int32_t	ns_rx_ctrl;		/* rx control frames */
++	u_int32_t	ns_rx_ucast;		/* rx unicast frames */
++	u_int32_t	ns_rx_mcast;		/* rx multi/broadcast frames */
++	u_int64_t	ns_rx_bytes;		/* rx data count (bytes) */
++	u_int64_t	ns_rx_beacons;		/* rx beacon frames */
++	u_int32_t	ns_rx_proberesp;	/* rx probe response frames */
++
++	u_int32_t	ns_rx_dup;		/* rx discard 'cuz dup */
++	u_int32_t	ns_rx_noprivacy;	/* rx w/ wep but privacy off */
++	u_int32_t	ns_rx_wepfail;		/* rx wep processing failed */
++	u_int32_t	ns_rx_demicfail;	/* rx demic failed */
++	u_int32_t	ns_rx_decap;		/* rx decapsulation failed */
++	u_int32_t	ns_rx_defrag;		/* rx defragmentation failed */
++	u_int32_t	ns_rx_disassoc;		/* rx disassociation */
++	u_int32_t	ns_rx_deauth;		/* rx deauthentication */
++	u_int32_t	ns_rx_decryptcrc;	/* rx decrypt failed on crc */
++	u_int32_t	ns_rx_unauth;		/* rx on unauthorized port */
++	u_int32_t	ns_rx_unencrypted;	/* rx unecrypted w/ privacy */
++
++	u_int32_t	ns_tx_data;		/* tx data frames */
++	u_int32_t	ns_tx_mgmt;		/* tx management frames */
++	u_int32_t	ns_tx_ucast;		/* tx unicast frames */
++	u_int32_t	ns_tx_mcast;		/* tx multi/broadcast frames */
++	u_int64_t	ns_tx_bytes;		/* tx data count (bytes) */
++	u_int32_t	ns_tx_probereq;		/* tx probe request frames */
++
++	u_int32_t	ns_tx_novlantag;	/* tx discard 'cuz no tag */
++	u_int32_t	ns_tx_vlanmismatch;	/* tx discard 'cuz bad tag */
++
++	u_int32_t	ns_ps_discard;		/* ps discard 'cuz of age */
++
++	/* MIB-related state */
++	u_int32_t	ns_tx_assoc;		/* [re]associations */
++	u_int32_t	ns_tx_assoc_fail;	/* [re]association failures */
++	u_int32_t	ns_tx_auth;		/* [re]authentications */
++	u_int32_t	ns_tx_auth_fail;	/* [re]authentication failures*/
++	u_int32_t	ns_tx_deauth;		/* deauthentications */
++	u_int32_t	ns_tx_deauth_code;	/* last deauth reason */
++	u_int32_t	ns_tx_disassoc;		/* disassociations */
++	u_int32_t	ns_tx_disassoc_code;	/* last disassociation reason */
++};
++
++/*
++ * Summary statistics.
++ */
++struct ieee80211_stats {
++	u_int32_t	is_rx_badversion;	/* rx frame with bad version */
++	u_int32_t	is_rx_tooshort;		/* rx frame too short */
++	u_int32_t	is_rx_wrongbss;		/* rx from wrong bssid */
++	u_int32_t	is_rx_dup;		/* rx discard 'cuz dup */
++	u_int32_t	is_rx_wrongdir;		/* rx w/ wrong direction */
++	u_int32_t	is_rx_mcastecho;	/* rx discard 'cuz mcast echo */
++	u_int32_t	is_rx_notassoc;		/* rx discard 'cuz sta !assoc */
++	u_int32_t	is_rx_noprivacy;	/* rx w/ wep but privacy off */
++	u_int32_t	is_rx_unencrypted;	/* rx w/o wep and privacy on */
++	u_int32_t	is_rx_wepfail;		/* rx wep processing failed */
++	u_int32_t	is_rx_decap;		/* rx decapsulation failed */
++	u_int32_t	is_rx_mgtdiscard;	/* rx discard mgt frames */
++	u_int32_t	is_rx_ctl;		/* rx discard ctrl frames */
++	u_int32_t	is_rx_beacon;		/* rx beacon frames */
++	u_int32_t	is_rx_rstoobig;		/* rx rate set truncated */
++	u_int32_t	is_rx_elem_missing;	/* rx required element missing*/
++	u_int32_t	is_rx_elem_toobig;	/* rx element too big */
++	u_int32_t	is_rx_elem_toosmall;	/* rx element too small */
++	u_int32_t	is_rx_elem_unknown;	/* rx element unknown */
++	u_int32_t	is_rx_badchan;		/* rx frame w/ invalid chan */
++	u_int32_t	is_rx_chanmismatch;	/* rx frame chan mismatch */
++	u_int32_t	is_rx_nodealloc;	/* rx frame dropped */
++	u_int32_t	is_rx_ssidmismatch;	/* rx frame ssid mismatch  */
++	u_int32_t	is_rx_auth_unsupported;	/* rx w/ unsupported auth alg */
++	u_int32_t	is_rx_auth_fail;	/* rx sta auth failure */
++	u_int32_t	is_rx_auth_countermeasures;/* rx auth discard 'cuz CM */
++	u_int32_t	is_rx_assoc_bss;	/* rx assoc from wrong bssid */
++	u_int32_t	is_rx_assoc_notauth;	/* rx assoc w/o auth */
++	u_int32_t	is_rx_assoc_capmismatch;/* rx assoc w/ cap mismatch */
++	u_int32_t	is_rx_assoc_norate;	/* rx assoc w/ no rate match */
++	u_int32_t	is_rx_assoc_badwpaie;	/* rx assoc w/ bad WPA IE */
++	u_int32_t	is_rx_deauth;		/* rx deauthentication */
++	u_int32_t	is_rx_disassoc;		/* rx disassociation */
++	u_int32_t	is_rx_badsubtype;	/* rx frame w/ unknown subtype*/
++	u_int32_t	is_rx_nobuf;		/* rx failed for lack of buf */
++	u_int32_t	is_rx_decryptcrc;	/* rx decrypt failed on crc */
++	u_int32_t	is_rx_ahdemo_mgt;	/* rx discard ahdemo mgt frame*/
++	u_int32_t	is_rx_bad_auth;		/* rx bad auth request */
++	u_int32_t	is_rx_unauth;		/* rx on unauthorized port */
++	u_int32_t	is_rx_badkeyid;		/* rx w/ incorrect keyid */
++	u_int32_t	is_rx_ccmpreplay;	/* rx seq# violation (CCMP) */
++	u_int32_t	is_rx_ccmpformat;	/* rx format bad (CCMP) */
++	u_int32_t	is_rx_ccmpmic;		/* rx MIC check failed (CCMP) */
++	u_int32_t	is_rx_tkipreplay;	/* rx seq# violation (TKIP) */
++	u_int32_t	is_rx_tkipformat;	/* rx format bad (TKIP) */
++	u_int32_t	is_rx_tkipmic;		/* rx MIC check failed (TKIP) */
++	u_int32_t	is_rx_tkipicv;		/* rx ICV check failed (TKIP) */
++	u_int32_t	is_rx_badcipher;	/* rx failed 'cuz key type */
++	u_int32_t	is_rx_nocipherctx;	/* rx failed 'cuz key !setup */
++	u_int32_t	is_rx_acl;		/* rx discard 'cuz acl policy */
++	u_int32_t	is_tx_nobuf;		/* tx failed for lack of buf */
++	u_int32_t	is_tx_nonode;		/* tx failed for no node */
++	u_int32_t	is_tx_unknownmgt;	/* tx of unknown mgt frame */
++	u_int32_t	is_tx_badcipher;	/* tx failed 'cuz key type */
++	u_int32_t	is_tx_nodefkey;		/* tx failed 'cuz no defkey */
++	u_int32_t	is_tx_noheadroom;	/* tx failed 'cuz no space */
++	u_int32_t	is_scan_active;		/* active scans started */
++	u_int32_t	is_scan_passive;	/* passive scans started */
++	u_int32_t	is_node_timeout;	/* nodes timed out inactivity */
++	u_int32_t	is_crypto_nomem;	/* no memory for crypto ctx */
++	u_int32_t	is_crypto_tkip;		/* tkip crypto done in s/w */
++	u_int32_t	is_crypto_tkipenmic;	/* tkip en-MIC done in s/w */
++	u_int32_t	is_crypto_tkipdemic;	/* tkip de-MIC done in s/w */
++	u_int32_t	is_crypto_tkipcm;	/* tkip counter measures */
++	u_int32_t	is_crypto_ccmp;		/* ccmp crypto done in s/w */
++	u_int32_t	is_crypto_wep;		/* wep crypto done in s/w */
++	u_int32_t	is_crypto_setkey_cipher;/* cipher rejected key */
++	u_int32_t	is_crypto_setkey_nokey;	/* no key index for setkey */
++	u_int32_t	is_crypto_delkey;	/* driver key delete failed */
++	u_int32_t	is_crypto_badcipher;	/* unknown cipher */
++	u_int32_t	is_crypto_nocipher;	/* cipher not available */
++	u_int32_t	is_crypto_attachfail;	/* cipher attach failed */
++	u_int32_t	is_crypto_swfallback;	/* cipher fallback to s/w */
++	u_int32_t	is_crypto_keyfail;	/* driver key alloc failed */
++	u_int32_t	is_crypto_enmicfail;	/* en-MIC failed */
++	u_int32_t	is_ibss_capmismatch;	/* merge failed-cap mismatch */
++	u_int32_t	is_ibss_norate;		/* merge failed-rate mismatch */
++	u_int32_t	is_ps_unassoc;		/* ps-poll for unassoc. sta */
++	u_int32_t	is_ps_badaid;		/* ps-poll w/ incorrect aid */
++	u_int32_t	is_ps_qempty;		/* ps-poll w/ nothing to send */
++};
++
++/*
++ * Max size of optional information elements.  We artificially
++ * constrain this; it's limited only by the max frame size (and
++ * the max parameter size of the wireless extensions).
++ */
++#define	IEEE80211_MAX_OPT_IE	256
++
++/*
++ * WPA/RSN get/set key request.  Specify the key/cipher
++ * type and whether the key is to be used for sending and/or
++ * receiving.  The key index should be set only when working
++ * with global keys (use IEEE80211_KEYIX_NONE for ``no index'').
++ * Otherwise a unicast/pairwise key is specified by the bssid
++ * (on a station) or mac address (on an ap).  They key length
++ * must include any MIC key data; otherwise it should be no
++ more than IEEE80211_KEYBUF_SIZE.
++ */
++struct ieee80211req_key {
++	u_int8_t	ik_type;	/* key/cipher type */
++	u_int8_t	ik_pad;
++	u_int16_t	ik_keyix;	/* key index */
++	u_int8_t	ik_keylen;	/* key length in bytes */
++	u_int8_t	ik_flags;
++/* NB: IEEE80211_KEY_XMIT and IEEE80211_KEY_RECV defined elsewhere */
++#define	IEEE80211_KEY_DEFAULT	0x80	/* default xmit key */
++	u_int8_t	ik_macaddr[IEEE80211_ADDR_LEN];
++	u_int64_t	ik_keyrsc;	/* key receive sequence counter */
++	u_int64_t	ik_keytsc;	/* key transmit sequence counter */
++	u_int8_t	ik_keydata[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
++};
++
++/*
++ * Delete a key either by index or address.  Set the index
++ * to IEEE80211_KEYIX_NONE when deleting a unicast key.
++ */
++struct ieee80211req_del_key {
++	u_int8_t	idk_keyix;	/* key index */
++	u_int8_t	idk_macaddr[IEEE80211_ADDR_LEN];
++};
++
++/*
++ * MLME state manipulation request.  IEEE80211_MLME_ASSOC
++ * only makes sense when operating as a station.  The other
++ * requests can be used when operating as a station or an
++ * ap (to effect a station).
++ */
++struct ieee80211req_mlme {
++	u_int8_t	im_op;		/* operation to perform */
++#define	IEEE80211_MLME_ASSOC		1	/* associate station */
++#define	IEEE80211_MLME_DISASSOC		2	/* disassociate station */
++#define	IEEE80211_MLME_DEAUTH		3	/* deauthenticate station */
++#define	IEEE80211_MLME_AUTHORIZE	4	/* authorize station */
++#define	IEEE80211_MLME_UNAUTHORIZE	5	/* unauthorize station */
++#define	IEEE80211_MLME_CLEAR_STATS	6	/* clear station statistic */
++	u_int8_t	im_ssid_len;    /* length of optional ssid */
++	u_int16_t	im_reason;	/* 802.11 reason code */
++	u_int8_t	im_macaddr[IEEE80211_ADDR_LEN];
++	u_int8_t	im_ssid[IEEE80211_NWID_LEN];
++};
++
++/* 
++ * MAC ACL operations.
++ */
++enum {
++	IEEE80211_MACCMD_POLICY_OPEN	= 0,	/* set policy: no ACL's */
++	IEEE80211_MACCMD_POLICY_ALLOW	= 1,	/* set policy: allow traffic */
++	IEEE80211_MACCMD_POLICY_DENY	= 2,	/* set policy: deny traffic */
++	IEEE80211_MACCMD_FLUSH		= 3,	/* flush ACL database */
++	IEEE80211_MACCMD_DETACH		= 4	/* detach ACL policy */
++};
++
++/*
++ * Set the active channel list.  Note this list is
++ * intersected with the available channel list in
++ * calculating the set of channels actually used in
++ * scanning.
++ */
++struct ieee80211req_chanlist {
++	u_int8_t	ic_channels[IEEE80211_CHAN_BYTES];
++};
++
++/*
++ * Get the active channel list info.
++ */
++struct ieee80211req_chaninfo {
++	u_int	ic_nchans;
++	struct ieee80211_channel ic_chans[IEEE80211_CHAN_MAX];
++};
++
++/*
++ * Retrieve the WPA/RSN information element for an associated station.
++ */
++struct ieee80211req_wpaie {
++	u_int8_t	wpa_macaddr[IEEE80211_ADDR_LEN];
++	u_int8_t	wpa_ie[IEEE80211_MAX_OPT_IE];
++};
++
++/*
++ * Retrieve per-node statistics.
++ */
++struct ieee80211req_sta_stats {
++	union {
++		/* NB: explicitly force 64-bit alignment */
++		u_int8_t	macaddr[IEEE80211_ADDR_LEN];
++		u_int64_t	pad;
++	} is_u;
++	struct ieee80211_nodestats is_stats;
++};
++
++/*
++ * Station information block; the mac address is used
++ * to retrieve other data like stats, unicast key, etc.
++ */
++struct ieee80211req_sta_info {
++	u_int16_t	isi_len;		/* length (mult of 4) */
++	u_int16_t	isi_freq;		/* MHz */
++	u_int16_t	isi_flags;		/* channel flags */
++	u_int16_t	isi_state;		/* state flags */
++	u_int8_t	isi_authmode;		/* authentication algorithm */
++	u_int8_t	isi_rssi;
++	u_int8_t	isi_capinfo;		/* capabilities */
++	u_int8_t	isi_erp;		/* ERP element */
++	u_int8_t	isi_macaddr[IEEE80211_ADDR_LEN];
++	u_int8_t	isi_nrates;
++						/* negotiated rates */
++	u_int8_t	isi_rates[IEEE80211_RATE_MAXSIZE];
++	u_int8_t	isi_txrate;		/* index to isi_rates[] */
++	u_int16_t	isi_ie_len;		/* IE length */
++	u_int16_t	isi_associd;		/* assoc response */
++	u_int16_t	isi_txpower;		/* current tx power */
++	u_int16_t	isi_vlan;		/* vlan tag */
++	u_int16_t	isi_txseqs[17];		/* seq to be transmitted */
++	u_int16_t	isi_rxseqs[17];		/* seq previous for qos frames*/
++	u_int16_t	isi_inact;		/* inactivity timer */
++	/* XXX frag state? */
++	/* variable length IE data */
++};
++
++/*
++ * Retrieve per-station information; to retrieve all
++ * specify a mac address of ff:ff:ff:ff:ff:ff.
++ */
++struct ieee80211req_sta_req {
++	union {
++		/* NB: explicitly force 64-bit alignment */
++		u_int8_t	macaddr[IEEE80211_ADDR_LEN];
++		u_int64_t	pad;
++	} is_u;
++	struct ieee80211req_sta_info info[1];	/* variable length */
++};
++
++/*
++ * Get/set per-station tx power cap.
++ */
++struct ieee80211req_sta_txpow {
++	u_int8_t	it_macaddr[IEEE80211_ADDR_LEN];
++	u_int8_t	it_txpow;
++};
++
++/*
++ * WME parameters are set and return using i_val and i_len.
++ * i_val holds the value itself.  i_len specifies the AC
++ * and, as appropriate, then high bit specifies whether the
++ * operation is to be applied to the BSS or ourself.
++ */
++#define	IEEE80211_WMEPARAM_SELF	0x0000		/* parameter applies to self */
++#define	IEEE80211_WMEPARAM_BSS	0x8000		/* parameter applies to BSS */
++#define	IEEE80211_WMEPARAM_VAL	0x7fff		/* parameter value */
++
++#ifdef __FreeBSD__
++/*
++ * FreeBSD-style ioctls.
++ */
++/* the first member must be matched with struct ifreq */
++struct ieee80211req {
++	char		i_name[IFNAMSIZ];	/* if_name, e.g. "wi0" */
++	u_int16_t	i_type;			/* req type */
++	int16_t		i_val;			/* Index or simple value */
++	int16_t		i_len;			/* Index or simple value */
++	void		*i_data;		/* Extra data */
++};
++#define	SIOCS80211		 _IOW('i', 234, struct ieee80211req)
++#define	SIOCG80211		_IOWR('i', 235, struct ieee80211req)
++
++#define IEEE80211_IOC_SSID		1
++#define IEEE80211_IOC_NUMSSIDS		2
++#define IEEE80211_IOC_WEP		3
++#define 	IEEE80211_WEP_NOSUP	-1
++#define 	IEEE80211_WEP_OFF	0
++#define 	IEEE80211_WEP_ON	1
++#define 	IEEE80211_WEP_MIXED	2
++#define IEEE80211_IOC_WEPKEY		4
++#define IEEE80211_IOC_NUMWEPKEYS	5
++#define IEEE80211_IOC_WEPTXKEY		6
++#define IEEE80211_IOC_AUTHMODE		7
++#define IEEE80211_IOC_STATIONNAME	8
++#define IEEE80211_IOC_CHANNEL		9
++#define IEEE80211_IOC_POWERSAVE		10
++#define 	IEEE80211_POWERSAVE_NOSUP	-1
++#define 	IEEE80211_POWERSAVE_OFF		0
++#define 	IEEE80211_POWERSAVE_CAM		1
++#define 	IEEE80211_POWERSAVE_PSP		2
++#define 	IEEE80211_POWERSAVE_PSP_CAM	3
++#define 	IEEE80211_POWERSAVE_ON		IEEE80211_POWERSAVE_CAM
++#define IEEE80211_IOC_POWERSAVESLEEP	11
++#define	IEEE80211_IOC_RTSTHRESHOLD	12
++#define IEEE80211_IOC_PROTMODE		13
++#define 	IEEE80211_PROTMODE_OFF		0
++#define 	IEEE80211_PROTMODE_CTS		1
++#define 	IEEE80211_PROTMODE_RTSCTS	2
++#define	IEEE80211_IOC_TXPOWER		14	/* global tx power limit */
++#define	IEEE80211_IOC_BSSID		15
++#define	IEEE80211_IOC_ROAMING		16	/* roaming mode */
++#define	IEEE80211_IOC_PRIVACY		17	/* privacy invoked */
++#define	IEEE80211_IOC_DROPUNENCRYPTED	18	/* discard unencrypted frames */
++#define	IEEE80211_IOC_WPAKEY		19
++#define	IEEE80211_IOC_DELKEY		20
++#define	IEEE80211_IOC_MLME		21
++#define	IEEE80211_IOC_OPTIE		22	/* optional info. element */
++#define	IEEE80211_IOC_SCAN_REQ		23
++#define	IEEE80211_IOC_SCAN_RESULTS	24
++#define	IEEE80211_IOC_COUNTERMEASURES	25	/* WPA/TKIP countermeasures */
++#define	IEEE80211_IOC_WPA		26	/* WPA mode (0,1,2) */
++#define	IEEE80211_IOC_CHANLIST		27	/* channel list */
++#define	IEEE80211_IOC_WME		28	/* WME mode (on, off) */
++#define	IEEE80211_IOC_HIDESSID		29	/* hide SSID mode (on, off) */
++#define	IEEE80211_IOC_APBRIDGE		30	/* AP inter-sta bridging */
++#define	IEEE80211_IOC_MCASTCIPHER	31	/* multicast/default cipher */
++#define	IEEE80211_IOC_MCASTKEYLEN	32	/* multicast key length */
++#define	IEEE80211_IOC_UCASTCIPHERS	33	/* unicast cipher suites */
++#define	IEEE80211_IOC_UCASTCIPHER	34	/* unicast cipher */
++#define	IEEE80211_IOC_UCASTKEYLEN	35	/* unicast key length */
++#define	IEEE80211_IOC_DRIVER_CAPS	36	/* driver capabilities */
++#define	IEEE80211_IOC_KEYMGTALGS	37	/* key management algorithms */
++#define	IEEE80211_IOC_RSNCAPS		38	/* RSN capabilities */
++#define	IEEE80211_IOC_WPAIE		39	/* WPA information element */
++#define	IEEE80211_IOC_STA_STATS		40	/* per-station statistics */
++#define	IEEE80211_IOC_MACCMD		41	/* MAC ACL operation */
++#define	IEEE80211_IOC_CHANINFO		42	/* channel info list */
++#define	IEEE80211_IOC_TXPOWMAX		43	/* max tx power for channel */
++#define	IEEE80211_IOC_STA_TXPOW		44	/* per-station tx power limit */
++#define	IEEE80211_IOC_STA_INFO		45	/* station/neighbor info */
++#define	IEEE80211_IOC_WME_CWMIN		46	/* WME: ECWmin */
++#define	IEEE80211_IOC_WME_CWMAX		47	/* WME: ECWmax */
++#define	IEEE80211_IOC_WME_AIFS		48	/* WME: AIFSN */
++#define	IEEE80211_IOC_WME_TXOPLIMIT	49	/* WME: txops limit */
++#define	IEEE80211_IOC_WME_ACM		50	/* WME: ACM (bss only) */
++#define	IEEE80211_IOC_WME_ACKPOLICY	51	/* WME: ACK policy (!bss only)*/
++#define	IEEE80211_IOC_DTIM_PERIOD	52	/* DTIM period (beacons) */
++#define	IEEE80211_IOC_BEACON_INTERVAL	53	/* beacon interval (ms) */
++#define	IEEE80211_IOC_ADDMAC		54	/* add sta to MAC ACL table */
++#define	IEEE80211_IOC_DELMAC		55	/* del sta from MAC ACL table */
++
++/*
++ * Scan result data returned for IEEE80211_IOC_SCAN_RESULTS.
++ */
++struct ieee80211req_scan_result {
++	u_int16_t	isr_len;		/* length (mult of 4) */
++	u_int16_t	isr_freq;		/* MHz */
++	u_int16_t	isr_flags;		/* channel flags */
++	u_int8_t	isr_noise;
++	u_int8_t	isr_rssi;
++	u_int8_t	isr_intval;		/* beacon interval */
++	u_int8_t	isr_capinfo;		/* capabilities */
++	u_int8_t	isr_erp;		/* ERP element */
++	u_int8_t	isr_bssid[IEEE80211_ADDR_LEN];
++	u_int8_t	isr_nrates;
++	u_int8_t	isr_rates[IEEE80211_RATE_MAXSIZE];
++	u_int8_t	isr_ssid_len;		/* SSID length */
++	u_int8_t	isr_ie_len;		/* IE length */
++	u_int8_t	isr_pad[5];
++	/* variable length SSID followed by IE data */
++};
++
++#define	SIOCG80211STATS		_IOWR('i', 236, struct ifreq)
++#endif /* __FreeBSD__ */
++
++#ifdef __linux__
++/*
++ * Wireless Extensions API, private ioctl interfaces.
++ *
++ * NB: Even-numbered ioctl numbers have set semantics and are privileged!
++ *     (regardless of the incorrect comment in wireless.h!)
++ */
++#define	IEEE80211_IOCTL_SETPARAM	(SIOCIWFIRSTPRIV+0)
++#define	IEEE80211_IOCTL_GETPARAM	(SIOCIWFIRSTPRIV+1)
++#define	IEEE80211_IOCTL_SETKEY		(SIOCIWFIRSTPRIV+2)
++#define	IEEE80211_IOCTL_DELKEY		(SIOCIWFIRSTPRIV+4)
++#define	IEEE80211_IOCTL_SETMLME		(SIOCIWFIRSTPRIV+6)
++#define	IEEE80211_IOCTL_SETOPTIE	(SIOCIWFIRSTPRIV+8)
++#define	IEEE80211_IOCTL_GETOPTIE	(SIOCIWFIRSTPRIV+9)
++#define	IEEE80211_IOCTL_ADDMAC		(SIOCIWFIRSTPRIV+10)
++#define	IEEE80211_IOCTL_DELMAC		(SIOCIWFIRSTPRIV+12)
++#define	IEEE80211_IOCTL_CHANLIST	(SIOCIWFIRSTPRIV+14)
++#define IEEE80211_IOCTL_WDSADD		(SIOCIWFIRSTPRIV+16)
++#define IEEE80211_IOCTL_WDSDEL		(SIOCIWFIRSTPRIV+18)
++
++enum {
++	IEEE80211_PARAM_TURBO		= 1,	/* turbo mode */
++	IEEE80211_PARAM_MODE		= 2,	/* phy mode (11a, 11b, etc.) */
++	IEEE80211_PARAM_AUTHMODE	= 3,	/* authentication mode */
++	IEEE80211_PARAM_PROTMODE	= 4,	/* 802.11g protection */
++	IEEE80211_PARAM_MCASTCIPHER	= 5,	/* multicast/default cipher */
++	IEEE80211_PARAM_MCASTKEYLEN	= 6,	/* multicast key length */
++	IEEE80211_PARAM_UCASTCIPHERS	= 7,	/* unicast cipher suites */
++	IEEE80211_PARAM_UCASTCIPHER	= 8,	/* unicast cipher */
++	IEEE80211_PARAM_UCASTKEYLEN	= 9,	/* unicast key length */
++	IEEE80211_PARAM_WPA		= 10,	/* WPA mode (0,1,2) */
++	IEEE80211_PARAM_ROAMING		= 12,	/* roaming mode */
++	IEEE80211_PARAM_PRIVACY		= 13,	/* privacy invoked */
++	IEEE80211_PARAM_COUNTERMEASURES	= 14,	/* WPA/TKIP countermeasures */
++	IEEE80211_PARAM_DROPUNENCRYPTED	= 15,	/* discard unencrypted frames */
++	IEEE80211_PARAM_DRIVER_CAPS	= 16,	/* driver capabilities */
++	IEEE80211_PARAM_MACCMD		= 17,	/* MAC ACL operation */
++	IEEE80211_PARAM_WME		= 18,	/* WME mode (on, off) */
++	IEEE80211_PARAM_HIDESSID	= 19,	/* hide SSID mode (on, off) */
++	IEEE80211_PARAM_APBRIDGE	= 20,	/* AP inter-sta bridging */
++	IEEE80211_PARAM_KEYMGTALGS	= 21,	/* key management algorithms */
++	IEEE80211_PARAM_RSNCAPS		= 22,	/* RSN capabilities */
++	IEEE80211_PARAM_INACT		= 23,	/* station inactivity timeout */
++	IEEE80211_PARAM_INACT_AUTH	= 24,	/* station auth inact timeout */
++	IEEE80211_PARAM_INACT_INIT	= 25,	/* station init inact timeout */
++	IEEE80211_PARAM_IBSS		= 26,	/* pseudo ad-hoc mode or standard IBSS mode */
++	IEEE80211_PARAM_PUREG		= 27,	/* pure or mixed G */
++	IEEE80211_PARAM_WDSONLY		= 28,	/* only wds traffic allowed */
++	IEEE80211_PARAM_RESET		= 99    /* reset the device */
++};
++
++#define	SIOCG80211STATS		(SIOCDEVPRIVATE+2)
++/* NB: require in+out parameters so cannot use wireless extensions, yech */
++#define	IEEE80211_IOCTL_GETKEY		(SIOCDEVPRIVATE+3)
++#define	IEEE80211_IOCTL_GETWPAIE	(SIOCDEVPRIVATE+4)
++#define	IEEE80211_IOCTL_GETSTASTATS	(SIOCDEVPRIVATE+5)
++
++#endif /* __linux__ */
++
++#endif /* _NET80211_IEEE80211_IOCTL_H_ */

Property changes on: debian/patches/09_madwifi-ng_includes.dpatch
___________________________________________________________________
Name: svn:executable
   + *

Index: debian/patches/00list
===================================================================
--- debian/patches/00list	(revision 60)
+++ debian/patches/00list	(working copy)
@@ -1,3 +1,3 @@
 01_config
-10_madwifi_includes
+09_madwifi-ng_includes
 20_comment_config


----- End forwarded message -----



More information about the Pkg-wpa-devel mailing list