/* Bail if "var" was not captured */
#define TCHECK(var) TCHECK2(var, sizeof(var))
-extern int fn_print(const u_char *, const u_char *);
-extern int fn_printn(const u_char *, u_int, const u_char *);
-extern int fn_printzp(const u_char *, u_int, const u_char *);
extern int mask2plen(u_int32_t);
extern const char *tok2strary_internal(const char **, int, const char *, int);
#define tok2strary(a,f,i) tok2strary_internal(a, sizeof(a)/sizeof(a[0]),f,i)
extern void ts_print(netdissect_options *, const struct timeval *);
extern void relts_print(netdissect_options *, int);
-extern int fn_print(const u_char *, const u_char *);
-extern int fn_printn(const u_char *, u_int, const u_char *);
+extern int fn_print(netdissect_options *, const u_char *, const u_char *);
+extern int fn_printn(netdissect_options *, const u_char *, u_int, const u_char *);
+extern int fn_printzp(netdissect_options *, const u_char *, u_int, const u_char *);
extern const char *tok2str(const struct tok *, const char *, int);
#if 0
#define PRINT_SSID(p) \
if (p.ssid_present) { \
ND_PRINT((ndo, " (")); \
- fn_print(p.ssid.ssid, NULL); \
+ fn_print(ndo, p.ssid.ssid, NULL); \
ND_PRINT((ndo, ")")); \
}
ND_TCHECK2(bp->bp_sname[0], 1); /* check first char only */
if (*bp->bp_sname) {
ND_PRINT((ndo, "\n\t sname \""));
- if (fn_print(bp->bp_sname, ndo->ndo_snapend)) {
+ if (fn_print(ndo, bp->bp_sname, ndo->ndo_snapend)) {
ND_PRINT((ndo, "\""));
ND_PRINT((ndo, "%s", tstr + 1));
return;
ND_TCHECK2(bp->bp_file[0], 1); /* check first char only */
if (*bp->bp_file) {
ND_PRINT((ndo, "\n\t file \""));
- if (fn_print(bp->bp_file, ndo->ndo_snapend)) {
+ if (fn_print(ndo, bp->bp_file, ndo->ndo_snapend)) {
ND_PRINT((ndo, "\""));
ND_PRINT((ndo, "%s", tstr + 1));
return;
case 'a':
/* ascii strings */
ND_PRINT((ndo, "\""));
- if (fn_printn(bp, len, ndo->ndo_snapend)) {
+ if (fn_printn(ndo, bp, len, ndo->ndo_snapend)) {
ND_PRINT((ndo, "\""));
goto trunc;
}
ND_PRINT((ndo, "%u/%u ", *bp, *(bp+1)));
bp += 2;
ND_PRINT((ndo, "\""));
- if (fn_printn(bp, len - 3, ndo->ndo_snapend)) {
+ if (fn_printn(ndo, bp, len - 3, ndo->ndo_snapend)) {
ND_PRINT((ndo, "\""));
goto trunc;
}
len--;
if (type == 0) {
ND_PRINT((ndo, "\""));
- if (fn_printn(bp, len, ndo->ndo_snapend)) {
+ if (fn_printn(ndo, bp, len, ndo->ndo_snapend)) {
ND_PRINT((ndo, "\""));
goto trunc;
}
case AGENT_SUBOPTION_CIRCUIT_ID: /* fall through */
case AGENT_SUBOPTION_REMOTE_ID:
case AGENT_SUBOPTION_SUBSCRIBER_ID:
- fn_printn(bp, suboptlen, NULL);
+ fn_printn(ndo, bp, suboptlen, NULL);
break;
default:
if (!ndo->ndo_vflag)
ND_PRINT((ndo, ", Device-ID "));
ND_PRINT((ndo, "'"));
- fn_printn(tptr, len, NULL);
+ fn_printn(ndo, tptr, len, NULL);
ND_PRINT((ndo, "'"));
break;
case 0x02: /* Address */
break;
case 0x03: /* Port-ID */
ND_PRINT((ndo, "'"));
- fn_printn(tptr, len, NULL);
+ fn_printn(ndo, tptr, len, NULL);
ND_PRINT((ndo, "'"));
break;
case 0x04: /* Capabilities */
break;
case 0x06: /* Platform */
ND_PRINT((ndo, "'"));
- fn_printn(tptr, len, NULL);
+ fn_printn(ndo, tptr, len, NULL);
ND_PRINT((ndo, "'"));
break;
case 0x07: /* Prefixes */
break;
case 0x09: /* VTP Mgmt Domain - not documented */
ND_PRINT((ndo, "'"));
- fn_printn(tptr, len, NULL);
+ fn_printn(ndo, tptr, len, NULL);
ND_PRINT((ndo, "'"));
break;
case 0x0a: /* Native VLAN ID - not documented */
break;
case 0x14: /* System Name - not documented */
ND_PRINT((ndo, "'"));
- fn_printn(tptr, len, NULL);
+ fn_printn(ndo, tptr, len, NULL);
ND_PRINT((ndo, "'"));
break;
case 0x16: /* System Object ID - not documented */
ND_PRINT((ndo, "0x%02x", *(tptr)));
if (len > 1) {
ND_PRINT((ndo, "/"));
- fn_printn(tptr + 1, len - 1, NULL);
+ fn_printn(ndo, tptr + 1, len - 1, NULL);
}
break;
default:
return(NULL);
}
} else {
- if (fn_printn(cp, l, ndo->ndo_snapend))
+ if (fn_printn(ndo, cp, l, ndo->ndo_snapend))
return(NULL);
}
if (!ND_TTEST2(*cp, 1))
return (NULL);
i = *cp++;
- if (fn_printn(cp, i, ndo->ndo_snapend))
+ if (fn_printn(ndo, cp, i, ndo->ndo_snapend))
return (NULL);
return (cp + i);
}
case T_UNSPECA: /* One long string */
if (!ND_TTEST2(*cp, len))
return(NULL);
- if (fn_printn(cp, len, ndo->ndo_snapend))
+ if (fn_printn(ndo, cp, len, ndo->ndo_snapend))
return(NULL);
break;
relts_print(ndo, hp->hsrp_holdtime);
ND_PRINT((ndo, " priority=%d", hp->hsrp_priority));
ND_PRINT((ndo, " auth=\""));
- if (fn_printn(hp->hsrp_authdata, sizeof(hp->hsrp_authdata),
+ if (fn_printn(ndo, hp->hsrp_authdata, sizeof(hp->hsrp_authdata),
ndo->ndo_snapend)) {
ND_PRINT((ndo, "\""));
goto trunc;
for (i = 0; i < 8 && length > 0; i++) {
ND_TCHECK(ipx[0]);
ND_PRINT((ndo, " %s '", ipxsap_string(htons(EXTRACT_16BITS(&ipx[0])))));
- if (fn_printzp((u_char *)&ipx[1], 48, ndo->ndo_snapend)) {
+ if (fn_printzp(ndo, (u_char *)&ipx[1], 48, ndo->ndo_snapend)) {
ND_PRINT((ndo, "'"));
goto trunc;
}
/* Update 32-bit pointer (NFS filenames padded to 32-bit boundaries) */
dp += ((len + 3) & ~3) / sizeof(*dp);
ND_PRINT((ndo, "\""));
- if (fn_printn(cp, len, ndo->ndo_snapend)) {
+ if (fn_printn(ndo, cp, len, ndo->ndo_snapend)) {
ND_PRINT((ndo, "\""));
goto trunc;
}
break;
case PRIM_REF:
- if (fn_printn((u_char *)&(bp->refid), 4, ndo->ndo_snapend))
+ if (fn_printn(ndo, (u_char *)&(bp->refid), 4, ndo->ndo_snapend))
goto trunc;
break;
#endif
ND_PRINT((ndo, ", address %s, name \"",
ipaddr_string(ndo, msg_data)));
- fn_printn(msg_data + addr_size, name_entry_len, NULL);
+ fn_printn(ndo, msg_data + addr_size, name_entry_len, NULL);
ND_PRINT((ndo, "\""));
msg_data += addr_size + name_entry_len + name_entry_padding;
/* name */
ND_TCHECK2(*cp, OFP_MAX_PORT_NAME_LEN);
ND_PRINT((ndo, ", name '"));
- fn_print(cp, cp + OFP_MAX_PORT_NAME_LEN);
+ fn_print(ndo, cp, cp + OFP_MAX_PORT_NAME_LEN);
ND_PRINT((ndo, "'"));
cp += OFP_MAX_PORT_NAME_LEN;
/* mfr_desc */
ND_TCHECK2(*cp, DESC_STR_LEN);
ND_PRINT((ndo, "\n\t mfr_desc '"));
- fn_print(cp, cp + DESC_STR_LEN);
+ fn_print(ndo, cp, cp + DESC_STR_LEN);
ND_PRINT((ndo, "'"));
cp += DESC_STR_LEN;
/* hw_desc */
ND_TCHECK2(*cp, DESC_STR_LEN);
ND_PRINT((ndo, "\n\t hw_desc '"));
- fn_print(cp, cp + DESC_STR_LEN);
+ fn_print(ndo, cp, cp + DESC_STR_LEN);
ND_PRINT((ndo, "'"));
cp += DESC_STR_LEN;
/* sw_desc */
ND_TCHECK2(*cp, DESC_STR_LEN);
ND_PRINT((ndo, "\n\t sw_desc '"));
- fn_print(cp, cp + DESC_STR_LEN);
+ fn_print(ndo, cp, cp + DESC_STR_LEN);
ND_PRINT((ndo, "'"));
cp += DESC_STR_LEN;
/* serial_num */
ND_TCHECK2(*cp, SERIAL_NUM_LEN);
ND_PRINT((ndo, "\n\t serial_num '"));
- fn_print(cp, cp + SERIAL_NUM_LEN);
+ fn_print(ndo, cp, cp + SERIAL_NUM_LEN);
ND_PRINT((ndo, "'"));
cp += SERIAL_NUM_LEN;
/* dp_desc */
ND_TCHECK2(*cp, DESC_STR_LEN);
ND_PRINT((ndo, "\n\t dp_desc '"));
- fn_print(cp, cp + DESC_STR_LEN);
+ fn_print(ndo, cp, cp + DESC_STR_LEN);
ND_PRINT((ndo, "'"));
return cp + DESC_STR_LEN;
/* name */
ND_TCHECK2(*cp, OFP_MAX_TABLE_NAME_LEN);
ND_PRINT((ndo, ", name '"));
- fn_print(cp, cp + OFP_MAX_TABLE_NAME_LEN);
+ fn_print(ndo, cp, cp + OFP_MAX_TABLE_NAME_LEN);
ND_PRINT((ndo, "'"));
cp += OFP_MAX_TABLE_NAME_LEN;
/* wildcards */
/* RFC 1661 says this is intended to be human readable */
if (len > 8) {
ND_PRINT((ndo, "\n\t Message\n\t "));
- if (fn_printn(tptr + 4, len - 4, ndo->ndo_snapend))
+ if (fn_printn(ndo, tptr + 4, len - 4, ndo->ndo_snapend))
goto trunc;
}
break;
goto trunc; \
bp += sizeof(int32_t); \
ND_PRINT((ndo, " \"")); \
- if (fn_printn(bp, i, ndo->ndo_snapend)) \
+ if (fn_printn(ndo, bp, i, ndo->ndo_snapend)) \
goto trunc; \
ND_PRINT((ndo, "\"")); \
bp += ((i + sizeof(int32_t) - 1) / sizeof(int32_t)) * sizeof(int32_t); \
} \
s[(MAX)] = '\0'; \
ND_PRINT((ndo, " \"")); \
- fn_print(s, NULL); \
+ fn_print(ndo, s, NULL); \
ND_PRINT((ndo, "\"")); \
}
goto finish;
s += n;
ND_PRINT((ndo, " +{"));
- fn_print((u_char *)user, NULL);
+ fn_print(ndo, (u_char *)user, NULL);
ND_PRINT((ndo, " "));
ACLOUT(acl);
ND_PRINT((ndo, "}"));
goto finish;
s += n;
ND_PRINT((ndo, " -{"));
- fn_print((u_char *)user, NULL);
+ fn_print(ndo, (u_char *)user, NULL);
ND_PRINT((ndo, " "));
ACLOUT(acl);
ND_PRINT((ndo, "}"));
p = elem->data.str;
if (printable) {
ND_PRINT((ndo, "\""));
- if (fn_printn(p, asnlen, ndo->ndo_snapend)) {
+ if (fn_printn(ndo, p, asnlen, ndo->ndo_snapend)) {
ND_PRINT((ndo, "\""));
goto trunc;
}
/* Print filename or first option */
if (opcode != OACK)
ND_PRINT((ndo, "\""));
- i = fn_print(p, ndo->ndo_snapend);
+ i = fn_print(ndo, p, ndo->ndo_snapend);
if (opcode != OACK)
ND_PRINT((ndo, "\""));
p++;
if (*p != '\0') {
ND_PRINT((ndo, " "));
- fn_print(p, ndo->ndo_snapend);
+ fn_print(ndo, p, ndo->ndo_snapend);
}
}
ND_PRINT((ndo, " %s \"", tok2str(err2str, "tftp-err-#%d \"",
EXTRACT_16BITS(&tp->th_code))));
/* Print error message string */
- i = fn_print((const u_char *)tp->th_data, ndo->ndo_snapend);
+ i = fn_print(ndo, (const u_char *)tp->th_data, ndo->ndo_snapend);
ND_PRINT((ndo, "\""));
if (i)
goto trunc;
}
ND_TCHECK(tsp->tsp_name);
ND_PRINT((ndo, " name "));
- if (fn_print((u_char *)tsp->tsp_name, (u_char *)tsp->tsp_name + sizeof(tsp->tsp_name)))
+ if (fn_print(ndo, (u_char *)tsp->tsp_name, (u_char *)tsp->tsp_name + sizeof(tsp->tsp_name)))
goto trunc;
return;
if (version == 2 && auth_type == VRRP_AUTH_SIMPLE) { /* simple text password */
ND_TCHECK(bp[7]);
ND_PRINT((ndo, " auth \""));
- if (fn_printn(bp, 8, ndo->ndo_snapend)) {
+ if (fn_printn(ndo, bp, 8, ndo->ndo_snapend)) {
ND_PRINT((ndo, "\""));
goto trunc;
}
cp = (char *)(io + nid);
if ((u_char *)cp + len <= ndo->ndo_snapend) {
ND_PRINT((ndo, "\""));
- (void)fn_print((u_char *)cp, (u_char *)cp + len);
+ fn_print(ndo, (u_char *)cp, (u_char *)cp + len);
ND_PRINT((ndo, "\""));
}
* Return true if truncated.
*/
int
-fn_print(register const u_char *s, register const u_char *ep)
+fn_print(netdissect_options *ndo,
+ register const u_char *s, register const u_char *ep)
{
register int ret;
register u_char c;
}
if (!ND_ISASCII(c)) {
c = ND_TOASCII(c);
- putchar('M');
- putchar('-');
+ ND_PRINT((ndo, "M-"));
}
if (!ND_ISPRINT(c)) {
c ^= 0x40; /* DEL to ?, others to alpha */
- putchar('^');
+ ND_PRINT((ndo, "^"));
}
- putchar(c);
+ ND_PRINT((ndo, "%c", c));
}
return(ret);
}
* Return true if truncated.
*/
int
-fn_printn(register const u_char *s, register u_int n,
- register const u_char *ep)
+fn_printn(netdissect_options *ndo,
+ register const u_char *s, register u_int n, register const u_char *ep)
{
register u_char c;
c = *s++;
if (!ND_ISASCII(c)) {
c = ND_TOASCII(c);
- putchar('M');
- putchar('-');
+ ND_PRINT((ndo, "M-"));
}
if (!ND_ISPRINT(c)) {
c ^= 0x40; /* DEL to ?, others to alpha */
- putchar('^');
+ ND_PRINT((ndo, "^"));
}
- putchar(c);
+ ND_PRINT((ndo, "%c", c));
}
return (n == 0) ? 0 : 1;
}
* Return true if truncated.
*/
int
-fn_printzp(register const u_char *s, register u_int n,
- register const u_char *ep)
+fn_printzp(netdissect_options *ndo,
+ register const u_char *s, register u_int n,
+ register const u_char *ep)
{
register int ret;
register u_char c;
}
if (!ND_ISASCII(c)) {
c = ND_TOASCII(c);
- putchar('M');
- putchar('-');
+ ND_PRINT((ndo, "M-"));
}
if (!ND_ISPRINT(c)) {
c ^= 0x40; /* DEL to ?, others to alpha */
- putchar('^');
+ ND_PRINT((ndo, "^"));
}
- putchar(c);
+ ND_PRINT((ndo, "%c", c));
}
return (n == 0) ? 0 : ret;
}