summaryrefslogtreecommitdiffstats
path: root/usr.sbin/wpa
diff options
context:
space:
mode:
authorbschmidt <bschmidt@FreeBSD.org>2010-12-18 19:58:23 +0000
committerbschmidt <bschmidt@FreeBSD.org>2010-12-18 19:58:23 +0000
commitde693bb7477b026cddb6994c7fd07c5a936c6f3f (patch)
tree4dc8520315fe6976c3f51546dec443834926ad2d /usr.sbin/wpa
parent78283324364b1456aa739836872b98e279f31e5d (diff)
downloadFreeBSD-src-de693bb7477b026cddb6994c7fd07c5a936c6f3f.zip
FreeBSD-src-de693bb7477b026cddb6994c7fd07c5a936c6f3f.tar.gz
Add bsd_send_mlme_param to aggregate IEEE80211_IOC_MLME ioctls:
- merge bsd_set_sta_authorized and bsd_sta_set_flags - change bsd_set_sta_authorized, bsd_sta_deauth and bsd_sta_disassoc to use bsd_send_mlme_param
Diffstat (limited to 'usr.sbin/wpa')
-rw-r--r--usr.sbin/wpa/hostapd/driver_freebsd.c65
1 files changed, 25 insertions, 40 deletions
diff --git a/usr.sbin/wpa/hostapd/driver_freebsd.c b/usr.sbin/wpa/hostapd/driver_freebsd.c
index 0979e3f..4826384 100644
--- a/usr.sbin/wpa/hostapd/driver_freebsd.c
+++ b/usr.sbin/wpa/hostapd/driver_freebsd.c
@@ -215,34 +215,35 @@ bsd_set_privacy(void *priv, int enabled)
}
static int
-bsd_set_sta_authorized(void *priv, const u8 *addr, int authorized)
+bsd_send_mlme_param(void *priv, const u8 op, const u16 reason, const u8 *addr)
{
- struct bsd_driver_data *drv = priv;
- struct hostapd_data *hapd = drv->hapd;
struct ieee80211req_mlme mlme;
- wpa_printf(MSG_DEBUG, "%s: addr=%s authorized=%d\n",
- __func__, ether_sprintf(addr), authorized);
-
- if (authorized)
- mlme.im_op = IEEE80211_MLME_AUTHORIZE;
- else
- mlme.im_op = IEEE80211_MLME_UNAUTHORIZE;
- mlme.im_reason = 0;
- memcpy(mlme.im_macaddr, addr, IEEE80211_ADDR_LEN);
+ os_memset(&mlme, 0, sizeof(mlme));
+ mlme.im_op = op;
+ mlme.im_reason = reason;
+ os_memcpy(mlme.im_macaddr, addr, IEEE80211_ADDR_LEN);
return set80211var(priv, IEEE80211_IOC_MLME, &mlme, sizeof(mlme));
}
static int
-bsd_sta_set_flags(void *priv, const u8 *addr, int total_flags,
- int flags_or, int flags_and)
+bsd_set_sta_authorized(void *priv, const u8 *addr,
+ int total_flags, int flags_or, int flags_and)
{
+ int authorized = -1;
+
/* For now, only support setting Authorized flag */
if (flags_or & WPA_STA_AUTHORIZED)
- return bsd_set_sta_authorized(priv, addr, 1);
+ authorized = 1;
if (!(flags_and & WPA_STA_AUTHORIZED))
- return bsd_set_sta_authorized(priv, addr, 0);
- return 0;
+ authorized = 0;
+
+ if (authorized < 0)
+ return 0;
+
+ return bsd_send_mlme_param(priv, authorized ?
+ IEEE80211_MLME_AUTHORIZE :
+ IEEE80211_MLME_UNAUTHORIZE, 0, addr);
}
static int
@@ -413,32 +414,16 @@ bsd_set_opt_ie(void *priv, const u8 *ie, size_t ie_len)
static int
bsd_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr, int reason_code)
{
- struct bsd_driver_data *drv = priv;
- struct hostapd_data *hapd = drv->hapd;
- struct ieee80211req_mlme mlme;
-
- wpa_printf(MSG_DEBUG, "%s: addr=%s reason_code=%d\n",
- __func__, ether_sprintf(addr), reason_code);
-
- mlme.im_op = IEEE80211_MLME_DEAUTH;
- mlme.im_reason = reason_code;
- memcpy(mlme.im_macaddr, addr, IEEE80211_ADDR_LEN);
- return set80211var(priv, IEEE80211_IOC_MLME, &mlme, sizeof(mlme));
+ return bsd_send_mlme_param(priv, IEEE80211_MLME_DEAUTH, reason_code,
+ addr);
}
static int
-bsd_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr, int reason_code)
+bsd_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
+ int reason_code)
{
- struct bsd_driver_data *drv = priv;
- struct hostapd_data *hapd = drv->hapd;
- struct ieee80211req_mlme mlme;
-
- wpa_printf(MSG_DEBUG, "%s: addr=%s reason_code=%d\n",
- __func__, ether_sprintf(addr), reason_code);
-
- mlme.im_reason = reason_code;
- memcpy(mlme.im_macaddr, addr, IEEE80211_ADDR_LEN);
- return set80211var(priv, IEEE80211_IOC_MLME, &mlme, sizeof(mlme));
+ return bsd_send_mlme_param(priv, IEEE80211_MLME_DISASSOC, reason_code,
+ addr);
}
static void
@@ -807,7 +792,7 @@ const struct wpa_driver_ops wpa_driver_bsd_ops = {
.get_seqnum = bsd_get_seqnum,
.flush = bsd_flush,
.set_generic_elem = bsd_set_opt_ie,
- .sta_set_flags = bsd_sta_set_flags,
+ .sta_set_flags = bsd_set_sta_authorized,
.read_sta_data = bsd_read_sta_driver_data,
.hapd_send_eapol = bsd_send_eapol,
.sta_disassoc = bsd_sta_disassoc,
OpenPOWER on IntegriCloud