Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
make tcpdump show 802.11 QoS TID
To:
tech@openbsd.org
Date:
Thu, 4 Dec 2025 11:03:42 +0100

Download raw body.

Thread
Make tcpdump show the QoS TID with -v.
Avoids a roundtrip into wireshark for me when debugging QoS related stuff.

OK?

M  usr.sbin/tcpdump/print-802_11.c  |  6+  0-

1 file changed, 6 insertions(+), 0 deletions(-)

commit - 518016afd7445de7b41ff08566393e1fcdc5b157
commit + bd014d40ff0fb8fb204496f92d2b358ae3f540a3
blob - b6b7ade0f2e41151ce96a6c3763e28cc2c7fabba
blob + dddcba1cf65e8480b42ebfda0518eaf0213830ac
--- usr.sbin/tcpdump/print-802_11.c
+++ usr.sbin/tcpdump/print-802_11.c
@@ -187,6 +187,7 @@ ieee80211_data(struct ieee80211_frame *wh, u_int len)
 	    (IEEE80211_FC0_TYPE_MASK | IEEE80211_FC0_SUBTYPE_QOS)) ==
 	    (IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_QOS));
 	u_char *esrc = NULL, *edst = NULL;
+	uint16_t qos = 0;
 
 	if (hasqos) {
 		struct ieee80211_qosframe *wq;
@@ -195,6 +196,7 @@ ieee80211_data(struct ieee80211_frame *wh, u_int len)
 		TCHECK(*wq);
 		t += sizeof(*wq);
 		datalen = len - sizeof(*wq);
+		memcpy(&qos, wq->i_qos, sizeof(qos));
 	} else {
 		TCHECK(*wh);
 		t += sizeof(*wh);
@@ -224,6 +226,7 @@ ieee80211_data(struct ieee80211_frame *wh, u_int len)
 			datalen = len - sizeof(*w4);
 			esrc = w4->i_addr4;
 			edst = w4->i_addr3;
+			memcpy(&qos, w4->i_qos, sizeof(qos));
 		} else {
 			struct ieee80211_frame_addr4 *w4;
 
@@ -237,6 +240,9 @@ ieee80211_data(struct ieee80211_frame *wh, u_int len)
 		break;
 	}
 
+	if (hasqos & vflag)
+		printf("TID %u ", le16toh(qos) & IEEE80211_QOS_TID);
+
 	if (data && esrc)
 		llc_print(t, datalen, datalen, esrc, edst);
 	else if (eflag && esrc)