/* \summary: Attached Resource Computer NETwork (ARCNET) printer */
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
#include "netdissect-stdinc.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
arcnet_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
{
u_int caplen = h->caplen;
u_int seqid = 0;
u_char arc_type;
- ndo->ndo_protocol = "arcnet_if";
+ ndo->ndo_protocol = "arcnet";
if (caplen < ARC_HDRLEN) {
- nd_print_trunc(ndo);
- return (caplen);
+ ndo->ndo_ll_hdr_len += caplen;
+ nd_trunc_longjmp(ndo);
}
ap = (const struct arc_header *)p;
if (caplen < ARC_HDRNEWLEN) {
arcnet_print(ndo, p, length, 0, 0, 0);
ND_PRINT(" phds");
- nd_print_trunc(ndo);
- return (caplen);
+ ndo->ndo_ll_hdr_len += caplen;
+ nd_trunc_longjmp(ndo);
}
flag = GET_U_1(ap->arc_flag);
if (caplen < ARC_HDRNEWLEN_EXC) {
arcnet_print(ndo, p, length, 0, 0, 0);
ND_PRINT(" phds extended");
- nd_print_trunc(ndo);
- return (caplen);
+ ndo->ndo_ll_hdr_len += caplen;
+ nd_trunc_longjmp(ndo);
}
flag = GET_U_1(ap->arc_flag2);
seqid = GET_BE_U_2(ap->arc_seqid2);
/*
* This is a middle fragment.
*/
- return (archdrlen);
+ ndo->ndo_ll_hdr_len += archdrlen;
+ return;
}
if (!arcnet_encap_print(ndo, arc_type, p, length, caplen))
ND_DEFAULTPRINT(p, caplen);
- return (archdrlen);
+ ndo->ndo_ll_hdr_len += archdrlen;
}
/*
* reassembled packets rather than raw frames, and headers have an
* extra "offset" field between the src/dest and packet type.
*/
-u_int
+void
arcnet_linux_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
{
u_int caplen = h->caplen;
int archdrlen = 0;
u_char arc_type;
- ndo->ndo_protocol = "arcnet_linux_if";
+ ndo->ndo_protocol = "arcnet_linux";
if (caplen < ARC_LINUX_HDRLEN) {
- nd_print_trunc(ndo);
- return (caplen);
+ ndo->ndo_ll_hdr_len += caplen;
+ nd_trunc_longjmp(ndo);
}
ap = (const struct arc_linux_header *)p;
default:
archdrlen = ARC_LINUX_HDRNEWLEN;
if (caplen < ARC_LINUX_HDRNEWLEN) {
- nd_print_trunc(ndo);
- return (caplen);
+ ndo->ndo_ll_hdr_len += caplen;
+ nd_trunc_longjmp(ndo);
}
break;
case ARCTYPE_IP_OLD:
if (!arcnet_encap_print(ndo, arc_type, p, length, caplen))
ND_DEFAULTPRINT(p, caplen);
- return (archdrlen);
+ ndo->ndo_ll_hdr_len += archdrlen;
}
/*