summaryrefslogtreecommitdiffstats
path: root/sys/net80211
diff options
context:
space:
mode:
authordamien <damien@openbsd.org>2009-11-21 18:09:31 +0000
committerdamien <damien@openbsd.org>2009-11-21 18:09:31 +0000
commit370f2f27d1134ddbf3075e6ac5e737804f7ac02c (patch)
treeb2eedfbcfed0b567bd1e6ffce6d33a6354f7a70f /sys/net80211
parentUse home from struct passwd if HOME is empty as well as if it is NULL, and fix (diff)
downloadwireguard-openbsd-370f2f27d1134ddbf3075e6ac5e737804f7ac02c.tar.xz
wireguard-openbsd-370f2f27d1134ddbf3075e6ac5e737804f7ac02c.zip
when wpa is enabled, defer setting the link up until the 802.1X
port is valid (keys have been successfully exchanged.) this avoids dhclient timeouts when wpa is enabled.
Diffstat (limited to 'sys/net80211')
-rw-r--r--sys/net80211/ieee80211.c7
-rw-r--r--sys/net80211/ieee80211_proto.c11
-rw-r--r--sys/net80211/ieee80211_proto.h3
3 files changed, 15 insertions, 6 deletions
diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c
index c5b476165e3..6899fdd13a1 100644
--- a/sys/net80211/ieee80211.c
+++ b/sys/net80211/ieee80211.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ieee80211.c,v 1.37 2009/11/02 22:31:50 sobrado Exp $ */
+/* $OpenBSD: ieee80211.c,v 1.38 2009/11/21 18:09:31 damien Exp $ */
/* $NetBSD: ieee80211.c,v 1.19 2004/06/06 05:45:29 dyoung Exp $ */
/*-
@@ -547,7 +547,10 @@ ieee80211_media_status(struct ifnet *ifp, struct ifmediareq *imr)
imr->ifm_status = IFM_AVALID;
imr->ifm_active = IFM_IEEE80211;
- if (ic->ic_state == IEEE80211_S_RUN)
+ if (ic->ic_state == IEEE80211_S_RUN &&
+ (ic->ic_opmode != IEEE80211_M_STA ||
+ !(ic->ic_flags & IEEE80211_F_RSNON) ||
+ ic->ic_bss->ni_port_valid))
imr->ifm_status |= IFM_ACTIVE;
imr->ifm_active |= IFM_AUTO;
switch (ic->ic_opmode) {
diff --git a/sys/net80211/ieee80211_proto.c b/sys/net80211/ieee80211_proto.c
index d8db4dc8f31..c3a6a5a99c5 100644
--- a/sys/net80211/ieee80211_proto.c
+++ b/sys/net80211/ieee80211_proto.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ieee80211_proto.c,v 1.40 2009/03/26 20:34:54 damien Exp $ */
+/* $OpenBSD: ieee80211_proto.c,v 1.41 2009/11/21 18:09:31 damien Exp $ */
/* $NetBSD: ieee80211_proto.c,v 1.8 2004/04/30 23:58:20 dyoung Exp $ */
/*-
@@ -89,7 +89,6 @@ const char * const ieee80211_phymode_name[] = {
};
int ieee80211_newstate(struct ieee80211com *, enum ieee80211_state, int);
-void ieee80211_set_link_state(struct ieee80211com *, int);
void
ieee80211_proto_attach(struct ifnet *ifp)
@@ -949,7 +948,6 @@ ieee80211_newstate(struct ieee80211com *ic, enum ieee80211_state nstate,
}
break;
case IEEE80211_S_RUN:
- ieee80211_set_link_state(ic, LINK_STATE_UP);
switch (ostate) {
case IEEE80211_S_INIT:
case IEEE80211_S_AUTH:
@@ -982,6 +980,13 @@ ieee80211_newstate(struct ieee80211com *ic, enum ieee80211_state nstate,
(ic->ic_flags & IEEE80211_F_USEPROT) ?
" protection enabled" : "");
}
+ if (!(ic->ic_flags & IEEE80211_F_RSNON)) {
+ /*
+ * NB: When RSN is enabled, we defer setting
+ * the link up until the port is valid.
+ */
+ ieee80211_set_link_state(ic, LINK_STATE_UP);
+ }
ic->ic_mgt_timer = 0;
(*ifp->if_start)(ifp);
break;
diff --git a/sys/net80211/ieee80211_proto.h b/sys/net80211/ieee80211_proto.h
index ba94c86c9e9..1322ec8a4fa 100644
--- a/sys/net80211/ieee80211_proto.h
+++ b/sys/net80211/ieee80211_proto.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: ieee80211_proto.h,v 1.38 2009/01/28 18:55:18 damien Exp $ */
+/* $OpenBSD: ieee80211_proto.h,v 1.39 2009/11/21 18:09:31 damien Exp $ */
/* $NetBSD: ieee80211_proto.h,v 1.3 2003/10/13 04:23:56 dyoung Exp $ */
/*-
@@ -63,6 +63,7 @@ extern void ieee80211_proto_detach(struct ifnet *);
struct ieee80211_node;
struct ieee80211_rxinfo;
struct ieee80211_rsnparams;
+extern void ieee80211_set_link_state(struct ieee80211com *, int);
extern u_int ieee80211_get_hdrlen(const struct ieee80211_frame *);
extern void ieee80211_input(struct ifnet *, struct mbuf *,
struct ieee80211_node *, struct ieee80211_rxinfo *);