On Tue, Jan 12, 2016 at 07:11:55PM -0700, Chris Wojo wrote: > So it appears that iwm0 does work on snapshot #1800 on my home wireless AP. > The errors previously reported still occur on the office network where > several AP's are using the same NWID. > I would be more than happy to troubleshoot this so others won't run into the > same problem. > Thank you.
So it's clear we still have an issue here. This could be a problem with frame protection settings, which if wrongly configured would cause Tx failures and frames damaged while in flight. Protection settings for the network are advertised by the AP and we must apply them correctly or many things won't work. (cf. http://www.testequipmentdepot.com/flukenetworks/pdf/802.11n-compatibility.pdf) One issue I'm already aware of is that we currently don't update protection settings in case the AP decides to change them while we're associated. But your problem indicates that perhaps we're not configuring frame protection correctly in the first place. Can you please send one line showing a beacon for your AP at home, and a few lines showing beacons from the various APs at your office? You can print beacons as a line of text like this: tcpdump -n -i iwm0 -s 1500 -vvv -y IEEE802_11_RADIO subtype beacon Note that if you run this command while associated to an AP (i.e. while ifconfig iwm0 shows status: active) it will only show beacons for that AP. Could you also compile and run a kernel with the follwing diff applied, and show me what this prints while you're tyring to associate and DHCP to the APs? Thanks. Index: if_iwm.c =================================================================== RCS file: /cvs/src/sys/dev/pci/if_iwm.c,v retrieving revision 1.75 diff -u -p -r1.75 if_iwm.c --- if_iwm.c 7 Jan 2016 23:08:38 -0000 1.75 +++ if_iwm.c 13 Jan 2016 08:55:33 -0000 @@ -145,6 +145,7 @@ #define le16_to_cpup(_a_) (le16toh(*(const uint16_t *)(_a_))) #define le32_to_cpup(_a_) (le32toh(*(const uint32_t *)(_a_))) +#define IWM_DEBUG #ifdef IWM_DEBUG #define DPRINTF(x) do { if (iwm_debug > 0) printf x; } while (0) #define DPRINTFN(n, x) do { if (iwm_debug >= (n)) printf x; } while (0) @@ -4948,6 +4949,7 @@ iwm_mvm_mac_ctxt_cmd_common(struct iwm_s if (ni->ni_flags & IEEE80211_NODE_HT) { enum ieee80211_htprot htprot = (ni->ni_htop1 & IEEE80211_HTOP1_PROT_MASK); + DPRINTF(("%s: htprot = %d\n", __func__, htprot)); switch (htprot) { case IEEE80211_HTPROT_NONE: break;