@@ -2902,6 +2902,147 @@ int supplicant_p2p_oper(const struct device *dev, struct wifi_p2p_params *params
29022902 break ;
29032903 }
29042904
2905+ case WIFI_P2P_GROUP_ADD : {
2906+ int len = 0 ;
2907+
2908+ if (!params ) {
2909+ wpa_printf (MSG_ERROR , "P2P group add params are NULL" );
2910+ return - EINVAL ;
2911+ }
2912+
2913+ len = snprintk (cmd_buf , sizeof (cmd_buf ), "P2P_GROUP_ADD" );
2914+
2915+ if (params -> group_add .freq > 0 ) {
2916+ len += snprintk (cmd_buf + len , sizeof (cmd_buf ) - len , " freq=%d" ,
2917+ params -> group_add .freq );
2918+ }
2919+
2920+ if (params -> group_add .persistent >= 0 ) {
2921+ len += snprintk (cmd_buf + len , sizeof (cmd_buf ) - len , " persistent=%d" ,
2922+ params -> group_add .persistent );
2923+ }
2924+
2925+ if (params -> group_add .ht40 ) {
2926+ len += snprintk (cmd_buf + len , sizeof (cmd_buf ) - len , " ht40" );
2927+ }
2928+
2929+ if (params -> group_add .vht ) {
2930+ len += snprintk (cmd_buf + len , sizeof (cmd_buf ) - len , " vht" );
2931+ }
2932+
2933+ if (params -> group_add .he ) {
2934+ len += snprintk (cmd_buf + len , sizeof (cmd_buf ) - len , " he" );
2935+ }
2936+
2937+ if (params -> group_add .edmg ) {
2938+ len += snprintk (cmd_buf + len , sizeof (cmd_buf ) - len , " edmg" );
2939+ }
2940+
2941+ if (params -> group_add .go_bssid_length == WIFI_MAC_ADDR_LEN ) {
2942+ len += snprintk (cmd_buf + len , sizeof (cmd_buf ) - len ,
2943+ " go_bssid=%02x:%02x:%02x:%02x:%02x:%02x" ,
2944+ params -> group_add .go_bssid [0 ],
2945+ params -> group_add .go_bssid [1 ],
2946+ params -> group_add .go_bssid [2 ],
2947+ params -> group_add .go_bssid [3 ],
2948+ params -> group_add .go_bssid [4 ],
2949+ params -> group_add .go_bssid [5 ]);
2950+ }
2951+
2952+ ret = zephyr_wpa_cli_cmd_resp_noprint (wpa_s -> ctrl_conn , cmd_buf , resp_buf );
2953+ if (ret < 0 ) {
2954+ wpa_printf (MSG_ERROR , "P2P_GROUP_ADD command failed: %d" , ret );
2955+ return - EIO ;
2956+ }
2957+ ret = 0 ;
2958+ break ;
2959+ }
2960+
2961+ case WIFI_P2P_GROUP_REMOVE :
2962+ if (!params ) {
2963+ wpa_printf (MSG_ERROR , "P2P group remove params are NULL" );
2964+ return - EINVAL ;
2965+ }
2966+
2967+ if (params -> group_remove .ifname [0 ] == '\0' ) {
2968+ wpa_printf (MSG_ERROR , "Interface name required for P2P_GROUP_REMOVE" );
2969+ return - EINVAL ;
2970+ }
2971+
2972+ snprintk (cmd_buf , sizeof (cmd_buf ), "P2P_GROUP_REMOVE %s" ,
2973+ params -> group_remove .ifname );
2974+
2975+ ret = zephyr_wpa_cli_cmd_resp_noprint (wpa_s -> ctrl_conn , cmd_buf , resp_buf );
2976+ if (ret < 0 ) {
2977+ wpa_printf (MSG_ERROR , "P2P_GROUP_REMOVE command failed: %d" , ret );
2978+ return - EIO ;
2979+ }
2980+ ret = 0 ;
2981+ break ;
2982+
2983+ case WIFI_P2P_INVITE : {
2984+ char addr_str [18 ];
2985+ int len = 0 ;
2986+
2987+ if (!params ) {
2988+ wpa_printf (MSG_ERROR , "P2P invite params are NULL" );
2989+ return - EINVAL ;
2990+ }
2991+
2992+ snprintk (addr_str , sizeof (addr_str ), "%02x:%02x:%02x:%02x:%02x:%02x" ,
2993+ params -> invite .peer_addr [0 ], params -> invite .peer_addr [1 ],
2994+ params -> invite .peer_addr [2 ], params -> invite .peer_addr [3 ],
2995+ params -> invite .peer_addr [4 ], params -> invite .peer_addr [5 ]);
2996+
2997+ if (params -> invite .type == WIFI_P2P_INVITE_PERSISTENT ) {
2998+ if (params -> invite .persistent_id < 0 ) {
2999+ wpa_printf (MSG_ERROR , "Persistent group ID required" );
3000+ return - EINVAL ;
3001+ }
3002+ len = snprintk (cmd_buf , sizeof (cmd_buf ), "P2P_INVITE persistent=%d peer=%s" ,
3003+ params -> invite .persistent_id , addr_str );
3004+
3005+ if (params -> invite .freq > 0 ) {
3006+ len += snprintk (cmd_buf + len , sizeof (cmd_buf ) - len , " freq=%d" ,
3007+ params -> invite .freq );
3008+ }
3009+ } else if (params -> invite .type == WIFI_P2P_INVITE_GROUP ) {
3010+ if (params -> invite .group_ifname [0 ] == '\0' ) {
3011+ wpa_printf (MSG_ERROR , "Group interface name required" );
3012+ return - EINVAL ;
3013+ }
3014+ len = snprintk (cmd_buf , sizeof (cmd_buf ), "P2P_INVITE group=%s peer=%s" ,
3015+ params -> invite .group_ifname , addr_str );
3016+
3017+ if (params -> invite .freq > 0 ) {
3018+ len += snprintk (cmd_buf + len , sizeof (cmd_buf ) - len , " freq=%d" ,
3019+ params -> invite .freq );
3020+ }
3021+
3022+ if (params -> invite .go_dev_addr_length == WIFI_MAC_ADDR_LEN ) {
3023+ len += snprintk (cmd_buf + len , sizeof (cmd_buf ) - len ,
3024+ " go_dev_addr=%02x:%02x:%02x:%02x:%02x:%02x" ,
3025+ params -> invite .go_dev_addr [0 ],
3026+ params -> invite .go_dev_addr [1 ],
3027+ params -> invite .go_dev_addr [2 ],
3028+ params -> invite .go_dev_addr [3 ],
3029+ params -> invite .go_dev_addr [4 ],
3030+ params -> invite .go_dev_addr [5 ]);
3031+ }
3032+ } else {
3033+ wpa_printf (MSG_ERROR , "Invalid invite type: %d" , params -> invite .type );
3034+ return - EINVAL ;
3035+ }
3036+
3037+ ret = zephyr_wpa_cli_cmd_resp_noprint (wpa_s -> ctrl_conn , cmd_buf , resp_buf );
3038+ if (ret < 0 ) {
3039+ wpa_printf (MSG_ERROR , "P2P_INVITE command failed: %d" , ret );
3040+ return - EIO ;
3041+ }
3042+ ret = 0 ;
3043+ break ;
3044+ }
3045+
29053046 default :
29063047 wpa_printf (MSG_ERROR , "Unknown P2P operation: %d" , params -> oper );
29073048 ret = - EINVAL ;
0 commit comments