summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Ovsienko <infrastation@yandex.ru>2014-03-19 13:57:56 +0400
committerDenis Ovsienko <infrastation@yandex.ru>2014-03-19 14:16:56 +0400
commit17934c433e64063bfb3e1a1b7ca8e5cff95f8710 (patch)
tree04b4aa6482887a2c79804be0acd1cfe6627ed929
parentbed843855d69cfc7c6bef96b4e6d43301bc7c290 (diff)
downloadtcpdump-17934c433e64063bfb3e1a1b7ca8e5cff95f8710.tar.gz
NDOize 7 bigger decoders
This change converts IGMP, IPv6 mobility options, LDP, Lightweight Access Point, PGM, PPTP and RIP decoders.
-rw-r--r--interface.h8
-rw-r--r--netdissect.h13
-rw-r--r--print-igmp.c179
-rw-r--r--print-ip.c4
-rw-r--r--print-ip6.c4
-rw-r--r--print-ldp.c162
-rw-r--r--print-lwapp.c64
-rw-r--r--print-mobility.c142
-rw-r--r--print-pgm.c232
-rw-r--r--print-pptp.c718
-rw-r--r--print-rip.c105
-rw-r--r--print-tcp.c4
-rw-r--r--print-udp.c12
13 files changed, 837 insertions, 810 deletions
diff --git a/interface.h b/interface.h
index 4d305b69..9f691300 100644
--- a/interface.h
+++ b/interface.h
@@ -184,7 +184,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 igmp_print(const u_char *, u_int);
extern void isoclns_print(const u_char *, u_int, u_int);
extern void krb_print(const u_char *);
extern u_int llap_print(const u_char *, u_int);
@@ -201,18 +200,14 @@ extern void olsr_print (const u_char *, u_int, int);
extern void pimv1_print(const u_char *, u_int);
extern void cisco_autorp_print(const u_char *, u_int);
extern void rsvp_print(const u_char *, u_int);
-extern void ldp_print(const u_char *, u_int);
extern void lldp_print(const u_char *, u_int);
extern void lspping_print(const u_char *, u_int);
-extern void lwapp_control_print(const u_char *, u_int, int);
-extern void lwapp_data_print(const u_char *, u_int);
extern void pim_print(const u_char *, u_int, u_int);
extern u_int ppp_print(register const u_char *, u_int);
extern u_int ppp_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int ppp_hdlc_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int ppp_bsdos_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int prism_if_print(const struct pcap_pkthdr *, const u_char *);
-extern void rip_print(const u_char *, u_int);
extern u_int sl_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int sl_bsdos_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int juniper_atm1_print(const struct pcap_pkthdr *, const u_char *);
@@ -249,10 +244,8 @@ extern void print_data(const unsigned char *, int);
extern void vrrp_print(const u_char *, u_int, const u_char *, int);
extern void sflow_print(const u_char *, u_int);
extern void cfm_print(const u_char *, u_int);
-extern void pgm_print(const u_char *, u_int, const u_char *);
extern void cdp_print(const u_char *, u_int, u_int);
extern void lwres_print(const u_char *, u_int);
-extern void pptp_print(const u_char *);
extern void sctp_print(const u_char *, const u_char *, u_int);
extern void forces_print(const u_char *, u_int);
extern void mpls_lsp_ping_print(const u_char *, u_int);
@@ -262,7 +255,6 @@ extern int mptcp_print(const u_char *, u_int, u_char);
#ifdef INET6
-extern int mobility_print(const u_char *, const u_char *);
extern void ospf6_print(const u_char *, u_int);
extern void dhcp6_print(const u_char *, u_int);
extern void babel_print(const u_char *, u_int);
diff --git a/netdissect.h b/netdissect.h
index 09e883f0..a3d2cb34 100644
--- a/netdissect.h
+++ b/netdissect.h
@@ -437,6 +437,13 @@ extern u_int mfr_print(netdissect_options *, register const u_char *, u_int);
extern u_int fr_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
extern u_int mfr_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
extern void q933_print(netdissect_options *, const u_char *, u_int);
+extern void igmp_print(netdissect_options *, const u_char *, u_int);
+extern void rip_print(netdissect_options *, const u_char *, u_int);
+extern void lwapp_control_print(netdissect_options *, const u_char *, u_int, int);
+extern void lwapp_data_print(netdissect_options *, const u_char *, u_int);
+extern void pgm_print(netdissect_options *, const u_char *, u_int, const u_char *);
+extern void pptp_print(netdissect_options *, const u_char *);
+extern void ldp_print(netdissect_options *, const u_char *, u_int);
/* stuff that has not yet been rototiled */
extern const u_char * ns_nprint (register const u_char *, register const u_char *);
@@ -464,8 +471,6 @@ extern void egp_print(netdissect_options *,const u_char *, u_int,
extern void hsrp_print(netdissect_options *ndo,
register const u_char *bp, register u_int len);
extern void ieee802_11_if_print(u_char *,const struct pcap_pkthdr *, const u_char *);
-extern void igmp_print(netdissect_options *,
- register const u_char *, u_int);
extern void igrp_print(netdissect_options *,const u_char *, u_int,
const u_char *);
extern void isoclns_print(netdissect_options *,const u_char *,
@@ -500,8 +505,6 @@ extern void ppp_hdlc_if_print(u_char *,
extern void ppp_bsdos_if_print(u_char *,
const struct pcap_pkthdr *, const u_char *);
-extern void rip_print(netdissect_options *,const u_char *, u_int);
-
extern void sctp_print(netdissect_options *ndo,
const u_char *bp, const u_char *bp2,
u_int sctpPacketLength);
@@ -542,7 +545,6 @@ extern void carp_print(netdissect_options *,const u_char *bp,
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);
-extern void pptp_print(netdissect_options *,const u_char *, u_int);
#endif
extern u_int ipnet_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
@@ -557,6 +559,7 @@ extern int rt6_print(netdissect_options *, const u_char *, const u_char *);
extern int hbhopt_print(netdissect_options *, const u_char *);
extern int dstopt_print(netdissect_options *, const u_char *);
extern void ripng_print(netdissect_options *, const u_char *, unsigned int);
+extern int mobility_print(netdissect_options *, const u_char *, const u_char *);
#if 0
extern void icmp6_print(netdissect_options *,const u_char *,
const u_char *);
diff --git a/print-igmp.c b/print-igmp.c
index d1cc4f35..14b55fd3 100644
--- a/print-igmp.c
+++ b/print-igmp.c
@@ -19,15 +19,13 @@
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <tcpdump-stdinc.h>
-#include <stdio.h>
-#include <string.h>
-
#include "interface.h"
#include "addrtoname.h"
#include "extract.h" /* must come after interface.h */
@@ -104,118 +102,119 @@ static const struct tok igmpv3report2str[] = {
};
static void
-print_mtrace(register const u_char *bp, register u_int len)
+print_mtrace(netdissect_options *ndo,
+ register const u_char *bp, register u_int len)
{
register const struct tr_query *tr = (const struct tr_query *)(bp + 8);
- TCHECK(*tr);
+ ND_TCHECK(*tr);
if (len < 8 + sizeof (struct tr_query)) {
- (void)printf(" [invalid len %d]", len);
+ ND_PRINT((ndo, " [invalid len %d]", len));
return;
}
- printf("mtrace %u: %s to %s reply-to %s",
+ ND_PRINT((ndo, "mtrace %u: %s to %s reply-to %s",
TR_GETQID(EXTRACT_32BITS(&tr->tr_rttlqid)),
ipaddr_string(&tr->tr_src), ipaddr_string(&tr->tr_dst),
- ipaddr_string(&tr->tr_raddr));
+ ipaddr_string(&tr->tr_raddr)));
if (IN_CLASSD(EXTRACT_32BITS(&tr->tr_raddr)))
- printf(" with-ttl %d", TR_GETTTL(EXTRACT_32BITS(&tr->tr_rttlqid)));
+ ND_PRINT((ndo, " with-ttl %d", TR_GETTTL(EXTRACT_32BITS(&tr->tr_rttlqid))));
return;
trunc:
- printf("%s", tstr);
- return;
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-print_mresp(register const u_char *bp, register u_int len)
+print_mresp(netdissect_options *ndo,
+ register const u_char *bp, register u_int len)
{
register const struct tr_query *tr = (const struct tr_query *)(bp + 8);
- TCHECK(*tr);
+ ND_TCHECK(*tr);
if (len < 8 + sizeof (struct tr_query)) {
- (void)printf(" [invalid len %d]", len);
+ ND_PRINT((ndo, " [invalid len %d]", len));
return;
}
- printf("mresp %lu: %s to %s reply-to %s",
+ ND_PRINT((ndo, "mresp %lu: %s to %s reply-to %s",
(u_long)TR_GETQID(EXTRACT_32BITS(&tr->tr_rttlqid)),
ipaddr_string(&tr->tr_src), ipaddr_string(&tr->tr_dst),
- ipaddr_string(&tr->tr_raddr));
+ ipaddr_string(&tr->tr_raddr)));
if (IN_CLASSD(EXTRACT_32BITS(&tr->tr_raddr)))
- printf(" with-ttl %d", TR_GETTTL(EXTRACT_32BITS(&tr->tr_rttlqid)));
+ ND_PRINT((ndo, " with-ttl %d", TR_GETTTL(EXTRACT_32BITS(&tr->tr_rttlqid))));
return;
trunc:
- printf("%s", tstr);
- return;
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-print_igmpv3_report(register const u_char *bp, register u_int len)
+print_igmpv3_report(netdissect_options *ndo,
+ register const u_char *bp, register u_int len)
{
u_int group, nsrcs, ngroups;
register u_int i, j;
/* Minimum len is 16, and should be a multiple of 4 */
if (len < 16 || len & 0x03) {
- (void)printf(" [invalid len %d]", len);
+ ND_PRINT((ndo, " [invalid len %d]", len));
return;
}
- TCHECK2(bp[6], 2);
+ ND_TCHECK2(bp[6], 2);
ngroups = EXTRACT_16BITS(&bp[6]);
- (void)printf(", %d group record(s)", ngroups);
- if (vflag > 0) {
+ ND_PRINT((ndo, ", %d group record(s)", ngroups));
+ if (ndo->ndo_vflag > 0) {
/* Print the group records */
group = 8;
for (i=0; i<ngroups; i++) {
if (len < group+8) {
- (void)printf(" [invalid number of groups]");
+ ND_PRINT((ndo, " [invalid number of groups]"));
return;
}
- TCHECK2(bp[group+4], 4);
- (void)printf(" [gaddr %s", ipaddr_string(&bp[group+4]));
- (void)printf(" %s", tok2str(igmpv3report2str, " [v3-report-#%d]",
- bp[group]));
+ ND_TCHECK2(bp[group+4], 4);
+ ND_PRINT((ndo, " [gaddr %s", ipaddr_string(&bp[group+4])));
+ ND_PRINT((ndo, " %s", tok2str(igmpv3report2str, " [v3-report-#%d]",
+ bp[group])));
nsrcs = EXTRACT_16BITS(&bp[group+2]);
/* Check the number of sources and print them */
if (len < group+8+(nsrcs<<2)) {
- (void)printf(" [invalid number of sources %d]", nsrcs);
+ ND_PRINT((ndo, " [invalid number of sources %d]", nsrcs));
return;
}
- if (vflag == 1)
- (void)printf(", %d source(s)", nsrcs);
+ if (ndo->ndo_vflag == 1)
+ ND_PRINT((ndo, ", %d source(s)", nsrcs));
else {
/* Print the sources */
- (void)printf(" {");
+ ND_PRINT((ndo, " {"));
for (j=0; j<nsrcs; j++) {
- TCHECK2(bp[group+8+(j<<2)], 4);
- (void)printf(" %s", ipaddr_string(&bp[group+8+(j<<2)]));
+ ND_TCHECK2(bp[group+8+(j<<2)], 4);
+ ND_PRINT((ndo, " %s", ipaddr_string(&bp[group+8+(j<<2)])));
}
- (void)printf(" }");
+ ND_PRINT((ndo, " }"));
}
/* Next group record */
group += 8 + (nsrcs << 2);
- (void)printf("]");
+ ND_PRINT((ndo, "]"));
}
}
return;
trunc:
- (void)printf("%s", tstr);
- return;
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-print_igmpv3_query(register const u_char *bp, register u_int len)
+print_igmpv3_query(netdissect_options *ndo,
+ register const u_char *bp, register u_int len)
{
u_int mrc;
int mrt;
u_int nsrcs;
register u_int i;
- (void)printf(" v3");
+ ND_PRINT((ndo, " v3"));
/* Minimum len is 12, and should be a multiple of 4 */
if (len < 12 || len & 0x03) {
- (void)printf(" [invalid len %d]", len);
+ ND_PRINT((ndo, " [invalid len %d]", len));
return;
}
- TCHECK(bp[1]);
+ ND_TCHECK(bp[1]);
mrc = bp[1];
if (mrc < 128) {
mrt = mrc;
@@ -223,119 +222,119 @@ print_igmpv3_query(register const u_char *bp, register u_int len)
mrt = ((mrc & 0x0f) | 0x10) << (((mrc & 0x70) >> 4) + 3);
}
if (mrc != 100) {
- (void)printf(" [max resp time ");
+ ND_PRINT((ndo, " [max resp time "));
if (mrt < 600) {
- (void)printf("%.1fs", mrt * 0.1);
+ ND_PRINT((ndo, "%.1fs", mrt * 0.1));
} else {
relts_print(mrt / 10);
}
- (void)printf("]");
+ ND_PRINT((ndo, "]"));
}
- TCHECK2(bp[4], 4);
+ ND_TCHECK2(bp[4], 4);
if (EXTRACT_32BITS(&bp[4]) == 0)
return;
- (void)printf(" [gaddr %s", ipaddr_string(&bp[4]));
- TCHECK2(bp[10], 2);
+ ND_PRINT((ndo, " [gaddr %s", ipaddr_string(&bp[4])));
+ ND_TCHECK2(bp[10], 2);
nsrcs = EXTRACT_16BITS(&bp[10]);
if (nsrcs > 0) {
if (len < 12 + (nsrcs << 2))
- (void)printf(" [invalid number of sources]");
- else if (vflag > 1) {
- (void)printf(" {");
+ ND_PRINT((ndo, " [invalid number of sources]"));
+ else if (ndo->ndo_vflag > 1) {
+ ND_PRINT((ndo, " {"));
for (i=0; i<nsrcs; i++) {
- TCHECK2(bp[12+(i<<2)], 4);
- (void)printf(" %s", ipaddr_string(&bp[12+(i<<2)]));
+ ND_TCHECK2(bp[12+(i<<2)], 4);
+ ND_PRINT((ndo, " %s", ipaddr_string(&bp[12+(i<<2)])));
}
- (void)printf(" }");
+ ND_PRINT((ndo, " }"));
} else
- (void)printf(", %d source(s)", nsrcs);
+ ND_PRINT((ndo, ", %d source(s)", nsrcs));
}
- (void)printf("]");
+ ND_PRINT((ndo, "]"));
return;
trunc:
- (void)printf("%s", tstr);
- return;
+ ND_PRINT((ndo, "%s", tstr));
}
void
-igmp_print(register const u_char *bp, register u_int len)
+igmp_print(netdissect_options *ndo,
+ register const u_char *bp, register u_int len)
{
struct cksum_vec vec[1];
- if (qflag) {
- (void)printf("igmp");
+ if (ndo->ndo_qflag) {
+ ND_PRINT((ndo, "igmp"));
return;
}
- TCHECK(bp[0]);
+ ND_TCHECK(bp[0]);
switch (bp[0]) {
case 0x11:
- (void)printf("igmp query");
+ ND_PRINT((ndo, "igmp query"));
if (len >= 12)
- print_igmpv3_query(bp, len);
+ print_igmpv3_query(ndo, bp, len);
else {
- TCHECK(bp[1]);
+ ND_TCHECK(bp[1]);
if (bp[1]) {
- (void)printf(" v2");
+ ND_PRINT((ndo, " v2"));
if (bp[1] != 100)
- (void)printf(" [max resp time %d]", bp[1]);
+ ND_PRINT((ndo, " [max resp time %d]", bp[1]));
} else
- (void)printf(" v1");
- TCHECK2(bp[4], 4);
+ ND_PRINT((ndo, " v1"));
+ ND_TCHECK2(bp[4], 4);
if (EXTRACT_32BITS(&bp[4]))
- (void)printf(" [gaddr %s]", ipaddr_string(&bp[4]));
+ ND_PRINT((ndo, " [gaddr %s]", ipaddr_string(&bp[4])));
if (len != 8)
- (void)printf(" [len %d]", len);
+ ND_PRINT((ndo, " [len %d]", len));
}
break;
case 0x12:
- TCHECK2(bp[4], 4);
- (void)printf("igmp v1 report %s", ipaddr_string(&bp[4]));
+ ND_TCHECK2(bp[4], 4);
+ ND_PRINT((ndo, "igmp v1 report %s", ipaddr_string(&bp[4])));
if (len != 8)
- (void)printf(" [len %d]", len);
+ ND_PRINT((ndo, " [len %d]", len));
break;
case 0x16:
- TCHECK2(bp[4], 4);
- (void)printf("igmp v2 report %s", ipaddr_string(&bp[4]));
+ ND_TCHECK2(bp[4], 4);
+ ND_PRINT((ndo, "igmp v2 report %s", ipaddr_string(&bp[4])));
break;
case 0x22:
- (void)printf("igmp v3 report");
- print_igmpv3_report(bp, len);
+ ND_PRINT((ndo, "igmp v3 report"));
+ print_igmpv3_report(ndo, bp, len);
break;
case 0x17:
- TCHECK2(bp[4], 4);
- (void)printf("igmp leave %s", ipaddr_string(&bp[4]));
+ ND_TCHECK2(bp[4], 4);
+ ND_PRINT((ndo, "igmp leave %s", ipaddr_string(&bp[4])));
break;
case 0x13:
- (void)printf("igmp dvmrp");
+ ND_PRINT((ndo, "igmp dvmrp"));
if (len < 8)
- (void)printf(" [len %d]", len);
+ ND_PRINT((ndo, " [len %d]", len));
else
dvmrp_print(bp, len);
break;
case 0x14:
- (void)printf("igmp pimv1");
+ ND_PRINT((ndo, "igmp pimv1"));
pimv1_print(bp, len);
break;
case 0x1e:
- print_mresp(bp, len);
+ print_mresp(ndo, bp, len);
break;
case 0x1f:
- print_mtrace(bp, len);
+ print_mtrace(ndo, bp, len);
break;
default:
- (void)printf("igmp-%d", bp[0]);
+ ND_PRINT((ndo, "igmp-%d", bp[0]));
break;
}
- if (vflag && TTEST2(bp[0], len)) {
+ if (ndo->ndo_vflag && ND_TTEST2(bp[0], len)) {
/* Check the IGMP checksum */
vec[0].ptr = bp;
vec[0].len = len;
if (in_cksum(vec, 1))
- printf(" bad igmp cksum %x!", EXTRACT_16BITS(&bp[2]));
+ ND_PRINT((ndo, " bad igmp cksum %x!", EXTRACT_16BITS(&bp[2])));
}
return;
trunc:
- (void)printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
diff --git a/print-ip.c b/print-ip.c
index 540e0b7c..77ea47da 100644
--- a/print-ip.c
+++ b/print-ip.c
@@ -420,7 +420,7 @@ again:
break;
case IPPROTO_IGMP:
- igmp_print(ipds->cp, ipds->len);
+ igmp_print(ndo, ipds->cp, ipds->len);
break;
case IPPROTO_IPV4:
@@ -476,7 +476,7 @@ again:
break;
case IPPROTO_PGM:
- pgm_print(ipds->cp, ipds->len, (const u_char *)ipds->ip);
+ pgm_print(ndo, ipds->cp, ipds->len, (const u_char *)ipds->ip);
break;
default:
diff --git a/print-ip6.c b/print-ip6.c
index 8c3a7238..d941a700 100644
--- a/print-ip6.c
+++ b/print-ip6.c
@@ -180,7 +180,7 @@ ip6_print(netdissect_options *ndo, const u_char *bp, u_int length)
* which payload can be piggybacked atop a
* mobility header.
*/
- advance = mobility_print(cp, (const u_char *)ip6);
+ advance = mobility_print(ndo, cp, (const u_char *)ip6);
nh = *cp;
return;
case IPPROTO_ROUTING:
@@ -240,7 +240,7 @@ ip6_print(netdissect_options *ndo, const u_char *bp, u_int length)
return;
case IPPROTO_PGM:
- pgm_print(cp, len, (const u_char *)ip6);
+ pgm_print(ndo, cp, len, (const u_char *)ip6);
return;
case IPPROTO_GRE:
diff --git a/print-ldp.c b/print-ldp.c
index 2d609388..d31bfa89 100644
--- a/print-ldp.c
+++ b/print-ldp.c
@@ -14,16 +14,13 @@
* and Steinar Haug (sthaug@nethelp.no)
*/
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <tcpdump-stdinc.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
#include "interface.h"
#include "extract.h"
#include "addrtoname.h"
@@ -212,8 +209,7 @@ static const struct tok ldp_fec_martini_ifparm_vccv_cv_values[] = {
{ 0, NULL}
};
-int ldp_msg_print(register const u_char *);
-int ldp_tlv_print(register const u_char *);
+static int ldp_msg_print(netdissect_options *, register const u_char *);
/*
* ldp tlv header
@@ -233,10 +229,11 @@ int ldp_tlv_print(register const u_char *);
*/
#define TLV_TCHECK(minlen) \
- TCHECK2(*tptr, minlen); if (tlv_tlen < minlen) goto badtlv;
+ ND_TCHECK2(*tptr, minlen); if (tlv_tlen < minlen) goto badtlv;
-int
-ldp_tlv_print(register const u_char *tptr) {
+static int
+ldp_tlv_print(netdissect_options *ndo,
+ register const u_char *tptr) {
struct ldp_tlv_header {
u_int8_t type[2];
@@ -256,14 +253,14 @@ ldp_tlv_print(register const u_char *tptr) {
tlv_type=LDP_MASK_TLV_TYPE(EXTRACT_16BITS(ldp_tlv_header->type));
/* FIXME vendor private / experimental check */
- printf("\n\t %s TLV (0x%04x), length: %u, Flags: [%s and %s forward if unknown]",
+ ND_PRINT((ndo, "\n\t %s TLV (0x%04x), length: %u, Flags: [%s and %s forward if unknown]",
tok2str(ldp_tlv_values,
"Unknown",
tlv_type),
tlv_type,
tlv_len,
LDP_MASK_U_BIT(EXTRACT_16BITS(&ldp_tlv_header->type)) ? "continue processing" : "ignore",
- LDP_MASK_F_BIT(EXTRACT_16BITS(&ldp_tlv_header->type)) ? "do" : "don't");
+ LDP_MASK_F_BIT(EXTRACT_16BITS(&ldp_tlv_header->type)) ? "do" : "don't"));
tptr+=sizeof(struct ldp_tlv_header);
@@ -271,25 +268,25 @@ ldp_tlv_print(register const u_char *tptr) {
case LDP_TLV_COMMON_HELLO:
TLV_TCHECK(4);
- printf("\n\t Hold Time: %us, Flags: [%s Hello%s]",
+ ND_PRINT((ndo, "\n\t Hold Time: %us, Flags: [%s Hello%s]",
EXTRACT_16BITS(tptr),
(EXTRACT_16BITS(tptr+2)&0x8000) ? "Targeted" : "Link",
- (EXTRACT_16BITS(tptr+2)&0x4000) ? ", Request for targeted Hellos" : "");
+ (EXTRACT_16BITS(tptr+2)&0x4000) ? ", Request for targeted Hellos" : ""));
break;
case LDP_TLV_IPV4_TRANSPORT_ADDR:
TLV_TCHECK(4);
- printf("\n\t IPv4 Transport Address: %s", ipaddr_string(tptr));
+ ND_PRINT((ndo, "\n\t IPv4 Transport Address: %s", ipaddr_string(tptr)));
break;
#ifdef INET6
case LDP_TLV_IPV6_TRANSPORT_ADDR:
TLV_TCHECK(16);
- printf("\n\t IPv6 Transport Address: %s", ip6addr_string(tptr));
+ ND_PRINT((ndo, "\n\t IPv6 Transport Address: %s", ip6addr_string(tptr)));
break;
#endif
case LDP_TLV_CONFIG_SEQ_NUMBER:
TLV_TCHECK(4);
- printf("\n\t Sequence Number: %u", EXTRACT_32BITS(tptr));
+ ND_PRINT((ndo, "\n\t Sequence Number: %u", EXTRACT_32BITS(tptr)));
break;
case LDP_TLV_ADDRESS_LIST:
@@ -297,13 +294,13 @@ ldp_tlv_print(register const u_char *tptr) {
af = EXTRACT_16BITS(tptr);
tptr+=LDP_TLV_ADDRESS_LIST_AFNUM_LEN;
tlv_tlen -= LDP_TLV_ADDRESS_LIST_AFNUM_LEN;
- printf("\n\t Address Family: %s, addresses",
- tok2str(af_values, "Unknown (%u)", af));
+ ND_PRINT((ndo, "\n\t Address Family: %s, addresses",
+ tok2str(af_values, "Unknown (%u)", af)));
switch (af) {
case AFNUM_INET:
while(tlv_tlen >= sizeof(struct in_addr)) {
- TCHECK2(*tptr, sizeof(struct in_addr));
- printf(" %s",ipaddr_string(tptr));
+ ND_TCHECK2(*tptr, sizeof(struct in_addr));
+ ND_PRINT((ndo, " %s", ipaddr_string(tptr)));
tlv_tlen-=sizeof(struct in_addr);
tptr+=sizeof(struct in_addr);
}
@@ -311,8 +308,8 @@ ldp_tlv_print(register const u_char *tptr) {
#ifdef INET6
case AFNUM_INET6:
while(tlv_tlen >= sizeof(struct in6_addr)) {
- TCHECK2(*tptr, sizeof(struct in6_addr));
- printf(" %s",ip6addr_string(tptr));
+ ND_TCHECK2(*tptr, sizeof(struct in6_addr));
+ ND_PRINT((ndo, " %s", ip6addr_string(tptr)));
tlv_tlen-=sizeof(struct in6_addr);
tptr+=sizeof(struct in6_addr);
}
@@ -326,19 +323,19 @@ ldp_tlv_print(register const u_char *tptr) {
case LDP_TLV_COMMON_SESSION:
TLV_TCHECK(8);
- printf("\n\t Version: %u, Keepalive: %us, Flags: [Downstream %s, Loop Detection %s]",
+ ND_PRINT((ndo, "\n\t Version: %u, Keepalive: %us, Flags: [Downstream %s, Loop Detection %s]",
EXTRACT_16BITS(tptr), EXTRACT_16BITS(tptr+2),
(EXTRACT_16BITS(tptr+6)&0x8000) ? "On Demand" : "Unsolicited",
(EXTRACT_16BITS(tptr+6)&0x4000) ? "Enabled" : "Disabled"
- );
+ ));
break;
case LDP_TLV_FEC:
TLV_TCHECK(1);
fec_type = *tptr;
- printf("\n\t %s FEC (0x%02x)",
+ ND_PRINT((ndo, "\n\t %s FEC (0x%02x)",
tok2str(ldp_fec_values, "Unknown", fec_type),
- fec_type);
+ fec_type));
tptr+=1;
tlv_tlen-=1;
@@ -356,11 +353,11 @@ ldp_tlv_print(register const u_char *tptr) {
if (i == -2)
goto trunc;
if (i == -3)
- printf(": IPv4 prefix (goes past end of TLV)");
+ ND_PRINT((ndo, ": IPv4 prefix (goes past end of TLV)"));
else if (i == -1)
- printf(": IPv4 prefix (invalid length)");
+ ND_PRINT((ndo, ": IPv4 prefix (invalid length)"));
else
- printf(": IPv4 prefix %s",buf);
+ ND_PRINT((ndo, ": IPv4 prefix %s", buf));
}
#ifdef INET6
else if (af == AFNUM_INET6) {
@@ -368,15 +365,15 @@ ldp_tlv_print(register const u_char *tptr) {
if (i == -2)
goto trunc;
if (i == -3)
- printf(": IPv4 prefix (goes past end of TLV)");
+ ND_PRINT((ndo, ": IPv4 prefix (goes past end of TLV)"));
else if (i == -1)
- printf(": IPv6 prefix (invalid length)");
+ ND_PRINT((ndo, ": IPv6 prefix (invalid length)"));
else
- printf(": IPv6 prefix %s",buf);
+ ND_PRINT((ndo, ": IPv6 prefix %s", buf));
}
#endif
else
- printf(": Address family %u prefix", af);
+ ND_PRINT((ndo, ": Address family %u prefix", af));
break;
case LDP_FEC_HOSTADDRESS:
break;
@@ -390,22 +387,22 @@ ldp_tlv_print(register const u_char *tptr) {
vc_info_len = *(tptr+2);
if (vc_info_len == 0) {
- printf(": %s, %scontrol word, group-ID %u, VC-info-length: %u",
+ ND_PRINT((ndo, ": %s, %scontrol word, group-ID %u, VC-info-length: %u",
tok2str(l2vpn_encaps_values, "Unknown", EXTRACT_16BITS(tptr)&0x7fff),
EXTRACT_16BITS(tptr)&0x8000 ? "" : "no ",
EXTRACT_32BITS(tptr+3),
- vc_info_len);
+ vc_info_len));
break;
}
/* Make sure we have the VC ID as well */
TLV_TCHECK(11);
- printf(": %s, %scontrol word, group-ID %u, VC-ID %u, VC-info-length: %u",
+ ND_PRINT((ndo, ": %s, %scontrol word, group-ID %u, VC-ID %u, VC-info-length: %u",
tok2str(l2vpn_encaps_values, "Unknown", EXTRACT_16BITS(tptr)&0x7fff),
EXTRACT_16BITS(tptr)&0x8000 ? "" : "no ",
EXTRACT_32BITS(tptr+3),
EXTRACT_32BITS(tptr+7),
- vc_info_len);
+ vc_info_len));
if (vc_info_len < 4)
goto trunc; /* minimum 4, for the VC ID */
vc_info_len -= 4; /* subtract out the VC ID, giving the length of the interface parameters */
@@ -423,33 +420,33 @@ ldp_tlv_print(register const u_char *tptr) {
if (vc_info_len < vc_info_tlv_len)
break;
- printf("\n\t\tInterface Parameter: %s (0x%02x), len %u",
+ ND_PRINT((ndo, "\n\t\tInterface Parameter: %s (0x%02x), len %u",
tok2str(ldp_fec_martini_ifparm_values,"Unknown",vc_info_tlv_type),
vc_info_tlv_type,
- vc_info_tlv_len);
+ vc_info_tlv_len));
switch(vc_info_tlv_type) {
case LDP_FEC_MARTINI_IFPARM_MTU:
- printf(": %u",EXTRACT_16BITS(tptr+2));
+ ND_PRINT((ndo, ": %u", EXTRACT_16BITS(tptr+2)));
break;
case LDP_FEC_MARTINI_IFPARM_DESC:
- printf(": ");
+ ND_PRINT((ndo, ": "));
for (idx = 2; idx < vc_info_tlv_len; idx++)
safeputchar(*(tptr+idx));
break;
case LDP_FEC_MARTINI_IFPARM_VCCV:
- printf("\n\t\t Control Channels (0x%02x) = [%s]",
+ ND_PRINT((ndo, "\n\t\t Control Channels (0x%02x) = [%s]",
*(tptr+2),
- bittok2str(ldp_fec_martini_ifparm_vccv_cc_values,"none",*(tptr+2)));
- printf("\n\t\t CV Types (0x%02x) = [%s]",
+ bittok2str(ldp_fec_martini_ifparm_vccv_cc_values, "none", *(tptr+2))));
+ ND_PRINT((ndo, "\n\t\t CV Types (0x%02x) = [%s]",
*(tptr+3),
- bittok2str(ldp_fec_martini_ifparm_vccv_cv_values,"none",*(tptr+3)));
+ bittok2str(ldp_fec_martini_ifparm_vccv_cv_values, "none", *(tptr+3))));
break;
default:
- print_unknown_data(gndo,tptr+2,"\n\t\t ",vc_info_tlv_len-2);
+ print_unknown_data(ndo, tptr+2, "\n\t\t ", vc_info_tlv_len-2);
break;
}
@@ -463,45 +460,45 @@ ldp_tlv_print(register const u_char *tptr) {
case LDP_TLV_GENERIC_LABEL:
TLV_TCHECK(4);
- printf("\n\t Label: %u", EXTRACT_32BITS(tptr) & 0xfffff);
+ ND_PRINT((ndo, "\n\t Label: %u", EXTRACT_32BITS(tptr) & 0xfffff));
break;
case LDP_TLV_STATUS:
TLV_TCHECK(8);
ui = EXTRACT_32BITS(tptr);
tptr+=4;
- printf("\n\t Status: 0x%02x, Flags: [%s and %s forward]",
+ ND_PRINT((ndo, "\n\t Status: 0x%02x, Flags: [%s and %s forward]",
ui&0x3fffffff,
ui&0x80000000 ? "Fatal error" : "Advisory Notification",
- ui&0x40000000 ? "do" : "don't");
+ ui&0x40000000 ? "do" : "don't"));
ui = EXTRACT_32BITS(tptr);
tptr+=4;
if (ui)
- printf(", causing Message ID: 0x%08x", ui);
+ ND_PRINT((ndo, ", causing Message ID: 0x%08x", ui));
break;
case LDP_TLV_FT_SESSION:
TLV_TCHECK(8);
ft_flags = EXTRACT_16BITS(tptr);
- printf("\n\t Flags: [%sReconnect, %sSave State, %sAll-Label Protection, %s Checkpoint, %sRe-Learn State]",
+ ND_PRINT((ndo, "\n\t Flags: [%sReconnect, %sSave State, %sAll-Label Protection, %s Checkpoint, %sRe-Learn State]",
ft_flags&0x8000 ? "" : "No ",
ft_flags&0x8 ? "" : "Don't ",
ft_flags&0x4 ? "" : "No ",
ft_flags&0x2 ? "Sequence Numbered Label" : "All Labels",
- ft_flags&0x1 ? "" : "Don't ");
+ ft_flags&0x1 ? "" : "Don't "));
tptr+=4;
ui = EXTRACT_32BITS(tptr);
if (ui)
- printf(", Reconnect Timeout: %ums", ui);
+ ND_PRINT((ndo, ", Reconnect Timeout: %ums", ui));
tptr+=4;
ui = EXTRACT_32BITS(tptr);
if (ui)
- printf(", Recovery Time: %ums", ui);
+ ND_PRINT((ndo, ", Recovery Time: %ums", ui));
break;
case LDP_TLV_MTU:
TLV_TCHECK(2);
- printf("\n\t MTU: %u", EXTRACT_16BITS(tptr));
+ ND_PRINT((ndo, "\n\t MTU: %u", EXTRACT_16BITS(tptr)));
break;
@@ -522,27 +519,28 @@ ldp_tlv_print(register const u_char *tptr) {
case LDP_TLV_LABEL_REQUEST_MSG_ID:
default:
- if (vflag <= 1)
- print_unknown_data(gndo,tptr,"\n\t ",tlv_tlen);
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, tptr, "\n\t ", tlv_tlen);
break;
}
return(tlv_len+4); /* Type & Length fields not included */
trunc:
- printf("\n\t\t packet exceeded snapshot");
+ ND_PRINT((ndo, "\n\t\t packet exceeded snapshot"));
return 0;
badtlv:
- printf("\n\t\t TLV contents go past end of TLV");
+ ND_PRINT((ndo, "\n\t\t TLV contents go past end of TLV"));
return(tlv_len+4); /* Type & Length fields not included */
}
void
-ldp_print(register const u_char *pptr, register u_int len) {
+ldp_print(netdissect_options *ndo,
+ register const u_char *pptr, register u_int len) {
int processed;
while (len > (sizeof(struct ldp_common_header) + sizeof(struct ldp_msg_header))) {
- processed = ldp_msg_print(pptr);
+ processed = ldp_msg_print(ndo, pptr);
if (processed == 0)
return;
len -= processed;
@@ -550,9 +548,9 @@ ldp_print(register const u_char *pptr, register u_int len) {
}
}
-
-int
-ldp_msg_print(register const u_char *pptr) {
+static int
+ldp_msg_print(netdissect_options *ndo,
+ register const u_char *pptr) {
const struct ldp_common_header *ldp_com_header;
const struct ldp_msg_header *ldp_msg_header;
@@ -563,28 +561,28 @@ ldp_msg_print(register const u_char *pptr) {
tptr=pptr;
ldp_com_header = (const struct ldp_common_header *)pptr;
- TCHECK(*ldp_com_header);
+ ND_TCHECK(*ldp_com_header);
/*
* Sanity checking of the header.
*/
if (EXTRACT_16BITS(&ldp_com_header->version) != LDP_VERSION) {
- printf("%sLDP version %u packet not supported",
- (vflag < 1) ? "" : "\n\t",
- EXTRACT_16BITS(&ldp_com_header->version));
+ ND_PRINT((ndo, "%sLDP version %u packet not supported",
+ (ndo->ndo_vflag < 1) ? "" : "\n\t",
+ EXTRACT_16BITS(&ldp_com_header->version)));
return 0;
}
/* print the LSR-ID, label-space & length */
pdu_len = EXTRACT_16BITS(&ldp_com_header->pdu_length);
- printf("%sLDP, Label-Space-ID: %s:%u, pdu-length: %u",
- (vflag < 1) ? "" : "\n\t",
+ ND_PRINT((ndo, "%sLDP, Label-Space-ID: %s:%u, pdu-length: %u",
+ (ndo->ndo_vflag < 1) ? "" : "\n\t",
ipaddr_string(&ldp_com_header->lsr_id),
EXTRACT_16BITS(&ldp_com_header->label_space),
- pdu_len);
+ pdu_len));
/* bail out if non-verbose */
- if (vflag < 1)
+ if (ndo->ndo_vflag < 1)
return 0;
/* ok they seem to want to know everything - lets fully decode it */
@@ -595,21 +593,21 @@ ldp_msg_print(register const u_char *pptr) {
while(tlen>0) {
/* did we capture enough for fully decoding the msg header ? */
- TCHECK2(*tptr, sizeof(struct ldp_msg_header));
+ ND_TCHECK2(*tptr, sizeof(struct ldp_msg_header));
ldp_msg_header = (const struct ldp_msg_header *)tptr;
msg_len=EXTRACT_16BITS(ldp_msg_header->length);
msg_type=LDP_MASK_MSG_TYPE(EXTRACT_16BITS(ldp_msg_header->type));
/* FIXME vendor private / experimental check */
- printf("\n\t %s Message (0x%04x), length: %u, Message ID: 0x%08x, Flags: [%s if unknown]",
+ ND_PRINT((ndo, "\n\t %s Message (0x%04x), length: %u, Message ID: 0x%08x, Flags: [%s if unknown]",
tok2str(ldp_msg_values,
"Unknown",
msg_type),
msg_type,
msg_len,
EXTRACT_32BITS(&ldp_msg_header->id),
- LDP_MASK_U_BIT(EXTRACT_16BITS(&ldp_msg_header->type)) ? "continue processing" : "ignore");
+ LDP_MASK_U_BIT(EXTRACT_16BITS(&ldp_msg_header->type)) ? "continue processing" : "ignore"));
if (msg_len == 0) /* infinite loop protection */
return 0;
@@ -618,7 +616,7 @@ ldp_msg_print(register const u_char *pptr) {
msg_tlen=msg_len-sizeof(struct ldp_msg_header)+4; /* Type & Length fields not included */
/* did we capture enough for fully decoding the message ? */
- TCHECK2(*tptr, msg_len);
+ ND_TCHECK2(*tptr, msg_len);
hexdump=FALSE;
switch(msg_type) {
@@ -632,7 +630,7 @@ ldp_msg_print(register const u_char *pptr) {
case LDP_MSG_ADDRESS_WITHDRAW:
case LDP_MSG_LABEL_WITHDRAW:
while(msg_tlen >= 4) {
- processed = ldp_tlv_print(msg_tptr);
+ processed = ldp_tlv_print(ndo, msg_tptr);
if (processed == 0)
break;
msg_tlen-=processed;
@@ -650,13 +648,13 @@ ldp_msg_print(register const u_char *pptr) {
case LDP_MSG_LABEL_ABORT_REQUEST:
default:
- if (vflag <= 1)
- print_unknown_data(gndo,msg_tptr,"\n\t ",msg_tlen);
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, msg_tptr, "\n\t ", msg_tlen);
break;
}
/* do we want to see an additionally hexdump ? */
- if (vflag > 1 || hexdump==TRUE)
- print_unknown_data(gndo,tptr+sizeof(struct ldp_msg_header),"\n\t ",
+ if (ndo->ndo_vflag > 1 || hexdump==TRUE)
+ print_unknown_data(ndo, tptr+sizeof(struct ldp_msg_header), "\n\t ",
msg_len);
tptr += msg_len+4;
@@ -664,7 +662,7 @@ ldp_msg_print(register const u_char *pptr) {
}
return pdu_len+4;
trunc:
- printf("\n\t\t packet exceeded snapshot");
+ ND_PRINT((ndo, "\n\t\t packet exceeded snapshot"));
return 0;
}
diff --git a/print-lwapp.c b/print-lwapp.c
index eed9cdd8..2b942bce 100644
--- a/print-lwapp.c
+++ b/print-lwapp.c
@@ -17,16 +17,13 @@
* Original code by Carles Kishimoto <carles.kishimoto@gmail.com>
*/
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <tcpdump-stdinc.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
#include "interface.h"
#include "extract.h"
#include "addrtoname.h"
@@ -164,7 +161,8 @@ struct lwapp_message_header {
};
void
-lwapp_control_print(const u_char *pptr, u_int len, int has_ap_ident) {
+lwapp_control_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len, int has_ap_ident) {
const struct lwapp_transport_header *lwapp_trans_header;
const struct lwapp_control_header *lwapp_control_header;
@@ -176,47 +174,46 @@ lwapp_control_print(const u_char *pptr, u_int len, int has_ap_ident) {
if (has_ap_ident) {
/* check if enough bytes for AP identity */
- if (!TTEST2(*tptr, 6))
+ if (!ND_TTEST2(*tptr, 6))
goto trunc;
lwapp_trans_header = (const struct lwapp_transport_header *)(pptr+6);
} else {
lwapp_trans_header = (const struct lwapp_transport_header *)pptr;
}
- TCHECK(*lwapp_trans_header);
+ ND_TCHECK(*lwapp_trans_header);
/*
* Sanity checking of the header.
*/
if (LWAPP_EXTRACT_VERSION(lwapp_trans_header->version) != LWAPP_VERSION) {
- printf("LWAPP version %u packet not supported",
- LWAPP_EXTRACT_VERSION(lwapp_trans_header->version));
+ ND_PRINT((ndo, "LWAPP version %u packet not supported",
+ LWAPP_EXTRACT_VERSION(lwapp_trans_header->version)));
return;
}
/* non-verbose */
- if (vflag < 1) {
- printf("LWAPPv%u, %s frame, Flags [%s], length %u",
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT((ndo, "LWAPPv%u, %s frame, Flags [%s], length %u",
LWAPP_EXTRACT_VERSION(lwapp_trans_header->version),
LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data",
bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07),
- len);
+ len));
return;
}
/* ok they seem to want to know everything - lets fully decode it */
tlen=EXTRACT_16BITS(lwapp_trans_header->length);
- printf("LWAPPv%u, %s frame, Radio-id %u, Flags [%s], Frag-id %u, length %u",
+ ND_PRINT((ndo, "LWAPPv%u, %s frame, Radio-id %u, Flags [%s], Frag-id %u, length %u",
LWAPP_EXTRACT_VERSION(lwapp_trans_header->version),
LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data",
LWAPP_EXTRACT_RID(lwapp_trans_header->version),
bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07),
lwapp_trans_header->frag_id,
- tlen);
+ tlen));
if (has_ap_ident) {
- printf("\n\tAP identity: %s",
- etheraddr_string(tptr));
+ ND_PRINT((ndo, "\n\tAP identity: %s", etheraddr_string(tptr)));
tptr+=sizeof(const struct lwapp_transport_header)+6;
} else {
tptr+=sizeof(const struct lwapp_transport_header);
@@ -225,22 +222,22 @@ lwapp_control_print(const u_char *pptr, u_int len, int has_ap_ident) {
while(tlen>0) {
/* did we capture enough for fully decoding the object header ? */
- if (!TTEST2(*tptr, sizeof(struct lwapp_control_header)))
+ if (!ND_TTEST2(*tptr, sizeof(struct lwapp_control_header)))
goto trunc;
lwapp_control_header = (const struct lwapp_control_header *)tptr;
msg_tlen = EXTRACT_16BITS(lwapp_control_header->len);
/* print message header */
- printf("\n\t Msg type: %s (%u), Seqnum: %u, Msg len: %d, Session: 0x%08x",
+ ND_PRINT((ndo, "\n\t Msg type: %s (%u), Seqnum: %u, Msg len: %d, Session: 0x%08x",
tok2str(lwapp_msg_type_values,"Unknown",lwapp_control_header->msg_type),
lwapp_control_header->msg_type,
lwapp_control_header->seq_num,
msg_tlen,
- EXTRACT_32BITS(lwapp_control_header->session_id));
+ EXTRACT_32BITS(lwapp_control_header->session_id)));
/* did we capture enough for fully decoding the message */
- if (!TTEST2(*tptr, msg_tlen))
+ if (!ND_TTEST2(*tptr, msg_tlen))
goto trunc;
/* XXX - Decode sub messages for each message */
@@ -286,11 +283,12 @@ lwapp_control_print(const u_char *pptr, u_int len, int has_ap_ident) {
return;
trunc:
- printf("\n\t\t packet exceeded snapshot");
+ ND_PRINT((ndo, "\n\t\t packet exceeded snapshot"));
}
void
-lwapp_data_print(const u_char *pptr, u_int len) {
+lwapp_data_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len) {
const struct lwapp_transport_header *lwapp_trans_header;
const u_char *tptr;
@@ -299,51 +297,51 @@ lwapp_data_print(const u_char *pptr, u_int len) {
tptr=pptr;
/* check if enough bytes for AP identity */
- if (!TTEST2(*tptr, 6))
+ if (!ND_TTEST2(*tptr, 6))
goto trunc;
lwapp_trans_header = (const struct lwapp_transport_header *)pptr;
- TCHECK(*lwapp_trans_header);
+ ND_TCHECK(*lwapp_trans_header);
/*
* Sanity checking of the header.
*/
if (LWAPP_EXTRACT_VERSION(lwapp_trans_header->version) != LWAPP_VERSION) {
- printf("LWAPP version %u packet not supported",
- LWAPP_EXTRACT_VERSION(lwapp_trans_header->version));
+ ND_PRINT((ndo, "LWAPP version %u packet not supported",
+ LWAPP_EXTRACT_VERSION(lwapp_trans_header->version)));
return;
}
/* non-verbose */
- if (vflag < 1) {
- printf("LWAPPv%u, %s frame, Flags [%s], length %u",
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT((ndo, "LWAPPv%u, %s frame, Flags [%s], length %u",
LWAPP_EXTRACT_VERSION(lwapp_trans_header->version),
LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data",
bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07),
- len);
+ len));
return;
}
/* ok they seem to want to know everything - lets fully decode it */
tlen=EXTRACT_16BITS(lwapp_trans_header->length);
- printf("LWAPPv%u, %s frame, Radio-id %u, Flags [%s], Frag-id %u, length %u",
+ ND_PRINT((ndo, "LWAPPv%u, %s frame, Radio-id %u, Flags [%s], Frag-id %u, length %u",
LWAPP_EXTRACT_VERSION(lwapp_trans_header->version),
LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data",
LWAPP_EXTRACT_RID(lwapp_trans_header->version),
bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07),
lwapp_trans_header->frag_id,
- tlen);
+ tlen));
tptr+=sizeof(const struct lwapp_transport_header);
tlen-=sizeof(const struct lwapp_transport_header);
/* FIX - An IEEE 802.11 frame follows - hexdump for now */
- print_unknown_data(gndo,tptr, "\n\t", tlen);
+ print_unknown_data(ndo, tptr, "\n\t", tlen);
return;
trunc:
- printf("\n\t\t packet exceeded snapshot");
+ ND_PRINT((ndo, "\n\t\t packet exceeded snapshot"));
}
/*
diff --git a/print-mobility.c b/print-mobility.c
index d4dfcc0c..7abb9224 100644
--- a/print-mobility.c
+++ b/print-mobility.c
@@ -27,6 +27,7 @@
* SUCH DAMAGE.
*/
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -34,10 +35,7 @@
#ifdef INET6
#include <tcpdump-stdinc.h>
-#include <stdio.h>
-
#include "ip6.h"
-
#include "interface.h"
#include "addrtoname.h"
#include "extract.h" /* must come after interface.h */
@@ -91,7 +89,8 @@ struct ip6_mobility {
#define IP6MOPT_AUTH_MINLEN 12
static void
-mobility_opt_print(const u_char *bp, const unsigned len)
+mobility_opt_print(netdissect_options *ndo,
+ const u_char *bp, const unsigned len)
{
unsigned i, optlen;
@@ -109,67 +108,68 @@ mobility_opt_print(const u_char *bp, const unsigned len)
switch (bp[i]) {
case IP6MOPT_PAD1:
- printf("(pad1)");
+ ND_PRINT((ndo, "(pad1)"));
break;
case IP6MOPT_PADN:
if (len - i < IP6MOPT_MINLEN) {
- printf("(padn: trunc)");
+ ND_PRINT((ndo, "(padn: trunc)"));
goto trunc;
}
- printf("(padn)");
+ ND_PRINT((ndo, "(padn)"));
break;
case IP6MOPT_REFRESH:
if (len - i < IP6MOPT_REFRESH_MINLEN) {
- printf("(refresh: trunc)");
+ ND_PRINT((ndo, "(refresh: trunc)"));
goto trunc;
}
/* units of 4 secs */
- printf("(refresh: %u)",
- EXTRACT_16BITS(&bp[i+2]) << 2);
+ ND_PRINT((ndo, "(refresh: %u)",
+ EXTRACT_16BITS(&bp[i+2]) << 2));
break;
case IP6MOPT_ALTCOA:
if (len - i < IP6MOPT_ALTCOA_MINLEN) {
- printf("(altcoa: trunc)");
+ ND_PRINT((ndo, "(altcoa: trunc)"));
goto trunc;
}
- printf("(alt-CoA: %s)", ip6addr_string(&bp[i+2]));
+ ND_PRINT((ndo, "(alt-CoA: %s)", ip6addr_string(&bp[i+2])));
break;
case IP6MOPT_NONCEID:
if (len - i < IP6MOPT_NONCEID_MINLEN) {
- printf("(ni: trunc)");
+ ND_PRINT((ndo, "(ni: trunc)"));
goto trunc;
}
- printf("(ni: ho=0x%04x co=0x%04x)",
+ ND_PRINT((ndo, "(ni: ho=0x%04x co=0x%04x)",
EXTRACT_16BITS(&bp[i+2]),
- EXTRACT_16BITS(&bp[i+4]));
+ EXTRACT_16BITS(&bp[i+4])));
break;
case IP6MOPT_AUTH:
if (len - i < IP6MOPT_AUTH_MINLEN) {
- printf("(auth: trunc)");
+ ND_PRINT((ndo, "(auth: trunc)"));
goto trunc;
}
- printf("(auth)");
+ ND_PRINT((ndo, "(auth)"));
break;
default:
if (len - i < IP6MOPT_MINLEN) {
- printf("(sopt_type %u: trunc)", bp[i]);
+ ND_PRINT((ndo, "(sopt_type %u: trunc)", bp[i]));
goto trunc;
}
- printf("(type-0x%02x: len=%u)", bp[i], bp[i + 1]);
+ ND_PRINT((ndo, "(type-0x%02x: len=%u)", bp[i], bp[i + 1]));
break;
}
}
return;
trunc:
- printf("[trunc] ");
+ ND_PRINT((ndo, "[trunc] "));
}
/*
* Mobility Header
*/
int
-mobility_print(const u_char *bp, const u_char *bp2 _U_)
+mobility_print(netdissect_options *ndo,
+ const u_char *bp, const u_char *bp2 _U_)
{
const struct ip6_mobility *mh;
const u_char *ep;
@@ -179,9 +179,9 @@ mobility_print(const u_char *bp, const u_char *bp2 _U_)
mh = (struct ip6_mobility *)bp;
/* 'ep' points to the end of available data. */
- ep = snapend;
+ ep = ndo->ndo_snapend;
- if (!TTEST(mh->ip6m_len)) {
+ if (!ND_TTEST(mh->ip6m_len)) {
/*
* There's not enough captured data to include the
* mobility header length.
@@ -201,114 +201,114 @@ mobility_print(const u_char *bp, const u_char *bp2 _U_)
/* XXX ip6m_cksum */
- TCHECK(mh->ip6m_type);
+ ND_TCHECK(mh->ip6m_type);
type = mh->ip6m_type;
switch (type) {
case IP6M_BINDING_REQUEST:
- printf("mobility: BRR");
+ ND_PRINT((ndo, "mobility: BRR"));
hlen = IP6M_MINLEN;
break;
case IP6M_HOME_TEST_INIT:
case IP6M_CAREOF_TEST_INIT:
- printf("mobility: %soTI",
- type == IP6M_HOME_TEST_INIT ? "H" : "C");
+ ND_PRINT((ndo, "mobility: %soTI",
+ type == IP6M_HOME_TEST_INIT ? "H" : "C"));
hlen = IP6M_MINLEN;
- if (vflag) {
- TCHECK2(*mh, hlen + 8);
- printf(" %s Init Cookie=%08x:%08x",
+ if (ndo->ndo_vflag) {
+ ND_TCHECK2(*mh, hlen + 8);
+ ND_PRINT((ndo, " %s Init Cookie=%08x:%08x",
type == IP6M_HOME_TEST_INIT ? "Home" : "Care-of",
EXTRACT_32BITS(&bp[hlen]),
- EXTRACT_32BITS(&bp[hlen + 4]));
+ EXTRACT_32BITS(&bp[hlen + 4])));
}
hlen += 8;
break;
case IP6M_HOME_TEST:
case IP6M_CAREOF_TEST:
- printf("mobility: %soT",
- type == IP6M_HOME_TEST ? "H" : "C");
- TCHECK(mh->ip6m_data16[0]);
- printf(" nonce id=0x%x", EXTRACT_16BITS(&mh->ip6m_data16[0]));
+ ND_PRINT((ndo, "mobility: %soT",
+ type == IP6M_HOME_TEST ? "H" : "C"));
+ ND_TCHECK(mh->ip6m_data16[0]);
+ ND_PRINT((ndo, " nonce id=0x%x", EXTRACT_16BITS(&mh->ip6m_data16[0])));
hlen = IP6M_MINLEN;
- if (vflag) {
- TCHECK2(*mh, hlen + 8);
- printf(" %s Init Cookie=%08x:%08x",
+ if (ndo->ndo_vflag) {
+ ND_TCHECK2(*mh, hlen + 8);
+ ND_PRINT((ndo, " %s Init Cookie=%08x:%08x",
type == IP6M_HOME_TEST ? "Home" : "Care-of",
EXTRACT_32BITS(&bp[hlen]),
- EXTRACT_32BITS(&bp[hlen + 4]));
+ EXTRACT_32BITS(&bp[hlen + 4])));
}
hlen += 8;
- if (vflag) {
- TCHECK2(*mh, hlen + 8);
- printf(" %s Keygen Token=%08x:%08x",
+ if (ndo->ndo_vflag) {
+ ND_TCHECK2(*mh, hlen + 8);
+ ND_PRINT((ndo, " %s Keygen Token=%08x:%08x",
type == IP6M_HOME_TEST ? "Home" : "Care-of",
EXTRACT_32BITS(&bp[hlen]),
- EXTRACT_32BITS(&bp[hlen + 4]));
+ EXTRACT_32BITS(&bp[hlen + 4])));
}
hlen += 8;
break;
case IP6M_BINDING_UPDATE:
- printf("mobility: BU");
- TCHECK(mh->ip6m_data16[0]);
- printf(" seq#=%u", EXTRACT_16BITS(&mh->ip6m_data16[0]));
+ ND_PRINT((ndo, "mobility: BU"));
+ ND_TCHECK(mh->ip6m_data16[0]);
+ ND_PRINT((ndo, " seq#=%u", EXTRACT_16BITS(&mh->ip6m_data16[0])));
hlen = IP6M_MINLEN;
- TCHECK2(*mh, hlen + 1);
+ ND_TCHECK2(*mh, hlen + 1);
if (bp[hlen] & 0xf0)
- printf(" ");
+ ND_PRINT((ndo, " "));
if (bp[hlen] & 0x80)
- printf("A");
+ ND_PRINT((ndo, "A"));
if (bp[hlen] & 0x40)
- printf("H");
+ ND_PRINT((ndo, "H"));
if (bp[hlen] & 0x20)
- printf("L");
+ ND_PRINT((ndo, "L"));
if (bp[hlen] & 0x10)
- printf("K");
+ ND_PRINT((ndo, "K"));
/* Reserved (4bits) */
hlen += 1;
/* Reserved (8bits) */
hlen += 1;
- TCHECK2(*mh, hlen + 2);
+ ND_TCHECK2(*mh, hlen + 2);
/* units of 4 secs */
- printf(" lifetime=%u", EXTRACT_16BITS(&bp[hlen]) << 2);
+ ND_PRINT((ndo, " lifetime=%u", EXTRACT_16BITS(&bp[hlen]) << 2));
hlen += 2;
break;
case IP6M_BINDING_ACK:
- printf("mobility: BA");
- TCHECK(mh->ip6m_data8[0]);
- printf(" status=%u", mh->ip6m_data8[0]);
+ ND_PRINT((ndo, "mobility: BA"));
+ ND_TCHECK(mh->ip6m_data8[0]);
+ ND_PRINT((ndo, " status=%u", mh->ip6m_data8[0]));
if (mh->ip6m_data8[1] & 0x80)
- printf(" K");
+ ND_PRINT((ndo, " K"));
/* Reserved (7bits) */
hlen = IP6M_MINLEN;
- TCHECK2(*mh, hlen + 2);
- printf(" seq#=%u", EXTRACT_16BITS(&bp[hlen]));
+ ND_TCHECK2(*mh, hlen + 2);
+ ND_PRINT((ndo, " seq#=%u", EXTRACT_16BITS(&bp[hlen])));
hlen += 2;
- TCHECK2(*mh, hlen + 2);
+ ND_TCHECK2(*mh, hlen + 2);
/* units of 4 secs */
- printf(" lifetime=%u", EXTRACT_16BITS(&bp[hlen]) << 2);
+ ND_PRINT((ndo, " lifetime=%u", EXTRACT_16BITS(&bp[hlen]) << 2));
hlen += 2;
break;
case IP6M_BINDING_ERROR:
- printf("mobility: BE");
- TCHECK(mh->ip6m_data8[0]);
- printf(" status=%u", mh->ip6m_data8[0]);
+ ND_PRINT((ndo, "mobility: BE"));
+ ND_TCHECK(mh->ip6m_data8[0]);
+ ND_PRINT((ndo, " status=%u", mh->ip6m_data8[0]));
/* Reserved */
hlen = IP6M_MINLEN;
- TCHECK2(*mh, hlen + 16);
- printf(" homeaddr %s", ip6addr_string(&bp[hlen]));
+ ND_TCHECK2(*mh, hlen + 16);
+ ND_PRINT((ndo, " homeaddr %s", ip6addr_string(&bp[hlen])));
hlen += 16;
break;
default:
- printf("mobility: type-#%u len=%u", type, mh->ip6m_len);
+ ND_PRINT((ndo, "mobility: type-#%u len=%u", type, mh->ip6m_len));
return(mhlen);
break;
}
- if (vflag)
- mobility_opt_print(&bp[hlen], mhlen - hlen);
+ if (ndo->ndo_vflag)
+ mobility_opt_print(ndo, &bp[hlen], mhlen - hlen);
return(mhlen);
trunc:
- fputs("[|MOBILITY]", stdout);
+ ND_PRINT((ndo, "[|MOBILITY]"));
return(mhlen);
}
#endif /* INET6 */
diff --git a/print-pgm.c b/print-pgm.c
index 20de180f..ea9204f4 100644
--- a/print-pgm.c
+++ b/print-pgm.c
@@ -13,16 +13,13 @@
* Original code by Andy Heffernan (ahh@juniper.net)
*/
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <tcpdump-stdinc.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
#include "interface.h"
#include "extract.h"
#include "addrtoname.h"
@@ -150,8 +147,9 @@ typedef enum _pgm_type {
#endif
void
-pgm_print(register const u_char *bp, register u_int length,
- register const u_char *bp2)
+pgm_print(netdissect_options *ndo,
+ register const u_char *bp, register u_int length,
+ register const u_char *bp2)
{
register const struct pgm_header *pgm;
register const struct ip *ip;
@@ -178,24 +176,24 @@ pgm_print(register const u_char *bp, register u_int length,
ip6 = NULL;
#else /* INET6 */
if (IP_V(ip) == 6) {
- (void)printf("Can't handle IPv6");
+ ND_PRINT((ndo, "Can't handle IPv6"));
return;
}
#endif /* INET6 */
ch = '\0';
- if (!TTEST(pgm->pgm_dport)) {
+ if (!ND_TTEST(pgm->pgm_dport)) {
#ifdef INET6
if (ip6) {
- (void)printf("%s > %s: [|pgm]",
+ ND_PRINT((ndo, "%s > %s: [|pgm]",
ip6addr_string(&ip6->ip6_src),
- ip6addr_string(&ip6->ip6_dst));
+ ip6addr_string(&ip6->ip6_dst)));
return;
} else
#endif /* INET6 */
{
- (void)printf("%s > %s: [|pgm]",
+ ND_PRINT((ndo, "%s > %s: [|pgm]",
ipaddr_string(&ip->ip_src),
- ipaddr_string(&ip->ip_dst));
+ ipaddr_string(&ip->ip_dst)));
return;
}
}
@@ -206,50 +204,50 @@ pgm_print(register const u_char *bp, register u_int length,
#ifdef INET6
if (ip6) {
if (ip6->ip6_nxt == IPPROTO_PGM) {
- (void)printf("%s.%s > %s.%s: ",
+ ND_PRINT((ndo, "%s.%s > %s.%s: ",
ip6addr_string(&ip6->ip6_src),
tcpport_string(sport),
ip6addr_string(&ip6->ip6_dst),
- tcpport_string(dport));
+ tcpport_string(dport)));
} else {
- (void)printf("%s > %s: ",
- tcpport_string(sport), tcpport_string(dport));
+ ND_PRINT((ndo, "%s > %s: ",
+ tcpport_string(sport), tcpport_string(dport)));
}
} else
#endif /*INET6*/
{
if (ip->ip_p == IPPROTO_PGM) {
- (void)printf("%s.%s > %s.%s: ",
+ ND_PRINT((ndo, "%s.%s > %s.%s: ",
ipaddr_string(&ip->ip_src),
tcpport_string(sport),
ipaddr_string(&ip->ip_dst),
- tcpport_string(dport));
+ tcpport_string(dport)));
} else {
- (void)printf("%s > %s: ",
- tcpport_string(sport), tcpport_string(dport));
+ ND_PRINT((ndo, "%s > %s: ",
+ tcpport_string(sport), tcpport_string(dport)));
}
}
- TCHECK(*pgm);
+ ND_TCHECK(*pgm);
- (void)printf("PGM, length %u", EXTRACT_16BITS(&pgm->pgm_length));
+ ND_PRINT((ndo, "PGM, length %u", EXTRACT_16BITS(&pgm->pgm_length)));
- if (!vflag)
+ if (!ndo->ndo_vflag)
return;
- (void)printf(" 0x%02x%02x%02x%02x%02x%02x ",
+ ND_PRINT((ndo, " 0x%02x%02x%02x%02x%02x%02x ",
pgm->pgm_gsid[0],
pgm->pgm_gsid[1],
pgm->pgm_gsid[2],
pgm->pgm_gsid[3],
pgm->pgm_gsid[4],
- pgm->pgm_gsid[5]);
+ pgm->pgm_gsid[5]));
switch (pgm->pgm_type) {
case PGM_SPM: {
struct pgm_spm *spm;
spm = (struct pgm_spm *)(pgm + 1);
- TCHECK(*spm);
+ ND_TCHECK(*spm);
switch (EXTRACT_16BITS(&spm->pgms_nla_afi)) {
case AFI_IP:
@@ -267,16 +265,16 @@ pgm_print(register const u_char *bp, register u_int length,
break;
}
bp = (u_char *) (spm + 1);
- TCHECK2(*bp, addr_size);
+ ND_TCHECK2(*bp, addr_size);
nla = bp;
bp += addr_size;
inet_ntop(nla_af, nla, nla_buf, sizeof(nla_buf));
- (void)printf("SPM seq %u trail %u lead %u nla %s",
+ ND_PRINT((ndo, "SPM seq %u trail %u lead %u nla %s",
EXTRACT_32BITS(&spm->pgms_seq),
EXTRACT_32BITS(&spm->pgms_trailseq),
EXTRACT_32BITS(&spm->pgms_leadseq),
- nla_buf);
+ nla_buf));
break;
}
@@ -284,10 +282,10 @@ pgm_print(register const u_char *bp, register u_int length,
struct pgm_poll *poll;
poll = (struct pgm_poll *)(pgm + 1);
- TCHECK(*poll);
- (void)printf("POLL seq %u round %u",
+ ND_TCHECK(*poll);
+ ND_PRINT((ndo, "POLL seq %u round %u",
EXTRACT_32BITS(&poll->pgmp_seq),
- EXTRACT_16BITS(&poll->pgmp_round));
+ EXTRACT_16BITS(&poll->pgmp_round)));
bp = (u_char *) (poll + 1);
break;
}
@@ -296,7 +294,7 @@ pgm_print(register const u_char *bp, register u_int length,
u_int32_t ivl, rnd, mask;
polr = (struct pgm_polr *)(pgm + 1);
- TCHECK(*polr);
+ ND_TCHECK(*polr);
switch (EXTRACT_16BITS(&polr->pgmp_nla_afi)) {
case AFI_IP:
@@ -314,37 +312,37 @@ pgm_print(register const u_char *bp, register u_int length,
break;
}
bp = (u_char *) (polr + 1);
- TCHECK2(*bp, addr_size);
+ ND_TCHECK2(*bp, addr_size);
nla = bp;
bp += addr_size;
inet_ntop(nla_af, nla, nla_buf, sizeof(nla_buf));
- TCHECK2(*bp, sizeof(u_int32_t));
+ ND_TCHECK2(*bp, sizeof(u_int32_t));
ivl = EXTRACT_32BITS(bp);
bp += sizeof(u_int32_t);
- TCHECK2(*bp, sizeof(u_int32_t));
+ ND_TCHECK2(*bp, sizeof(u_int32_t));
rnd = EXTRACT_32BITS(bp);
bp += sizeof(u_int32_t);
- TCHECK2(*bp, sizeof(u_int32_t));
+ ND_TCHECK2(*bp, sizeof(u_int32_t));
mask = EXTRACT_32BITS(bp);
bp += sizeof(u_int32_t);
- (void)printf("POLR seq %u round %u nla %s ivl %u rnd 0x%08x "
+ ND_PRINT((ndo, "POLR seq %u round %u nla %s ivl %u rnd 0x%08x "
"mask 0x%08x", EXTRACT_32BITS(&polr->pgmp_seq),
- EXTRACT_16BITS(&polr->pgmp_round), nla_buf, ivl, rnd, mask);
+ EXTRACT_16BITS(&polr->pgmp_round), nla_buf, ivl, rnd, mask));
break;
}
case PGM_ODATA: {
struct pgm_data *odata;
odata = (struct pgm_data *)(pgm + 1);
- TCHECK(*odata);
- (void)printf("ODATA trail %u seq %u",
+ ND_TCHECK(*odata);
+ ND_PRINT((ndo, "ODATA trail %u seq %u",
EXTRACT_32BITS(&odata->pgmd_trailseq),
- EXTRACT_32BITS(&odata->pgmd_seq));
+ EXTRACT_32BITS(&odata->pgmd_seq)));
bp = (u_char *) (odata + 1);
break;
}
@@ -353,10 +351,10 @@ pgm_print(register const u_char *bp, register u_int length,
struct pgm_data *rdata;
rdata = (struct pgm_data *)(pgm + 1);
- TCHECK(*rdata);
- (void)printf("RDATA trail %u seq %u",
+ ND_TCHECK(*rdata);
+ ND_PRINT((ndo, "RDATA trail %u seq %u",
EXTRACT_32BITS(&rdata->pgmd_trailseq),
- EXTRACT_32BITS(&rdata->pgmd_seq));
+ EXTRACT_32BITS(&rdata->pgmd_seq)));
bp = (u_char *) (rdata + 1);
break;
}
@@ -374,7 +372,7 @@ pgm_print(register const u_char *bp, register u_int length,
#endif
nak = (struct pgm_nak *)(pgm + 1);
- TCHECK(*nak);
+ ND_TCHECK(*nak);
/*
* Skip past the source, saving info along the way
@@ -396,7 +394,7 @@ pgm_print(register const u_char *bp, register u_int length,
break;
}
bp = (u_char *) (nak + 1);
- TCHECK2(*bp, addr_size);
+ ND_TCHECK2(*bp, addr_size);
source = bp;
bp += addr_size;
@@ -420,7 +418,7 @@ pgm_print(register const u_char *bp, register u_int length,
break;
}
bp += (2 * sizeof(u_int16_t));
- TCHECK2(*bp, addr_size);
+ ND_TCHECK2(*bp, addr_size);
group = bp;
bp += addr_size;
@@ -431,19 +429,19 @@ pgm_print(register const u_char *bp, register u_int length,
inet_ntop(group_af, group, group_buf, sizeof(group_buf));
switch (pgm->pgm_type) {
case PGM_NAK:
- (void)printf("NAK ");
+ ND_PRINT((ndo, "NAK "));
break;
case PGM_NULLNAK:
- (void)printf("NNAK ");
+ ND_PRINT((ndo, "NNAK "));
break;
case PGM_NCF:
- (void)printf("NCF ");
+ ND_PRINT((ndo, "NCF "));
break;
default:
break;
}
- (void)printf("(%s -> %s), seq %u",
- source_buf, group_buf, EXTRACT_32BITS(&nak->pgmn_seq));
+ ND_PRINT((ndo, "(%s -> %s), seq %u",
+ source_buf, group_buf, EXTRACT_32BITS(&nak->pgmn_seq)));
break;
}
@@ -451,19 +449,19 @@ pgm_print(register const u_char *bp, register u_int length,
struct pgm_ack *ack;
ack = (struct pgm_ack *)(pgm + 1);
- TCHECK(*ack);
- (void)printf("ACK seq %u",
- EXTRACT_32BITS(&ack->pgma_rx_max_seq));
+ ND_TCHECK(*ack);
+ ND_PRINT((ndo, "ACK seq %u",
+ EXTRACT_32BITS(&ack->pgma_rx_max_seq)));
bp = (u_char *) (ack + 1);
break;
}
case PGM_SPMR:
- (void)printf("SPMR");
+ ND_PRINT((ndo, "SPMR"));
break;
default:
- (void)printf("UNKNOWN type 0x%02x", pgm->pgm_type);
+ ND_PRINT((ndo, "UNKNOWN type 0x%02x", pgm->pgm_type));
break;
}
@@ -472,8 +470,8 @@ pgm_print(register const u_char *bp, register u_int length,
/*
* make sure there's enough for the first option header
*/
- if (!TTEST2(*bp, PGM_MIN_OPT_LEN)) {
- (void)printf("[|OPT]");
+ if (!ND_TTEST2(*bp, PGM_MIN_OPT_LEN)) {
+ ND_PRINT((ndo, "[|OPT]"));
return;
}
@@ -483,58 +481,58 @@ pgm_print(register const u_char *bp, register u_int length,
*/
opt_type = *bp++;
if ((opt_type & PGM_OPT_MASK) != PGM_OPT_LENGTH) {
- (void)printf("[First option bad, should be PGM_OPT_LENGTH, is %u]", opt_type & PGM_OPT_MASK);
+ ND_PRINT((ndo, "[First option bad, should be PGM_OPT_LENGTH, is %u]", opt_type & PGM_OPT_MASK));
return;
}
opt_len = *bp++;
if (opt_len != 4) {
- (void)printf("[Bad OPT_LENGTH option, length %u != 4]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_LENGTH option, length %u != 4]", opt_len));
return;
}
opts_len = EXTRACT_16BITS(bp);
if (opts_len < 4) {
- (void)printf("[Bad total option length %u < 4]", opts_len);
+ ND_PRINT((ndo, "[Bad total option length %u < 4]", opts_len));
return;
}
bp += sizeof(u_int16_t);
- (void)printf(" OPTS LEN %d", opts_len);
+ ND_PRINT((ndo, " OPTS LEN %d", opts_len));
opts_len -= 4;
while (opts_len) {
if (opts_len < PGM_MIN_OPT_LEN) {
- (void)printf("[Total option length leaves no room for final option]");
+ ND_PRINT((ndo, "[Total option length leaves no room for final option]"));
return;
}
opt_type = *bp++;
opt_len = *bp++;
if (opt_len < PGM_MIN_OPT_LEN) {
- (void)printf("[Bad option, length %u < %u]", opt_len,
- PGM_MIN_OPT_LEN);
+ ND_PRINT((ndo, "[Bad option, length %u < %u]", opt_len,
+ PGM_MIN_OPT_LEN));
break;
}
if (opts_len < opt_len) {
- (void)printf("[Total option length leaves no room for final option]");
+ ND_PRINT((ndo, "[Total option length leaves no room for final option]"));
return;
}
- if (!TTEST2(*bp, opt_len - 2)) {
- (void)printf(" [|OPT]");
+ if (!ND_TTEST2(*bp, opt_len - 2)) {
+ ND_PRINT((ndo, " [|OPT]"));
return;
}
switch (opt_type & PGM_OPT_MASK) {
case PGM_OPT_LENGTH:
if (opt_len != 4) {
- (void)printf("[Bad OPT_LENGTH option, length %u != 4]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_LENGTH option, length %u != 4]", opt_len));
return;
}
- (void)printf(" OPTS LEN (extra?) %d", EXTRACT_16BITS(bp));
+ ND_PRINT((ndo, " OPTS LEN (extra?) %d", EXTRACT_16BITS(bp)));
bp += sizeof(u_int16_t);
opts_len -= 4;
break;
case PGM_OPT_FRAGMENT:
if (opt_len != 16) {
- (void)printf("[Bad OPT_FRAGMENT option, length %u != 16]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_FRAGMENT option, length %u != 16]", opt_len));
return;
}
bp += 2;
@@ -544,21 +542,21 @@ pgm_print(register const u_char *bp, register u_int length,
bp += sizeof(u_int32_t);
len = EXTRACT_32BITS(bp);
bp += sizeof(u_int32_t);
- (void)printf(" FRAG seq %u off %u len %u", seq, offset, len);
+ ND_PRINT((ndo, " FRAG seq %u off %u len %u", seq, offset, len));
opts_len -= 16;
break;
case PGM_OPT_NAK_LIST:
bp += 2;
opt_len -= sizeof(u_int32_t); /* option header */
- (void)printf(" NAK LIST");
+ ND_PRINT((ndo, " NAK LIST"));
while (opt_len) {
if (opt_len < sizeof(u_int32_t)) {
- (void)printf("[Option length not a multiple of 4]");
+ ND_PRINT((ndo, "[Option length not a multiple of 4]"));
return;
}
- TCHECK2(*bp, sizeof(u_int32_t));
- (void)printf(" %u", EXTRACT_32BITS(bp));
+ ND_TCHECK2(*bp, sizeof(u_int32_t));
+ ND_PRINT((ndo, " %u", EXTRACT_32BITS(bp)));
bp += sizeof(u_int32_t);
opt_len -= sizeof(u_int32_t);
opts_len -= sizeof(u_int32_t);
@@ -567,19 +565,19 @@ pgm_print(register const u_char *bp, register u_int length,
case PGM_OPT_JOIN:
if (opt_len != 8) {
- (void)printf("[Bad OPT_JOIN option, length %u != 8]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_JOIN option, length %u != 8]", opt_len));
return;
}
bp += 2;
seq = EXTRACT_32BITS(bp);
bp += sizeof(u_int32_t);
- (void)printf(" JOIN %u", seq);
+ ND_PRINT((ndo, " JOIN %u", seq));
opts_len -= 8;
break;
case PGM_OPT_NAK_BO_IVL:
if (opt_len != 12) {
- (void)printf("[Bad OPT_NAK_BO_IVL option, length %u != 12]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_NAK_BO_IVL option, length %u != 12]", opt_len));
return;
}
bp += 2;
@@ -587,13 +585,13 @@ pgm_print(register const u_char *bp, register u_int length,
bp += sizeof(u_int32_t);
seq = EXTRACT_32BITS(bp);
bp += sizeof(u_int32_t);
- (void)printf(" BACKOFF ivl %u ivlseq %u", offset, seq);
+ ND_PRINT((ndo, " BACKOFF ivl %u ivlseq %u", offset, seq));
opts_len -= 12;
break;
case PGM_OPT_NAK_BO_RNG:
if (opt_len != 12) {
- (void)printf("[Bad OPT_NAK_BO_RNG option, length %u != 12]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_NAK_BO_RNG option, length %u != 12]", opt_len));
return;
}
bp += 2;
@@ -601,7 +599,7 @@ pgm_print(register const u_char *bp, register u_int length,
bp += sizeof(u_int32_t);
seq = EXTRACT_32BITS(bp);
bp += sizeof(u_int32_t);
- (void)printf(" BACKOFF max %u min %u", offset, seq);
+ ND_PRINT((ndo, " BACKOFF max %u min %u", offset, seq));
opts_len -= 12;
break;
@@ -624,113 +622,113 @@ pgm_print(register const u_char *bp, register u_int length,
}
bp += (2 * sizeof(u_int16_t));
if (opt_len != 4 + addr_size) {
- (void)printf("[Bad OPT_REDIRECT option, length %u != 4 + address size]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_REDIRECT option, length %u != 4 + address size]", opt_len));
return;
}
- TCHECK2(*bp, addr_size);
+ ND_TCHECK2(*bp, addr_size);
nla = bp;
bp += addr_size;
inet_ntop(nla_af, nla, nla_buf, sizeof(nla_buf));
- (void)printf(" REDIRECT %s", (char *)nla);
+ ND_PRINT((ndo, " REDIRECT %s", (char *)nla));
opts_len -= 4 + addr_size;
break;
case PGM_OPT_PARITY_PRM:
if (opt_len != 8) {
- (void)printf("[Bad OPT_PARITY_PRM option, length %u != 8]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_PARITY_PRM option, length %u != 8]", opt_len));
return;
}
bp += 2;
len = EXTRACT_32BITS(bp);
bp += sizeof(u_int32_t);
- (void)printf(" PARITY MAXTGS %u", len);
+ ND_PRINT((ndo, " PARITY MAXTGS %u", len));
opts_len -= 8;
break;
case PGM_OPT_PARITY_GRP:
if (opt_len != 8) {
- (void)printf("[Bad OPT_PARITY_GRP option, length %u != 8]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_PARITY_GRP option, length %u != 8]", opt_len));
return;
}
bp += 2;
seq = EXTRACT_32BITS(bp);
bp += sizeof(u_int32_t);
- (void)printf(" PARITY GROUP %u", seq);
+ ND_PRINT((ndo, " PARITY GROUP %u", seq));
opts_len -= 8;
break;
case PGM_OPT_CURR_TGSIZE:
if (opt_len != 8) {
- (void)printf("[Bad OPT_CURR_TGSIZE option, length %u != 8]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_CURR_TGSIZE option, length %u != 8]", opt_len));
return;
}
bp += 2;
len = EXTRACT_32BITS(bp);
bp += sizeof(u_int32_t);
- (void)printf(" PARITY ATGS %u", len);
+ ND_PRINT((ndo, " PARITY ATGS %u", len));
opts_len -= 8;
break;
case PGM_OPT_NBR_UNREACH:
if (opt_len != 4) {
- (void)printf("[Bad OPT_NBR_UNREACH option, length %u != 4]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_NBR_UNREACH option, length %u != 4]", opt_len));
return;
}
bp += 2;
- (void)printf(" NBR_UNREACH");
+ ND_PRINT((ndo, " NBR_UNREACH"));
opts_len -= 4;
break;
case PGM_OPT_PATH_NLA:
- (void)printf(" PATH_NLA [%d]", opt_len);
+ ND_PRINT((ndo, " PATH_NLA [%d]", opt_len));
bp += opt_len;
opts_len -= opt_len;
break;
case PGM_OPT_SYN:
if (opt_len != 4) {
- (void)printf("[Bad OPT_SYN option, length %u != 4]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_SYN option, length %u != 4]", opt_len));
return;
}
bp += 2;
- (void)printf(" SYN");
+ ND_PRINT((ndo, " SYN"));
opts_len -= 4;
break;
case PGM_OPT_FIN:
if (opt_len != 4) {
- (void)printf("[Bad OPT_FIN option, length %u != 4]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_FIN option, length %u != 4]", opt_len));
return;
}
bp += 2;
- (void)printf(" FIN");
+ ND_PRINT((ndo, " FIN"));
opts_len -= 4;
break;
case PGM_OPT_RST:
if (opt_len != 4) {
- (void)printf("[Bad OPT_RST option, length %u != 4]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_RST option, length %u != 4]", opt_len));
return;
}
bp += 2;
- (void)printf(" RST");
+ ND_PRINT((ndo, " RST"));
opts_len -= 4;
break;
case PGM_OPT_CR:
- (void)printf(" CR");
+ ND_PRINT((ndo, " CR"));
bp += opt_len;
opts_len -= opt_len;
break;
case PGM_OPT_CRQST:
if (opt_len != 4) {
- (void)printf("[Bad OPT_CRQST option, length %u != 4]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_CRQST option, length %u != 4]", opt_len));
return;
}
bp += 2;
- (void)printf(" CRQST");
+ ND_PRINT((ndo, " CRQST"));
opts_len -= 4;
break;
@@ -755,15 +753,15 @@ pgm_print(register const u_char *bp, register u_int length,
}
bp += (2 * sizeof(u_int16_t));
if (opt_len != 12 + addr_size) {
- (void)printf("[Bad OPT_PGMCC_DATA option, length %u != 12 + address size]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_PGMCC_DATA option, length %u != 12 + address size]", opt_len));
return;
}
- TCHECK2(*bp, addr_size);
+ ND_TCHECK2(*bp, addr_size);
nla = bp;
bp += addr_size;
inet_ntop(nla_af, nla, nla_buf, sizeof(nla_buf));
- (void)printf(" PGMCC DATA %u %s", offset, (char*)nla);
+ ND_PRINT((ndo, " PGMCC DATA %u %s", offset, (char*)nla));
opts_len -= 16;
break;
@@ -788,20 +786,20 @@ pgm_print(register const u_char *bp, register u_int length,
}
bp += (2 * sizeof(u_int16_t));
if (opt_len != 12 + addr_size) {
- (void)printf("[Bad OPT_PGMCC_FEEDBACK option, length %u != 12 + address size]", opt_len);
+ ND_PRINT((ndo, "[Bad OPT_PGMCC_FEEDBACK option, length %u != 12 + address size]", opt_len));
return;
}
- TCHECK2(*bp, addr_size);
+ ND_TCHECK2(*bp, addr_size);
nla = bp;
bp += addr_size;
inet_ntop(nla_af, nla, nla_buf, sizeof(nla_buf));
- (void)printf(" PGMCC FEEDBACK %u %s", offset, (char*)nla);
+ ND_PRINT((ndo, " PGMCC FEEDBACK %u %s", offset, (char*)nla));
opts_len -= 16;
break;
default:
- (void)printf(" OPT_%02X [%d] ", opt_type, opt_len);
+ ND_PRINT((ndo, " OPT_%02X [%d] ", opt_type, opt_len));
bp += opt_len;
opts_len -= opt_len;
break;
@@ -812,15 +810,15 @@ pgm_print(register const u_char *bp, register u_int length,
}
}
- (void)printf(" [%u]", length);
- if (packettype == PT_PGM_ZMTP1 &&
+ ND_PRINT((ndo, " [%u]", length));
+ if (ndo->ndo_packettype == PT_PGM_ZMTP1 &&
(pgm->pgm_type == PGM_ODATA || pgm->pgm_type == PGM_RDATA))
- zmtp1_print_datagram(gndo, bp, EXTRACT_16BITS(&pgm->pgm_length));
+ zmtp1_print_datagram(ndo, bp, EXTRACT_16BITS(&pgm->pgm_length));
return;
trunc:
- fputs("[|pgm]", stdout);
+ ND_PRINT((ndo, "[|pgm]"));
if (ch != '\0')
- putchar('>');
+ ND_PRINT((ndo, ">"));
}
diff --git a/print-pptp.c b/print-pptp.c
index 6ec38f93..eae6bde3 100644
--- a/print-pptp.c
+++ b/print-pptp.c
@@ -21,14 +21,13 @@
* PPTP support contributed by Motonori Shindo (mshindo@mshindo.net)
*/
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <tcpdump-stdinc.h>
-#include <stdio.h>
-
#include "interface.h"
#include "extract.h"
@@ -266,217 +265,236 @@ struct pptp_msg_sli {
/******************************************/
/* In these attribute-specific print-out functions, it't not necessary
- to do TCHECK because they are already checked in the caller of
+ to do ND_TCHECK because they are already checked in the caller of
these functions. */
static void
-pptp_bearer_cap_print(const u_int32_t *bearer_cap)
+pptp_bearer_cap_print(netdissect_options *ndo,
+ const u_int32_t *bearer_cap)
{
- printf(" BEARER_CAP(");
+ ND_PRINT((ndo, " BEARER_CAP("));
if (EXTRACT_32BITS(bearer_cap) & PPTP_BEARER_CAP_DIGITAL_MASK) {
- printf("D");
+ ND_PRINT((ndo, "D"));
}
if (EXTRACT_32BITS(bearer_cap) & PPTP_BEARER_CAP_ANALOG_MASK) {
- printf("A");
+ ND_PRINT((ndo, "A"));
}
- printf(")");
+ ND_PRINT((ndo, ")"));
}
static void
-pptp_bearer_type_print(const u_int32_t *bearer_type)
+pptp_bearer_type_print(netdissect_options *ndo,
+ const u_int32_t *bearer_type)
{
- printf(" BEARER_TYPE(");
+ ND_PRINT((ndo, " BEARER_TYPE("));
switch (EXTRACT_32BITS(bearer_type)) {
case 1:
- printf("A"); /* Analog */
+ ND_PRINT((ndo, "A")); /* Analog */
break;
case 2:
- printf("D"); /* Digital */
+ ND_PRINT((ndo, "D")); /* Digital */
break;
case 3:
- printf("Any");
+ ND_PRINT((ndo, "Any"));
break;
default:
- printf("?");
+ ND_PRINT((ndo, "?"));
break;
}
- printf(")");
+ ND_PRINT((ndo, ")"));
}
static void
-pptp_call_id_print(const u_int16_t *call_id)
+pptp_call_id_print(netdissect_options *ndo,
+ const u_int16_t *call_id)
{
- printf(" CALL_ID(%u)", EXTRACT_16BITS(call_id));
+ ND_PRINT((ndo, " CALL_ID(%u)", EXTRACT_16BITS(call_id)));
}
static void
-pptp_call_ser_print(const u_int16_t *call_ser)
+pptp_call_ser_print(netdissect_options *ndo,
+ const u_int16_t *call_ser)
{
- printf(" CALL_SER_NUM(%u)", EXTRACT_16BITS(call_ser));
+ ND_PRINT((ndo, " CALL_SER_NUM(%u)", EXTRACT_16BITS(call_ser)));
}
static void
-pptp_cause_code_print(const u_int16_t *cause_code)
+pptp_cause_code_print(netdissect_options *ndo,
+ const u_int16_t *cause_code)
{
- printf(" CAUSE_CODE(%u)", EXTRACT_16BITS(cause_code));
+ ND_PRINT((ndo, " CAUSE_CODE(%u)", EXTRACT_16BITS(cause_code)));
}
static void
-pptp_conn_speed_print(const u_int32_t *conn_speed)
+pptp_conn_speed_print(netdissect_options *ndo,
+ const u_int32_t *conn_speed)
{
- printf(" CONN_SPEED(%u)", EXTRACT_32BITS(conn_speed));
+ ND_PRINT((ndo, " CONN_SPEED(%u)", EXTRACT_32BITS(conn_speed)));
}
static void
-pptp_err_code_print(const u_int8_t *err_code)
+pptp_err_code_print(netdissect_options *ndo,
+ const u_int8_t *err_code)
{
- printf(" ERR_CODE(%u", *err_code);
- if (vflag) {
+ ND_PRINT((ndo, " ERR_CODE(%u", *err_code));
+ if (ndo->ndo_vflag) {
switch (*err_code) {
case 0:
- printf(":None");
+ ND_PRINT((ndo, ":None"));
break;
case 1:
- printf(":Not-Connected");
+ ND_PRINT((ndo, ":Not-Connected"));
break;
case 2:
- printf(":Bad-Format");
+ ND_PRINT((ndo, ":Bad-Format"));
break;
case 3:
- printf(":Bad-Valude");
+ ND_PRINT((ndo, ":Bad-Valude"));
break;
case 4:
- printf(":No-Resource");
+ ND_PRINT((ndo, ":No-Resource"));
break;
case 5:
- printf(":Bad-Call-ID");
+ ND_PRINT((ndo, ":Bad-Call-ID"));
break;
case 6:
- printf(":PAC-Error");
+ ND_PRINT((ndo, ":PAC-Error"));
break;
default:
- printf(":?");
+ ND_PRINT((ndo, ":?"));
break;
}
}
- printf(")");
+ ND_PRINT((ndo, ")"));
}
static void
-pptp_firm_rev_print(const u_int16_t *firm_rev)
+pptp_firm_rev_print(netdissect_options *ndo,
+ const u_int16_t *firm_rev)
{
- printf(" FIRM_REV(%u)", EXTRACT_16BITS(firm_rev));
+ ND_PRINT((ndo, " FIRM_REV(%u)", EXTRACT_16BITS(firm_rev)));
}
static void
-pptp_framing_cap_print(const u_int32_t *framing_cap)
+pptp_framing_cap_print(netdissect_options *ndo,
+ const u_int32_t *framing_cap)
{
- printf(" FRAME_CAP(");
+ ND_PRINT((ndo, " FRAME_CAP("));
if (EXTRACT_32BITS(framing_cap) & PPTP_FRAMING_CAP_ASYNC_MASK) {
- printf("A"); /* Async */
+ ND_PRINT((ndo, "A")); /* Async */
}
if (EXTRACT_32BITS(framing_cap) & PPTP_FRAMING_CAP_SYNC_MASK) {
- printf("S"); /* Sync */
+ ND_PRINT((ndo, "S")); /* Sync */
}
- printf(")");
+ ND_PRINT((ndo, ")"));
}
static void
-pptp_framing_type_print(const u_int32_t *framing_type)
+pptp_framing_type_print(netdissect_options *ndo,
+ const u_int32_t *framing_type)
{
- printf(" FRAME_TYPE(");
+ ND_PRINT((ndo, " FRAME_TYPE("));
switch (EXTRACT_32BITS(framing_type)) {
case 1:
- printf("A"); /* Async */
+ ND_PRINT((ndo, "A")); /* Async */
break;
case 2:
- printf("S"); /* Sync */
+ ND_PRINT((ndo, "S")); /* Sync */
break;
case 3:
- printf("E"); /* Either */
+ ND_PRINT((ndo, "E")); /* Either */
break;
default:
- printf("?");
+ ND_PRINT((ndo, "?"));
break;
}
- printf(")");
+ ND_PRINT((ndo, ")"));
}
static void
-pptp_hostname_print(const u_char *hostname)
+pptp_hostname_print(netdissect_options *ndo,
+ const u_char *hostname)
{
- printf(" HOSTNAME(%.64s)", hostname);
+ ND_PRINT((ndo, " HOSTNAME(%.64s)", hostname));
}
static void
-pptp_id_print(const u_int32_t *id)
+pptp_id_print(netdissect_options *ndo,
+ const u_int32_t *id)
{
- printf(" ID(%u)", EXTRACT_32BITS(id));
+ ND_PRINT((ndo, " ID(%u)", EXTRACT_32BITS(id)));
}
static void
-pptp_max_channel_print(const u_int16_t *max_channel)
+pptp_max_channel_print(netdissect_options *ndo,
+ const u_int16_t *max_channel)
{
- printf(" MAX_CHAN(%u)", EXTRACT_16BITS(max_channel));
+ ND_PRINT((ndo, " MAX_CHAN(%u)", EXTRACT_16BITS(max_channel)));
}
static void
-pptp_peer_call_id_print(const u_int16_t *peer_call_id)
+pptp_peer_call_id_print(netdissect_options *ndo,
+ const u_int16_t *peer_call_id)
{
- printf(" PEER_CALL_ID(%u)", EXTRACT_16BITS(peer_call_id));
+ ND_PRINT((ndo, " PEER_CALL_ID(%u)", EXTRACT_16BITS(peer_call_id)));
}
static void
-pptp_phy_chan_id_print(const u_int32_t *phy_chan_id)
+pptp_phy_chan_id_print(netdissect_options *ndo,
+ const u_int32_t *phy_chan_id)
{
- printf(" PHY_CHAN_ID(%u)", EXTRACT_32BITS(phy_chan_id));
+ ND_PRINT((ndo, " PHY_CHAN_ID(%u)", EXTRACT_32BITS(phy_chan_id)));
}
static void
-pptp_pkt_proc_delay_print(const u_int16_t *pkt_proc_delay)
+pptp_pkt_proc_delay_print(netdissect_options *ndo,
+ const u_int16_t *pkt_proc_delay)
{
- printf(" PROC_DELAY(%u)", EXTRACT_16BITS(pkt_proc_delay));
+ ND_PRINT((ndo, " PROC_DELAY(%u)", EXTRACT_16BITS(pkt_proc_delay)));
}
static void
-pptp_proto_ver_print(const u_int16_t *proto_ver)
+pptp_proto_ver_print(netdissect_options *ndo,
+ const u_int16_t *proto_ver)
{
- printf(" PROTO_VER(%u.%u)", /* Version.Revision */
+ ND_PRINT((ndo, " PROTO_VER(%u.%u)", /* Version.Revision */
EXTRACT_16BITS(proto_ver) >> 8,
- EXTRACT_16BITS(proto_ver) & 0xff);
+ EXTRACT_16BITS(proto_ver) & 0xff));
}
static void
-pptp_recv_winsiz_print(const u_int16_t *recv_winsiz)
+pptp_recv_winsiz_print(netdissect_options *ndo,
+ const u_int16_t *recv_winsiz)
{
- printf(" RECV_WIN(%u)", EXTRACT_16BITS(recv_winsiz));
+ ND_PRINT((ndo, " RECV_WIN(%u)", EXTRACT_16BITS(recv_winsiz)));
}
static void
-pptp_result_code_print(const u_int8_t *result_code, int ctrl_msg_type)
+pptp_result_code_print(netdissect_options *ndo,
+ const u_int8_t *result_code, int ctrl_msg_type)
{
- printf(" RESULT_CODE(%u", *result_code);
- if (vflag) {
+ ND_PRINT((ndo, " RESULT_CODE(%u", *result_code));
+ if (ndo->ndo_vflag) {
switch (ctrl_msg_type) {
case PPTP_CTRL_MSG_TYPE_SCCRP:
switch (*result_code) {
case 1:
- printf(":Successful channel establishment");
+ ND_PRINT((ndo, ":Successful channel establishment"));
break;
case 2:
- printf(":General error");
+ ND_PRINT((ndo, ":General error"));
break;
case 3:
- printf(":Command channel already exists");
+ ND_PRINT((ndo, ":Command channel already exists"));
break;
case 4:
- printf(":Requester is not authorized to establish a command channel");
+ ND_PRINT((ndo, ":Requester is not authorized to establish a command channel"));
break;
case 5:
- printf(":The protocol version of the requester is not supported");
+ ND_PRINT((ndo, ":The protocol version of the requester is not supported"));
break;
default:
- printf(":?");
+ ND_PRINT((ndo, ":?"));
break;
}
break;
@@ -484,76 +502,76 @@ pptp_result_code_print(const u_int8_t *result_code, int ctrl_msg_type)
case PPTP_CTRL_MSG_TYPE_ECHORP:
switch (*result_code) {
case 1:
- printf(":OK");
+ ND_PRINT((ndo, ":OK"));
break;
case 2:
- printf(":General Error");
+ ND_PRINT((ndo, ":General Error"));
break;
default:
- printf(":?");
+ ND_PRINT((ndo, ":?"));
break;
}
break;
case PPTP_CTRL_MSG_TYPE_OCRP:
switch (*result_code) {
case 1:
- printf(":Connected");
+ ND_PRINT((ndo, ":Connected"));
break;
case 2:
- printf(":General Error");
+ ND_PRINT((ndo, ":General Error"));
break;
case 3:
- printf(":No Carrier");
+ ND_PRINT((ndo, ":No Carrier"));
break;
case 4:
- printf(":Busy");
+ ND_PRINT((ndo, ":Busy"));
break;
case 5:
- printf(":No Dial Tone");
+ ND_PRINT((ndo, ":No Dial Tone"));
break;
case 6:
- printf(":Time-out");
+ ND_PRINT((ndo, ":Time-out"));
break;
case 7:
- printf(":Do Not Accept");
+ ND_PRINT((ndo, ":Do Not Accept"));
break;
default:
- printf(":?");
+ ND_PRINT((ndo, ":?"));
break;
}
break;
case PPTP_CTRL_MSG_TYPE_ICRP:
switch (*result_code) {
case 1:
- printf(":Connect");
+ ND_PRINT((ndo, ":Connect"));
break;
case 2:
- printf(":General Error");
+ ND_PRINT((ndo, ":General Error"));
break;
case 3:
- printf(":Do Not Accept");
+ ND_PRINT((ndo, ":Do Not Accept"));
break;
default:
- printf(":?");
+ ND_PRINT((ndo, ":?"));
break;
}
break;
case PPTP_CTRL_MSG_TYPE_CDN:
switch (*result_code) {
case 1:
- printf(":Lost Carrier");
+ ND_PRINT((ndo, ":Lost Carrier"));
break;
case 2:
- printf(":General Error");
+ ND_PRINT((ndo, ":General Error"));
break;
case 3:
- printf(":Admin Shutdown");
+ ND_PRINT((ndo, ":Admin Shutdown"));
break;
case 4:
- printf(":Request");
+ ND_PRINT((ndo, ":Request"));
break;
default:
- printf(":?");
+ ND_PRINT((ndo, ":?"));
break;
}
break;
@@ -562,486 +580,504 @@ pptp_result_code_print(const u_int8_t *result_code, int ctrl_msg_type)
break;
}
}
- printf(")");
+ ND_PRINT((ndo, ")"));
}
static void
-pptp_subaddr_print(const u_char *subaddr)
+pptp_subaddr_print(netdissect_options *ndo,
+ const u_char *subaddr)
{
- printf(" SUB_ADDR(%.64s)", subaddr);
+ ND_PRINT((ndo, " SUB_ADDR(%.64s)", subaddr));
}
static void
-pptp_vendor_print(const u_char *vendor)
+pptp_vendor_print(netdissect_options *ndo,
+ const u_char *vendor)
{
- printf(" VENDOR(%.64s)", vendor);
+ ND_PRINT((ndo, " VENDOR(%.64s)", vendor));
}
/************************************/
/* PPTP message print out functions */
/************************************/
static void
-pptp_sccrq_print(const u_char *dat)
+pptp_sccrq_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_sccrq *ptr = (struct pptp_msg_sccrq *)dat;
- TCHECK(ptr->proto_ver);
- pptp_proto_ver_print(&ptr->proto_ver);
- TCHECK(ptr->reserved1);
- TCHECK(ptr->framing_cap);
- pptp_framing_cap_print(&ptr->framing_cap);
- TCHECK(ptr->bearer_cap);
- pptp_bearer_cap_print(&ptr->bearer_cap);
- TCHECK(ptr->max_channel);
- pptp_max_channel_print(&ptr->max_channel);
- TCHECK(ptr->firm_rev);
- pptp_firm_rev_print(&ptr->firm_rev);
- TCHECK(ptr->hostname);
- pptp_hostname_print(&ptr->hostname[0]);
- TCHECK(ptr->vendor);
- pptp_vendor_print(&ptr->vendor[0]);
+ ND_TCHECK(ptr->proto_ver);
+ pptp_proto_ver_print(ndo, &ptr->proto_ver);
+ ND_TCHECK(ptr->reserved1);
+ ND_TCHECK(ptr->framing_cap);
+ pptp_framing_cap_print(ndo, &ptr->framing_cap);
+ ND_TCHECK(ptr->bearer_cap);
+ pptp_bearer_cap_print(ndo, &ptr->bearer_cap);
+ ND_TCHECK(ptr->max_channel);
+ pptp_max_channel_print(ndo, &ptr->max_channel);
+ ND_TCHECK(ptr->firm_rev);
+ pptp_firm_rev_print(ndo, &ptr->firm_rev);
+ ND_TCHECK(ptr->hostname);
+ pptp_hostname_print(ndo, &ptr->hostname[0]);
+ ND_TCHECK(ptr->vendor);
+ pptp_vendor_print(ndo, &ptr->vendor[0]);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_sccrp_print(const u_char *dat)
+pptp_sccrp_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_sccrp *ptr = (struct pptp_msg_sccrp *)dat;
- TCHECK(ptr->proto_ver);
- pptp_proto_ver_print(&ptr->proto_ver);
- TCHECK(ptr->result_code);
- pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_SCCRP);
- TCHECK(ptr->err_code);
- pptp_err_code_print(&ptr->err_code);
- TCHECK(ptr->framing_cap);
- pptp_framing_cap_print(&ptr->framing_cap);
- TCHECK(ptr->bearer_cap);
- pptp_bearer_cap_print(&ptr->bearer_cap);
- TCHECK(ptr->max_channel);
- pptp_max_channel_print(&ptr->max_channel);
- TCHECK(ptr->firm_rev);
- pptp_firm_rev_print(&ptr->firm_rev);
- TCHECK(ptr->hostname);
- pptp_hostname_print(&ptr->hostname[0]);
- TCHECK(ptr->vendor);
- pptp_vendor_print(&ptr->vendor[0]);
+ ND_TCHECK(ptr->proto_ver);
+ pptp_proto_ver_print(ndo, &ptr->proto_ver);
+ ND_TCHECK(ptr->result_code);
+ pptp_result_code_print(ndo, &ptr->result_code, PPTP_CTRL_MSG_TYPE_SCCRP);
+ ND_TCHECK(ptr->err_code);
+ pptp_err_code_print(ndo, &ptr->err_code);
+ ND_TCHECK(ptr->framing_cap);
+ pptp_framing_cap_print(ndo, &ptr->framing_cap);
+ ND_TCHECK(ptr->bearer_cap);
+ pptp_bearer_cap_print(ndo, &ptr->bearer_cap);
+ ND_TCHECK(ptr->max_channel);
+ pptp_max_channel_print(ndo, &ptr->max_channel);
+ ND_TCHECK(ptr->firm_rev);
+ pptp_firm_rev_print(ndo, &ptr->firm_rev);
+ ND_TCHECK(ptr->hostname);
+ pptp_hostname_print(ndo, &ptr->hostname[0]);
+ ND_TCHECK(ptr->vendor);
+ pptp_vendor_print(ndo, &ptr->vendor[0]);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_stopccrq_print(const u_char *dat)
+pptp_stopccrq_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_stopccrq *ptr = (struct pptp_msg_stopccrq *)dat;
- TCHECK(ptr->reason);
- printf(" REASON(%u", ptr->reason);
- if (vflag) {
+ ND_TCHECK(ptr->reason);
+ ND_PRINT((ndo, " REASON(%u", ptr->reason));
+ if (ndo->ndo_vflag) {
switch (ptr->reason) {
case 1:
- printf(":None");
+ ND_PRINT((ndo, ":None"));
break;
case 2:
- printf(":Stop-Protocol");
+ ND_PRINT((ndo, ":Stop-Protocol"));
break;
case 3:
- printf(":Stop-Local-Shutdown");
+ ND_PRINT((ndo, ":Stop-Local-Shutdown"));
break;
default:
- printf(":?");
+ ND_PRINT((ndo, ":?"));
break;
}
}
- printf(")");
- TCHECK(ptr->reserved1);
- TCHECK(ptr->reserved2);
+ ND_PRINT((ndo, ")"));
+ ND_TCHECK(ptr->reserved1);
+ ND_TCHECK(ptr->reserved2);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_stopccrp_print(const u_char *dat)
+pptp_stopccrp_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_stopccrp *ptr = (struct pptp_msg_stopccrp *)dat;
- TCHECK(ptr->result_code);
- pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_StopCCRP);
- TCHECK(ptr->err_code);
- pptp_err_code_print(&ptr->err_code);
- TCHECK(ptr->reserved1);
+ ND_TCHECK(ptr->result_code);
+ pptp_result_code_print(ndo, &ptr->result_code, PPTP_CTRL_MSG_TYPE_StopCCRP);
+ ND_TCHECK(ptr->err_code);
+ pptp_err_code_print(ndo, &ptr->err_code);
+ ND_TCHECK(ptr->reserved1);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_echorq_print(const u_char *dat)
+pptp_echorq_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_echorq *ptr = (struct pptp_msg_echorq *)dat;
- TCHECK(ptr->id);
- pptp_id_print(&ptr->id);
+ ND_TCHECK(ptr->id);
+ pptp_id_print(ndo, &ptr->id);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_echorp_print(const u_char *dat)
+pptp_echorp_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_echorp *ptr = (struct pptp_msg_echorp *)dat;
- TCHECK(ptr->id);
- pptp_id_print(&ptr->id);
- TCHECK(ptr->result_code);
- pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_ECHORP);
- TCHECK(ptr->err_code);
- pptp_err_code_print(&ptr->err_code);
- TCHECK(ptr->reserved1);
+ ND_TCHECK(ptr->id);
+ pptp_id_print(ndo, &ptr->id);
+ ND_TCHECK(ptr->result_code);
+ pptp_result_code_print(ndo, &ptr->result_code, PPTP_CTRL_MSG_TYPE_ECHORP);
+ ND_TCHECK(ptr->err_code);
+ pptp_err_code_print(ndo, &ptr->err_code);
+ ND_TCHECK(ptr->reserved1);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_ocrq_print(const u_char *dat)
+pptp_ocrq_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_ocrq *ptr = (struct pptp_msg_ocrq *)dat;
- TCHECK(ptr->call_id);
- pptp_call_id_print(&ptr->call_id);
- TCHECK(ptr->call_ser);
- pptp_call_ser_print(&ptr->call_ser);
- TCHECK(ptr->min_bps);
- printf(" MIN_BPS(%u)", EXTRACT_32BITS(&ptr->min_bps));
- TCHECK(ptr->max_bps);
- printf(" MAX_BPS(%u)", EXTRACT_32BITS(&ptr->max_bps));
- TCHECK(ptr->bearer_type);
- pptp_bearer_type_print(&ptr->bearer_type);
- TCHECK(ptr->framing_type);
- pptp_framing_type_print(&ptr->framing_type);
- TCHECK(ptr->recv_winsiz);
- pptp_recv_winsiz_print(&ptr->recv_winsiz);
- TCHECK(ptr->pkt_proc_delay);
- pptp_pkt_proc_delay_print(&ptr->pkt_proc_delay);
- TCHECK(ptr->phone_no_len);
- printf(" PHONE_NO_LEN(%u)", EXTRACT_16BITS(&ptr->phone_no_len));
- TCHECK(ptr->reserved1);
- TCHECK(ptr->phone_no);
- printf(" PHONE_NO(%.64s)", ptr->phone_no);
- TCHECK(ptr->subaddr);
- pptp_subaddr_print(&ptr->subaddr[0]);
+ ND_TCHECK(ptr->call_id);
+ pptp_call_id_print(ndo, &ptr->call_id);
+ ND_TCHECK(ptr->call_ser);
+ pptp_call_ser_print(ndo, &ptr->call_ser);
+ ND_TCHECK(ptr->min_bps);
+ ND_PRINT((ndo, " MIN_BPS(%u)", EXTRACT_32BITS(&ptr->min_bps)));
+ ND_TCHECK(ptr->max_bps);
+ ND_PRINT((ndo, " MAX_BPS(%u)", EXTRACT_32BITS(&ptr->max_bps)));
+ ND_TCHECK(ptr->bearer_type);
+ pptp_bearer_type_print(ndo, &ptr->bearer_type);
+ ND_TCHECK(ptr->framing_type);
+ pptp_framing_type_print(ndo, &ptr->framing_type);
+ ND_TCHECK(ptr->recv_winsiz);
+ pptp_recv_winsiz_print(ndo, &ptr->recv_winsiz);
+ ND_TCHECK(ptr->pkt_proc_delay);
+ pptp_pkt_proc_delay_print(ndo, &ptr->pkt_proc_delay);
+ ND_TCHECK(ptr->phone_no_len);
+ ND_PRINT((ndo, " PHONE_NO_LEN(%u)", EXTRACT_16BITS(&ptr->phone_no_len)));
+ ND_TCHECK(ptr->reserved1);
+ ND_TCHECK(ptr->phone_no);
+ ND_PRINT((ndo, " PHONE_NO(%.64s)", ptr->phone_no));
+ ND_TCHECK(ptr->subaddr);
+ pptp_subaddr_print(ndo, &ptr->subaddr[0]);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_ocrp_print(const u_char *dat)
+pptp_ocrp_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_ocrp *ptr = (struct pptp_msg_ocrp *)dat;
- TCHECK(ptr->call_id);
- pptp_call_id_print(&ptr->call_id);
- TCHECK(ptr->peer_call_id);
- pptp_peer_call_id_print(&ptr->peer_call_id);
- TCHECK(ptr->result_code);
- pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_OCRP);
- TCHECK(ptr->err_code);
- pptp_err_code_print(&ptr->err_code);
- TCHECK(ptr->cause_code);
- pptp_cause_code_print(&ptr->cause_code);
- TCHECK(ptr->conn_speed);
- pptp_conn_speed_print(&ptr->conn_speed);
- TCHECK(ptr->recv_winsiz);
- pptp_recv_winsiz_print(&ptr->recv_winsiz);
- TCHECK(ptr->pkt_proc_delay);
- pptp_pkt_proc_delay_print(&ptr->pkt_proc_delay);
- TCHECK(ptr->phy_chan_id);
- pptp_phy_chan_id_print(&ptr->phy_chan_id);
+ ND_TCHECK(ptr->call_id);
+ pptp_call_id_print(ndo, &ptr->call_id);
+ ND_TCHECK(ptr->peer_call_id);
+ pptp_peer_call_id_print(ndo, &ptr->peer_call_id);
+ ND_TCHECK(ptr->result_code);
+ pptp_result_code_print(ndo, &ptr->result_code, PPTP_CTRL_MSG_TYPE_OCRP);
+ ND_TCHECK(ptr->err_code);
+ pptp_err_code_print(ndo, &ptr->err_code);
+ ND_TCHECK(ptr->cause_code);
+ pptp_cause_code_print(ndo, &ptr->cause_code);
+ ND_TCHECK(ptr->conn_speed);
+ pptp_conn_speed_print(ndo, &ptr->conn_speed);
+ ND_TCHECK(ptr->recv_winsiz);
+ pptp_recv_winsiz_print(ndo, &ptr->recv_winsiz);
+ ND_TCHECK(ptr->pkt_proc_delay);
+ pptp_pkt_proc_delay_print(ndo, &ptr->pkt_proc_delay);
+ ND_TCHECK(ptr->phy_chan_id);
+ pptp_phy_chan_id_print(ndo, &ptr->phy_chan_id);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_icrq_print(const u_char *dat)
+pptp_icrq_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_icrq *ptr = (struct pptp_msg_icrq *)dat;
- TCHECK(ptr->call_id);
- pptp_call_id_print(&ptr->call_id);
- TCHECK(ptr->call_ser);
- pptp_call_ser_print(&ptr->call_ser);
- TCHECK(ptr->bearer_type);
- pptp_bearer_type_print(&ptr->bearer_type);
- TCHECK(ptr->phy_chan_id);
- pptp_phy_chan_id_print(&ptr->phy_chan_id);
- TCHECK(ptr->dialed_no_len);
- printf(" DIALED_NO_LEN(%u)", EXTRACT_16BITS(&ptr->dialed_no_len));
- TCHECK(ptr->dialing_no_len);
- printf(" DIALING_NO_LEN(%u)", EXTRACT_16BITS(&ptr->dialing_no_len));
- TCHECK(ptr->dialed_no);
- printf(" DIALED_NO(%.64s)", ptr->dialed_no);
- TCHECK(ptr->dialing_no);
- printf(" DIALING_NO(%.64s)", ptr->dialing_no);
- TCHECK(ptr->subaddr);
- pptp_subaddr_print(&ptr->subaddr[0]);
+ ND_TCHECK(ptr->call_id);
+ pptp_call_id_print(ndo, &ptr->call_id);
+ ND_TCHECK(ptr->call_ser);
+ pptp_call_ser_print(ndo, &ptr->call_ser);
+ ND_TCHECK(ptr->bearer_type);
+ pptp_bearer_type_print(ndo, &ptr->bearer_type);
+ ND_TCHECK(ptr->phy_chan_id);
+ pptp_phy_chan_id_print(ndo, &ptr->phy_chan_id);
+ ND_TCHECK(ptr->dialed_no_len);
+ ND_PRINT((ndo, " DIALED_NO_LEN(%u)", EXTRACT_16BITS(&ptr->dialed_no_len)));
+ ND_TCHECK(ptr->dialing_no_len);
+ ND_PRINT((ndo, " DIALING_NO_LEN(%u)", EXTRACT_16BITS(&ptr->dialing_no_len)));
+ ND_TCHECK(ptr->dialed_no);
+ ND_PRINT((ndo, " DIALED_NO(%.64s)", ptr->dialed_no));
+ ND_TCHECK(ptr->dialing_no);
+ ND_PRINT((ndo, " DIALING_NO(%.64s)", ptr->dialing_no));
+ ND_TCHECK(ptr->subaddr);
+ pptp_subaddr_print(ndo, &ptr->subaddr[0]);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_icrp_print(const u_char *dat)
+pptp_icrp_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_icrp *ptr = (struct pptp_msg_icrp *)dat;
- TCHECK(ptr->call_id);
- pptp_call_id_print(&ptr->call_id);
- TCHECK(ptr->peer_call_id);
- pptp_peer_call_id_print(&ptr->peer_call_id);
- TCHECK(ptr->result_code);
- pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_ICRP);
- TCHECK(ptr->err_code);
- pptp_err_code_print(&ptr->err_code);
- TCHECK(ptr->recv_winsiz);
- pptp_recv_winsiz_print(&ptr->recv_winsiz);
- TCHECK(ptr->pkt_proc_delay);
- pptp_pkt_proc_delay_print(&ptr->pkt_proc_delay);
- TCHECK(ptr->reserved1);
+ ND_TCHECK(ptr->call_id);
+ pptp_call_id_print(ndo, &ptr->call_id);
+ ND_TCHECK(ptr->peer_call_id);
+ pptp_peer_call_id_print(ndo, &ptr->peer_call_id);
+ ND_TCHECK(ptr->result_code);
+ pptp_result_code_print(ndo, &ptr->result_code, PPTP_CTRL_MSG_TYPE_ICRP);
+ ND_TCHECK(ptr->err_code);
+ pptp_err_code_print(ndo, &ptr->err_code);
+ ND_TCHECK(ptr->recv_winsiz);
+ pptp_recv_winsiz_print(ndo, &ptr->recv_winsiz);
+ ND_TCHECK(ptr->pkt_proc_delay);
+ pptp_pkt_proc_delay_print(ndo, &ptr->pkt_proc_delay);
+ ND_TCHECK(ptr->reserved1);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_iccn_print(const u_char *dat)
+pptp_iccn_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_iccn *ptr = (struct pptp_msg_iccn *)dat;
- TCHECK(ptr->peer_call_id);
- pptp_peer_call_id_print(&ptr->peer_call_id);
- TCHECK(ptr->reserved1);
- TCHECK(ptr->conn_speed);
- pptp_conn_speed_print(&ptr->conn_speed);
- TCHECK(ptr->recv_winsiz);
- pptp_recv_winsiz_print(&ptr->recv_winsiz);
- TCHECK(ptr->pkt_proc_delay);
- pptp_pkt_proc_delay_print(&ptr->pkt_proc_delay);
- TCHECK(ptr->framing_type);
- pptp_framing_type_print(&ptr->framing_type);
+ ND_TCHECK(ptr->peer_call_id);
+ pptp_peer_call_id_print(ndo, &ptr->peer_call_id);
+ ND_TCHECK(ptr->reserved1);
+ ND_TCHECK(ptr->conn_speed);
+ pptp_conn_speed_print(ndo, &ptr->conn_speed);
+ ND_TCHECK(ptr->recv_winsiz);
+ pptp_recv_winsiz_print(ndo, &ptr->recv_winsiz);
+ ND_TCHECK(ptr->pkt_proc_delay);
+ pptp_pkt_proc_delay_print(ndo, &ptr->pkt_proc_delay);
+ ND_TCHECK(ptr->framing_type);
+ pptp_framing_type_print(ndo, &ptr->framing_type);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_ccrq_print(const u_char *dat)
+pptp_ccrq_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_ccrq *ptr = (struct pptp_msg_ccrq *)dat;
- TCHECK(ptr->call_id);
- pptp_call_id_print(&ptr->call_id);
- TCHECK(ptr->reserved1);
+ ND_TCHECK(ptr->call_id);
+ pptp_call_id_print(ndo, &ptr->call_id);
+ ND_TCHECK(ptr->reserved1);
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_cdn_print(const u_char *dat)
+pptp_cdn_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_cdn *ptr = (struct pptp_msg_cdn *)dat;
- TCHECK(ptr->call_id);
- pptp_call_id_print(&ptr->call_id);
- TCHECK(ptr->result_code);
- pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_CDN);
- TCHECK(ptr->err_code);
- pptp_err_code_print(&ptr->err_code);
- TCHECK(ptr->cause_code);
- pptp_cause_code_print(&ptr->cause_code);
- TCHECK(ptr->reserved1);
- TCHECK(ptr->call_stats);
- printf(" CALL_STATS(%.128s)", ptr->call_stats);
+ ND_TCHECK(ptr->call_id);
+ pptp_call_id_print(ndo, &ptr->call_id);
+ ND_TCHECK(ptr->result_code);
+ pptp_result_code_print(ndo, &ptr->result_code, PPTP_CTRL_MSG_TYPE_CDN);
+ ND_TCHECK(ptr->err_code);
+ pptp_err_code_print(ndo, &ptr->err_code);
+ ND_TCHECK(ptr->cause_code);
+ pptp_cause_code_print(ndo, &ptr->cause_code);
+ ND_TCHECK(ptr->reserved1);
+ ND_TCHECK(ptr->call_stats);
+ ND_PRINT((ndo, " CALL_STATS(%.128s)", ptr->call_stats));
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_wen_print(const u_char *dat)
+pptp_wen_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_wen *ptr = (struct pptp_msg_wen *)dat;
- TCHECK(ptr->peer_call_id);
- pptp_peer_call_id_print(&ptr->peer_call_id);
- TCHECK(ptr->reserved1);
- TCHECK(ptr->crc_err);
- printf(" CRC_ERR(%u)", EXTRACT_32BITS(&ptr->crc_err));
- TCHECK(ptr->framing_err);
- printf(" FRAMING_ERR(%u)", EXTRACT_32BITS(&ptr->framing_err));
- TCHECK(ptr->hardware_overrun);
- printf(" HARDWARE_OVERRUN(%u)", EXTRACT_32BITS(&ptr->hardware_overrun));
- TCHECK(ptr->buffer_overrun);
- printf(" BUFFER_OVERRUN(%u)", EXTRACT_32BITS(&ptr->buffer_overrun));
- TCHECK(ptr->timeout_err);
- printf(" TIMEOUT_ERR(%u)", EXTRACT_32BITS(&ptr->timeout_err));
- TCHECK(ptr->align_err);
- printf(" ALIGN_ERR(%u)", EXTRACT_32BITS(&ptr->align_err));
+ ND_TCHECK(ptr->peer_call_id);
+ pptp_peer_call_id_print(ndo, &ptr->peer_call_id);
+ ND_TCHECK(ptr->reserved1);
+ ND_TCHECK(ptr->crc_err);
+ ND_PRINT((ndo, " CRC_ERR(%u)", EXTRACT_32BITS(&ptr->crc_err)));
+ ND_TCHECK(ptr->framing_err);
+ ND_PRINT((ndo, " FRAMING_ERR(%u)", EXTRACT_32BITS(&ptr->framing_err)));
+ ND_TCHECK(ptr->hardware_overrun);
+ ND_PRINT((ndo, " HARDWARE_OVERRUN(%u)", EXTRACT_32BITS(&ptr->hardware_overrun)));
+ ND_TCHECK(ptr->buffer_overrun);
+ ND_PRINT((ndo, " BUFFER_OVERRUN(%u)", EXTRACT_32BITS(&ptr->buffer_overrun)));
+ ND_TCHECK(ptr->timeout_err);
+ ND_PRINT((ndo, " TIMEOUT_ERR(%u)", EXTRACT_32BITS(&ptr->timeout_err)));
+ ND_TCHECK(ptr->align_err);
+ ND_PRINT((ndo, " ALIGN_ERR(%u)", EXTRACT_32BITS(&ptr->align_err)));
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
static void
-pptp_sli_print(const u_char *dat)
+pptp_sli_print(netdissect_options *ndo,
+ const u_char *dat)
{
struct pptp_msg_sli *ptr = (struct pptp_msg_sli *)dat;
- TCHECK(ptr->peer_call_id);
- pptp_peer_call_id_print(&ptr->peer_call_id);
- TCHECK(ptr->reserved1);
- TCHECK(ptr->send_accm);
- printf(" SEND_ACCM(0x%08x)", EXTRACT_32BITS(&ptr->send_accm));
- TCHECK(ptr->recv_accm);
- printf(" RECV_ACCM(0x%08x)", EXTRACT_32BITS(&ptr->recv_accm));
+ ND_TCHECK(ptr->peer_call_id);
+ pptp_peer_call_id_print(ndo, &ptr->peer_call_id);
+ ND_TCHECK(ptr->reserved1);
+ ND_TCHECK(ptr->send_accm);
+ ND_PRINT((ndo, " SEND_ACCM(0x%08x)", EXTRACT_32BITS(&ptr->send_accm)));
+ ND_TCHECK(ptr->recv_accm);
+ ND_PRINT((ndo, " RECV_ACCM(0x%08x)", EXTRACT_32BITS(&ptr->recv_accm)));
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
void
-pptp_print(const u_char *dat)
+pptp_print(netdissect_options *ndo,
+ const u_char *dat)
{
const struct pptp_hdr *hdr;
u_int32_t mc;
u_int16_t ctrl_msg_type;
- printf(": pptp");
+ ND_PRINT((ndo, ": pptp"));
hdr = (struct pptp_hdr *)dat;
- TCHECK(hdr->length);
- if (vflag) {
- printf(" Length=%u", EXTRACT_16BITS(&hdr->length));
+ ND_TCHECK(hdr->length);
+ if (ndo->ndo_vflag) {
+ ND_PRINT((ndo, " Length=%u", EXTRACT_16BITS(&hdr->length)));
}
- TCHECK(hdr->msg_type);
- if (vflag) {
+ ND_TCHECK(hdr->msg_type);
+ if (ndo->ndo_vflag) {
switch(EXTRACT_16BITS(&hdr->msg_type)) {
case PPTP_MSG_TYPE_CTRL:
- printf(" CTRL-MSG");
+ ND_PRINT((ndo, " CTRL-MSG"));
break;
case PPTP_MSG_TYPE_MGMT:
- printf(" MGMT-MSG");
+ ND_PRINT((ndo, " MGMT-MSG"));
break;
default:
- printf(" UNKNOWN-MSG-TYPE");
+ ND_PRINT((ndo, " UNKNOWN-MSG-TYPE"));
break;
}
}
- TCHECK(hdr->magic_cookie);
+ ND_TCHECK(hdr->magic_cookie);
mc = EXTRACT_32BITS(&hdr->magic_cookie);
if (mc != PPTP_MAGIC_COOKIE) {
- printf(" UNEXPECTED Magic-Cookie!!(%08x)", mc);
+ ND_PRINT((ndo, " UNEXPECTED Magic-Cookie!!(%08x)", mc));
}
- if (vflag || mc != PPTP_MAGIC_COOKIE) {
- printf(" Magic-Cookie=%08x", mc);
+ if (ndo->ndo_vflag || mc != PPTP_MAGIC_COOKIE) {
+ ND_PRINT((ndo, " Magic-Cookie=%08x", mc));
}
- TCHECK(hdr->ctrl_msg_type);
+ ND_TCHECK(hdr->ctrl_msg_type);
ctrl_msg_type = EXTRACT_16BITS(&hdr->ctrl_msg_type);
if (ctrl_msg_type < PPTP_MAX_MSGTYPE_INDEX) {
- printf(" CTRL_MSGTYPE=%s",
- pptp_message_type_string[ctrl_msg_type]);
+ ND_PRINT((ndo, " CTRL_MSGTYPE=%s",
+ pptp_message_type_string[ctrl_msg_type]));
} else {
- printf(" UNKNOWN_CTRL_MSGTYPE(%u)", ctrl_msg_type);
+ ND_PRINT((ndo, " UNKNOWN_CTRL_MSGTYPE(%u)", ctrl_msg_type));
}
- TCHECK(hdr->reserved0);
+ ND_TCHECK(hdr->reserved0);
dat += 12;
switch(ctrl_msg_type) {
case PPTP_CTRL_MSG_TYPE_SCCRQ:
- pptp_sccrq_print(dat);
+ pptp_sccrq_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_SCCRP:
- pptp_sccrp_print(dat);
+ pptp_sccrp_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_StopCCRQ:
- pptp_stopccrq_print(dat);
+ pptp_stopccrq_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_StopCCRP:
- pptp_stopccrp_print(dat);
+ pptp_stopccrp_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_ECHORQ:
- pptp_echorq_print(dat);
+ pptp_echorq_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_ECHORP:
- pptp_echorp_print(dat);
+ pptp_echorp_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_OCRQ:
- pptp_ocrq_print(dat);
+ pptp_ocrq_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_OCRP:
- pptp_ocrp_print(dat);
+ pptp_ocrp_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_ICRQ:
- pptp_icrq_print(dat);
+ pptp_icrq_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_ICRP:
- pptp_icrp_print(dat);
+ pptp_icrp_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_ICCN:
- pptp_iccn_print(dat);
+ pptp_iccn_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_CCRQ:
- pptp_ccrq_print(dat);
+ pptp_ccrq_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_CDN:
- pptp_cdn_print(dat);
+ pptp_cdn_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_WEN:
- pptp_wen_print(dat);
+ pptp_wen_print(ndo, dat);
break;
case PPTP_CTRL_MSG_TYPE_SLI:
- pptp_sli_print(dat);
+ pptp_sli_print(ndo, dat);
break;
default:
/* do nothing */
@@ -1051,5 +1087,5 @@ pptp_print(const u_char *dat)
return;
trunc:
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
}
diff --git a/print-rip.c b/print-rip.c
index b1931a63..8399081c 100644
--- a/print-rip.c
+++ b/print-rip.c
@@ -19,6 +19,7 @@
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -26,7 +27,6 @@
#include <tcpdump-stdinc.h>
#include <stdio.h>
-#include <string.h>
#include "interface.h"
#include "addrtoname.h"
@@ -93,37 +93,39 @@ struct rip_netinfo {
};
static void
-rip_entry_print_v1(register const struct rip_netinfo *ni)
+rip_entry_print_v1(netdissect_options *ndo,
+ register const struct rip_netinfo *ni)
{
register u_short family;
/* RFC 1058 */
family = EXTRACT_16BITS(&ni->rip_family);
if (family != BSD_AFNUM_INET && family != 0) {
- printf("\n\t AFI %s, ", tok2str(bsd_af_values, "Unknown (%u)", family));
- print_unknown_data(gndo,(u_int8_t *)&ni->rip_family,"\n\t ",RIP_ROUTELEN);
+ ND_PRINT((ndo, "\n\t AFI %s, ", tok2str(bsd_af_values, "Unknown (%u)", family)));
+ print_unknown_data(ndo, (u_int8_t *)&ni->rip_family, "\n\t ", RIP_ROUTELEN);
return;
}
if (EXTRACT_16BITS(&ni->rip_tag) ||
EXTRACT_32BITS(&ni->rip_dest_mask) ||
EXTRACT_32BITS(&ni->rip_router)) {
/* MBZ fields not zero */
- print_unknown_data(gndo,(u_int8_t *)&ni->rip_family,"\n\t ",RIP_ROUTELEN);
+ print_unknown_data(ndo, (u_int8_t *)&ni->rip_family, "\n\t ", RIP_ROUTELEN);
return;
}
if (family == 0) {
- printf("\n\t AFI 0, %s, metric: %u",
+ ND_PRINT((ndo, "\n\t AFI 0, %s, metric: %u",
ipaddr_string(&ni->rip_dest),
- EXTRACT_32BITS(&ni->rip_metric));
+ EXTRACT_32BITS(&ni->rip_metric)));
return;
} /* BSD_AFNUM_INET */
- printf("\n\t %s, metric: %u",
+ ND_PRINT((ndo, "\n\t %s, metric: %u",
ipaddr_string(&ni->rip_dest),
- EXTRACT_32BITS(&ni->rip_metric));
+ EXTRACT_32BITS(&ni->rip_metric)));
}
static unsigned
-rip_entry_print_v2(register const struct rip_netinfo *ni, const unsigned remaining)
+rip_entry_print_v2(netdissect_options *ndo,
+ register const struct rip_netinfo *ni, const unsigned remaining)
{
register u_short family;
@@ -133,69 +135,70 @@ rip_entry_print_v2(register const struct rip_netinfo *ni, const unsigned remaini
if (auth_type == 2) {
register u_char *p = (u_char *)&ni->rip_dest;
u_int i = 0;
- printf("\n\t Simple Text Authentication data: ");
+ ND_PRINT((ndo, "\n\t Simple Text Authentication data: "));
for (; i < RIP_AUTHLEN; p++, i++)
putchar (ND_ISPRINT(*p) ? *p : '.');
} else if (auth_type == 3) {
- printf("\n\t Auth header:");
- printf(" Packet Len %u,", EXTRACT_16BITS((u_int8_t *)ni + 4));
- printf(" Key-ID %u,", *((u_int8_t *)ni + 6));
- printf(" Auth Data Len %u,", *((u_int8_t *)ni + 7));
- printf(" SeqNo %u,", EXTRACT_32BITS(&ni->rip_dest_mask));
- printf(" MBZ %u,", EXTRACT_32BITS(&ni->rip_router));
- printf(" MBZ %u", EXTRACT_32BITS(&ni->rip_metric));
+ ND_PRINT((ndo, "\n\t Auth header:"));
+ ND_PRINT((ndo, " Packet Len %u,", EXTRACT_16BITS((u_int8_t *)ni + 4)));
+ ND_PRINT((ndo, " Key-ID %u,", *((u_int8_t *)ni + 6)));
+ ND_PRINT((ndo, " Auth Data Len %u,", *((u_int8_t *)ni + 7)));
+ ND_PRINT((ndo, " SeqNo %u,", EXTRACT_32BITS(&ni->rip_dest_mask)));
+ ND_PRINT((ndo, " MBZ %u,", EXTRACT_32BITS(&ni->rip_router)));
+ ND_PRINT((ndo, " MBZ %u", EXTRACT_32BITS(&ni->rip_metric)));
} else if (auth_type == 1) {
- printf("\n\t Auth trailer:");
- print_unknown_data(gndo,(u_int8_t *)&ni->rip_dest,"\n\t ",remaining);
+ ND_PRINT((ndo, "\n\t Auth trailer:"));
+ print_unknown_data(ndo, (u_int8_t *)&ni->rip_dest, "\n\t ", remaining);
return remaining; /* AT spans till the packet end */
- } else {
- printf("\n\t Unknown (%u) Authentication data:",
- EXTRACT_16BITS(&ni->rip_tag));
- print_unknown_data(gndo,(u_int8_t *)&ni->rip_dest,"\n\t ",remaining);
+ } else {
+ ND_PRINT((ndo, "\n\t Unknown (%u) Authentication data:",
+ EXTRACT_16BITS(&ni->rip_tag)));
+ print_unknown_data(ndo, (u_int8_t *)&ni->rip_dest, "\n\t ", remaining);
}
} else if (family != BSD_AFNUM_INET && family != 0) {
- printf("\n\t AFI %s", tok2str(bsd_af_values, "Unknown (%u)", family));
- print_unknown_data(gndo,(u_int8_t *)&ni->rip_tag,"\n\t ",RIP_ROUTELEN-2);
+ ND_PRINT((ndo, "\n\t AFI %s", tok2str(bsd_af_values, "Unknown (%u)", family)));
+ print_unknown_data(ndo, (u_int8_t *)&ni->rip_tag, "\n\t ", RIP_ROUTELEN-2);
} else { /* BSD_AFNUM_INET or AFI 0 */
- printf("\n\t AFI %s, %15s/%-2d, tag 0x%04x, metric: %u, next-hop: ",
+ ND_PRINT((ndo, "\n\t AFI %s, %15s/%-2d, tag 0x%04x, metric: %u, next-hop: ",
tok2str(bsd_af_values, "%u", family),
ipaddr_string(&ni->rip_dest),
mask2plen(EXTRACT_32BITS(&ni->rip_dest_mask)),
EXTRACT_16BITS(&ni->rip_tag),
- EXTRACT_32BITS(&ni->rip_metric));
+ EXTRACT_32BITS(&ni->rip_metric)));
if (EXTRACT_32BITS(&ni->rip_router))
- printf("%s", ipaddr_string(&ni->rip_router));
- else
- printf("self");
+ ND_PRINT((ndo, "%s", ipaddr_string(&ni->rip_router)));
+ else
+ ND_PRINT((ndo, "self"));
}
return sizeof (*ni);
}
void
-rip_print(const u_char *dat, u_int length)
+rip_print(netdissect_options *ndo,
+ const u_char *dat, u_int length)
{
register const struct rip *rp;
register const struct rip_netinfo *ni;
register u_int i, j;
- if (snapend < dat) {
- printf(" %s", tstr);
+ if (ndo->ndo_snapend < dat) {
+ ND_PRINT((ndo, " %s", tstr));
return;
}
- i = snapend - dat;
+ i = ndo->ndo_snapend - dat;
if (i > length)
i = length;
if (i < sizeof(*rp)) {
- printf(" %s", tstr);
+ ND_PRINT((ndo, " %s", tstr));
return;
}
i -= sizeof(*rp);
rp = (struct rip *)dat;
- printf("%sRIPv%u",
- (vflag >= 1) ? "\n\t" : "",
- rp->rip_vers);
+ ND_PRINT((ndo, "%sRIPv%u",
+ (ndo->ndo_vflag >= 1) ? "\n\t" : "",
+ rp->rip_vers));
switch (rp->rip_vers) {
case 0:
@@ -210,38 +213,38 @@ rip_print(const u_char *dat, u_int length)
*
* so perhaps we should just dump the packet, in hex.
*/
- print_unknown_data(gndo,(u_int8_t *)&rp->rip_cmd,"\n\t",length);
+ print_unknown_data(ndo, (u_int8_t *)&rp->rip_cmd, "\n\t", length);
break;
default:
/* dump version and lets see if we know the commands name*/
- printf(", %s, length: %u",
+ ND_PRINT((ndo, ", %s, length: %u",
tok2str(rip_cmd_values,
"unknown command (%u)",
rp->rip_cmd),
- length);
+ length));
- if (vflag < 1)
+ if (ndo->ndo_vflag < 1)
return;
switch (rp->rip_cmd) {
case RIPCMD_REQUEST:
case RIPCMD_RESPONSE:
j = length / sizeof(*ni);
- printf(", routes: %u%s", j, rp->rip_vers == 2 ? " or less" : "");
+ ND_PRINT((ndo, ", routes: %u%s", j, rp->rip_vers == 2 ? " or less" : ""));
ni = (struct rip_netinfo *)(rp + 1);
for (; i >= sizeof(*ni); ++ni) {
if (rp->rip_vers == 1)
{
- rip_entry_print_v1(ni);
+ rip_entry_print_v1(ndo, ni);
i -= sizeof(*ni);
}
else if (rp->rip_vers == 2)
- i -= rip_entry_print_v2(ni, i);
+ i -= rip_entry_print_v2(ndo, ni, i);
else
break;
}
if (i)
- printf("%s", tstr);
+ ND_PRINT((ndo, "%s", tstr));
break;
case RIPCMD_TRACEOFF:
@@ -252,15 +255,15 @@ rip_print(const u_char *dat, u_int length)
case RIPCMD_TRACEON:
/* fall through */
default:
- if (vflag <= 1) {
- if(!print_unknown_data(gndo,(u_int8_t *)rp,"\n\t",length))
+ if (ndo->ndo_vflag <= 1) {
+ if(!print_unknown_data(ndo, (u_int8_t *)rp, "\n\t", length))
return;
}
break;
}
/* do we want to see an additionally hexdump ? */
- if (vflag> 1) {
- if(!print_unknown_data(gndo,(u_int8_t *)rp,"\n\t",length))
+ if (ndo->ndo_vflag> 1) {
+ if(!print_unknown_data(ndo, (u_int8_t *)rp, "\n\t", length))
return;
}
}
diff --git a/print-tcp.c b/print-tcp.c
index 34ea9ae3..6773f969 100644
--- a/print-tcp.c
+++ b/print-tcp.c
@@ -675,7 +675,7 @@ tcp_print(register const u_char *bp, register u_int length,
} else if (sport == BGP_PORT || dport == BGP_PORT)
bgp_print(bp, length);
else if (sport == PPTP_PORT || dport == PPTP_PORT)
- pptp_print(bp);
+ pptp_print(gndo, bp);
#ifdef TCPDUMP_DO_SMB
else if (sport == NETBIOS_SSN_PORT || dport == NETBIOS_SSN_PORT)
nbt_tcp_print(bp, length);
@@ -700,7 +700,7 @@ tcp_print(register const u_char *bp, register u_int length,
rpki_rtr_print(gndo, bp, length);
}
else if (length > 0 && (sport == LDP_PORT || dport == LDP_PORT)) {
- ldp_print(bp, length);
+ ldp_print(gndo, bp, length);
}
else if ((sport == NFS_PORT || dport == NFS_PORT) &&
length >= 4 && TTEST2(*bp, 4)) {
diff --git a/print-udp.c b/print-udp.c
index 4079cb19..33d861a1 100644
--- a/print-udp.c
+++ b/print-udp.c
@@ -473,7 +473,7 @@ udp_print(netdissect_options *ndo, register const u_char *bp, u_int length,
case PT_PGM:
case PT_PGM_ZMTP1:
udpipaddr_print(ndo, ip, sport, dport);
- pgm_print(cp, length, bp2);
+ pgm_print(ndo, cp, length, bp2);
break;
case PT_LMP:
udpipaddr_print(ndo, ip, sport, dport);
@@ -574,7 +574,7 @@ udp_print(netdissect_options *ndo, register const u_char *bp, u_int length,
else if (ISPORT(IPPORT_BOOTPC) || ISPORT(IPPORT_BOOTPS))
bootp_print((const u_char *)(up + 1), length);
else if (ISPORT(RIP_PORT))
- rip_print((const u_char *)(up + 1), length);
+ rip_print(ndo, (const u_char *)(up + 1), length);
else if (ISPORT(AODV_PORT))
aodv_print((const u_char *)(up + 1), length,
#ifdef INET6
@@ -643,7 +643,7 @@ udp_print(netdissect_options *ndo, register const u_char *bp, u_int length,
else if (ISPORT(LWRES_PORT))
lwres_print((const u_char *)(up + 1), length);
else if (ISPORT(LDP_PORT))
- ldp_print((const u_char *)(up + 1), length);
+ ldp_print(ndo, (const u_char *)(up + 1), length);
else if (ISPORT(OLSR_PORT))
olsr_print((const u_char *)(up + 1), length,
#if INET6
@@ -663,11 +663,11 @@ udp_print(netdissect_options *ndo, register const u_char *bp, u_int length,
else if (ISPORT(SFLOW_PORT))
sflow_print((const u_char *)(up + 1), length);
else if (dport == LWAPP_CONTROL_PORT)
- lwapp_control_print((const u_char *)(up + 1), length, 1);
+ lwapp_control_print(ndo, (const u_char *)(up + 1), length, 1);
else if (sport == LWAPP_CONTROL_PORT)
- lwapp_control_print((const u_char *)(up + 1), length, 0);
+ lwapp_control_print(ndo, (const u_char *)(up + 1), length, 0);
else if (ISPORT(LWAPP_DATA_PORT))
- lwapp_data_print((const u_char *)(up + 1), length);
+ lwapp_data_print(ndo, (const u_char *)(up + 1), length);
else if (ISPORT(SIP_PORT))
sip_print((const u_char *)(up + 1), length);
else if (ISPORT(SYSLOG_PORT))