From f86e34168eae71137c3cb1c5c4dc1b2ced184cd0 Mon Sep 17 00:00:00 2001 From: Ahmad Masri Date: Wed, 4 Dec 2019 16:40:22 +0200 Subject: [PATCH] Update operating classes and channels for the 60 GHz band Update new channels in Channel Bonding (CB2 ... CB4) in the 60 GHz band for different regulatory regions according to the latest draft amendment IEEE P802.11ay/D5.0. Signed-off-by: Ahmad Masri --- src/common/ieee802_11_common.c | 67 +++++++++++++++++++++++++++++++--- src/common/ieee802_11_common.h | 3 +- 2 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/common/ieee802_11_common.c b/src/common/ieee802_11_common.c index b976b51a0..275c50889 100644 --- a/src/common/ieee802_11_common.c +++ b/src/common/ieee802_11_common.c @@ -1052,10 +1052,22 @@ static int ieee80211_chan_to_freq_us(u8 op_class, u8 chan) if (chan < 149 || chan > 165) return -1; return 5000 + 5 * chan; - case 34: /* 60 GHz band, channels 1..6 */ - if (chan < 1 || chan > 6) + case 34: /* 60 GHz band, channels 1..8 */ + if (chan < 1 || chan > 8) return -1; return 56160 + 2160 * chan; + case 37: /* 60 GHz band, EDMG CB2, channels 9..15 */ + if (chan < 9 || chan > 15) + return -1; + return 56160 + 2160 * (chan - 8); + case 38: /* 60 GHz band, EDMG CB3, channels 17..22 */ + if (chan < 17 || chan > 22) + return -1; + return 56160 + 2160 * (chan - 16); + case 39: /* 60 GHz band, EDMG CB4, channels 25..29 */ + if (chan < 25 || chan > 29) + return -1; + return 56160 + 2160 * (chan - 24); } return -1; } @@ -1094,6 +1106,18 @@ static int ieee80211_chan_to_freq_eu(u8 op_class, u8 chan) if (chan < 1 || chan > 6) return -1; return 56160 + 2160 * chan; + case 21: /* 60 GHz band, EDMG CB2, channels 9..11 */ + if (chan < 9 || chan > 11) + return -1; + return 56160 + 2160 * (chan - 8); + case 22: /* 60 GHz band, EDMG CB3, channels 17..18 */ + if (chan < 17 || chan > 18) + return -1; + return 56160 + 2160 * (chan - 16); + case 23: /* 60 GHz band, EDMG CB4, channels 25 */ + if (chan != 25) + return -1; + return 56160 + 2160 * (chan - 24); } return -1; } @@ -1138,6 +1162,18 @@ static int ieee80211_chan_to_freq_jp(u8 op_class, u8 chan) if (chan < 1 || chan > 6) return -1; return 56160 + 2160 * chan; + case 62: /* 60 GHz band, EDMG CB2, channels 9..11 */ + if (chan < 9 || chan > 11) + return -1; + return 56160 + 2160 * (chan - 8); + case 63: /* 60 GHz band, EDMG CB3, channels 17..18 */ + if (chan < 17 || chan > 18) + return -1; + return 56160 + 2160 * (chan - 16); + case 64: /* 60 GHz band, EDMG CB4, channel 25 */ + if (chan != 25) + return -1; + return 56160 + 2160 * (chan - 24); } return -1; } @@ -1230,10 +1266,22 @@ static int ieee80211_chan_to_freq_global(u8 op_class, u8 chan) if (chan < 1 || chan > 233) return -1; return 5940 + chan * 5; - case 180: /* 60 GHz band, channels 1..6 */ - if (chan < 1 || chan > 6) + case 180: /* 60 GHz band, channels 1..8 */ + if (chan < 1 || chan > 8) return -1; return 56160 + 2160 * chan; + case 181: /* 60 GHz band, EDMG CB2, channels 9..15 */ + if (chan < 9 || chan > 15) + return -1; + return 56160 + 2160 * (chan - 8); + case 182: /* 60 GHz band, EDMG CB3, channels 17..22 */ + if (chan < 17 || chan > 22) + return -1; + return 56160 + 2160 * (chan - 16); + case 183: /* 60 GHz band, EDMG CB4, channel 25..29 */ + if (chan < 25 || chan > 29) + return -1; + return 56160 + 2160 * (chan - 24); } return -1; } @@ -1661,7 +1709,16 @@ const struct oper_class_map global_op_class[] = { { HOSTAPD_MODE_IEEE80211A, 129, 50, 114, 16, BW160, P2P_SUPP }, { HOSTAPD_MODE_IEEE80211A, 130, 36, 161, 4, BW80P80, P2P_SUPP }, { HOSTAPD_MODE_IEEE80211A, 131, 1, 233, 4, BW20, P2P_SUPP }, - { HOSTAPD_MODE_IEEE80211AD, 180, 1, 4, 1, BW2160, P2P_SUPP }, + + /* + * IEEE Std 802.11ad-2012 and P802.ay/D5.0 60 GHz operating classes. + * Class 180 has the legacy channels 1-6. Classes 181-183 include + * channels which implement channel bonding features. + */ + { HOSTAPD_MODE_IEEE80211AD, 180, 1, 6, 1, BW2160, P2P_SUPP }, + { HOSTAPD_MODE_IEEE80211AD, 181, 9, 13, 1, BW4320, P2P_SUPP }, + { HOSTAPD_MODE_IEEE80211AD, 182, 17, 20, 1, BW6480, P2P_SUPP }, + { HOSTAPD_MODE_IEEE80211AD, 183, 25, 27, 1, BW8640, P2P_SUPP }, { -1, 0, 0, 0, 0, BW20, NO_P2P_SUPP } }; diff --git a/src/common/ieee802_11_common.h b/src/common/ieee802_11_common.h index 052f33302..275bca6db 100644 --- a/src/common/ieee802_11_common.h +++ b/src/common/ieee802_11_common.h @@ -198,7 +198,8 @@ struct oper_class_map { u8 min_chan; u8 max_chan; u8 inc; - enum { BW20, BW40PLUS, BW40MINUS, BW80, BW2160, BW160, BW80P80 } bw; + enum { BW20, BW40PLUS, BW40MINUS, BW80, BW2160, BW160, BW80P80, BW4320, + BW6480, BW8640} bw; enum { P2P_SUPP, NO_P2P_SUPP } p2p; };