X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=package%2Fnetwork%2Fservices%2Fhostapd%2Fpatches%2F001-mesh-factor-out-mesh-join-function.patch;h=de8d65b982af8ce877b003fc8503624443ce11d9;hp=a1d668b283d46576462f5a5275a632506d65ea2a;hb=HEAD;hpb=78f1974bc565d7544589a49ad8efd92c4ddec5b3 diff --git a/package/network/services/hostapd/patches/001-mesh-factor-out-mesh-join-function.patch b/package/network/services/hostapd/patches/001-mesh-factor-out-mesh-join-function.patch deleted file mode 100644 index a1d668b283..0000000000 --- a/package/network/services/hostapd/patches/001-mesh-factor-out-mesh-join-function.patch +++ /dev/null @@ -1,211 +0,0 @@ -From 02ae4382f45f772e3630460459eb4e5af64e71b4 Mon Sep 17 00:00:00 2001 -From: Peter Oh -Date: Tue, 29 May 2018 14:39:05 -0700 -Subject: [PATCH 01/18] mesh: factor out mesh join function - -mesh join function consitss of 2 parts which are preparing -configurations and sending join event to driver. -Since physical mesh join event could happen either right -after mesh configuration is done or after CAC is done -in case of DFS channel is used, factor out the function -into 2 parts to reduce redundant calls. - -Signed-off-by: Peter Oh ---- - wpa_supplicant/mesh.c | 119 ++++++++++++++++-------------- - wpa_supplicant/mesh.h | 1 + - wpa_supplicant/wpa_supplicant_i.h | 1 + - 3 files changed, 67 insertions(+), 54 deletions(-) - ---- a/wpa_supplicant/mesh.c -+++ b/wpa_supplicant/mesh.c -@@ -364,13 +364,48 @@ void wpa_supplicant_mesh_add_scan_ie(str - } - - -+void wpas_join_mesh(struct wpa_supplicant *wpa_s) -+{ -+ struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params; -+ struct wpa_ssid *ssid = wpa_s->current_ssid; -+ int ret = 0; -+ -+ if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) { -+ wpa_s->pairwise_cipher = wpa_s->mesh_rsn->pairwise_cipher; -+ wpa_s->group_cipher = wpa_s->mesh_rsn->group_cipher; -+ wpa_s->mgmt_group_cipher = wpa_s->mesh_rsn->mgmt_group_cipher; -+ } -+ -+ if (wpa_s->ifmsh) { -+ params->ies = wpa_s->ifmsh->mconf->rsn_ie; -+ params->ie_len = wpa_s->ifmsh->mconf->rsn_ie_len; -+ params->basic_rates = wpa_s->ifmsh->basic_rates; -+ params->conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_HT_OP_MODE; -+ params->conf.ht_opmode = wpa_s->ifmsh->bss[0]->iface->ht_op_mode; -+ } -+ -+ ret = wpa_drv_join_mesh(wpa_s, params); -+ if (ret) -+ wpa_msg(wpa_s, MSG_ERROR, "mesh join error=%d\n", ret); -+ -+ /* hostapd sets the interface down until we associate */ -+ wpa_drv_set_operstate(wpa_s, 1); -+ -+ if (!ret) -+ wpa_supplicant_set_state(wpa_s, WPA_COMPLETED); -+ -+ return; -+} -+ -+ - int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s, - struct wpa_ssid *ssid) - { -- struct wpa_driver_mesh_join_params params; -+ struct wpa_driver_mesh_join_params *params = -+ os_zalloc(sizeof(struct wpa_driver_mesh_join_params)); - int ret = 0; - -- if (!ssid || !ssid->ssid || !ssid->ssid_len || !ssid->frequency) { -+ if (!ssid || !ssid->ssid || !ssid->ssid_len || !ssid->frequency || !params) { - ret = -ENOENT; - goto out; - } -@@ -381,22 +416,22 @@ int wpa_supplicant_join_mesh(struct wpa_ - wpa_s->group_cipher = WPA_CIPHER_NONE; - wpa_s->mgmt_group_cipher = 0; - -- os_memset(¶ms, 0, sizeof(params)); -- params.meshid = ssid->ssid; -- params.meshid_len = ssid->ssid_len; -- ibss_mesh_setup_freq(wpa_s, ssid, ¶ms.freq); -- wpa_s->mesh_ht_enabled = !!params.freq.ht_enabled; -- wpa_s->mesh_vht_enabled = !!params.freq.vht_enabled; -- if (params.freq.ht_enabled && params.freq.sec_channel_offset) -- ssid->ht40 = params.freq.sec_channel_offset; -+ params->meshid = ssid->ssid; -+ params->meshid_len = ssid->ssid_len; -+ ibss_mesh_setup_freq(wpa_s, ssid, ¶ms->freq); -+ wpa_s->mesh_ht_enabled = !!params->freq.ht_enabled; -+ wpa_s->mesh_vht_enabled = !!params->freq.vht_enabled; -+ if (params->freq.ht_enabled && params->freq.sec_channel_offset) -+ ssid->ht40 = params->freq.sec_channel_offset; -+ - if (wpa_s->mesh_vht_enabled) { - ssid->vht = 1; -- switch (params.freq.bandwidth) { -+ switch (params->freq.bandwidth) { - case 80: -- if (params.freq.center_freq2) { -+ if (params->freq.center_freq2) { - ssid->max_oper_chwidth = VHT_CHANWIDTH_80P80MHZ; - ssid->vht_center_freq2 = -- params.freq.center_freq2; -+ params->freq.center_freq2; - } else { - ssid->max_oper_chwidth = VHT_CHANWIDTH_80MHZ; - } -@@ -410,67 +445,43 @@ int wpa_supplicant_join_mesh(struct wpa_ - } - } - if (ssid->beacon_int > 0) -- params.beacon_int = ssid->beacon_int; -+ params->beacon_int = ssid->beacon_int; - else if (wpa_s->conf->beacon_int > 0) -- params.beacon_int = wpa_s->conf->beacon_int; -+ params->beacon_int = wpa_s->conf->beacon_int; - if (ssid->dtim_period > 0) -- params.dtim_period = ssid->dtim_period; -+ params->dtim_period = ssid->dtim_period; - else if (wpa_s->conf->dtim_period > 0) -- params.dtim_period = wpa_s->conf->dtim_period; -- params.conf.max_peer_links = wpa_s->conf->max_peer_links; -+ params->dtim_period = wpa_s->conf->dtim_period; -+ params->conf.max_peer_links = wpa_s->conf->max_peer_links; - if (ssid->mesh_rssi_threshold < DEFAULT_MESH_RSSI_THRESHOLD) { -- params.conf.rssi_threshold = ssid->mesh_rssi_threshold; -- params.conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_RSSI_THRESHOLD; -+ params->conf.rssi_threshold = ssid->mesh_rssi_threshold; -+ params->conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_RSSI_THRESHOLD; - } - - if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) { -- params.flags |= WPA_DRIVER_MESH_FLAG_SAE_AUTH; -- params.flags |= WPA_DRIVER_MESH_FLAG_AMPE; -+ params->flags |= WPA_DRIVER_MESH_FLAG_SAE_AUTH; -+ params->flags |= WPA_DRIVER_MESH_FLAG_AMPE; - wpa_s->conf->user_mpm = 1; - } - - if (wpa_s->conf->user_mpm) { -- params.flags |= WPA_DRIVER_MESH_FLAG_USER_MPM; -- params.conf.auto_plinks = 0; -+ params->flags |= WPA_DRIVER_MESH_FLAG_USER_MPM; -+ params->conf.auto_plinks = 0; - } else { -- params.flags |= WPA_DRIVER_MESH_FLAG_DRIVER_MPM; -- params.conf.auto_plinks = 1; -+ params->flags |= WPA_DRIVER_MESH_FLAG_DRIVER_MPM; -+ params->conf.auto_plinks = 1; - } -- params.conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity; -+ params->conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity; - -- if (wpa_supplicant_mesh_init(wpa_s, ssid, ¶ms.freq)) { -+ wpa_s->mesh_params = params; -+ if (wpa_supplicant_mesh_init(wpa_s, ssid, ¶ms->freq)) { - wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh"); - wpa_drv_leave_mesh(wpa_s); - ret = -1; - goto out; - } - -- if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) { -- wpa_s->pairwise_cipher = wpa_s->mesh_rsn->pairwise_cipher; -- wpa_s->group_cipher = wpa_s->mesh_rsn->group_cipher; -- wpa_s->mgmt_group_cipher = wpa_s->mesh_rsn->mgmt_group_cipher; -- } -- -- if (wpa_s->ifmsh) { -- params.ies = wpa_s->ifmsh->mconf->rsn_ie; -- params.ie_len = wpa_s->ifmsh->mconf->rsn_ie_len; -- params.basic_rates = wpa_s->ifmsh->basic_rates; -- params.conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_HT_OP_MODE; -- params.conf.ht_opmode = wpa_s->ifmsh->bss[0]->iface->ht_op_mode; -- } -- -- wpa_msg(wpa_s, MSG_INFO, "joining mesh %s", -- wpa_ssid_txt(ssid->ssid, ssid->ssid_len)); -- ret = wpa_drv_join_mesh(wpa_s, ¶ms); -- if (ret) -- wpa_msg(wpa_s, MSG_ERROR, "mesh join error=%d", ret); -- -- /* hostapd sets the interface down until we associate */ -- wpa_drv_set_operstate(wpa_s, 1); -- -- if (!ret) -- wpa_supplicant_set_state(wpa_s, WPA_COMPLETED); -- -+ wpas_join_mesh(wpa_s); - out: - return ret; - } ---- a/wpa_supplicant/mesh.h -+++ b/wpa_supplicant/mesh.h -@@ -21,6 +21,7 @@ int wpas_mesh_add_interface(struct wpa_s - int wpas_mesh_peer_remove(struct wpa_supplicant *wpa_s, const u8 *addr); - int wpas_mesh_peer_add(struct wpa_supplicant *wpa_s, const u8 *addr, - int duration); -+void wpas_join_mesh(struct wpa_supplicant *wpa_s); - - #ifdef CONFIG_MESH - ---- a/wpa_supplicant/wpa_supplicant_i.h -+++ b/wpa_supplicant/wpa_supplicant_i.h -@@ -810,6 +810,7 @@ struct wpa_supplicant { - unsigned int mesh_if_created:1; - unsigned int mesh_ht_enabled:1; - unsigned int mesh_vht_enabled:1; -+ struct wpa_driver_mesh_join_params *mesh_params; - #ifdef CONFIG_PMKSA_CACHE_EXTERNAL - /* struct external_pmksa_cache::list */ - struct dl_list mesh_external_pmksa_cache;