/* \summary: OpenBSD IPsec encapsulation BPF layer printer */
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
#include "netdissect-stdinc.h"
+#define ND_LONGJMP_FROM_TCHECK
#include "netdissect.h"
#include "extract.h"
#include "af.h"
nd_uint32_t flags;
};
-#define ENC_PRINT_TYPE(wh, xf, nam) \
+#define ENC_PRINT_TYPE(wh, xf, name) \
if ((wh) & (xf)) { \
- ND_PRINT("%s%s", nam, (wh) == (xf) ? "): " : ","); \
+ ND_PRINT("%s%s", name, (wh) == (xf) ? "): " : ","); \
(wh) &= ~(xf); \
}
const struct pcap_pkthdr *h, const u_char *p)
{
u_int length = h->len;
- u_int caplen = h->caplen;
u_int af, flags;
const struct enchdr *hdr;
ndo->ndo_protocol = "enc";
- if (caplen < ENC_HDRLEN) {
- ndo->ndo_ll_header_length += caplen;
- nd_print_trunc(ndo);
- return;
- }
- ndo->ndo_ll_header_length += ENC_HDRLEN;
+ ND_TCHECK_LEN(p, ENC_HDRLEN);
+ ndo->ndo_ll_hdr_len += ENC_HDRLEN;
hdr = (const struct enchdr *)p;
/*
ND_PRINT("SPI 0x%08x: ", GET_BE_U_4(hdr->spi));
length -= ENC_HDRLEN;
- caplen -= ENC_HDRLEN;
p += ENC_HDRLEN;
switch (af) {
- case BSD_AFNUM_INET:
+ case BSD_AF_INET:
ip_print(ndo, p, length);
break;
- case BSD_AFNUM_INET6_BSD:
- case BSD_AFNUM_INET6_FREEBSD:
- case BSD_AFNUM_INET6_DARWIN:
+ case BSD_AF_INET6_BSD:
+ case BSD_AF_INET6_FREEBSD:
+ case BSD_AF_INET6_DARWIN:
ip6_print(ndo, p, length);
break;
}
-
- return;
}