summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Ovsienko <infrastation@yandex.ru>2014-03-28 14:43:43 +0400
committerDenis Ovsienko <infrastation@yandex.ru>2014-03-28 16:02:56 +0400
commit5d85aa67ed0a3ade5096d58c75169b23e87ecb8a (patch)
treef97895ef25397dd0c0a21a4261c0583cd53f7e73
parent2210a967cb4e8cfca405543d5d98f3734690bd71 (diff)
downloadtcpdump-5d85aa67ed0a3ade5096d58c75169b23e87ecb8a.tar.gz
NDOize AppleTalk, CDP and Kerberos decoders
-rw-r--r--interface.h6
-rw-r--r--netdissect.h15
-rw-r--r--print-arcnet.c2
-rw-r--r--print-atalk.c273
-rw-r--r--print-cdp.c145
-rw-r--r--print-ether.c4
-rw-r--r--print-gre.c2
-rw-r--r--print-krb.c94
-rw-r--r--print-llc.c2
-rw-r--r--print-null.c2
-rw-r--r--print-udp.c4
-rw-r--r--tcpdump.c6
12 files changed, 275 insertions, 280 deletions
diff --git a/interface.h b/interface.h
index 5e339b9b..03f6d922 100644
--- a/interface.h
+++ b/interface.h
@@ -163,8 +163,6 @@ extern u_int16_t create_osi_cksum(const u_int8_t *, int, int);
#include <pcap.h>
extern void ascii_print(const u_char *, u_int);
-extern void aarp_print(const u_char *, u_int);
-extern void atalk_print(const u_char *, u_int);
extern void decnet_print(const u_char *, u_int, u_int);
extern void default_print(const u_char *, u_int);
extern char *q922_string(const u_char *);
@@ -173,9 +171,6 @@ extern u_int ieee802_11_radio_if_print(const struct pcap_pkthdr *,
const u_char *);
extern u_int ieee802_11_radio_avs_if_print(const struct pcap_pkthdr *,
const u_char *);
-extern void krb_print(const u_char *);
-extern u_int llap_print(const u_char *, u_int);
-extern u_int ltalk_if_print(const struct pcap_pkthdr *, const u_char *);
extern void nfsreply_print(const u_char *, u_int, const u_char *);
extern void nfsreply_print_noaddr(const u_char *, u_int, const u_char *);
extern void nfsreq_print(const u_char *, u_int, const u_char *);
@@ -217,7 +212,6 @@ extern char *smb_errstr(int, int);
extern const char *nt_errstr(u_int32_t);
extern void print_data(const unsigned char *, int);
extern void cfm_print(const u_char *, u_int);
-extern void cdp_print(const u_char *, u_int, u_int);
extern void lwres_print(const u_char *, u_int);
extern void mpls_lsp_ping_print(const u_char *, u_int);
extern void sip_print(const u_char *, u_int);
diff --git a/netdissect.h b/netdissect.h
index aba31c6e..5d9c5738 100644
--- a/netdissect.h
+++ b/netdissect.h
@@ -475,26 +475,25 @@ extern void olsr_print(netdissect_options *, const u_char *, u_int, int);
extern void forces_print(netdissect_options *, const u_char *, u_int);
extern void lspping_print(netdissect_options *, const u_char *, u_int);
extern void isoclns_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void krb_print(netdissect_options *, const u_char *);
+extern void cdp_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void atalk_print(netdissect_options *, const u_char *, u_int);
+extern u_int ltalk_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
+extern u_int llap_print(netdissect_options *, const u_char *, u_int);
+extern void aarp_print(netdissect_options *, const u_char *, u_int);
/* stuff that has not yet been rototiled */
#if 0
extern void ascii_print(netdissect_options *,u_int);
-extern void aarp_print(netdissect_options *,const u_char *, u_int);
-extern void atalk_print(netdissect_options *,const u_char *, u_int);
extern void bxxp_print(netdissect_options *,const u_char *, u_int);
extern void decnet_print(netdissect_options *,const u_char *,
u_int, u_int);
extern void default_print(netdissect_options *,const u_char *, u_int);
extern void ieee802_11_if_print(u_char *,const struct pcap_pkthdr *, const u_char *);
-extern void krb_print(netdissect_options *,const u_char *, u_int);
-extern void llap_print(netdissect_options *,const u_char *, u_int);
extern const char *linkaddr_string(netdissect_options *ndo,
const u_char *ep, const unsigned int len);
-extern void ltalk_if_print(netdissect_options *ndo,
- u_char *user, const struct pcap_pkthdr *h,
- const u_char *p);
extern void nfsreply_print(netdissect_options *,const u_char *,
u_int, const u_char *);
extern void nfsreq_print(netdissect_options *,const u_char *,
@@ -529,8 +528,6 @@ extern char *smb_errstr(netdissect_options *,int, int);
extern const char *nt_errstr(netdissect_options *, u_int32_t);
extern void print_data(netdissect_options *,const unsigned char *, int);
extern void lcp_print(netdissect_options *,const u_char *, u_int);
-extern void cdp_print(netdissect_options *,const u_char *,
- u_int, u_int, const u_char *, const u_char *);
extern void lwres_print(netdissect_options *,const u_char *, u_int);
#endif
diff --git a/print-arcnet.c b/print-arcnet.c
index 640d31be..d2a6d87d 100644
--- a/print-arcnet.c
+++ b/print-arcnet.c
@@ -341,7 +341,7 @@ arcnet_encap_print(netdissect_options *ndo, u_char arctype, const u_char *p,
case ARCTYPE_ATALK: /* XXX was this ever used? */
if (ndo->ndo_vflag)
ND_PRINT((ndo, "et1 "));
- atalk_print(p, length);
+ atalk_print(ndo, p, length);
return (1);
case ARCTYPE_IPX:
diff --git a/print-atalk.c b/print-atalk.c
index 0f46fa3e..00f9dac4 100644
--- a/print-atalk.c
+++ b/print-atalk.c
@@ -21,6 +21,7 @@
* Format and print AppleTalk packets.
*/
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -28,7 +29,6 @@
#include <tcpdump-stdinc.h>
#include <stdio.h>
-#include <stdlib.h>
#include <string.h>
#include "interface.h"
@@ -59,33 +59,34 @@ struct aarp {
u_int8_t pdaddr[4];
};
-static void atp_print(const struct atATP *, u_int);
-static void atp_bitmap_print(u_char);
-static void nbp_print(const struct atNBP *, u_int, u_short, u_char, u_char);
-static const char *print_cstring(const char *, const u_char *);
-static const struct atNBPtuple *nbp_tuple_print(const struct atNBPtuple *,
+static void atp_print(netdissect_options *, const struct atATP *, u_int);
+static void atp_bitmap_print(netdissect_options *, u_char);
+static void nbp_print(netdissect_options *, const struct atNBP *, u_int, u_short, u_char, u_char);
+static const struct atNBPtuple *nbp_tuple_print(netdissect_options *ndo, const struct atNBPtuple *,
const u_char *,
u_short, u_char, u_char);
-static const struct atNBPtuple *nbp_name_print(const struct atNBPtuple *,
+static const struct atNBPtuple *nbp_name_print(netdissect_options *, const struct atNBPtuple *,
const u_char *);
-static const char *ataddr_string(u_short, u_char);
-static void ddp_print(const u_char *, u_int, int, u_short, u_char, u_char);
-static const char *ddpskt_string(int);
+static const char *ataddr_string(netdissect_options *, u_short, u_char);
+static void ddp_print(netdissect_options *, const u_char *, u_int, int, u_short, u_char, u_char);
+static const char *ddpskt_string(netdissect_options *, int);
/*
* Print LLAP packets received on a physical LocalTalk interface.
*/
u_int
-ltalk_if_print(const struct pcap_pkthdr *h, const u_char *p)
+ltalk_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
{
- return (llap_print(p, h->caplen));
+ return (llap_print(ndo, p, h->caplen));
}
/*
* Print AppleTalk LLAP packets.
*/
u_int
-llap_print(register const u_char *bp, u_int length)
+llap_print(netdissect_options *ndo,
+ register const u_char *bp, u_int length)
{
register const struct LAP *lp;
register const struct atDDP *dp;
@@ -94,7 +95,7 @@ llap_print(register const u_char *bp, u_int length)
u_int hdrlen;
if (length < sizeof(*lp)) {
- (void)printf(" [|llap %u]", length);
+ ND_PRINT((ndo, " [|llap %u]", length));
return (length);
}
lp = (const struct LAP *)bp;
@@ -105,36 +106,36 @@ llap_print(register const u_char *bp, u_int length)
case lapShortDDP:
if (length < ddpSSize) {
- (void)printf(" [|sddp %u]", length);
+ ND_PRINT((ndo, " [|sddp %u]", length));
return (length);
}
sdp = (const struct atShortDDP *)bp;
- printf("%s.%s",
- ataddr_string(0, lp->src), ddpskt_string(sdp->srcSkt));
- printf(" > %s.%s:",
- ataddr_string(0, lp->dst), ddpskt_string(sdp->dstSkt));
+ ND_PRINT((ndo, "%s.%s",
+ ataddr_string(ndo, 0, lp->src), ddpskt_string(ndo, sdp->srcSkt)));
+ ND_PRINT((ndo, " > %s.%s:",
+ ataddr_string(ndo, 0, lp->dst), ddpskt_string(ndo, sdp->dstSkt)));
bp += ddpSSize;
length -= ddpSSize;
hdrlen += ddpSSize;
- ddp_print(bp, length, sdp->type, 0, lp->src, sdp->srcSkt);
+ ddp_print(ndo, bp, length, sdp->type, 0, lp->src, sdp->srcSkt);
break;
case lapDDP:
if (length < ddpSize) {
- (void)printf(" [|ddp %u]", length);
+ ND_PRINT((ndo, " [|ddp %u]", length));
return (length);
}
dp = (const struct atDDP *)bp;
snet = EXTRACT_16BITS(&dp->srcNet);
- printf("%s.%s", ataddr_string(snet, dp->srcNode),
- ddpskt_string(dp->srcSkt));
- printf(" > %s.%s:",
- ataddr_string(EXTRACT_16BITS(&dp->dstNet), dp->dstNode),
- ddpskt_string(dp->dstSkt));
+ ND_PRINT((ndo, "%s.%s", ataddr_string(ndo, snet, dp->srcNode),
+ ddpskt_string(ndo, dp->srcSkt)));
+ ND_PRINT((ndo, " > %s.%s:",
+ ataddr_string(ndo, EXTRACT_16BITS(&dp->dstNet), dp->dstNode),
+ ddpskt_string(ndo, dp->dstSkt)));
bp += ddpSize;
length -= ddpSize;
hdrlen += ddpSize;
- ddp_print(bp, length, dp->type, snet, dp->srcNode, dp->srcSkt);
+ ddp_print(ndo, bp, length, dp->type, snet, dp->srcNode, dp->srcSkt);
break;
#ifdef notdef
@@ -144,8 +145,8 @@ llap_print(register const u_char *bp, u_int length)
#endif
default:
- printf("%d > %d at-lap#%d %u",
- lp->src, lp->dst, lp->type, length);
+ ND_PRINT((ndo, "%d > %d at-lap#%d %u",
+ lp->src, lp->dst, lp->type, length));
break;
}
return (hdrlen);
@@ -157,39 +158,41 @@ llap_print(register const u_char *bp, u_int length)
* packets in them).
*/
void
-atalk_print(register const u_char *bp, u_int length)
+atalk_print(netdissect_options *ndo,
+ register const u_char *bp, u_int length)
{
register const struct atDDP *dp;
u_short snet;
- if(!eflag)
- printf("AT ");
+ if(!ndo->ndo_eflag)
+ ND_PRINT((ndo, "AT "));
if (length < ddpSize) {
- (void)printf(" [|ddp %u]", length);
+ ND_PRINT((ndo, " [|ddp %u]", length));
return;
}
dp = (const struct atDDP *)bp;
snet = EXTRACT_16BITS(&dp->srcNet);
- printf("%s.%s", ataddr_string(snet, dp->srcNode),
- ddpskt_string(dp->srcSkt));
- printf(" > %s.%s: ",
- ataddr_string(EXTRACT_16BITS(&dp->dstNet), dp->dstNode),
- ddpskt_string(dp->dstSkt));
+ ND_PRINT((ndo, "%s.%s", ataddr_string(ndo, snet, dp->srcNode),
+ ddpskt_string(ndo, dp->srcSkt)));
+ ND_PRINT((ndo, " > %s.%s: ",
+ ataddr_string(ndo, EXTRACT_16BITS(&dp->dstNet), dp->dstNode),
+ ddpskt_string(ndo, dp->dstSkt)));
bp += ddpSize;
length -= ddpSize;
- ddp_print(bp, length, dp->type, snet, dp->srcNode, dp->srcSkt);
+ ddp_print(ndo, bp, length, dp->type, snet, dp->srcNode, dp->srcSkt);
}
/* XXX should probably pass in the snap header and do checks like arp_print() */
void
-aarp_print(register const u_char *bp, u_int length)
+aarp_print(netdissect_options *ndo,
+ register const u_char *bp, u_int length)
{
register const struct aarp *ap;
-#define AT(member) ataddr_string((ap->member[1]<<8)|ap->member[2],ap->member[3])
+#define AT(member) ataddr_string(ndo, (ap->member[1]<<8)|ap->member[2],ap->member[3])
- printf("aarp ");
+ ND_PRINT((ndo, "aarp "));
ap = (const struct aarp *)bp;
if (EXTRACT_16BITS(&ap->htype) == 1 &&
EXTRACT_16BITS(&ap->ptype) == ETHERTYPE_ATALK &&
@@ -197,151 +200,151 @@ aarp_print(register const u_char *bp, u_int length)
switch (EXTRACT_16BITS(&ap->op)) {
case 1: /* request */
- (void)printf("who-has %s tell %s",
- AT(pdaddr), AT(psaddr));
+ ND_PRINT((ndo, "who-has %s tell %s", AT(pdaddr), AT(psaddr)));
return;
case 2: /* response */
- (void)printf("reply %s is-at %s",
- AT(psaddr), etheraddr_string(ap->hsaddr));
+ ND_PRINT((ndo, "reply %s is-at %s", AT(psaddr), etheraddr_string(ap->hsaddr)));
return;
case 3: /* probe (oy!) */
- (void)printf("probe %s tell %s",
- AT(pdaddr), AT(psaddr));
+ ND_PRINT((ndo, "probe %s tell %s", AT(pdaddr), AT(psaddr)));
return;
}
- (void)printf("len %u op %u htype %u ptype %#x halen %u palen %u",
+ ND_PRINT((ndo, "len %u op %u htype %u ptype %#x halen %u palen %u",
length, EXTRACT_16BITS(&ap->op), EXTRACT_16BITS(&ap->htype),
- EXTRACT_16BITS(&ap->ptype), ap->halen, ap->palen);
+ EXTRACT_16BITS(&ap->ptype), ap->halen, ap->palen));
}
/*
* Print AppleTalk Datagram Delivery Protocol packets.
*/
static void
-ddp_print(register const u_char *bp, register u_int length, register int t,
- register u_short snet, register u_char snode, u_char skt)
+ddp_print(netdissect_options *ndo,
+ register const u_char *bp, register u_int length, register int t,
+ register u_short snet, register u_char snode, u_char skt)
{
switch (t) {
case ddpNBP:
- nbp_print((const struct atNBP *)bp, length, snet, snode, skt);
+ nbp_print(ndo, (const struct atNBP *)bp, length, snet, snode, skt);
break;
case ddpATP:
- atp_print((const struct atATP *)bp, length);
+ atp_print(ndo, (const struct atATP *)bp, length);
break;
case ddpEIGRP:
- eigrp_print(gndo, bp, length);
+ eigrp_print(ndo, bp, length);
break;
default:
- (void)printf(" at-%s %d", tok2str(type2str, NULL, t), length);
+ ND_PRINT((ndo, " at-%s %d", tok2str(type2str, NULL, t), length));
break;
}
}
static void
-atp_print(register const struct atATP *ap, u_int length)
+atp_print(netdissect_options *ndo,
+ register const struct atATP *ap, u_int length)
{
char c;
u_int32_t data;
- if ((const u_char *)(ap + 1) > snapend) {
+ if ((const u_char *)(ap + 1) > ndo->ndo_snapend) {
/* Just bail if we don't have the whole chunk. */
- fputs(tstr, stdout);
+ ND_PRINT((ndo, tstr));
return;
}
if (length < sizeof(*ap)) {
- (void)printf(" [|atp %u]", length);
+ ND_PRINT((ndo, " [|atp %u]", length));
return;
}
length -= sizeof(*ap);
switch (ap->control & 0xc0) {
case atpReqCode:
- (void)printf(" atp-req%s %d",
+ ND_PRINT((ndo, " atp-req%s %d",
ap->control & atpXO? " " : "*",
- EXTRACT_16BITS(&ap->transID));
+ EXTRACT_16BITS(&ap->transID)));
- atp_bitmap_print(ap->bitmap);
+ atp_bitmap_print(ndo, ap->bitmap);
if (length != 0)
- (void)printf(" [len=%u]", length);
+ ND_PRINT((ndo, " [len=%u]", length));
switch (ap->control & (atpEOM|atpSTS)) {
case atpEOM:
- (void)printf(" [EOM]");
+ ND_PRINT((ndo, " [EOM]"));
break;
case atpSTS:
- (void)printf(" [STS]");
+ ND_PRINT((ndo, " [STS]"));
break;
case atpEOM|atpSTS:
- (void)printf(" [EOM,STS]");
+ ND_PRINT((ndo, " [EOM,STS]"));
break;
}
break;
case atpRspCode:
- (void)printf(" atp-resp%s%d:%d (%u)",
+ ND_PRINT((ndo, " atp-resp%s%d:%d (%u)",
ap->control & atpEOM? "*" : " ",
- EXTRACT_16BITS(&ap->transID), ap->bitmap, length);
+ EXTRACT_16BITS(&ap->transID), ap->bitmap, length));
switch (ap->control & (atpXO|atpSTS)) {
case atpXO:
- (void)printf(" [XO]");
+ ND_PRINT((ndo, " [XO]"));
break;
case atpSTS:
- (void)printf(" [STS]");
+ ND_PRINT((ndo, " [STS]"));
break;
case atpXO|atpSTS:
- (void)printf(" [XO,STS]");
+ ND_PRINT((ndo, " [XO,STS]"));
break;
}
break;
case atpRelCode:
- (void)printf(" atp-rel %d", EXTRACT_16BITS(&ap->transID));
+ ND_PRINT((ndo, " atp-rel %d", EXTRACT_16BITS(&ap->transID)));
- atp_bitmap_print(ap->bitmap);
+ atp_bitmap_print(ndo, ap->bitmap);
/* length should be zero */
if (length)
- (void)printf(" [len=%u]", length);
+ ND_PRINT((ndo, " [len=%u]", length));
/* there shouldn't be any control flags */
if (ap->control & (atpXO|atpEOM|atpSTS)) {
c = '[';
if (ap->control & atpXO) {
- (void)printf("%cXO", c);
+ ND_PRINT((ndo, "%cXO", c));
c = ',';
}
if (ap->control & atpEOM) {
- (void)printf("%cEOM", c);
+ ND_PRINT((ndo, "%cEOM", c));
c = ',';
}
if (ap->control & atpSTS) {
- (void)printf("%cSTS", c);
+ ND_PRINT((ndo, "%cSTS", c));
c = ',';
}
- (void)printf("]");
+ ND_PRINT((ndo, "]"));
}
break;
default:
- (void)printf(" atp-0x%x %d (%u)", ap->control,
- EXTRACT_16BITS(&ap->transID), length);
+ ND_PRINT((ndo, " atp-0x%x %d (%u)", ap->control,
+ EXTRACT_16BITS(&ap->transID), length));
break;
}
data = EXTRACT_32BITS(&ap->userData);
if (data != 0)
- (void)printf(" 0x%x", data);
+ ND_PRINT((ndo, " 0x%x", data));
}
static void
-atp_bitmap_print(register u_char bm)
+atp_bitmap_print(netdissect_options *ndo,
+ register u_char bm)
{
register char c;
register int i;
@@ -355,25 +358,26 @@ atp_bitmap_print(register u_char bm)
c = '<';
for (i = 0; bm; ++i) {
if (bm & 1) {
- (void)printf("%c%d", c, i);
+ ND_PRINT((ndo, "%c%d", c, i));
c = ',';
}
bm >>= 1;
}
- (void)printf(">");
+ ND_PRINT((ndo, ">"));
} else {
for (i = 0; bm; ++i)
bm >>= 1;
if (i > 1)
- (void)printf("<0-%d>", i - 1);
+ ND_PRINT((ndo, "<0-%d>", i - 1));
else
- (void)printf("<0>");
+ ND_PRINT((ndo, "<0>"));
}
}
static void
-nbp_print(register const struct atNBP *np, u_int length, register u_short snet,
- register u_char snode, register u_char skt)
+nbp_print(netdissect_options *ndo,
+ register const struct atNBP *np, u_int length, register u_short snet,
+ register u_char snode, register u_char skt)
{
register const struct atNBPtuple *tp =
(const struct atNBPtuple *)((u_char *)np + nbpHeaderSize);
@@ -381,138 +385,137 @@ nbp_print(register const struct atNBP *np, u_int length, register u_short snet,
const u_char *ep;
if (length < nbpHeaderSize) {
- (void)printf(" truncated-nbp %u", length);
+ ND_PRINT((ndo, " truncated-nbp %u", length));
return;
}
length -= nbpHeaderSize;
if (length < 8) {
/* must be room for at least one tuple */
- (void)printf(" truncated-nbp %u", length + nbpHeaderSize);
+ ND_PRINT((ndo, " truncated-nbp %u", length + nbpHeaderSize));
return;
}
/* ep points to end of available data */
- ep = snapend;
+ ep = ndo->ndo_snapend;
if ((const u_char *)tp > ep) {
- fputs(tstr, stdout);
+ ND_PRINT((ndo, tstr));
return;
}
switch (i = np->control & 0xf0) {
case nbpBrRq:
case nbpLkUp:
- (void)printf(i == nbpLkUp? " nbp-lkup %d:":" nbp-brRq %d:",
- np->id);
+ ND_PRINT((ndo, i == nbpLkUp? " nbp-lkup %d:":" nbp-brRq %d:", np->id));
if ((const u_char *)(tp + 1) > ep) {
- fputs(tstr, stdout);
+ ND_PRINT((ndo, tstr));
return;
}
- (void)nbp_name_print(tp, ep);
+ (void)nbp_name_print(ndo, tp, ep);
/*
* look for anomalies: the spec says there can only
* be one tuple, the address must match the source
* address and the enumerator should be zero.
*/
if ((np->control & 0xf) != 1)
- (void)printf(" [ntup=%d]", np->control & 0xf);
+ ND_PRINT((ndo, " [ntup=%d]", np->control & 0xf));
if (tp->enumerator)
- (void)printf(" [enum=%d]", tp->enumerator);
+ ND_PRINT((ndo, " [enum=%d]", tp->enumerator));
if (EXTRACT_16BITS(&tp->net) != snet ||
tp->node != snode || tp->skt != skt)
- (void)printf(" [addr=%s.%d]",
- ataddr_string(EXTRACT_16BITS(&tp->net),
- tp->node), tp->skt);
+ ND_PRINT((ndo, " [addr=%s.%d]",
+ ataddr_string(ndo, EXTRACT_16BITS(&tp->net),
+ tp->node), tp->skt));
break;
case nbpLkUpReply:
- (void)printf(" nbp-reply %d:", np->id);
+ ND_PRINT((ndo, " nbp-reply %d:", np->id));
/* print each of the tuples in the reply */
for (i = np->control & 0xf; --i >= 0 && tp; )
- tp = nbp_tuple_print(tp, ep, snet, snode, skt);
+ tp = nbp_tuple_print(ndo, tp, ep, snet, snode, skt);
break;
default:
- (void)printf(" nbp-0x%x %d (%u)", np->control, np->id,
- length);
+ ND_PRINT((ndo, " nbp-0x%x %d (%u)", np->control, np->id, length));
break;
}
}
/* print a counted string */
static const char *
-print_cstring(register const char *cp, register const u_char *ep)
+print_cstring(netdissect_options *ndo,
+ register const char *cp, register const u_char *ep)
{
register u_int length;
if (cp >= (const char *)ep) {
- fputs(tstr, stdout);
+ ND_PRINT((ndo, tstr));
return (0);
}
length = *cp++;
/* Spec says string can be at most 32 bytes long */
if (length > 32) {
- (void)printf("[len=%u]", length);
+ ND_PRINT((ndo, "[len=%u]", length));
return (0);
}
while ((int)--length >= 0) {
if (cp >= (const char *)ep) {
- fputs(tstr, stdout);
+ ND_PRINT((ndo, tstr));
return (0);
}
- putchar(*cp++);
+ ND_PRINT((ndo, "%c", *cp++));
}
return (cp);
}
static const struct atNBPtuple *
-nbp_tuple_print(register const struct atNBPtuple *tp,
- register const u_char *ep,
- register u_short snet, register u_char snode,
- register u_char skt)
+nbp_tuple_print(netdissect_options *ndo,
+ register const struct atNBPtuple *tp, register const u_char *ep,
+ register u_short snet, register u_char snode, register u_char skt)
{
register const struct atNBPtuple *tpn;
if ((const u_char *)(tp + 1) > ep) {
- fputs(tstr, stdout);
+ ND_PRINT((ndo, tstr));
return 0;
}
- tpn = nbp_name_print(tp, ep);
+ tpn = nbp_name_print(ndo, tp, ep);
/* if the enumerator isn't 1, print it */
if (tp->enumerator != 1)
- (void)printf("(%d)", tp->enumerator);
+ ND_PRINT((ndo, "(%d)", tp->enumerator));
/* if the socket doesn't match the src socket, print it */
if (tp->skt != skt)
- (void)printf(" %d", tp->skt);
+ ND_PRINT((ndo, " %d", tp->skt));
/* if the address doesn't match the src address, it's an anomaly */
if (EXTRACT_16BITS(&tp->net) != snet || tp->node != snode)
- (void)printf(" [addr=%s]",
- ataddr_string(EXTRACT_16BITS(&tp->net), tp->node));
+ ND_PRINT((ndo, " [addr=%s]",
+ ataddr_string(ndo, EXTRACT_16BITS(&tp->net), tp->node)));
return (tpn);
}
static const struct atNBPtuple *
-nbp_name_print(const struct atNBPtuple *tp, register const u_char *ep)
+nbp_name_print(netdissect_options *ndo,
+ const struct atNBPtuple *tp, register const u_char *ep)
{
register const char *cp = (const char *)tp + nbpTupleSize;
- putchar(' ');
+ ND_PRINT((ndo, " "));
/* Object */
- putchar('"');
- if ((cp = print_cstring(cp, ep)) != NULL) {
+ ND_PRINT((ndo, "\""));
+ if ((cp = print_cstring(ndo, cp, ep)) != NULL) {
/* Type */
- putchar(':');
- if ((cp = print_cstring(cp, ep)) != NULL) {
+ ND_PRINT((ndo, ":"));
+ if ((cp = print_cstring(ndo, cp, ep)) != NULL) {
/* Zone */
- putchar('@');
- if ((cp = print_cstring(cp, ep)) != NULL)
- putchar('"');
+ ND_PRINT((ndo, "@"));
+ if ((cp = print_cstring(ndo, cp, ep)) != NULL)
+ ND_PRINT((ndo, "\""));
}
}
return ((const struct atNBPtuple *)cp);
@@ -530,7 +533,8 @@ struct hnamemem {
static struct hnamemem hnametable[HASHNAMESIZE];
static const char *
-ataddr_string(u_short atnet, u_char athost)
+ataddr_string(netdissect_options *ndo,
+ u_short atnet, u_char athost)
{
register struct hnamemem *tp, *tp2;
register int i = (atnet << 8) | athost;
@@ -542,7 +546,7 @@ ataddr_string(u_short atnet, u_char athost)
* if this is the first call, see if there's an AppleTalk
* number to name map file.
*/
- if (first && (first = 0, !nflag)
+ if (first && (first = 0, !ndo->ndo_nflag)
&& (fp = fopen("/etc/atalk.names", "r"))) {
char line[256];
int i1, i2;
@@ -605,11 +609,12 @@ static const struct tok skt2str[] = {
};
static const char *
-ddpskt_string(register int skt)
+ddpskt_string(netdissect_options *ndo,
+ register int skt)
{
static char buf[8];
- if (nflag) {
+ if (ndo->ndo_nflag) {
(void)snprintf(buf, sizeof(buf), "%d", skt);
return (buf);
}
diff --git a/print-cdp.c b/print-cdp.c
index 5383fd50..880b81cd 100644
--- a/print-cdp.c
+++ b/print-cdp.c
@@ -24,13 +24,13 @@
* http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm
*/
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <tcpdump-stdinc.h>
-#include <stdio.h>
#include <string.h>
#include "interface.h"
@@ -78,144 +78,143 @@ static const struct tok cdp_capability_values[] = {
{ 0, NULL }
};
-static int cdp_print_addr(const u_char *, int);
-static int cdp_print_prefixes(const u_char *, int);
+static int cdp_print_addr(netdissect_options *, const u_char *, int);
+static int cdp_print_prefixes(netdissect_options *, const u_char *, int);
static unsigned long cdp_get_number(const u_char *, int);
void
-cdp_print(const u_char *pptr, u_int length, u_int caplen)
+cdp_print(netdissect_options *ndo,
+ const u_char *pptr, u_int length, u_int caplen)
{
int type, len, i, j;
const u_char *tptr;
if (caplen < CDP_HEADER_LEN) {
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
return;
}
tptr = pptr; /* temporary pointer */
- if (!TTEST2(*tptr, CDP_HEADER_LEN))
- goto trunc;
- printf("CDPv%u, ttl: %us", *tptr, *(tptr+1));
- if (vflag)
- printf(", checksum: %u (unverified), length %u", EXTRACT_16BITS(tptr), length);
+ if (!ND_TTEST2(*tptr, CDP_HEADER_LEN))
+ goto trunc;
+ ND_PRINT((ndo, "CDPv%u, ttl: %us", *tptr, *(tptr + 1)));
+ if (ndo->ndo_vflag)
+ ND_PRINT((ndo, ", checksum: %u (unverified), length %u", EXTRACT_16BITS(tptr), length));
tptr += CDP_HEADER_LEN;
while (tptr < (pptr+length)) {
- if (!TTEST2(*tptr, 4)) /* read out Type and Length */
+ if (!ND_TTEST2(*tptr, 4)) /* read out Type and Length */
goto trunc;
type = EXTRACT_16BITS(tptr);
len = EXTRACT_16BITS(tptr+2); /* object length includes the 4 bytes header length */
tptr += 4;
len -= 4;
- if (!TTEST2(*tptr, len))
+ if (!ND_TTEST2(*tptr, len))
goto trunc;
- if (vflag || type == 1) { /* in non-verbose mode just print Device-ID */
+ if (ndo->ndo_vflag || type == 1) { /* in non-verbose mode just print Device-ID */
- if (vflag)
- printf("\n\t%s (0x%02x), length: %u byte%s: ",
+ if (ndo->ndo_vflag)
+ ND_PRINT((ndo, "\n\t%s (0x%02x), length: %u byte%s: ",
tok2str(cdp_tlv_values,"unknown field type", type),
type,
len,
- PLURAL_SUFFIX(len)); /* plural */
+ PLURAL_SUFFIX(len))); /* plural */
switch (type) {
case 0x01: /* Device-ID */
- if (!vflag)
- printf(", Device-ID ");
- printf("'");
+ if (!ndo->ndo_vflag)
+ ND_PRINT((ndo, ", Device-ID "));
+ ND_PRINT((ndo, "'"));
fn_printn(tptr, len, NULL);
- printf("'");
+ ND_PRINT((ndo, "'"));
break;
case 0x02: /* Address */
- if (cdp_print_addr(tptr, len) < 0)
+ if (cdp_print_addr(ndo, tptr, len) < 0)
goto trunc;
break;
case 0x03: /* Port-ID */
- printf("'");
+ ND_PRINT((ndo, "'"));
fn_printn(tptr, len, NULL);
- printf("'");
+ ND_PRINT((ndo, "'"));
break;
case 0x04: /* Capabilities */
- printf("(0x%08x): %s",
+ ND_PRINT((ndo, "(0x%08x): %s",
EXTRACT_32BITS(tptr),
- bittok2str(cdp_capability_values, "none",EXTRACT_32BITS(tptr)));
+ bittok2str(cdp_capability_values, "none", EXTRACT_32BITS(tptr))));
break;
case 0x05: /* Version */
- printf("\n\t ");
+ ND_PRINT((ndo, "\n\t "));
for (i=0;i<len;i++) {
j = *(tptr+i);
- putchar(j);
+ ND_PRINT((ndo, "%c", j));
if (j == 0x0a) /* lets rework the version string to get a nice identation */
- printf("\t ");
+ ND_PRINT((ndo, "\t "));
}
break;
case 0x06: /* Platform */
- printf("'");
+ ND_PRINT((ndo, "'"));
fn_printn(tptr, len, NULL);
- printf("'");
+ ND_PRINT((ndo, "'"));
break;
case 0x07: /* Prefixes */
- if (cdp_print_prefixes(tptr, len) < 0)
+ if (cdp_print_prefixes(ndo, tptr, len) < 0)
goto trunc;
break;
case 0x08: /* Protocol Hello Option - not documented */
break;
case 0x09: /* VTP Mgmt Domain - not documented */
- printf("'");
+ ND_PRINT((ndo, "'"));
fn_printn(tptr, len, NULL);
- printf("'");
+ ND_PRINT((ndo, "'"));
break;
case 0x0a: /* Native VLAN ID - not documented */
- printf("%d",EXTRACT_16BITS(tptr));
+ ND_PRINT((ndo, "%d", EXTRACT_16BITS(tptr)));
break;
case 0x0b: /* Duplex - not documented */
- printf("%s", *(tptr) ? "full": "half");
+ ND_PRINT((ndo, "%s", *(tptr) ? "full": "half"));
break;
/* http://www.cisco.com/univercd/cc/td/doc/product/voice/ata/atarn/186rn21m.htm
* plus more details from other sources
*/
case 0x0e: /* ATA-186 VoIP VLAN request - incomplete doc. */
- printf("app %d, vlan %d",
- *(tptr), EXTRACT_16BITS(tptr+1));
+ ND_PRINT((ndo, "app %d, vlan %d", *(tptr), EXTRACT_16BITS(tptr + 1)));
break;
case 0x10: /* ATA-186 VoIP VLAN assignment - incomplete doc. */
- printf("%1.2fW",
- cdp_get_number(tptr, len)/1000.0 );
+ ND_PRINT((ndo, "%1.2fW", cdp_get_number(tptr, len) / 1000.0));
break;
case 0x11: /* MTU - not documented */
- printf("%u bytes", EXTRACT_32BITS(tptr));
+ ND_PRINT((ndo, "%u bytes", EXTRACT_32BITS(tptr)));
break;
case 0x12: /* AVVID trust bitmap - not documented */
- printf("0x%02x", *(tptr) );
+ ND_PRINT((ndo, "0x%02x", *(tptr)));
break;
case 0x13: /* AVVID untrusted port CoS - not documented */
- printf("0x%02x", *(tptr));
+ ND_PRINT((ndo, "0x%02x", *(tptr)));
break;
case 0x14: /* System Name - not documented */
- printf("'");
+ ND_PRINT((ndo, "'"));
fn_printn(tptr, len, NULL);
- printf("'");
+ ND_PRINT((ndo, "'"));
break;
case 0x16: /* System Object ID - not documented */
- if (cdp_print_addr(tptr, len) < 0)
+ if (cdp_print_addr(ndo, tptr, len) < 0)
goto trunc;
break;
case 0x17: /* Physical Location - not documented */
- printf("0x%02x", *(tptr));
+ ND_PRINT((ndo, "0x%02x", *(tptr)));
if (len > 1) {
- printf("/");
+ ND_PRINT((ndo, "/"));
fn_printn(tptr + 1, len - 1, NULL);
}
break;
default:
- print_unknown_data(gndo,tptr,"\n\t ",len);
+ print_unknown_data(ndo, tptr, "\n\t ", len);
break;
}
}
@@ -224,12 +223,12 @@ cdp_print(const u_char *pptr, u_int length, u_int caplen)
break;
tptr = tptr+len;
}
- if (vflag < 1)
- printf(", length %u",caplen);
+ if (ndo->ndo_vflag < 1)
+ ND_PRINT((ndo, ", length %u", caplen));
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
/*
@@ -244,7 +243,8 @@ trunc:
#define PT_IEEE_802_2 2 /* IEEE 802.2 LLC header */
static int
-cdp_print_addr(const u_char * p, int l)
+cdp_print_addr(netdissect_options *ndo,
+ const u_char * p, int l)
{
int pt, pl, al, num;
const u_char *endp = p + l;
@@ -254,19 +254,19 @@ cdp_print_addr(const u_char * p, int l)
};
#endif
- TCHECK2(*p, 2);
+ ND_TCHECK2(*p, 2);
num = EXTRACT_32BITS(p);
p += 4;
while (p < endp && num >= 0) {
- TCHECK2(*p, 2);
+ ND_TCHECK2(*p, 2);
if (p + 2 > endp)
goto trunc;
pt = p[0]; /* type of "protocol" field */
pl = p[1]; /* length of "protocol" field */
p += 2;
- TCHECK2(p[pl], 2);
+ ND_TCHECK2(p[pl], 2);
if (p + pl + 2 > endp)
goto trunc;
al = EXTRACT_16BITS(&p[pl]); /* address length */
@@ -279,12 +279,10 @@ cdp_print_addr(const u_char * p, int l)
*/
p += 3;
- TCHECK2(*p, 4);
+ ND_TCHECK2(*p, 4);
if (p + 4 > endp)
goto trunc;
- printf("IPv4 (%u) %s",
- num,
- ipaddr_string(p));
+ ND_PRINT((ndo, "IPv4 (%u) %s", num, ipaddr_string(p)));
p += 4;
}
#ifdef INET6
@@ -297,13 +295,11 @@ cdp_print_addr(const u_char * p, int l)
* Ethertype, address length = 16
*/
p += 10;
- TCHECK2(*p, al);
+ ND_TCHECK2(*p, al);
if (p + al > endp)
goto trunc;
- printf("IPv6 (%u) %s",
- num,
- ip6addr_string(p));
+ ND_PRINT((ndo, "IPv6 (%u) %s", num, ip6addr_string(p)));
p += al;
}
#endif
@@ -311,27 +307,27 @@ cdp_print_addr(const u_char * p, int l)
/*
* Generic case: just print raw data
*/
- TCHECK2(*p, pl);
+ ND_TCHECK2(*p, pl);
if (p + pl > endp)
goto trunc;
- printf("pt=0x%02x, pl=%d, pb=", *(p - 2), pl);
+ ND_PRINT((ndo, "pt=0x%02x, pl=%d, pb=", *(p - 2), pl));
while (pl-- > 0)
- printf(" %02x", *p++);
- TCHECK2(*p, 2);
+ ND_PRINT((ndo, " %02x", *p++));
+ ND_TCHECK2(*p, 2);
if (p + 2 > endp)
goto trunc;
al = (*p << 8) + *(p + 1);
- printf(", al=%d, a=", al);
+ ND_PRINT((ndo, ", al=%d, a=", al));
p += 2;
- TCHECK2(*p, al);
+ ND_TCHECK2(*p, al);
if (p + al > endp)
goto trunc;
while (al-- > 0)
- printf(" %02x", *p++);
+ ND_PRINT((ndo, " %02x", *p++));
}
num--;
if (num)
- printf(" ");
+ ND_PRINT((ndo, " "));
}
return 0;
@@ -342,15 +338,16 @@ trunc:
static int
-cdp_print_prefixes(const u_char * p, int l)
+cdp_print_prefixes(netdissect_options *ndo,
+ const u_char * p, int l)
{
if (l % 5)
goto trunc;
- printf(" IPv4 Prefixes (%d):", l / 5);
+ ND_PRINT((ndo, " IPv4 Prefixes (%d):", l / 5));
while (l > 0) {
- printf(" %u.%u.%u.%u/%u", p[0], p[1], p[2], p[3], p[4]);
+ ND_PRINT((ndo, " %u.%u.%u.%u/%u", p[0], p[1], p[2], p[3], p[4]));
l -= 5;
p += 5;
}
diff --git a/print-ether.c b/print-ether.c
index 624d0c54..4702e883 100644
--- a/print-ether.c
+++ b/print-ether.c
@@ -342,11 +342,11 @@ ethertype_print(netdissect_options *ndo,
case ETHERTYPE_ATALK:
if (ndo->ndo_vflag)
ND_PRINT((ndo, "et1 "));
- atalk_print(/*ndo,*/p, length);
+ atalk_print(ndo, p, length);
return (1);
case ETHERTYPE_AARP:
- aarp_print(/*ndo,*/p, length);
+ aarp_print(ndo, p, length);
return (1);
case ETHERTYPE_IPX:
diff --git a/print-gre.c b/print-gre.c
index 35890d68..a8584f48 100644
--- a/print-gre.c
+++ b/print-gre.c
@@ -212,7 +212,7 @@ gre_print_0(netdissect_options *ndo, const u_char *bp, u_int length)
ipx_print(ndo, bp, len);
break;
case ETHERTYPE_ATALK:
- atalk_print(bp, len);
+ atalk_print(ndo, bp, len);
break;
case ETHERTYPE_GRE_ISO:
isoclns_print(ndo, bp, len, len);
diff --git a/print-krb.c b/print-krb.c
index b8e17681..e726cee9 100644
--- a/print-krb.c
+++ b/print-krb.c
@@ -21,22 +21,21 @@
* Initial contribution from John Hawkinson (jhawk@mit.edu).
*/
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <tcpdump-stdinc.h>
-#include <stdio.h>
-
#include "interface.h"
#include "extract.h"
static const char tstr[] = " [|kerberos]";
-static const u_char *c_print(register const u_char *, register const u_char *);
-static const u_char *krb4_print_hdr(const u_char *);
-static void krb4_print(const u_char *);
+static const u_char *c_print(netdissect_options *, register const u_char *, register const u_char *);
+static const u_char *krb4_print_hdr(netdissect_options *, const u_char *);
+static void krb4_print(netdissect_options *, const u_char *);
#define AUTH_MSG_KDC_REQUEST 1<<1
#define AUTH_MSG_KDC_REPLY 2<<1
@@ -94,7 +93,8 @@ static const struct tok kerr2str[] = {
};
static const u_char *
-c_print(register const u_char *s, register const u_char *ep)
+c_print(netdissect_options *ndo,
+ register const u_char *s, register const u_char *ep)
{
register u_char c;
register int flag;
@@ -108,14 +108,13 @@ c_print(register const u_char *s, register const u_char *ep)
}
if (!ND_ISASCII(c)) {
c = ND_TOASCII(c);
- putchar('M');
- putchar('-');
+ ND_PRINT((ndo, "M-"));
}
if (!ND_ISPRINT(c)) {
c ^= 0x40; /* DEL to ?, others to alpha */
- putchar('^');
+ ND_PRINT((ndo, "^"));
}
- putchar(c);
+ ND_PRINT((ndo, "%c", c));
}
if (flag)
return NULL;
@@ -123,112 +122,115 @@ c_print(register const u_char *s, register const u_char *ep)
}
static const u_char *
-krb4_print_hdr(const u_char *cp)
+krb4_print_hdr(netdissect_options *ndo,
+ const u_char *cp)
{
cp += 2;
-#define PRINT if ((cp = c_print(cp, snapend)) == NULL) goto trunc
+#define PRINT if ((cp = c_print(ndo, cp, ndo->ndo_snapend)) == NULL) goto trunc
PRINT;
- putchar('.');
+ ND_PRINT((ndo, "."));
PRINT;
- putchar('@');
+ ND_PRINT((ndo, "@"));
PRINT;
return (cp);
trunc:
- fputs(tstr, stdout);
+ ND_PRINT((ndo, tstr));
return (NULL);
#undef PRINT
}
static void
-krb4_print(const u_char *cp)
+krb4_print(netdissect_options *ndo,
+ const u_char *cp)
{
register const struct krb *kp;
u_char type;
u_short len;
-#define PRINT if ((cp = c_print(cp, snapend)) == NULL) goto trunc
+#define PRINT if ((cp = c_print(ndo, cp, ndo->ndo_snapend)) == NULL) goto trunc
/* True if struct krb is little endian */
#define IS_LENDIAN(kp) (((kp)->type & 0x01) != 0)
#define KTOHSP(kp, cp) (IS_LENDIAN(kp) ? EXTRACT_LE_16BITS(cp) : EXTRACT_16BITS(cp))
kp = (struct krb *)cp;
- if ((&kp->type) >= snapend) {
- fputs(tstr, stdout);
+ if ((&kp->type) >= ndo->ndo_snapend) {
+ ND_PRINT((ndo, tstr));
return;
}
type = kp->type & (0xFF << 1);
- printf(" %s %s: ",
- IS_LENDIAN(kp) ? "le" : "be", tok2str(type2str, NULL, type));
+ ND_PRINT((ndo, " %s %s: ",
+ IS_LENDIAN(kp) ? "le" : "be", tok2str(type2str, NULL, type)));
switch (type) {
case AUTH_MSG_KDC_REQUEST:
- if ((cp = krb4_print_hdr(cp)) == NULL)
+ if ((cp = krb4_print_hdr(ndo, cp)) == NULL)
return;
cp += 4; /* ctime */
- TCHECK(*cp);
- printf(" %dmin ", *cp++ * 5);
+ ND_TCHECK(*cp);
+ ND_PRINT((ndo, " %dmin ", *cp++ * 5));
PRINT;
- putchar('.');
+ ND_PRINT((ndo, "."));
PRINT;
break;
case AUTH_MSG_APPL_REQUEST:
cp += 2;
- TCHECK(*cp);
- printf("v%d ", *cp++);
+ ND_TCHECK(*cp);
+ ND_PRINT((ndo, "v%d ", *cp++));
PRINT;
- TCHECK(*cp);
- printf(" (%d)", *cp++);
- TCHECK(*cp);
- printf(" (%d)", *cp);
+ ND_TCHECK(*cp);
+ ND_PRINT((ndo, " (%d)", *cp++));
+ ND_TCHECK(*cp);
+ ND_PRINT((ndo, " (%d)", *cp));
break;
case AUTH_MSG_KDC_REPLY:
- if ((cp = krb4_print_hdr(cp)) == NULL)
+ if ((cp = krb4_print_hdr(ndo, cp)) == NULL)
return;
cp += 10; /* timestamp + n + exp + kvno */
- TCHECK2(*cp, sizeof(short));
+ ND_TCHECK2(*cp, sizeof(short));
len = KTOHSP(kp, cp);
- printf(" (%d)", len);
+ ND_PRINT((ndo, " (%d)", len));
break;
case AUTH_MSG_ERR_REPLY:
- if ((cp = krb4_print_hdr(cp)) == NULL)
+ if ((cp = krb4_print_hdr(ndo, cp)) == NULL)
return;
cp += 4; /* timestamp */
- TCHECK2(*cp, sizeof(short));
- printf(" %s ", tok2str(kerr2str, NULL, KTOHSP(kp, cp)));
+ ND_TCHECK2(*cp, sizeof(short));
+ ND_PRINT((ndo, " %s ", tok2str(kerr2str, NULL, KTOHSP(kp, cp))));
cp += 4;
PRINT;
break;
default:
- fputs("(unknown)", stdout);
+ ND_PRINT((ndo, "(unknown)"));
break;
}
return;
trunc:
- fputs(tstr, stdout);
+ ND_PRINT((ndo, tstr));
}
void
-krb_print(const u_char *dat)
+krb_print(netdissect_options *ndo,
+ const u_char *dat)
{
register const struct krb *kp;
kp = (struct krb *)dat;
- if (dat >= snapend) {
- fputs(tstr, stdout);
+ if (dat >= ndo->ndo_snapend) {
+ ND_PRINT((ndo, tstr));
return;
}
@@ -237,17 +239,17 @@ krb_print(const u_char *dat)
case 1:
case 2:
case 3:
- printf(" v%d", kp->pvno);
+ ND_PRINT((ndo, " v%d", kp->pvno));
break;
case 4:
- printf(" v%d", kp->pvno);
- krb4_print((const u_char *)kp);
+ ND_PRINT((ndo, " v%d", kp->pvno));
+ krb4_print(ndo, (const u_char *)kp);
break;
case 106:
case 107:
- fputs(" v5", stdout);
+ ND_PRINT((ndo, " v5"));
/* Decode ASN.1 here "someday" */
break;
}
diff --git a/print-llc.c b/print-llc.c
index fdb1d981..565fd3ce 100644
--- a/print-llc.c
+++ b/print-llc.c
@@ -425,7 +425,7 @@ snap_print(netdissect_options *ndo, const u_char *p, u_int length, u_int caplen,
case OUI_CISCO:
switch (et) {
case PID_CISCO_CDP:
- cdp_print(p, length, caplen);
+ cdp_print(ndo, p, length, caplen);
return (1);
case PID_CISCO_DTP:
dtp_print(ndo, p, length);
diff --git a/print-null.c b/print-null.c
index a8be6c8b..47df451e 100644
--- a/print-null.c
+++ b/print-null.c
@@ -122,7 +122,7 @@ null_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char
break;
case BSD_AFNUM_APPLETALK:
- atalk_print(p, length);
+ atalk_print(ndo, p, length);
break;
case BSD_AFNUM_IPX:
diff --git a/print-udp.c b/print-udp.c
index a5412a16..5d2d83cd 100644
--- a/print-udp.c
+++ b/print-udp.c
@@ -515,7 +515,7 @@ udp_print(netdissect_options *ndo, register const u_char *bp, u_int length,
(atalk_port(sport) || atalk_port(dport))) {
if (ndo->ndo_vflag)
ND_PRINT((ndo, "kip "));
- llap_print(cp, length);
+ llap_print(ndo, cp, length);
return;
}
}
@@ -595,7 +595,7 @@ udp_print(netdissect_options *ndo, register const u_char *bp, u_int length,
else if (ISPORT(NTP_PORT))
ntp_print(ndo, (const u_char *)(up + 1), length);
else if (ISPORT(KERBEROS_PORT) || ISPORT(KERBEROS_SEC_PORT))
- krb_print((const void *)(up + 1));
+ krb_print(ndo, (const void *)(up + 1));
else if (ISPORT(L2TP_PORT))
l2tp_print(ndo, (const u_char *)(up + 1), length);
#ifdef TCPDUMP_DO_SMB
diff --git a/tcpdump.c b/tcpdump.c
index 2fc257ac..75ea7eb7 100644
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -180,9 +180,6 @@ static const struct printer printers[] = {
#ifdef DLT_IEEE802_11
{ ieee802_11_if_print, DLT_IEEE802_11},
#endif
-#ifdef DLT_LTALK
- { ltalk_if_print, DLT_LTALK },
-#endif
#ifdef DLT_PRISM_HEADER
{ prism_if_print, DLT_PRISM_HEADER },
#endif
@@ -344,6 +341,9 @@ static const struct ndo_printer ndo_printers[] = {
#ifdef DLT_SLIP_BSDOS
{ sl_bsdos_if_print, DLT_SLIP_BSDOS },
#endif
+#ifdef DLT_LTALK
+ { ltalk_if_print, DLT_LTALK },
+#endif
{ NULL, 0 },
};