aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Otavio O Souza <loos@FreeBSD.org>2021-07-12 17:15:15 +0000
committerKristof Provost <kp@FreeBSD.org>2021-07-13 11:29:52 +0000
commit3f240bdf3652ea823af34b0f399e2c8be5a6320a (patch)
tree76883f4e8d1c590205b0ca5555ead49347dce7ca
parent3eaf271d3c0e4fa18b74971a71c950fd43fa4189 (diff)
downloadsrc-3f240bdf3652ea823af34b0f399e2c8be5a6320a.tar.gz
src-3f240bdf3652ea823af34b0f399e2c8be5a6320a.zip
tcpdump: decode packets on pfsync interfaces
Reviewed by: kp, scottl Obtained from: pfsense MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D31153
-rw-r--r--contrib/tcpdump/netdissect.h1
-rw-r--r--contrib/tcpdump/print-pfsync.c15
-rw-r--r--contrib/tcpdump/print.c3
3 files changed, 11 insertions, 8 deletions
diff --git a/contrib/tcpdump/netdissect.h b/contrib/tcpdump/netdissect.h
index 20b5ef63668c..8612e11c3c7e 100644
--- a/contrib/tcpdump/netdissect.h
+++ b/contrib/tcpdump/netdissect.h
@@ -571,6 +571,7 @@ extern int ospf_print_grace_lsa(netdissect_options *, const uint8_t *, u_int);
extern int ospf_print_te_lsa(netdissect_options *, const uint8_t *, u_int);
extern void otv_print(netdissect_options *, const u_char *, u_int);
extern void pfsync_ip_print(netdissect_options *, const u_char *, u_int);
+extern u_int pfsync_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
extern void pgm_print(netdissect_options *, const u_char *, u_int, const u_char *);
extern void pim_print(netdissect_options *, const u_char *, u_int, const u_char *);
extern void pimv1_print(netdissect_options *, const u_char *, u_int);
diff --git a/contrib/tcpdump/print-pfsync.c b/contrib/tcpdump/print-pfsync.c
index 62913337e527..dc1cd039f5b0 100644
--- a/contrib/tcpdump/print-pfsync.c
+++ b/contrib/tcpdump/print-pfsync.c
@@ -57,30 +57,29 @@ static void print_src_dst(netdissect_options *,
const struct pfsync_state_peer *, uint8_t);
static void print_state(netdissect_options *, struct pfsync_state *);
-#ifdef notyet
-void
-pfsync_if_print(u_char *user, const struct pcap_pkthdr *h,
+u_int
+pfsync_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
register const u_char *p)
{
u_int caplen = h->caplen;
- ts_print(&h->ts);
+ ts_print(ndo, &h->ts);
if (caplen < PFSYNC_HDRLEN) {
ND_PRINT((ndo, "[|pfsync]"));
goto out;
}
- pfsync_print((struct pfsync_header *)p,
+ pfsync_print(ndo, (struct pfsync_header *)p,
p + sizeof(struct pfsync_header),
caplen - sizeof(struct pfsync_header));
out:
- if (xflag) {
- default_print((const u_char *)p, caplen);
+ if (ndo->ndo_xflag) {
+ hex_print(ndo, "\n\t", p, caplen);
}
safeputchar(ndo, '\n');
+ return (caplen);
}
-#endif /* notyet */
void
pfsync_ip_print(netdissect_options *ndo , const u_char *bp, u_int len)
diff --git a/contrib/tcpdump/print.c b/contrib/tcpdump/print.c
index c76f34411778..e5436f4d738f 100644
--- a/contrib/tcpdump/print.c
+++ b/contrib/tcpdump/print.c
@@ -122,6 +122,9 @@ static const struct printer printers[] = {
#if defined(DLT_PFLOG) && defined(HAVE_NET_IF_PFLOG_H)
{ pflog_if_print, DLT_PFLOG },
#endif
+#if defined(DLT_PFSYNC) && defined(HAVE_NET_PFVAR_H)
+ { pfsync_if_print, DLT_PFSYNC},
+#endif
{ token_if_print, DLT_IEEE802 },
{ fddi_if_print, DLT_FDDI },
#ifdef DLT_LINUX_SLL