P2P: Fix Action frame processing if Interworking is enabled
GAS server used the same public_action_cb mechanism as P2P to process Action frames. This ended up overriding P2P processing of Action frames while running an AP/GO interface with a build that enables Interworking (e.g., for Hotspot 2.0) and a driver that uses hostapd for AP mode SME/MLME. Fix this by adding a separate callback registration for the GAS server. This should really be cleaned up by supporting arbitrary number of callback handlers, but for now, this addresses the regression with a minimal change. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
391f492532
commit
2d9ffe1e85
3 changed files with 12 additions and 3 deletions
|
@ -1158,8 +1158,8 @@ static void gas_serv_rx_public_action(void *ctx, const u8 *buf, size_t len,
|
||||||
|
|
||||||
int gas_serv_init(struct hostapd_data *hapd)
|
int gas_serv_init(struct hostapd_data *hapd)
|
||||||
{
|
{
|
||||||
hapd->public_action_cb = gas_serv_rx_public_action;
|
hapd->public_action_cb2 = gas_serv_rx_public_action;
|
||||||
hapd->public_action_cb_ctx = hapd;
|
hapd->public_action_cb2_ctx = hapd;
|
||||||
hapd->gas_frag_limit = 1400;
|
hapd->gas_frag_limit = 1400;
|
||||||
if (hapd->conf->gas_frag_limit > 0)
|
if (hapd->conf->gas_frag_limit > 0)
|
||||||
hapd->gas_frag_limit = hapd->conf->gas_frag_limit;
|
hapd->gas_frag_limit = hapd->conf->gas_frag_limit;
|
||||||
|
|
|
@ -151,6 +151,9 @@ struct hostapd_data {
|
||||||
void (*public_action_cb)(void *ctx, const u8 *buf, size_t len,
|
void (*public_action_cb)(void *ctx, const u8 *buf, size_t len,
|
||||||
int freq);
|
int freq);
|
||||||
void *public_action_cb_ctx;
|
void *public_action_cb_ctx;
|
||||||
|
void (*public_action_cb2)(void *ctx, const u8 *buf, size_t len,
|
||||||
|
int freq);
|
||||||
|
void *public_action_cb2_ctx;
|
||||||
|
|
||||||
int (*vendor_action_cb)(void *ctx, const u8 *buf, size_t len,
|
int (*vendor_action_cb)(void *ctx, const u8 *buf, size_t len,
|
||||||
int freq);
|
int freq);
|
||||||
|
|
|
@ -1599,8 +1599,14 @@ static void handle_action(struct hostapd_data *hapd,
|
||||||
hapd->public_action_cb(hapd->public_action_cb_ctx,
|
hapd->public_action_cb(hapd->public_action_cb_ctx,
|
||||||
(u8 *) mgmt, len,
|
(u8 *) mgmt, len,
|
||||||
hapd->iface->freq);
|
hapd->iface->freq);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
if (hapd->public_action_cb2) {
|
||||||
|
hapd->public_action_cb2(hapd->public_action_cb_ctx,
|
||||||
|
(u8 *) mgmt, len,
|
||||||
|
hapd->iface->freq);
|
||||||
|
}
|
||||||
|
if (hapd->public_action_cb || hapd->public_action_cb2)
|
||||||
|
return;
|
||||||
break;
|
break;
|
||||||
case WLAN_ACTION_VENDOR_SPECIFIC:
|
case WLAN_ACTION_VENDOR_SPECIFIC:
|
||||||
if (hapd->vendor_action_cb) {
|
if (hapd->vendor_action_cb) {
|
||||||
|
|
Loading…
Reference in a new issue