]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-sunatm.c
Makefile.in: don't remove configure and config.h.in in make distclean.
[tcpdump] / print-sunatm.c
index fad2859f3cf72a82342b4389d0f67226f62d68f0..0fe5eee8e411b5f281cf1fc6baef6ae5176a1b03 100644 (file)
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+/* \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"
 
@@ -60,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)
 {
@@ -70,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;
@@ -94,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);
 }