diff --git a/interface.h b/interface.h
index 688a2ac..ff78ab7 100644
--- a/interface.h
+++ b/interface.h
@@ -208,6 +208,8 @@ extern char *q922_string(const u_char *);
 extern u_int ieee802_11_if_print(const struct pcap_pkthdr *, const u_char *);
 extern u_int ieee802_11_radio_if_print(const struct pcap_pkthdr *,
 	const u_char *);
+extern u_int ieee802_11_ppi_if_print(const struct pcap_pkthdr *,
+	const u_char *);
 extern u_int ap1394_if_print(const struct pcap_pkthdr *, const u_char *);
 extern u_int ieee802_11_radio_avs_if_print(const struct pcap_pkthdr *,
 	const u_char *);
diff --git a/print-802_11.c b/print-802_11.c
index 28f1bbe..fa7f663 100644
--- a/print-802_11.c
+++ b/print-802_11.c
@@ -1037,6 +1037,33 @@ ieee802_11_if_print(const struct pcap_pkthdr *h, const u_char *p)
 	return ieee802_11_print(p, h->len, h->caplen, 0, 0);
 }
 
+/* Very naive PPI printer that just acknowledges the header exists and
+ * skips it, later should add radiotap style field printing */
+static u_int
+ieee802_11_ppi_radio_print(const u_char *p, u_int length, u_int caplen)
+{
+	u_int16_t caphdr_len;
+
+	if (caplen < 8) {
+		printf("[|802.11]");
+		return caplen;
+	}
+
+	caphdr_len = EXTRACT_LE_16BITS(p + 2);
+	if (caphdr_len < 8) {
+		printf("[|802.11]");
+		return caplen;
+	}
+
+	if (caplen < caphdr_len) {
+		printf("[|802.11]");
+		return caplen;
+	}
+
+	return caphdr_len + ieee802_11_print(p + caphdr_len,
+	    length - caphdr_len, caplen - caphdr_len, 0, 0);
+}
+
 static int
 print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
 {
@@ -1335,6 +1362,14 @@ ieee802_11_radio_if_print(const struct pcap_pkthdr *h, const u_char *p)
 }
 
 /*
+ * For DLT_PPI; like radiotap but w/ fixed formating on some fields */
+u_int
+ieee802_11_ppi_if_print(const struct pcap_pkthdr *h, const u_char *p)
+{
+	return ieee802_11_ppi_radio_print(p, h->len, h->caplen);
+}
+
+/*
  * For DLT_IEEE802_11_RADIO_AVS; like DLT_IEEE802_11, but with an
  * extra header, containing information such as radio information,
  * which we currently ignore.
diff --git a/tcpdump.c b/tcpdump.c
index c915ae4..0dca401 100644
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -213,6 +213,9 @@ static struct printer printers[] = {
 #ifdef DLT_IEEE802_11_RADIO
 	{ ieee802_11_radio_if_print,	DLT_IEEE802_11_RADIO },
 #endif
+#ifdef DLT_PPI
+	{ ieee802_11_ppi_if_print,		DLT_PPI },
+#endif
 #ifdef DLT_ENC
 	{ enc_if_print, 	DLT_ENC },
 #endif

