aboutsummaryrefslogtreecommitdiff
path: root/print-sunatm.c
diff options
context:
space:
mode:
Diffstat (limited to 'print-sunatm.c')
-rw-r--r--print-sunatm.c26
1 files changed, 10 insertions, 16 deletions
diff --git a/print-sunatm.c b/print-sunatm.c
index a587e5093865..0fe5eee8e411 100644
--- a/print-sunatm.c
+++ b/print-sunatm.c
@@ -33,14 +33,12 @@
/* \summary: SunATM DLPI capture printer */
#ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
#endif
-#include <netdissect-stdinc.h>
-
-struct mbuf;
-struct rtentry;
+#include "netdissect-stdinc.h"
+#define ND_LONGJMP_FROM_TCHECK
#include "netdissect.h"
#include "extract.h"
@@ -62,7 +60,7 @@ struct rtentry;
* 'h->len' is the length of the packet off the wire, and 'h->caplen'
* is the number of bytes actually captured.
*/
-u_int
+void
sunatm_if_print(netdissect_options *ndo,
const struct pcap_pkthdr *h, const u_char *p)
{
@@ -72,16 +70,13 @@ sunatm_if_print(netdissect_options *ndo,
u_char vpi;
u_int traftype;
- if (caplen < PKT_BEGIN_POS) {
- ND_PRINT((ndo, "[|atm]"));
- return (caplen);
- }
+ ndo->ndo_protocol = "sunatm";
if (ndo->ndo_eflag) {
- ND_PRINT((ndo, p[DIR_POS] & 0x80 ? "Tx: " : "Rx: "));
+ ND_PRINT(GET_U_1(p + DIR_POS) & 0x80 ? "Tx: " : "Rx: ");
}
- switch (p[DIR_POS] & 0x0f) {
+ switch (GET_U_1(p + DIR_POS) & 0x0f) {
case PT_LANE:
traftype = ATM_LANE;
@@ -96,13 +91,12 @@ sunatm_if_print(netdissect_options *ndo,
break;
}
- vci = EXTRACT_16BITS(&p[VCI_POS]);
- vpi = p[VPI_POS];
+ vpi = GET_U_1(p + VPI_POS);
+ vci = GET_BE_U_2(p + VCI_POS);
p += PKT_BEGIN_POS;
caplen -= PKT_BEGIN_POS;
length -= PKT_BEGIN_POS;
+ ndo->ndo_ll_hdr_len += PKT_BEGIN_POS;
atm_print(ndo, vpi, vci, traftype, p, length, caplen);
-
- return (PKT_BEGIN_POS);
}