#define HOSTAPD_CHAN_DFS_AVAILABLE 0x00000300
#define HOSTAPD_CHAN_DFS_MASK 0x00000300
-#define HOSTAPD_CHAN_VHT_10_70 0x00000800
-#define HOSTAPD_CHAN_VHT_30_50 0x00001000
-#define HOSTAPD_CHAN_VHT_50_30 0x00002000
-#define HOSTAPD_CHAN_VHT_70_10 0x00004000
+#define HOSTAPD_CHAN_VHT_80MHZ_SUBCHANNEL 0x00000800
+#define HOSTAPD_CHAN_VHT_160MHZ_SUBCHANNEL 0x00001000
#define HOSTAPD_CHAN_INDOOR_ONLY 0x00010000
#define HOSTAPD_CHAN_GO_CONCURRENT 0x00020000
-#define HOSTAPD_CHAN_VHT_10_150 0x00100000
-#define HOSTAPD_CHAN_VHT_30_130 0x00200000
-#define HOSTAPD_CHAN_VHT_50_110 0x00400000
-#define HOSTAPD_CHAN_VHT_70_90 0x00800000
-#define HOSTAPD_CHAN_VHT_90_70 0x01000000
-#define HOSTAPD_CHAN_VHT_110_50 0x02000000
-#define HOSTAPD_CHAN_VHT_130_30 0x04000000
-#define HOSTAPD_CHAN_VHT_150_10 0x08000000
-
/* Allowed bandwidth mask */
enum hostapd_chan_width_attr {
HOSTAPD_CHAN_WIDTH_10 = BIT(0),
for (c = 0; c < mode->num_channels; c++) {
struct hostapd_channel_data *chan = &mode->channels[c];
- if (chan->freq - 10 >= start && chan->freq + 70 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_10_70;
- if (chan->freq - 30 >= start && chan->freq + 50 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_30_50;
-
- if (chan->freq - 50 >= start && chan->freq + 30 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_50_30;
-
- if (chan->freq - 70 >= start && chan->freq + 10 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_70_10;
-
- if (max_bw >= 160) {
- if (chan->freq - 10 >= start && chan->freq + 150 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_10_150;
-
- if (chan->freq - 30 >= start && chan->freq + 130 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_30_130;
-
- if (chan->freq - 50 >= start && chan->freq + 110 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_50_110;
-
- if (chan->freq - 70 >= start && chan->freq + 90 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_70_90;
-
- if (chan->freq - 90 >= start && chan->freq + 70 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_90_70;
-
- if (chan->freq - 110 >= start && chan->freq + 50 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_110_50;
+ if (chan->freq - 10 < start || chan->freq + 10 > end)
+ continue;
- if (chan->freq - 130 >= start && chan->freq + 30 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_130_30;
+ if (max_bw >= 80)
+ chan->flag |= HOSTAPD_CHAN_VHT_80MHZ_SUBCHANNEL;
- if (chan->freq - 150 >= start && chan->freq + 10 <= end)
- chan->flag |= HOSTAPD_CHAN_VHT_150_10;
- }
+ if (max_bw >= 160)
+ chan->flag |= HOSTAPD_CHAN_VHT_160MHZ_SUBCHANNEL;
}
}
NOT_ALLOWED)
return NOT_ALLOWED;
- if ((i == 0 && !(flags & HOSTAPD_CHAN_VHT_10_70)) ||
- (i == 1 && !(flags & HOSTAPD_CHAN_VHT_30_50)) ||
- (i == 2 && !(flags & HOSTAPD_CHAN_VHT_50_30)) ||
- (i == 3 && !(flags & HOSTAPD_CHAN_VHT_70_10)))
+ if (!(flags & HOSTAPD_CHAN_VHT_80MHZ_SUBCHANNEL))
return NOT_ALLOWED;
if (flags & HOSTAPD_CHAN_NO_IR)
NOT_ALLOWED)
return NOT_ALLOWED;
- if ((i == 0 && !(flags & HOSTAPD_CHAN_VHT_10_150)) ||
- (i == 1 && !(flags & HOSTAPD_CHAN_VHT_30_130)) ||
- (i == 2 && !(flags & HOSTAPD_CHAN_VHT_50_110)) ||
- (i == 3 && !(flags & HOSTAPD_CHAN_VHT_70_90)) ||
- (i == 4 && !(flags & HOSTAPD_CHAN_VHT_90_70)) ||
- (i == 5 && !(flags & HOSTAPD_CHAN_VHT_110_50)) ||
- (i == 6 && !(flags & HOSTAPD_CHAN_VHT_130_30)) ||
- (i == 7 && !(flags & HOSTAPD_CHAN_VHT_150_10)))
+ if (!(flags & HOSTAPD_CHAN_VHT_80MHZ_SUBCHANNEL) ||
+ !(flags & HOSTAPD_CHAN_VHT_160MHZ_SUBCHANNEL))
return NOT_ALLOWED;
if (flags & HOSTAPD_CHAN_NO_IR)
if (res == NO_IR)
ret = NO_IR;
if (!is_6ghz) {
- if (i == 0 && !(flags & HOSTAPD_CHAN_VHT_10_70))
- return NOT_ALLOWED;
- if (i == 1 && !(flags & HOSTAPD_CHAN_VHT_30_50))
- return NOT_ALLOWED;
- if (i == 2 && !(flags & HOSTAPD_CHAN_VHT_50_30))
- return NOT_ALLOWED;
- if (i == 3 && !(flags & HOSTAPD_CHAN_VHT_70_10))
+ if (!(flags & HOSTAPD_CHAN_VHT_80MHZ_SUBCHANNEL))
return NOT_ALLOWED;
} else if (is_6ghz &&
(!(wpas_get_6ghz_he_chwidth_capab(mode) &
ret = NO_IR;
if (!is_6ghz_op_class(op_class)) {
- if (i == 0 && !(flags & HOSTAPD_CHAN_VHT_10_150))
- return NOT_ALLOWED;
- if (i == 1 && !(flags & HOSTAPD_CHAN_VHT_30_130))
- return NOT_ALLOWED;
- if (i == 2 && !(flags & HOSTAPD_CHAN_VHT_50_110))
- return NOT_ALLOWED;
- if (i == 3 && !(flags & HOSTAPD_CHAN_VHT_70_90))
- return NOT_ALLOWED;
- if (i == 4 && !(flags & HOSTAPD_CHAN_VHT_90_70))
- return NOT_ALLOWED;
- if (i == 5 && !(flags & HOSTAPD_CHAN_VHT_110_50))
- return NOT_ALLOWED;
- if (i == 6 && !(flags & HOSTAPD_CHAN_VHT_130_30))
- return NOT_ALLOWED;
- if (i == 7 && !(flags & HOSTAPD_CHAN_VHT_150_10))
+ if (!(flags & HOSTAPD_CHAN_VHT_80MHZ_SUBCHANNEL) ||
+ !(flags & HOSTAPD_CHAN_VHT_160MHZ_SUBCHANNEL))
return NOT_ALLOWED;
} else if (is_6ghz_op_class(op_class) &&
(!(wpas_get_6ghz_he_chwidth_capab(mode) &