With 'ifconfig debug' and 11n block ack sessions we see messages such as:
iwm0: sending action to xx:xx:xx:xx:xx:xx
Which is not very informative.
It would be more useful to show the type of action frame being sent.
The patch below implements this for the types we currently care about.
ok?
diff b7449c5d2782f7ea2a807bff8551957655898b20 /usr/src
blob - 8de2361c95de86ae9d0644ecd9c24f3bf3e6a332
file + sys/net80211/ieee80211_output.c
--- sys/net80211/ieee80211_output.c
+++ sys/net80211/ieee80211_output.c
@@ -154,6 +154,18 @@ ieee80211_output(struct ifnet *ifp, struct mbuf *m, st
return (error);
}
+const char *
+ieee80211_action_name(struct ieee80211_frame *wh)
+{
+ const u_int8_t *frm = (const uint8_t *)&wh[1];
+ const char *categ_ba_name[3] = { "addba_req", "addba_resp", "delba" };
+
+ if (frm[0] == IEEE80211_CATEG_BA && frm[1] < nitems(categ_ba_name))
+ return categ_ba_name[frm[1]];
+
+ return "action";
+}
+
/*
* Send a management frame to the specified node. The node pointer
* must have a reference as the pointer will be passed to the driver
@@ -223,15 +235,21 @@ ieee80211_mgmt_output(struct ifnet *ifp, struct ieee80
ieee80211_debug > 1 ||
#endif
(type & IEEE80211_FC0_SUBTYPE_MASK) !=
- IEEE80211_FC0_SUBTYPE_PROBE_RESP)
+ IEEE80211_FC0_SUBTYPE_PROBE_RESP) {
+ const char *subtype_name;
+ if ((type & IEEE80211_FC0_SUBTYPE_MASK) ==
+ IEEE80211_FC0_SUBTYPE_ACTION)
+ subtype_name = ieee80211_action_name(wh);
+ else
+ subtype_name = ieee80211_mgt_subtype_name[
+ (type & IEEE80211_FC0_SUBTYPE_MASK) >>
+ IEEE80211_FC0_SUBTYPE_SHIFT];
printf("%s: sending %s to %s on channel %u mode %s\n",
- ifp->if_xname,
- ieee80211_mgt_subtype_name[
- (type & IEEE80211_FC0_SUBTYPE_MASK)
- >> IEEE80211_FC0_SUBTYPE_SHIFT],
+ ifp->if_xname, subtype_name,
ether_sprintf(ni->ni_macaddr),
ieee80211_chan2ieee(ic, ni->ni_chan),
ieee80211_phymode_name[ic->ic_curmode]);
+ }
}
#ifndef IEEE80211_STA_ONLY