Message ID | 9353656c-ef90-4f55-9b48-d1d130aa2eb8@candelatech.com |
---|---|
State | New |
Headers | show |
Series | hostapd AX Client Association Issue w/ 6GHz 320MHz AP | expand |
On 8/16/24 10:02, Alex Gavin wrote: > To Whom It May Concern: > > When testing a mt7996-based 6GHz 320MHz AP on a custom 6.10.3+ kernel > and recent upstream hostapd (commit 70b8f64), AX clients will not associate. > However, BE clients will associate. Separately, all AX and BE clients will associate > when the AP is configured to 160MHz. In all cases, the clients are configured to > the 6GHz BSSID. > > The following is a selection from the configuration file when configuring the AP > for 320MHz operation: > > ieee80211be=1 > channel=37 > op_class=137 > he_oper_centr_freq_seg0_idx=31 This seem wrong? HE does not support 320 bandwidth and hence the idx should be w.r.t to 160 which should be 47. > eht_oper_centr_freq_seg0_idx=31 This is fine. > he_6ghz_reg_pwr_type=0 > > With this configuration, the 'Channel Width' in the 'Control' field is set to > '0' (20 MHz). This is located in the '6GHz Operation Information' section of > the 'HE Operation' IE. Beacons from other 320MHz-configured APs (e.g. ASUS RT-BE96U, > Netgear RS700S) show the 'Channel Width' field set to '3' (160MHz or 80+80MHz). > > Digging into the beacon creation code for this IE, 'center_idx_to_bw_6ghz()' returns '4' > for 320MHz operation. This overflows the two bit 'Channel Width' field, setting > 'Channel Width' field to 0 (also setting the 'Duplicate Beacon' field to '1'). > > With the following hacked changes, I am able to associate AX clients again: > > diff --git a/src/ap/ieee802_11_he.c b/src/ap/ieee802_11_he.c > index a2deda6c4..8b00abad1 100644 > --- a/src/ap/ieee802_11_he.c > +++ b/src/ap/ieee802_11_he.c > @@ -252,7 +252,7 @@ u8 * hostapd_eid_he_operation(struct hostapd_data *hapd, u8 *eid) > * bits 3-5: Regulatory Info > */ > /* Channel Width */ > - if (seg1) > + if (seg1 || oper_chwidth == CONF_OPER_CHWIDTH_320MHZ) > control = 3; > else > control = center_idx_to_bw_6ghz(seg0); So here it will go to center_idx_to_bw_6ghz with value 47 which should return 3 which is what is expected. > > Can someone double check this partial configuration? I'm happy to provide the full config > if needed. If the config is correct, I am happy to submit this as a proper patch with any > needed modifications. > > Best,
diff --git a/src/ap/ieee802_11_he.c b/src/ap/ieee802_11_he.c index a2deda6c4..8b00abad1 100644 --- a/src/ap/ieee802_11_he.c +++ b/src/ap/ieee802_11_he.c @@ -252,7 +252,7 @@ u8 * hostapd_eid_he_operation(struct hostapd_data *hapd, u8 *eid) * bits 3-5: Regulatory Info */ /* Channel Width */ - if (seg1) + if (seg1 || oper_chwidth == CONF_OPER_CHWIDTH_320MHZ) control = 3; else control = center_idx_to_bw_6ghz(seg0);