svn commit: r216526 - head/usr.sbin/wpa/hostapd

Bernhard Schmidt bschmidt at FreeBSD.org
Sat Dec 18 19:55:19 UTC 2010


Author: bschmidt
Date: Sat Dec 18 19:55:19 2010
New Revision: 216526
URL: http://svn.freebsd.org/changeset/base/216526

Log:
  Aggregate SIOCS80211 and SIOCG80211 ioctl request code. While here, bring
  the wpa_printf()/perror() messages in sync with upstream code.

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 19:04:21 2010	(r216525)
+++ head/usr.sbin/wpa/hostapd/driver_freebsd.c	Sat Dec 18 19:55:19 2010	(r216526)
@@ -58,56 +58,67 @@ static int bsd_sta_deauth(void *priv, co
     int reason_code);
 
 static int
-set80211var(struct bsd_driver_data *drv, int op, const void *arg, int arg_len)
+bsd_set80211(void *priv, int op, int val, const void *arg, int arg_len)
 {
+	struct bsd_driver_data *drv = priv;
 	struct ieee80211req ireq;
 
-	memset(&ireq, 0, sizeof(ireq));
-	strncpy(ireq.i_name, drv->iface, IFNAMSIZ);
+	os_memset(&ireq, 0, sizeof(ireq));
+	os_strlcpy(ireq.i_name, drv->iface, sizeof(ireq.i_name));
 	ireq.i_type = op;
-	ireq.i_len = arg_len;
+	ireq.i_val = val;
 	ireq.i_data = (void *) arg;
+	ireq.i_len = arg_len;
 
 	if (ioctl(drv->ioctl_sock, SIOCS80211, &ireq) < 0) {
-		perror("ioctl[SIOCS80211]");
+		wpa_printf(MSG_ERROR, "ioctl[SIOCS80211, op=%u, val=%u, "
+			   "arg_len=%u]: %s", op, val, arg_len,
+			   strerror(errno));
 		return -1;
 	}
 	return 0;
 }
 
 static int
-get80211var(struct bsd_driver_data *drv, int op, void *arg, int arg_len)
+bsd_get80211(void *priv, struct ieee80211req *ireq, int op, void *arg,
+	     int arg_len)
 {
-	struct ieee80211req ireq;
+	struct bsd_driver_data *drv = priv;
 
-	memset(&ireq, 0, sizeof(ireq));
-	strncpy(ireq.i_name, drv->iface, IFNAMSIZ);
-	ireq.i_type = op;
-	ireq.i_len = arg_len;
-	ireq.i_data = arg;
+	os_memset(ireq, 0, sizeof(*ireq));
+	os_strlcpy(ireq->i_name, drv->iface, sizeof(ireq->i_name));
+	ireq->i_type = op;
+	ireq->i_len = arg_len;
+	ireq->i_data = arg;
 
-	if (ioctl(drv->ioctl_sock, SIOCG80211, &ireq) < 0) {
-		perror("ioctl[SIOCG80211]");
+	if (ioctl(drv->ioctl_sock, SIOCG80211, ireq) < 0) {
+		wpa_printf(MSG_ERROR, "ioctl[SIOCS80211, op=%u, "
+			   "arg_len=%u]: %s", op, arg_len, strerror(errno));
 		return -1;
 	}
-	return ireq.i_len;
+	return 0;
 }
 
 static int
-set80211param(struct bsd_driver_data *drv, int op, int arg)
+get80211var(struct bsd_driver_data *drv, int op, void *arg, int arg_len)
 {
 	struct ieee80211req ireq;
 
-	memset(&ireq, 0, sizeof(ireq));
-	strncpy(ireq.i_name, drv->iface, IFNAMSIZ);
-	ireq.i_type = op;
-	ireq.i_val = arg;
-
-	if (ioctl(drv->ioctl_sock, SIOCS80211, &ireq) < 0) {
-		perror("ioctl[SIOCS80211]");
+	if (bsd_get80211(drv, &ireq, op, arg, arg_len) < 0)
 		return -1;
-	}
-	return 0;
+	return ireq.i_len;
+}
+
+static int
+set80211var(struct bsd_driver_data *drv, int op, const void *arg, int arg_len)
+{
+	return bsd_set80211(drv, op, 0, arg, arg_len);
+}
+
+static int
+set80211param(struct bsd_driver_data *drv, int op, int arg)
+{
+	return bsd_set80211(drv, op, arg, NULL, 0);
 }
 
 static const char *
@@ -395,24 +406,10 @@ bsd_sta_clear_stats(void *priv, const u8
 static int
 bsd_set_opt_ie(void *priv, const u8 *ie, size_t ie_len)
 {
-	struct bsd_driver_data *drv = priv;
-	struct hostapd_data *hapd = drv->hapd;
-	struct ieee80211req ireq;
-
-	memset(&ireq, 0, sizeof(ireq));
-	strncpy(ireq.i_name, drv->iface, IFNAMSIZ);
-	ireq.i_type = IEEE80211_IOC_APPIE;
-	ireq.i_val = IEEE80211_APPIE_WPA;
-	ireq.i_data = (void *) ie;
-	ireq.i_len = ie_len;
-
-	wpa_printf(MSG_DEBUG, "%s: set WPA+RSN ie (len %d)\n",
-	    __func__, ie_len);
-	if (ioctl(drv->ioctl_sock, SIOCS80211, &ireq) < 0) {
-		printf("Unable to set WPA+RSN ie\n");
-		return -1;
-	}
-	return 0;
+	wpa_printf(MSG_DEBUG, "%s: set WPA+RSN ie (len %lu)", __func__,
+		   (unsigned long)ie_len);
+	return bsd_set80211(priv, IEEE80211_IOC_APPIE, IEEE80211_APPIE_WPA,
+			    ie, ie_len);
 }
 
 static int


More information about the svn-src-head mailing list