aboutsummaryrefslogtreecommitdiff
path: root/src/p2p/p2p_utils.c
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2013-04-29 16:42:49 -0700
committerDmitry Shmidt <dimitrysh@google.com>2013-04-29 16:42:49 -0700
commit4b06059785b935dd1f4f09314e4e12c417d2c6a4 (patch)
tree051e9f56fab2cd9d368ed15ff4e97c301d5a569c /src/p2p/p2p_utils.c
parent8da800a193fb6f8832218715f82a7b4e2d2ad338 (diff)
downloadwpa_supplicant_8-4b06059785b935dd1f4f09314e4e12c417d2c6a4.tar.gz
Accumulative patch from commit b57b560034f1bb1ad3a3892228940dde97323c0e
b57b560 wpa_supplicant: Default to nl80211 instead of wext ee28f08 hostapd: Add more messages for error paths 61d2ce2 hostapd: Reject configuration file without interface parameter a8a7890 Clear extra_blacklist_count on FLUSH command c646862 WPS ER: Allow UPnP interface to be forced 728d971 Use status code 17 (unable to handle new STA) on max-STA limitation 5e24dc8 Add dup_binstr() to help common binary string tasks 8b44ad7 Use os_zalloc() instead of os_malloc() + os_memset() 2c48211 FT RRB: Validate os_malloc() return value before using it 7ca902b Make vlan_file optional if dynamic_vlan is used bdb112d Add bitfield routines 04382f7 NFC: Add no waiting and no multiple operations options for scripts fe90496 WPS: Fix AP auto configuration on config token generation 28fcfb6 NFC: Increase wpa_cli command buffer size 8f7a6dd WPS NFC: Allow Device Password ID override for selected registrar aaecb69 WPS: Use generic MAC Address attribute builder 9ccd916 P2P: Clean up channel--frequency conversion functions e864c0a Use a common frequency to channel conversion function 02db75b FT: Reset FT flag upon STA deauthentication 7800d45 P2P: Set P2P_DEV_PEER_WAITING_RESPONSE from TX status callback d78d3c6 EAP peer: Add check before calling getSessionId method dd57970 Disable network temporarily on repeated connection failures Change-Id: If8078d5c1ff40ea806e844543cf6f2bf9d24b7ac Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'src/p2p/p2p_utils.c')
-rw-r--r--src/p2p/p2p_utils.c75
1 files changed, 19 insertions, 56 deletions
diff --git a/src/p2p/p2p_utils.c b/src/p2p/p2p_utils.c
index 37b9361a..69bd14b4 100644
--- a/src/p2p/p2p_utils.c
+++ b/src/p2p/p2p_utils.c
@@ -46,11 +46,17 @@ int p2p_random(char *buf, size_t len)
}
-static int p2p_channel_to_freq_j4(int reg_class, int channel)
+/**
+ * p2p_channel_to_freq - Convert channel info to frequency
+ * @op_class: Operating class
+ * @channel: Channel number
+ * Returns: Frequency in MHz or -1 if the specified channel is unknown
+ */
+int p2p_channel_to_freq(int op_class, int channel)
{
- /* Table J-4 in P802.11REVmb/D4.0 - Global operating classes */
- /* TODO: more regulatory classes */
- switch (reg_class) {
+ /* Table E-4 in IEEE Std 802.11-2012 - Global operating classes */
+ /* TODO: more operating classes */
+ switch (op_class) {
case 81:
/* channels 1..13 */
if (channel < 1 || channel > 13)
@@ -94,75 +100,34 @@ static int p2p_channel_to_freq_j4(int reg_class, int channel)
/**
- * p2p_channel_to_freq - Convert channel info to frequency
- * @country: Country code
- * @reg_class: Regulatory class
- * @channel: Channel number
- * Returns: Frequency in MHz or -1 if the specified channel is unknown
- */
-int p2p_channel_to_freq(const char *country, int reg_class, int channel)
-{
- if (country[2] == 0x04)
- return p2p_channel_to_freq_j4(reg_class, channel);
-
- /* These are mainly for backwards compatibility; to be removed */
- switch (reg_class) {
- case 1: /* US/1, EU/1, JP/1 = 5 GHz, channels 36,40,44,48 */
- if (channel < 36 || channel > 48)
- return -1;
- return 5000 + 5 * channel;
- case 3: /* US/3 = 5 GHz, channels 149,153,157,161 */
- case 5: /* US/5 = 5 GHz, channels 149,153,157,161 */
- if (channel < 149 || channel > 161)
- return -1;
- return 5000 + 5 * channel;
- case 4: /* EU/4 = 2.407 GHz, channels 1..13 */
- case 12: /* US/12 = 2.407 GHz, channels 1..11 */
- case 30: /* JP/30 = 2.407 GHz, channels 1..13 */
- if (channel < 1 || channel > 13)
- return -1;
- return 2407 + 5 * channel;
- case 31: /* JP/31 = 2.414 GHz, channel 14 */
- if (channel != 14)
- return -1;
- return 2414 + 5 * channel;
- }
-
- return -1;
-}
-
-
-/**
* p2p_freq_to_channel - Convert frequency into channel info
- * @country: Country code
- * @reg_class: Buffer for returning regulatory class
+ * @op_class: Buffer for returning operating class
* @channel: Buffer for returning channel number
* Returns: 0 on success, -1 if the specified frequency is unknown
*/
-int p2p_freq_to_channel(const char *country, unsigned int freq, u8 *reg_class,
- u8 *channel)
+int p2p_freq_to_channel(unsigned int freq, u8 *op_class, u8 *channel)
{
/* TODO: more operating classes */
if (freq >= 2412 && freq <= 2472) {
- *reg_class = 81; /* 2.407 GHz, channels 1..13 */
+ *op_class = 81; /* 2.407 GHz, channels 1..13 */
*channel = (freq - 2407) / 5;
return 0;
}
if (freq == 2484) {
- *reg_class = 82; /* channel 14 */
+ *op_class = 82; /* channel 14 */
*channel = 14;
return 0;
}
if (freq >= 5180 && freq <= 5240) {
- *reg_class = 115; /* 5 GHz, channels 36..48 */
+ *op_class = 115; /* 5 GHz, channels 36..48 */
*channel = (freq - 5000) / 5;
return 0;
}
if (freq >= 5745 && freq <= 5805) {
- *reg_class = 124; /* 5 GHz, channels 149..161 */
+ *op_class = 124; /* 5 GHz, channels 149..161 */
*channel = (freq - 5000) / 5;
return 0;
}
@@ -261,9 +226,8 @@ int p2p_channels_includes_freq(const struct p2p_channels *channels,
for (i = 0; i < channels->reg_classes; i++) {
const struct p2p_reg_class *reg = &channels->reg_class[i];
for (j = 0; j < reg->channels; j++) {
- if (p2p_channel_to_freq_j4(reg->reg_class,
- reg->channel[j]) ==
- (int) freq)
+ if (p2p_channel_to_freq(reg->reg_class,
+ reg->channel[j]) == (int) freq)
return 1;
}
}
@@ -274,8 +238,7 @@ int p2p_channels_includes_freq(const struct p2p_channels *channels,
int p2p_supported_freq(struct p2p_data *p2p, unsigned int freq)
{
u8 op_reg_class, op_channel;
- if (p2p_freq_to_channel(p2p->cfg->country, freq,
- &op_reg_class, &op_channel) < 0)
+ if (p2p_freq_to_channel(freq, &op_reg_class, &op_channel) < 0)
return 0;
return p2p_channels_includes(&p2p->cfg->channels, op_reg_class,
op_channel);