From owner-svn-src-all@FreeBSD.ORG Sat Dec 18 20:22:16 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 56FCF106566C; Sat, 18 Dec 2010 20:22:16 +0000 (UTC) (envelope-from bschmidt@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2B0BE8FC0A; Sat, 18 Dec 2010 20:22:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBIKMGet028178; Sat, 18 Dec 2010 20:22:16 GMT (envelope-from bschmidt@svn.freebsd.org) Received: (from bschmidt@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBIKMGTY028176; Sat, 18 Dec 2010 20:22:16 GMT (envelope-from bschmidt@svn.freebsd.org) Message-Id: <201012182022.oBIKMGTY028176@svn.freebsd.org> From: Bernhard Schmidt Date: Sat, 18 Dec 2010 20:22:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216537 - head/usr.sbin/wpa/hostapd X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Dec 2010 20:22:16 -0000 Author: bschmidt Date: Sat Dec 18 20:22:15 2010 New Revision: 216537 URL: http://svn.freebsd.org/changeset/base/216537 Log: Rename bsd_set_iface_flags to bsd_ctrl_iface and change arguments to match upstream. For the same reason rewrite bsd_get_seqnum. Modified: head/usr.sbin/wpa/hostapd/driver_freebsd.c Modified: head/usr.sbin/wpa/hostapd/driver_freebsd.c ============================================================================== --- head/usr.sbin/wpa/hostapd/driver_freebsd.c Sat Dec 18 20:17:10 2010 (r216536) +++ head/usr.sbin/wpa/hostapd/driver_freebsd.c Sat Dec 18 20:22:15 2010 (r216537) @@ -160,7 +160,7 @@ bsd_send_mlme_param(void *priv, const u8 } static int -bsd_set_iface_flags(void *priv, int flags) +bsd_ctrl_iface(void *priv, int enable) { struct bsd_driver_data *drv = priv; struct ifreq ifr; @@ -176,15 +176,14 @@ bsd_set_iface_flags(void *priv, int flag return -1; } - if (flags < 0) { - flags = -flags; - if ((ifr.ifr_flags & flags) == 0) + if (enable) { + if ((ifr.ifr_flags & IFF_UP) == IFF_UP) return 0; - ifr.ifr_flags &= ~flags; + ifr.ifr_flags |= IFF_UP; } else { - if ((ifr.ifr_flags & flags) == flags) + if ((ifr.ifr_flags & IFF_UP) == 0) return 0; - ifr.ifr_flags |= flags; + ifr.ifr_flags &= ~IFF_UP; } if (ioctl(drv->sock, SIOCSIFFLAGS, &ifr) < 0) { @@ -197,7 +196,7 @@ bsd_set_iface_flags(void *priv, int flag static int bsd_commit(void *priv) { - return bsd_set_iface_flags(priv, IFF_UP); + return bsd_ctrl_iface(priv, 1); } static int @@ -449,12 +448,25 @@ bsd_get_seqnum(const char *ifname, void if (get80211var(priv, IEEE80211_IOC_WPAKEY, &wk, sizeof(wk)) < 0) { printf("Failed to get encryption.\n"); return -1; - } else { - /* NB: upper layer expects tsc in network order */ - wk.ik_keytsc = htole64(wk.ik_keytsc); - memcpy(seq, &wk.ik_keytsc, sizeof(wk.ik_keytsc)); - return 0; } + +#ifdef WORDS_BIGENDIAN + { + /* + * wk.ik_keytsc is in host byte order (big endian), need to + * swap it to match with the byte order used in WPA. + */ + int i; + u8 tmp[WPA_KEY_RSC_LEN]; + memcpy(tmp, &wk.ik_keytsc, sizeof(wk.ik_keytsc)); + for (i = 0; i < WPA_KEY_RSC_LEN; i++) { + seq[i] = tmp[WPA_KEY_RSC_LEN - i - 1]; + } + } +#else /* WORDS_BIGENDIAN */ + memcpy(seq, &wk.ik_keytsc, sizeof(wk.ik_keytsc)); +#endif /* WORDS_BIGENDIAN */ + return 0; } @@ -731,7 +743,7 @@ bsd_init(struct hostapd_data *hapd, stru goto bad; /* mark down during setup */ - if (bsd_set_iface_flags(drv, -IFF_UP) < 0) + if (bsd_ctrl_iface(drv, 0) < 0) goto bad; drv->route = socket(PF_ROUTE, SOCK_RAW, 0); @@ -764,7 +776,7 @@ bsd_deinit(void *priv) eloop_unregister_read_sock(drv->route); close(drv->route); } - (void) bsd_set_iface_flags(drv, -IFF_UP); + bsd_ctrl_iface(drv, 0); if (drv->sock >= 0) close(drv->sock); if (drv->sock_xmit != NULL)