}
-static int send_and_recv(struct nl80211_global *global,
- struct nl_sock *nl_handle, struct nl_msg *msg,
- int (*valid_handler)(struct nl_msg *, void *),
- void *valid_data,
- int (*ack_handler_custom)(struct nl_msg *, void *),
- void *ack_data,
- struct nl80211_err_info *err_info)
+int send_and_recv(struct nl80211_global *global,
+ struct nl_sock *nl_handle, struct nl_msg *msg,
+ int (*valid_handler)(struct nl_msg *, void *),
+ void *valid_data,
+ int (*ack_handler_custom)(struct nl_msg *, void *),
+ void *ack_data,
+ struct nl80211_err_info *err_info)
{
struct nl_cb *cb;
struct nl80211_ack_err_args err;
}
-int send_and_recv_msgs(struct wpa_driver_nl80211_data *drv,
- struct nl_msg *msg,
- int (*valid_handler)(struct nl_msg *, void *),
- void *valid_data,
- int (*ack_handler_custom)(struct nl_msg *, void *),
- void *ack_data,
- struct nl80211_err_info *err_info)
-{
- return send_and_recv(drv->global, drv->global->nl, msg,
- valid_handler, valid_data,
- ack_handler_custom, ack_data, err_info);
-}
-
-
static int nl80211_put_control_port(struct wpa_driver_nl80211_data *drv,
struct nl_msg *msg)
{
nlmsg_free(msg);
return -EINVAL;
}
- if (send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL))
+ if (send_and_recv_cmd(drv, msg))
return -EINVAL;
return 0;
}
int ret;
msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_DEL_INTERFACE);
- ret = send_and_recv_msgs(bss->drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(bss->drv, msg);
wpa_printf(MSG_DEBUG, "nl80211: Delete P2P Device %s (0x%llx): %s",
bss->ifname, (long long unsigned int) bss->wdev_id,
msg = nl80211_cmd_msg(bss, 0, start ? NL80211_CMD_START_P2P_DEVICE :
NL80211_CMD_STOP_P2P_DEVICE);
- ret = send_and_recv_msgs(bss->drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(bss->drv, msg);
wpa_printf(MSG_DEBUG, "nl80211: %s P2P Device %s (0x%llx): %s",
start ? "Start" : "Stop",
}
}
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
}
nlmsg_free(msg);
return -1;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG,
"nl80211: Key management set key failed: ret=%d (%s)",
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG, "nl80211: Set PMK failed: ret=%d (%s)",
ret, strerror(-ret));
goto fail;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if ((ret == -ENOENT || ret == -ENOLINK) && alg == WPA_ALG_NONE)
ret = 0;
if (ret)
goto fail;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret)
wpa_printf(MSG_DEBUG,
"nl80211: set_key default failed; err=%d %s",
goto fail;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
msg = NULL;
if (ret) {
wpa_dbg(drv->ctx, MSG_DEBUG,
return -ENOBUFS;
}
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
}
}
nlmsg_free(acl);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG, "nl80211: Failed to set MAC ACL: %d (%s)",
ret, strerror(-ret));
return ret;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_ERROR,
"nl80211: Mesh config set failed: %d (%s)",
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
switch (ret) {
case 0:
nla_nest_end(msg, freqs_list);
nla_nest_end(msg, params);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret)
wpa_printf(MSG_ERROR,
"nl80211: Failed set AP alllowed frequency list: %d (%s)",
}
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret == 0) {
nl80211_link_set_freq(bss, freq->link_id, freq->freq);
return 0;
goto fail;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
msg = NULL;
if (ret)
wpa_printf(MSG_DEBUG, "nl80211: %s result: %d (%s)",
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
wpa_printf(MSG_DEBUG, "nl80211: sta_remove -> DEL_STATION %s " MACSTR
" --> %d (%s)",
bss->ifname, MAC2STR(addr), ret, strerror(-ret));
}
msg = nl80211_ifindex_msg(drv, ifidx, 0, NL80211_CMD_DEL_INTERFACE);
- if (send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL) == 0)
+ if (send_and_recv_cmd(drv, msg) == 0)
return;
wpa_printf(MSG_ERROR, "Failed to remove interface (ifidx=%d)", ifidx);
}
if (nla_put(msg, NL80211_ATTR_STA_FLAGS2, sizeof(upd), &upd))
goto fail;
- return send_and_recv_msgs(bss->drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(bss->drv, msg);
fail:
nlmsg_free(msg);
return -ENOBUFS;
nla_put_u16(msg, NL80211_ATTR_AIRTIME_WEIGHT, weight))
goto fail;
- ret = send_and_recv_msgs(bss->drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(bss->drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG,
"nl80211: SET_STATION[AIRTIME_WEIGHT] failed: ret=%d (%s)",
if (!msg || nla_put_u32(msg, NL80211_ATTR_IFTYPE, mode))
goto fail;
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
msg = NULL;
if (!ret)
return 0;
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (!ret)
return 0;
wpa_printf(MSG_DEBUG, "nl80211: Failed to set STA flag: %d (%s)",
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (!ret)
return 0;
wpa_printf(MSG_DEBUG, "nl80211: Failed to set RTS threshold %d: "
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (!ret)
return 0;
wpa_printf(MSG_DEBUG, "nl80211: Failed to set fragmentation threshold "
* XXX: FIX! this needs to flush all VLANs too
*/
msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_STATION);
- res = send_and_recv_msgs(bss->drv, msg, NULL, NULL, NULL, NULL, NULL);
+ res = send_and_recv_cmd(bss->drv, msg);
if (res) {
wpa_printf(MSG_DEBUG, "nl80211: Station flush failed: ret=%d "
"(%s)", res, strerror(-res));
nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link_id))
goto fail;
- res = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ res = send_and_recv_cmd(drv, msg);
wpa_printf(MSG_DEBUG,
"nl80211: TX queue param set: queue=%d aifs=%d cw_min=%d cw_max=%d burst_time=%d --> res=%d",
queue, aifs, cw_min, cw_max, burst_time, res);
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret < 0) {
wpa_printf(MSG_ERROR, "nl80211: NL80211_ATTR_STA_VLAN (addr="
MACSTR " ifname=%s vlan_id=%d) failed: %d (%s)",
return;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret)
wpa_printf(MSG_DEBUG, "nl80211: wait cancel failed: ret=%d "
"(%s)", ret, strerror(-ret));
return -1;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret == 0)
return 0;
wpa_printf(MSG_DEBUG, "nl80211: Failed to cancel remain-on-channel: "
nla_nest_end(msg, bands);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG, "nl80211: Set TX rates failed: ret=%d "
"(%s)", ret, strerror(-ret));
return;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_ERROR,
"nl80211: remove link (%d) failed. ret=%d (%s)",
}
nla_nest_end(msg, cqm);
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
}
return -ENOBUFS;
}
- return send_and_recv_msgs(bss->drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(bss->drv, msg);
}
msg = nl80211_bss_msg(bss, 0, NL80211_CMD_FLUSH_PMKSA);
if (!msg)
return -ENOBUFS;
- return send_and_recv_msgs(bss->drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(bss->drv, msg);
}
nla_nest_end(msg, replay_nested);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret == -EOPNOTSUPP) {
wpa_printf(MSG_DEBUG,
"nl80211: Driver does not support rekey offload");
return -ENOBUFS;
}
- ret = send_and_recv_msgs(bss->drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(bss->drv, msg);
if (ret < 0) {
wpa_printf(MSG_DEBUG,
"nl80211: Setting PS state %s failed: %d (%s)",
return -1;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret == 0)
return 0;
wpa_printf(MSG_DEBUG, "nl80211: Failed to start radar detection: "
}
nla_nest_end(msg, params);
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
#else /* CONFIG_DRIVER_NL80211_QCA */
wpa_printf(MSG_ERROR,
"nl80211: Setting TX link for TDLS Discovery Response not supported");
nla_put(msg, NL80211_ATTR_IE, len, buf))
goto fail;
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
fail:
nlmsg_free(msg);
return -ENOBUFS;
}
- res = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ res = send_and_recv_cmd(drv, msg);
wpa_printf(MSG_DEBUG, "nl80211: TDLS_OPER: oper=%d mac=" MACSTR
" --> res=%d (%s)", nl80211_oper, MAC2STR(peer), res,
strerror(-res));
return ret;
}
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
}
return -ENOBUFS;
}
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
}
#endif /* CONFIG TDLS */
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG, "nl80211: update_ft_ies failed "
"err=%d (%s)", ret, strerror(-ret));
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG,
"nl80211: update_dh_ie failed err=%d (%s)",
goto fail;
nla_nest_end(msg, beacon_csa);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG, "nl80211: switch_channel failed err=%d (%s)",
ret, strerror(-ret));
}
nla_nest_end(msg, beacon_cca);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG,
"nl80211: switch_color failed err=%d (%s)",
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret)
wpa_printf(MSG_DEBUG, "nl80211: add_ts failed err=%d (%s)",
ret, strerror(-ret));
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret)
wpa_printf(MSG_DEBUG, "nl80211: del_ts failed err=%d (%s)",
ret, strerror(-ret));
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret)
wpa_printf(MSG_DEBUG, "nl80211: Setting QoS Map failed");
nla_nest_end(msg, wowlan_triggers);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret)
wpa_printf(MSG_DEBUG, "nl80211: Setting wowlan failed");
}
nla_nest_end(msg, params);
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
}
}
nla_nest_end(msg, params);
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
}
nla_nest_end(msg, nlbssids);
nla_nest_end(msg, params);
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
fail:
nlmsg_free(msg);
}
nla_nest_end(msg, params);
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
}
#endif /* CONFIG_DRIVER_NL80211_QCA */
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG, "nl80211: mesh link probe to " MACSTR
" failed: ret=%d (%s)",
params->vht_enabled, params->eht_enabled, params->ch_width,
params->edmg_enabled);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG,
"nl80211: Failed to invoke driver ACS function: %s",
}
nla_nest_end(msg, data);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG,
"nl80211: Driver setband function failed: %s",
}
nla_nest_end(msg, params);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
msg = NULL;
if (ret) {
- wpa_printf(MSG_ERROR, "%s: err in send_and_recv_msgs",
+ wpa_printf(MSG_ERROR, "%s: err in send_and_recv_cmd",
__func__);
return ret;
}
goto fail;
nla_nest_end(msg, container);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
msg = NULL;
if (ret) {
wpa_printf(MSG_DEBUG,
return -1;
}
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
}
nla_nest_end(msg, params);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
msg = NULL;
if (ret) {
wpa_printf(MSG_ERROR,
nla_nest_end(msg, attr);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
msg = NULL;
if (ret) {
wpa_printf(MSG_ERROR,
nla_nest_end(msg, nlpeers);
nla_nest_end(msg, attr);
- return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ return send_and_recv_cmd(drv, msg);
fail:
nlmsg_free(msg);
}
nla_nest_end(msg, attr);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret)
wpa_printf(MSG_DEBUG,
"nl80211: Set secure ranging context failed: ret=%d (%s)",
params->hw_mode, params->ht_enabled, params->ht40_enabled,
params->vht_enabled, params->ch_width);
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_ERROR,
"nl80211: BRCM Failed to invoke driver ACS function: %s",
nl80211_put_fils_connect_params(drv, params, msg))
goto fail;
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
msg = NULL;
if (ret)
wpa_dbg(drv->ctx, MSG_DEBUG,
(params->bssid &&
nla_put(msg, NL80211_ATTR_BSSID, ETH_ALEN, params->bssid)))
goto fail;
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
msg = NULL;
if (ret) {
wpa_printf(MSG_DEBUG,
bss->added_if_into_bridge = 0;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
msg = NULL;
if (ret && val && nl80211_get_4addr(bss) == 1) {
wpa_printf(MSG_DEBUG,
return -ENOBUFS;
}
- ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL, NULL);
+ ret = send_and_recv_cmd(drv, msg);
if (ret) {
wpa_printf(MSG_DEBUG, "nl80211: add link failed. ret=%d (%s)",
ret, strerror(-ret));