OpenWrt – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | From 02ae4382f45f772e3630460459eb4e5af64e71b4 Mon Sep 17 00:00:00 2001 |
2 | From: Peter Oh <peter.oh@bowerswilkins.com> |
||
3 | Date: Tue, 29 May 2018 14:39:05 -0700 |
||
4 | Subject: [PATCH 01/18] mesh: factor out mesh join function |
||
5 | |||
6 | mesh join function consitss of 2 parts which are preparing |
||
7 | configurations and sending join event to driver. |
||
8 | Since physical mesh join event could happen either right |
||
9 | after mesh configuration is done or after CAC is done |
||
10 | in case of DFS channel is used, factor out the function |
||
11 | into 2 parts to reduce redundant calls. |
||
12 | |||
13 | Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> |
||
14 | --- |
||
15 | wpa_supplicant/mesh.c | 119 ++++++++++++++++-------------- |
||
16 | wpa_supplicant/mesh.h | 1 + |
||
17 | wpa_supplicant/wpa_supplicant_i.h | 1 + |
||
18 | 3 files changed, 67 insertions(+), 54 deletions(-) |
||
19 | |||
20 | --- a/wpa_supplicant/mesh.c |
||
21 | +++ b/wpa_supplicant/mesh.c |
||
22 | @@ -364,13 +364,48 @@ void wpa_supplicant_mesh_add_scan_ie(str |
||
23 | } |
||
24 | |||
25 | |||
26 | +void wpas_join_mesh(struct wpa_supplicant *wpa_s) |
||
27 | +{ |
||
28 | + struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params; |
||
29 | + struct wpa_ssid *ssid = wpa_s->current_ssid; |
||
30 | + int ret = 0; |
||
31 | + |
||
32 | + if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) { |
||
33 | + wpa_s->pairwise_cipher = wpa_s->mesh_rsn->pairwise_cipher; |
||
34 | + wpa_s->group_cipher = wpa_s->mesh_rsn->group_cipher; |
||
35 | + wpa_s->mgmt_group_cipher = wpa_s->mesh_rsn->mgmt_group_cipher; |
||
36 | + } |
||
37 | + |
||
38 | + if (wpa_s->ifmsh) { |
||
39 | + params->ies = wpa_s->ifmsh->mconf->rsn_ie; |
||
40 | + params->ie_len = wpa_s->ifmsh->mconf->rsn_ie_len; |
||
41 | + params->basic_rates = wpa_s->ifmsh->basic_rates; |
||
42 | + params->conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_HT_OP_MODE; |
||
43 | + params->conf.ht_opmode = wpa_s->ifmsh->bss[0]->iface->ht_op_mode; |
||
44 | + } |
||
45 | + |
||
46 | + ret = wpa_drv_join_mesh(wpa_s, params); |
||
47 | + if (ret) |
||
48 | + wpa_msg(wpa_s, MSG_ERROR, "mesh join error=%d\n", ret); |
||
49 | + |
||
50 | + /* hostapd sets the interface down until we associate */ |
||
51 | + wpa_drv_set_operstate(wpa_s, 1); |
||
52 | + |
||
53 | + if (!ret) |
||
54 | + wpa_supplicant_set_state(wpa_s, WPA_COMPLETED); |
||
55 | + |
||
56 | + return; |
||
57 | +} |
||
58 | + |
||
59 | + |
||
60 | int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s, |
||
61 | struct wpa_ssid *ssid) |
||
62 | { |
||
63 | - struct wpa_driver_mesh_join_params params; |
||
64 | + struct wpa_driver_mesh_join_params *params = |
||
65 | + os_zalloc(sizeof(struct wpa_driver_mesh_join_params)); |
||
66 | int ret = 0; |
||
67 | |||
68 | - if (!ssid || !ssid->ssid || !ssid->ssid_len || !ssid->frequency) { |
||
69 | + if (!ssid || !ssid->ssid || !ssid->ssid_len || !ssid->frequency || !params) { |
||
70 | ret = -ENOENT; |
||
71 | goto out; |
||
72 | } |
||
73 | @@ -381,22 +416,22 @@ int wpa_supplicant_join_mesh(struct wpa_ |
||
74 | wpa_s->group_cipher = WPA_CIPHER_NONE; |
||
75 | wpa_s->mgmt_group_cipher = 0; |
||
76 | |||
77 | - os_memset(¶ms, 0, sizeof(params)); |
||
78 | - params.meshid = ssid->ssid; |
||
79 | - params.meshid_len = ssid->ssid_len; |
||
80 | - ibss_mesh_setup_freq(wpa_s, ssid, ¶ms.freq); |
||
81 | - wpa_s->mesh_ht_enabled = !!params.freq.ht_enabled; |
||
82 | - wpa_s->mesh_vht_enabled = !!params.freq.vht_enabled; |
||
83 | - if (params.freq.ht_enabled && params.freq.sec_channel_offset) |
||
84 | - ssid->ht40 = params.freq.sec_channel_offset; |
||
85 | + params->meshid = ssid->ssid; |
||
86 | + params->meshid_len = ssid->ssid_len; |
||
87 | + ibss_mesh_setup_freq(wpa_s, ssid, ¶ms->freq); |
||
88 | + wpa_s->mesh_ht_enabled = !!params->freq.ht_enabled; |
||
89 | + wpa_s->mesh_vht_enabled = !!params->freq.vht_enabled; |
||
90 | + if (params->freq.ht_enabled && params->freq.sec_channel_offset) |
||
91 | + ssid->ht40 = params->freq.sec_channel_offset; |
||
92 | + |
||
93 | if (wpa_s->mesh_vht_enabled) { |
||
94 | ssid->vht = 1; |
||
95 | - switch (params.freq.bandwidth) { |
||
96 | + switch (params->freq.bandwidth) { |
||
97 | case 80: |
||
98 | - if (params.freq.center_freq2) { |
||
99 | + if (params->freq.center_freq2) { |
||
100 | ssid->max_oper_chwidth = VHT_CHANWIDTH_80P80MHZ; |
||
101 | ssid->vht_center_freq2 = |
||
102 | - params.freq.center_freq2; |
||
103 | + params->freq.center_freq2; |
||
104 | } else { |
||
105 | ssid->max_oper_chwidth = VHT_CHANWIDTH_80MHZ; |
||
106 | } |
||
107 | @@ -410,67 +445,43 @@ int wpa_supplicant_join_mesh(struct wpa_ |
||
108 | } |
||
109 | } |
||
110 | if (ssid->beacon_int > 0) |
||
111 | - params.beacon_int = ssid->beacon_int; |
||
112 | + params->beacon_int = ssid->beacon_int; |
||
113 | else if (wpa_s->conf->beacon_int > 0) |
||
114 | - params.beacon_int = wpa_s->conf->beacon_int; |
||
115 | + params->beacon_int = wpa_s->conf->beacon_int; |
||
116 | if (ssid->dtim_period > 0) |
||
117 | - params.dtim_period = ssid->dtim_period; |
||
118 | + params->dtim_period = ssid->dtim_period; |
||
119 | else if (wpa_s->conf->dtim_period > 0) |
||
120 | - params.dtim_period = wpa_s->conf->dtim_period; |
||
121 | - params.conf.max_peer_links = wpa_s->conf->max_peer_links; |
||
122 | + params->dtim_period = wpa_s->conf->dtim_period; |
||
123 | + params->conf.max_peer_links = wpa_s->conf->max_peer_links; |
||
124 | if (ssid->mesh_rssi_threshold < DEFAULT_MESH_RSSI_THRESHOLD) { |
||
125 | - params.conf.rssi_threshold = ssid->mesh_rssi_threshold; |
||
126 | - params.conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_RSSI_THRESHOLD; |
||
127 | + params->conf.rssi_threshold = ssid->mesh_rssi_threshold; |
||
128 | + params->conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_RSSI_THRESHOLD; |
||
129 | } |
||
130 | |||
131 | if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) { |
||
132 | - params.flags |= WPA_DRIVER_MESH_FLAG_SAE_AUTH; |
||
133 | - params.flags |= WPA_DRIVER_MESH_FLAG_AMPE; |
||
134 | + params->flags |= WPA_DRIVER_MESH_FLAG_SAE_AUTH; |
||
135 | + params->flags |= WPA_DRIVER_MESH_FLAG_AMPE; |
||
136 | wpa_s->conf->user_mpm = 1; |
||
137 | } |
||
138 | |||
139 | if (wpa_s->conf->user_mpm) { |
||
140 | - params.flags |= WPA_DRIVER_MESH_FLAG_USER_MPM; |
||
141 | - params.conf.auto_plinks = 0; |
||
142 | + params->flags |= WPA_DRIVER_MESH_FLAG_USER_MPM; |
||
143 | + params->conf.auto_plinks = 0; |
||
144 | } else { |
||
145 | - params.flags |= WPA_DRIVER_MESH_FLAG_DRIVER_MPM; |
||
146 | - params.conf.auto_plinks = 1; |
||
147 | + params->flags |= WPA_DRIVER_MESH_FLAG_DRIVER_MPM; |
||
148 | + params->conf.auto_plinks = 1; |
||
149 | } |
||
150 | - params.conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity; |
||
151 | + params->conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity; |
||
152 | |||
153 | - if (wpa_supplicant_mesh_init(wpa_s, ssid, ¶ms.freq)) { |
||
154 | + wpa_s->mesh_params = params; |
||
155 | + if (wpa_supplicant_mesh_init(wpa_s, ssid, ¶ms->freq)) { |
||
156 | wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh"); |
||
157 | wpa_drv_leave_mesh(wpa_s); |
||
158 | ret = -1; |
||
159 | goto out; |
||
160 | } |
||
161 | |||
162 | - if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) { |
||
163 | - wpa_s->pairwise_cipher = wpa_s->mesh_rsn->pairwise_cipher; |
||
164 | - wpa_s->group_cipher = wpa_s->mesh_rsn->group_cipher; |
||
165 | - wpa_s->mgmt_group_cipher = wpa_s->mesh_rsn->mgmt_group_cipher; |
||
166 | - } |
||
167 | - |
||
168 | - if (wpa_s->ifmsh) { |
||
169 | - params.ies = wpa_s->ifmsh->mconf->rsn_ie; |
||
170 | - params.ie_len = wpa_s->ifmsh->mconf->rsn_ie_len; |
||
171 | - params.basic_rates = wpa_s->ifmsh->basic_rates; |
||
172 | - params.conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_HT_OP_MODE; |
||
173 | - params.conf.ht_opmode = wpa_s->ifmsh->bss[0]->iface->ht_op_mode; |
||
174 | - } |
||
175 | - |
||
176 | - wpa_msg(wpa_s, MSG_INFO, "joining mesh %s", |
||
177 | - wpa_ssid_txt(ssid->ssid, ssid->ssid_len)); |
||
178 | - ret = wpa_drv_join_mesh(wpa_s, ¶ms); |
||
179 | - if (ret) |
||
180 | - wpa_msg(wpa_s, MSG_ERROR, "mesh join error=%d", ret); |
||
181 | - |
||
182 | - /* hostapd sets the interface down until we associate */ |
||
183 | - wpa_drv_set_operstate(wpa_s, 1); |
||
184 | - |
||
185 | - if (!ret) |
||
186 | - wpa_supplicant_set_state(wpa_s, WPA_COMPLETED); |
||
187 | - |
||
188 | + wpas_join_mesh(wpa_s); |
||
189 | out: |
||
190 | return ret; |
||
191 | } |
||
192 | --- a/wpa_supplicant/mesh.h |
||
193 | +++ b/wpa_supplicant/mesh.h |
||
194 | @@ -21,6 +21,7 @@ int wpas_mesh_add_interface(struct wpa_s |
||
195 | int wpas_mesh_peer_remove(struct wpa_supplicant *wpa_s, const u8 *addr); |
||
196 | int wpas_mesh_peer_add(struct wpa_supplicant *wpa_s, const u8 *addr, |
||
197 | int duration); |
||
198 | +void wpas_join_mesh(struct wpa_supplicant *wpa_s); |
||
199 | |||
200 | #ifdef CONFIG_MESH |
||
201 | |||
202 | --- a/wpa_supplicant/wpa_supplicant_i.h |
||
203 | +++ b/wpa_supplicant/wpa_supplicant_i.h |
||
204 | @@ -814,6 +814,7 @@ struct wpa_supplicant { |
||
205 | unsigned int mesh_if_created:1; |
||
206 | unsigned int mesh_ht_enabled:1; |
||
207 | unsigned int mesh_vht_enabled:1; |
||
208 | + struct wpa_driver_mesh_join_params *mesh_params; |
||
209 | #ifdef CONFIG_PMKSA_CACHE_EXTERNAL |
||
210 | /* struct external_pmksa_cache::list */ |
||
211 | struct dl_list mesh_external_pmksa_cache; |