* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
+/* \summary: DECnet printer */
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#include <tcpdump-stdinc.h>
+#include <netdissect-stdinc.h>
struct mbuf;
struct rtentry;
#include <string.h>
#include "extract.h"
-#include "interface.h"
+#include "netdissect.h"
#include "addrtoname.h"
static const char tstr[] = "[|decnet]";
-#ifndef WIN32
+#ifndef _WIN32
typedef uint8_t byte[1]; /* single byte field */
#else
/*
*/
typedef unsigned char Byte[1]; /* single byte field */
#define byte Byte
-#endif /* WIN32 */
+#endif /* _WIN32 */
typedef uint8_t word[2]; /* 2 byte field */
typedef uint8_t longword[4]; /* 4 bytes field */
#define COS_NONE 0 /* no flow control */
#define COS_SEGMENT 04 /* segment flow control */
#define COS_MESSAGE 010 /* message flow control */
-#define COS_CRYPTSER 020 /* cryptographic services requested */
#define COS_DEFAULT 1 /* default value for field */
#define COI_MASK 3 /* mask for version field */
static int print_elist(const char *, u_int);
static int print_nsp(netdissect_options *, const u_char *, u_int);
static void print_reason(netdissect_options *, int);
-#ifdef PRINT_NSPDATA
-static void pdata(netdissect_options *, u_char *, u_int);
-#endif
#ifndef HAVE_NETDNET_DNETDB_H_DNET_HTOA
extern char *dnet_htoa(struct dn_naddr *);
}
ND_TCHECK2(*ap, sizeof(short));
- pktlen = EXTRACT_LE_16BITS(ap);
+ pktlen = EXTRACT_LE_U_2(ap);
if (pktlen < sizeof(struct shorthdr)) {
ND_PRINT((ndo, "%s", tstr));
return;
}
length = pktlen;
- rhp = (const union routehdr *)&(ap[sizeof(short)]);
+ rhp = (const union routehdr *)(ap + sizeof(short));
ND_TCHECK(rhp->rh_short.sh_flags);
- mflags = EXTRACT_LE_8BITS(rhp->rh_short.sh_flags);
+ mflags = EXTRACT_U_1(rhp->rh_short.sh_flags);
if (mflags & RMF_PAD) {
/* pad bytes of some sort in front of message */
ap += padlen;
length -= padlen;
caplen -= padlen;
- rhp = (const union routehdr *)&(ap[sizeof(short)]);
- mflags = EXTRACT_LE_8BITS(rhp->rh_short.sh_flags);
+ rhp = (const union routehdr *)(ap + sizeof(short));
+ ND_TCHECK(rhp->rh_short.sh_flags);
+ mflags = EXTRACT_U_1(rhp->rh_short.sh_flags);
}
if (mflags & RMF_FVER) {
}
ND_TCHECK(rhp->rh_long);
dst =
- EXTRACT_LE_16BITS(rhp->rh_long.lg_dst.dne_remote.dne_nodeaddr);
+ EXTRACT_LE_U_2(rhp->rh_long.lg_dst.dne_remote.dne_nodeaddr);
src =
- EXTRACT_LE_16BITS(rhp->rh_long.lg_src.dne_remote.dne_nodeaddr);
- hops = EXTRACT_LE_8BITS(rhp->rh_long.lg_visits);
- nspp = &(ap[sizeof(short) + sizeof(struct longhdr)]);
+ EXTRACT_LE_U_2(rhp->rh_long.lg_src.dne_remote.dne_nodeaddr);
+ hops = EXTRACT_U_1(rhp->rh_long.lg_visits);
+ nspp = ap + sizeof(short) + sizeof(struct longhdr);
nsplen = length - sizeof(struct longhdr);
break;
case RMF_SHORT:
ND_TCHECK(rhp->rh_short);
- dst = EXTRACT_LE_16BITS(rhp->rh_short.sh_dst);
- src = EXTRACT_LE_16BITS(rhp->rh_short.sh_src);
- hops = (EXTRACT_LE_8BITS(rhp->rh_short.sh_visits) & VIS_MASK)+1;
- nspp = &(ap[sizeof(short) + sizeof(struct shorthdr)]);
+ dst = EXTRACT_LE_U_2(rhp->rh_short.sh_dst);
+ src = EXTRACT_LE_U_2(rhp->rh_short.sh_src);
+ hops = (EXTRACT_U_1(rhp->rh_short.sh_visits) & VIS_MASK)+1;
+ nspp = ap + sizeof(short) + sizeof(struct shorthdr);
nsplen = length - sizeof(struct shorthdr);
break;
default:
register const union routehdr *rhp, u_int length,
u_int caplen)
{
- int mflags = EXTRACT_LE_8BITS(rhp->rh_short.sh_flags);
+ /* Our caller has already checked for mflags */
+ int mflags = EXTRACT_U_1(rhp->rh_short.sh_flags);
register const union controlmsg *cmp = (const union controlmsg *)rhp;
int src, dst, info, blksize, eco, ueco, hello, other, vers;
etheraddr srcea, rtea;
if (length < sizeof(struct initmsg))
goto trunc;
ND_TCHECK(cmp->cm_init);
- src = EXTRACT_LE_16BITS(cmp->cm_init.in_src);
- info = EXTRACT_LE_8BITS(cmp->cm_init.in_info);
- blksize = EXTRACT_LE_16BITS(cmp->cm_init.in_blksize);
- vers = EXTRACT_LE_8BITS(cmp->cm_init.in_vers);
- eco = EXTRACT_LE_8BITS(cmp->cm_init.in_eco);
- ueco = EXTRACT_LE_8BITS(cmp->cm_init.in_ueco);
- hello = EXTRACT_LE_16BITS(cmp->cm_init.in_hello);
+ src = EXTRACT_LE_U_2(cmp->cm_init.in_src);
+ info = EXTRACT_U_1(cmp->cm_init.in_info);
+ blksize = EXTRACT_LE_U_2(cmp->cm_init.in_blksize);
+ vers = EXTRACT_U_1(cmp->cm_init.in_vers);
+ eco = EXTRACT_U_1(cmp->cm_init.in_eco);
+ ueco = EXTRACT_U_1(cmp->cm_init.in_ueco);
+ hello = EXTRACT_LE_U_2(cmp->cm_init.in_hello);
print_t_info(ndo, info);
ND_PRINT((ndo,
"src %sblksize %d vers %d eco %d ueco %d hello %d",
if (length < sizeof(struct verifmsg))
goto trunc;
ND_TCHECK(cmp->cm_ver);
- src = EXTRACT_LE_16BITS(cmp->cm_ver.ve_src);
- other = EXTRACT_LE_8BITS(cmp->cm_ver.ve_fcnval);
+ src = EXTRACT_LE_U_2(cmp->cm_ver.ve_src);
+ other = EXTRACT_U_1(cmp->cm_ver.ve_fcnval);
ND_PRINT((ndo, "src %s fcnval %o", dnaddr_string(ndo, src), other));
ret = 1;
break;
if (length < sizeof(struct testmsg))
goto trunc;
ND_TCHECK(cmp->cm_test);
- src = EXTRACT_LE_16BITS(cmp->cm_test.te_src);
- other = EXTRACT_LE_8BITS(cmp->cm_test.te_data);
+ src = EXTRACT_LE_U_2(cmp->cm_test.te_src);
+ other = EXTRACT_U_1(cmp->cm_test.te_data);
ND_PRINT((ndo, "src %s data %o", dnaddr_string(ndo, src), other));
ret = 1;
break;
if (length < sizeof(struct l1rout))
goto trunc;
ND_TCHECK(cmp->cm_l1rou);
- src = EXTRACT_LE_16BITS(cmp->cm_l1rou.r1_src);
+ src = EXTRACT_LE_U_2(cmp->cm_l1rou.r1_src);
ND_PRINT((ndo, "src %s ", dnaddr_string(ndo, src)));
ret = print_l1_routes(ndo, &(rhpx[sizeof(struct l1rout)]),
length - sizeof(struct l1rout));
if (length < sizeof(struct l2rout))
goto trunc;
ND_TCHECK(cmp->cm_l2rout);
- src = EXTRACT_LE_16BITS(cmp->cm_l2rout.r2_src);
+ src = EXTRACT_LE_U_2(cmp->cm_l2rout.r2_src);
ND_PRINT((ndo, "src %s ", dnaddr_string(ndo, src)));
ret = print_l2_routes(ndo, &(rhpx[sizeof(struct l2rout)]),
length - sizeof(struct l2rout));
if (length < sizeof(struct rhellomsg))
goto trunc;
ND_TCHECK(cmp->cm_rhello);
- vers = EXTRACT_LE_8BITS(cmp->cm_rhello.rh_vers);
- eco = EXTRACT_LE_8BITS(cmp->cm_rhello.rh_eco);
- ueco = EXTRACT_LE_8BITS(cmp->cm_rhello.rh_ueco);
+ vers = EXTRACT_U_1(cmp->cm_rhello.rh_vers);
+ eco = EXTRACT_U_1(cmp->cm_rhello.rh_eco);
+ ueco = EXTRACT_U_1(cmp->cm_rhello.rh_ueco);
memcpy((char *)&srcea, (const char *)&(cmp->cm_rhello.rh_src),
sizeof(srcea));
- src = EXTRACT_LE_16BITS(srcea.dne_remote.dne_nodeaddr);
- info = EXTRACT_LE_8BITS(cmp->cm_rhello.rh_info);
- blksize = EXTRACT_LE_16BITS(cmp->cm_rhello.rh_blksize);
- priority = EXTRACT_LE_8BITS(cmp->cm_rhello.rh_priority);
- hello = EXTRACT_LE_16BITS(cmp->cm_rhello.rh_hello);
+ src = EXTRACT_LE_U_2(srcea.dne_remote.dne_nodeaddr);
+ info = EXTRACT_U_1(cmp->cm_rhello.rh_info);
+ blksize = EXTRACT_LE_U_2(cmp->cm_rhello.rh_blksize);
+ priority = EXTRACT_U_1(cmp->cm_rhello.rh_priority);
+ hello = EXTRACT_LE_U_2(cmp->cm_rhello.rh_hello);
print_i_info(ndo, info);
ND_PRINT((ndo,
"vers %d eco %d ueco %d src %s blksize %d pri %d hello %d",
if (length < sizeof(struct ehellomsg))
goto trunc;
ND_TCHECK(cmp->cm_ehello);
- vers = EXTRACT_LE_8BITS(cmp->cm_ehello.eh_vers);
- eco = EXTRACT_LE_8BITS(cmp->cm_ehello.eh_eco);
- ueco = EXTRACT_LE_8BITS(cmp->cm_ehello.eh_ueco);
+ vers = EXTRACT_U_1(cmp->cm_ehello.eh_vers);
+ eco = EXTRACT_U_1(cmp->cm_ehello.eh_eco);
+ ueco = EXTRACT_U_1(cmp->cm_ehello.eh_ueco);
memcpy((char *)&srcea, (const char *)&(cmp->cm_ehello.eh_src),
sizeof(srcea));
- src = EXTRACT_LE_16BITS(srcea.dne_remote.dne_nodeaddr);
- info = EXTRACT_LE_8BITS(cmp->cm_ehello.eh_info);
- blksize = EXTRACT_LE_16BITS(cmp->cm_ehello.eh_blksize);
+ src = EXTRACT_LE_U_2(srcea.dne_remote.dne_nodeaddr);
+ info = EXTRACT_U_1(cmp->cm_ehello.eh_info);
+ blksize = EXTRACT_LE_U_2(cmp->cm_ehello.eh_blksize);
/*seed*/
memcpy((char *)&rtea, (const char *)&(cmp->cm_ehello.eh_router),
sizeof(rtea));
- dst = EXTRACT_LE_16BITS(rtea.dne_remote.dne_nodeaddr);
- hello = EXTRACT_LE_16BITS(cmp->cm_ehello.eh_hello);
- other = EXTRACT_LE_8BITS(cmp->cm_ehello.eh_data);
+ dst = EXTRACT_LE_U_2(rtea.dne_remote.dne_nodeaddr);
+ hello = EXTRACT_LE_U_2(cmp->cm_ehello.eh_hello);
+ other = EXTRACT_U_1(cmp->cm_ehello.eh_data);
print_i_info(ndo, info);
ND_PRINT((ndo,
"vers %d eco %d ueco %d src %s blksize %d rtr %s hello %d data %o",
/* The last short is a checksum */
while (len > (3 * sizeof(short))) {
ND_TCHECK2(*rp, 3 * sizeof(short));
- count = EXTRACT_LE_16BITS(rp);
+ count = EXTRACT_LE_U_2(rp);
if (count > 1024)
return (1); /* seems to be bogus from here on */
rp += sizeof(short);
len -= sizeof(short);
- id = EXTRACT_LE_16BITS(rp);
+ id = EXTRACT_LE_U_2(rp);
rp += sizeof(short);
len -= sizeof(short);
- info = EXTRACT_LE_16BITS(rp);
+ info = EXTRACT_LE_U_2(rp);
rp += sizeof(short);
len -= sizeof(short);
ND_PRINT((ndo, "{ids %d-%d cost %d hops %d} ", id, id + count,
/* The last short is a checksum */
while (len > (3 * sizeof(short))) {
ND_TCHECK2(*rp, 3 * sizeof(short));
- count = EXTRACT_LE_16BITS(rp);
+ count = EXTRACT_LE_U_2(rp);
if (count > 1024)
return (1); /* seems to be bogus from here on */
rp += sizeof(short);
len -= sizeof(short);
- area = EXTRACT_LE_16BITS(rp);
+ area = EXTRACT_LE_U_2(rp);
rp += sizeof(short);
len -= sizeof(short);
- info = EXTRACT_LE_16BITS(rp);
+ info = EXTRACT_LE_U_2(rp);
rp += sizeof(short);
len -= sizeof(short);
ND_PRINT((ndo, "{areas %d-%d cost %d hops %d} ", area, area + count,
if (nsplen < sizeof(struct nsphdr))
goto trunc;
ND_TCHECK(*nsphp);
- flags = EXTRACT_LE_8BITS(nsphp->nh_flags);
- dst = EXTRACT_LE_16BITS(nsphp->nh_dst);
- src = EXTRACT_LE_16BITS(nsphp->nh_src);
+ flags = EXTRACT_U_1(nsphp->nh_flags);
+ dst = EXTRACT_LE_U_2(nsphp->nh_dst);
+ src = EXTRACT_LE_U_2(nsphp->nh_src);
switch (flags & NSP_TYPEMASK) {
case MFT_DATA:
{
const struct seghdr *shp = (const struct seghdr *)nspp;
int ack;
-#ifdef PRINT_NSPDATA
- const u_char *dp;
-#endif
u_int data_off = sizeof(struct minseghdr);
if (nsplen < data_off)
goto trunc;
ND_TCHECK(shp->sh_seq[0]);
- ack = EXTRACT_LE_16BITS(shp->sh_seq[0]);
+ ack = EXTRACT_LE_U_2(shp->sh_seq[0]);
if (ack & SGQ_ACK) { /* acknum field */
if ((ack & SGQ_NAK) == SGQ_NAK)
ND_PRINT((ndo, "nak %d ", ack & SGQ_MASK));
if (nsplen < data_off)
goto trunc;
ND_TCHECK(shp->sh_seq[1]);
- ack = EXTRACT_LE_16BITS(shp->sh_seq[1]);
+ ack = EXTRACT_LE_U_2(shp->sh_seq[1]);
if (ack & SGQ_OACK) { /* ackoth field */
if ((ack & SGQ_ONAK) == SGQ_ONAK)
ND_PRINT((ndo, "onak %d ", ack & SGQ_MASK));
if (nsplen < data_off)
goto trunc;
ND_TCHECK(shp->sh_seq[2]);
- ack = EXTRACT_LE_16BITS(shp->sh_seq[2]);
+ ack = EXTRACT_LE_U_2(shp->sh_seq[2]);
}
}
ND_PRINT((ndo, "seg %d ", ack & SGQ_MASK));
-#ifdef PRINT_NSPDATA
- if (nsplen > data_off) {
- dp = &(nspp[data_off]);
- ND_TCHECK2(*dp, nsplen - data_off);
- pdata(ndo, dp, nsplen - data_off);
- }
-#endif
}
break;
case MFS_ILS+MFS_INT:
{
const struct seghdr *shp = (const struct seghdr *)nspp;
int ack;
-#ifdef PRINT_NSPDATA
- const u_char *dp;
-#endif
u_int data_off = sizeof(struct minseghdr);
if (nsplen < data_off)
goto trunc;
ND_TCHECK(shp->sh_seq[0]);
- ack = EXTRACT_LE_16BITS(shp->sh_seq[0]);
+ ack = EXTRACT_LE_U_2(shp->sh_seq[0]);
if (ack & SGQ_ACK) { /* acknum field */
if ((ack & SGQ_NAK) == SGQ_NAK)
ND_PRINT((ndo, "nak %d ", ack & SGQ_MASK));
if (nsplen < data_off)
goto trunc;
ND_TCHECK(shp->sh_seq[1]);
- ack = EXTRACT_LE_16BITS(shp->sh_seq[1]);
+ ack = EXTRACT_LE_U_2(shp->sh_seq[1]);
if (ack & SGQ_OACK) { /* ackdat field */
if ((ack & SGQ_ONAK) == SGQ_ONAK)
ND_PRINT((ndo, "nakdat %d ", ack & SGQ_MASK));
if (nsplen < data_off)
goto trunc;
ND_TCHECK(shp->sh_seq[2]);
- ack = EXTRACT_LE_16BITS(shp->sh_seq[2]);
+ ack = EXTRACT_LE_U_2(shp->sh_seq[2]);
}
}
ND_PRINT((ndo, "seg %d ", ack & SGQ_MASK));
-#ifdef PRINT_NSPDATA
- if (nsplen > data_off) {
- dp = &(nspp[data_off]);
- ND_TCHECK2(*dp, nsplen - data_off);
- pdata(ndo, dp, nsplen - data_off);
- }
-#endif
}
break;
case MFS_ILS:
{
const struct seghdr *shp = (const struct seghdr *)nspp;
const struct lsmsg *lsmp =
- (const struct lsmsg *)&(nspp[sizeof(struct seghdr)]);
+ (const struct lsmsg *)(nspp + sizeof(struct seghdr));
int ack;
int lsflags, fcval;
if (nsplen < sizeof(struct seghdr) + sizeof(struct lsmsg))
goto trunc;
ND_TCHECK(shp->sh_seq[0]);
- ack = EXTRACT_LE_16BITS(shp->sh_seq[0]);
+ ack = EXTRACT_LE_U_2(shp->sh_seq[0]);
if (ack & SGQ_ACK) { /* acknum field */
if ((ack & SGQ_NAK) == SGQ_NAK)
ND_PRINT((ndo, "nak %d ", ack & SGQ_MASK));
else
ND_PRINT((ndo, "ack %d ", ack & SGQ_MASK));
ND_TCHECK(shp->sh_seq[1]);
- ack = EXTRACT_LE_16BITS(shp->sh_seq[1]);
+ ack = EXTRACT_LE_U_2(shp->sh_seq[1]);
if (ack & SGQ_OACK) { /* ackdat field */
if ((ack & SGQ_ONAK) == SGQ_ONAK)
ND_PRINT((ndo, "nakdat %d ", ack & SGQ_MASK));
else
ND_PRINT((ndo, "ackdat %d ", ack & SGQ_MASK));
ND_TCHECK(shp->sh_seq[2]);
- ack = EXTRACT_LE_16BITS(shp->sh_seq[2]);
+ ack = EXTRACT_LE_U_2(shp->sh_seq[2]);
}
}
ND_PRINT((ndo, "seg %d ", ack & SGQ_MASK));
ND_TCHECK(*lsmp);
- lsflags = EXTRACT_LE_8BITS(lsmp->ls_lsflags);
- fcval = EXTRACT_LE_8BITS(lsmp->ls_fcval);
+ lsflags = EXTRACT_U_1(lsmp->ls_lsflags);
+ fcval = EXTRACT_U_1(lsmp->ls_fcval);
switch (lsflags & LSI_MASK) {
case LSI_DATA:
ND_PRINT((ndo, "dat seg count %d ", fcval));
if (nsplen < sizeof(struct ackmsg))
goto trunc;
ND_TCHECK(*amp);
- ack = EXTRACT_LE_16BITS(amp->ak_acknum[0]);
+ ack = EXTRACT_LE_U_2(amp->ak_acknum[0]);
if (ack & SGQ_ACK) { /* acknum field */
if ((ack & SGQ_NAK) == SGQ_NAK)
ND_PRINT((ndo, "nak %d ", ack & SGQ_MASK));
else
ND_PRINT((ndo, "ack %d ", ack & SGQ_MASK));
- ack = EXTRACT_LE_16BITS(amp->ak_acknum[1]);
+ ack = EXTRACT_LE_U_2(amp->ak_acknum[1]);
if (ack & SGQ_OACK) { /* ackoth field */
if ((ack & SGQ_ONAK) == SGQ_ONAK)
ND_PRINT((ndo, "onak %d ", ack & SGQ_MASK));
if (nsplen < sizeof(struct ackmsg))
goto trunc;
ND_TCHECK(*amp);
- ack = EXTRACT_LE_16BITS(amp->ak_acknum[0]);
+ ack = EXTRACT_LE_U_2(amp->ak_acknum[0]);
if (ack & SGQ_ACK) { /* acknum field */
if ((ack & SGQ_NAK) == SGQ_NAK)
ND_PRINT((ndo, "nak %d ", ack & SGQ_MASK));
else
ND_PRINT((ndo, "ack %d ", ack & SGQ_MASK));
ND_TCHECK(amp->ak_acknum[1]);
- ack = EXTRACT_LE_16BITS(amp->ak_acknum[1]);
+ ack = EXTRACT_LE_U_2(amp->ak_acknum[1]);
if (ack & SGQ_OACK) { /* ackdat field */
if ((ack & SGQ_ONAK) == SGQ_ONAK)
ND_PRINT((ndo, "nakdat %d ", ack & SGQ_MASK));
{
const struct cimsg *cimp = (const struct cimsg *)nspp;
int services, info, segsize;
-#ifdef PRINT_NSPDATA
- const u_char *dp;
-#endif
if (nsplen < sizeof(struct cimsg))
goto trunc;
ND_TCHECK(*cimp);
- services = EXTRACT_LE_8BITS(cimp->ci_services);
- info = EXTRACT_LE_8BITS(cimp->ci_info);
- segsize = EXTRACT_LE_16BITS(cimp->ci_segsize);
+ services = EXTRACT_U_1(cimp->ci_services);
+ info = EXTRACT_U_1(cimp->ci_info);
+ segsize = EXTRACT_LE_U_2(cimp->ci_segsize);
switch (services & COS_MASK) {
case COS_NONE:
case COS_MESSAGE:
ND_PRINT((ndo, "msg "));
break;
- case COS_CRYPTSER:
- ND_PRINT((ndo, "crypt "));
- break;
}
switch (info & COI_MASK) {
case COI_32:
break;
}
ND_PRINT((ndo, "segsize %d ", segsize));
-#ifdef PRINT_NSPDATA
- if (nsplen > sizeof(struct cimsg)) {
- dp = &(nspp[sizeof(struct cimsg)]);
- ND_TCHECK2(*dp, nsplen - sizeof(struct cimsg));
- pdata(ndo, dp, nsplen - sizeof(struct cimsg));
- }
-#endif
}
break;
case MFS_CC:
const struct ccmsg *ccmp = (const struct ccmsg *)nspp;
int services, info;
u_int segsize, optlen;
-#ifdef PRINT_NSPDATA
- const u_char *dp;
-#endif
if (nsplen < sizeof(struct ccmsg))
goto trunc;
ND_TCHECK(*ccmp);
- services = EXTRACT_LE_8BITS(ccmp->cc_services);
- info = EXTRACT_LE_8BITS(ccmp->cc_info);
- segsize = EXTRACT_LE_16BITS(ccmp->cc_segsize);
- optlen = EXTRACT_LE_8BITS(ccmp->cc_optlen);
+ services = EXTRACT_U_1(ccmp->cc_services);
+ info = EXTRACT_U_1(ccmp->cc_info);
+ segsize = EXTRACT_LE_U_2(ccmp->cc_segsize);
+ optlen = EXTRACT_U_1(ccmp->cc_optlen);
switch (services & COS_MASK) {
case COS_NONE:
case COS_MESSAGE:
ND_PRINT((ndo, "msg "));
break;
- case COS_CRYPTSER:
- ND_PRINT((ndo, "crypt "));
- break;
}
switch (info & COI_MASK) {
case COI_32:
ND_PRINT((ndo, "segsize %d ", segsize));
if (optlen) {
ND_PRINT((ndo, "optlen %d ", optlen));
-#ifdef PRINT_NSPDATA
- if (optlen > nsplen - sizeof(struct ccmsg))
- goto trunc;
- dp = &(nspp[sizeof(struct ccmsg)]);
- ND_TCHECK2(*dp, optlen);
- pdata(ndo, dp, optlen);
-#endif
}
}
break;
const struct dimsg *dimp = (const struct dimsg *)nspp;
int reason;
u_int optlen;
-#ifdef PRINT_NSPDATA
- const u_char *dp;
-#endif
if (nsplen < sizeof(struct dimsg))
goto trunc;
ND_TCHECK(*dimp);
- reason = EXTRACT_LE_16BITS(dimp->di_reason);
- optlen = EXTRACT_LE_8BITS(dimp->di_optlen);
+ reason = EXTRACT_LE_U_2(dimp->di_reason);
+ optlen = EXTRACT_U_1(dimp->di_optlen);
print_reason(ndo, reason);
if (optlen) {
ND_PRINT((ndo, "optlen %d ", optlen));
-#ifdef PRINT_NSPDATA
- if (optlen > nsplen - sizeof(struct dimsg))
- goto trunc;
- dp = &(nspp[sizeof(struct dimsg)]);
- ND_TCHECK2(*dp, optlen);
- pdata(ndo, dp, optlen);
-#endif
}
}
break;
int reason;
ND_TCHECK(*dcmp);
- reason = EXTRACT_LE_16BITS(dcmp->dc_reason);
+ reason = EXTRACT_LE_U_2(dcmp->dc_reason);
print_reason(ndo, reason);
}
}
const char *
-dnnum_string(u_short dnaddr)
+dnnum_string(netdissect_options *ndo, u_short dnaddr)
{
char *str;
size_t siz;
str = (char *)malloc(siz = sizeof("00.0000"));
if (str == NULL)
- error("dnnum_string: malloc");
+ (*ndo->ndo_error)(ndo, "dnnum_string: malloc");
snprintf(str, siz, "%d.%d", area, node);
return(str);
}
const char *
-dnname_string(u_short dnaddr)
+dnname_string(netdissect_options *ndo, u_short dnaddr)
{
#ifdef HAVE_DNET_HTOA
struct dn_naddr dna;
if(dnname != NULL)
return (strdup(dnname));
else
- return(dnnum_string(dnaddr));
+ return(dnnum_string(ndo, dnaddr));
#else
- return(dnnum_string(dnaddr)); /* punt */
+ return(dnnum_string(ndo, dnaddr)); /* punt */
#endif
}
-
-#ifdef PRINT_NSPDATA
-static void
-pdata(netdissect_options *ndo,
- u_char *dp, u_int maxlen)
-{
- char c;
- u_int x = maxlen;
-
- while (x-- > 0) {
- c = *dp++;
- safeputchar(ndo, c);
- }
-}
-#endif