PERFORCE change 43952 for review

Sam Leffler sam at FreeBSD.org
Mon Dec 15 11:45:41 PST 2003


http://perforce.freebsd.org/chv.cgi?CH=43952

Change 43952 by sam at sam_ebb on 2003/12/15 11:44:45

	hookup shared key authentication support to the ioctl
	infrastructure

Affected files ...

.. //depot/projects/netperf/sys/net80211/ieee80211_ioctl.c#11 edit
.. //depot/projects/netperf/sys/net80211/ieee80211_output.c#13 edit
.. //depot/projects/netperf/sys/net80211/ieee80211_proto.c#11 edit
.. //depot/projects/netperf/sys/net80211/ieee80211_var.h#12 edit

Differences ...

==== //depot/projects/netperf/sys/net80211/ieee80211_ioctl.c#11 (text+ko) ====

@@ -213,7 +213,7 @@
 		wreq.wi_len = 1;
 		break;
 	case WI_RID_CNFAUTHMODE:
-		wreq.wi_val[0] = htole16(1);	/* TODO: open system only */
+		wreq.wi_val[0] = htole16(ic->ic_authmode);
 		wreq.wi_len = 1;
 		break;
 	case WI_RID_ENCRYPTION:
@@ -632,8 +632,14 @@
 	case WI_RID_CNFAUTHMODE:
 		if (len != 2)
 			return EINVAL;
-		if (le16toh(wreq.wi_val[0]) != 1)
-			return EINVAL;		/* TODO: shared key auth */
+		if (le16toh(wreq.wi_val[0]) > IEEE80211_AUTH_SHARED)
+			return EINVAL;
+		/* shared key authentication requires WEP */
+		if (le16toh(wreq.wi_val[0]) == IEEE80211_AUTH_SHARED &&
+		    (ic->ic_flags & IEEE80211_F_WEPON) == 0)
+			return EINVAL;
+		ic->ic_authmode = le16toh(wreq.wi_val[0]);
+		error = ENETRESET;
 		break;
 	case WI_RID_ENCRYPTION:
 		if (len != 2)
@@ -830,7 +836,7 @@
 				ireq->i_val = ic->ic_wep_txkey;
 			break;
 		case IEEE80211_IOC_AUTHMODE:
-			ireq->i_val = IEEE80211_AUTH_OPEN;
+			ireq->i_val = ic->ic_authmode;
 			break;
 		case IEEE80211_IOC_CHANNEL:
 			switch (ic->ic_state) {
@@ -928,11 +934,23 @@
 			ic->ic_wep_txkey = kid;
 			error = ENETRESET;
 			break;
-#if 0
 		case IEEE80211_IOC_AUTHMODE:
-			sc->wi_authmode = ireq->i_val;
+			if (!(IEEE80211_AUTH_NONE <= ireq->i_val &&
+			    ireq->i_val <= IEEE80211_AUTH_SHARED)) {
+				error = EINVAL;
+				break;
+			}
+			if (ireq->i_val == IEEE80211_AUTH_SHARED &&
+			    (ic->ic_flags & IEEE80211_F_WEPON) == 0) {
+				/* shared key authentication requires WEP */
+				error = EINVAL;
+				break;
+			}
+			if (ic->ic_authmode != ireq->i_val) {
+				ic->ic_authmode = ireq->i_val;
+				error = ENETRESET;
+			}
 			break;
-#endif
 		case IEEE80211_IOC_CHANNEL:
 			/* XXX 0xffff overflows 16-bit signed */
 			if (ireq->i_val == 0 ||

==== //depot/projects/netperf/sys/net80211/ieee80211_output.c#13 (text+ko) ====

@@ -451,8 +451,17 @@
 		    arg == IEEE80211_AUTH_SHARED_RESPONSE) &&
 		    ni->ni_challenge != NULL);
 
-		is_shared_key = has_challenge || (ni->ni_challenge != NULL &&
-		    arg == IEEE80211_AUTH_SHARED_PASS);
+		/*
+		 * Deduce whether we're doing open authentication or
+		 * shared key authentication.  We do the latter if
+		 * we're in the middle of a shared key authentication
+		 * handshake or if we're initiating an authentication
+		 * request and configured to use shared key.
+		 */
+		is_shared_key = has_challenge ||
+		     arg >= IEEE80211_AUTH_SHARED_RESPONSE ||
+		     (arg == IEEE80211_AUTH_SHARED_REQUEST &&
+		      ic->ic_authmode == IEEE80211_AUTH_SHARED);
 
 		if (has_challenge) {
 			MH_ALIGN(m, 2 * 3 + 2 + IEEE80211_CHALLENGE_LEN);

==== //depot/projects/netperf/sys/net80211/ieee80211_proto.c#11 (text+ko) ====

@@ -103,6 +103,7 @@
 #endif
 	ic->ic_fragthreshold = 2346;		/* XXX not used yet */
 	ic->ic_fixed_rate = -1;			/* no fixed rate */
+	ic->ic_authmode = IEEE80211_AUTH_OPEN;
 
 	mtx_init(&ic->ic_mgtq.ifq_mtx, ifp->if_xname, "mgmt send q", MTX_DEF);
 	mtx_init(&ic->ic_pwrsaveq.ifq_mtx, ifp->if_xname, "power save q", MTX_DEF);

==== //depot/projects/netperf/sys/net80211/ieee80211_var.h#12 (text+ko) ====

@@ -203,6 +203,7 @@
 	u_int16_t		ic_txlifetime;	/* tx lifetime */
 	u_int16_t		ic_txpower;	/* tx power setting (dbM) */
 	u_int16_t		ic_bmisstimeout;/* beacon miss threshold (ms) */
+	u_int16_t		ic_authmode;	/* authentication mode */
 	int			ic_mgt_timer;	/* mgmt timeout */
 	int			ic_inact_timer;	/* inactivity timer wait */
 	int			ic_des_esslen;


More information about the p4-projects mailing list