diff options
-rw-r--r-- | interface.h | 3 | ||||
-rw-r--r-- | netdissect.h | 8 | ||||
-rw-r--r-- | print-ascii.c | 21 | ||||
-rw-r--r-- | print-bfd.c | 10 | ||||
-rw-r--r-- | print-bgp.c | 24 | ||||
-rw-r--r-- | print-bootp.c | 2 | ||||
-rw-r--r-- | print-cdp.c | 2 | ||||
-rw-r--r-- | print-cfm.c | 10 | ||||
-rw-r--r-- | print-chdlc.c | 4 | ||||
-rw-r--r-- | print-eigrp.c | 6 | ||||
-rw-r--r-- | print-forces.c | 26 | ||||
-rw-r--r-- | print-fr.c | 16 | ||||
-rw-r--r-- | print-icmp.c | 10 | ||||
-rw-r--r-- | print-icmp6.c | 743 | ||||
-rw-r--r-- | print-ip6.c | 4 | ||||
-rw-r--r-- | print-isoclns.c | 50 | ||||
-rw-r--r-- | print-ldp.c | 14 | ||||
-rw-r--r-- | print-lldp.c | 6 | ||||
-rw-r--r-- | print-lmp.c | 10 | ||||
-rw-r--r-- | print-lspping.c | 12 | ||||
-rw-r--r-- | print-lwapp.c | 2 | ||||
-rw-r--r-- | print-mpcp.c | 8 | ||||
-rw-r--r-- | print-olsr.c | 2 | ||||
-rw-r--r-- | print-ospf.c | 12 | ||||
-rw-r--r-- | print-ospf6.c | 4 | ||||
-rw-r--r-- | print-pim.c | 4 | ||||
-rw-r--r-- | print-ppp.c | 32 | ||||
-rw-r--r-- | print-radius.c | 2 | ||||
-rw-r--r-- | print-rip.c | 16 | ||||
-rw-r--r-- | print-rpki-rtr.c | 2 | ||||
-rw-r--r-- | print-rsvp.c | 10 | ||||
-rw-r--r-- | print-sflow.c | 6 | ||||
-rw-r--r-- | print-sip.c | 2 | ||||
-rw-r--r-- | print-slow.c | 14 | ||||
-rw-r--r-- | print-syslog.c | 2 | ||||
-rw-r--r-- | print-telnet.c | 2 | ||||
-rw-r--r-- | print-vqp.c | 2 | ||||
-rw-r--r-- | print-vtp.c | 2 | ||||
-rw-r--r-- | tcpdump.c | 30 | ||||
-rw-r--r-- | util.c | 12 |
40 files changed, 605 insertions, 542 deletions
diff --git a/interface.h b/interface.h index 7bc2c84d..7c3a4683 100644 --- a/interface.h +++ b/interface.h @@ -175,13 +175,10 @@ extern u_int16_t create_osi_cksum(const u_int8_t *, int, int); #include <pcap.h> -extern int print_unknown_data(const u_char *, const char *,int); extern void ascii_print(const u_char *, u_int); extern void hex_and_ascii_print_with_offset(const char *, const u_char *, u_int, u_int); extern void hex_and_ascii_print(const char *, const u_char *, u_int); -extern void hex_print_with_offset(const char *, const u_char *, u_int, u_int); -extern void hex_print(const char *, const u_char *, u_int); extern void telnet_print(const u_char *, u_int); extern int llc_print(const u_char *, u_int, u_int, const u_char *, const u_char *, u_short *); diff --git a/netdissect.h b/netdissect.h index 4fd47264..f82027c3 100644 --- a/netdissect.h +++ b/netdissect.h @@ -328,15 +328,17 @@ extern u_int netanalyzer_transparent_if_print(netdissect_options *, extern int ethertype_print(netdissect_options *,u_short, const u_char *, u_int, u_int); +extern int print_unknown_data(netdissect_options *,const u_char *, const char *,int); +extern void hex_print_with_offset(netdissect_options *, const char *ident, const u_char *cp, + u_int, u_int); +extern void hex_print(netdissect_options *,const char *ident, const u_char *cp,u_int); + /* stuff that has not yet been rototiled */ #if 0 extern void ascii_print(netdissect_options *,u_int); extern void hex_and_ascii_print_with_offset(netdissect_options *,const char *, u_int, u_int); extern void hex_and_ascii_print(netdissect_options *,const char *, u_int); -extern void hex_print_with_offset(netdissect_options *,const char *, - u_int, u_int); -extern void hex_print(netdissect_options *,const char *, u_int); extern void telnet_print(netdissect_options *,const u_char *, u_int); extern int llc_print(netdissect_options *, const u_char *, u_int, u_int, const u_char *, diff --git a/print-ascii.c b/print-ascii.c index fa8793cb..c672ca8c 100644 --- a/print-ascii.c +++ b/print-ascii.c @@ -47,7 +47,7 @@ static const char rcsid[] _U_ = #include <tcpdump-stdinc.h> #include <stdio.h> -#include "interface.h" +#include "netdissect.h" #define ASCII_LINELENGTH 300 #define HEXDUMP_BYTES_PER_LINE 16 @@ -131,8 +131,9 @@ hex_and_ascii_print(register const char *ident, register const u_char *cp, * telnet_print() wants this. It is essentially default_print_unaligned() */ void -hex_print_with_offset(register const char *ident, register const u_char *cp, register u_int length, - register u_int oset) +hex_print_with_offset(netdissect_options *ndo, + const char *ident, const u_char *cp, u_int length, + u_int oset) { register u_int i, s; register int nshorts; @@ -141,16 +142,16 @@ hex_print_with_offset(register const char *ident, register const u_char *cp, reg i = 0; while (--nshorts >= 0) { if ((i++ % 8) == 0) { - (void)printf("%s0x%04x: ", ident, oset); - oset += HEXDUMP_BYTES_PER_LINE; + (void)ND_PRINT((ndo,"%s0x%04x: ", ident, oset)); + oset += HEXDUMP_BYTES_PER_LINE; } s = *cp++; - (void)printf(" %02x%02x", s, *cp++); + (void)ND_PRINT((ndo," %02x%02x", s, *cp++)); } if (length & 1) { if ((i % 8) == 0) - (void)printf("%s0x%04x: ", ident, oset); - (void)printf(" %02x", *cp); + (void)ND_PRINT((ndo,"%s0x%04x: ", ident, oset)); + (void)ND_PRINT((ndo," %02x", *cp)); } } @@ -158,9 +159,9 @@ hex_print_with_offset(register const char *ident, register const u_char *cp, reg * just for completeness */ void -hex_print(register const char *ident, register const u_char *cp, register u_int length) +hex_print(netdissect_options *ndo,const char *ident, const u_char *cp, u_int length) { - hex_print_with_offset(ident, cp, length, 0); + hex_print_with_offset(ndo, ident, cp, length, 0); } #ifdef MAIN diff --git a/print-bfd.c b/print-bfd.c index 0020222d..dc03a8b4 100644 --- a/print-bfd.c +++ b/print-bfd.c @@ -271,8 +271,8 @@ bfd_print(register const u_char *pptr, register u_int len, register u_int port) tok2str(bfd_port_values, "unknown (%u)", port), len); if (vflag >= 1) { - if(!print_unknown_data(pptr,"\n\t",len)) - return; + if(!print_unknown_data(gndo, pptr,"\n\t",len)) + return; } break; } @@ -281,3 +281,9 @@ bfd_print(register const u_char *pptr, register u_int len, register u_int port) trunc: printf("[|BFD]"); } +/* + * Local Variables: + * c-style: whitesmith + * c-basic-offset: 8 + * End: + */ diff --git a/print-bgp.c b/print-bgp.c index 974903fc..5acdbc31 100644 --- a/print-bgp.c +++ b/print-bgp.c @@ -1518,7 +1518,7 @@ bgp_attr_print(u_int atype, const u_char *pptr, u_int len) TCHECK2(tptr[0], tlen); printf("\n\t no AFI %u / SAFI %u decoder",af,safi); if (vflag <= 1) - print_unknown_data(tptr,"\n\t ",tlen); + print_unknown_data(gndo,tptr,"\n\t ",tlen); goto done; break; } @@ -1651,7 +1651,7 @@ bgp_attr_print(u_int atype, const u_char *pptr, u_int len) TCHECK2(tptr[0], tlen); printf("no AFI %u/SAFI %u decoder",af,safi); if (vflag <= 1) - print_unknown_data(tptr,"\n\t ",tlen); + print_unknown_data(gndo,tptr,"\n\t ",tlen); tptr += tlen; tlen = 0; goto done; @@ -1818,7 +1818,7 @@ bgp_attr_print(u_int atype, const u_char *pptr, u_int len) TCHECK2(*tptr,tlen); printf("\n\t no AFI %u / SAFI %u decoder",af,safi); if (vflag <= 1) - print_unknown_data(tptr,"\n\t ",tlen); + print_unknown_data(gndo,tptr,"\n\t ",tlen); advance = 0; tptr = pptr + len; break; @@ -1980,7 +1980,7 @@ bgp_attr_print(u_int atype, const u_char *pptr, u_int len) TCHECK2(*(tptr-3),tlen); printf("no AFI %u / SAFI %u decoder",af,safi); if (vflag <= 1) - print_unknown_data(tptr-3,"\n\t ",tlen); + print_unknown_data(gndo,tptr-3,"\n\t ",tlen); advance = 0; tptr = pptr + len; break; @@ -2070,7 +2070,7 @@ bgp_attr_print(u_int atype, const u_char *pptr, u_int len) break; default: TCHECK2(*tptr,8); - print_unknown_data(tptr,"\n\t ",8); + print_unknown_data(gndo,tptr,"\n\t ",8); break; } tlen -=8; @@ -2131,7 +2131,7 @@ bgp_attr_print(u_int atype, const u_char *pptr, u_int len) break; default: if (vflag <= 1) { - print_unknown_data(tptr,"\n\t ",tlen); + print_unknown_data(gndo,tptr,"\n\t ",tlen); } } break; @@ -2193,12 +2193,12 @@ bgp_attr_print(u_int atype, const u_char *pptr, u_int len) TCHECK2(*pptr,len); printf("\n\t no Attribute %u decoder",atype); /* we have no decoder for the attribute */ if (vflag <= 1) - print_unknown_data(pptr,"\n\t ",len); + print_unknown_data(gndo,pptr,"\n\t ",len); break; } if (vflag > 1 && len) { /* omit zero length attributes*/ TCHECK2(*pptr,len); - print_unknown_data(pptr,"\n\t ",len); + print_unknown_data(gndo,pptr,"\n\t ",len); } return 1; @@ -2276,11 +2276,11 @@ bgp_capabilities_print(const u_char *opt, int caps_len) printf("\n\t\tno decoder for Capability %u", cap_type); if (vflag <= 1) - print_unknown_data(&opt[i+2],"\n\t\t",cap_len); + print_unknown_data(gndo,&opt[i+2],"\n\t\t",cap_len); break; } if (vflag > 1 && cap_len > 0) { - print_unknown_data(&opt[i+2],"\n\t\t",cap_len); + print_unknown_data(gndo,&opt[i+2],"\n\t\t",cap_len); } i += BGP_CAP_HEADER_SIZE + cap_len; } @@ -2628,7 +2628,7 @@ bgp_route_refresh_print(const u_char *pptr, int len) { if (vflag > 1) { TCHECK2(*pptr, len); - print_unknown_data(pptr,"\n\t ", len); + print_unknown_data(gndo,pptr,"\n\t ", len); } return; @@ -2669,7 +2669,7 @@ bgp_header_print(const u_char *dat, int length) /* we have no decoder for the BGP message */ TCHECK2(*dat, length); printf("\n\t no Message %u decoder",bgp.bgp_type); - print_unknown_data(dat,"\n\t ",length); + print_unknown_data(gndo,dat,"\n\t ",length); break; } return 1; diff --git a/print-bootp.c b/print-bootp.c index 499f9785..c4601567 100644 --- a/print-bootp.c +++ b/print-bootp.c @@ -691,7 +691,7 @@ rfc1048_print(register const u_char *bp) break; default: - print_unknown_data(bp, "\n\t\t", suboptlen); + print_unknown_data(gndo,bp, "\n\t\t", suboptlen); } len -= suboptlen; diff --git a/print-cdp.c b/print-cdp.c index da3f10b4..12f2d4bf 100644 --- a/print-cdp.c +++ b/print-cdp.c @@ -220,7 +220,7 @@ cdp_print(const u_char *pptr, u_int length, u_int caplen) } break; default: - print_unknown_data(tptr,"\n\t ",len); + print_unknown_data(gndo,tptr,"\n\t ",len); break; } } diff --git a/print-cfm.c b/print-cfm.c index b71014db..81f2df65 100644 --- a/print-cfm.c +++ b/print-cfm.c @@ -387,7 +387,7 @@ cfm_print(register const u_char *pptr, register u_int length) { /* FIXME add printers for those MD formats - hexdump for now */ case CFM_CCM_MA_FORMAT_8021: default: - print_unknown_data(msg_ptr.cfm_ccm->md_name, "\n\t ", + print_unknown_data(gndo,msg_ptr.cfm_ccm->md_name, "\n\t ", msg_ptr.cfm_ccm->md_namelength); } } @@ -418,7 +418,7 @@ cfm_print(register const u_char *pptr, register u_int length) { case CFM_CCM_MA_FORMAT_INT: case CFM_CCM_MA_FORMAT_VPN: default: - print_unknown_data(ma_name, "\n\t ", *ma_namelength); + print_unknown_data(gndo,ma_name, "\n\t ", *ma_namelength); } break; @@ -467,7 +467,7 @@ cfm_print(register const u_char *pptr, register u_int length) { case CFM_OPCODE_LBM: default: if (tlen > cfm_common_header->first_tlv_offset) { - print_unknown_data(tptr, "\n\t ", + print_unknown_data(gndo,tptr, "\n\t ", tlen - cfm_common_header->first_tlv_offset); } break; @@ -507,7 +507,7 @@ cfm_print(register const u_char *pptr, register u_int length) { if ((cfm_tlv_type != CFM_TLV_END) && ((cfm_tlv_len + sizeof(struct cfm_tlv_header_t) > tlen) || (!cfm_tlv_len))) { - print_unknown_data(tptr,"\n\t ",tlen); + print_unknown_data(gndo,tptr,"\n\t ",tlen); return; } @@ -634,7 +634,7 @@ cfm_print(register const u_char *pptr, register u_int length) { } /* do we want to see an additional hexdump ? */ if (hexdump || vflag > 1) - print_unknown_data(tlv_ptr, "\n\t ", cfm_tlv_len); + print_unknown_data(gndo,tlv_ptr, "\n\t ", cfm_tlv_len); tptr+=cfm_tlv_len; tlen-=cfm_tlv_len; diff --git a/print-chdlc.c b/print-chdlc.c index 79eaaa9e..5685cc13 100644 --- a/print-chdlc.c +++ b/print-chdlc.c @@ -192,14 +192,14 @@ chdlc_slarp_print(const u_char *cp, u_int length) default: printf("0x%02x unknown", EXTRACT_32BITS(&slarp->code)); if (vflag <= 1) - print_unknown_data(cp+4,"\n\t",length-4); + print_unknown_data(gndo,cp+4,"\n\t",length-4); break; } if (SLARP_MAX_LEN < length && vflag) printf(", (trailing junk: %d bytes)", length - SLARP_MAX_LEN); if (vflag > 1) - print_unknown_data(cp+4,"\n\t",length-4); + print_unknown_data(gndo,cp+4,"\n\t",length-4); return; trunc: diff --git a/print-eigrp.c b/print-eigrp.c index 86288450..4177564d 100644 --- a/print-eigrp.c +++ b/print-eigrp.c @@ -280,7 +280,7 @@ eigrp_print(register const u_char *pptr, register u_int len) { if (eigrp_tlv_len < sizeof(struct eigrp_tlv_header) || eigrp_tlv_len > tlen) { - print_unknown_data(tptr+sizeof(struct eigrp_tlv_header),"\n\t ",tlen); + print_unknown_data(gndo,tptr+sizeof(struct eigrp_tlv_header),"\n\t ",tlen); return; } @@ -463,12 +463,12 @@ eigrp_print(register const u_char *pptr, register u_int len) { default: if (vflag <= 1) - print_unknown_data(tlv_tptr,"\n\t ",tlv_tlen); + print_unknown_data(gndo,tlv_tptr,"\n\t ",tlv_tlen); break; } /* do we want to see an additionally hexdump ? */ if (vflag > 1) - print_unknown_data(tptr+sizeof(struct eigrp_tlv_header),"\n\t ", + print_unknown_data(gndo,tptr+sizeof(struct eigrp_tlv_header),"\n\t ", eigrp_tlv_len-sizeof(struct eigrp_tlv_header)); tptr+=eigrp_tlv_len; diff --git a/print-forces.c b/print-forces.c index 49c26ae0..5a19890e 100644 --- a/print-forces.c +++ b/print-forces.c @@ -720,7 +720,7 @@ fdatatlv_print(register const u_char * pptr, register u_int len, if (vflag >= 3) { char *ib = indent_pr(indent + 2, 1); printf("%s[", &ib[1]); - hex_print_with_offset(ib, tdp, rlen, 0); + hex_print_with_offset(gndo,ib, tdp, rlen, 0); printf("\n%s]\n", &ib[1]); } return 0; @@ -754,7 +754,7 @@ sdatailv_print(register const u_char * pptr, register u_int len, invilv = ilv_valid(ilv, rlen); if (invilv) { printf("%s[", &ib[1]); - hex_print_with_offset(ib, tdp, rlen, 0); + hex_print_with_offset(gndo,ib, tdp, rlen, 0); printf("\n%s]\n", &ib[1]); return -1; } @@ -762,7 +762,7 @@ sdatailv_print(register const u_char * pptr, register u_int len, int ilvl = EXTRACT_32BITS(&ilv->length); printf("\n%s ILV: type %x length %d\n", &ib[1], EXTRACT_32BITS(&ilv->type), ilvl); - hex_print_with_offset("\t\t[", tdp, ilvl-ILV_HDRL, 0); + hex_print_with_offset(gndo,"\t\t[", tdp, ilvl-ILV_HDRL, 0); } ilv = GO_NXT_ILV(ilv, rlen); @@ -989,7 +989,7 @@ pdatacnt_print(register const u_char * pptr, register u_int len, type, EXTRACT_16BITS(&pdtlv->length)); pd_err: if (EXTRACT_16BITS(&pdtlv->length)) { - hex_print_with_offset("Bad Data val\n\t [", + hex_print_with_offset(gndo,"Bad Data val\n\t [", pptr, len, 0); printf("]\n"); @@ -1042,7 +1042,7 @@ pdata_print(register const u_char * pptr, register u_int len, if (len < minsize) { printf("\t\t\ttruncated IDs expected %uB got %uB\n", minsize, len); - hex_print_with_offset("\t\t\tID Data[", pptr, len, 0); + hex_print_with_offset(gndo,"\t\t\tID Data[", pptr, len, 0); printf("]\n"); return -1; } @@ -1174,7 +1174,7 @@ invoptlv_print(register const u_char * pptr, register u_int len, if (vflag >= 3) { printf("%sData[", &ib[1]); - hex_print_with_offset(ib, pptr, len, 0); + hex_print_with_offset(gndo,ib, pptr, len, 0); printf("%s]\n", ib); } return -1; @@ -1374,7 +1374,7 @@ print_metailv(register const u_char * pptr, register u_int len, printf("%sMetaID 0x%x length %d\n", ib, EXTRACT_32BITS(&ilv->type), EXTRACT_32BITS(&ilv->length)); if (vflag >= 3) { - hex_print_with_offset("\t\t[", ILV_DATA(ilv), rlen, 0); + hex_print_with_offset(gndo,"\t\t[", ILV_DATA(ilv), rlen, 0); printf(" ]\n"); } return 0; @@ -1439,7 +1439,7 @@ print_reddata(register const u_char * pptr, register u_int len, if (vflag >= 3) { printf("\t\t["); - hex_print_with_offset("\n\t\t", pptr, rlen, 0); + hex_print_with_offset(gndo,"\n\t\t", pptr, rlen, 0); printf("\n\t\t]"); } @@ -1739,14 +1739,14 @@ forces_print(register const u_char * pptr, register u_int len) rc = forces_type_print(pptr, fhdr, mlen, tops); if (rc < 0) { error: - hex_print_with_offset("\n\t[", pptr, len, 0); + hex_print_with_offset(gndo,"\n\t[", pptr, len, 0); printf("\n\t]"); return; } if (vflag >= 4) { printf("\n\t Raw ForCES message\n\t ["); - hex_print_with_offset("\n\t ", pptr, len, 0); + hex_print_with_offset(gndo,"\n\t ", pptr, len, 0); printf("\n\t ]"); } printf("\n"); @@ -1755,3 +1755,9 @@ error: trunc: printf("%s", tstr); } +/* + * Local Variables: + * c-style: whitesmith + * c-basic-offset: 8 + * End: + */ @@ -484,13 +484,13 @@ mfr_print(register const u_char *p, u_int length) default: if (vflag <= 1) - print_unknown_data(tptr,"\n\t ",ie_len); + print_unknown_data(gndo,tptr,"\n\t ",ie_len); break; } /* do we want to see a hexdump of the IE ? */ if (vflag > 1 ) - print_unknown_data(tptr,"\n\t ",ie_len); + print_unknown_data(gndo,tptr,"\n\t ",ie_len); tlen-=ie_len; tptr+=ie_len; @@ -528,7 +528,7 @@ mfr_print(register const u_char *p, u_int length) printf("FRF.16 Frag, seq %u, Flags [%s]", sequence_num, bittok2str(frf_flag_values,"none",(p[0] & MFR_BEC_MASK))); - print_unknown_data(p,"\n\t",length); + print_unknown_data(gndo,p,"\n\t",length); return hdr_len; @@ -807,12 +807,12 @@ q933_print(const u_char *p, u_int length) } if (vflag >= 1 && !ie_is_known) { - print_unknown_data(ptemp+2,"\n\t",ie_p->ie_len); + print_unknown_data(gndo,ptemp+2,"\n\t",ie_p->ie_len); } /* do we want to see a hexdump of the IE ? */ if (vflag> 1 && ie_is_known) { - print_unknown_data(ptemp+2,"\n\t ",ie_p->ie_len); + print_unknown_data(gndo,ptemp+2,"\n\t ",ie_p->ie_len); } length = length - ie_p->ie_len - 2; @@ -881,3 +881,9 @@ fr_q933_print_ie_codeset5(const struct ie_tlv_header_t *ie_p, const u_char *p) return 0; } +/* + * Local Variables: + * c-style: whitesmith + * c-basic-offset: 8 + * End: + */ diff --git a/print-icmp.c b/print-icmp.c index 135b9a44..cbc342b3 100644 --- a/print-icmp.c +++ b/print-icmp.c @@ -669,7 +669,7 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented) printf(", ttl %u", MPLS_TTL(raw_label)); break; default: - print_unknown_data(obj_tptr, "\n\t ", obj_tlen); + print_unknown_data(gndo,obj_tptr, "\n\t ", obj_tlen); } break; @@ -679,7 +679,7 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented) */ case 2: default: - print_unknown_data(obj_tptr, "\n\t ", obj_tlen); + print_unknown_data(gndo,obj_tptr, "\n\t ", obj_tlen); break; } if (hlen < obj_tlen) @@ -693,3 +693,9 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented) trunc: fputs("[|icmp]", stdout); } +/* + * Local Variables: + * c-style: whitesmith + * c-basic-offset: 8 + * End: + */ diff --git a/print-icmp6.c b/print-icmp6.c index 4953340f..011702bc 100644 --- a/print-icmp6.c +++ b/print-icmp6.c @@ -35,7 +35,7 @@ static const char rcsid[] _U_ = #include <stdio.h> #include <string.h> -#include "interface.h" +#include "netdissect.h" #include "addrtoname.h" #include "extract.h" @@ -48,15 +48,15 @@ static const char rcsid[] _U_ = static const char *get_rtpref(u_int); static const char *get_lifetime(u_int32_t); -static void print_lladdr(const u_char *, size_t); -static void icmp6_opt_print(const u_char *, int); -static void mld6_print(const u_char *); -static void mldv2_report_print(const u_char *, u_int); -static void mldv2_query_print(const u_char *, u_int); -static struct udphdr *get_upperlayer(u_char *, u_int *); -static void dnsname_print(const u_char *, const u_char *); -static void icmp6_nodeinfo_print(u_int, const u_char *, const u_char *); -static void icmp6_rrenum_print(const u_char *, const u_char *); +static void print_lladdr(netdissect_options *ndo, const u_char *, size_t); +static void icmp6_opt_print(netdissect_options *ndo, const u_char *, int); +static void mld6_print(netdissect_options *ndo, const u_char *); +static void mldv2_report_print(netdissect_options *ndo, const u_char *, u_int); +static void mldv2_query_print(netdissect_options *ndo, const u_char *, u_int); +static struct udphdr *get_upperlayer(netdissect_options *ndo, u_char *, u_int *); +static void dnsname_print(netdissect_options *ndo, const u_char *, const u_char *); +static void icmp6_nodeinfo_print(netdissect_options *ndo, u_int, const u_char *, const u_char *); +static void icmp6_rrenum_print(netdissect_options *ndo, const u_char *, const u_char *); #ifndef abs #define abs(a) ((0 < (a)) ? (a) : -(a)) @@ -181,7 +181,7 @@ get_lifetime(u_int32_t v) } static void -print_lladdr(const u_int8_t *p, size_t l) +print_lladdr(netdissect_options *ndo, const u_int8_t *p, size_t l) { const u_int8_t *ep, *q; @@ -189,8 +189,8 @@ print_lladdr(const u_int8_t *p, size_t l) ep = p + l; while (l > 0 && q < ep) { if (q > p) - printf(":"); - printf("%02x", *q++); + ND_PRINT((ndo,":")); + ND_PRINT((ndo,"%02x", *q++)); l--; } } @@ -315,167 +315,167 @@ icmp6_print(netdissect_options *ndo, ip = (struct ip6_hdr *)bp2; oip = (struct ip6_hdr *)(dp + 1); /* 'ep' points to the end of available data. */ - ep = snapend; + ep = ndo->ndo_snapend; - TCHECK(dp->icmp6_cksum); + ND_TCHECK(dp->icmp6_cksum); - if (vflag && !fragmented) { + if (ndo->ndo_vflag && !fragmented) { u_int16_t sum, udp_sum; - if (TTEST2(bp[0], length)) { + if (ND_TTEST2(bp[0], length)) { udp_sum = EXTRACT_16BITS(&dp->icmp6_cksum); sum = icmp6_cksum(ip, dp, length); if (sum != 0) - (void)printf("[bad icmp6 cksum 0x%04x -> 0x%04x!] ", - udp_sum, - in_cksum_shouldbe(udp_sum, sum)); + (void)ND_PRINT((ndo,"[bad icmp6 cksum 0x%04x -> 0x%04x!] ", + udp_sum, + in_cksum_shouldbe(udp_sum, sum))); else - (void)printf("[icmp6 sum ok] "); + (void)ND_PRINT((ndo,"[icmp6 sum ok] ")); } } - printf("ICMP6, %s", tok2str(icmp6_type_values,"unknown icmp6 type (%u)",dp->icmp6_type)); + ND_PRINT((ndo,"ICMP6, %s", tok2str(icmp6_type_values,"unknown icmp6 type (%u)",dp->icmp6_type))); /* display cosmetics: print the packet length for printer that use the vflag now */ - if (vflag && (dp->icmp6_type == ND_ROUTER_SOLICIT || + if (ndo->ndo_vflag && (dp->icmp6_type == ND_ROUTER_SOLICIT || dp->icmp6_type == ND_ROUTER_ADVERT || dp->icmp6_type == ND_NEIGHBOR_ADVERT || dp->icmp6_type == ND_NEIGHBOR_SOLICIT || dp->icmp6_type == ND_REDIRECT || dp->icmp6_type == ICMP6_HADISCOV_REPLY || dp->icmp6_type == ICMP6_MOBILEPREFIX_ADVERT )) - printf(", length %u", length); + ND_PRINT((ndo,", length %u", length)); switch (dp->icmp6_type) { case ICMP6_DST_UNREACH: - TCHECK(oip->ip6_dst); - printf(", %s", tok2str(icmp6_dst_unreach_code_values,"unknown unreach code (%u)",dp->icmp6_code)); + ND_TCHECK(oip->ip6_dst); + ND_PRINT((ndo,", %s", tok2str(icmp6_dst_unreach_code_values,"unknown unreach code (%u)",dp->icmp6_code))); switch (dp->icmp6_code) { case ICMP6_DST_UNREACH_NOROUTE: /* fall through */ case ICMP6_DST_UNREACH_ADMIN: case ICMP6_DST_UNREACH_ADDR: - printf(" %s",ip6addr_string(&oip->ip6_dst)); + ND_PRINT((ndo," %s",ip6addr_string(&oip->ip6_dst))); break; case ICMP6_DST_UNREACH_BEYONDSCOPE: - printf(" %s, source address %s", + ND_PRINT((ndo," %s, source address %s", ip6addr_string(&oip->ip6_dst), - ip6addr_string(&oip->ip6_src)); + ip6addr_string(&oip->ip6_src))); break; case ICMP6_DST_UNREACH_NOPORT: - if ((ouh = get_upperlayer((u_char *)oip, &prot)) + if ((ouh = get_upperlayer(ndo, (u_char *)oip, &prot)) == NULL) goto trunc; dport = EXTRACT_16BITS(&ouh->uh_dport); switch (prot) { case IPPROTO_TCP: - printf(", %s tcp port %s", + ND_PRINT((ndo,", %s tcp port %s", ip6addr_string(&oip->ip6_dst), - tcpport_string(dport)); + tcpport_string(dport))); break; case IPPROTO_UDP: - printf(", %s udp port %s", + ND_PRINT((ndo,", %s udp port %s", ip6addr_string(&oip->ip6_dst), - udpport_string(dport)); + udpport_string(dport))); break; default: - printf(", %s protocol %d port %d unreachable", + ND_PRINT((ndo,", %s protocol %d port %d unreachable", ip6addr_string(&oip->ip6_dst), - oip->ip6_nxt, dport); + oip->ip6_nxt, dport)); break; } break; default: - if (vflag <= 1) { - print_unknown_data(bp,"\n\t",length); - return; - } + if (ndo->ndo_vflag <= 1) { + print_unknown_data(ndo, bp,"\n\t",length); + return; + } break; } break; case ICMP6_PACKET_TOO_BIG: - TCHECK(dp->icmp6_mtu); - printf(", mtu %u", EXTRACT_32BITS(&dp->icmp6_mtu)); + ND_TCHECK(dp->icmp6_mtu); + ND_PRINT((ndo,", mtu %u", EXTRACT_32BITS(&dp->icmp6_mtu))); break; case ICMP6_TIME_EXCEEDED: - TCHECK(oip->ip6_dst); + ND_TCHECK(oip->ip6_dst); switch (dp->icmp6_code) { case ICMP6_TIME_EXCEED_TRANSIT: - printf(" for %s", - ip6addr_string(&oip->ip6_dst)); + ND_PRINT((ndo," for %s", + ip6addr_string(&oip->ip6_dst))); break; case ICMP6_TIME_EXCEED_REASSEMBLY: - printf(" (reassembly)"); + ND_PRINT((ndo," (reassembly)")); break; default: - printf(", unknown code (%u)", dp->icmp6_code); + ND_PRINT((ndo,", unknown code (%u)", dp->icmp6_code)); break; } break; case ICMP6_PARAM_PROB: - TCHECK(oip->ip6_dst); + ND_TCHECK(oip->ip6_dst); switch (dp->icmp6_code) { case ICMP6_PARAMPROB_HEADER: - printf(", erroneous - octet %u", EXTRACT_32BITS(&dp->icmp6_pptr)); - break; + ND_PRINT((ndo,", erroneous - octet %u", EXTRACT_32BITS(&dp->icmp6_pptr))); + break; case ICMP6_PARAMPROB_NEXTHEADER: - printf(", next header - octet %u", EXTRACT_32BITS(&dp->icmp6_pptr)); - break; + ND_PRINT((ndo,", next header - octet %u", EXTRACT_32BITS(&dp->icmp6_pptr))); + break; case ICMP6_PARAMPROB_OPTION: - printf(", option - octet %u", EXTRACT_32BITS(&dp->icmp6_pptr)); - break; + ND_PRINT((ndo,", option - octet %u", EXTRACT_32BITS(&dp->icmp6_pptr))); + break; default: - printf(", code-#%d", - dp->icmp6_code); - break; + ND_PRINT((ndo,", code-#%d", + dp->icmp6_code)); + break; } break; case ICMP6_ECHO_REQUEST: case ICMP6_ECHO_REPLY: - TCHECK(dp->icmp6_seq); - printf(", seq %u", EXTRACT_16BITS(&dp->icmp6_seq)); + ND_TCHECK(dp->icmp6_seq); + ND_PRINT((ndo,", seq %u", EXTRACT_16BITS(&dp->icmp6_seq))); break; case ICMP6_MEMBERSHIP_QUERY: if (length == MLD_MINLEN) { - mld6_print((const u_char *)dp); + mld6_print(ndo, (const u_char *)dp); } else if (length >= MLDV2_MINLEN) { - printf(" v2"); - mldv2_query_print((const u_char *)dp, length); + ND_PRINT((ndo," v2")); + mldv2_query_print(ndo, (const u_char *)dp, length); } else { - printf(" unknown-version (len %u) ", length); + ND_PRINT((ndo," unknown-version (len %u) ", length)); } break; case ICMP6_MEMBERSHIP_REPORT: - mld6_print((const u_char *)dp); + mld6_print(ndo, (const u_char *)dp); break; case ICMP6_MEMBERSHIP_REDUCTION: - mld6_print((const u_char *)dp); + mld6_print(ndo, (const u_char *)dp); break; case ND_ROUTER_SOLICIT: #define RTSOLLEN 8 - if (vflag) { - icmp6_opt_print((const u_char *)dp + RTSOLLEN, + if (ndo->ndo_vflag) { + icmp6_opt_print(ndo, (const u_char *)dp + RTSOLLEN, length - RTSOLLEN); } break; case ND_ROUTER_ADVERT: #define RTADVLEN 16 - if (vflag) { + if (ndo->ndo_vflag) { struct nd_router_advert *p; p = (struct nd_router_advert *)dp; - TCHECK(p->nd_ra_retransmit); - printf("\n\thop limit %u, Flags [%s]" \ - ", pref %s, router lifetime %us, reachable time %us, retrans time %us", - (u_int)p->nd_ra_curhoplimit, - bittok2str(icmp6_opt_ra_flag_values,"none",(p->nd_ra_flags_reserved)), - get_rtpref(p->nd_ra_flags_reserved), - EXTRACT_16BITS(&p->nd_ra_router_lifetime), - EXTRACT_32BITS(&p->nd_ra_reachable), - EXTRACT_32BITS(&p->nd_ra_retransmit)); - - icmp6_opt_print((const u_char *)dp + RTADVLEN, + ND_TCHECK(p->nd_ra_retransmit); + ND_PRINT((ndo,"\n\thop limit %u, Flags [%s]" \ + ", pref %s, router lifetime %us, reachable time %us, retrans time %us", + (u_int)p->nd_ra_curhoplimit, + bittok2str(icmp6_opt_ra_flag_values,"none",(p->nd_ra_flags_reserved)), + get_rtpref(p->nd_ra_flags_reserved), + EXTRACT_16BITS(&p->nd_ra_router_lifetime), + EXTRACT_32BITS(&p->nd_ra_reachable), + EXTRACT_32BITS(&p->nd_ra_retransmit))); + + icmp6_opt_print(ndo, (const u_char *)dp + RTADVLEN, length - RTADVLEN); } break; @@ -483,11 +483,11 @@ icmp6_print(netdissect_options *ndo, { struct nd_neighbor_solicit *p; p = (struct nd_neighbor_solicit *)dp; - TCHECK(p->nd_ns_target); - printf(", who has %s", ip6addr_string(&p->nd_ns_target)); - if (vflag) { + ND_TCHECK(p->nd_ns_target); + ND_PRINT((ndo,", who has %s", ip6addr_string(&p->nd_ns_target))); + if (ndo->ndo_vflag) { #define NDSOLLEN 24 - icmp6_opt_print((const u_char *)dp + NDSOLLEN, + icmp6_opt_print(ndo, (const u_char *)dp + NDSOLLEN, length - NDSOLLEN); } } @@ -497,16 +497,16 @@ icmp6_print(netdissect_options *ndo, struct nd_neighbor_advert *p; p = (struct nd_neighbor_advert *)dp; - TCHECK(p->nd_na_target); - printf(", tgt is %s", - ip6addr_string(&p->nd_na_target)); - if (vflag) { - printf(", Flags [%s]", - bittok2str(icmp6_nd_na_flag_values, - "none", - EXTRACT_32BITS(&p->nd_na_flags_reserved))); + ND_TCHECK(p->nd_na_target); + ND_PRINT((ndo,", tgt is %s", + ip6addr_string(&p->nd_na_target))); + if (ndo->ndo_vflag) { + ND_PRINT((ndo,", Flags [%s]", + bittok2str(icmp6_nd_na_flag_values, + "none", + EXTRACT_32BITS(&p->nd_na_flags_reserved)))); #define NDADVLEN 24 - icmp6_opt_print((const u_char *)dp + NDADVLEN, + icmp6_opt_print(ndo, (const u_char *)dp + NDADVLEN, length - NDADVLEN); #undef NDADVLEN } @@ -514,64 +514,64 @@ icmp6_print(netdissect_options *ndo, break; case ND_REDIRECT: #define RDR(i) ((struct nd_redirect *)(i)) - TCHECK(RDR(dp)->nd_rd_dst); - printf(", %s", getname6((const u_char *)&RDR(dp)->nd_rd_dst)); - TCHECK(RDR(dp)->nd_rd_target); - printf(" to %s", - getname6((const u_char*)&RDR(dp)->nd_rd_target)); + ND_TCHECK(RDR(dp)->nd_rd_dst); + ND_PRINT((ndo,", %s", getname6((const u_char *)&RDR(dp)->nd_rd_dst))); + ND_TCHECK(RDR(dp)->nd_rd_target); + ND_PRINT((ndo," to %s", + getname6((const u_char*)&RDR(dp)->nd_rd_target))); #define REDIRECTLEN 40 - if (vflag) { - icmp6_opt_print((const u_char *)dp + REDIRECTLEN, + if (ndo->ndo_vflag) { + icmp6_opt_print(ndo, (const u_char *)dp + REDIRECTLEN, length - REDIRECTLEN); } break; #undef REDIRECTLEN #undef RDR case ICMP6_ROUTER_RENUMBERING: - icmp6_rrenum_print(bp, ep); + icmp6_rrenum_print(ndo, bp, ep); break; case ICMP6_NI_QUERY: case ICMP6_NI_REPLY: - icmp6_nodeinfo_print(length, bp, ep); + icmp6_nodeinfo_print(ndo, length, bp, ep); break; case IND_SOLICIT: case IND_ADVERT: break; case ICMP6_V2_MEMBERSHIP_REPORT: - mldv2_report_print((const u_char *) dp, length); + mldv2_report_print(ndo, (const u_char *) dp, length); break; case ICMP6_MOBILEPREFIX_SOLICIT: /* fall through */ case ICMP6_HADISCOV_REQUEST: - TCHECK(dp->icmp6_data16[0]); - printf(", id 0x%04x", EXTRACT_16BITS(&dp->icmp6_data16[0])); + ND_TCHECK(dp->icmp6_data16[0]); + ND_PRINT((ndo,", id 0x%04x", EXTRACT_16BITS(&dp->icmp6_data16[0]))); break; case ICMP6_HADISCOV_REPLY: - if (vflag) { + if (ndo->ndo_vflag) { struct in6_addr *in6; u_char *cp; - TCHECK(dp->icmp6_data16[0]); - printf(", id 0x%04x", EXTRACT_16BITS(&dp->icmp6_data16[0])); + ND_TCHECK(dp->icmp6_data16[0]); + ND_PRINT((ndo,", id 0x%04x", EXTRACT_16BITS(&dp->icmp6_data16[0]))); cp = (u_char *)dp + length; in6 = (struct in6_addr *)(dp + 1); for (; (u_char *)in6 < cp; in6++) { - TCHECK(*in6); - printf(", %s", ip6addr_string(in6)); + ND_TCHECK(*in6); + ND_PRINT((ndo,", %s", ip6addr_string(in6))); } } break; case ICMP6_MOBILEPREFIX_ADVERT: - if (vflag) { - TCHECK(dp->icmp6_data16[0]); - printf(", id 0x%04x", EXTRACT_16BITS(&dp->icmp6_data16[0])); + if (ndo->ndo_vflag) { + ND_TCHECK(dp->icmp6_data16[0]); + ND_PRINT((ndo,", id 0x%04x", EXTRACT_16BITS(&dp->icmp6_data16[0]))); if (dp->icmp6_data16[1] & 0xc0) - printf(" "); + ND_PRINT((ndo," ")); if (dp->icmp6_data16[1] & 0x80) - printf("M"); + ND_PRINT((ndo,"M")); if (dp->icmp6_data16[1] & 0x40) - printf("O"); + ND_PRINT((ndo,"O")); #define MPADVLEN 8 - icmp6_opt_print((const u_char *)dp + MPADVLEN, + icmp6_opt_print(ndo, (const u_char *)dp + MPADVLEN, length - MPADVLEN); } break; @@ -579,20 +579,20 @@ icmp6_print(netdissect_options *ndo, rpl_print(ndo, dp, &dp->icmp6_data8[0], length); break; default: - printf(", length %u", length); - if (vflag <= 1) - print_unknown_data(bp,"\n\t", length); + ND_PRINT((ndo,", length %u", length)); + if (ndo->ndo_vflag <= 1) + print_unknown_data(ndo, bp,"\n\t", length); return; } - if (!vflag) - printf(", length %u", length); + if (!ndo->ndo_vflag) + ND_PRINT((ndo,", length %u", length)); return; trunc: - fputs("[|icmp6]", stdout); + ND_PRINT((ndo, "[|icmp6]")); } static struct udphdr * -get_upperlayer(u_char *bp, u_int *prot) +get_upperlayer(netdissect_options *ndo, u_char *bp, u_int *prot) { const u_char *ep; struct ip6_hdr *ip6 = (struct ip6_hdr *)bp; @@ -604,9 +604,9 @@ get_upperlayer(u_char *bp, u_int *prot) int hlen; /* 'ep' points to the end of available data. */ - ep = snapend; + ep = ndo->ndo_snapend; - if (!TTEST(ip6->ip6_nxt)) + if (!ND_TTEST(ip6->ip6_nxt)) return NULL; nh = ip6->ip6_nxt; @@ -619,7 +619,7 @@ get_upperlayer(u_char *bp, u_int *prot) case IPPROTO_UDP: case IPPROTO_TCP: uh = (struct udphdr *)bp; - if (TTEST(uh->uh_dport)) { + if (ND_TTEST(uh->uh_dport)) { *prot = nh; return(uh); } @@ -631,7 +631,7 @@ get_upperlayer(u_char *bp, u_int *prot) case IPPROTO_DSTOPTS: case IPPROTO_ROUTING: hbh = (struct ip6_hbh *)bp; - if (!TTEST(hbh->ip6h_len)) + if (!ND_TTEST(hbh->ip6h_len)) return(NULL); nh = hbh->ip6h_nxt; hlen = (hbh->ip6h_len + 1) << 3; @@ -639,7 +639,7 @@ get_upperlayer(u_char *bp, u_int *prot) case IPPROTO_FRAGMENT: /* this should be odd, but try anyway */ fragh = (struct ip6_frag *)bp; - if (!TTEST(fragh->ip6f_offlg)) + if (!ND_TTEST(fragh->ip6f_offlg)) return(NULL); /* fragments with non-zero offset are meaningless */ if ((EXTRACT_16BITS(&fragh->ip6f_offlg) & IP6F_OFF_MASK) != 0) @@ -650,7 +650,7 @@ get_upperlayer(u_char *bp, u_int *prot) case IPPROTO_AH: ah = (struct ah *)bp; - if (!TTEST(ah->ah_len)) + if (!ND_TTEST(ah->ah_len)) return(NULL); nh = ah->ah_nxt; hlen = (ah->ah_len + 2) << 2; @@ -666,7 +666,7 @@ get_upperlayer(u_char *bp, u_int *prot) } static void -icmp6_opt_print(const u_char *bp, int resid) +icmp6_opt_print(netdissect_options *ndo, const u_char *bp, int resid) { const struct nd_opt_hdr *op; const struct nd_opt_prefix_info *opp; @@ -685,7 +685,7 @@ icmp6_opt_print(const u_char *bp, int resid) cp = bp; /* 'ep' points to the end of available data. */ - ep = snapend; + ep = ndo->ndo_snapend; while (cp < ep) { op = (struct nd_opt_hdr *)cp; @@ -698,58 +698,58 @@ icmp6_opt_print(const u_char *bp, int resid) if (cp + (op->nd_opt_len << 3) > ep) goto trunc; - printf("\n\t %s option (%u), length %u (%u): ", - tok2str(icmp6_opt_values, "unknown", op->nd_opt_type), - op->nd_opt_type, - op->nd_opt_len << 3, - op->nd_opt_len); + ND_PRINT((ndo,"\n\t %s option (%u), length %u (%u): ", + tok2str(icmp6_opt_values, "unknown", op->nd_opt_type), + op->nd_opt_type, + op->nd_opt_len << 3, + op->nd_opt_len)); switch (op->nd_opt_type) { case ND_OPT_SOURCE_LINKADDR: l = (op->nd_opt_len << 3) - 2; - print_lladdr(cp + 2, l); + print_lladdr(ndo, cp + 2, l); break; case ND_OPT_TARGET_LINKADDR: l = (op->nd_opt_len << 3) - 2; - print_lladdr(cp + 2, l); + print_lladdr(ndo, cp + 2, l); break; case ND_OPT_PREFIX_INFORMATION: opp = (struct nd_opt_prefix_info *)op; - TCHECK(opp->nd_opt_pi_prefix); - printf("%s/%u%s, Flags [%s], valid time %s", - ip6addr_string(&opp->nd_opt_pi_prefix), - opp->nd_opt_pi_prefix_len, - (op->nd_opt_len != 4) ? "badlen" : "", - bittok2str(icmp6_opt_pi_flag_values, "none", opp->nd_opt_pi_flags_reserved), - get_lifetime(EXTRACT_32BITS(&opp->nd_opt_pi_valid_time))); - printf(", pref. time %s", get_lifetime(EXTRACT_32BITS(&opp->nd_opt_pi_preferred_time))); + ND_TCHECK(opp->nd_opt_pi_prefix); + ND_PRINT((ndo,"%s/%u%s, Flags [%s], valid time %s", + ip6addr_string(&opp->nd_opt_pi_prefix), + opp->nd_opt_pi_prefix_len, + (op->nd_opt_len != 4) ? "badlen" : "", + bittok2str(icmp6_opt_pi_flag_values, "none", opp->nd_opt_pi_flags_reserved), + get_lifetime(EXTRACT_32BITS(&opp->nd_opt_pi_valid_time)))); + ND_PRINT((ndo,", pref. time %s", get_lifetime(EXTRACT_32BITS(&opp->nd_opt_pi_preferred_time)))); break; case ND_OPT_REDIRECTED_HEADER: - print_unknown_data(bp,"\n\t ",op->nd_opt_len<<3); + print_unknown_data(ndo, bp,"\n\t ",op->nd_opt_len<<3); /* xxx */ break; case ND_OPT_MTU: opm = (struct nd_opt_mtu *)op; - TCHECK(opm->nd_opt_mtu_mtu); - printf(" %u%s", + ND_TCHECK(opm->nd_opt_mtu_mtu); + ND_PRINT((ndo," %u%s", EXTRACT_32BITS(&opm->nd_opt_mtu_mtu), - (op->nd_opt_len != 1) ? "bad option length" : "" ); + (op->nd_opt_len != 1) ? "bad option length" : "" )); break; case ND_OPT_RDNSS: oprd = (struct nd_opt_rdnss *)op; l = (op->nd_opt_len - 1) / 2; - printf(" lifetime %us,", - EXTRACT_32BITS(&oprd->nd_opt_rdnss_lifetime)); + ND_PRINT((ndo," lifetime %us,", + EXTRACT_32BITS(&oprd->nd_opt_rdnss_lifetime))); for (i = 0; i < l; i++) { - TCHECK(oprd->nd_opt_rdnss_addr[i]); - printf(" addr: %s", - ip6addr_string(&oprd->nd_opt_rdnss_addr[i])); + ND_TCHECK(oprd->nd_opt_rdnss_addr[i]); + ND_PRINT((ndo," addr: %s", + ip6addr_string(&oprd->nd_opt_rdnss_addr[i]))); } break; case ND_OPT_DNSSL: opds = (struct nd_opt_dnssl *)op; - printf(" lifetime %us, domain(s):", - EXTRACT_32BITS(&opds->nd_opt_dnssl_lifetime)); + ND_PRINT((ndo," lifetime %us, domain(s):", + EXTRACT_32BITS(&opds->nd_opt_dnssl_lifetime))); domp = cp + 8; /* domain names, variable-sized, RFC1035-encoded */ while (domp < cp + (op->nd_opt_len << 3) && *domp != '\0') { @@ -760,51 +760,51 @@ icmp6_opt_print(const u_char *bp, int resid) break; case ND_OPT_ADVINTERVAL: opa = (struct nd_opt_advinterval *)op; - TCHECK(opa->nd_opt_adv_interval); - printf(" %ums", EXTRACT_32BITS(&opa->nd_opt_adv_interval)); + ND_TCHECK(opa->nd_opt_adv_interval); + ND_PRINT((ndo," %ums", EXTRACT_32BITS(&opa->nd_opt_adv_interval))); break; - case ND_OPT_HOMEAGENT_INFO: + case ND_OPT_HOMEAGENT_INFO: oph = (struct nd_opt_homeagent_info *)op; - TCHECK(oph->nd_opt_hai_lifetime); - printf(" preference %u, lifetime %u", - EXTRACT_16BITS(&oph->nd_opt_hai_preference), - EXTRACT_16BITS(&oph->nd_opt_hai_lifetime)); + ND_TCHECK(oph->nd_opt_hai_lifetime); + ND_PRINT((ndo," preference %u, lifetime %u", + EXTRACT_16BITS(&oph->nd_opt_hai_preference), + EXTRACT_16BITS(&oph->nd_opt_hai_lifetime))); break; case ND_OPT_ROUTE_INFO: opri = (struct nd_opt_route_info *)op; - TCHECK(opri->nd_opt_rti_lifetime); + ND_TCHECK(opri->nd_opt_rti_lifetime); memset(&in6, 0, sizeof(in6)); in6p = (struct in6_addr *)(opri + 1); switch (op->nd_opt_len) { case 1: break; case 2: - TCHECK2(*in6p, 8); + ND_TCHECK2(*in6p, 8); memcpy(&in6, opri + 1, 8); break; case 3: - TCHECK(*in6p); + ND_TCHECK(*in6p); memcpy(&in6, opri + 1, sizeof(in6)); break; default: goto trunc; } - printf(" %s/%u", ip6addr_string(&in6), - opri->nd_opt_rti_prefixlen); - printf(", pref=%s", get_rtpref(opri->nd_opt_rti_flags)); - printf(", lifetime=%s", - get_lifetime(EXTRACT_32BITS(&opri->nd_opt_rti_lifetime))); + ND_PRINT((ndo," %s/%u", ip6addr_string(&in6), + opri->nd_opt_rti_prefixlen)); + ND_PRINT((ndo,", pref=%s", get_rtpref(opri->nd_opt_rti_flags))); + ND_PRINT((ndo,", lifetime=%s", + get_lifetime(EXTRACT_32BITS(&opri->nd_opt_rti_lifetime)))); break; default: - if (vflag <= 1) { - print_unknown_data(cp+2,"\n\t ", (op->nd_opt_len << 3) - 2); /* skip option header */ + if (ndo->ndo_vflag <= 1) { + print_unknown_data(ndo,cp+2,"\n\t ", (op->nd_opt_len << 3) - 2); /* skip option header */ return; } break; } /* do we want to see an additional hexdump ? */ - if (vflag> 1) - print_unknown_data(cp+2,"\n\t ", (op->nd_opt_len << 3) - 2); /* skip option header */ + if (ndo->ndo_vflag> 1) + print_unknown_data(ndo, cp+2,"\n\t ", (op->nd_opt_len << 3) - 2); /* skip option header */ cp += op->nd_opt_len << 3; resid -= op->nd_opt_len << 3; @@ -812,29 +812,29 @@ icmp6_opt_print(const u_char *bp, int resid) return; trunc: - fputs("[ndp opt]", stdout); + ND_PRINT((ndo, "[ndp opt]")); return; #undef ECHECK } static void -mld6_print(const u_char *bp) +mld6_print(netdissect_options *ndo, const u_char *bp) { struct mld6_hdr *mp = (struct mld6_hdr *)bp; const u_char *ep; /* 'ep' points to the end of available data. */ - ep = snapend; + ep = ndo->ndo_snapend; if ((u_char *)mp + sizeof(*mp) > ep) return; - printf("max resp delay: %d ", EXTRACT_16BITS(&mp->mld6_maxdelay)); - printf("addr: %s", ip6addr_string(&mp->mld6_addr)); + ND_PRINT((ndo,"max resp delay: %d ", EXTRACT_16BITS(&mp->mld6_maxdelay))); + ND_PRINT((ndo,"addr: %s", ip6addr_string(&mp->mld6_addr))); } static void -mldv2_report_print(const u_char *bp, u_int len) +mldv2_report_print(netdissect_options *ndo, const u_char *bp, u_int len) { struct icmp6_hdr *icp = (struct icmp6_hdr *) bp; u_int group, nsrcs, ngroups; @@ -842,57 +842,57 @@ mldv2_report_print(const u_char *bp, u_int len) /* Minimum len is 8 */ if (len < 8) { - printf(" [invalid len %d]", len); - return; + ND_PRINT((ndo," [invalid len %d]", len)); + return; } - TCHECK(icp->icmp6_data16[1]); + ND_TCHECK(icp->icmp6_data16[1]); ngroups = EXTRACT_16BITS(&icp->icmp6_data16[1]); - 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++) { /* type(1) + auxlen(1) + numsrc(2) + grp(16) */ if (len < group + 20) { - printf(" [invalid number of groups]"); - return; + ND_PRINT((ndo," [invalid number of groups]")); + return; } - TCHECK2(bp[group + 4], sizeof(struct in6_addr)); - printf(" [gaddr %s", ip6addr_string(&bp[group + 4])); - printf(" %s", tok2str(mldv2report2str, " [v2-report-#%d]", - bp[group])); + ND_TCHECK2(bp[group + 4], sizeof(struct in6_addr)); + ND_PRINT((ndo," [gaddr %s", ip6addr_string(&bp[group + 4]))); + ND_PRINT((ndo," %s", tok2str(mldv2report2str, " [v2-report-#%d]", + bp[group]))); nsrcs = (bp[group + 2] << 8) + bp[group + 3]; /* Check the number of sources and print them */ if (len < group + 20 + (nsrcs * sizeof(struct in6_addr))) { - printf(" [invalid number of sources %d]", nsrcs); - return; + ND_PRINT((ndo," [invalid number of sources %d]", nsrcs)); + return; } - if (vflag == 1) - printf(", %d source(s)", nsrcs); + if (ndo->ndo_vflag == 1) + ND_PRINT((ndo,", %d source(s)", nsrcs)); else { /* Print the sources */ - (void)printf(" {"); + (void)ND_PRINT((ndo," {")); for (j = 0; j < nsrcs; j++) { - TCHECK2(bp[group + 20 + j * sizeof(struct in6_addr)], + ND_TCHECK2(bp[group + 20 + j * sizeof(struct in6_addr)], sizeof(struct in6_addr)); - printf(" %s", ip6addr_string(&bp[group + 20 + j * sizeof(struct in6_addr)])); + ND_PRINT((ndo," %s", ip6addr_string(&bp[group + 20 + j * sizeof(struct in6_addr)]))); } - (void)printf(" }"); + (void)ND_PRINT((ndo," }")); } /* Next group record */ group += 20 + nsrcs * sizeof(struct in6_addr); - printf("]"); + ND_PRINT((ndo,"]")); } } return; trunc: - (void)printf("[|icmp6]"); + (void)ND_PRINT((ndo,"[|icmp6]")); return; } static void -mldv2_query_print(const u_char *bp, u_int len) +mldv2_query_print(netdissect_options *ndo, const u_char *bp, u_int len) { struct icmp6_hdr *icp = (struct icmp6_hdr *) bp; u_int mrc; @@ -902,73 +902,73 @@ mldv2_query_print(const u_char *bp, u_int len) /* Minimum len is 28 */ if (len < 28) { - printf(" [invalid len %d]", len); + ND_PRINT((ndo," [invalid len %d]", len)); return; } - TCHECK(icp->icmp6_data16[0]); + ND_TCHECK(icp->icmp6_data16[0]); mrc = EXTRACT_16BITS(&icp->icmp6_data16[0]); if (mrc < 32768) { mrt = mrc; } else { mrt = ((mrc & 0x0fff) | 0x1000) << (((mrc & 0x7000) >> 12) + 3); } - if (vflag) { - (void)printf(" [max resp delay=%d]", mrt); + if (ndo->ndo_vflag) { + (void)ND_PRINT((ndo," [max resp delay=%d]", mrt)); } - TCHECK2(bp[8], sizeof(struct in6_addr)); - printf(" [gaddr %s", ip6addr_string(&bp[8])); + ND_TCHECK2(bp[8], sizeof(struct in6_addr)); + ND_PRINT((ndo," [gaddr %s", ip6addr_string(&bp[8]))); - if (vflag) { - TCHECK(bp[25]); + if (ndo->ndo_vflag) { + ND_TCHECK(bp[25]); if (bp[24] & 0x08) { - printf(" sflag"); + ND_PRINT((ndo," sflag")); } if (bp[24] & 0x07) { - printf(" robustness=%d", bp[24] & 0x07); + ND_PRINT((ndo," robustness=%d", bp[24] & 0x07)); } if (bp[25] < 128) { qqi = bp[25]; } else { qqi = ((bp[25] & 0x0f) | 0x10) << (((bp[25] & 0x70) >> 4) + 3); } - printf(" qqi=%d", qqi); + ND_PRINT((ndo," qqi=%d", qqi)); } - TCHECK2(bp[26], 2); + ND_TCHECK2(bp[26], 2); nsrcs = EXTRACT_16BITS(&bp[26]); if (nsrcs > 0) { if (len < 28 + nsrcs * sizeof(struct in6_addr)) - printf(" [invalid number of sources]"); - else if (vflag > 1) { - 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[28 + i * sizeof(struct in6_addr)], + ND_TCHECK2(bp[28 + i * sizeof(struct in6_addr)], sizeof(struct in6_addr)); - printf(" %s", ip6addr_string(&bp[28 + i * sizeof(struct in6_addr)])); + ND_PRINT((ndo," %s", ip6addr_string(&bp[28 + i * sizeof(struct in6_addr)]))); } - printf(" }"); + ND_PRINT((ndo," }")); } else - printf(", %d source(s)", nsrcs); + ND_PRINT((ndo,", %d source(s)", nsrcs)); } - printf("]"); + ND_PRINT((ndo,"]")); return; trunc: - (void)printf("[|icmp6]"); + (void)ND_PRINT((ndo,"[|icmp6]")); return; } static void -dnsname_print(const u_char *cp, const u_char *ep) +dnsname_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { int i; /* DNS name decoding - no decompression */ - printf(", \""); + ND_PRINT((ndo,", \"")); while (cp < ep) { i = *cp++; if (i) { if (i > ep - cp) { - printf("???"); + ND_PRINT((ndo,"???")); break; } while (i-- && cp < ep) { @@ -976,25 +976,25 @@ dnsname_print(const u_char *cp, const u_char *ep) cp++; } if (cp + 1 < ep && *cp) - printf("."); + ND_PRINT((ndo,".")); } else { if (cp == ep) { /* FQDN */ - printf("."); + ND_PRINT((ndo,".")); } else if (cp + 1 == ep && *cp == '\0') { /* truncated */ } else { /* invalid */ - printf("???"); + ND_PRINT((ndo,"???")); } break; } } - printf("\""); + ND_PRINT((ndo,"\"")); } static void -icmp6_nodeinfo_print(u_int icmp6len, const u_char *bp, const u_char *ep) +icmp6_nodeinfo_print(netdissect_options *ndo, u_int icmp6len, const u_char *bp, const u_char *ep) { struct icmp6_nodeinfo *ni6; struct icmp6_hdr *dp; @@ -1012,238 +1012,238 @@ icmp6_nodeinfo_print(u_int icmp6len, const u_char *bp, const u_char *ep) case ICMP6_NI_QUERY: if (siz == sizeof(*dp) + 4) { /* KAME who-are-you */ - printf(" who-are-you request"); + ND_PRINT((ndo," who-are-you request")); break; } - printf(" node information query"); + ND_PRINT((ndo," node information query")); - TCHECK2(*dp, sizeof(*ni6)); + ND_TCHECK2(*dp, sizeof(*ni6)); ni6 = (struct icmp6_nodeinfo *)dp; - printf(" ("); /*)*/ + ND_PRINT((ndo," (")); /*)*/ switch (EXTRACT_16BITS(&ni6->ni_qtype)) { case NI_QTYPE_NOOP: - printf("noop"); + ND_PRINT((ndo,"noop")); break; case NI_QTYPE_SUPTYPES: - printf("supported qtypes"); + ND_PRINT((ndo,"supported qtypes")); i = EXTRACT_16BITS(&ni6->ni_flags); if (i) - printf(" [%s]", (i & 0x01) ? "C" : ""); + ND_PRINT((ndo," [%s]", (i & 0x01) ? "C" : "")); break; break; case NI_QTYPE_FQDN: - printf("DNS name"); + ND_PRINT((ndo,"DNS name")); break; case NI_QTYPE_NODEADDR: - printf("node addresses"); + ND_PRINT((ndo,"node addresses")); i = ni6->ni_flags; if (!i) break; /* NI_NODEADDR_FLAG_TRUNCATE undefined for query */ - printf(" [%s%s%s%s%s%s]", + ND_PRINT((ndo," [%s%s%s%s%s%s]", (i & NI_NODEADDR_FLAG_ANYCAST) ? "a" : "", (i & NI_NODEADDR_FLAG_GLOBAL) ? "G" : "", (i & NI_NODEADDR_FLAG_SITELOCAL) ? "S" : "", (i & NI_NODEADDR_FLAG_LINKLOCAL) ? "L" : "", (i & NI_NODEADDR_FLAG_COMPAT) ? "C" : "", - (i & NI_NODEADDR_FLAG_ALL) ? "A" : ""); + (i & NI_NODEADDR_FLAG_ALL) ? "A" : "")); break; default: - printf("unknown"); + ND_PRINT((ndo,"unknown")); break; } if (ni6->ni_qtype == NI_QTYPE_NOOP || ni6->ni_qtype == NI_QTYPE_SUPTYPES) { if (siz != sizeof(*ni6)) - if (vflag) - printf(", invalid len"); + if (ndo->ndo_vflag) + ND_PRINT((ndo,", invalid len")); /*(*/ - printf(")"); + ND_PRINT((ndo,")")); break; } /* XXX backward compat, icmp-name-lookup-03 */ if (siz == sizeof(*ni6)) { - printf(", 03 draft"); + ND_PRINT((ndo,", 03 draft")); /*(*/ - printf(")"); + ND_PRINT((ndo,")")); break; } switch (ni6->ni_code) { case ICMP6_NI_SUBJ_IPV6: - if (!TTEST2(*dp, + if (!ND_TTEST2(*dp, sizeof(*ni6) + sizeof(struct in6_addr))) break; if (siz != sizeof(*ni6) + sizeof(struct in6_addr)) { - if (vflag) - printf(", invalid subject len"); + if (ndo->ndo_vflag) + ND_PRINT((ndo,", invalid subject len")); break; } - printf(", subject=%s", - getname6((const u_char *)(ni6 + 1))); + ND_PRINT((ndo,", subject=%s", + getname6((const u_char *)(ni6 + 1)))); break; case ICMP6_NI_SUBJ_FQDN: - printf(", subject=DNS name"); + ND_PRINT((ndo,", subject=DNS name")); cp = (const u_char *)(ni6 + 1); if (cp[0] == ep - cp - 1) { /* icmp-name-lookup-03, pascal string */ - if (vflag) - printf(", 03 draft"); + if (ndo->ndo_vflag) + ND_PRINT((ndo,", 03 draft")); cp++; - printf(", \""); + ND_PRINT((ndo,", \"")); while (cp < ep) { safeputchar(*cp); cp++; } - printf("\""); + ND_PRINT((ndo,"\"")); } else - dnsname_print(cp, ep); + dnsname_print(ndo, cp, ep); break; case ICMP6_NI_SUBJ_IPV4: - if (!TTEST2(*dp, sizeof(*ni6) + sizeof(struct in_addr))) + if (!ND_TTEST2(*dp, sizeof(*ni6) + sizeof(struct in_addr))) break; if (siz != sizeof(*ni6) + sizeof(struct in_addr)) { - if (vflag) - printf(", invalid subject len"); + if (ndo->ndo_vflag) + ND_PRINT((ndo,", invalid subject len")); break; } - printf(", subject=%s", - getname((const u_char *)(ni6 + 1))); + ND_PRINT((ndo,", subject=%s", + getname((const u_char *)(ni6 + 1)))); break; default: - printf(", unknown subject"); + ND_PRINT((ndo,", unknown subject")); break; } /*(*/ - printf(")"); + ND_PRINT((ndo,")")); break; case ICMP6_NI_REPLY: if (icmp6len > siz) { - printf("[|icmp6: node information reply]"); + ND_PRINT((ndo,"[|icmp6: node information reply]")); break; } needcomma = 0; ni6 = (struct icmp6_nodeinfo *)dp; - printf(" node information reply"); - printf(" ("); /*)*/ + ND_PRINT((ndo," node information reply")); + ND_PRINT((ndo," (")); /*)*/ switch (ni6->ni_code) { case ICMP6_NI_SUCCESS: - if (vflag) { - printf("success"); + if (ndo->ndo_vflag) { + ND_PRINT((ndo,"success")); needcomma++; } break; case ICMP6_NI_REFUSED: - printf("refused"); + ND_PRINT((ndo,"refused")); needcomma++; if (siz != sizeof(*ni6)) - if (vflag) - printf(", invalid length"); + if (ndo->ndo_vflag) + ND_PRINT((ndo,", invalid length")); break; case ICMP6_NI_UNKNOWN: - printf("unknown"); + ND_PRINT((ndo,"unknown")); needcomma++; if (siz != sizeof(*ni6)) - if (vflag) - printf(", invalid length"); + if (ndo->ndo_vflag) + ND_PRINT((ndo,", invalid length")); break; } if (ni6->ni_code != ICMP6_NI_SUCCESS) { /*(*/ - printf(")"); + ND_PRINT((ndo,")")); break; } switch (EXTRACT_16BITS(&ni6->ni_qtype)) { case NI_QTYPE_NOOP: if (needcomma) - printf(", "); - printf("noop"); + ND_PRINT((ndo,", ")); + ND_PRINT((ndo,"noop")); if (siz != sizeof(*ni6)) - if (vflag) - printf(", invalid length"); + if (ndo->ndo_vflag) + ND_PRINT((ndo,", invalid length")); break; case NI_QTYPE_SUPTYPES: if (needcomma) - printf(", "); - printf("supported qtypes"); + ND_PRINT((ndo,", ")); + ND_PRINT((ndo,"supported qtypes")); i = EXTRACT_16BITS(&ni6->ni_flags); if (i) - printf(" [%s]", (i & 0x01) ? "C" : ""); + ND_PRINT((ndo," [%s]", (i & 0x01) ? "C" : "")); break; case NI_QTYPE_FQDN: if (needcomma) - printf(", "); - printf("DNS name"); + ND_PRINT((ndo,", ")); + ND_PRINT((ndo,"DNS name")); cp = (const u_char *)(ni6 + 1) + 4; if (cp[0] == ep - cp - 1) { /* icmp-name-lookup-03, pascal string */ - if (vflag) - printf(", 03 draft"); + if (ndo->ndo_vflag) + ND_PRINT((ndo,", 03 draft")); cp++; - printf(", \""); + ND_PRINT((ndo,", \"")); while (cp < ep) { safeputchar(*cp); cp++; } - printf("\""); + ND_PRINT((ndo,"\"")); } else - dnsname_print(cp, ep); + dnsname_print(ndo, cp, ep); if ((EXTRACT_16BITS(&ni6->ni_flags) & 0x01) != 0) - printf(" [TTL=%u]", *(u_int32_t *)(ni6 + 1)); + ND_PRINT((ndo," [TTL=%u]", *(u_int32_t *)(ni6 + 1))); break; case NI_QTYPE_NODEADDR: if (needcomma) - printf(", "); - printf("node addresses"); + ND_PRINT((ndo,", ")); + ND_PRINT((ndo,"node addresses")); i = sizeof(*ni6); while (i < siz) { if (i + sizeof(struct in6_addr) + sizeof(int32_t) > siz) break; - printf(" %s", getname6(bp + i)); + ND_PRINT((ndo," %s", getname6(bp + i))); i += sizeof(struct in6_addr); - printf("(%d)", (int32_t)EXTRACT_32BITS(bp + i)); + ND_PRINT((ndo,"(%d)", (int32_t)EXTRACT_32BITS(bp + i))); i += sizeof(int32_t); } i = ni6->ni_flags; if (!i) break; - printf(" [%s%s%s%s%s%s%s]", - (i & NI_NODEADDR_FLAG_ANYCAST) ? "a" : "", - (i & NI_NODEADDR_FLAG_GLOBAL) ? "G" : "", - (i & NI_NODEADDR_FLAG_SITELOCAL) ? "S" : "", - (i & NI_NODEADDR_FLAG_LINKLOCAL) ? "L" : "", - (i & NI_NODEADDR_FLAG_COMPAT) ? "C" : "", - (i & NI_NODEADDR_FLAG_ALL) ? "A" : "", - (i & NI_NODEADDR_FLAG_TRUNCATE) ? "T" : ""); + ND_PRINT((ndo," [%s%s%s%s%s%s%s]", + (i & NI_NODEADDR_FLAG_ANYCAST) ? "a" : "", + (i & NI_NODEADDR_FLAG_GLOBAL) ? "G" : "", + (i & NI_NODEADDR_FLAG_SITELOCAL) ? "S" : "", + (i & NI_NODEADDR_FLAG_LINKLOCAL) ? "L" : "", + (i & NI_NODEADDR_FLAG_COMPAT) ? "C" : "", + (i & NI_NODEADDR_FLAG_ALL) ? "A" : "", + (i & NI_NODEADDR_FLAG_TRUNCATE) ? "T" : "")); break; default: if (needcomma) - printf(", "); - printf("unknown"); + ND_PRINT((ndo,", ")); + ND_PRINT((ndo,"unknown")); break; } /*(*/ - printf(")"); + ND_PRINT((ndo,")")); break; } return; trunc: - fputs("[|icmp6]", stdout); + ND_PRINT((ndo, "[|icmp6]")); } static void -icmp6_rrenum_print(const u_char *bp, const u_char *ep) +icmp6_rrenum_print(netdissect_options *ndo, const u_char *bp, const u_char *ep) { struct icmp6_router_renum *rr6; const char *cp; @@ -1257,40 +1257,40 @@ icmp6_rrenum_print(const u_char *bp, const u_char *ep) rr6 = (struct icmp6_router_renum *)bp; cp = (const char *)(rr6 + 1); - TCHECK(rr6->rr_reserved); + ND_TCHECK(rr6->rr_reserved); switch (rr6->rr_code) { case ICMP6_ROUTER_RENUMBERING_COMMAND: - printf("router renum: command"); + ND_PRINT((ndo,"router renum: command")); break; case ICMP6_ROUTER_RENUMBERING_RESULT: - printf("router renum: result"); + ND_PRINT((ndo,"router renum: result")); break; case ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET: - printf("router renum: sequence number reset"); + ND_PRINT((ndo,"router renum: sequence number reset")); break; default: - printf("router renum: code-#%d", rr6->rr_code); + ND_PRINT((ndo,"router renum: code-#%d", rr6->rr_code)); break; } - printf(", seq=%u", EXTRACT_32BITS(&rr6->rr_seqnum)); + ND_PRINT((ndo,", seq=%u", EXTRACT_32BITS(&rr6->rr_seqnum))); - if (vflag) { + if (ndo->ndo_vflag) { #define F(x, y) ((rr6->rr_flags) & (x) ? (y) : "") - printf("["); /*]*/ + ND_PRINT((ndo,"[")); /*]*/ if (rr6->rr_flags) { - printf("%s%s%s%s%s,", F(ICMP6_RR_FLAGS_TEST, "T"), - F(ICMP6_RR_FLAGS_REQRESULT, "R"), - F(ICMP6_RR_FLAGS_FORCEAPPLY, "A"), - F(ICMP6_RR_FLAGS_SPECSITE, "S"), - F(ICMP6_RR_FLAGS_PREVDONE, "P")); + ND_PRINT((ndo,"%s%s%s%s%s,", F(ICMP6_RR_FLAGS_TEST, "T"), + F(ICMP6_RR_FLAGS_REQRESULT, "R"), + F(ICMP6_RR_FLAGS_FORCEAPPLY, "A"), + F(ICMP6_RR_FLAGS_SPECSITE, "S"), + F(ICMP6_RR_FLAGS_PREVDONE, "P"))); } - printf("seg=%u,", rr6->rr_segnum); - printf("maxdelay=%u", EXTRACT_16BITS(&rr6->rr_maxdelay)); + ND_PRINT((ndo,"seg=%u,", rr6->rr_segnum)); + ND_PRINT((ndo,"maxdelay=%u", EXTRACT_16BITS(&rr6->rr_maxdelay))); if (rr6->rr_reserved) - printf("rsvd=0x%x", EXTRACT_32BITS(&rr6->rr_reserved)); + ND_PRINT((ndo,"rsvd=0x%x", EXTRACT_32BITS(&rr6->rr_reserved))); /*[*/ - printf("]"); + ND_PRINT((ndo,"]")); #undef F } @@ -1298,31 +1298,31 @@ icmp6_rrenum_print(const u_char *bp, const u_char *ep) match = (struct rr_pco_match *)cp; cp = (const char *)(match + 1); - TCHECK(match->rpm_prefix); + ND_TCHECK(match->rpm_prefix); - if (vflag > 1) - printf("\n\t"); + if (ndo->ndo_vflag > 1) + ND_PRINT((ndo,"\n\t")); else - printf(" "); - printf("match("); /*)*/ + ND_PRINT((ndo," ")); + ND_PRINT((ndo,"match(")); /*)*/ switch (match->rpm_code) { - case RPM_PCO_ADD: printf("add"); break; - case RPM_PCO_CHANGE: printf("change"); break; - case RPM_PCO_SETGLOBAL: printf("setglobal"); break; - default: printf("#%u", match->rpm_code); break; + case RPM_PCO_ADD: ND_PRINT((ndo,"add")); break; + case RPM_PCO_CHANGE: ND_PRINT((ndo,"change")); break; + case RPM_PCO_SETGLOBAL: ND_PRINT((ndo,"setglobal")); break; + default: ND_PRINT((ndo,"#%u", match->rpm_code)); break; } - if (vflag) { - printf(",ord=%u", match->rpm_ordinal); - printf(",min=%u", match->rpm_minlen); - printf(",max=%u", match->rpm_maxlen); + if (ndo->ndo_vflag) { + ND_PRINT((ndo,",ord=%u", match->rpm_ordinal)); + ND_PRINT((ndo,",min=%u", match->rpm_minlen)); + ND_PRINT((ndo,",max=%u", match->rpm_maxlen)); } if (inet_ntop(AF_INET6, &match->rpm_prefix, hbuf, sizeof(hbuf))) - printf(",%s/%u", hbuf, match->rpm_matchlen); + ND_PRINT((ndo,",%s/%u", hbuf, match->rpm_matchlen)); else - printf(",?/%u", match->rpm_matchlen); + ND_PRINT((ndo,",?/%u", match->rpm_matchlen)); /*(*/ - printf(")"); + ND_PRINT((ndo,")")); n = match->rpm_len - 3; if (n % 4) @@ -1332,50 +1332,57 @@ icmp6_rrenum_print(const u_char *bp, const u_char *ep) use = (struct rr_pco_use *)cp; cp = (const char *)(use + 1); - TCHECK(use->rpu_prefix); + ND_TCHECK(use->rpu_prefix); - if (vflag > 1) - printf("\n\t"); + if (ndo->ndo_vflag > 1) + ND_PRINT((ndo,"\n\t")); else - printf(" "); - printf("use("); /*)*/ + ND_PRINT((ndo," ")); + ND_PRINT((ndo,"use(")); /*)*/ if (use->rpu_flags) { #define F(x, y) ((use->rpu_flags) & (x) ? (y) : "") - printf("%s%s,", - F(ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME, "V"), - F(ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME, "P")); + ND_PRINT((ndo,"%s%s,", + F(ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME, "V"), + F(ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME, "P"))); #undef F } - if (vflag) { - printf("mask=0x%x,", use->rpu_ramask); - printf("raflags=0x%x,", use->rpu_raflags); + if (ndo->ndo_vflag) { + ND_PRINT((ndo,"mask=0x%x,", use->rpu_ramask)); + ND_PRINT((ndo,"raflags=0x%x,", use->rpu_raflags)); if (~use->rpu_vltime == 0) - printf("vltime=infty,"); + ND_PRINT((ndo,"vltime=infty,")); else - printf("vltime=%u,", - EXTRACT_32BITS(&use->rpu_vltime)); + ND_PRINT((ndo,"vltime=%u,", + EXTRACT_32BITS(&use->rpu_vltime))); if (~use->rpu_pltime == 0) - printf("pltime=infty,"); + ND_PRINT((ndo,"pltime=infty,")); else - printf("pltime=%u,", - EXTRACT_32BITS(&use->rpu_pltime)); + ND_PRINT((ndo,"pltime=%u,", + EXTRACT_32BITS(&use->rpu_pltime))); } if (inet_ntop(AF_INET6, &use->rpu_prefix, hbuf, sizeof(hbuf))) - printf("%s/%u/%u", hbuf, use->rpu_uselen, - use->rpu_keeplen); + ND_PRINT((ndo,"%s/%u/%u", hbuf, use->rpu_uselen, + use->rpu_keeplen)); else - printf("?/%u/%u", use->rpu_uselen, - use->rpu_keeplen); + ND_PRINT((ndo,"?/%u/%u", use->rpu_uselen, + use->rpu_keeplen)); /*(*/ - printf(")"); + ND_PRINT((ndo,")")); } } return; trunc: - fputs("[|icmp6]", stdout); + ND_PRINT((ndo,"[|icmp6]")); } #endif /* INET6 */ + +/* + * Local Variables: + * c-style: whitesmith + * c-basic-offset: 8 + * End: + */ diff --git a/print-ip6.c b/print-ip6.c index 97649ca2..23b54316 100644 --- a/print-ip6.c +++ b/print-ip6.c @@ -103,8 +103,8 @@ ip6_print(netdissect_options *ndo, const u_char *bp, u_int length) ND_PRINT((ndo, "IP6 ")); if (IP6_VERSION(ip6) != 6) { - printf("version error: %u != 6", IP6_VERSION(ip6)); - return; + ND_PRINT((ndo,"version error: %u != 6", IP6_VERSION(ip6))); + return; } payload_len = EXTRACT_16BITS(&ip6->ip6_plen); diff --git a/print-isoclns.c b/print-isoclns.c index 2097a855..cc441c11 100644 --- a/print-isoclns.c +++ b/print-isoclns.c @@ -686,7 +686,7 @@ void isoclns_print(const u_int8_t *p, u_int length, u_int caplen) case NLPID_CLNP: if (!clnp_print(p, length)) - print_unknown_data(p,"\n\t",caplen); + print_unknown_data(gndo,p,"\n\t",caplen); break; case NLPID_ESIS: @@ -695,7 +695,7 @@ void isoclns_print(const u_int8_t *p, u_int length, u_int caplen) case NLPID_ISIS: if (!isis_print(p, length)) - print_unknown_data(p,"\n\t",caplen); + print_unknown_data(gndo,p,"\n\t",caplen); break; case NLPID_NULLNS: @@ -729,7 +729,7 @@ void isoclns_print(const u_int8_t *p, u_int length, u_int caplen) eflag ? "" : ", ", length); if (caplen > 1) - print_unknown_data(p,"\n\t",caplen); + print_unknown_data(gndo,p,"\n\t",caplen); break; } } @@ -962,11 +962,11 @@ static int clnp_print (const u_int8_t *pptr, u_int length) */ default: - print_unknown_data(tptr,"\n\t ",opli); + print_unknown_data(gndo,tptr,"\n\t ",opli); break; } if (vflag > 1) - print_unknown_data(pptr,"\n\t ",opli); + print_unknown_data(gndo,pptr,"\n\t ",opli); pptr += opli; } @@ -990,7 +990,7 @@ static int clnp_print (const u_int8_t *pptr, u_int length) /* dump the PDU specific data */ if (length-(pptr-optr) > 0) { printf("\n\t undecoded non-header data, length %u",length-clnp_header->length_indicator); - print_unknown_data(pptr,"\n\t ",length-(pptr-optr)); + print_unknown_data(gndo,pptr,"\n\t ",length-(pptr-optr)); } } @@ -1096,7 +1096,7 @@ esis_print(const u_int8_t *pptr, u_int length) printf(", holding time: %us, length indicator: %u",EXTRACT_16BITS(esis_header->holdtime),li); if (vflag > 1) - print_unknown_data(optr,"\n\t",sizeof(struct esis_header_t)); + print_unknown_data(gndo,optr,"\n\t",sizeof(struct esis_header_t)); pptr += sizeof(struct esis_header_t); li -= sizeof(struct esis_header_t); @@ -1223,7 +1223,7 @@ esis_print(const u_int8_t *pptr, u_int length) default: if (vflag <= 1) { if (pptr < snapend) - print_unknown_data(pptr,"\n\t ",snapend-pptr); + print_unknown_data(gndo,pptr,"\n\t ",snapend-pptr); } return; } @@ -1290,11 +1290,11 @@ esis_print(const u_int8_t *pptr, u_int length) case ESIS_OPTION_SNPA_MASK: default: - print_unknown_data(tptr,"\n\t ",opli); + print_unknown_data(gndo,tptr,"\n\t ",opli); break; } if (vflag > 1) - print_unknown_data(pptr,"\n\t ",opli); + print_unknown_data(gndo,pptr,"\n\t ",opli); pptr += opli; } trunc: @@ -1701,7 +1701,7 @@ isis_print_ip_reach_subtlv (const u_int8_t *tptr,int subt,int subl,const char *i } break; default: - if(!print_unknown_data(tptr,"\n\t\t ", + if(!print_unknown_data(gndo,tptr,"\n\t\t ", subl)) return(0); break; @@ -1856,7 +1856,7 @@ isis_print_is_reach_subtlv (const u_int8_t *tptr,u_int subt,u_int subl,const cha /* there is some optional stuff left to decode but this is as of yet not specified so just lets hexdump what is left */ if(subl>0){ - if(!print_unknown_data(tptr,"\n\t\t ", + if(!print_unknown_data(gndo,tptr,"\n\t\t ", subl)) return(0); } @@ -1864,7 +1864,7 @@ isis_print_is_reach_subtlv (const u_int8_t *tptr,u_int subt,u_int subl,const cha } break; default: - if(!print_unknown_data(tptr,"\n\t\t ", + if(!print_unknown_data(gndo,tptr,"\n\t\t ", subl)) return(0); break; @@ -2230,7 +2230,7 @@ static int isis_print (const u_int8_t *p, u_int length) isis_header->max_area); if (vflag > 1) { - if(!print_unknown_data(optr,"\n\t",8)) /* provide the _o_riginal pointer */ + if(!print_unknown_data(gndo,optr,"\n\t",8)) /* provide the _o_riginal pointer */ return(0); /* for optionally debugging the common header */ } @@ -2264,7 +2264,7 @@ static int isis_print (const u_int8_t *p, u_int length) pdu_len); if (vflag > 1) { - if(!print_unknown_data(pptr,"\n\t ",ISIS_IIH_LAN_HEADER_SIZE)) + if(!print_unknown_data(gndo,pptr,"\n\t ",ISIS_IIH_LAN_HEADER_SIZE)) return(0); } @@ -2298,7 +2298,7 @@ static int isis_print (const u_int8_t *p, u_int length) pdu_len); if (vflag > 1) { - if(!print_unknown_data(pptr,"\n\t ",ISIS_IIH_PTP_HEADER_SIZE)) + if(!print_unknown_data(gndo,pptr,"\n\t ",ISIS_IIH_PTP_HEADER_SIZE)) return(0); } @@ -2355,7 +2355,7 @@ static int isis_print (const u_int8_t *p, u_int length) printf("%s ]", tok2str(isis_lsp_istype_values,"Unknown(0x%x)",ISIS_MASK_LSP_ISTYPE_BITS(header_lsp->typeblock))); if (vflag > 1) { - if(!print_unknown_data(pptr,"\n\t ",ISIS_LSP_HEADER_SIZE)) + if(!print_unknown_data(gndo,pptr,"\n\t ",ISIS_LSP_HEADER_SIZE)) return(0); } @@ -2387,7 +2387,7 @@ static int isis_print (const u_int8_t *p, u_int length) isis_print_id(header_csnp->end_lsp_id, LSP_ID_LEN)); if (vflag > 1) { - if(!print_unknown_data(pptr,"\n\t ",ISIS_CSNP_HEADER_SIZE)) + if(!print_unknown_data(gndo,pptr,"\n\t ",ISIS_CSNP_HEADER_SIZE)) return(0); } @@ -2415,7 +2415,7 @@ static int isis_print (const u_int8_t *p, u_int length) pdu_len); if (vflag > 1) { - if(!print_unknown_data(pptr,"\n\t ",ISIS_PSNP_HEADER_SIZE)) + if(!print_unknown_data(gndo,pptr,"\n\t ",ISIS_PSNP_HEADER_SIZE)) return(0); } @@ -2424,7 +2424,7 @@ static int isis_print (const u_int8_t *p, u_int length) break; default: - if(!print_unknown_data(pptr,"\n\t ",length)) + if(!print_unknown_data(gndo,pptr,"\n\t ",length)) return(0); return (0); } @@ -2702,7 +2702,7 @@ static int isis_print (const u_int8_t *p, u_int length) break; case ISIS_SUBTLV_AUTH_PRIVATE: default: - if(!print_unknown_data(tptr+1,"\n\t\t ",tlv_len-1)) + if(!print_unknown_data(gndo,tptr+1,"\n\t\t ",tlv_len-1)) return(0); break; } @@ -2966,7 +2966,7 @@ static int isis_print (const u_int8_t *p, u_int length) case ISIS_SUBTLV_IDRP_LOCAL: case ISIS_SUBTLV_IDRP_RES: default: - if(!print_unknown_data(tptr,"\n\t ",tlv_len-1)) + if(!print_unknown_data(gndo,tptr,"\n\t ",tlv_len-1)) return(0); break; } @@ -3041,7 +3041,7 @@ static int isis_print (const u_int8_t *p, u_int length) tptr+=3; tmp-=3; if (tmp > 0) /* hexdump the rest */ - if(!print_unknown_data(tptr,"\n\t\t",tmp)) + if(!print_unknown_data(gndo,tptr,"\n\t\t",tmp)) return(0); break; /* @@ -3057,14 +3057,14 @@ static int isis_print (const u_int8_t *p, u_int length) default: if (vflag <= 1) { - if(!print_unknown_data(pptr,"\n\t\t",tlv_len)) + if(!print_unknown_data(gndo,pptr,"\n\t\t",tlv_len)) return(0); } break; } /* do we want to see an additionally hexdump ? */ if (vflag> 1) { - if(!print_unknown_data(pptr,"\n\t ",tlv_len)) + if(!print_unknown_data(gndo,pptr,"\n\t ",tlv_len)) return(0); } diff --git a/print-ldp.c b/print-ldp.c index f852004d..58f63247 100644 --- a/print-ldp.c +++ b/print-ldp.c @@ -455,7 +455,7 @@ ldp_tlv_print(register const u_char *tptr) { break; default: - print_unknown_data(tptr+2,"\n\t\t ",vc_info_tlv_len-2); + print_unknown_data(gndo,tptr+2,"\n\t\t ",vc_info_tlv_len-2); break; } @@ -529,7 +529,7 @@ ldp_tlv_print(register const u_char *tptr) { default: if (vflag <= 1) - print_unknown_data(tptr,"\n\t ",tlv_tlen); + print_unknown_data(gndo,tptr,"\n\t ",tlv_tlen); break; } return(tlv_len+4); /* Type & Length fields not included */ @@ -657,12 +657,12 @@ ldp_msg_print(register const u_char *pptr) { default: if (vflag <= 1) - print_unknown_data(msg_tptr,"\n\t ",msg_tlen); + print_unknown_data(gndo,msg_tptr,"\n\t ",msg_tlen); break; } /* do we want to see an additionally hexdump ? */ if (vflag > 1 || hexdump==TRUE) - print_unknown_data(tptr+sizeof(struct ldp_msg_header),"\n\t ", + print_unknown_data(gndo,tptr+sizeof(struct ldp_msg_header),"\n\t ", msg_len); tptr += msg_len+4; @@ -674,3 +674,9 @@ trunc: return 0; } +/* + * Local Variables: + * c-style: whitesmith + * c-basic-offset: 8 + * End: + */ diff --git a/print-lldp.c b/print-lldp.c index 2cbe7d3e..f9acfb5d 100644 --- a/print-lldp.c +++ b/print-lldp.c @@ -1052,7 +1052,7 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len) default: printf("\n\t Location ID "); - print_unknown_data(tptr+5, "\n\t ", tlv_len-5); + print_unknown_data(gndo,tptr+5, "\n\t ", tlv_len-5); } break; @@ -1247,7 +1247,7 @@ lldp_private_dcbx_print(const u_char *pptr, u_int len) /* do we also want to see a hex dump ? */ if (vflag > 1 || (vflag && hexdump)) { - print_unknown_data(tptr,"\n\t ", tlv_len); + print_unknown_data(gndo,tptr,"\n\t ", tlv_len); } tlen -= tlv_len; @@ -1586,7 +1586,7 @@ lldp_print(register const u_char *pptr, register u_int len) { /* do we also want to see a hex dump ? */ if (vflag > 1 || (vflag && hexdump)) { - print_unknown_data(tptr,"\n\t ", tlv_len); + print_unknown_data(gndo,tptr,"\n\t ", tlv_len); } tlen -= tlv_len; diff --git a/print-lmp.c b/print-lmp.c index 614089cd..5a3c4edc 100644 --- a/print-lmp.c +++ b/print-lmp.c @@ -866,12 +866,12 @@ lmp_print(register const u_char *pptr, register u_int len) { default: if (vflag <= 1) - print_unknown_data(obj_tptr,"\n\t ",obj_tlen); + print_unknown_data(gndo,obj_tptr,"\n\t ",obj_tlen); break; } /* do we want to see an additionally hexdump ? */ if (vflag > 1 || hexdump==TRUE) - print_unknown_data(tptr+sizeof(struct lmp_object_header),"\n\t ", + print_unknown_data(gndo,tptr+sizeof(struct lmp_object_header),"\n\t ", lmp_obj_len-sizeof(struct lmp_object_header)); tptr+=lmp_obj_len; @@ -881,3 +881,9 @@ lmp_print(register const u_char *pptr, register u_int len) { trunc: printf("\n\t\t packet exceeded snapshot"); } +/* + * Local Variables: + * c-style: whitesmith + * c-basic-offset: 8 + * End: + */ diff --git a/print-lspping.c b/print-lspping.c index f51d7ad7..18ff102c 100644 --- a/print-lspping.c +++ b/print-lspping.c @@ -768,7 +768,7 @@ lspping_print(register const u_char *pptr, register u_int len) { } /* do we want to see an additionally subtlv hexdump ? */ if (vflag > 1 || subtlv_hexdump==TRUE) - print_unknown_data(tlv_tptr+sizeof(struct lspping_tlv_header), \ + print_unknown_data(gndo,tlv_tptr+sizeof(struct lspping_tlv_header), \ "\n\t ", lspping_subtlv_len); @@ -873,12 +873,12 @@ lspping_print(register const u_char *pptr, register u_int len) { default: if (vflag <= 1) - print_unknown_data(tlv_tptr,"\n\t ",tlv_tlen); + print_unknown_data(gndo,tlv_tptr,"\n\t ",tlv_tlen); break; } /* do we want to see an additionally tlv hexdump ? */ if (vflag > 1 || tlv_hexdump==TRUE) - print_unknown_data(tptr+sizeof(struct lspping_tlv_header),"\n\t ", + print_unknown_data(gndo,tptr+sizeof(struct lspping_tlv_header),"\n\t ", lspping_tlv_len); @@ -894,3 +894,9 @@ lspping_print(register const u_char *pptr, register u_int len) { trunc: printf("\n\t\t packet exceeded snapshot"); } +/* + * Local Variables: + * c-style: whitesmith + * c-basic-offset: 8 + * End: + */ diff --git a/print-lwapp.c b/print-lwapp.c index 41b7e08a..8a8c9e0a 100644 --- a/print-lwapp.c +++ b/print-lwapp.c @@ -343,7 +343,7 @@ lwapp_data_print(const u_char *pptr, u_int len) { tlen-=sizeof(const struct lwapp_transport_header); /* FIX - An IEEE 802.11 frame follows - hexdump for now */ - print_unknown_data(tptr, "\n\t", tlen); + print_unknown_data(gndo,tptr, "\n\t", tlen); return; diff --git a/print-mpcp.c b/print-mpcp.c index 47fa7dbf..fcffcf2c 100644 --- a/print-mpcp.c +++ b/print-mpcp.c @@ -263,7 +263,7 @@ mpcp_print(register const u_char *pptr, register u_int length) { default: /* unknown opcode - hexdump for now */ - print_unknown_data(pptr, "\n\t", length); + print_unknown_data(gndo,pptr, "\n\t", length); break; } @@ -272,3 +272,9 @@ mpcp_print(register const u_char *pptr, register u_int length) { trunc: printf("\n\t[|MPCP]"); } +/* + * Local Variables: + * c-style: whitesmith + * c-basic-offset: 8 + * End: + */ diff --git a/print-olsr.c b/print-olsr.c index 2713c09c..a7fe2197 100644 --- a/print-olsr.c +++ b/print-olsr.c @@ -606,7 +606,7 @@ olsr_print (const u_char *pptr, u_int length, int is_ipv6) */ case OLSR_POWERINFO_MSG: default: - print_unknown_data(msg_data, "\n\t ", msg_tlen); + print_unknown_data(gndo,msg_data, "\n\t ", msg_tlen); break; } /* switch (msg_type) */ tptr += msg_len; diff --git a/print-ospf.c b/print-ospf.c index 55feeba5..efd013ee 100644 --- a/print-ospf.c +++ b/print-ospf.c @@ -256,7 +256,7 @@ ospf_print_grace_lsa (const u_int8_t *tptr, u_int ls_length) { default: if (vflag <= 1) { - if(!print_unknown_data(tptr,"\n\t ",tlv_length)) + if(!print_unknown_data(gndo,tptr,"\n\t ",tlv_length)) return -1; } break; @@ -416,7 +416,7 @@ ospf_print_te_lsa (const u_int8_t *tptr, u_int ls_length) { default: if (vflag <= 1) { - if(!print_unknown_data(tptr,"\n\t\t",subtlv_length)) + if(!print_unknown_data(gndo,tptr,"\n\t\t",subtlv_length)) return -1; } break; @@ -442,7 +442,7 @@ ospf_print_te_lsa (const u_int8_t *tptr, u_int ls_length) { default: if (vflag <= 1) { - if(!print_unknown_data(tptr,"\n\t ",tlv_length)) + if(!print_unknown_data(gndo,tptr,"\n\t ",tlv_length)) return -1; } break; @@ -780,7 +780,7 @@ ospf_print_lsa(register const struct lsa *lsap) break; default: if (vflag <= 1) { - if(!print_unknown_data(tptr,"\n\t ",tlv_length)) + if(!print_unknown_data(gndo,tptr,"\n\t ",tlv_length)) return(ls_end); } break; @@ -807,7 +807,7 @@ ospf_print_lsa(register const struct lsa *lsap) default: if (vflag <= 1) { - if(!print_unknown_data((u_int8_t *)lsap->lsa_un.un_unknown, + if(!print_unknown_data(gndo,(u_int8_t *)lsap->lsa_un.un_unknown, "\n\t ", ls_length)) return(ls_end); } @@ -817,7 +817,7 @@ ospf_print_lsa(register const struct lsa *lsap) /* do we want to see an additionally hexdump ? */ if (vflag> 1) - if(!print_unknown_data((u_int8_t *)lsap->lsa_un.un_unknown, + if(!print_unknown_data(gndo,(u_int8_t *)lsap->lsa_un.un_unknown, "\n\t ", ls_length)) { return(ls_end); } diff --git a/print-ospf6.c b/print-ospf6.c index dba73ab8..f22418b6 100644 --- a/print-ospf6.c +++ b/print-ospf6.c @@ -460,7 +460,7 @@ ospf6_print_lsa(register const struct lsa6 *lsap, const u_char *dataend) break; default: - if(!print_unknown_data(tptr, + if(!print_unknown_data(gndo,tptr, "\n\t ", lsa_length)) { return (1); @@ -655,7 +655,7 @@ ospf6_decode_at(const u_char *cp, const u_int len) /* Authentication Data */ TCHECK2(*cp, authdatalen - OSPF6_AT_HDRLEN); if (vflag > 1) - print_unknown_data(cp, "\n\tAuthentication Data ", authdatalen - OSPF6_AT_HDRLEN); + print_unknown_data(gndo,cp, "\n\tAuthentication Data ", authdatalen - OSPF6_AT_HDRLEN); return 0; trunc: diff --git a/print-pim.c b/print-pim.c index 3c6b7d34..157df46f 100644 --- a/print-pim.c +++ b/print-pim.c @@ -730,12 +730,12 @@ pimv2_print(register const u_char *bp, register u_int len, u_int cksum) break; default: if (vflag <= 1) - print_unknown_data(bp,"\n\t ",olen); + print_unknown_data(gndo,bp,"\n\t ",olen); break; } /* do we want to see an additionally hexdump ? */ if (vflag> 1) - print_unknown_data(bp,"\n\t ",olen); + print_unknown_data(gndo,bp,"\n\t ",olen); bp += olen; } break; diff --git a/print-ppp.c b/print-ppp.c index de49e7e3..d45d4441 100644 --- a/print-ppp.c +++ b/print-ppp.c @@ -459,7 +459,7 @@ handle_ctrl_proto(u_int proto, const u_char *pptr, int length) printf("\n\tencoded length %u (=Option(s) length %u)",len,len-4); if (vflag>1) - print_unknown_data(pptr-2,"\n\t",6); + print_unknown_data(gndo,pptr-2,"\n\t",6); switch (code) { @@ -533,7 +533,7 @@ handle_ctrl_proto(u_int proto, const u_char *pptr, int length) /* XXX: need to decode Rejected-Information? - hexdump for now */ if (len > 6) { printf("\n\t Rejected Packet"); - print_unknown_data(tptr+2,"\n\t ",len-2); + print_unknown_data(gndo,tptr+2,"\n\t ",len-2); } break; case CPCODES_ECHO_REQ: @@ -547,7 +547,7 @@ handle_ctrl_proto(u_int proto, const u_char *pptr, int length) if (len > 8) { printf("\n\t -----trailing data-----"); TCHECK2(tptr[4], len-8); - print_unknown_data(tptr+4,"\n\t ",len-8); + print_unknown_data(gndo,tptr+4,"\n\t ",len-8); } break; case CPCODES_ID: @@ -575,7 +575,7 @@ handle_ctrl_proto(u_int proto, const u_char *pptr, int length) * original pointer passed to the begin * the PPP packet */ if (vflag <= 1) - print_unknown_data(pptr-2,"\n\t ",length+2); + print_unknown_data(gndo,pptr-2,"\n\t ",length+2); break; } return; @@ -657,7 +657,7 @@ print_lcp_config_options(const u_char *p, int length) case PPP_SPAP_OLD: break; default: - print_unknown_data(p,"\n\t",len); + print_unknown_data(gndo,p,"\n\t",len); } } break; @@ -758,12 +758,12 @@ print_lcp_config_options(const u_char *p, int length) #endif default: if(vflag<2) - print_unknown_data(&p[2],"\n\t ",len-2); + print_unknown_data(gndo,&p[2],"\n\t ",len-2); break; } if (vflag>1) - print_unknown_data(&p[2],"\n\t ",len-2); /* exclude TLV header */ + print_unknown_data(gndo,&p[2],"\n\t ",len-2); /* exclude TLV header */ return len; @@ -1085,11 +1085,11 @@ print_ipcp_config_options(const u_char *p, int length) break; default: if(vflag<2) - print_unknown_data(&p[2],"\n\t ",len-2); + print_unknown_data(gndo,&p[2],"\n\t ",len-2); break; } if (vflag>1) - print_unknown_data(&p[2],"\n\t ",len-2); /* exclude TLV header */ + print_unknown_data(gndo,&p[2],"\n\t ",len-2); /* exclude TLV header */ return len; invlen: @@ -1140,11 +1140,11 @@ print_ip6cp_config_options(const u_char *p, int length) break; default: if(vflag<2) - print_unknown_data(&p[2],"\n\t ",len-2); + print_unknown_data(gndo,&p[2],"\n\t ",len-2); break; } if (vflag>1) - print_unknown_data(&p[2],"\n\t ",len-2); /* exclude TLV header */ + print_unknown_data(gndo,&p[2],"\n\t ",len-2); /* exclude TLV header */ return len; @@ -1203,11 +1203,11 @@ print_ccp_config_options(const u_char *p, int length) case CCPOPT_RESV: default: if(vflag<2) - print_unknown_data(&p[2],"\n\t ",len-2); + print_unknown_data(gndo,&p[2],"\n\t ",len-2); break; } if (vflag>1) - print_unknown_data(&p[2],"\n\t ",len-2); /* exclude TLV header */ + print_unknown_data(gndo,&p[2],"\n\t ",len-2); /* exclude TLV header */ return len; @@ -1249,11 +1249,11 @@ print_bacp_config_options(const u_char *p, int length) break; default: if(vflag<2) - print_unknown_data(&p[2],"\n\t ",len-2); + print_unknown_data(gndo,&p[2],"\n\t ",len-2); break; } if (vflag>1) - print_unknown_data(&p[2],"\n\t ",len-2); /* exclude TLV header */ + print_unknown_data(gndo,&p[2],"\n\t ",len-2); /* exclude TLV header */ return len; @@ -1387,7 +1387,7 @@ handle_ppp(u_int proto, const u_char *p, int length) break; default: printf("%s ", tok2str(ppptype2str, "unknown PPP protocol (0x%04x)", proto)); - print_unknown_data(p,"\n\t",length); + print_unknown_data(gndo,p,"\n\t",length); break; } } diff --git a/print-radius.c b/print-radius.c index 08922673..d16c794d 100644 --- a/print-radius.c +++ b/print-radius.c @@ -880,7 +880,7 @@ radius_attrs_print(register const u_char *attr, u_int length) } /* do we also want to see a hex dump ? */ if (vflag> 1) - print_unknown_data((u_char *)rad_attr+2,"\n\t ",(rad_attr->len)-2); + print_unknown_data(gndo,(u_char *)rad_attr+2,"\n\t ",(rad_attr->len)-2); length-=(rad_attr->len); rad_attr = (struct radius_attr *)( ((char *)(rad_attr))+rad_attr->len); diff --git a/print-rip.c b/print-rip.c index 6310e5da..c0b5f09a 100644 --- a/print-rip.c +++ b/print-rip.c @@ -106,14 +106,14 @@ rip_entry_print_v1(register const struct rip_netinfo *ni) 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((u_int8_t *)&ni->rip_family,"\n\t ",RIP_ROUTELEN); + print_unknown_data(gndo,(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((u_int8_t *)&ni->rip_family,"\n\t ",RIP_ROUTELEN); + print_unknown_data(gndo,(u_int8_t *)&ni->rip_family,"\n\t ",RIP_ROUTELEN); return; } if (family == 0) { @@ -151,16 +151,16 @@ rip_entry_print_v2(register const struct rip_netinfo *ni, const unsigned remaini printf(" MBZ %u", EXTRACT_32BITS(&ni->rip_metric)); } else if (auth_type == 1) { printf("\n\t Auth trailer:"); - print_unknown_data((u_int8_t *)&ni->rip_dest,"\n\t ",remaining); + print_unknown_data(gndo,(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((u_int8_t *)&ni->rip_dest,"\n\t ",remaining); + print_unknown_data(gndo,(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((u_int8_t *)&ni->rip_tag,"\n\t ",RIP_ROUTELEN-2); + print_unknown_data(gndo,(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: ", tok2str(bsd_af_values, "%u", family), @@ -215,7 +215,7 @@ rip_print(const u_char *dat, u_int length) * * so perhaps we should just dump the packet, in hex. */ - print_unknown_data((u_int8_t *)&rp->rip_cmd,"\n\t",length); + print_unknown_data(gndo,(u_int8_t *)&rp->rip_cmd,"\n\t",length); break; default: /* dump version and lets see if we know the commands name*/ @@ -258,14 +258,14 @@ rip_print(const u_char *dat, u_int length) /* fall through */ default: if (vflag <= 1) { - if(!print_unknown_data((u_int8_t *)rp,"\n\t",length)) + if(!print_unknown_data(gndo,(u_int8_t *)rp,"\n\t",length)) return; } break; } /* do we want to see an additionally hexdump ? */ if (vflag> 1) { - if(!print_unknown_data((u_int8_t *)rp,"\n\t",length)) + if(!print_unknown_data(gndo,(u_int8_t *)rp,"\n\t",length)) return; } } diff --git a/print-rpki-rtr.c b/print-rpki-rtr.c index a7841bbe..c335c3b7 100644 --- a/print-rpki-rtr.c +++ b/print-rpki-rtr.c @@ -310,7 +310,7 @@ rpki_rtr_pdu_print (const u_char *tptr, u_int indent) /* do we also want to see a hex dump ? */ if (vflag > 1 || (vflag && hexdump)) { - print_unknown_data(tptr,"\n\t ", pdu_len); + print_unknown_data(gndo,tptr,"\n\t ", pdu_len); } } diff --git a/print-rsvp.c b/print-rsvp.c index bec82f5e..ed228d9e 100644 --- a/print-rsvp.c +++ b/print-rsvp.c @@ -630,7 +630,7 @@ rsvp_intserv_print(const u_char *tptr, u_short obj_tlen) { default: if (vflag <= 1) - print_unknown_data(tptr+4,"\n\t\t",parameter_length); + print_unknown_data(gndo,tptr+4,"\n\t\t",parameter_length); } return (parameter_length+4); /* header length 4 bytes */ } @@ -1612,7 +1612,7 @@ _U_ return-1; if (*(obj_tptr+1) < 2) return -1; - print_unknown_data(obj_tptr+2,"\n\t\t",*(obj_tptr+1)-2); + print_unknown_data(gndo,obj_tptr+2,"\n\t\t",*(obj_tptr+1)-2); obj_tlen-=*(obj_tptr+1); obj_tptr+=*(obj_tptr+1); } @@ -1785,12 +1785,12 @@ _U_ case RSVP_OBJ_PROTECTION: default: if (vflag <= 1) - print_unknown_data(obj_tptr,"\n\t ",obj_tlen); /* FIXME indentation */ + print_unknown_data(gndo,obj_tptr,"\n\t ",obj_tlen); /* FIXME indentation */ break; } /* do we also want to see a hex dump ? */ if (vflag > 1 || hexdump==TRUE) - print_unknown_data(tptr+sizeof(struct rsvp_object_header),"\n\t ", /* FIXME indentation */ + print_unknown_data(gndo,tptr+sizeof(struct rsvp_object_header),"\n\t ", /* FIXME indentation */ rsvp_obj_len-sizeof(struct rsvp_object_header)); tptr+=rsvp_obj_len; @@ -1934,7 +1934,7 @@ rsvp_print(register const u_char *pptr, register u_int len) { break; default: - print_unknown_data(tptr,"\n\t ",tlen); + print_unknown_data(gndo,tptr,"\n\t ",tlen); break; } diff --git a/print-sflow.c b/print-sflow.c index 5c01b669..44e826f9 100644 --- a/print-sflow.c +++ b/print-sflow.c @@ -531,7 +531,7 @@ sflow_print_counter_records(const u_char *pointer, u_int len, u_int records) { break; default: if (vflag <= 1) - print_unknown_data(tptr, "\n\t\t", counter_len); + print_unknown_data(gndo,tptr, "\n\t\t", counter_len); break; } } @@ -732,7 +732,7 @@ sflow_print_flow_records(const u_char *pointer, u_int len, u_int records) { break; default: if (vflag <= 1) - print_unknown_data(tptr, "\n\t\t", flow_len); + print_unknown_data(gndo,tptr, "\n\t\t", flow_len); break; } } @@ -913,7 +913,7 @@ sflow_print(const u_char *pptr, u_int len) { default: if (vflag <= 1) - print_unknown_data(tptr, "\n\t ", sflow_sample_len); + print_unknown_data(gndo,tptr, "\n\t ", sflow_sample_len); break; } tptr += sflow_sample_len; diff --git a/print-sip.c b/print-sip.c index c5bc8534..080d5606 100644 --- a/print-sip.c +++ b/print-sip.c @@ -55,7 +55,7 @@ sip_print(register const u_char *pptr, register u_int len) /* do we want to see an additionally hexdump ? */ if (vflag> 1) - print_unknown_data(pptr,"\n\t",len); + print_unknown_data(gndo,pptr,"\n\t",len); return; diff --git a/print-slow.c b/print-slow.c index 8bfe3f18..b4ba2ab9 100644 --- a/print-slow.c +++ b/print-slow.c @@ -307,7 +307,7 @@ slow_print(register const u_char *pptr, register u_int len) { /* unrecognized subtype */ if (print_version == -1) { - print_unknown_data(pptr, "\n\t", len); + print_unknown_data(gndo,pptr, "\n\t", len); return; } @@ -368,7 +368,7 @@ void slow_marker_lacp_print(register const u_char *tptr, register u_int tlen) { tlv_header->type != LACP_TLV_TERMINATOR && tlv_header->type != MARKER_TLV_TERMINATOR) { printf("\n\t-----trailing data-----"); - print_unknown_data(tptr+sizeof(struct tlv_header_t),"\n\t ",tlen); + print_unknown_data(gndo,tptr+sizeof(struct tlv_header_t),"\n\t ",tlen); return; } @@ -436,12 +436,12 @@ void slow_marker_lacp_print(register const u_char *tptr, register u_int tlen) { default: if (vflag <= 1) - print_unknown_data(tlv_tptr,"\n\t ",tlv_tlen); + print_unknown_data(gndo,tlv_tptr,"\n\t ",tlv_tlen); break; } /* do we want to see an additional hexdump ? */ if (vflag > 1) { - print_unknown_data(tptr+sizeof(struct tlv_header_t),"\n\t ", + print_unknown_data(gndo,tptr+sizeof(struct tlv_header_t),"\n\t ", tlv_len-sizeof(struct tlv_header_t)); } @@ -556,7 +556,7 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) { /* do we also want to see a hex dump ? */ if (vflag > 1 || hexdump==TRUE) { - print_unknown_data(tptr,"\n\t ", + print_unknown_data(gndo,tptr,"\n\t ", ptr.slow_oam_tlv_header->length); } @@ -624,7 +624,7 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) { /* do we also want to see a hex dump ? */ if (vflag > 1 || hexdump==TRUE) { - print_unknown_data(tptr,"\n\t ", + print_unknown_data(gndo,tptr,"\n\t ", ptr.slow_oam_tlv_header->length); } @@ -653,7 +653,7 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) { case SLOW_OAM_CODE_PRIVATE: default: if (vflag <= 1) { - print_unknown_data(tptr,"\n\t ", tlen); + print_unknown_data(gndo,tptr,"\n\t ", tlen); } break; } diff --git a/print-syslog.c b/print-syslog.c index 07ba2059..89019bf5 100644 --- a/print-syslog.c +++ b/print-syslog.c @@ -142,7 +142,7 @@ syslog_print(register const u_char *pptr, register u_int len) } if (vflag > 1) - print_unknown_data(pptr,"\n\t",len); + print_unknown_data(gndo,pptr,"\n\t",len); return; diff --git a/print-telnet.c b/print-telnet.c index 4911e5ca..f9e868db 100644 --- a/print-telnet.c +++ b/print-telnet.c @@ -244,7 +244,7 @@ telnet_print(const u_char *sp, u_int length) if (Xflag && 2 < vflag) { if (first) printf("\nTelnet:"); - hex_print_with_offset("\n", sp, l, sp - osp); + hex_print_with_offset(gndo,"\n", sp, l, sp - osp); if (l > 8) printf("\n\t\t\t\t"); else diff --git a/print-vqp.c b/print-vqp.c index 9076b905..e3d9ecf2 100644 --- a/print-vqp.c +++ b/print-vqp.c @@ -196,7 +196,7 @@ vqp_print(register const u_char *pptr, register u_int len) break; default: if (vflag <= 1) - print_unknown_data(tptr, "\n\t ", vqp_obj_len); + print_unknown_data(gndo,tptr, "\n\t ", vqp_obj_len); break; } tptr += vqp_obj_len; diff --git a/print-vtp.c b/print-vtp.c index 61a6f26a..cbc5868e 100644 --- a/print-vtp.c +++ b/print-vtp.c @@ -327,7 +327,7 @@ vtp_print (const u_char *pptr, u_int length) case VTP_VLAN_TRANS_BRIDGED_VLAN: case VTP_VLAN_ARP_HOP_COUNT: default: - print_unknown_data(tptr, "\n\t\t ", 2 + tlv_len*2); + print_unknown_data(gndo,tptr, "\n\t\t ", 2 + tlv_len*2); break; } len -= 2 + tlv_len*2; @@ -1941,6 +1941,7 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp) { struct print_info *print_info; u_int hdrlen; + netdissect_options *ndo; ++packets_captured; @@ -1948,25 +1949,26 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp) ts_print(&h->ts); print_info = (struct print_info *)user; + ndo = print_info->ndo; /* * Some printers want to check that they're not walking off the * end of the packet. * Rather than pass it all the way down, we set this global. */ - snapend = sp + h->caplen; + ndo->ndo_snapend = sp + h->caplen; if(print_info->ndo_type) { hdrlen = (*print_info->p.ndo_printer)(print_info->ndo, h, sp); } else { hdrlen = (*print_info->p.printer)(h, sp); } - - if (Xflag) { + + if (ndo->ndo_Xflag) { /* * Print the raw packet data in hex and ASCII. */ - if (Xflag > 1) { + if (ndo->ndo_Xflag > 1) { /* * Include the link-layer header. */ @@ -1981,15 +1983,15 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp) hex_and_ascii_print("\n\t", sp + hdrlen, h->caplen - hdrlen); } - } else if (xflag) { + } else if (ndo->ndo_xflag) { /* * Print the raw packet data in hex. */ - if (xflag > 1) { + if (ndo->ndo_xflag > 1) { /* * Include the link-layer header. */ - hex_print("\n\t", sp, h->caplen); + hex_print(ndo, "\n\t", sp, h->caplen); } else { /* * Don't include the link-layer header - and if @@ -1997,14 +1999,14 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp) * print nothing. */ if (h->caplen > hdrlen) - hex_print("\n\t", sp + hdrlen, - h->caplen - hdrlen); + hex_print(ndo, "\n\t", sp + hdrlen, + h->caplen - hdrlen); } - } else if (Aflag) { + } else if (ndo->ndo_Aflag) { /* * Print the raw packet data in ASCII. */ - if (Aflag > 1) { + if (ndo->ndo_Aflag > 1) { /* * Include the link-layer header. */ @@ -2186,3 +2188,9 @@ ndo_warning(netdissect_options *ndo _U_, const char *fmt, ...) (void)fputc('\n', stderr); } } +/* + * Local Variables: + * c-style: whitesmith + * c-basic-offset: 8 + * End: + */ @@ -259,21 +259,21 @@ relts_print(int secs) */ int -print_unknown_data(const u_char *cp,const char *ident,int len) +print_unknown_data(netdissect_options *ndo, const u_char *cp,const char *ident,int len) { if (len < 0) { - printf("%sDissector error: print_unknown_data called with negative length", - ident); + ND_PRINT((ndo,"%sDissector error: print_unknown_data called with negative length", + ident)); return(0); } if (snapend - cp < len) len = snapend - cp; if (len < 0) { - printf("%sDissector error: print_unknown_data called with pointer past end of packet", - ident); + ND_PRINT((ndo,"%sDissector error: print_unknown_data called with pointer past end of packet", + ident)); return(0); } - hex_print(ident,cp,len); + hex_print(ndo, ident,cp,len); return(1); /* everything is ok */ } |