* POSSIBILITY OF SUCH DAMAGE.
*/
-#define NETDISSECT_REWORKED
+/* \summary: SunATM DLPI capture printer */
+
#ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
#endif
-#include <tcpdump-stdinc.h>
-
-struct mbuf;
-struct rtentry;
+#include "netdissect-stdinc.h"
-#include "interface.h"
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
#include "extract.h"
#include "atm.h"
* '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)
{
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;
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);
}