#endif
#ifdef HAVE_NET_IF_H
+/*
+ * Include diag-control.h before <net/if.h>, which too defines a macro
+ * named ND_UNREACHABLE.
+ */
+#include "diag-control.h"
#include <net/if.h>
#endif
#include "netdissect-stdinc.h"
+#define ND_LONGJMP_FROM_TCHECK
#include "netdissect.h"
#include "addrtoname.h"
#include "ethertype.h"
* For now, we just assume 6 means Ethernet.
* XXX - print others as strings of hex?
*/
- if (GET_BE_U_2(sllp->sll_halen) == 6)
+ if (GET_BE_U_2(sllp->sll_halen) == MAC_ADDR_LEN)
ND_PRINT("%s ", GET_ETHERADDR_STRING(sllp->sll_addr));
if (!ndo->ndo_qflag) {
u_int hdrlen;
ndo->ndo_protocol = "sll";
- if (caplen < SLL_HDR_LEN) {
- /*
- * XXX - this "can't happen" because "pcap-linux.c" always
- * adds this many bytes of header to every packet in a
- * cooked socket capture.
- */
- nd_print_trunc(ndo);
- ndo->ndo_ll_hdr_len += caplen;
- return;
- }
+ ND_TCHECK_LEN(p, SLL_HDR_LEN);
sllp = (const struct sll_header *)p;
* For now, we just assume 6 means Ethernet.
* XXX - print others as strings of hex?
*/
- if (GET_U_1(sllp->sll2_halen) == 6)
+ if (GET_U_1(sllp->sll2_halen) == MAC_ADDR_LEN)
ND_PRINT("%s ", GET_ETHERADDR_STRING(sllp->sll2_addr));
if (!ndo->ndo_qflag) {
#endif
ndo->ndo_protocol = "sll2";
- if (caplen < SLL2_HDR_LEN) {
- /*
- * XXX - this "can't happen" because "pcap-linux.c" always
- * adds this many bytes of header to every packet in a
- * cooked socket capture.
- */
- nd_print_trunc(ndo);
- ndo->ndo_ll_hdr_len += caplen;
- return;
- }
+ ND_TCHECK_LEN(p, SLL2_HDR_LEN);
sllp = (const struct sll2_header *)p;
#ifdef HAVE_NET_IF_H