diff --git a/src/ap/gas_serv.c b/src/ap/gas_serv.c index 851c183e9..b3574ba61 100644 --- a/src/ap/gas_serv.c +++ b/src/ap/gas_serv.c @@ -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) { - hapd->public_action_cb = gas_serv_rx_public_action; - hapd->public_action_cb_ctx = hapd; + hapd->public_action_cb2 = gas_serv_rx_public_action; + hapd->public_action_cb2_ctx = hapd; hapd->gas_frag_limit = 1400; if (hapd->conf->gas_frag_limit > 0) hapd->gas_frag_limit = hapd->conf->gas_frag_limit; diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h index c9087b313..2827232a3 100644 --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h @@ -151,6 +151,9 @@ struct hostapd_data { void (*public_action_cb)(void *ctx, const u8 *buf, size_t len, int freq); 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 freq); diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c index 79235dfd0..129c5b5ff 100644 --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c @@ -1599,8 +1599,14 @@ static void handle_action(struct hostapd_data *hapd, hapd->public_action_cb(hapd->public_action_cb_ctx, (u8 *) mgmt, len, 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; case WLAN_ACTION_VENDOR_SPECIFIC: if (hapd->vendor_action_cb) {