@@ -2874,6 +2874,147 @@ int supplicant_p2p_oper(const struct device *dev, struct wifi_p2p_params *params
28742874 break ;
28752875 }
28762876
2877+ case WIFI_P2P_GROUP_ADD : {
2878+ int len = 0 ;
2879+
2880+ if (!params ) {
2881+ wpa_printf (MSG_ERROR , "P2P group add params are NULL" );
2882+ return - EINVAL ;
2883+ }
2884+
2885+ len = snprintf (cmd_buf , sizeof (cmd_buf ), "P2P_GROUP_ADD" );
2886+
2887+ if (params -> group_add .freq > 0 ) {
2888+ len += snprintf (cmd_buf + len , sizeof (cmd_buf ) - len , " freq=%d" ,
2889+ params -> group_add .freq );
2890+ }
2891+
2892+ if (params -> group_add .persistent >= 0 ) {
2893+ len += snprintf (cmd_buf + len , sizeof (cmd_buf ) - len , " persistent=%d" ,
2894+ params -> group_add .persistent );
2895+ }
2896+
2897+ if (params -> group_add .ht40 ) {
2898+ len += snprintf (cmd_buf + len , sizeof (cmd_buf ) - len , " ht40" );
2899+ }
2900+
2901+ if (params -> group_add .vht ) {
2902+ len += snprintf (cmd_buf + len , sizeof (cmd_buf ) - len , " vht" );
2903+ }
2904+
2905+ if (params -> group_add .he ) {
2906+ len += snprintf (cmd_buf + len , sizeof (cmd_buf ) - len , " he" );
2907+ }
2908+
2909+ if (params -> group_add .edmg ) {
2910+ len += snprintf (cmd_buf + len , sizeof (cmd_buf ) - len , " edmg" );
2911+ }
2912+
2913+ if (params -> group_add .go_bssid_length == WIFI_MAC_ADDR_LEN ) {
2914+ len += snprintf (cmd_buf + len , sizeof (cmd_buf ) - len ,
2915+ " go_bssid=%02x:%02x:%02x:%02x:%02x:%02x" ,
2916+ params -> group_add .go_bssid [0 ],
2917+ params -> group_add .go_bssid [1 ],
2918+ params -> group_add .go_bssid [2 ],
2919+ params -> group_add .go_bssid [3 ],
2920+ params -> group_add .go_bssid [4 ],
2921+ params -> group_add .go_bssid [5 ]);
2922+ }
2923+
2924+ ret = zephyr_wpa_cli_cmd_resp_noprint (wpa_s -> ctrl_conn , cmd_buf , resp_buf );
2925+ if (ret < 0 ) {
2926+ wpa_printf (MSG_ERROR , "P2P_GROUP_ADD command failed: %d" , ret );
2927+ return - EIO ;
2928+ }
2929+ ret = 0 ;
2930+ break ;
2931+ }
2932+
2933+ case WIFI_P2P_GROUP_REMOVE :
2934+ if (!params ) {
2935+ wpa_printf (MSG_ERROR , "P2P group remove params are NULL" );
2936+ return - EINVAL ;
2937+ }
2938+
2939+ if (params -> group_remove .ifname [0 ] == '\0' ) {
2940+ wpa_printf (MSG_ERROR , "Interface name required for P2P_GROUP_REMOVE" );
2941+ return - EINVAL ;
2942+ }
2943+
2944+ snprintf (cmd_buf , sizeof (cmd_buf ), "P2P_GROUP_REMOVE %s" ,
2945+ params -> group_remove .ifname );
2946+
2947+ ret = zephyr_wpa_cli_cmd_resp_noprint (wpa_s -> ctrl_conn , cmd_buf , resp_buf );
2948+ if (ret < 0 ) {
2949+ wpa_printf (MSG_ERROR , "P2P_GROUP_REMOVE command failed: %d" , ret );
2950+ return - EIO ;
2951+ }
2952+ ret = 0 ;
2953+ break ;
2954+
2955+ case WIFI_P2P_INVITE : {
2956+ char addr_str [18 ];
2957+ int len = 0 ;
2958+
2959+ if (!params ) {
2960+ wpa_printf (MSG_ERROR , "P2P invite params are NULL" );
2961+ return - EINVAL ;
2962+ }
2963+
2964+ snprintf (addr_str , sizeof (addr_str ), "%02x:%02x:%02x:%02x:%02x:%02x" ,
2965+ params -> invite .peer_addr [0 ], params -> invite .peer_addr [1 ],
2966+ params -> invite .peer_addr [2 ], params -> invite .peer_addr [3 ],
2967+ params -> invite .peer_addr [4 ], params -> invite .peer_addr [5 ]);
2968+
2969+ if (params -> invite .type == WIFI_P2P_INVITE_PERSISTENT ) {
2970+ if (params -> invite .persistent_id < 0 ) {
2971+ wpa_printf (MSG_ERROR , "Persistent group ID required" );
2972+ return - EINVAL ;
2973+ }
2974+ len = snprintf (cmd_buf , sizeof (cmd_buf ), "P2P_INVITE persistent=%d peer=%s" ,
2975+ params -> invite .persistent_id , addr_str );
2976+
2977+ if (params -> invite .freq > 0 ) {
2978+ len += snprintf (cmd_buf + len , sizeof (cmd_buf ) - len , " freq=%d" ,
2979+ params -> invite .freq );
2980+ }
2981+ } else if (params -> invite .type == WIFI_P2P_INVITE_GROUP ) {
2982+ if (params -> invite .group_ifname [0 ] == '\0' ) {
2983+ wpa_printf (MSG_ERROR , "Group interface name required" );
2984+ return - EINVAL ;
2985+ }
2986+ len = snprintf (cmd_buf , sizeof (cmd_buf ), "P2P_INVITE group=%s peer=%s" ,
2987+ params -> invite .group_ifname , addr_str );
2988+
2989+ if (params -> invite .freq > 0 ) {
2990+ len += snprintf (cmd_buf + len , sizeof (cmd_buf ) - len , " freq=%d" ,
2991+ params -> invite .freq );
2992+ }
2993+
2994+ if (params -> invite .go_dev_addr_length == WIFI_MAC_ADDR_LEN ) {
2995+ len += snprintf (cmd_buf + len , sizeof (cmd_buf ) - len ,
2996+ " go_dev_addr=%02x:%02x:%02x:%02x:%02x:%02x" ,
2997+ params -> invite .go_dev_addr [0 ],
2998+ params -> invite .go_dev_addr [1 ],
2999+ params -> invite .go_dev_addr [2 ],
3000+ params -> invite .go_dev_addr [3 ],
3001+ params -> invite .go_dev_addr [4 ],
3002+ params -> invite .go_dev_addr [5 ]);
3003+ }
3004+ } else {
3005+ wpa_printf (MSG_ERROR , "Invalid invite type: %d" , params -> invite .type );
3006+ return - EINVAL ;
3007+ }
3008+
3009+ ret = zephyr_wpa_cli_cmd_resp_noprint (wpa_s -> ctrl_conn , cmd_buf , resp_buf );
3010+ if (ret < 0 ) {
3011+ wpa_printf (MSG_ERROR , "P2P_INVITE command failed: %d" , ret );
3012+ return - EIO ;
3013+ }
3014+ ret = 0 ;
3015+ break ;
3016+ }
3017+
28773018 default :
28783019 wpa_printf (MSG_ERROR , "Unknown P2P operation: %d" , params -> oper );
28793020 ret = - EINVAL ;
0 commit comments