Lines Matching refs:bss
159 static void wpa_driver_nl80211_deinit(struct i802_bss *bss);
160 static int wpa_driver_nl80211_set_mode_ibss(struct i802_bss *bss,
167 static int nl80211_send_frame_cmd(struct i802_bss *bss,
173 static int wpa_driver_nl80211_probe_req_report(struct i802_bss *bss,
185 static int nl80211_set_channel(struct i802_bss *bss,
193 static int i802_set_iface_flags(struct i802_bss *bss, int up);
195 static void nl80211_remove_links(struct i802_bss *bss);
252 struct i802_bss *bss; in get_bss_ifindex() local
254 for (bss = drv->first_bss; bss; bss = bss->next) { in get_bss_ifindex()
255 if (bss->ifindex == ifindex) in get_bss_ifindex()
256 return bss; in get_bss_ifindex()
671 static int nl80211_set_iface_id(struct nl_msg *msg, struct i802_bss *bss) in nl80211_set_iface_id() argument
673 if (bss->wdev_id_set) in nl80211_set_iface_id()
674 return nla_put_u64(msg, NL80211_ATTR_WDEV, bss->wdev_id); in nl80211_set_iface_id()
675 return nla_put_u32(msg, NL80211_ATTR_IFINDEX, bss->ifindex); in nl80211_set_iface_id()
679 struct nl_msg * nl80211_cmd_msg(struct i802_bss *bss, int flags, uint8_t cmd) in nl80211_cmd_msg() argument
687 if (!nl80211_cmd(bss->drv, msg, flags, cmd) || in nl80211_cmd_msg()
688 nl80211_set_iface_id(msg, bss) < 0) { in nl80211_cmd_msg()
731 struct nl_msg * nl80211_bss_msg(struct i802_bss *bss, int flags, uint8_t cmd) in nl80211_bss_msg() argument
733 return nl80211_ifindex_msg(bss->drv, bss->ifindex, flags, cmd); in nl80211_bss_msg()
771 int nl80211_get_wiphy_index(struct i802_bss *bss) in nl80211_get_wiphy_index() argument
779 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_GET_INTERFACE))) in nl80211_get_wiphy_index()
782 if (send_and_recv_resp(bss->drv, msg, netdev_info_handler, &data) == 0) in nl80211_get_wiphy_index()
788 static enum nl80211_iftype nl80211_get_ifmode(struct i802_bss *bss) in nl80211_get_ifmode() argument
796 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_GET_INTERFACE))) in nl80211_get_ifmode()
799 if (send_and_recv_resp(bss->drv, msg, netdev_info_handler, &data) == 0) in nl80211_get_ifmode()
805 static int nl80211_get_macaddr(struct i802_bss *bss) in nl80211_get_macaddr() argument
809 .macaddr = bss->addr, in nl80211_get_macaddr()
812 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_GET_INTERFACE))) in nl80211_get_macaddr()
815 return send_and_recv_resp(bss->drv, msg, netdev_info_handler, &data); in nl80211_get_macaddr()
819 static int nl80211_get_4addr(struct i802_bss *bss) in nl80211_get_4addr() argument
826 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_GET_INTERFACE)) || in nl80211_get_4addr()
827 send_and_recv_resp(bss->drv, msg, netdev_info_handler, &data)) in nl80211_get_4addr()
908 nl80211_get_wiphy_data_ap(struct i802_bss *bss) in nl80211_get_wiphy_data_ap() argument
916 if (bss->wiphy_data != NULL) in nl80211_get_wiphy_data_ap()
917 return bss->wiphy_data; in nl80211_get_wiphy_data_ap()
919 wiphy_idx = nl80211_get_wiphy_index(bss); in nl80211_get_wiphy_data_ap()
935 if (ieee80211_freq_to_chan(bss->flink->freq, &channel) != in nl80211_get_wiphy_data_ap()
947 w->nl_beacons = nl_create_handle(bss->drv->global->nl_cb, in nl80211_get_wiphy_data_ap()
954 if (nl80211_register_beacons(bss->drv, w)) { in nl80211_get_wiphy_data_ap()
969 if (tmp_bss->drv == bss->drv) { in nl80211_get_wiphy_data_ap()
976 dl_list_add(&w->drvs, &bss->drv->wiphy_list); in nl80211_get_wiphy_data_ap()
978 dl_list_add(&w->bsss, &bss->wiphy_list); in nl80211_get_wiphy_data_ap()
979 bss->wiphy_data = w; in nl80211_get_wiphy_data_ap()
984 static void nl80211_put_wiphy_data_ap(struct i802_bss *bss) in nl80211_put_wiphy_data_ap() argument
986 struct nl80211_wiphy_data *w = bss->wiphy_data; in nl80211_put_wiphy_data_ap()
992 bss->wiphy_data = NULL; in nl80211_put_wiphy_data_ap()
993 dl_list_del(&bss->wiphy_list); in nl80211_put_wiphy_data_ap()
997 if (tmp_bss->drv == bss->drv) { in nl80211_put_wiphy_data_ap()
1004 dl_list_del(&bss->drv->wiphy_list); in nl80211_put_wiphy_data_ap()
1020 struct i802_bss *bss = priv; in nl80211_get_ifindex() local
1021 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_ifindex()
1029 struct i802_bss *bss = priv; in wpa_driver_nl80211_get_bssid() local
1030 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_bssid()
1040 struct i802_bss *bss = priv; in wpa_driver_nl80211_get_ssid() local
1041 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_ssid()
1097 struct i802_bss *bss = priv; in nl80211_get_sta_mlo_info() local
1098 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_sta_mlo_info()
1255 struct i802_bss *bss; in nl80211_refresh_mac() local
1258 bss = get_bss_ifindex(drv, ifindex); in nl80211_refresh_mac()
1259 if (bss && in nl80211_refresh_mac()
1261 bss->ifname, addr) < 0) { in nl80211_refresh_mac()
1264 bss->ifname); in nl80211_refresh_mac()
1265 } else if (bss && !ether_addr_equal(addr, bss->addr)) { in nl80211_refresh_mac()
1269 ifindex, bss->ifname, in nl80211_refresh_mac()
1270 MAC2STR(bss->addr), MAC2STR(addr)); in nl80211_refresh_mac()
1271 os_memcpy(bss->prev_addr, bss->addr, ETH_ALEN); in nl80211_refresh_mac()
1272 os_memcpy(bss->addr, addr, ETH_ALEN); in nl80211_refresh_mac()
1434 struct i802_bss *bss; in wpa_driver_nl80211_event_rtm_newlink() local
1447 for (bss = drv->first_bss; bss; bss = bss->next) { in wpa_driver_nl80211_event_rtm_newlink()
1448 if (os_strcmp(ifname, bss->ifname) == 0) { in wpa_driver_nl80211_event_rtm_newlink()
1449 os_strlcpy(bss->brname, namebuf, IFNAMSIZ); in wpa_driver_nl80211_event_rtm_newlink()
1548 struct nlattr *bss[NL80211_BSS_MAX + 1]; in nl80211_get_assoc_freq_handler() local
1563 nla_parse_nested(bss, NL80211_BSS_MAX, tb[NL80211_ATTR_BSS], in nl80211_get_assoc_freq_handler()
1565 !bss[NL80211_BSS_STATUS]) in nl80211_get_assoc_freq_handler()
1568 status = nla_get_u32(bss[NL80211_BSS_STATUS]); in nl80211_get_assoc_freq_handler()
1570 bss[NL80211_BSS_FREQUENCY]) { in nl80211_get_assoc_freq_handler()
1572 u32 freq = nla_get_u32(bss[NL80211_BSS_FREQUENCY]); in nl80211_get_assoc_freq_handler()
1574 if (bss[NL80211_BSS_MLO_LINK_ID]) in nl80211_get_assoc_freq_handler()
1575 link_id = nla_get_u8(bss[NL80211_BSS_MLO_LINK_ID]); in nl80211_get_assoc_freq_handler()
1592 bss[NL80211_BSS_FREQUENCY]) { in nl80211_get_assoc_freq_handler()
1593 ctx->ibss_freq = nla_get_u32(bss[NL80211_BSS_FREQUENCY]); in nl80211_get_assoc_freq_handler()
1598 bss[NL80211_BSS_BSSID]) { in nl80211_get_assoc_freq_handler()
1600 const u8 *bssid = nla_data(bss[NL80211_BSS_BSSID]); in nl80211_get_assoc_freq_handler()
1602 if (bss[NL80211_BSS_MLO_LINK_ID]) in nl80211_get_assoc_freq_handler()
1603 link_id = nla_get_u8(bss[NL80211_BSS_MLO_LINK_ID]); in nl80211_get_assoc_freq_handler()
1622 bss[NL80211_BSS_INFORMATION_ELEMENTS]) { in nl80211_get_assoc_freq_handler()
1626 ie = nla_data(bss[NL80211_BSS_INFORMATION_ELEMENTS]); in nl80211_get_assoc_freq_handler()
1627 ie_len = nla_len(bss[NL80211_BSS_INFORMATION_ELEMENTS]); in nl80211_get_assoc_freq_handler()
1832 struct i802_bss *bss = priv; in nl80211_channel_info() local
1833 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_channel_info()
1868 struct i802_bss *bss = priv; in wpa_driver_nl80211_set_country() local
1869 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_country()
1911 struct i802_bss *bss = priv; in wpa_driver_nl80211_get_country() local
1912 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_country()
2183 static int nl80211_init_connect_handle(struct i802_bss *bss) in nl80211_init_connect_handle() argument
2185 if (bss->nl_connect) { in nl80211_init_connect_handle()
2188 bss->nl_connect); in nl80211_init_connect_handle()
2192 bss->nl_connect = nl_create_handle(bss->nl_cb, "connect"); in nl80211_init_connect_handle()
2193 if (!bss->nl_connect) in nl80211_init_connect_handle()
2195 nl80211_register_eloop_read(&bss->nl_connect, in nl80211_init_connect_handle()
2197 bss->nl_cb, 1); in nl80211_init_connect_handle()
2202 static int nl80211_init_bss(struct i802_bss *bss) in nl80211_init_bss() argument
2204 bss->nl_cb = nl_cb_alloc(NL_CB_DEFAULT); in nl80211_init_bss()
2205 if (!bss->nl_cb) in nl80211_init_bss()
2208 nl_cb_set(bss->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, in nl80211_init_bss()
2210 nl_cb_set(bss->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, in nl80211_init_bss()
2211 process_bss_event, bss); in nl80211_init_bss()
2213 nl80211_init_connect_handle(bss); in nl80211_init_bss()
2219 static void nl80211_destroy_bss(struct i802_bss *bss) in nl80211_destroy_bss() argument
2221 nl_cb_put(bss->nl_cb); in nl80211_destroy_bss()
2222 bss->nl_cb = NULL; in nl80211_destroy_bss()
2224 if (bss->nl_connect) in nl80211_destroy_bss()
2225 nl80211_destroy_eloop_handle(&bss->nl_connect, 1); in nl80211_destroy_bss()
2288 struct i802_bss *bss; in wpa_driver_nl80211_drv_init() local
2335 bss = drv->first_bss; in wpa_driver_nl80211_drv_init()
2336 bss->drv = drv; in wpa_driver_nl80211_drv_init()
2337 bss->ctx = ctx; in wpa_driver_nl80211_drv_init()
2339 os_strlcpy(bss->ifname, ifname, sizeof(bss->ifname)); in wpa_driver_nl80211_drv_init()
2345 if (nl80211_init_bss(bss)) in wpa_driver_nl80211_drv_init()
2390 bss->valid_links = 0; in wpa_driver_nl80211_drv_init()
2391 bss->flink = &bss->links[0]; in wpa_driver_nl80211_drv_init()
2392 os_memcpy(bss->flink->addr, bss->addr, ETH_ALEN); in wpa_driver_nl80211_drv_init()
2394 return bss; in wpa_driver_nl80211_drv_init()
2397 wpa_driver_nl80211_deinit(bss); in wpa_driver_nl80211_drv_init()
2418 static int nl80211_register_frame(struct i802_bss *bss, in nl80211_register_frame() argument
2423 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_register_frame()
2434 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_REGISTER_FRAME)) || in nl80211_register_frame()
2455 static int nl80211_alloc_mgmt_handle(struct i802_bss *bss) in nl80211_alloc_mgmt_handle() argument
2457 if (bss->nl_mgmt) { in nl80211_alloc_mgmt_handle()
2459 "already on! (nl_mgmt=%p)", bss->nl_mgmt); in nl80211_alloc_mgmt_handle()
2463 bss->nl_mgmt = nl_create_handle(bss->nl_cb, "mgmt"); in nl80211_alloc_mgmt_handle()
2464 if (bss->nl_mgmt == NULL) in nl80211_alloc_mgmt_handle()
2471 static void nl80211_mgmt_handle_register_eloop(struct i802_bss *bss) in nl80211_mgmt_handle_register_eloop() argument
2473 nl80211_register_eloop_read(&bss->nl_mgmt, in nl80211_mgmt_handle_register_eloop()
2475 bss->nl_cb, 0); in nl80211_mgmt_handle_register_eloop()
2479 static int nl80211_register_action_frame2(struct i802_bss *bss, in nl80211_register_action_frame2() argument
2484 return nl80211_register_frame(bss, bss->nl_mgmt, in nl80211_register_action_frame2()
2489 static int nl80211_register_action_frame(struct i802_bss *bss, in nl80211_register_action_frame() argument
2492 return nl80211_register_action_frame2(bss, match, match_len, false); in nl80211_register_action_frame()
2496 static int nl80211_mgmt_subscribe_non_ap(struct i802_bss *bss) in nl80211_mgmt_subscribe_non_ap() argument
2498 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_mgmt_subscribe_non_ap()
2502 if (nl80211_alloc_mgmt_handle(bss)) in nl80211_mgmt_subscribe_non_ap()
2505 "handle %p", bss->nl_mgmt); in nl80211_mgmt_subscribe_non_ap()
2509 nl80211_register_frame(bss, bss->nl_mgmt, type, NULL, 0, false); in nl80211_mgmt_subscribe_non_ap()
2513 nl80211_register_frame(bss, bss->nl_mgmt, type, in nl80211_mgmt_subscribe_non_ap()
2519 if (nl80211_register_frame(bss, bss->nl_mgmt, type, in nl80211_mgmt_subscribe_non_ap()
2526 if (nl80211_register_action_frame(bss, (u8 *) "\x01\x04", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2531 if (nl80211_register_action_frame(bss, (u8 *) "\x04\x0a", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2534 if (nl80211_register_action_frame(bss, (u8 *) "\x04\x0b", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2537 if (nl80211_register_action_frame(bss, (u8 *) "\x04\x0c", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2540 if (nl80211_register_action_frame(bss, (u8 *) "\x04\x0d", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2543 if (nl80211_register_action_frame(bss, (u8 *) "\x09\x0a", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2546 if (nl80211_register_action_frame(bss, (u8 *) "\x09\x0b", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2549 if (nl80211_register_action_frame(bss, (u8 *) "\x09\x0c", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2552 if (nl80211_register_action_frame(bss, (u8 *) "\x09\x0d", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2557 if (nl80211_register_action_frame(bss, in nl80211_mgmt_subscribe_non_ap()
2562 if (nl80211_register_action_frame(bss, in nl80211_mgmt_subscribe_non_ap()
2570 if (nl80211_register_action_frame2(bss, NAN_PUB_ACTION, 6, true) < 0) { in nl80211_mgmt_subscribe_non_ap()
2572 if (nl80211_register_action_frame2(bss, NAN_PUB_ACTION, 6, in nl80211_mgmt_subscribe_non_ap()
2580 if (nl80211_register_action_frame(bss, in nl80211_mgmt_subscribe_non_ap()
2587 if (nl80211_register_action_frame(bss, (u8 *) "\x08\x00", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2591 if (nl80211_register_action_frame(bss, (u8 *) "\x08\x01", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2596 if (nl80211_register_action_frame(bss, (u8 *) "\x04\x0e", 2) < in nl80211_mgmt_subscribe_non_ap()
2603 if (nl80211_register_action_frame(bss, (u8 *) "\x12", 1) < 0) in nl80211_mgmt_subscribe_non_ap()
2608 if (nl80211_register_action_frame(bss, (u8 *) "\x06", 1) < 0) in nl80211_mgmt_subscribe_non_ap()
2624 if (nl80211_register_action_frame(bss, (u8 *) "\x0a\x07", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2627 if (nl80211_register_action_frame(bss, (u8 *) "\x0a\x11", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2631 if (nl80211_register_action_frame(bss, (u8 *) "\x0a\x0b", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2637 if (nl80211_register_action_frame(bss, (u8 *) "\x0a\x1a", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2642 if (nl80211_register_action_frame(bss, (u8 *) "\x11\x01", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2646 if (nl80211_register_action_frame(bss, (u8 *) "\x11\x02", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2650 if (nl80211_register_action_frame(bss, (u8 *) "\x05\x05", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2655 nl80211_register_action_frame(bss, (u8 *) "\x05\x00", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2660 (nl80211_register_action_frame(bss, (u8 *) "\x05\x02", 2) < 0)) in nl80211_mgmt_subscribe_non_ap()
2664 if (nl80211_register_action_frame(bss, (u8 *) "\x13\x01", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2668 if (nl80211_register_action_frame(bss, (u8 *) "\x13\x05", 2) < 0) in nl80211_mgmt_subscribe_non_ap()
2672 if (nl80211_register_action_frame(bss, (u8 *) "\x7e\x50\x6f\x9a\x1a", in nl80211_mgmt_subscribe_non_ap()
2676 nl80211_mgmt_handle_register_eloop(bss); in nl80211_mgmt_subscribe_non_ap()
2682 static int nl80211_mgmt_subscribe_mesh(struct i802_bss *bss) in nl80211_mgmt_subscribe_mesh() argument
2686 if (nl80211_alloc_mgmt_handle(bss)) in nl80211_mgmt_subscribe_mesh()
2691 bss->nl_mgmt); in nl80211_mgmt_subscribe_mesh()
2694 if (nl80211_register_frame(bss, bss->nl_mgmt, in nl80211_mgmt_subscribe_mesh()
2701 if (nl80211_register_action_frame(bss, (u8 *) "\x0f\x01", 2) < 0) in nl80211_mgmt_subscribe_mesh()
2704 if (nl80211_register_action_frame(bss, (u8 *) "\x0f\x02", 2) < 0) in nl80211_mgmt_subscribe_mesh()
2707 if (nl80211_register_action_frame(bss, (u8 *) "\x0f\x03", 2) < 0) in nl80211_mgmt_subscribe_mesh()
2710 nl80211_mgmt_handle_register_eloop(bss); in nl80211_mgmt_subscribe_mesh()
2716 static int nl80211_register_spurious_class3(struct i802_bss *bss) in nl80211_register_spurious_class3() argument
2721 msg = nl80211_bss_msg(bss, 0, NL80211_CMD_UNEXPECTED_FRAME); in nl80211_register_spurious_class3()
2722 ret = send_and_recv(bss->drv->global, bss->nl_mgmt, msg, NULL, NULL, in nl80211_register_spurious_class3()
2733 static int nl80211_action_subscribe_ap(struct i802_bss *bss) in nl80211_action_subscribe_ap() argument
2738 if (nl80211_register_action_frame(bss, (u8 *) "\x04", 1) < 0) in nl80211_action_subscribe_ap()
2741 if (nl80211_register_action_frame(bss, (u8 *) "\x05\x01", 2) < 0) in nl80211_action_subscribe_ap()
2744 if (nl80211_register_action_frame(bss, (u8 *) "\x05\x03", 2) < 0) in nl80211_action_subscribe_ap()
2747 if (nl80211_register_action_frame(bss, (u8 *) "\x05\x04", 2) < 0) in nl80211_action_subscribe_ap()
2750 if (nl80211_register_action_frame(bss, (u8 *) "\x06", 1) < 0) in nl80211_action_subscribe_ap()
2753 if (nl80211_register_action_frame(bss, (u8 *) "\x08", 1) < 0) in nl80211_action_subscribe_ap()
2756 if (nl80211_register_action_frame(bss, (u8 *) "\x09", 1) < 0) in nl80211_action_subscribe_ap()
2759 if (nl80211_register_action_frame(bss, (u8 *) "\x0a", 1) < 0) in nl80211_action_subscribe_ap()
2762 if (nl80211_register_action_frame(bss, (u8 *) "\x11", 1) < 0) in nl80211_action_subscribe_ap()
2766 if (nl80211_register_action_frame(bss, (u8 *) "\x12", 1) < 0) in nl80211_action_subscribe_ap()
2770 if (nl80211_register_action_frame(bss, (u8 *) "\x7f", 1) < 0) in nl80211_action_subscribe_ap()
2777 static int nl80211_mgmt_subscribe_ap(struct i802_bss *bss) in nl80211_mgmt_subscribe_ap() argument
2795 if (nl80211_alloc_mgmt_handle(bss)) in nl80211_mgmt_subscribe_ap()
2798 "handle %p", bss->nl_mgmt); in nl80211_mgmt_subscribe_ap()
2801 if (nl80211_register_frame(bss, bss->nl_mgmt, in nl80211_mgmt_subscribe_ap()
2809 if (nl80211_action_subscribe_ap(bss)) in nl80211_mgmt_subscribe_ap()
2812 if (nl80211_register_spurious_class3(bss)) in nl80211_mgmt_subscribe_ap()
2815 nl80211_mgmt_handle_register_eloop(bss); in nl80211_mgmt_subscribe_ap()
2819 nl_destroy_handles(&bss->nl_mgmt); in nl80211_mgmt_subscribe_ap()
2824 static int nl80211_mgmt_subscribe_ap_dev_sme(struct i802_bss *bss) in nl80211_mgmt_subscribe_ap_dev_sme() argument
2826 if (nl80211_alloc_mgmt_handle(bss)) in nl80211_mgmt_subscribe_ap_dev_sme()
2829 "handle %p (device SME)", bss->nl_mgmt); in nl80211_mgmt_subscribe_ap_dev_sme()
2831 if (nl80211_action_subscribe_ap(bss)) in nl80211_mgmt_subscribe_ap_dev_sme()
2834 if (bss->drv->device_ap_sme) { in nl80211_mgmt_subscribe_ap_dev_sme()
2838 if (nl80211_register_frame(bss, bss->nl_mgmt, type, NULL, 0, in nl80211_mgmt_subscribe_ap_dev_sme()
2844 nl80211_mgmt_handle_register_eloop(bss); in nl80211_mgmt_subscribe_ap_dev_sme()
2848 nl_destroy_handles(&bss->nl_mgmt); in nl80211_mgmt_subscribe_ap_dev_sme()
2853 static void nl80211_mgmt_unsubscribe(struct i802_bss *bss, const char *reason) in nl80211_mgmt_unsubscribe() argument
2855 if (bss->nl_mgmt == NULL) in nl80211_mgmt_unsubscribe()
2858 "(%s)", bss->nl_mgmt, reason); in nl80211_mgmt_unsubscribe()
2859 nl80211_destroy_eloop_handle(&bss->nl_mgmt, 0); in nl80211_mgmt_unsubscribe()
2861 nl80211_put_wiphy_data_ap(bss); in nl80211_mgmt_unsubscribe()
2871 static void nl80211_del_p2pdev(struct i802_bss *bss) in nl80211_del_p2pdev() argument
2876 msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_DEL_INTERFACE); in nl80211_del_p2pdev()
2877 ret = send_and_recv_cmd(bss->drv, msg); in nl80211_del_p2pdev()
2880 bss->ifname, (long long unsigned int) bss->wdev_id, in nl80211_del_p2pdev()
2885 static int nl80211_set_p2pdev(struct i802_bss *bss, int start) in nl80211_set_p2pdev() argument
2890 msg = nl80211_cmd_msg(bss, 0, start ? NL80211_CMD_START_P2P_DEVICE : in nl80211_set_p2pdev()
2892 ret = send_and_recv_cmd(bss->drv, msg); in nl80211_set_p2pdev()
2896 bss->ifname, (long long unsigned int) bss->wdev_id, in nl80211_set_p2pdev()
2902 static int i802_set_iface_flags(struct i802_bss *bss, int up) in i802_set_iface_flags() argument
2906 nlmode = nl80211_get_ifmode(bss); in i802_set_iface_flags()
2908 return linux_set_iface_flags(bss->drv->global->ioctl_sock, in i802_set_iface_flags()
2909 bss->ifname, up); in i802_set_iface_flags()
2913 return nl80211_set_p2pdev(bss, up); in i802_set_iface_flags()
2976 struct i802_bss *bss = drv->first_bss; in wpa_driver_nl80211_finish_drv_init() local
2980 drv->ifindex = if_nametoindex(bss->ifname); in wpa_driver_nl80211_finish_drv_init()
2981 bss->ifindex = drv->ifindex; in wpa_driver_nl80211_finish_drv_init()
2982 bss->wdev_id = drv->global->if_add_wdevid; in wpa_driver_nl80211_finish_drv_init()
2983 bss->wdev_id_set = drv->global->if_add_wdevid_set; in wpa_driver_nl80211_finish_drv_init()
2985 bss->if_dynamic = drv->ifindex == drv->global->if_add_ifindex; in wpa_driver_nl80211_finish_drv_init()
2986 bss->if_dynamic = bss->if_dynamic || drv->global->if_add_wdevid_set; in wpa_driver_nl80211_finish_drv_init()
2989 if (!bss->if_dynamic && nl80211_get_ifmode(bss) == NL80211_IFTYPE_AP) in wpa_driver_nl80211_finish_drv_init()
2990 bss->static_ap = 1; in wpa_driver_nl80211_finish_drv_init()
2993 nl80211_get_ifmode(bss) != NL80211_IFTYPE_P2P_DEVICE && in wpa_driver_nl80211_finish_drv_init()
2994 linux_iface_up(drv->global->ioctl_sock, bss->ifname) > 0) in wpa_driver_nl80211_finish_drv_init()
3000 if (driver_params && nl80211_set_param(bss, driver_params) < 0) in wpa_driver_nl80211_finish_drv_init()
3004 bss->ifname, drv->phyname); in wpa_driver_nl80211_finish_drv_init()
3007 (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 0) || in wpa_driver_nl80211_finish_drv_init()
3008 linux_set_ifhwaddr(drv->global->ioctl_sock, bss->ifname, in wpa_driver_nl80211_finish_drv_init()
3012 if (first && nl80211_get_ifmode(bss) == NL80211_IFTYPE_STATION) in wpa_driver_nl80211_finish_drv_init()
3015 if (drv->hostapd || bss->static_ap) in wpa_driver_nl80211_finish_drv_init()
3017 else if (bss->if_dynamic || in wpa_driver_nl80211_finish_drv_init()
3018 nl80211_get_ifmode(bss) == NL80211_IFTYPE_MESH_POINT) in wpa_driver_nl80211_finish_drv_init()
3019 nlmode = nl80211_get_ifmode(bss); in wpa_driver_nl80211_finish_drv_init()
3023 if (wpa_driver_nl80211_set_mode(bss, nlmode) < 0) { in wpa_driver_nl80211_finish_drv_init()
3029 nl80211_get_macaddr(bss); in wpa_driver_nl80211_finish_drv_init()
3034 int ret = i802_set_iface_flags(bss, 1); in wpa_driver_nl80211_finish_drv_init()
3037 "interface '%s' UP", bss->ifname); in wpa_driver_nl80211_finish_drv_init()
3042 nl80211_disable_11b_rates(bss->drv, in wpa_driver_nl80211_finish_drv_init()
3043 bss->drv->ifindex, 1); in wpa_driver_nl80211_finish_drv_init()
3049 "interface '%s' due to rfkill", bss->ifname); in wpa_driver_nl80211_finish_drv_init()
3061 if (linux_get_ifhwaddr(drv->global->ioctl_sock, bss->ifname, in wpa_driver_nl80211_finish_drv_init()
3062 bss->addr)) in wpa_driver_nl80211_finish_drv_init()
3064 os_memcpy(drv->perm_addr, bss->addr, ETH_ALEN); in wpa_driver_nl80211_finish_drv_init()
3079 static int wpa_driver_nl80211_del_beacon(struct i802_bss *bss, in wpa_driver_nl80211_del_beacon() argument
3083 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_del_beacon()
3084 struct i802_link *link = nl80211_get_link(bss, link_id); in wpa_driver_nl80211_del_beacon()
3090 bss->ifindex); in wpa_driver_nl80211_del_beacon()
3094 nl80211_put_wiphy_data_ap(bss); in wpa_driver_nl80211_del_beacon()
3095 msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_BEACON); in wpa_driver_nl80211_del_beacon()
3114 static void wpa_driver_nl80211_del_beacon_all(struct i802_bss *bss) in wpa_driver_nl80211_del_beacon_all() argument
3118 for_each_link_default(bss->valid_links, link_id, NL80211_DRV_LINK_ID_NA) in wpa_driver_nl80211_del_beacon_all()
3119 wpa_driver_nl80211_del_beacon(bss, link_id); in wpa_driver_nl80211_del_beacon_all()
3130 static void wpa_driver_nl80211_deinit(struct i802_bss *bss) in wpa_driver_nl80211_deinit() argument
3132 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_deinit()
3136 bss->ifname, drv->disabled_11b_rates); in wpa_driver_nl80211_deinit()
3138 bss->in_deinit = 1; in wpa_driver_nl80211_deinit()
3144 if (bss->nl_preq) in wpa_driver_nl80211_deinit()
3145 wpa_driver_nl80211_probe_req_report(bss, 0); in wpa_driver_nl80211_deinit()
3146 if (bss->added_if_into_bridge) { in wpa_driver_nl80211_deinit()
3147 if (linux_br_del_if(drv->global->ioctl_sock, bss->brname, in wpa_driver_nl80211_deinit()
3148 bss->ifname) < 0) in wpa_driver_nl80211_deinit()
3151 bss->ifname, bss->brname, strerror(errno)); in wpa_driver_nl80211_deinit()
3157 if (bss->added_bridge) { in wpa_driver_nl80211_deinit()
3158 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->brname, in wpa_driver_nl80211_deinit()
3162 bss->brname); in wpa_driver_nl80211_deinit()
3163 if (linux_br_del(drv->global->ioctl_sock, bss->brname) < 0) in wpa_driver_nl80211_deinit()
3166 bss->brname, strerror(errno)); in wpa_driver_nl80211_deinit()
3172 wpa_driver_nl80211_del_beacon_all(bss); in wpa_driver_nl80211_deinit()
3173 nl80211_remove_links(bss); in wpa_driver_nl80211_deinit()
3195 (void) i802_set_iface_flags(bss, 0); in wpa_driver_nl80211_deinit()
3198 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, in wpa_driver_nl80211_deinit()
3203 if (linux_set_ifhwaddr(drv->global->ioctl_sock, bss->ifname, in wpa_driver_nl80211_deinit()
3212 wpa_driver_nl80211_set_mode(bss, in wpa_driver_nl80211_deinit()
3214 nl80211_mgmt_unsubscribe(bss, "deinit"); in wpa_driver_nl80211_deinit()
3216 nl80211_mgmt_unsubscribe(bss, "deinit"); in wpa_driver_nl80211_deinit()
3217 nl80211_del_p2pdev(bss); in wpa_driver_nl80211_deinit()
3440 static int wpa_driver_nl80211_set_key(struct i802_bss *bss, in wpa_driver_nl80211_set_key() argument
3443 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_key()
3782 struct i802_bss *bss) in wpa_driver_nl80211_mlme() argument
3796 ret = send_and_recv(drv->global, bss->nl_connect, msg, in wpa_driver_nl80211_mlme()
3809 struct i802_bss *bss) in wpa_driver_nl80211_disconnect() argument
3817 reason_code, 0, bss); in wpa_driver_nl80211_disconnect()
3829 static int wpa_driver_nl80211_deauthenticate(struct i802_bss *bss, in wpa_driver_nl80211_deauthenticate() argument
3832 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_deauthenticate()
3840 return wpa_driver_nl80211_disconnect(drv, reason_code, bss); in wpa_driver_nl80211_deauthenticate()
3846 reason_code, 0, bss); in wpa_driver_nl80211_deauthenticate()
3923 static void nl80211_unmask_11b_rates(struct i802_bss *bss) in nl80211_unmask_11b_rates() argument
3925 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_unmask_11b_rates()
3937 bss->ifname); in nl80211_unmask_11b_rates()
3964 struct i802_bss *bss, struct wpa_driver_auth_params *params) in wpa_driver_nl80211_authenticate() argument
3966 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_authenticate()
3975 nl80211_unmask_11b_rates(bss); in wpa_driver_nl80211_authenticate()
3991 wpa_driver_nl80211_set_mode(bss, nlmode) < 0) in wpa_driver_nl80211_authenticate()
4003 p.ifname = bss->ifname; in wpa_driver_nl80211_authenticate()
4016 wpa_driver_nl80211_set_key(bss, &p); in wpa_driver_nl80211_authenticate()
4093 bss, params->bssid, in wpa_driver_nl80211_authenticate()
4121 ret = wpa_driver_nl80211_scan(bss, &scan); in wpa_driver_nl80211_authenticate()
4154 struct i802_bss *bss = drv->first_bss; in wpa_driver_nl80211_authenticate_retry() local
4194 return wpa_driver_nl80211_authenticate(bss, ¶ms); in wpa_driver_nl80211_authenticate_retry()
4198 struct i802_link * nl80211_get_link(struct i802_bss *bss, s8 link_id) in nl80211_get_link() argument
4201 return bss->flink; in nl80211_get_link()
4203 if (BIT(link_id) & bss->valid_links) in nl80211_get_link()
4204 return &bss->links[link_id]; in nl80211_get_link()
4206 return bss->flink; in nl80211_get_link()
4210 static void nl80211_link_set_freq(struct i802_bss *bss, s8 link_id, int freq) in nl80211_link_set_freq() argument
4212 struct i802_link *link = nl80211_get_link(bss, link_id); in nl80211_link_set_freq()
4218 static int nl80211_get_link_freq(struct i802_bss *bss, const u8 *addr, in nl80211_get_link_freq() argument
4223 for_each_link(bss->valid_links, i) { in nl80211_get_link_freq()
4224 if (ether_addr_equal(bss->links[i].addr, addr)) { in nl80211_get_link_freq()
4228 bss->links[i].freq, MAC2STR(addr)); in nl80211_get_link_freq()
4229 return bss->links[i].freq; in nl80211_get_link_freq()
4235 bss->flink->freq); in nl80211_get_link_freq()
4237 return bss->flink->freq; in nl80211_get_link_freq()
4241 static int wpa_driver_nl80211_send_mlme(struct i802_bss *bss, const u8 *data, in wpa_driver_nl80211_send_mlme() argument
4250 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_send_mlme()
4256 struct i802_link *link = nl80211_get_link(bss, link_id); in wpa_driver_nl80211_send_mlme()
4289 unsigned int link_freq = nl80211_get_link_freq(bss, mgmt->sa, in wpa_driver_nl80211_send_mlme()
4389 res = nl80211_send_frame_cmd(bss, freq, wait_time, data, data_len, in wpa_driver_nl80211_send_mlme()
4415 static int nl80211_set_bss(struct i802_bss *bss, int cts, int preamble, in nl80211_set_bss() argument
4419 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_bss()
4422 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_BSS)) || in nl80211_set_bss()
4447 struct i802_bss *bss = priv; in wpa_driver_nl80211_set_acl() local
4448 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_acl()
4536 struct i802_bss *bss = priv; in nl80211_set_mesh_config() local
4537 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_mesh_config()
4679 static int nl80211_set_multicast_to_unicast(struct i802_bss *bss, in nl80211_set_multicast_to_unicast() argument
4682 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_multicast_to_unicast()
4686 msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_MULTICAST_TO_UNICAST); in nl80211_set_multicast_to_unicast()
4692 bss->ifname); in nl80211_set_multicast_to_unicast()
4704 bss->ifname); in nl80211_set_multicast_to_unicast()
4711 bss->ifname); in nl80211_set_multicast_to_unicast()
4717 ret, strerror(-ret), bss->ifname); in nl80211_set_multicast_to_unicast()
4750 static int nl80211_fils_discovery(struct i802_bss *bss, struct nl_msg *msg, in nl80211_fils_discovery() argument
4755 if (!bss->drv->fils_discovery) { in nl80211_fils_discovery()
4758 bss->ifname); in nl80211_fils_discovery()
4781 static int nl80211_unsol_bcast_probe_resp(struct i802_bss *bss, in nl80211_unsol_bcast_probe_resp() argument
4787 if (!bss->drv->unsol_bcast_probe_resp) { in nl80211_unsol_bcast_probe_resp()
4790 bss->ifname); in nl80211_unsol_bcast_probe_resp()
5049 struct i802_bss *bss = priv; in wpa_driver_nl80211_set_ap() local
5050 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_ap()
5051 struct i802_link *link = bss->flink; in wpa_driver_nl80211_set_ap()
5064 if (!nl80211_link_valid(bss->valid_links, in wpa_driver_nl80211_set_ap()
5068 params->mld_link_id, bss->valid_links); in wpa_driver_nl80211_set_ap()
5072 link = nl80211_get_link(bss, params->mld_link_id); in wpa_driver_nl80211_set_ap()
5073 } else if (bss->valid_links) { in wpa_driver_nl80211_set_ap()
5085 !nl80211_get_wiphy_data_ap(bss)) in wpa_driver_nl80211_set_ap()
5092 wpa_printf(MSG_DEBUG, "nl80211: ifindex=%d", bss->ifindex); in wpa_driver_nl80211_set_ap()
5099 if (!(msg = nl80211_bss_msg(bss, 0, cmd)) || in wpa_driver_nl80211_set_ap()
5120 nl80211_link_set_freq(bss, params->mld_link_id, in wpa_driver_nl80211_set_ap()
5390 nl80211_unsol_bcast_probe_resp(bss, msg, ¶ms->ubpr) < 0) in wpa_driver_nl80211_set_ap()
5404 if (params->fd_max_int && nl80211_fils_discovery(bss, msg, params) < 0) in wpa_driver_nl80211_set_ap()
5426 ret = send_and_recv(drv->global, bss->nl_connect, msg, NULL, NULL, NULL, in wpa_driver_nl80211_set_ap()
5433 nl80211_set_bss(bss, params->cts_protect, params->preamble, in wpa_driver_nl80211_set_ap()
5438 nl80211_set_multicast_to_unicast(bss, in wpa_driver_nl80211_set_ap()
5444 bss->ifname, link->bandwidth, in wpa_driver_nl80211_set_ap()
5446 ret = nl80211_set_channel(bss, params->freq, 1); in wpa_driver_nl80211_set_ap()
5484 static int nl80211_set_channel(struct i802_bss *bss, in nl80211_set_channel() argument
5487 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_channel()
5504 if (nl80211_link_valid(bss->valid_links, freq->link_id)) { in nl80211_set_channel()
5516 nl80211_link_set_freq(bss, freq->link_id, freq->freq); in nl80211_set_channel()
5578 struct i802_bss *bss = priv; in wpa_driver_nl80211_sta_add() local
5579 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_sta_add()
5604 msg = nl80211_bss_msg(bss, 0, cmd); in wpa_driver_nl80211_sta_add()
5868 static void rtnl_neigh_delete_fdb_entry(struct i802_bss *bss, const u8 *addr) in rtnl_neigh_delete_fdb_entry() argument
5870 struct wpa_driver_nl80211_data *drv = bss->drv; in rtnl_neigh_delete_fdb_entry()
5873 .ndm_ifindex = bss->ifindex, in rtnl_neigh_delete_fdb_entry()
5892 bss->ifindex, nl_geterror(err)); in rtnl_neigh_delete_fdb_entry()
5903 static int wpa_driver_nl80211_sta_remove(struct i802_bss *bss, const u8 *addr, in wpa_driver_nl80211_sta_remove() argument
5906 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_sta_remove()
5910 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_STATION)) || in wpa_driver_nl80211_sta_remove()
5927 bss->ifname, MAC2STR(addr), ret, strerror(-ret)); in wpa_driver_nl80211_sta_remove()
5930 rtnl_neigh_delete_fdb_entry(bss, addr); in wpa_driver_nl80211_sta_remove()
6130 static int nl80211_setup_ap(struct i802_bss *bss) in nl80211_setup_ap() argument
6132 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_setup_ap()
6135 bss->ifname, drv->device_ap_sme, drv->use_monitor); in nl80211_setup_ap()
6143 wpa_driver_nl80211_probe_req_report(bss, 0); in nl80211_setup_ap()
6146 if (nl80211_mgmt_subscribe_ap(bss)) in nl80211_setup_ap()
6150 if (nl80211_mgmt_subscribe_ap_dev_sme(bss)) in nl80211_setup_ap()
6160 wpa_driver_nl80211_probe_req_report(bss, 1) < 0) { in nl80211_setup_ap()
6170 static void nl80211_teardown_ap(struct i802_bss *bss) in nl80211_teardown_ap() argument
6172 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_teardown_ap()
6175 bss->ifname, drv->device_ap_sme, drv->use_monitor); in nl80211_teardown_ap()
6177 wpa_driver_nl80211_probe_req_report(bss, 0); in nl80211_teardown_ap()
6179 nl80211_mgmt_unsubscribe(bss, "AP teardown (dev SME)"); in nl80211_teardown_ap()
6183 nl80211_mgmt_unsubscribe(bss, "AP teardown"); in nl80211_teardown_ap()
6185 nl80211_put_wiphy_data_ap(bss); in nl80211_teardown_ap()
6186 if (bss->flink) in nl80211_teardown_ap()
6187 bss->flink->beacon_set = 0; in nl80211_teardown_ap()
6196 struct i802_bss *bss = priv; in nl80211_tx_control_port() local
6206 msg = nl80211_bss_msg(bss, 0, NL80211_CMD_CONTROL_PORT_FRAME); in nl80211_tx_control_port()
6221 ret = send_and_recv(bss->drv->global, bss->drv->global->nl, msg, in nl80211_tx_control_port()
6228 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_tx_control_port()
6241 static int nl80211_send_eapol_data(struct i802_bss *bss, in nl80211_send_eapol_data() argument
6248 if (bss->drv->eapol_tx_sock < 0) { in nl80211_send_eapol_data()
6255 ll.sll_ifindex = bss->ifindex; in nl80211_send_eapol_data()
6259 ret = sendto(bss->drv->eapol_tx_sock, data, data_len, 0, in nl80211_send_eapol_data()
6276 struct i802_bss *bss = priv; in wpa_driver_nl80211_hapd_send_eapol() local
6277 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_hapd_send_eapol()
6288 return nl80211_tx_control_port(bss, addr, ETH_P_EAPOL, in wpa_driver_nl80211_hapd_send_eapol()
6293 return nl80211_send_eapol_data(bss, addr, data, data_len); in wpa_driver_nl80211_hapd_send_eapol()
6349 struct i802_bss *bss = priv; in wpa_driver_nl80211_sta_set_flags() local
6356 bss->ifname, MAC2STR(addr), total_flags, flags_or, flags_and, in wpa_driver_nl80211_sta_set_flags()
6359 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_STATION)) || in wpa_driver_nl80211_sta_set_flags()
6389 return send_and_recv_cmd(bss->drv, msg); in wpa_driver_nl80211_sta_set_flags()
6399 struct i802_bss *bss = priv; in driver_nl80211_sta_set_airtime_weight() local
6405 " weight=%u", bss->ifname, MAC2STR(addr), weight); in driver_nl80211_sta_set_airtime_weight()
6407 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_STATION)) || in driver_nl80211_sta_set_airtime_weight()
6412 ret = send_and_recv_cmd(bss->drv, msg); in driver_nl80211_sta_set_airtime_weight()
7072 struct i802_bss *bss) in wpa_driver_nl80211_try_connect() argument
7168 ret = send_and_recv(drv->global, bss->nl_connect, msg, NULL, NULL, NULL, in wpa_driver_nl80211_try_connect()
7193 struct i802_bss *bss) in wpa_driver_nl80211_connect() argument
7203 ret = wpa_driver_nl80211_try_connect(drv, params, bss); in wpa_driver_nl80211_connect()
7214 drv, WLAN_REASON_PREV_AUTH_NOT_VALID, bss)) in wpa_driver_nl80211_connect()
7216 ret = wpa_driver_nl80211_try_connect(drv, params, bss); in wpa_driver_nl80211_connect()
7225 struct i802_bss *bss = priv; in wpa_driver_nl80211_associate() local
7226 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_associate()
7231 nl80211_unmask_11b_rates(bss); in wpa_driver_nl80211_associate()
7246 return wpa_driver_nl80211_connect(drv, params, bss); in wpa_driver_nl80211_associate()
7354 struct i802_bss *bss, in wpa_driver_nl80211_set_mode_impl() argument
7358 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_mode_impl()
7369 if (mode_switch_res && nlmode == nl80211_get_ifmode(bss)) in wpa_driver_nl80211_set_mode_impl()
7395 res = i802_set_iface_flags(bss, 0); in wpa_driver_nl80211_set_mode_impl()
7410 res = nl80211_set_channel(bss, desired_freq_params, 0); in wpa_driver_nl80211_set_mode_impl()
7418 bss->brname[0] && in wpa_driver_nl80211_set_mode_impl()
7419 (bss->added_if_into_bridge || bss->already_in_bridge)) { in wpa_driver_nl80211_set_mode_impl()
7422 bss->ifname, bss->brname); in wpa_driver_nl80211_set_mode_impl()
7424 bss->brname, bss->ifname) < 0) in wpa_driver_nl80211_set_mode_impl()
7427 bss->ifname, bss->brname, in wpa_driver_nl80211_set_mode_impl()
7451 res = linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 1); in wpa_driver_nl80211_set_mode_impl()
7468 bss->ifname); in wpa_driver_nl80211_set_mode_impl()
7473 bss->ifname); in wpa_driver_nl80211_set_mode_impl()
7478 nl80211_mgmt_unsubscribe(bss, "start AP"); in wpa_driver_nl80211_set_mode_impl()
7480 if (nl80211_setup_ap(bss)) in wpa_driver_nl80211_set_mode_impl()
7484 nl80211_teardown_ap(bss); in wpa_driver_nl80211_set_mode_impl()
7486 nl80211_mgmt_unsubscribe(bss, "mode change"); in wpa_driver_nl80211_set_mode_impl()
7490 nl80211_mgmt_subscribe_mesh(bss)) in wpa_driver_nl80211_set_mode_impl()
7493 if (!bss->in_deinit && !is_ap_interface(nlmode) && in wpa_driver_nl80211_set_mode_impl()
7495 nl80211_mgmt_subscribe_non_ap(bss) < 0) in wpa_driver_nl80211_set_mode_impl()
7503 void nl80211_restore_ap_mode(struct i802_bss *bss) in nl80211_restore_ap_mode() argument
7505 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_restore_ap_mode()
7508 wpa_driver_nl80211_set_mode(bss, drv->ap_scan_as_station); in nl80211_restore_ap_mode()
7510 bss->brname[0] && in nl80211_restore_ap_mode()
7511 (bss->added_if_into_bridge || bss->already_in_bridge)) { in nl80211_restore_ap_mode()
7514 bss->ifname, bss->brname); in nl80211_restore_ap_mode()
7515 if (linux_br_add_if(drv->global->ioctl_sock, bss->brname, in nl80211_restore_ap_mode()
7516 bss->ifname) < 0) { in nl80211_restore_ap_mode()
7519 bss->ifname, bss->brname, strerror(errno)); in nl80211_restore_ap_mode()
7526 int wpa_driver_nl80211_set_mode(struct i802_bss *bss, in wpa_driver_nl80211_set_mode() argument
7529 return wpa_driver_nl80211_set_mode_impl(bss, nlmode, NULL); in wpa_driver_nl80211_set_mode()
7533 static int wpa_driver_nl80211_set_mode_ibss(struct i802_bss *bss, in wpa_driver_nl80211_set_mode_ibss() argument
7536 return wpa_driver_nl80211_set_mode_impl(bss, NL80211_IFTYPE_ADHOC, in wpa_driver_nl80211_set_mode_ibss()
7544 struct i802_bss *bss = priv; in wpa_driver_nl80211_get_capa() local
7545 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_capa()
7562 struct i802_bss *bss = priv; in wpa_driver_nl80211_set_operstate() local
7563 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_operstate()
7566 bss->ifname, drv->operstate, state, in wpa_driver_nl80211_set_operstate()
7576 struct i802_bss *bss = priv; in wpa_driver_nl80211_set_supp_port() local
7577 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_supp_port()
7598 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_STATION)) || in wpa_driver_nl80211_set_supp_port()
7617 struct i802_bss *bss = priv; in i802_set_freq() local
7618 return nl80211_set_channel(bss, freq, 0); in i802_set_freq()
7655 struct i802_bss *bss = priv; in i802_get_seqnum() local
7656 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_get_seqnum()
7685 struct i802_bss *bss = priv; in i802_set_rts() local
7686 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_rts()
7713 struct i802_bss *bss = priv; in i802_set_frag() local
7714 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_frag()
7741 struct i802_bss *bss = priv; in i802_flush() local
7747 bss->ifname); in i802_flush()
7751 bss->ifname, link_id); in i802_flush()
7756 msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_STATION); in i802_flush()
7757 if (link_id >= 0 && (bss->valid_links & BIT(link_id)) && in i802_flush()
7761 res = send_and_recv_cmd(bss->drv, msg); in i802_flush()
8099 static int i802_read_sta_data(struct i802_bss *bss, in i802_read_sta_data() argument
8105 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_GET_STATION)) || in i802_read_sta_data()
8111 return send_and_recv_resp(bss->drv, msg, get_sta_handler, data); in i802_read_sta_data()
8119 struct i802_bss *bss = priv; in i802_set_tx_queue_params() local
8120 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_tx_queue_params()
8125 msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_WIPHY); in i802_set_tx_queue_params()
8186 static int i802_set_sta_vlan(struct i802_bss *bss, const u8 *addr, in i802_set_sta_vlan() argument
8189 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_sta_vlan()
8195 bss->ifname, if_nametoindex(bss->ifname), in i802_set_sta_vlan()
8197 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_STATION)) || in i802_set_sta_vlan()
8247 struct i802_bss *bss = priv; in i802_sta_deauth() local
8248 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_sta_deauth()
8251 struct i802_link *link = nl80211_get_link(bss, link_id); in i802_sta_deauth()
8264 return wpa_driver_nl80211_sta_remove(bss, addr, 1, reason); in i802_sta_deauth()
8273 return wpa_driver_nl80211_send_mlme(bss, (u8 *) &mgmt, in i802_sta_deauth()
8283 struct i802_bss *bss = priv; in i802_sta_disassoc() local
8284 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_sta_disassoc()
8291 return wpa_driver_nl80211_sta_remove(bss, addr, 0, reason); in i802_sta_disassoc()
8300 return wpa_driver_nl80211_send_mlme(bss, (u8 *) &mgmt, in i802_sta_disassoc()
8419 struct i802_bss *bss = priv; in i802_set_wds_sta() local
8420 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_wds_sta()
8425 ret = os_snprintf(name, sizeof(name), "%s.sta%d", bss->ifname, aid); in i802_set_wds_sta()
8441 bss->addr, 1, NULL, NULL, 0) < in i802_set_wds_sta()
8453 wpa_supplicant_event(bss->ctx, in i802_set_wds_sta()
8471 i802_set_sta_vlan(priv, addr, bss->ifname, 0, in i802_set_wds_sta()
8478 wpa_supplicant_event(bss->ctx, EVENT_WDS_STA_INTERFACE_STATUS, in i802_set_wds_sta()
8507 struct i802_bss *bss, in i802_check_bridge() argument
8513 os_strlcpy(bss->brname, brname, IFNAMSIZ); in i802_check_bridge()
8526 bss->added_bridge = 1; in i802_check_bridge()
8530 bss->br_ifindex = br_ifindex; in i802_check_bridge()
8534 bss->already_in_bridge = 1; in i802_check_bridge()
8562 bss->added_if_into_bridge = 1; in i802_check_bridge()
8572 struct i802_bss *bss; in i802_init() local
8578 bss = wpa_driver_nl80211_drv_init(hapd, params->ifname, in i802_init()
8581 if (bss == NULL) in i802_init()
8584 drv = bss->drv; in i802_init()
8590 os_strlcpy(bss->brname, master_ifname, IFNAMSIZ); in i802_init()
8603 os_strlcpy(bss->brname, master_ifname, IFNAMSIZ); in i802_init()
8609 bss->br_ifindex = br_ifindex; in i802_init()
8625 if (i802_check_bridge(drv, bss, params->bridge[0], in i802_init()
8636 if (bss->added_if_into_bridge || bss->already_in_bridge) { in i802_init()
8673 if (linux_get_ifhwaddr(drv->global->ioctl_sock, bss->ifname, in i802_init()
8678 memcpy(bss->addr, params->own_addr, ETH_ALEN); in i802_init()
8680 return bss; in i802_init()
8683 wpa_driver_nl80211_deinit(bss); in i802_init()
8690 struct i802_bss *bss = priv; in i802_deinit() local
8691 wpa_driver_nl80211_deinit(bss); in i802_deinit()
8791 struct i802_bss *bss = priv; in wpa_driver_nl80211_if_add() local
8792 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_if_add()
8832 os_memcpy(if_addr, bss->addr, ETH_ALEN); in wpa_driver_nl80211_if_add()
8939 static int wpa_driver_nl80211_if_remove(struct i802_bss *bss, in wpa_driver_nl80211_if_remove() argument
8943 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_if_remove()
8947 __func__, type, ifname, ifindex, bss->added_if); in wpa_driver_nl80211_if_remove()
8948 if (ifindex > 0 && (bss->added_if || bss->ifindex != ifindex)) in wpa_driver_nl80211_if_remove()
8950 else if (ifindex > 0 && !bss->added_if) { in wpa_driver_nl80211_if_remove()
8962 if (bss->added_if_into_bridge) { in wpa_driver_nl80211_if_remove()
8963 if (linux_br_del_if(drv->global->ioctl_sock, bss->brname, in wpa_driver_nl80211_if_remove()
8964 bss->ifname) < 0) in wpa_driver_nl80211_if_remove()
8967 bss->ifname, bss->brname, strerror(errno)); in wpa_driver_nl80211_if_remove()
8969 if (bss->added_bridge) { in wpa_driver_nl80211_if_remove()
8970 if (linux_br_del(drv->global->ioctl_sock, bss->brname) < 0) in wpa_driver_nl80211_if_remove()
8973 bss->brname, strerror(errno)); in wpa_driver_nl80211_if_remove()
8976 if (bss != drv->first_bss) { in wpa_driver_nl80211_if_remove()
8981 if (tbss->next == bss) { in wpa_driver_nl80211_if_remove()
8982 tbss->next = bss->next; in wpa_driver_nl80211_if_remove()
8984 nl80211_teardown_ap(bss); in wpa_driver_nl80211_if_remove()
8985 nl80211_remove_links(bss); in wpa_driver_nl80211_if_remove()
8986 nl80211_destroy_bss(bss); in wpa_driver_nl80211_if_remove()
8987 if (!bss->added_if) in wpa_driver_nl80211_if_remove()
8988 i802_set_iface_flags(bss, 0); in wpa_driver_nl80211_if_remove()
8989 os_free(bss); in wpa_driver_nl80211_if_remove()
8990 bss = NULL; in wpa_driver_nl80211_if_remove()
8994 if (bss) in wpa_driver_nl80211_if_remove()
8996 "BSS %p in the list", __func__, bss); in wpa_driver_nl80211_if_remove()
8999 nl80211_teardown_ap(bss); in wpa_driver_nl80211_if_remove()
9000 nl80211_remove_links(bss); in wpa_driver_nl80211_if_remove()
9001 if (!bss->added_if && !drv->first_bss->next) in wpa_driver_nl80211_if_remove()
9002 wpa_driver_nl80211_del_beacon_all(bss); in wpa_driver_nl80211_if_remove()
9003 nl80211_destroy_bss(bss); in wpa_driver_nl80211_if_remove()
9004 if (!bss->added_if) in wpa_driver_nl80211_if_remove()
9005 i802_set_iface_flags(bss, 0); in wpa_driver_nl80211_if_remove()
9010 os_free(bss); in wpa_driver_nl80211_if_remove()
9033 static int nl80211_send_frame_cmd(struct i802_bss *bss, in nl80211_send_frame_cmd() argument
9040 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_frame_cmd()
9050 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_FRAME)) || in nl80211_send_frame_cmd()
9106 static int wpa_driver_nl80211_send_action(struct i802_bss *bss, in wpa_driver_nl80211_send_action() argument
9114 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_send_action()
9120 if (is_ap_interface(drv->nlmode) && (int) freq == bss->flink->freq && in wpa_driver_nl80211_send_action()
9121 bss->flink->beacon_set) in wpa_driver_nl80211_send_action()
9144 if (!ether_addr_equal(bss->addr, src)) { in wpa_driver_nl80211_send_action()
9147 os_memcpy(bss->rand_addr, src, ETH_ALEN); in wpa_driver_nl80211_send_action()
9149 os_memset(bss->rand_addr, 0, ETH_ALEN); in wpa_driver_nl80211_send_action()
9159 modes = nl80211_get_hw_feature_data(bss, &num_modes, in wpa_driver_nl80211_send_action()
9162 ieee80211_is_dfs(bss->flink->freq, modes, num_modes)) in wpa_driver_nl80211_send_action()
9176 (int) freq == bss->flink->freq || drv->device_ap_sme || in wpa_driver_nl80211_send_action()
9178 ret = wpa_driver_nl80211_send_mlme(bss, buf, 24 + data_len, in wpa_driver_nl80211_send_action()
9182 ret = nl80211_send_frame_cmd(bss, freq, wait_time, buf, in wpa_driver_nl80211_send_action()
9192 static void nl80211_frame_wait_cancel(struct i802_bss *bss, u64 cookie) in nl80211_frame_wait_cancel() argument
9194 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_frame_wait_cancel()
9200 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_FRAME_WAIT_CANCEL)) || in nl80211_frame_wait_cancel()
9215 struct i802_bss *bss = priv; in wpa_driver_nl80211_send_action_cancel_wait() local
9216 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_send_action_cancel_wait()
9222 nl80211_frame_wait_cancel(bss, drv->send_frame_cookie); in wpa_driver_nl80211_send_action_cancel_wait()
9232 nl80211_frame_wait_cancel(bss, cookie); in wpa_driver_nl80211_send_action_cancel_wait()
9278 struct i802_bss *bss = priv; in wpa_driver_nl80211_remain_on_channel() local
9279 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_remain_on_channel()
9284 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_REMAIN_ON_CHANNEL)) || in wpa_driver_nl80211_remain_on_channel()
9311 struct i802_bss *bss = priv; in wpa_driver_nl80211_cancel_remain_on_channel() local
9312 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_cancel_remain_on_channel()
9326 msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL); in wpa_driver_nl80211_cancel_remain_on_channel()
9342 static int wpa_driver_nl80211_probe_req_report(struct i802_bss *bss, int report) in wpa_driver_nl80211_probe_req_report() argument
9344 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_probe_req_report()
9347 if (bss->nl_preq && drv->device_ap_sme && in wpa_driver_nl80211_probe_req_report()
9348 is_ap_interface(drv->nlmode) && !bss->in_deinit && in wpa_driver_nl80211_probe_req_report()
9349 !bss->static_ap) { in wpa_driver_nl80211_probe_req_report()
9356 "in AP mode", bss->nl_preq); in wpa_driver_nl80211_probe_req_report()
9357 } else if (bss->nl_preq) { in wpa_driver_nl80211_probe_req_report()
9359 "reporting nl_preq=%p", bss->nl_preq); in wpa_driver_nl80211_probe_req_report()
9360 nl80211_destroy_eloop_handle(&bss->nl_preq, 0); in wpa_driver_nl80211_probe_req_report()
9365 if (bss->nl_preq) { in wpa_driver_nl80211_probe_req_report()
9367 "already on! nl_preq=%p", bss->nl_preq); in wpa_driver_nl80211_probe_req_report()
9371 bss->nl_preq = nl_create_handle(drv->global->nl_cb, "preq"); in wpa_driver_nl80211_probe_req_report()
9372 if (bss->nl_preq == NULL) in wpa_driver_nl80211_probe_req_report()
9375 "reporting nl_preq=%p", bss->nl_preq); in wpa_driver_nl80211_probe_req_report()
9377 if (nl80211_register_frame(bss, bss->nl_preq, in wpa_driver_nl80211_probe_req_report()
9383 nl80211_register_eloop_read(&bss->nl_preq, in wpa_driver_nl80211_probe_req_report()
9385 bss->nl_cb, 0); in wpa_driver_nl80211_probe_req_report()
9390 nl_destroy_handles(&bss->nl_preq); in wpa_driver_nl80211_probe_req_report()
9445 static int nl80211_remove_link(struct i802_bss *bss, int link_id) in nl80211_remove_link() argument
9447 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_remove_link()
9454 bss->ifindex, link_id); in nl80211_remove_link()
9456 if (!(bss->valid_links & BIT(link_id))) { in nl80211_remove_link()
9462 link = &bss->links[link_id]; in nl80211_remove_link()
9464 wpa_driver_nl80211_del_beacon(bss, link_id); in nl80211_remove_link()
9467 bss->valid_links &= ~BIT(link_id); in nl80211_remove_link()
9471 if (bss->flink == link) { in nl80211_remove_link()
9472 for_each_link_default(bss->valid_links, i, 0) { in nl80211_remove_link()
9473 bss->flink = &bss->links[i]; in nl80211_remove_link()
9479 if (!bss->valid_links) { in nl80211_remove_link()
9481 if (bss->flink != link) in nl80211_remove_link()
9482 os_memcpy(bss->flink, link, sizeof(*link)); in nl80211_remove_link()
9484 os_memcpy(bss->flink->addr, bss->addr, ETH_ALEN); in nl80211_remove_link()
9488 msg = nl80211_bss_msg(bss, 0, NL80211_CMD_REMOVE_LINK); in nl80211_remove_link()
9507 static void nl80211_remove_links(struct i802_bss *bss) in nl80211_remove_links() argument
9512 for_each_link(bss->valid_links, link_id) { in nl80211_remove_links()
9513 ret = nl80211_remove_link(bss, link_id); in nl80211_remove_links()
9518 if (bss->flink) in nl80211_remove_links()
9519 os_memcpy(bss->flink->addr, bss->addr, ETH_ALEN); in nl80211_remove_links()
9525 struct i802_bss *bss = priv; in wpa_driver_nl80211_deinit_ap() local
9526 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_deinit_ap()
9532 wpa_driver_nl80211_del_beacon(bss, NL80211_DRV_LINK_ID_NA); in wpa_driver_nl80211_deinit_ap()
9534 nl80211_remove_links(bss); in wpa_driver_nl80211_deinit_ap()
9540 if (drv->nlmode == NL80211_IFTYPE_P2P_GO && bss->if_dynamic) in wpa_driver_nl80211_deinit_ap()
9549 struct i802_bss *bss = priv; in wpa_driver_nl80211_stop_ap() local
9550 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_stop_ap()
9556 wpa_driver_nl80211_del_beacon_all(bss); in wpa_driver_nl80211_stop_ap()
9560 if (nl80211_link_valid(bss->valid_links, link_id)) { in wpa_driver_nl80211_stop_ap()
9561 wpa_driver_nl80211_del_beacon(bss, link_id); in wpa_driver_nl80211_stop_ap()
9571 struct i802_bss *bss = priv; in wpa_driver_nl80211_deinit_p2p_cli() local
9572 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_deinit_p2p_cli()
9580 if (bss->if_dynamic) in wpa_driver_nl80211_deinit_p2p_cli()
9589 struct i802_bss *bss = priv; in wpa_driver_nl80211_resume() local
9590 enum nl80211_iftype nlmode = nl80211_get_ifmode(bss); in wpa_driver_nl80211_resume()
9592 if (i802_set_iface_flags(bss, 1)) in wpa_driver_nl80211_resume()
9596 nl80211_disable_11b_rates(bss->drv, bss->drv->ifindex, 1); in wpa_driver_nl80211_resume()
9602 struct i802_bss *bss = priv; in nl80211_signal_monitor() local
9603 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_signal_monitor()
9610 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_CQM)) || in nl80211_signal_monitor()
9663 struct i802_bss *bss = priv; in nl80211_signal_poll() local
9664 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_signal_poll()
9799 struct i802_bss *bss = priv; in nl80211_mlo_signal_poll() local
9800 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_mlo_signal_poll()
9835 struct i802_bss *bss = priv; in nl80211_set_param() local
9836 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_param()
9888 if (!bss->in_deinit && !is_ap_interface(drv->nlmode) && in nl80211_set_param()
9890 nl80211_mgmt_unsubscribe(bss, "no_rrm=1"); in nl80211_set_param()
9891 if (nl80211_mgmt_subscribe_non_ap(bss) < 0) in nl80211_set_param()
9987 struct i802_bss *bss = priv; in nl80211_get_radio_name() local
9988 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_radio_name()
9993 static int nl80211_pmkid(struct i802_bss *bss, int cmd, in nl80211_pmkid() argument
10003 if (!(msg = nl80211_bss_msg(bss, 0, cmd)) || in nl80211_pmkid()
10027 return send_and_recv_cmd(bss->drv, msg); in nl80211_pmkid()
10033 struct i802_bss *bss = priv; in nl80211_add_pmkid() local
10049 ret = nl80211_pmkid(bss, NL80211_CMD_SET_PMKSA, params, skip_pmk); in nl80211_add_pmkid()
10057 ret = nl80211_pmkid(bss, NL80211_CMD_SET_PMKSA, params, true); in nl80211_add_pmkid()
10070 struct i802_bss *bss = priv; in nl80211_remove_pmkid() local
10083 ret = nl80211_pmkid(bss, NL80211_CMD_DEL_PMKSA, params, true); in nl80211_remove_pmkid()
10096 struct i802_bss *bss = priv; in nl80211_flush_pmkid() local
10100 msg = nl80211_bss_msg(bss, 0, NL80211_CMD_FLUSH_PMKSA); in nl80211_flush_pmkid()
10103 return send_and_recv_cmd(bss->drv, msg); in nl80211_flush_pmkid()
10246 struct i802_bss *bss = priv; in wpa_driver_nl80211_get_survey() local
10247 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_survey()
10285 struct i802_bss *bss = priv; in nl80211_set_rekey_info() local
10286 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_rekey_info()
10295 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_REKEY_OFFLOAD)) || in nl80211_set_rekey_info()
10317 static void nl80211_send_null_frame(struct i802_bss *bss, const u8 *own_addr, in nl80211_send_null_frame() argument
10349 if (wpa_driver_nl80211_send_mlme(bss, (u8 *) &nulldata, size, 0, 0, 0, in nl80211_send_null_frame()
10358 struct i802_bss *bss = priv; in nl80211_poll_client() local
10359 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_poll_client()
10365 nl80211_send_null_frame(bss, own_addr, addr, qos); in nl80211_poll_client()
10369 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_PROBE_CLIENT)) || in nl80211_poll_client()
10389 static int nl80211_set_power_save(struct i802_bss *bss, int enabled) in nl80211_set_power_save() argument
10394 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_POWER_SAVE)) || in nl80211_set_power_save()
10401 ret = send_and_recv_cmd(bss->drv, msg); in nl80211_set_power_save()
10415 struct i802_bss *bss = priv; in nl80211_set_p2p_powersave() local
10433 return nl80211_set_power_save(bss, legacy_ps); in nl80211_set_p2p_powersave()
10440 struct i802_bss *bss = priv; in nl80211_start_radar_detection() local
10441 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_start_radar_detection()
10534 struct i802_bss *bss = priv; in nl80211_send_tdls_mgmt() local
10535 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_tdls_mgmt()
10573 struct i802_bss *bss = priv; in nl80211_tdls_oper() local
10574 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_tdls_oper()
10625 struct i802_bss *bss = priv; in nl80211_tdls_enable_channel_switch() local
10626 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_tdls_enable_channel_switch()
10637 msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_TDLS_CHANNEL_SWITCH); in nl80211_tdls_enable_channel_switch()
10654 struct i802_bss *bss = priv; in nl80211_tdls_disable_channel_switch() local
10655 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_tdls_disable_channel_switch()
10664 msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH); in nl80211_tdls_disable_channel_switch()
10682 struct i802_bss *bss = priv; in driver_nl80211_set_key() local
10684 return wpa_driver_nl80211_set_key(bss, params); in driver_nl80211_set_key()
10691 struct i802_bss *bss = priv; in driver_nl80211_scan2() local
10693 struct wpa_driver_nl80211_data *drv = bss->drv; in driver_nl80211_scan2()
10703 return wpa_driver_nl80211_vendor_scan(bss, params); in driver_nl80211_scan2()
10705 return wpa_driver_nl80211_scan(bss, params); in driver_nl80211_scan2()
10712 struct i802_bss *bss = priv; in driver_nl80211_deauthenticate() local
10713 return wpa_driver_nl80211_deauthenticate(bss, addr, reason_code); in driver_nl80211_deauthenticate()
10720 struct i802_bss *bss = priv; in driver_nl80211_authenticate() local
10721 return wpa_driver_nl80211_authenticate(bss, params); in driver_nl80211_authenticate()
10727 struct i802_bss *bss = priv; in driver_nl80211_deinit() local
10728 wpa_driver_nl80211_deinit(bss); in driver_nl80211_deinit()
10735 struct i802_bss *bss = priv; in driver_nl80211_if_remove() local
10736 return wpa_driver_nl80211_if_remove(bss, type, ifname); in driver_nl80211_if_remove()
10745 struct i802_bss *bss = priv; in driver_nl80211_link_remove() local
10746 struct wpa_driver_nl80211_data *drv = bss->drv; in driver_nl80211_link_remove()
10749 !nl80211_link_valid(bss->valid_links, link_id)) in driver_nl80211_link_remove()
10754 bss->ifname, link_id, type, ifname, bss->valid_links); in driver_nl80211_link_remove()
10756 nl80211_remove_link(bss, link_id); in driver_nl80211_link_remove()
10758 bss->ctx = bss->flink->ctx; in driver_nl80211_link_remove()
10760 if (drv->first_bss == bss && bss->valid_links) in driver_nl80211_link_remove()
10761 drv->ctx = bss->ctx; in driver_nl80211_link_remove()
10763 if (!bss->valid_links) { in driver_nl80211_link_remove()
10766 return wpa_driver_nl80211_if_remove(bss, type, ifname); in driver_nl80211_link_remove()
10775 struct i802_bss *bss = priv; in nl80211_is_drv_shared() local
10776 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_is_drv_shared()
10783 for (bss = drv->first_bss; bss; bss = bss->next) { in nl80211_is_drv_shared()
10790 bss = priv; in nl80211_is_drv_shared()
10793 if (bss->valid_links <= 1) in nl80211_is_drv_shared()
10798 if (!(bss->valid_links & (bss->valid_links - 1))) in nl80211_is_drv_shared()
10814 struct i802_bss *bss = priv; in driver_nl80211_send_mlme() local
10815 return wpa_driver_nl80211_send_mlme(bss, data, data_len, noack, in driver_nl80211_send_mlme()
10823 struct i802_bss *bss = priv; in driver_nl80211_sta_remove() local
10824 return wpa_driver_nl80211_sta_remove(bss, addr, -1, 0); in driver_nl80211_sta_remove()
10832 struct i802_bss *bss = priv; in driver_nl80211_set_sta_vlan() local
10833 return i802_set_sta_vlan(bss, addr, ifname, vlan_id, link_id); in driver_nl80211_set_sta_vlan()
10841 struct i802_bss *bss = priv; in driver_nl80211_read_sta_data() local
10844 return i802_read_sta_data(bss, data, addr); in driver_nl80211_read_sta_data()
10855 struct i802_bss *bss = priv; in driver_nl80211_send_action() local
10856 return wpa_driver_nl80211_send_action(bss, freq, wait_time, dst, src, in driver_nl80211_send_action()
10863 struct i802_bss *bss = priv; in driver_nl80211_probe_req_report() local
10864 return wpa_driver_nl80211_probe_req_report(bss, report); in driver_nl80211_probe_req_report()
10873 struct i802_bss *bss = priv; in wpa_driver_nl80211_update_ft_ies() local
10874 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_update_ft_ies()
10900 struct i802_bss *bss = priv; in nl80211_update_dh_ie() local
10901 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_update_dh_ie()
10905 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_UPDATE_OWE_INFO)) || in nl80211_update_dh_ie()
10926 struct i802_bss *bss = priv; in wpa_driver_nl80211_get_macaddr() local
10927 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_macaddr()
10932 return bss->addr; in wpa_driver_nl80211_get_macaddr()
10963 struct i802_bss *bss = priv; in wpa_driver_nl80211_status() local
10964 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_status()
10980 bss->ifindex, in wpa_driver_nl80211_status()
10981 bss->ifname, in wpa_driver_nl80211_status()
10982 bss->brname, in wpa_driver_nl80211_status()
10983 MAC2STR(bss->addr), in wpa_driver_nl80211_status()
10984 bss->flink->freq, in wpa_driver_nl80211_status()
10985 bss->flink->beacon_set ? "beacon_set=1\n" : "", in wpa_driver_nl80211_status()
10986 bss->added_if_into_bridge ? in wpa_driver_nl80211_status()
10988 bss->already_in_bridge ? "already_in_bridge=1\n" : "", in wpa_driver_nl80211_status()
10989 bss->added_bridge ? "added_bridge=1\n" : "", in wpa_driver_nl80211_status()
10990 bss->in_deinit ? "in_deinit=1\n" : "", in wpa_driver_nl80211_status()
10991 bss->if_dynamic ? "if_dynamic=1\n" : ""); in wpa_driver_nl80211_status()
10996 if (bss->wdev_id_set) { in wpa_driver_nl80211_status()
10998 (unsigned long long) bss->wdev_id); in wpa_driver_nl80211_status()
11208 struct i802_bss *bss = priv; in nl80211_switch_channel() local
11209 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_switch_channel()
11291 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_CHANNEL_SWITCH)) || in nl80211_switch_channel()
11331 nl80211_unsol_bcast_probe_resp(bss, msg, &settings->ubpr) < 0) in nl80211_switch_channel()
11354 struct i802_bss *bss = priv; in nl80211_switch_color() local
11355 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_switch_color()
11382 msg = nl80211_bss_msg(bss, 0, NL80211_CMD_COLOR_CHANGE_REQUEST); in nl80211_switch_color()
11418 nl80211_unsol_bcast_probe_resp(bss, msg, &settings->ubpr) < 0) { in nl80211_switch_color()
11424 if (nl80211_link_valid(bss->valid_links, settings->link_id)) { in nl80211_switch_color()
11456 struct i802_bss *bss = priv; in nl80211_add_ts() local
11457 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_add_ts()
11468 msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_ADD_TX_TS); in nl80211_add_ts()
11488 struct i802_bss *bss = priv; in nl80211_del_ts() local
11489 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_del_ts()
11498 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_DEL_TX_TS)) || in nl80211_del_ts()
11591 struct i802_bss *bss = priv; in nl80211_vendor_cmd() local
11592 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_vendor_cmd()
11609 ret = send_and_recv(drv->global, bss->nl_connect, msg, in nl80211_vendor_cmd()
11626 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_VENDOR)) || in nl80211_vendor_cmd()
11649 struct i802_bss *bss = priv; in nl80211_set_qos_map() local
11650 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_qos_map()
11657 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_SET_QOS_MAP)) || in nl80211_set_qos_map()
11688 struct i802_bss *bss = priv; in nl80211_get_wowlan() local
11689 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_wowlan()
11714 struct i802_bss *bss = priv; in nl80211_set_wowlan() local
11715 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_wowlan()
11722 if (!(msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_SET_WOWLAN)) || in nl80211_set_wowlan()
11756 struct i802_bss *bss = priv; in nl80211_roaming() local
11757 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_roaming()
11790 struct i802_bss *bss = priv; in nl80211_disable_fils() local
11791 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_disable_fils()
11822 struct i802_bss *bss = priv; in nl80211_set_bssid_tmp_disallow() local
11823 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_bssid_tmp_disallow()
11879 struct i802_bss *bss = priv; in nl80211_add_sta_node() local
11880 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_add_sta_node()
11915 struct i802_bss *bss = priv; in nl80211_set_mac_addr() local
11916 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_mac_addr()
11925 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 0) < 0) in nl80211_set_mac_addr()
11928 if (linux_set_ifhwaddr(drv->global->ioctl_sock, bss->ifname, addr) < 0) in nl80211_set_mac_addr()
11932 bss->ifname, MAC2STR(addr)); in nl80211_set_mac_addr()
11933 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, in nl80211_set_mac_addr()
11942 bss->ifname, MAC2STR(addr)); in nl80211_set_mac_addr()
11944 os_memcpy(bss->prev_addr, bss->addr, ETH_ALEN); in nl80211_set_mac_addr()
11945 os_memcpy(bss->addr, addr, ETH_ALEN); in nl80211_set_mac_addr()
11947 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 1) < 0) in nl80211_set_mac_addr()
12029 static int nl80211_join_mesh(struct i802_bss *bss, in nl80211_join_mesh() argument
12032 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_join_mesh()
12084 ret = send_and_recv(drv->global, bss->nl_connect, msg, NULL, NULL, NULL, in nl80211_join_mesh()
12093 drv->assoc_freq = bss->flink->freq = params->freq.freq; in nl80211_join_mesh()
12106 struct i802_bss *bss = priv; in wpa_driver_nl80211_join_mesh() local
12115 ret = nl80211_join_mesh(bss, params); in wpa_driver_nl80211_join_mesh()
12135 struct i802_bss *bss = priv; in wpa_driver_nl80211_leave_mesh() local
12136 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_leave_mesh()
12142 ret = send_and_recv(drv->global, bss->nl_connect, msg, NULL, NULL, NULL, in wpa_driver_nl80211_leave_mesh()
12166 struct i802_bss *bss = priv; in nl80211_probe_mesh_link() local
12167 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_probe_mesh_link()
12199 struct i802_bss *bss = priv; in wpa_driver_br_add_ip_neigh() local
12200 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_br_add_ip_neigh()
12203 .ndm_ifindex = bss->br_ifindex, in wpa_driver_br_add_ip_neigh()
12212 if (bss->br_ifindex == 0) { in wpa_driver_br_add_ip_neigh()
12263 struct i802_bss *bss = priv; in wpa_driver_br_delete_ip_neigh() local
12264 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_br_delete_ip_neigh()
12267 .ndm_ifindex = bss->br_ifindex, in wpa_driver_br_delete_ip_neigh()
12286 if (bss->br_ifindex == 0) { in wpa_driver_br_delete_ip_neigh()
12367 struct i802_bss *bss = priv; in wpa_driver_br_port_set_attr() local
12376 bss->ifname, attr_txt); in wpa_driver_br_port_set_attr()
12399 struct i802_bss *bss = priv; in wpa_driver_br_set_net_param() local
12407 bss->brname); in wpa_driver_br_set_net_param()
12424 ip_version, bss->brname, param_txt); in wpa_driver_br_set_net_param()
12576 struct i802_bss *bss = priv; in nl80211_set_band() local
12577 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_band()
12767 struct i802_bss *bss = priv; in nl80211_get_pref_freq_list() local
12768 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_pref_freq_list()
12846 struct i802_bss *bss = priv; in nl80211_set_prob_oper_freq() local
12847 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_prob_oper_freq()
12857 freq, bss->ifindex); in nl80211_set_prob_oper_freq()
12896 struct i802_bss *bss = priv; in nl80211_p2p_lo_start() local
12897 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_p2p_lo_start()
12952 struct i802_bss *bss = priv; in nl80211_p2p_lo_stop() local
12953 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_p2p_lo_stop()
12975 struct i802_bss *bss = priv; in nl80211_set_tdls_mode() local
12976 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_tdls_mode()
13131 struct i802_bss *bss = priv; in nl80211_get_bss_transition_status() local
13132 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_bss_transition_status()
13227 struct i802_bss *bss = priv; in nl80211_ignore_assoc_disallow() local
13228 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_ignore_assoc_disallow()
13276 struct i802_bss *bss = priv; in nl80211_send_pasn_resp() local
13279 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_pasn_resp()
13352 struct i802_bss *bss = priv; in nl80211_set_secure_ranging_ctx() local
13353 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_secure_ranging_ctx()
13493 struct i802_bss *bss = priv; in nl80211_do_acs() local
13494 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_do_acs()
13551 struct i802_bss *bss = priv; in nl80211_configure_data_frame_filters() local
13556 if (nl80211_get_ifmode(bss) == NL80211_IFTYPE_P2P_DEVICE) in nl80211_configure_data_frame_filters()
13565 bss->ifname); in nl80211_configure_data_frame_filters()
13580 bss->ifname); in nl80211_configure_data_frame_filters()
13594 bss->ifname); in nl80211_configure_data_frame_filters()
13607 bss->ifname); in nl80211_configure_data_frame_filters()
13625 struct i802_bss *bss = priv; in nl80211_get_ext_capab() local
13626 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_ext_capab()
13657 struct i802_bss *bss = priv; in nl80211_get_mld_capab() local
13658 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_mld_capab()
13689 struct i802_bss *bss = priv; in nl80211_update_connection_params() local
13690 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_update_connection_params()
13746 struct i802_bss *bss = priv; in nl80211_send_external_auth_status() local
13747 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_external_auth_status()
13756 if ((is_ap_interface(drv->nlmode) && !bss->drv->device_ap_sme) || in nl80211_send_external_auth_status()
13790 struct i802_bss *bss = priv; in nl80211_set_4addr_mode() local
13791 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_4addr_mode()
13802 if (bridge_ifname[0] && bss->added_if_into_bridge && !val) { in nl80211_set_4addr_mode()
13804 bridge_ifname, bss->ifname)) { in nl80211_set_4addr_mode()
13807 bss->ifname, bridge_ifname); in nl80211_set_4addr_mode()
13810 bss->added_if_into_bridge = 0; in nl80211_set_4addr_mode()
13815 if (ret && val && nl80211_get_4addr(bss) == 1) { in nl80211_set_4addr_mode()
13822 i802_check_bridge(drv, bss, bridge_ifname, bss->ifname) < 0) in nl80211_set_4addr_mode()
13838 struct i802_bss *bss = priv; in nl80211_dpp_listen() local
13839 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_dpp_listen()
13843 if (!drv->multicast_registrations || !bss->nl_mgmt) in nl80211_dpp_listen()
13849 handle = (void *) (((intptr_t) bss->nl_mgmt) ^ ELOOP_SOCKET_INVALID); in nl80211_dpp_listen()
13850 return nl80211_register_frame(bss, handle, type, in nl80211_dpp_listen()
13860 struct i802_bss *bss = priv; in nl80211_link_add() local
13861 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_link_add()
13881 if (bss->valid_links & BIT(link_id)) { in nl80211_link_add()
13887 if (!bss->valid_links) { in nl80211_link_add()
13889 if (bss->flink->beacon_set) { in nl80211_link_add()
13895 msg = nl80211_bss_msg(bss, 0, NL80211_CMD_ADD_LINK); in nl80211_link_add()
13910 os_memcpy(bss->links[link_id].addr, addr, ETH_ALEN); in nl80211_link_add()
13913 if (!bss->valid_links) in nl80211_link_add()
13914 bss->flink = &bss->links[link_id]; in nl80211_link_add()
13916 bss->valid_links |= BIT(link_id); in nl80211_link_add()
13917 bss->links[link_id].ctx = bss_ctx; in nl80211_link_add()
13920 bss->valid_links, bss->ifname); in nl80211_link_add()
13929 struct i802_bss *bss = priv; in wpa_driver_nl80211_link_sta_remove() local
13930 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_link_sta_remove()
13934 if (!(bss->valid_links & BIT(link_id))) in wpa_driver_nl80211_link_sta_remove()
13937 if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_REMOVE_LINK_STA)) || in wpa_driver_nl80211_link_sta_remove()
13948 link_id, MAC2STR(addr), bss->ifname, ret, strerror(-ret)); in wpa_driver_nl80211_link_sta_remove()
13961 struct i802_bss *bss = priv; in testing_nl80211_register_frame() local
13964 if (!bss->nl_mgmt) in testing_nl80211_register_frame()
13966 handle = (void *) (((intptr_t) bss->nl_mgmt) ^ ELOOP_SOCKET_INVALID); in testing_nl80211_register_frame()
13967 return nl80211_register_frame(bss, handle, type, match, match_len, in testing_nl80211_register_frame()
13974 struct i802_bss *bss = priv; in testing_nl80211_radio_disable() local
13975 struct wpa_driver_nl80211_data *drv = bss->drv; in testing_nl80211_radio_disable()