@ -512,6 +512,50 @@ int mesh_mpm_close_peer(struct wpa_supplicant *wpa_s, const u8 *addr)
}
int mesh_mpm_connect_peer ( struct wpa_supplicant * wpa_s , const u8 * addr )
{
struct wpa_ssid * ssid = wpa_s - > current_ssid ;
struct hostapd_data * hapd ;
struct sta_info * sta ;
struct mesh_conf * conf ;
if ( ! wpa_s - > ifmsh ) {
wpa_msg ( wpa_s , MSG_INFO , " Mesh is not prepared yet " ) ;
return - 1 ;
}
if ( ! ssid | | ! ssid - > no_auto_peer ) {
wpa_msg ( wpa_s , MSG_INFO ,
" This command is available only with no_auto_peer mesh network " ) ;
return - 1 ;
}
hapd = wpa_s - > ifmsh - > bss [ 0 ] ;
conf = wpa_s - > ifmsh - > mconf ;
sta = ap_get_sta ( hapd , addr ) ;
if ( ! sta ) {
wpa_msg ( wpa_s , MSG_INFO , " No such mesh peer " ) ;
return - 1 ;
}
if ( ( PLINK_OPEN_SENT < = sta - > plink_state & &
sta - > plink_state < = PLINK_ESTAB ) | |
( sta - > sae & & sta - > sae - > state > SAE_NOTHING ) ) {
wpa_msg ( wpa_s , MSG_INFO ,
" Specified peer is connecting/connected " ) ;
return - 1 ;
}
if ( conf - > security = = MESH_CONF_SEC_NONE )
mesh_mpm_plink_open ( wpa_s , sta , PLINK_OPEN_SENT ) ;
else
mesh_rsn_auth_sae_sta ( wpa_s , sta ) ;
return 0 ;
}
void mesh_mpm_deinit ( struct wpa_supplicant * wpa_s , struct hostapd_iface * ifmsh )
{
struct hostapd_data * hapd = ifmsh - > bss [ 0 ] ;