diff --git a/sys/dev/iwn/if_iwn.c b/sys/dev/iwn/if_iwn.c --- a/sys/dev/iwn/if_iwn.c +++ b/sys/dev/iwn/if_iwn.c @@ -6660,7 +6660,7 @@ if (IEEE80211_IS_CHAN_HT40(c)) { switch (vap->iv_curhtprotmode) { - case IEEE80211_HTINFO_OPMODE_HT20PR: + case IEEE80211_HTINFO_OPMODE_PROTECTION_20MHZ: htflags |= IWN_RXON_HT_MODEPURE40; break; default: diff --git a/sys/net80211/ieee80211.h b/sys/net80211/ieee80211.h --- a/sys/net80211/ieee80211.h +++ b/sys/net80211/ieee80211.h @@ -3,6 +3,10 @@ * * Copyright (c) 2001 Atsushi Onoe * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting + * Copyright (c) 2024 The FreeBSD Foundation + * + * Portions of this software were developed by Cheng Cui + * under sponsorship from the FreeBSD Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -801,12 +805,14 @@ /* XXX add rest */ /* bytes 2+3 */ -#define IEEE80211_HTINFO_OPMODE 0x03 /* operating mode */ +/* 802.11-2012, Table 8-130-HT Operation element fields and subfields, HT Protection */ +#define IEEE80211_HTINFO_OPMODE 0x03 /* operating mode mask */ #define IEEE80211_HTINFO_OPMODE_S 0 -#define IEEE80211_HTINFO_OPMODE_PURE 0x00 /* no protection */ -#define IEEE80211_HTINFO_OPMODE_PROTOPT 0x01 /* protection optional */ -#define IEEE80211_HTINFO_OPMODE_HT20PR 0x02 /* protection for HT20 sta's */ -#define IEEE80211_HTINFO_OPMODE_MIXED 0x03 /* protection for legacy sta's*/ +#define IEEE80211_HTINFO_OPMODE_PROTECTION_NONE 0 /* for no protection mode */ +#define IEEE80211_HTINFO_OPMODE_PROTECTION_NONMEMBER 1 /* for nonmember protection mode */ +#define IEEE80211_HTINFO_OPMODE_PROTECTION_20MHZ 2 /* for 20 MHz protection mode */ +#define IEEE80211_HTINFO_OPMODE_PROTECTION_NONHT_MIXED 3 /* for non-HT mixed mode */ + #define IEEE80211_HTINFO_NONGF_PRESENT 0x04 /* non-GF sta's present */ #define IEEE80211_HTINFO_TXBL 0x08 /* transmit burst limit */ #define IEEE80211_HTINFO_NONHT_PRESENT 0x10 /* non-HT sta's present */ diff --git a/sys/net80211/ieee80211_hostap.c b/sys/net80211/ieee80211_hostap.c --- a/sys/net80211/ieee80211_hostap.c +++ b/sys/net80211/ieee80211_hostap.c @@ -2,6 +2,10 @@ * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2007-2008 Sam Leffler, Errno Consulting + * Copyright (c) 2024 The FreeBSD Foundation + * + * Portions of this software were developed by Cheng Cui + * under sponsorship from the FreeBSD Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -1735,7 +1739,7 @@ const struct ieee80211_ie_htinfo *ht = (const struct ieee80211_ie_htinfo *) ie; return (ht->hi_byte2 & IEEE80211_HTINFO_OPMODE) == - IEEE80211_HTINFO_OPMODE_MIXED; + IEEE80211_HTINFO_OPMODE_PROTECTION_NONHT_MIXED; } static int @@ -1865,12 +1869,12 @@ } if (scan.htinfo == NULL) { ieee80211_htprot_update(vap, - IEEE80211_HTINFO_OPMODE_PROTOPT | + IEEE80211_HTINFO_OPMODE_PROTECTION_NONMEMBER | IEEE80211_HTINFO_NONHT_PRESENT); } else if (ishtmixed(scan.htinfo)) { /* XXX? take NONHT_PRESENT from beacon? */ ieee80211_htprot_update(vap, - IEEE80211_HTINFO_OPMODE_MIXED | + IEEE80211_HTINFO_OPMODE_PROTECTION_NONHT_MIXED | IEEE80211_HTINFO_NONHT_PRESENT); } } diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c --- a/sys/net80211/ieee80211_ht.c +++ b/sys/net80211/ieee80211_ht.c @@ -2,6 +2,10 @@ * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2007-2008 Sam Leffler, Errno Consulting + * Copyright (c) 2024 The FreeBSD Foundation + * + * Portions of this software were developed by Cheng Cui + * under sponsorship from the FreeBSD Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -238,7 +242,7 @@ ic->ic_ampdu_rx_stop = ampdu_rx_stop; ic->ic_htprotmode = IEEE80211_PROT_RTSCTS; - ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_PURE; + ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_PROTECTION_NONE; } void @@ -262,7 +266,7 @@ vap->iv_ampdu_mintraffic[WME_AC_VI] = 32; vap->iv_htprotmode = IEEE80211_PROT_RTSCTS; - vap->iv_curhtprotmode = IEEE80211_HTINFO_OPMODE_PURE; + vap->iv_curhtprotmode = IEEE80211_HTINFO_OPMODE_PROTECTION_NONE; if (vap->iv_htcaps & IEEE80211_HTC_HT) { /* @@ -1546,17 +1550,17 @@ uint8_t protmode; if (vap->iv_sta_assoc != vap->iv_ht_sta_assoc) { - protmode = IEEE80211_HTINFO_OPMODE_MIXED + protmode = IEEE80211_HTINFO_OPMODE_PROTECTION_NONHT_MIXED | IEEE80211_HTINFO_NONHT_PRESENT; } else if (vap->iv_flags_ht & IEEE80211_FHT_NONHT_PR) { - protmode = IEEE80211_HTINFO_OPMODE_PROTOPT + protmode = IEEE80211_HTINFO_OPMODE_PROTECTION_NONMEMBER | IEEE80211_HTINFO_NONHT_PRESENT; } else if (ic->ic_bsschan != IEEE80211_CHAN_ANYC && IEEE80211_IS_CHAN_HT40(ic->ic_bsschan) && vap->iv_sta_assoc != vap->iv_ht40_sta_assoc) { - protmode = IEEE80211_HTINFO_OPMODE_HT20PR; + protmode = IEEE80211_HTINFO_OPMODE_PROTECTION_20MHZ; } else { - protmode = IEEE80211_HTINFO_OPMODE_PURE; + protmode = IEEE80211_HTINFO_OPMODE_PROTECTION_NONE; } if (protmode != vap->iv_curhtprotmode) { vap->iv_curhtprotmode = protmode; @@ -1605,9 +1609,9 @@ * Public version of htinfo_update; used for processing * beacon frames from overlapping bss. * - * Caller can specify either IEEE80211_HTINFO_OPMODE_MIXED + * Caller can specify either IEEE80211_HTINFO_OPMODE_PROTECTION_NONHT_MIXED * (on receipt of a beacon that advertises MIXED) or - * IEEE80211_HTINFO_OPMODE_PROTOPT (on receipt of a beacon + * IEEE80211_HTINFO_OPMODE_PROTECTION_NONMEMBER (on receipt of a beacon * from an overlapping legacy bss). We treat MIXED with * a higher precedence than PROTOPT (i.e. we will not change * change PROTOPT -> MIXED; only MIXED -> PROTOPT). This @@ -1628,8 +1632,8 @@ vap->iv_lastnonht = ticks; if (protmode != vap->iv_curhtprotmode && - (OPMODE(vap->iv_curhtprotmode) != IEEE80211_HTINFO_OPMODE_MIXED || - OPMODE(protmode) == IEEE80211_HTINFO_OPMODE_PROTOPT)) { + (OPMODE(vap->iv_curhtprotmode) != IEEE80211_HTINFO_OPMODE_PROTECTION_NONHT_MIXED || + OPMODE(protmode) == IEEE80211_HTINFO_OPMODE_PROTECTION_NONMEMBER)) { vap->iv_curhtprotmode = protmode; /* Update VAP with new protection mode */ ieee80211_vap_update_ht_protmode(vap); diff --git a/sys/net80211/ieee80211_proto.c b/sys/net80211/ieee80211_proto.c --- a/sys/net80211/ieee80211_proto.c +++ b/sys/net80211/ieee80211_proto.c @@ -4,6 +4,10 @@ * Copyright (c) 2001 Atsushi Onoe * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting * Copyright (c) 2012 IEEE + * Copyright (c) 2024 The FreeBSD Foundation + * + * Portions of this software were developed by Cheng Cui + * under sponsorship from the FreeBSD Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -1095,13 +1099,13 @@ if (iv->iv_curhtprotmode & IEEE80211_HTINFO_NONHT_PRESENT) num_nonhtpr++; switch (iv->iv_curhtprotmode & IEEE80211_HTINFO_OPMODE) { - case IEEE80211_HTINFO_OPMODE_PURE: + case IEEE80211_HTINFO_OPMODE_PROTECTION_NONE: num_pure++; break; - case IEEE80211_HTINFO_OPMODE_PROTOPT: + case IEEE80211_HTINFO_OPMODE_PROTECTION_NONMEMBER: num_optional++; break; - case IEEE80211_HTINFO_OPMODE_HT20PR: + case IEEE80211_HTINFO_OPMODE_PROTECTION_20MHZ: num_ht2040++; break; } @@ -1143,13 +1147,13 @@ * non HT40-involved combination of opmode and this is the most * sensible default. */ - ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_MIXED; + ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_PROTECTION_NONHT_MIXED; if (num_pure == num_vaps) - ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_PURE; + ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_PROTECTION_NONE; if (num_optional == num_vaps) - ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_PROTOPT; + ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_PROTECTION_NONMEMBER; /* * Note: we need /a/ HT40 station somewhere for this to @@ -1158,14 +1162,14 @@ if ((num_ht2040 > 0) || ((num_ht_sta > 0) && (num_ht40_sta > 0) && (num_ht_sta != num_ht40_sta))) - ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_HT20PR; + ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_PROTECTION_20MHZ; /* * Step 3 - if any of the stations across the VAPs are * non-HT then this needs to be flipped back to MIXED. */ if (num_ht_sta != num_sta) - ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_MIXED; + ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_PROTECTION_NONHT_MIXED; /* * Step 4 - If we see any overlapping BSS non-HT stations