https://github.com/freebsd/freebsd-src/blob/main/sys/net80211/ieee80211_node.c#L807 this code checks ic->ic_vhtcaps and proceeds only if it's non-zero, but I wasn't able to find any mandatory non-zero vht caps, which must be always present, IEEE80211_VHTCAP_MAX_MPDU_LENGTH_3895, which is the "default" is zero itself and doesn't influence the variable this means that if a driver doesn't set the variable to at least something non-zero (for example non-default ampdu) - it will never get connected with 11ac, although it can be capable of doing it code snippet: /* * VHT promotion - this will at least promote to VHT20/40 * based on what HT has done; it may further promote the * channel to VHT80 or above. */ if (ic->ic_vhtcaps != 0) { int flags = getvhtadjustflags(ic); if (flags > ieee80211_vhtchanflags(c)) c = ieee80211_vht_adjust_channel(ic, c, flags); }
There's more to fix for VHT. I have changes to bits in ieee80211_vht.c as well queued in a branch. I'll drop you and email out of band.