Resolve conflicts.
This commit is contained in:
parent
80b91eea2d
commit
61fb42b78a
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_ioctl.c,v 1.20 2005/06/26 04:31:51 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_ioctl.c,v 1.21 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2001 Atsushi Onoe
|
||||
* Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
|
||||
|
@ -33,10 +33,10 @@
|
|||
|
||||
#include <sys/cdefs.h>
|
||||
#ifdef __FreeBSD__
|
||||
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_ioctl.c,v 1.18 2005/01/24 19:32:09 sam Exp $");
|
||||
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_ioctl.c,v 1.25 2005/07/06 15:38:27 sam Exp $");
|
||||
#endif
|
||||
#ifdef __NetBSD__
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_ioctl.c,v 1.20 2005/06/26 04:31:51 dyoung Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_ioctl.c,v 1.21 2005/07/26 22:52:48 dyoung Exp $");
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -1466,6 +1466,9 @@ ieee80211_ioctl_get80211(struct ieee80211com *ic, u_long cmd, struct ieee80211re
|
|||
/* NB: get from ic_bss for station mode */
|
||||
ireq->i_val = ic->ic_bss->ni_intval;
|
||||
break;
|
||||
case IEEE80211_IOC_PUREG:
|
||||
ireq->i_val = (ic->ic_flags & IEEE80211_F_PUREG) != 0;
|
||||
break;
|
||||
default:
|
||||
error = EINVAL;
|
||||
break;
|
||||
|
@ -1526,9 +1529,11 @@ ieee80211_ioctl_setkey(struct ieee80211com *ic, struct ieee80211req *ireq)
|
|||
if (ik.ik_flags != (IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV))
|
||||
return EINVAL;
|
||||
if (ic->ic_opmode == IEEE80211_M_STA) {
|
||||
ni = ic->ic_bss;
|
||||
if (!IEEE80211_ADDR_EQ(ik.ik_macaddr, ni->ni_bssid))
|
||||
ni = ieee80211_ref_node(ic->ic_bss);
|
||||
if (!IEEE80211_ADDR_EQ(ik.ik_macaddr, ni->ni_bssid)) {
|
||||
ieee80211_free_node(ni);
|
||||
return EADDRNOTAVAIL;
|
||||
}
|
||||
} else {
|
||||
ni = ieee80211_find_node(&ic->ic_sta, ik.ik_macaddr);
|
||||
if (ni == NULL)
|
||||
|
@ -1540,9 +1545,6 @@ ieee80211_ioctl_setkey(struct ieee80211com *ic, struct ieee80211req *ireq)
|
|||
return EINVAL;
|
||||
wk = &ic->ic_nw_keys[kid];
|
||||
ni = NULL;
|
||||
/* XXX auto-add group key flag until applications are updated */
|
||||
if ((ik.ik_flags & IEEE80211_KEY_XMIT) == 0) /* XXX */
|
||||
ik.ik_flags |= IEEE80211_KEY_GROUP; /* XXX */
|
||||
}
|
||||
error = 0;
|
||||
ieee80211_key_update_begin(ic);
|
||||
|
@ -1584,9 +1586,17 @@ ieee80211_ioctl_delkey(struct ieee80211com *ic, struct ieee80211req *ireq)
|
|||
if (dk.idk_keyix == (u_int8_t) IEEE80211_KEYIX_NONE) {
|
||||
struct ieee80211_node *ni;
|
||||
|
||||
if (ic->ic_opmode == IEEE80211_M_STA) {
|
||||
ni = ieee80211_ref_node(ic->ic_bss);
|
||||
if (!IEEE80211_ADDR_EQ(dk.idk_macaddr, ni->ni_bssid)) {
|
||||
ieee80211_free_node(ni);
|
||||
return EADDRNOTAVAIL;
|
||||
}
|
||||
} else {
|
||||
ni = ieee80211_find_node(&ic->ic_sta, dk.idk_macaddr);
|
||||
if (ni == NULL)
|
||||
return EINVAL; /* XXX */
|
||||
return ENOENT;
|
||||
}
|
||||
/* XXX error return */
|
||||
ieee80211_crypto_delkey(ic, &ni->ni_ucastkey);
|
||||
ieee80211_free_node(ni);
|
||||
|
@ -1635,14 +1645,14 @@ ieee80211_ioctl_setmlme(struct ieee80211com *ic, struct ieee80211req *ireq)
|
|||
return EINVAL;
|
||||
/* XXX must be in S_SCAN state? */
|
||||
|
||||
if (ic->ic_des_esslen != 0) {
|
||||
if (mlme.im_ssid_len != 0) {
|
||||
/*
|
||||
* Desired ssid specified; must match both bssid and
|
||||
* ssid to distinguish ap advertising multiple ssid's.
|
||||
*/
|
||||
ni = ieee80211_find_node_with_ssid(&ic->ic_scan,
|
||||
mlme.im_macaddr,
|
||||
ic->ic_des_esslen, ic->ic_des_essid);
|
||||
mlme.im_ssid_len, mlme.im_ssid);
|
||||
} else {
|
||||
/*
|
||||
* Normal case; just match bssid.
|
||||
|
@ -1988,6 +1998,8 @@ ieee80211_ioctl_set80211(struct ieee80211com *ic, u_long cmd, struct ieee80211re
|
|||
} else
|
||||
error = EINVAL;
|
||||
ieee80211_key_update_end(ic);
|
||||
if (!error) /* NB: for compatibility */
|
||||
error = ENETRESET;
|
||||
break;
|
||||
case IEEE80211_IOC_WEPTXKEY:
|
||||
kid = (u_int) ireq->i_val;
|
||||
|
@ -2326,6 +2338,15 @@ ieee80211_ioctl_set80211(struct ieee80211com *ic, u_long cmd, struct ieee80211re
|
|||
} else
|
||||
error = EINVAL;
|
||||
break;
|
||||
case IEEE80211_IOC_PUREG:
|
||||
if (ireq->i_val)
|
||||
ic->ic_flags |= IEEE80211_F_PUREG;
|
||||
else
|
||||
ic->ic_flags &= ~IEEE80211_F_PUREG;
|
||||
/* NB: reset only if we're operating on an 11g channel */
|
||||
if (ic->ic_curmode == IEEE80211_MODE_11G)
|
||||
error = ENETRESET;
|
||||
break;
|
||||
default:
|
||||
error = EINVAL;
|
||||
break;
|
||||
|
@ -2407,14 +2428,14 @@ ieee80211_ioctl(struct ieee80211com *ic, u_long cmd, caddr_t data)
|
|||
*/
|
||||
case AF_IPX: {
|
||||
struct ipx_addr *ina = &(IA_SIPX(ifa)->sipx_addr);
|
||||
struct arpcom *ac = (struct arpcom *)ifp;
|
||||
|
||||
if (ipx_nullhost(*ina))
|
||||
ina->x_host = *(union ipx_host *) ac->ac_enaddr;
|
||||
ina->x_host = *(union ipx_host *)
|
||||
IFP2ENADDR(ifp);
|
||||
else
|
||||
bcopy((caddr_t) ina->x_host.c_host,
|
||||
(caddr_t) ac->ac_enaddr,
|
||||
sizeof(ac->ac_enaddr));
|
||||
(caddr_t) IFP2ENADDR(ifp),
|
||||
ETHER_ADDR_LEN);
|
||||
/* fall thru... */
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_ioctl.h,v 1.9 2005/06/22 06:16:02 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_ioctl.h,v 1.10 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2001 Atsushi Onoe
|
||||
* Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
|
||||
|
@ -30,7 +30,7 @@
|
|||
* (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 $
|
||||
* $FreeBSD: src/sys/net80211/ieee80211_ioctl.h,v 1.10 2005/07/06 15:38:27 sam Exp $
|
||||
*/
|
||||
#ifndef _NET80211_IEEE80211_IOCTL_H_
|
||||
#define _NET80211_IEEE80211_IOCTL_H_
|
||||
|
@ -229,8 +229,10 @@ struct ieee80211req_mlme {
|
|||
#define IEEE80211_MLME_DEAUTH 3 /* deauthenticate station */
|
||||
#define IEEE80211_MLME_AUTHORIZE 4 /* authorize station */
|
||||
#define IEEE80211_MLME_UNAUTHORIZE 5 /* unauthorize station */
|
||||
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];
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -428,6 +430,7 @@ struct ieee80211req {
|
|||
#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 */
|
||||
#define IEEE80211_IOC_PUREG 56 /* pure 11g (no 11b stations) */
|
||||
|
||||
/*
|
||||
* Scan result data returned for IEEE80211_IOC_SCAN_RESULTS.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_netbsd.c,v 1.5 2005/07/10 08:11:40 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_netbsd.c,v 1.6 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2003-2005 Sam Leffler, Errno Consulting
|
||||
* All rights reserved.
|
||||
|
@ -30,7 +30,7 @@
|
|||
#ifdef __FreeBSD__
|
||||
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_freebsd.c,v 1.6 2005/01/22 20:29:23 sam Exp $");
|
||||
#else
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_netbsd.c,v 1.5 2005/07/10 08:11:40 dyoung Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_netbsd.c,v 1.6 2005/07/26 22:52:48 dyoung Exp $");
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_netbsd.h,v 1.4 2005/07/10 08:12:50 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_netbsd.h,v 1.5 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2003-2005 Sam Leffler, Errno Consulting
|
||||
* All rights reserved.
|
||||
|
@ -25,7 +25,7 @@
|
|||
* (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_freebsd.h,v 1.2 2004/12/31 22:42:38 sam Exp $
|
||||
* $FreeBSD: src/sys/net80211/ieee80211_freebsd.h,v 1.5 2005/07/06 01:55:17 sam Exp $
|
||||
*/
|
||||
#ifndef _NET80211_IEEE80211_NETBSD_H_
|
||||
#define _NET80211_IEEE80211_NETBSD_H_
|
||||
|
@ -177,6 +177,7 @@ int ieee80211_node_dectestref(struct ieee80211_node *ni);
|
|||
|
||||
struct mbuf *ieee80211_getmgtframe(u_int8_t **frm, u_int pktlen);
|
||||
#define M_PWR_SAV M_PROTO1 /* bypass PS handling */
|
||||
#define M_MORE_DATA M_LINK3 /* more data frames to follow */
|
||||
/*
|
||||
* Encode WME access control bits in the PROTO flags.
|
||||
* This is safe since it's passed directly in to the
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_node.c,v 1.41 2005/07/05 19:56:04 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_node.c,v 1.42 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2001 Atsushi Onoe
|
||||
* Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
|
||||
|
@ -33,10 +33,10 @@
|
|||
|
||||
#include <sys/cdefs.h>
|
||||
#ifdef __FreeBSD__
|
||||
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_node.c,v 1.43 2005/02/10 16:59:04 sam Exp $");
|
||||
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_node.c,v 1.48 2005/07/06 01:51:44 sam Exp $");
|
||||
#endif
|
||||
#ifdef __NetBSD__
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_node.c,v 1.41 2005/07/05 19:56:04 dyoung Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_node.c,v 1.42 2005/07/26 22:52:48 dyoung Exp $");
|
||||
#endif
|
||||
|
||||
#include "opt_inet.h"
|
||||
|
@ -70,6 +70,16 @@ __KERNEL_RCSID(0, "$NetBSD: ieee80211_node.c,v 1.41 2005/07/05 19:56:04 dyoung E
|
|||
#include <net/if_ether.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Association id's are managed with a bit vector.
|
||||
*/
|
||||
#define IEEE80211_AID_SET(b, w) \
|
||||
((w)[IEEE80211_AID(b) / 32] |= (1 << (IEEE80211_AID(b) % 32)))
|
||||
#define IEEE80211_AID_CLR(b, w) \
|
||||
((w)[IEEE80211_AID(b) / 32] &= ~(1 << (IEEE80211_AID(b) % 32)))
|
||||
#define IEEE80211_AID_ISSET(b, w) \
|
||||
((w)[IEEE80211_AID(b) / 32] & (1 << (IEEE80211_AID(b) % 32)))
|
||||
|
||||
static struct ieee80211_node *node_alloc(struct ieee80211_node_table *);
|
||||
static void node_cleanup(struct ieee80211_node *);
|
||||
static void node_free(struct ieee80211_node *);
|
||||
|
@ -885,6 +895,13 @@ node_cleanup(struct ieee80211_node *ni)
|
|||
"[%s] power save mode off, %u sta's in ps mode\n",
|
||||
ether_sprintf(ni->ni_macaddr), ic->ic_ps_sta);
|
||||
}
|
||||
/*
|
||||
* Clear AREF flag that marks the authorization refcnt bump
|
||||
* has happened. This is probably not needed as the node
|
||||
* should always be removed from the table so not found but
|
||||
* do it just in case.
|
||||
*/
|
||||
ni->ni_flags &= ~IEEE80211_NODE_AREF;
|
||||
|
||||
/*
|
||||
* Drain power save queue and, if needed, clear TIM.
|
||||
|
@ -1269,16 +1286,32 @@ ieee80211_find_node_with_ssid(struct ieee80211_node_table *nt,
|
|||
const u_int8_t *macaddr, u_int ssidlen, const u_int8_t *ssid)
|
||||
#endif
|
||||
{
|
||||
#define MATCH_SSID(ni, ssid, ssidlen) \
|
||||
(ni->ni_esslen == ssidlen && memcmp(ni->ni_essid, ssid, ssidlen) == 0)
|
||||
static const u_int8_t zeromac[IEEE80211_ADDR_LEN];
|
||||
struct ieee80211com *ic = nt->nt_ic;
|
||||
struct ieee80211_node *ni;
|
||||
int hash;
|
||||
|
||||
hash = IEEE80211_NODE_HASH(macaddr);
|
||||
IEEE80211_NODE_LOCK(nt);
|
||||
/*
|
||||
* A mac address that is all zero means match only the ssid;
|
||||
* otherwise we must match both.
|
||||
*/
|
||||
if (IEEE80211_ADDR_EQ(macaddr, zeromac)) {
|
||||
TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
|
||||
if (MATCH_SSID(ni, ssid, ssidlen))
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
hash = IEEE80211_NODE_HASH(macaddr);
|
||||
LIST_FOREACH(ni, &nt->nt_hash[hash], ni_hash) {
|
||||
if (IEEE80211_ADDR_EQ(ni->ni_macaddr, macaddr) &&
|
||||
ni->ni_esslen == ic->ic_des_esslen &&
|
||||
memcmp(ni->ni_essid, ic->ic_des_essid, ni->ni_esslen) == 0) {
|
||||
MATCH_SSID(ni, ssid, ssidlen))
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ni != NULL) {
|
||||
ieee80211_ref_node(ni); /* mark referenced */
|
||||
IEEE80211_DPRINTF(ic, IEEE80211_MSG_NODE,
|
||||
#ifdef IEEE80211_DEBUG_REFCNT
|
||||
|
@ -1289,11 +1322,10 @@ ieee80211_find_node_with_ssid(struct ieee80211_node_table *nt,
|
|||
#endif
|
||||
ni, ether_sprintf(ni->ni_macaddr),
|
||||
ieee80211_node_refcnt(ni));
|
||||
break;
|
||||
}
|
||||
}
|
||||
IEEE80211_NODE_UNLOCK(nt);
|
||||
return ni;
|
||||
#undef MATCH_SSID
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1458,6 +1490,14 @@ restart:
|
|||
if (ni->ni_scangen == gen) /* previously handled */
|
||||
continue;
|
||||
ni->ni_scangen = gen;
|
||||
/*
|
||||
* Ignore entries for which have yet to receive an
|
||||
* authentication frame. These are transient and
|
||||
* will be reclaimed when the last reference to them
|
||||
* goes away (when frame xmits complete).
|
||||
*/
|
||||
if ((ni->ni_flags & IEEE80211_NODE_AREF) == 0)
|
||||
continue;
|
||||
/*
|
||||
* Free fragment if not needed anymore
|
||||
* (last fragment older than 1s).
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_node.h,v 1.17 2005/07/05 23:04:14 he Exp $ */
|
||||
/* $NetBSD: ieee80211_node.h,v 1.18 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2001 Atsushi Onoe
|
||||
* Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
|
||||
|
@ -30,7 +30,7 @@
|
|||
* (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_node.h,v 1.14 2005/01/24 19:32:09 sam Exp $
|
||||
* $FreeBSD: src/sys/net80211/ieee80211_node.h,v 1.17 2005/07/06 01:51:44 sam Exp $
|
||||
*/
|
||||
#ifndef _NET80211_IEEE80211_NODE_H_
|
||||
#define _NET80211_IEEE80211_NODE_H_
|
||||
|
@ -102,6 +102,7 @@ struct ieee80211_node {
|
|||
#define IEEE80211_NODE_ERP 0x0004 /* ERP enabled */
|
||||
/* NB: this must have the same value as IEEE80211_FC1_PWR_MGT */
|
||||
#define IEEE80211_NODE_PWR_MGT 0x0010 /* power save mode enabled */
|
||||
#define IEEE80211_NODE_AREF 0x0020 /* authentication ref held */
|
||||
u_int16_t ni_associd; /* assoc response */
|
||||
u_int16_t ni_txpower; /* current transmit power */
|
||||
u_int16_t ni_vlan; /* vlan tag */
|
||||
|
@ -138,6 +139,8 @@ struct ieee80211_node {
|
|||
u_int8_t ni_fhindex; /* FH only */
|
||||
u_int8_t ni_erp; /* ERP from beacon/probe resp */
|
||||
u_int16_t ni_timoff; /* byte offset to TIM ie */
|
||||
u_int8_t ni_dtim_period; /* DTIM period */
|
||||
u_int8_t ni_dtim_count; /* DTIM count for last bcn */
|
||||
|
||||
/* others */
|
||||
int ni_fails; /* failure count to associate */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_output.c,v 1.32 2005/06/27 05:49:13 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_output.c,v 1.33 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2001 Atsushi Onoe
|
||||
* Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
|
||||
|
@ -33,10 +33,10 @@
|
|||
|
||||
#include <sys/cdefs.h>
|
||||
#ifdef __FreeBSD__
|
||||
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_output.c,v 1.20 2005/02/10 17:00:48 sam Exp $");
|
||||
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_output.c,v 1.26 2005/07/06 01:55:17 sam Exp $");
|
||||
#endif
|
||||
#ifdef __NetBSD__
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_output.c,v 1.32 2005/06/27 05:49:13 dyoung Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_output.c,v 1.33 2005/07/26 22:52:48 dyoung Exp $");
|
||||
#endif
|
||||
|
||||
#include "opt_inet.h"
|
||||
|
@ -556,6 +556,8 @@ ieee80211_encap(struct ieee80211com *ic, struct mbuf *m,
|
|||
case IEEE80211_M_MONITOR:
|
||||
goto bad;
|
||||
}
|
||||
if (m->m_flags & M_MORE_DATA)
|
||||
wh->i_fc[1] |= IEEE80211_FC1_MORE_DATA;
|
||||
if (addqos) {
|
||||
struct ieee80211_qosframe *qwh =
|
||||
(struct ieee80211_qosframe *) wh;
|
||||
|
@ -590,7 +592,7 @@ ieee80211_encap(struct ieee80211com *ic, struct mbuf *m,
|
|||
!IEEE80211_KEY_UNDEFINED(ni->ni_ucastkey)))) {
|
||||
wh->i_fc[1] |= IEEE80211_FC1_WEP;
|
||||
/* XXX do fragmentation */
|
||||
if (!ieee80211_crypto_enmic(ic, key, m)) {
|
||||
if (!ieee80211_crypto_enmic(ic, key, m, 0)) {
|
||||
IEEE80211_DPRINTF(ic, IEEE80211_MSG_OUTPUT,
|
||||
"[%s] enmic failed, discard frame\n",
|
||||
ether_sprintf(eh.ether_dhost));
|
||||
|
@ -918,7 +920,7 @@ ieee80211_setup_wpa_ie(struct ieee80211com *ic, u_int8_t *ie)
|
|||
}
|
||||
|
||||
/* optional capabilities */
|
||||
if (rsn->rsn_caps != 0)
|
||||
if (rsn->rsn_caps != 0 && rsn->rsn_caps != RSN_CAP_PREAUTH)
|
||||
ADDSHORT(frm, rsn->rsn_caps);
|
||||
|
||||
/* calculate element length */
|
||||
|
@ -1001,7 +1003,6 @@ ieee80211_setup_rsn_ie(struct ieee80211com *ic, u_int8_t *ie)
|
|||
}
|
||||
|
||||
/* optional capabilities */
|
||||
if (rsn->rsn_caps != 0)
|
||||
ADDSHORT(frm, rsn->rsn_caps);
|
||||
/* XXX PMKID */
|
||||
|
||||
|
@ -1302,16 +1303,6 @@ ieee80211_send_mgmt(struct ieee80211com *ic, struct ieee80211_node *ni,
|
|||
else
|
||||
IEEE80211_NODE_STAT(ni, tx_auth_fail);
|
||||
|
||||
/*
|
||||
* When 802.1x is not in use mark the port
|
||||
* authorized at this point so traffic can flow.
|
||||
*/
|
||||
#ifndef IEEE80211_NO_HOSTAP
|
||||
if (ic->ic_opmode == IEEE80211_M_HOSTAP &&
|
||||
status == IEEE80211_STATUS_SUCCESS &&
|
||||
ni->ni_authmode != IEEE80211_AUTH_8021X)
|
||||
ieee80211_node_authorize(ic, ni);
|
||||
#endif /* !IEEE80211_NO_HOSTAP */
|
||||
if (ic->ic_opmode == IEEE80211_M_STA)
|
||||
timer = IEEE80211_TRANS_WAIT;
|
||||
break;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_proto.c,v 1.20 2005/06/26 04:31:51 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_proto.c,v 1.21 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2001 Atsushi Onoe
|
||||
* Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
|
||||
|
@ -33,10 +33,10 @@
|
|||
|
||||
#include <sys/cdefs.h>
|
||||
#ifdef __FreeBSD__
|
||||
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_proto.c,v 1.15 2005/01/24 20:39:29 sam Exp $");
|
||||
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_proto.c,v 1.17 2005/07/04 01:29:41 sam Exp $");
|
||||
#endif
|
||||
#ifdef __NetBSD__
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_proto.c,v 1.20 2005/06/26 04:31:51 dyoung Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_proto.c,v 1.21 2005/07/26 22:52:48 dyoung Exp $");
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -846,13 +846,31 @@ ieee80211_wme_updateparams(struct ieee80211com *ic)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
sta_disassoc(void *arg, struct ieee80211_node *ni)
|
||||
{
|
||||
struct ieee80211com *ic = arg;
|
||||
|
||||
if (ni->ni_associd != 0) {
|
||||
IEEE80211_SEND_MGMT(ic, ni, IEEE80211_FC0_SUBTYPE_DISASSOC,
|
||||
IEEE80211_REASON_ASSOC_LEAVE);
|
||||
ieee80211_node_leave(ic, ni);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
sta_deauth(void *arg, struct ieee80211_node *ni)
|
||||
{
|
||||
struct ieee80211com *ic = arg;
|
||||
|
||||
IEEE80211_SEND_MGMT(ic, ni, IEEE80211_FC0_SUBTYPE_DEAUTH,
|
||||
IEEE80211_REASON_ASSOC_LEAVE);
|
||||
}
|
||||
|
||||
static int
|
||||
ieee80211_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg)
|
||||
{
|
||||
struct ifnet *ifp = ic->ic_ifp;
|
||||
#ifndef IEEE80211_NO_HOSTAP
|
||||
struct ieee80211_node_table *nt;
|
||||
#endif /* !IEEE80211_NO_HOSTAP */
|
||||
struct ieee80211_node *ni;
|
||||
enum ieee80211_state ostate;
|
||||
|
||||
|
@ -876,16 +894,8 @@ ieee80211_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg
|
|||
break;
|
||||
case IEEE80211_M_HOSTAP:
|
||||
#ifndef IEEE80211_NO_HOSTAP
|
||||
nt = &ic->ic_sta;
|
||||
IEEE80211_NODE_LOCK(nt);
|
||||
TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
|
||||
if (ni->ni_associd == 0)
|
||||
continue;
|
||||
IEEE80211_SEND_MGMT(ic, ni,
|
||||
IEEE80211_FC0_SUBTYPE_DISASSOC,
|
||||
IEEE80211_REASON_ASSOC_LEAVE);
|
||||
}
|
||||
IEEE80211_NODE_UNLOCK(nt);
|
||||
ieee80211_iterate_nodes(&ic->ic_sta,
|
||||
sta_disassoc, ic);
|
||||
#endif /* !IEEE80211_NO_HOSTAP */
|
||||
break;
|
||||
default:
|
||||
|
@ -901,14 +911,8 @@ ieee80211_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg
|
|||
break;
|
||||
case IEEE80211_M_HOSTAP:
|
||||
#ifndef IEEE80211_NO_HOSTAP
|
||||
nt = &ic->ic_sta;
|
||||
IEEE80211_NODE_LOCK(nt);
|
||||
TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
|
||||
IEEE80211_SEND_MGMT(ic, ni,
|
||||
IEEE80211_FC0_SUBTYPE_DEAUTH,
|
||||
IEEE80211_REASON_AUTH_LEAVE);
|
||||
}
|
||||
IEEE80211_NODE_UNLOCK(nt);
|
||||
ieee80211_iterate_nodes(&ic->ic_sta,
|
||||
sta_deauth, ic);
|
||||
#endif /* !IEEE80211_NO_HOSTAP */
|
||||
break;
|
||||
default:
|
||||
|
@ -974,6 +978,7 @@ ieee80211_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg
|
|||
ni->ni_fails++;
|
||||
ieee80211_unref_node(&ni);
|
||||
}
|
||||
if (ic->ic_roaming == IEEE80211_ROAMING_AUTO)
|
||||
ieee80211_begin_scan(ic, arg);
|
||||
break;
|
||||
}
|
||||
|
@ -1006,10 +1011,12 @@ ieee80211_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg
|
|||
ic->ic_state = ostate; /* stay RUN */
|
||||
break;
|
||||
case IEEE80211_FC0_SUBTYPE_DEAUTH:
|
||||
ieee80211_sta_leave(ic, ni);
|
||||
if (ic->ic_roaming == IEEE80211_ROAMING_AUTO) {
|
||||
/* try to reauth */
|
||||
IEEE80211_SEND_MGMT(ic, ni,
|
||||
IEEE80211_FC0_SUBTYPE_AUTH, 1);
|
||||
ieee80211_sta_leave(ic, ni);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -1028,9 +1035,11 @@ ieee80211_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg
|
|||
IEEE80211_FC0_SUBTYPE_ASSOC_REQ, 0);
|
||||
break;
|
||||
case IEEE80211_S_RUN:
|
||||
ieee80211_sta_leave(ic, ni);
|
||||
if (ic->ic_roaming == IEEE80211_ROAMING_AUTO) {
|
||||
IEEE80211_SEND_MGMT(ic, ni,
|
||||
IEEE80211_FC0_SUBTYPE_ASSOC_REQ, 1);
|
||||
ieee80211_sta_leave(ic, ni);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_proto.h,v 1.11 2005/06/27 05:49:13 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_proto.h,v 1.12 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2001 Atsushi Onoe
|
||||
* Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* $FreeBSD: src/sys/net80211/ieee80211_radiotap.h,v 1.5 2005/01/22 20:12:05 sam Exp $ */
|
||||
/* $NetBSD: ieee80211_radiotap.h,v 1.11 2005/06/22 06:16:02 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_radiotap.h,v 1.12 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2003, 2004 David Young. All rights reserved.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_rssadapt.c,v 1.11 2005/06/22 06:16:02 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_rssadapt.c,v 1.12 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2003, 2004 David Young. All rights reserved.
|
||||
*
|
||||
|
@ -31,7 +31,7 @@
|
|||
|
||||
#include <sys/cdefs.h>
|
||||
#ifdef __NetBSD__
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_rssadapt.c,v 1.11 2005/06/22 06:16:02 dyoung Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_rssadapt.c,v 1.12 2005/07/26 22:52:48 dyoung Exp $");
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_rssadapt.h,v 1.4 2005/02/26 22:45:09 perry Exp $ */
|
||||
/* $NetBSD: ieee80211_rssadapt.h,v 1.5 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2003, 2004 David Young. All rights reserved.
|
||||
*
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_sysctl.h,v 1.4 2005/06/26 04:34:43 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_sysctl.h,v 1.5 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2005 David Young. All rights reserved.
|
||||
*
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ieee80211_var.h,v 1.19 2005/06/22 06:16:02 dyoung Exp $ */
|
||||
/* $NetBSD: ieee80211_var.h,v 1.20 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2001 Atsushi Onoe
|
||||
* Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
|
||||
|
@ -30,7 +30,7 @@
|
|||
* (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_var.h,v 1.20 2005/01/24 19:39:07 sam Exp $
|
||||
* $FreeBSD: src/sys/net80211/ieee80211_var.h,v 1.22 2005/07/06 15:38:27 sam Exp $
|
||||
*/
|
||||
#ifndef _NET80211_IEEE80211_VAR_H_
|
||||
#define _NET80211_IEEE80211_VAR_H_
|
||||
|
@ -132,7 +132,8 @@ struct ieee80211com {
|
|||
u_int16_t ic_ps_pending; /* ps sta's w/ pending frames */
|
||||
u_int8_t *ic_tim_bitmap; /* power-save stations w/ data*/
|
||||
u_int16_t ic_tim_len; /* ic_tim_bitmap size (bytes) */
|
||||
u_int16_t ic_dtim_period; /* DTIM period */
|
||||
u_int8_t ic_dtim_period; /* DTIM period */
|
||||
u_int8_t ic_dtim_count; /* DTIM count for last bcn */
|
||||
struct ifmedia ic_media; /* interface media config */
|
||||
caddr_t ic_rawbpf; /* packet filter structure */
|
||||
struct ieee80211_node *ic_bss; /* information for this node */
|
||||
|
@ -206,9 +207,10 @@ extern struct ieee80211com_head ieee80211com_head;
|
|||
#define IEEE80211_ADDR_COPY(dst,src) memcpy(dst,src,IEEE80211_ADDR_LEN)
|
||||
|
||||
/* ic_flags */
|
||||
/* NB: bits 0x6f available */
|
||||
/* NB: bits 0x4f available */
|
||||
/* NB: this is intentionally setup to be IEEE80211_CAPINFO_PRIVACY */
|
||||
#define IEEE80211_F_PRIVACY 0x00000010 /* CONF: privacy enabled */
|
||||
#define IEEE80211_F_PUREG 0x00000020 /* CONF: 11g w/o 11b sta's */
|
||||
#define IEEE80211_F_SCAN 0x00000080 /* STATUS: scanning */
|
||||
#define IEEE80211_F_ASCAN 0x00000100 /* STATUS: active scan */
|
||||
#define IEEE80211_F_SIBSS 0x00000200 /* STATUS: start IBSS */
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_xauth.c,v 1.2 2004/12/31 22:42:38 sam Exp $");
|
||||
#endif
|
||||
#ifdef __NetBSD__
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_xauth.c,v 1.2 2005/06/22 06:16:02 dyoung Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ieee80211_xauth.c,v 1.3 2005/07/26 22:52:48 dyoung Exp $");
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: mbuf.h,v 1.112 2005/06/06 06:06:50 martin Exp $ */
|
||||
/* $NetBSD: mbuf.h,v 1.113 2005/07/26 22:52:48 dyoung Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997, 1999, 2001 The NetBSD Foundation, Inc.
|
||||
|
@ -298,6 +298,7 @@ MBUF_DEFINE(mbuf, MHLEN, MLEN);
|
|||
#define M_LINK0 0x1000 /* link layer specific flag */
|
||||
#define M_LINK1 0x2000 /* link layer specific flag */
|
||||
#define M_LINK2 0x4000 /* link layer specific flag */
|
||||
#define M_LINK3 0x8000 /* link layer specific flag */
|
||||
|
||||
/* additional flags for M_EXT mbufs */
|
||||
#define M_EXT_FLAGS 0xff000000
|
||||
|
|
Loading…
Reference in New Issue