}
-struct ap_info * ap_get_ap(struct hostapd_iface *iface, u8 *ap)
+struct ap_info * ap_get_ap(struct hostapd_iface *iface, const u8 *ap)
{
struct ap_info *s;
}
-static struct ap_info * ap_ap_add(struct hostapd_iface *iface, u8 *addr)
+static struct ap_info * ap_ap_add(struct hostapd_iface *iface, const u8 *addr)
{
struct ap_info *ap;
void ap_list_process_beacon(struct hostapd_iface *iface,
- struct ieee80211_mgmt *mgmt,
+ const struct ieee80211_mgmt *mgmt,
struct ieee802_11_elems *elems,
struct hostapd_frame_info *fi)
{
struct ieee802_11_elems;
struct hostapd_frame_info;
-struct ap_info * ap_get_ap(struct hostapd_iface *iface, u8 *sta);
+struct ap_info * ap_get_ap(struct hostapd_iface *iface, const u8 *sta);
int ap_ap_for_each(struct hostapd_iface *iface,
int (*func)(struct ap_info *s, void *data), void *data);
void ap_list_process_beacon(struct hostapd_iface *iface,
- struct ieee80211_mgmt *mgmt,
+ const struct ieee80211_mgmt *mgmt,
struct ieee802_11_elems *elems,
struct hostapd_frame_info *fi);
#ifdef NEED_AP_MLME
}
-void handle_probe_req(struct hostapd_data *hapd, struct ieee80211_mgmt *mgmt,
- size_t len)
+void handle_probe_req(struct hostapd_data *hapd,
+ const struct ieee80211_mgmt *mgmt, size_t len)
{
struct ieee80211_mgmt *resp;
struct ieee802_11_elems elems;
char *ssid;
- u8 *pos, *epos, *ie;
+ u8 *pos, *epos;
+ const u8 *ie;
size_t ssid_len, ie_len;
struct sta_info *sta = NULL;
struct ieee80211_mgmt;
-void handle_probe_req(struct hostapd_data *hapd, struct ieee80211_mgmt *mgmt,
- size_t len);
+void handle_probe_req(struct hostapd_data *hapd,
+ const struct ieee80211_mgmt *mgmt, size_t len);
#ifdef NEED_AP_MLME
void ieee802_11_set_beacon(struct hostapd_data *hapd);
void ieee802_11_set_beacons(struct hostapd_iface *iface);
}
-static void hostapd_mgmt_rx(struct hostapd_data *hapd, u8 *buf,
+static void hostapd_mgmt_rx(struct hostapd_data *hapd, const u8 *buf,
size_t len, struct hostapd_frame_info *fi)
{
struct hostapd_iface *iface = hapd->iface;
- struct ieee80211_hdr *hdr;
+ const struct ieee80211_hdr *hdr;
const u8 *bssid;
- hdr = (struct ieee80211_hdr *) buf;
+ hdr = (const struct ieee80211_hdr *) buf;
bssid = get_hdr_bssid(hdr, len);
if (bssid == NULL)
return;
* @addr: Address of the destination STA
* @reason: Reason code for Deauthentication
*/
-void ieee802_11_send_deauth(struct hostapd_data *hapd, u8 *addr, u16 reason)
+void ieee802_11_send_deauth(struct hostapd_data *hapd, const u8 *addr,
+ u16 reason)
{
struct ieee80211_mgmt mgmt;
static u16 auth_shared_key(struct hostapd_data *hapd, struct sta_info *sta,
- u16 auth_transaction, u8 *challenge, int iswep)
+ u16 auth_transaction, const u8 *challenge,
+ int iswep)
{
hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,
HOSTAPD_LEVEL_DEBUG,
#endif /* CONFIG_IEEE80211R */
-static void handle_auth(struct hostapd_data *hapd, struct ieee80211_mgmt *mgmt,
- size_t len)
+static void handle_auth(struct hostapd_data *hapd,
+ const struct ieee80211_mgmt *mgmt, size_t len)
{
u16 auth_alg, auth_transaction, status_code;
u16 resp = WLAN_STATUS_SUCCESS;
struct sta_info *sta = NULL;
int res;
u16 fc;
- u8 *challenge = NULL;
+ const u8 *challenge = NULL;
u32 session_timeout, acct_interim_interval;
int vlan_id = 0;
u8 resp_ies[2 + WLAN_AUTH_CHALLENGE_LEN];
static u16 check_assoc_ies(struct hostapd_data *hapd, struct sta_info *sta,
- u8 *ies, size_t ies_len, int reassoc)
+ const u8 *ies, size_t ies_len, int reassoc)
{
struct ieee802_11_elems elems;
u16 resp;
static void send_assoc_resp(struct hostapd_data *hapd, struct sta_info *sta,
- u16 status_code, int reassoc, u8 *ies,
+ u16 status_code, int reassoc, const u8 *ies,
size_t ies_len)
{
int send_len;
static void handle_assoc(struct hostapd_data *hapd,
- struct ieee80211_mgmt *mgmt, size_t len, int reassoc)
+ const struct ieee80211_mgmt *mgmt, size_t len,
+ int reassoc)
{
u16 capab_info, listen_interval;
u16 resp = WLAN_STATUS_SUCCESS;
- u8 *pos;
+ const u8 *pos;
int left, i;
struct sta_info *sta;
static void handle_beacon(struct hostapd_data *hapd,
- struct ieee80211_mgmt *mgmt, size_t len,
+ const struct ieee80211_mgmt *mgmt, size_t len,
struct hostapd_frame_info *fi)
{
struct ieee802_11_elems elems;
static void hostapd_sa_query_action(struct hostapd_data *hapd,
- struct ieee80211_mgmt *mgmt, size_t len)
+ const struct ieee80211_mgmt *mgmt,
+ size_t len)
{
struct sta_info *sta;
- u8 *end;
+ const u8 *end;
int i;
end = mgmt->u.action.u.sa_query_resp.trans_id +
static void handle_action(struct hostapd_data *hapd,
- struct ieee80211_mgmt *mgmt, size_t len)
+ const struct ieee80211_mgmt *mgmt, size_t len)
{
struct sta_info *sta;
mgmt->u.action.category);
if (!(mgmt->da[0] & 0x01) && !(mgmt->u.action.category & 0x80) &&
!(mgmt->sa[0] & 0x01)) {
+ struct ieee80211_mgmt *resp;
+
/*
* IEEE 802.11-REVma/D9.0 - 7.3.1.11
* Return the Action frame to the source without change
*/
wpa_printf(MSG_DEBUG, "IEEE 802.11: Return unknown Action "
"frame back to sender");
- os_memcpy(mgmt->da, mgmt->sa, ETH_ALEN);
- os_memcpy(mgmt->sa, hapd->own_addr, ETH_ALEN);
- os_memcpy(mgmt->bssid, hapd->own_addr, ETH_ALEN);
- mgmt->u.action.category |= 0x80;
+ resp = os_malloc(len);
+ if (resp == NULL)
+ return;
+ os_memcpy(resp, mgmt, len);
+ os_memcpy(resp->da, resp->sa, ETH_ALEN);
+ os_memcpy(resp->sa, hapd->own_addr, ETH_ALEN);
+ os_memcpy(resp->bssid, hapd->own_addr, ETH_ALEN);
+ resp->u.action.category |= 0x80;
- hostapd_send_mgmt_frame(hapd, mgmt, len);
+ hostapd_send_mgmt_frame(hapd, resp, len);
+ os_free(resp);
}
}
* addition, it can be called to re-inserted pending frames (e.g., when using
* external RADIUS server as an MAC ACL).
*/
-void ieee802_11_mgmt(struct hostapd_data *hapd, u8 *buf, size_t len,
+void ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len,
struct hostapd_frame_info *fi)
{
struct ieee80211_mgmt *mgmt;
struct sta_info;
struct hostapd_frame_info;
-void ieee802_11_send_deauth(struct hostapd_data *hapd, u8 *addr, u16 reason);
-void ieee802_11_mgmt(struct hostapd_data *hapd, u8 *buf, size_t len,
+void ieee802_11_send_deauth(struct hostapd_data *hapd, const u8 *addr,
+ u16 reason);
+void ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len,
struct hostapd_frame_info *fi);
void ieee802_11_mgmt_cb(struct hostapd_data *hapd, const u8 *buf, size_t len,
u16 stype, int ok);
static void wmm_addts_req(struct hostapd_data *hapd,
- struct ieee80211_mgmt *mgmt,
+ const struct ieee80211_mgmt *mgmt,
struct wmm_tspec_element *tspec, size_t len)
{
- u8 *end = ((u8 *) mgmt) + len;
+ const u8 *end = ((const u8 *) mgmt) + len;
int res;
- if ((u8 *) (tspec + 1) > end) {
+ if ((const u8 *) (tspec + 1) > end) {
wpa_printf(MSG_DEBUG, "WMM: TSPEC overflow in ADDTS Request");
return;
}
}
-void hostapd_wmm_action(struct hostapd_data *hapd, struct ieee80211_mgmt *mgmt,
- size_t len)
+void hostapd_wmm_action(struct hostapd_data *hapd,
+ const struct ieee80211_mgmt *mgmt, size_t len)
{
int action_code;
int left = len - IEEE80211_HDRLEN - 4;
- u8 *pos = ((u8 *) mgmt) + IEEE80211_HDRLEN + 4;
+ const u8 *pos = ((const u8 *) mgmt) + IEEE80211_HDRLEN + 4;
struct ieee802_11_elems elems;
struct sta_info *sta = ap_get_sta(hapd, mgmt->sa);
u8 * hostapd_eid_wmm(struct hostapd_data *hapd, u8 *eid);
int hostapd_eid_wmm_valid(struct hostapd_data *hapd, const u8 *eid,
size_t len);
-void hostapd_wmm_action(struct hostapd_data *hapd, struct ieee80211_mgmt *mgmt,
- size_t len);
+void hostapd_wmm_action(struct hostapd_data *hapd,
+ const struct ieee80211_mgmt *mgmt, size_t len);
int wmm_process_tspec(struct wmm_tspec_element *tspec);
#endif /* WME_H */
* struct rx_mgmt - Data for EVENT_RX_MGMT events
*/
struct rx_mgmt {
- u8 *frame;
+ const u8 *frame;
size_t frame_len;
struct hostapd_frame_info *fi;
} rx_mgmt;
}
-void ap_mgmt_rx(void *ctx, u8 *buf, size_t len,
+void ap_mgmt_rx(void *ctx, const u8 *buf, size_t len,
struct hostapd_frame_info *fi)
{
#ifdef NEED_AP_MLME
const u8 *buf, size_t len, int ack);
void ap_rx_from_unknown_sta(void *ctx, const struct ieee80211_hdr *hdr,
size_t len);
-void ap_mgmt_rx(void *ctx, u8 *buf, size_t len,
+void ap_mgmt_rx(void *ctx, const u8 *buf, size_t len,
struct hostapd_frame_info *fi);
void ap_mgmt_tx_cb(void *ctx, const u8 *buf, size_t len, u16 stype, int ok);