diff --git a/src/p2p/p2p.h b/src/p2p/p2p.h index b1c89d71b..9edbfb927 100644 --- a/src/p2p/p2p.h +++ b/src/p2p/p2p.h @@ -245,6 +245,7 @@ struct p2p_data; enum p2p_scan_type { P2P_SCAN_SOCIAL, P2P_SCAN_FULL, + P2P_SCAN_SPECIFIC, P2P_SCAN_SOCIAL_PLUS_ONE }; @@ -545,7 +546,8 @@ struct p2p_config { * operation to be completed. Type type argument specifies which type * of scan is to be done. @P2P_SCAN_SOCIAL indicates that only the * social channels (1, 6, 11) should be scanned. @P2P_SCAN_FULL - * indicates that all channels are to be scanned. + * indicates that all channels are to be scanned. @P2P_SCAN_SPECIFIC + * request a scan of a single channel specified by freq. * @P2P_SCAN_SOCIAL_PLUS_ONE request scan of all the social channels * plus one extra channel specified by freq. * diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index 5e6646ed0..097b623b9 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -377,6 +377,13 @@ static int wpas_p2p_scan(void *ctx, enum p2p_scan_type type, int freq, break; case P2P_SCAN_FULL: break; + case P2P_SCAN_SPECIFIC: + params->freqs = os_calloc(2, sizeof(int)); + if (params->freqs == NULL) + goto fail; + params->freqs[0] = freq; + params->freqs[1] = 0; + break; case P2P_SCAN_SOCIAL_PLUS_ONE: params->freqs = os_calloc(ARRAY_SIZE(social_channels_freq) + 2, sizeof(int));