@ -9558,6 +9558,40 @@ fail:
return - 1 ;
}
static int nl80211_add_sta_node ( void * priv , const u8 * addr , u16 auth_alg )
{
struct i802_bss * bss = priv ;
struct wpa_driver_nl80211_data * drv = bss - > drv ;
struct nl_msg * msg ;
struct nlattr * params ;
if ( ! drv - > add_sta_node_vendor_cmd_avail )
return - EOPNOTSUPP ;
wpa_printf ( MSG_DEBUG , " nl80211: Add STA node " ) ;
if ( ! ( msg = nl80211_drv_msg ( drv , 0 , NL80211_CMD_VENDOR ) ) | |
nla_put_u32 ( msg , NL80211_ATTR_VENDOR_ID , OUI_QCA ) | |
nla_put_u32 ( msg , NL80211_ATTR_VENDOR_SUBCMD ,
QCA_NL80211_VENDOR_SUBCMD_ADD_STA_NODE ) | |
! ( params = nla_nest_start ( msg , NL80211_ATTR_VENDOR_DATA ) ) | |
( addr & &
nla_put ( msg , QCA_WLAN_VENDOR_ATTR_ADD_STA_NODE_MAC_ADDR , ETH_ALEN ,
addr ) ) | |
nla_put_u16 ( msg , QCA_WLAN_VENDOR_ATTR_ADD_STA_NODE_AUTH_ALGO ,
auth_alg ) ) {
nlmsg_free ( msg ) ;
wpa_printf ( MSG_ERROR ,
" %s: err in adding vendor_cmd and vendor_data " ,
__func__ ) ;
return - 1 ;
}
nla_nest_end ( msg , params ) ;
return send_and_recv_msgs ( drv , msg , NULL , NULL ) ;
}
# endif /* CONFIG_DRIVER_NL80211_QCA */
@ -11222,6 +11256,7 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {
. ignore_assoc_disallow = nl80211_ignore_assoc_disallow ,
# endif /* CONFIG_MBO */
. set_bssid_blacklist = nl80211_set_bssid_blacklist ,
. add_sta_node = nl80211_add_sta_node ,
# endif /* CONFIG_DRIVER_NL80211_QCA */
. configure_data_frame_filters = nl80211_configure_data_frame_filters ,
. get_ext_capab = nl80211_get_ext_capab ,