Move RX-from-unknown-STA processing away from driver_*.c
This cleans up the driver wrapper interface by getting rid of sta_info.h dependency in all drivers that use MLME implementation in hostapd (driver_hostap.c and driver_nl80211.c).
This commit is contained in:
parent
8607f4c31f
commit
214021f585
4 changed files with 24 additions and 39 deletions
|
@ -215,5 +215,6 @@ void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
int reassoc);
|
int reassoc);
|
||||||
void hostapd_tx_status(struct hostapd_data *hapd, const u8 *addr,
|
void hostapd_tx_status(struct hostapd_data *hapd, const u8 *addr,
|
||||||
const u8 *buf, size_t len, int ack);
|
const u8 *buf, size_t len, int ack);
|
||||||
|
void hostapd_rx_from_unknown_sta(struct hostapd_data *hapd, const u8 *addr);
|
||||||
|
|
||||||
#endif /* DRIVER_H */
|
#endif /* DRIVER_H */
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
#include "eloop.h"
|
#include "eloop.h"
|
||||||
#include "priv_netlink.h"
|
#include "priv_netlink.h"
|
||||||
#include "ieee802_11.h"
|
#include "ieee802_11.h"
|
||||||
#include "sta_info.h"
|
|
||||||
#include "hostap_common.h"
|
#include "hostap_common.h"
|
||||||
#include "hw_features.h"
|
#include "hw_features.h"
|
||||||
|
|
||||||
|
@ -74,7 +73,6 @@ static void handle_data(struct hostap_driver_data *drv, u8 *buf, size_t len,
|
||||||
u16 fc, ethertype;
|
u16 fc, ethertype;
|
||||||
u8 *pos, *sa;
|
u8 *pos, *sa;
|
||||||
size_t left;
|
size_t left;
|
||||||
struct sta_info *sta;
|
|
||||||
|
|
||||||
if (len < sizeof(struct ieee80211_hdr))
|
if (len < sizeof(struct ieee80211_hdr))
|
||||||
return;
|
return;
|
||||||
|
@ -88,20 +86,7 @@ static void handle_data(struct hostap_driver_data *drv, u8 *buf, size_t len,
|
||||||
}
|
}
|
||||||
|
|
||||||
sa = hdr->addr2;
|
sa = hdr->addr2;
|
||||||
sta = ap_get_sta(drv->hapd, sa);
|
hostapd_rx_from_unknown_sta(drv->hapd, sa);
|
||||||
if (!sta || !(sta->flags & WLAN_STA_ASSOC)) {
|
|
||||||
printf("Data frame from not associated STA " MACSTR "\n",
|
|
||||||
MAC2STR(sa));
|
|
||||||
if (sta && (sta->flags & WLAN_STA_AUTH))
|
|
||||||
hostap_sta_disassoc(
|
|
||||||
drv, sa,
|
|
||||||
WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
|
|
||||||
else
|
|
||||||
hostap_sta_deauth(
|
|
||||||
drv, sa,
|
|
||||||
WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
pos = (u8 *) (hdr + 1);
|
pos = (u8 *) (hdr + 1);
|
||||||
left = len - sizeof(*hdr);
|
left = len - sizeof(*hdr);
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
#include "ieee802_1x.h"
|
#include "ieee802_1x.h"
|
||||||
#include "eloop.h"
|
#include "eloop.h"
|
||||||
#include "ieee802_11.h"
|
#include "ieee802_11.h"
|
||||||
#include "sta_info.h"
|
|
||||||
#include "hw_features.h"
|
#include "hw_features.h"
|
||||||
#include "mlme.h"
|
#include "mlme.h"
|
||||||
#include "radiotap.h"
|
#include "radiotap.h"
|
||||||
|
@ -1636,26 +1635,6 @@ static int i802_set_country(void *priv, const char *country)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void handle_unknown_sta(struct i802_driver_data *drv, u8 *ta)
|
|
||||||
{
|
|
||||||
struct sta_info *sta;
|
|
||||||
|
|
||||||
sta = ap_get_sta(drv->hapd, ta);
|
|
||||||
if (!sta || !(sta->flags & WLAN_STA_ASSOC)) {
|
|
||||||
printf("Data/PS-poll frame from not associated STA "
|
|
||||||
MACSTR "\n", MAC2STR(ta));
|
|
||||||
if (sta && (sta->flags & WLAN_STA_AUTH))
|
|
||||||
i802_sta_disassoc(
|
|
||||||
drv, ta,
|
|
||||||
WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
|
|
||||||
else
|
|
||||||
i802_sta_deauth(
|
|
||||||
drv, ta,
|
|
||||||
WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void handle_tx_callback(struct hostapd_data *hapd, u8 *buf, size_t len,
|
static void handle_tx_callback(struct hostapd_data *hapd, u8 *buf, size_t len,
|
||||||
int ok)
|
int ok)
|
||||||
{
|
{
|
||||||
|
@ -1797,10 +1776,10 @@ static void handle_frame(struct i802_driver_data *drv,
|
||||||
case WLAN_FC_TYPE_CTRL:
|
case WLAN_FC_TYPE_CTRL:
|
||||||
/* can only get here with PS-Poll frames */
|
/* can only get here with PS-Poll frames */
|
||||||
wpa_printf(MSG_DEBUG, "CTRL");
|
wpa_printf(MSG_DEBUG, "CTRL");
|
||||||
handle_unknown_sta(drv, hdr->addr2);
|
hostapd_rx_from_unknown_sta(drv->hapd, hdr->addr2);
|
||||||
break;
|
break;
|
||||||
case WLAN_FC_TYPE_DATA:
|
case WLAN_FC_TYPE_DATA:
|
||||||
handle_unknown_sta(drv, hdr->addr2);
|
hostapd_rx_from_unknown_sta(drv->hapd, hdr->addr2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -278,6 +278,26 @@ void hostapd_tx_status(struct hostapd_data *hapd, const u8 *addr,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void hostapd_rx_from_unknown_sta(struct hostapd_data *hapd, const u8 *addr)
|
||||||
|
{
|
||||||
|
struct sta_info *sta;
|
||||||
|
|
||||||
|
sta = ap_get_sta(hapd, addr);
|
||||||
|
if (!sta || !(sta->flags & WLAN_STA_ASSOC)) {
|
||||||
|
wpa_printf(MSG_DEBUG, "Data/PS-poll frame from not associated "
|
||||||
|
"STA " MACSTR, MAC2STR(addr));
|
||||||
|
if (sta && (sta->flags & WLAN_STA_AUTH))
|
||||||
|
hostapd_sta_disassoc(
|
||||||
|
hapd, addr,
|
||||||
|
WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
|
||||||
|
else
|
||||||
|
hostapd_sta_deauth(
|
||||||
|
hapd, addr,
|
||||||
|
WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef EAP_SERVER
|
#ifdef EAP_SERVER
|
||||||
static int hostapd_sim_db_cb_sta(struct hostapd_data *hapd,
|
static int hostapd_sim_db_cb_sta(struct hostapd_data *hapd,
|
||||||
struct sta_info *sta, void *ctx)
|
struct sta_info *sta, void *ctx)
|
||||||
|
|
Loading…
Reference in a new issue