Module Name:    src
Committed By:   nakayama
Date:           Sun May 13 10:21:02 UTC 2012

Modified Files:
        src/external/bsd/wpa/dist/src/drivers: driver_bsd.c

Log Message:
Make WPA works on big-endian machines.

Need byte swapping to copy seq to member ik_keyrsc.  The code is
borrowed from driver_madwifi.c.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/external/bsd/wpa/dist/src/drivers/driver_bsd.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/bsd/wpa/dist/src/drivers/driver_bsd.c
diff -u src/external/bsd/wpa/dist/src/drivers/driver_bsd.c:1.4 src/external/bsd/wpa/dist/src/drivers/driver_bsd.c:1.5
--- src/external/bsd/wpa/dist/src/drivers/driver_bsd.c:1.4	Sat Dec 25 20:45:49 2010
+++ src/external/bsd/wpa/dist/src/drivers/driver_bsd.c	Sun May 13 10:21:02 2012
@@ -347,7 +347,19 @@ bsd_set_key(const char *ifname, void *pr
 	if (wk.ik_keyix != IEEE80211_KEYIX_NONE && set_tx)
 		wk.ik_flags |= IEEE80211_KEY_DEFAULT;
 	wk.ik_keylen = key_len;
+#ifdef WORDS_BIGENDIAN
+#define WPA_KEY_RSC_LEN 8
+	{
+		size_t i;
+		u8 tmp[WPA_KEY_RSC_LEN];
+		os_memset(tmp, 0, sizeof(tmp));
+		for (i = 0; i < seq_len; i++)
+			tmp[WPA_KEY_RSC_LEN - i - 1] = seq[i];
+		os_memcpy(&wk.ik_keyrsc, tmp, WPA_KEY_RSC_LEN);
+	}
+#else /* WORDS_BIGENDIAN */
 	os_memcpy(&wk.ik_keyrsc, seq, seq_len);
+#endif /* WORDS_BIGENDIAN */
 	os_memcpy(wk.ik_keydata, key, key_len);
 
 	return set80211var(priv, IEEE80211_IOC_WPAKEY, &wk, sizeof(wk));

Reply via email to