]> The Tcpdump Group git mirrors - tcpdump/commitdiff
NDOize EAP, IEEE CFM, lwres, SIP & Syslog decoders
authorDenis Ovsienko <[email protected]>
Tue, 1 Apr 2014 15:42:33 +0000 (19:42 +0400)
committerDenis Ovsienko <[email protected]>
Tue, 1 Apr 2014 15:46:05 +0000 (19:46 +0400)
interface.h
netdissect.h
print-cfm.c
print-eap.c
print-ether.c
print-lwres.c
print-sip.c
print-syslog.c
print-udp.c

index 47f035004dd4a74e0cacc4446c196b61ccaa4cc7..451702ccbf8c41eddd5619486f88d3a76aa796a5 100644 (file)
@@ -181,10 +181,6 @@ extern void smb_tcp_print(const u_char *, int);
 extern char *smb_errstr(int, int);
 extern const char *nt_errstr(u_int32_t);
 extern void print_data(const unsigned char *, int);
-extern void cfm_print(const u_char *, u_int);
-extern void lwres_print(const u_char *, u_int);
-extern void sip_print(const u_char *, u_int);
-extern void syslog_print(const u_char *, u_int);
 
 
 #ifdef INET6
index 1cfc6fd95d3503802e2fa779a7c5cc70eea285e0..03b0b9f0af25ba19536f0c71925bcfdf040dfb0a 100644 (file)
@@ -502,6 +502,10 @@ extern void nfsreply_print(netdissect_options *, const u_char *, u_int, const u_
 extern void nfsreply_print_noaddr(netdissect_options *, const u_char *, u_int, const u_char *);
 extern void nfsreq_print(netdissect_options *, const u_char *, u_int, const u_char *);
 extern void nfsreq_print_noaddr(netdissect_options *, const u_char *, u_int, const u_char *);
+extern void sip_print(netdissect_options *, const u_char *, u_int);
+extern void syslog_print(netdissect_options *, const u_char *, u_int);
+extern void lwres_print(netdissect_options *, const u_char *, u_int);
+extern void cfm_print(netdissect_options *, const u_char *, u_int);
 
 /* stuff that has not yet been rototiled */
 
@@ -542,7 +546,6 @@ extern void nbt_udp138_print(netdissect_options *,
 extern char *smb_errstr(netdissect_options *,int, int);
 extern const char *nt_errstr(netdissect_options *, u_int32_t);
 extern void print_data(netdissect_options *,const unsigned char *, int);
-extern void lwres_print(netdissect_options *,const u_char *, u_int);
 #endif
 
 extern u_int ipnet_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
index 2f43d6134b7999feaffc95e55e565d5322876e7f..6901b89805d6f1efdc94eb58a89bc57000585ca1 100644 (file)
@@ -17,6 +17,7 @@
  * Original code by Hannes Gredler ([email protected])
  */
 
+#define NETDISSECT_REWORKED
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -24,8 +25,6 @@
 #include <tcpdump-stdinc.h>
 
 #include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
 
 #include "interface.h"
 #include "extract.h"
 #include "oui.h"
 #include "af.h"
 
-/*
- * Prototypes
- */
-const char * cfm_egress_id_string(register const u_char *);
-int cfm_mgmt_addr_print(register const u_char *);
-
 struct cfm_common_header_t {
     u_int8_t mdlevel_version;
     u_int8_t opcode;
@@ -232,8 +225,9 @@ static const struct tok cfm_tlv_senderid_chassisid_values[] = {
 };
 
 
-int
-cfm_mgmt_addr_print(register const u_char *tptr) {
+static int
+cfm_mgmt_addr_print(netdissect_options *ndo,
+                    register const u_char *tptr) {
 
     u_int mgmt_addr_type;
     u_int hexdump =  FALSE;
@@ -244,21 +238,21 @@ cfm_mgmt_addr_print(register const u_char *tptr) {
      * is only once octet
      */
     mgmt_addr_type = *tptr;
-    printf("\n\t  Management Address Type %s (%u)",
+    ND_PRINT((ndo, "\n\t  Management Address Type %s (%u)",
            tok2str(af_values, "Unknown", mgmt_addr_type),
-           mgmt_addr_type);
+           mgmt_addr_type));
 
     /*
      * Resolve the passed in Address.
      */
     switch(mgmt_addr_type) {
     case AFNUM_INET:
-        printf(", %s", ipaddr_string(tptr + 1));
+        ND_PRINT((ndo, ", %s", ipaddr_string(tptr + 1)));
         break;
 
 #ifdef INET6
     case AFNUM_INET6:
-        printf(", %s", ip6addr_string(tptr + 1));
+        ND_PRINT((ndo, ", %s", ip6addr_string(tptr + 1)));
         break;
 #endif
 
@@ -273,7 +267,7 @@ cfm_mgmt_addr_print(register const u_char *tptr) {
 /*
  * The egress-ID string is a 16-Bit string plus a MAC address.
  */
-const char *
+static const char *
 cfm_egress_id_string(register const u_char *tptr) {
     static char egress_id_buffer[80];
 
@@ -286,7 +280,8 @@ cfm_egress_id_string(register const u_char *tptr) {
 }
 
 void
-cfm_print(register const u_char *pptr, register u_int length) {
+cfm_print(netdissect_options *ndo,
+          register const u_char *pptr, register u_int length) {
 
     const struct cfm_common_header_t *cfm_common_header;
     const struct cfm_tlv_header_t *cfm_tlv_header;
@@ -303,31 +298,31 @@ cfm_print(register const u_char *pptr, register u_int length) {
 
     tptr=pptr;
     cfm_common_header = (const struct cfm_common_header_t *)pptr;
-    TCHECK(*cfm_common_header);
+    ND_TCHECK(*cfm_common_header);
 
     /*
      * Sanity checking of the header.
      */
     if (CFM_EXTRACT_VERSION(cfm_common_header->mdlevel_version) != CFM_VERSION) {
-       printf("CFMv%u not supported, length %u",
-               CFM_EXTRACT_VERSION(cfm_common_header->mdlevel_version), length);
+       ND_PRINT((ndo, "CFMv%u not supported, length %u",
+               CFM_EXTRACT_VERSION(cfm_common_header->mdlevel_version), length));
        return;
     }
 
-    printf("CFMv%u %s, MD Level %u, length %u",
+    ND_PRINT((ndo, "CFMv%u %s, MD Level %u, length %u",
            CFM_EXTRACT_VERSION(cfm_common_header->mdlevel_version),
            tok2str(cfm_opcode_values, "unknown (%u)", cfm_common_header->opcode),
            CFM_EXTRACT_MD_LEVEL(cfm_common_header->mdlevel_version),
-           length);
+           length));
 
     /*
      * In non-verbose mode just print the opcode and md-level.
      */
-    if (vflag < 1) {
+    if (ndo->ndo_vflag < 1) {
         return;
     }
 
-    printf("\n\tFirst TLV offset %u", cfm_common_header->first_tlv_offset);
+    ND_PRINT((ndo, "\n\tFirst TLV offset %u", cfm_common_header->first_tlv_offset));
 
     tptr += sizeof(const struct cfm_common_header_t);
     tlen = length - sizeof(struct cfm_common_header_t);
@@ -337,53 +332,53 @@ cfm_print(register const u_char *pptr, register u_int length) {
         msg_ptr.cfm_ccm = (const struct cfm_ccm_t *)tptr;
 
         ccm_interval = CFM_EXTRACT_CCM_INTERVAL(cfm_common_header->flags);
-        printf(", Flags [CCM Interval %u%s]",
+        ND_PRINT((ndo, ", Flags [CCM Interval %u%s]",
                ccm_interval,
                cfm_common_header->flags & CFM_CCM_RDI_FLAG ?
-               ", RDI" : "");
+               ", RDI" : ""));
 
         /*
          * Resolve the CCM interval field.
          */
         if (ccm_interval) {
-            printf("\n\t  CCM Interval %.3fs"
+            ND_PRINT((ndo, "\n\t  CCM Interval %.3fs"
                    ", min CCM Lifetime %.3fs, max CCM Lifetime %.3fs",
                    ccm_interval_base[ccm_interval],
                    ccm_interval_base[ccm_interval] * CCM_INTERVAL_MIN_MULTIPLIER,
-                   ccm_interval_base[ccm_interval] * CCM_INTERVAL_MAX_MULTIPLIER);
+                   ccm_interval_base[ccm_interval] * CCM_INTERVAL_MAX_MULTIPLIER));
         }
 
-        printf("\n\t  Sequence Number 0x%08x, MA-End-Point-ID 0x%04x",
+        ND_PRINT((ndo, "\n\t  Sequence Number 0x%08x, MA-End-Point-ID 0x%04x",
                EXTRACT_32BITS(msg_ptr.cfm_ccm->sequence),
-               EXTRACT_16BITS(msg_ptr.cfm_ccm->ma_epi));
+               EXTRACT_16BITS(msg_ptr.cfm_ccm->ma_epi)));
 
 
         /*
          * Resolve the MD fields.
          */
-        printf("\n\t  MD Name Format %s (%u), MD Name length %u",
+        ND_PRINT((ndo, "\n\t  MD Name Format %s (%u), MD Name length %u",
                tok2str(cfm_md_nameformat_values, "Unknown",
                        msg_ptr.cfm_ccm->md_nameformat),
                msg_ptr.cfm_ccm->md_nameformat,
-               msg_ptr.cfm_ccm->md_namelength);
+               msg_ptr.cfm_ccm->md_namelength));
 
         if (msg_ptr.cfm_ccm->md_nameformat != CFM_CCM_MD_FORMAT_NONE) {
-            printf("\n\t  MD Name: ");
+            ND_PRINT((ndo, "\n\t  MD Name: "));
             switch (msg_ptr.cfm_ccm->md_nameformat) {
             case CFM_CCM_MD_FORMAT_DNS:
             case CFM_CCM_MD_FORMAT_CHAR:
-                safeputs(gndo, msg_ptr.cfm_ccm->md_name, msg_ptr.cfm_ccm->md_namelength);
+                safeputs(ndo, msg_ptr.cfm_ccm->md_name, msg_ptr.cfm_ccm->md_namelength);
                 break;
 
             case CFM_CCM_MD_FORMAT_MAC:
-                printf("\n\t  MAC %s", etheraddr_string(
-                           msg_ptr.cfm_ccm->md_name));
+                ND_PRINT((ndo, "\n\t  MAC %s", etheraddr_string(
+                           msg_ptr.cfm_ccm->md_name)));
                 break;
 
                 /* FIXME add printers for those MD formats - hexdump for now */
             case CFM_CCM_MA_FORMAT_8021:
             default:
-                print_unknown_data(gndo,msg_ptr.cfm_ccm->md_name, "\n\t    ",
+                print_unknown_data(ndo, msg_ptr.cfm_ccm->md_name, "\n\t    ",
                                    msg_ptr.cfm_ccm->md_namelength);
             }
         }
@@ -396,16 +391,16 @@ cfm_print(register const u_char *pptr, register u_int length) {
         ma_namelength = msg_ptr.cfm_ccm->md_name + msg_ptr.cfm_ccm->md_namelength + 1;
         ma_name = msg_ptr.cfm_ccm->md_name + msg_ptr.cfm_ccm->md_namelength + 2;
 
-        printf("\n\t  MA Name-Format %s (%u), MA name length %u",
+        ND_PRINT((ndo, "\n\t  MA Name-Format %s (%u), MA name length %u",
                tok2str(cfm_ma_nameformat_values, "Unknown",
                        *ma_nameformat),
                *ma_nameformat,
-               *ma_namelength);
+               *ma_namelength));
 
-        printf("\n\t  MA Name: ");
+        ND_PRINT((ndo, "\n\t  MA Name: "));
         switch (*ma_nameformat) {
         case CFM_CCM_MA_FORMAT_CHAR:
-            safeputs(gndo, ma_name, *ma_namelength);
+            safeputs(ndo, ma_name, *ma_namelength);
             break;
 
             /* FIXME add printers for those MA formats - hexdump for now */
@@ -414,45 +409,45 @@ 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(gndo,ma_name, "\n\t    ", *ma_namelength);
+            print_unknown_data(ndo, ma_name, "\n\t    ", *ma_namelength);
         }
         break;
 
     case CFM_OPCODE_LTM:
         msg_ptr.cfm_ltm = (const struct cfm_ltm_t *)tptr;
 
-        printf(", Flags [%s]",
-               bittok2str(cfm_ltm_flag_values, "none",  cfm_common_header->flags));
+        ND_PRINT((ndo, ", Flags [%s]",
+               bittok2str(cfm_ltm_flag_values, "none", cfm_common_header->flags)));
 
-        printf("\n\t  Transaction-ID 0x%08x, Egress-ID %s, ttl %u",
+        ND_PRINT((ndo, "\n\t  Transaction-ID 0x%08x, Egress-ID %s, ttl %u",
                EXTRACT_32BITS(msg_ptr.cfm_ltm->transaction_id),
                cfm_egress_id_string(msg_ptr.cfm_ltm->egress_id),
-               msg_ptr.cfm_ltm->ttl);
+               msg_ptr.cfm_ltm->ttl));
 
-        printf("\n\t  Original-MAC %s, Target-MAC %s",
+        ND_PRINT((ndo, "\n\t  Original-MAC %s, Target-MAC %s",
                etheraddr_string(msg_ptr.cfm_ltm->original_mac),
-               etheraddr_string(msg_ptr.cfm_ltm->target_mac));
+               etheraddr_string(msg_ptr.cfm_ltm->target_mac)));
         break;
 
     case CFM_OPCODE_LTR:
         msg_ptr.cfm_ltr = (const struct cfm_ltr_t *)tptr;
 
-        printf(", Flags [%s]",
-               bittok2str(cfm_ltr_flag_values, "none",  cfm_common_header->flags));
+        ND_PRINT((ndo, ", Flags [%s]",
+               bittok2str(cfm_ltr_flag_values, "none", cfm_common_header->flags)));
 
-        printf("\n\t  Transaction-ID 0x%08x, Last-Egress-ID %s",
+        ND_PRINT((ndo, "\n\t  Transaction-ID 0x%08x, Last-Egress-ID %s",
                EXTRACT_32BITS(msg_ptr.cfm_ltr->transaction_id),
-               cfm_egress_id_string(msg_ptr.cfm_ltr->last_egress_id));
+               cfm_egress_id_string(msg_ptr.cfm_ltr->last_egress_id)));
 
-        printf("\n\t  Next-Egress-ID %s, ttl %u",
+        ND_PRINT((ndo, "\n\t  Next-Egress-ID %s, ttl %u",
                cfm_egress_id_string(msg_ptr.cfm_ltr->next_egress_id),
-               msg_ptr.cfm_ltr->ttl);
+               msg_ptr.cfm_ltr->ttl));
 
-        printf("\n\t  Replay-Action %s (%u)",
+        ND_PRINT((ndo, "\n\t  Replay-Action %s (%u)",
                tok2str(cfm_ltr_replay_action_values,
                        "Unknown",
                        msg_ptr.cfm_ltr->replay_action),
-               msg_ptr.cfm_ltr->replay_action);
+               msg_ptr.cfm_ltr->replay_action));
         break;
 
         /*
@@ -463,7 +458,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(gndo,tptr, "\n\t  ",
+            print_unknown_data(ndo, tptr, "\n\t  ",
                                tlen -  cfm_common_header->first_tlv_offset);
         }
         break;
@@ -483,27 +478,27 @@ cfm_print(register const u_char *pptr, register u_int length) {
         cfm_tlv_header = (const struct cfm_tlv_header_t *)tptr;
 
         /* Enough to read the tlv type ? */
-        TCHECK2(*tptr, 1);
+        ND_TCHECK2(*tptr, 1);
         cfm_tlv_type=cfm_tlv_header->type;
 
         if (cfm_tlv_type != CFM_TLV_END) {
             /* did we capture enough for fully decoding the object header ? */
-            TCHECK2(*tptr, sizeof(struct cfm_tlv_header_t));
+            ND_TCHECK2(*tptr, sizeof(struct cfm_tlv_header_t));
             cfm_tlv_len=EXTRACT_16BITS(&cfm_tlv_header->length);
         } else {
             cfm_tlv_len = 0;
         }
 
-        printf("\n\t%s TLV (0x%02x), length %u",
+        ND_PRINT((ndo, "\n\t%s TLV (0x%02x), length %u",
                tok2str(cfm_tlv_values, "Unknown", cfm_tlv_type),
                cfm_tlv_type,
-               cfm_tlv_len);
+               cfm_tlv_len));
 
         /* sanity check for not walking off and infinite loop check. */
         if ((cfm_tlv_type != CFM_TLV_END) &&
             ((cfm_tlv_len + sizeof(struct cfm_tlv_header_t) > tlen) ||
              (!cfm_tlv_len))) {
-            print_unknown_data(gndo,tptr,"\n\t  ",tlen);
+            print_unknown_data(ndo, tptr, "\n\t  ", tlen);
             return;
         }
 
@@ -513,7 +508,7 @@ cfm_print(register const u_char *pptr, register u_int length) {
 
         /* did we capture enough for fully decoding the object ? */
         if (cfm_tlv_type != CFM_TLV_END) {
-            TCHECK2(*tptr, cfm_tlv_len);
+            ND_TCHECK2(*tptr, cfm_tlv_len);
         }
         hexdump = FALSE;
 
@@ -523,22 +518,22 @@ cfm_print(register const u_char *pptr, register u_int length) {
             return;
 
         case CFM_TLV_PORT_STATUS:
-            printf(", Status: %s (%u)",
+            ND_PRINT((ndo, ", Status: %s (%u)",
                    tok2str(cfm_tlv_port_status_values, "Unknown", *tptr),
-                   *tptr);
+                   *tptr));
             break;
 
         case CFM_TLV_INTERFACE_STATUS:
-            printf(", Status: %s (%u)",
+            ND_PRINT((ndo, ", Status: %s (%u)",
                    tok2str(cfm_tlv_interface_status_values, "Unknown", *tptr),
-                   *tptr);
+                   *tptr));
             break;
 
         case CFM_TLV_PRIVATE:
-            printf(", Vendor: %s (%u), Sub-Type %u",
+            ND_PRINT((ndo, ", Vendor: %s (%u), Sub-Type %u",
                    tok2str(oui_values,"Unknown", EXTRACT_24BITS(tptr)),
                    EXTRACT_24BITS(tptr),
-                   *(tptr+3));
+                   *(tptr + 3)));
             hexdump = TRUE;
             break;
 
@@ -561,20 +556,20 @@ cfm_print(register const u_char *pptr, register u_int length) {
 
             if (chassis_id_length) {
                 chassis_id_type = *tptr;
-                printf("\n\t  Chassis-ID Type %s (%u), Chassis-ID length %u",
+                ND_PRINT((ndo, "\n\t  Chassis-ID Type %s (%u), Chassis-ID length %u",
                        tok2str(cfm_tlv_senderid_chassisid_values,
                                "Unknown",
                                chassis_id_type),
                        chassis_id_type,
-                       chassis_id_length);
+                       chassis_id_length));
 
                 switch (chassis_id_type) {
                 case CFM_CHASSIS_ID_MAC_ADDRESS:
-                    printf("\n\t  MAC %s", etheraddr_string(tptr+1));
+                    ND_PRINT((ndo, "\n\t  MAC %s", etheraddr_string(tptr + 1)));
                     break;
 
                 case CFM_CHASSIS_ID_NETWORK_ADDRESS:
-                    hexdump |= cfm_mgmt_addr_print(tptr);
+                    hexdump |= cfm_mgmt_addr_print(ndo, tptr);
                     break;
 
                 case CFM_CHASSIS_ID_INTERFACE_NAME: /* fall through */
@@ -582,7 +577,7 @@ cfm_print(register const u_char *pptr, register u_int length) {
                 case CFM_CHASSIS_ID_LOCAL:
                 case CFM_CHASSIS_ID_CHASSIS_COMPONENT:
                 case CFM_CHASSIS_ID_PORT_COMPONENT:
-                    safeputs(gndo, tptr + 1, chassis_id_length);
+                    safeputs(ndo, tptr + 1, chassis_id_length);
                     break;
 
                 default:
@@ -607,7 +602,7 @@ cfm_print(register const u_char *pptr, register u_int length) {
             tlen--;
 
             if (mgmt_addr_length) {
-                hexdump |= cfm_mgmt_addr_print(tptr);
+                hexdump |= cfm_mgmt_addr_print(ndo, tptr);
             }
 
             tptr += mgmt_addr_length;
@@ -629,13 +624,13 @@ cfm_print(register const u_char *pptr, register u_int length) {
             break;
         }
         /* do we want to see an additional hexdump ? */
-        if (hexdump || vflag > 1)
-            print_unknown_data(gndo,tlv_ptr, "\n\t  ", cfm_tlv_len);
+        if (hexdump || ndo->ndo_vflag > 1)
+            print_unknown_data(ndo, tlv_ptr, "\n\t  ", cfm_tlv_len);
 
         tptr+=cfm_tlv_len;
         tlen-=cfm_tlv_len;
     }
     return;
 trunc:
-    printf("\n\t\t packet exceeded snapshot");
+    ND_PRINT((ndo, "\n\t\t packet exceeded snapshot"));
 }
index fba40e2721fcd910262669a51d519e6f5bced96f..5c623dc58ae3f88881df882625f9e547cef9c888 100644 (file)
  *
  */
 
+#define NETDISSECT_REWORKED
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
 #include <tcpdump-stdinc.h>
 
-#include <stdio.h>
-#include <string.h>
-
 #include "netdissect.h"
 #include "interface.h"
 #include "extract.h"
-#include "ether.h"
 
 #define        EAP_FRAME_TYPE_PACKET           0
 #define        EAP_FRAME_TYPE_START            1
@@ -153,7 +150,7 @@ static const struct tok eap_aka_subtype_values[] = {
  * Print EAP requests / responses
  */
 void
-eap_print(netdissect_options *ndo _U_,
+eap_print(netdissect_options *ndo,
           register const u_char *cp,
           u_int length _U_)
 {
@@ -165,23 +162,23 @@ eap_print(netdissect_options *ndo _U_,
     tptr = cp;
     tlen = length;
     eap = (const struct eap_frame_t *)cp;
-    TCHECK(*eap);
+    ND_TCHECK(*eap);
 
     /* in non-verbose mode just lets print the basic info */
-    if (vflag < 1) {
-       printf("%s (%u) v%u, len %u",
+    if (ndo->ndo_vflag < 1) {
+       ND_PRINT((ndo, "%s (%u) v%u, len %u",
                tok2str(eap_frame_type_values, "unknown", eap->type),
                eap->type,
                eap->version,
-               EXTRACT_16BITS(eap->length));
+               EXTRACT_16BITS(eap->length)));
        return;
     }
 
-    printf("%s (%u) v%u, len %u",
+    ND_PRINT((ndo, "%s (%u) v%u, len %u",
            tok2str(eap_frame_type_values, "unknown", eap->type),
            eap->type,
            eap->version,
-           EXTRACT_16BITS(eap->length));
+           EXTRACT_16BITS(eap->length)));
 
     tptr += sizeof(const struct eap_frame_t);
     tlen -= sizeof(const struct eap_frame_t);
@@ -190,33 +187,33 @@ eap_print(netdissect_options *ndo _U_,
     case EAP_FRAME_TYPE_PACKET:
         type = *(tptr);
         len = EXTRACT_16BITS(tptr+2);
-        printf(", %s (%u), id %u, len %u",
+        ND_PRINT((ndo, ", %s (%u), id %u, len %u",
                tok2str(eap_code_values, "unknown", type),
                type,
                *(tptr+1),
-               len);
+               len));
 
-        if (!TTEST2(*tptr, len))
+        if (!ND_TTEST2(*tptr, len))
             goto trunc;
 
         if (type <= 2) { /* For EAP_REQUEST and EAP_RESPONSE only */
             subtype = *(tptr+4);
-            printf("\n\t\t Type %s (%u)",
+            ND_PRINT((ndo, "\n\t\t Type %s (%u)",
                    tok2str(eap_type_values, "unknown", *(tptr+4)),
-                   *(tptr+4));
+                   *(tptr + 4)));
 
             switch (subtype) {
             case EAP_TYPE_IDENTITY:
                 if (len - 5 > 0) {
-                    printf(", Identity: ");
-                    safeputs(gndo, tptr + 5, len - 5);
+                    ND_PRINT((ndo, ", Identity: "));
+                    safeputs(ndo, tptr + 5, len - 5);
                 }
                 break;
 
             case EAP_TYPE_NOTIFICATION:
                 if (len - 5 > 0) {
-                    printf(", Notification: ");
-                    safeputs(gndo, tptr + 5, len - 5);
+                    ND_PRINT((ndo, ", Notification: "));
+                    safeputs(ndo, tptr + 5, len - 5);
                 }
                 break;
 
@@ -229,35 +226,35 @@ eap_print(netdissect_options *ndo _U_,
                  * type one octet per type
                  */
                 while (count < len) {
-                    printf(" %s (%u),",
+                    ND_PRINT((ndo, " %s (%u),",
                            tok2str(eap_type_values, "unknown", *(tptr+count)),
-                           *(tptr+count));
+                           *(tptr + count)));
                     count++;
                 }
                 break;
 
             case EAP_TYPE_TTLS:
-                printf(" TTLSv%u",
-                       EAP_TTLS_VERSION(*(tptr+5))); /* fall through */
+                ND_PRINT((ndo, " TTLSv%u",
+                       EAP_TTLS_VERSION(*(tptr + 5)))); /* fall through */
             case EAP_TYPE_TLS:
-                printf(" flags [%s] 0x%02x,",
+                ND_PRINT((ndo, " flags [%s] 0x%02x,",
                        bittok2str(eap_tls_flags_values, "none", *(tptr+5)),
-                       *(tptr+5));
+                       *(tptr + 5)));
 
                 if (EAP_TLS_EXTRACT_BIT_L(*(tptr+5))) {
-                   printf(" len %u", EXTRACT_32BITS(tptr+6));
+                   ND_PRINT((ndo, " len %u", EXTRACT_32BITS(tptr + 6)));
                 }
                 break;
 
             case EAP_TYPE_FAST:
-                printf(" FASTv%u",
-                       EAP_TTLS_VERSION(*(tptr+5)));
-                printf(" flags [%s] 0x%02x,",
+                ND_PRINT((ndo, " FASTv%u",
+                       EAP_TTLS_VERSION(*(tptr + 5))));
+                ND_PRINT((ndo, " flags [%s] 0x%02x,",
                        bittok2str(eap_tls_flags_values, "none", *(tptr+5)),
-                       *(tptr+5));
+                       *(tptr + 5)));
 
                 if (EAP_TLS_EXTRACT_BIT_L(*(tptr+5))) {
-                    printf(" len %u", EXTRACT_32BITS(tptr+6));
+                    ND_PRINT((ndo, " len %u", EXTRACT_32BITS(tptr + 6)));
                 }
 
                 /* FIXME - TLV attributes follow */
@@ -265,9 +262,9 @@ eap_print(netdissect_options *ndo _U_,
 
             case EAP_TYPE_AKA:
             case EAP_TYPE_SIM:
-                printf(" subtype [%s] 0x%02x,",
+                ND_PRINT((ndo, " subtype [%s] 0x%02x,",
                        tok2str(eap_aka_subtype_values, "unknown", *(tptr+5)),
-                       *(tptr+5));
+                       *(tptr + 5)));
 
                 /* FIXME - TLV attributes follow */
                 break;
@@ -291,7 +288,7 @@ eap_print(netdissect_options *ndo _U_,
     return;
 
  trunc:
-    printf("\n\t[|EAP]");
+    ND_PRINT((ndo, "\n\t[|EAP]"));
 }
 
 /*
index 4702e883a443359b56eaf4d32a928e1566446c34..2bae5742f7e36d8fc74d46b3046c056a14b06a5f 100644 (file)
@@ -390,7 +390,7 @@ ethertype_print(netdissect_options *ndo,
 
        case ETHERTYPE_CFM:
        case ETHERTYPE_CFM_OLD:
-               cfm_print(/*ndo,*/p, length);
+               cfm_print(ndo, p, length);
                return (1);
 
        case ETHERTYPE_LLDP:
index e4e80c7530575e76a439221b1f856d57228584eb..d253da9d96c3b3e7582d42a21da66ea4fe9e9eb3 100644 (file)
@@ -27,6 +27,7 @@
  * SUCH DAMAGE.
  */
 
+#define NETDISSECT_REWORKED
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -182,25 +183,21 @@ static const struct tok opcode[] = {
 extern const struct tok ns_type2str[];
 extern const struct tok ns_class2str[];
 
-static int lwres_printname(size_t, const char *);
-static int lwres_printnamelen(const char *);
-static int lwres_printbinlen(const char *);
-static int lwres_printaddr(lwres_addr_t *);
-
 static int
-lwres_printname(size_t l, const char *p0)
+lwres_printname(netdissect_options *ndo,
+                size_t l, const char *p0)
 {
        const char *p;
        size_t i;
 
        p = p0;
        /* + 1 for terminating \0 */
-       if (p + l + 1 > (const char *)snapend)
+       if (p + l + 1 > (const char *)ndo->ndo_snapend)
                goto trunc;
 
-       printf(" ");
+       ND_PRINT((ndo, " "));
        for (i = 0; i < l; i++)
-               safeputchar(gndo, *p++);
+               safeputchar(ndo, *p++);
        p++;    /* skip terminating \0 */
 
        return p - p0;
@@ -210,15 +207,16 @@ lwres_printname(size_t l, const char *p0)
 }
 
 static int
-lwres_printnamelen(const char *p)
+lwres_printnamelen(netdissect_options *ndo,
+                   const char *p)
 {
        u_int16_t l;
        int advance;
 
-       if (p + 2 > (const char *)snapend)
+       if (p + 2 > (const char *)ndo->ndo_snapend)
                goto trunc;
        l = EXTRACT_16BITS(p);
-       advance = lwres_printname(l, p + 2);
+       advance = lwres_printname(ndo, l, p + 2);
        if (advance < 0)
                goto trunc;
        return 2 + advance;
@@ -228,21 +226,22 @@ lwres_printnamelen(const char *p)
 }
 
 static int
-lwres_printbinlen(const char *p0)
+lwres_printbinlen(netdissect_options *ndo,
+                  const char *p0)
 {
        const char *p;
        u_int16_t l;
        int i;
 
        p = p0;
-       if (p + 2 > (const char *)snapend)
+       if (p + 2 > (const char *)ndo->ndo_snapend)
                goto trunc;
        l = EXTRACT_16BITS(p);
-       if (p + 2 + l > (const char *)snapend)
+       if (p + 2 + l > (const char *)ndo->ndo_snapend)
                goto trunc;
        p += 2;
        for (i = 0; i < l; i++)
-               printf("%02x", *p++);
+               ND_PRINT((ndo, "%02x", *p++));
        return p - p0;
 
   trunc:
@@ -250,37 +249,38 @@ lwres_printbinlen(const char *p0)
 }
 
 static int
-lwres_printaddr(lwres_addr_t *ap)
+lwres_printaddr(netdissect_options *ndo,
+                lwres_addr_t *ap)
 {
        u_int16_t l;
        const char *p;
        int i;
 
-       TCHECK(ap->length);
+       ND_TCHECK(ap->length);
        l = EXTRACT_16BITS(&ap->length);
        /* XXX ap points to packed struct */
        p = (const char *)&ap->length + sizeof(ap->length);
-       TCHECK2(*p, l);
+       ND_TCHECK2(*p, l);
 
        switch (EXTRACT_32BITS(&ap->family)) {
        case 1: /* IPv4 */
                if (l < 4)
                        return -1;
-               printf(" %s", ipaddr_string(p));
+               ND_PRINT((ndo, " %s", ipaddr_string(p)));
                p += sizeof(struct in_addr);
                break;
 #ifdef INET6
        case 2: /* IPv6 */
                if (l < 16)
                        return -1;
-               printf(" %s", ip6addr_string(p));
+               ND_PRINT((ndo, " %s", ip6addr_string(p)));
                p += sizeof(struct in6_addr);
                break;
 #endif
        default:
-               printf(" %u/", EXTRACT_32BITS(&ap->family));
+               ND_PRINT((ndo, " %u/", EXTRACT_32BITS(&ap->family)));
                for (i = 0; i < l; i++)
-                       printf("%02x", *p++);
+                       ND_PRINT((ndo, "%02x", *p++));
        }
 
        return p - (const char *)ap;
@@ -290,7 +290,8 @@ lwres_printaddr(lwres_addr_t *ap)
 }
 
 void
-lwres_print(register const u_char *bp, u_int length)
+lwres_print(netdissect_options *ndo,
+            register const u_char *bp, u_int length)
 {
        const struct lwres_lwpacket *np;
        u_int32_t v;
@@ -300,12 +301,12 @@ lwres_print(register const u_char *bp, u_int length)
        int unsupported = 0;
 
        np = (const struct lwres_lwpacket *)bp;
-       TCHECK(np->authlength);
+       ND_TCHECK(np->authlength);
 
-       printf(" lwres");
+       ND_PRINT((ndo, " lwres"));
        v = EXTRACT_16BITS(&np->version);
-       if (vflag || v != LWRES_LWPACKETVERSION_0)
-               printf(" v%u", v);
+       if (ndo->ndo_vflag || v != LWRES_LWPACKETVERSION_0)
+               ND_PRINT((ndo, " v%u", v));
        if (v != LWRES_LWPACKETVERSION_0) {
                s = (const char *)np + EXTRACT_32BITS(&np->length);
                goto tail;
@@ -316,25 +317,25 @@ lwres_print(register const u_char *bp, u_int length)
        /* opcode and pktflags */
        v = EXTRACT_32BITS(&np->opcode);
        s = tok2str(opcode, "#0x%x", v);
-       printf(" %s%s", s, response ? "" : "?");
+       ND_PRINT((ndo, " %s%s", s, response ? "" : "?"));
 
        /* pktflags */
        v = EXTRACT_16BITS(&np->pktflags);
        if (v & ~LWRES_LWPACKETFLAG_RESPONSE)
-               printf("[0x%x]", v);
+               ND_PRINT((ndo, "[0x%x]", v));
 
-       if (vflag > 1) {
-               printf(" (");   /*)*/
-               printf("serial:0x%x", EXTRACT_32BITS(&np->serial));
-               printf(" result:0x%x", EXTRACT_32BITS(&np->result));
-               printf(" recvlen:%u", EXTRACT_32BITS(&np->recvlength));
+       if (ndo->ndo_vflag > 1) {
+               ND_PRINT((ndo, " ("));  /*)*/
+               ND_PRINT((ndo, "serial:0x%x", EXTRACT_32BITS(&np->serial)));
+               ND_PRINT((ndo, " result:0x%x", EXTRACT_32BITS(&np->result)));
+               ND_PRINT((ndo, " recvlen:%u", EXTRACT_32BITS(&np->recvlength)));
                /* BIND910: not used */
-               if (vflag > 2) {
-                       printf(" authtype:0x%x", EXTRACT_16BITS(&np->authtype));
-                       printf(" authlen:%u", EXTRACT_16BITS(&np->authlength));
+               if (ndo->ndo_vflag > 2) {
+                       ND_PRINT((ndo, " authtype:0x%x", EXTRACT_16BITS(&np->authtype)));
+                       ND_PRINT((ndo, " authlen:%u", EXTRACT_16BITS(&np->authlength)));
                }
                /*(*/
-               printf(")");
+               ND_PRINT((ndo, ")"));
        }
 
        /* per-opcode content */
@@ -356,51 +357,51 @@ lwres_print(register const u_char *bp, u_int length)
                        break;
                case LWRES_OPCODE_GETADDRSBYNAME:
                        gabn = (lwres_gabnrequest_t *)(np + 1);
-                       TCHECK(gabn->namelen);
+                       ND_TCHECK(gabn->namelen);
                        /* XXX gabn points to packed struct */
                        s = (const char *)&gabn->namelen +
                            sizeof(gabn->namelen);
                        l = EXTRACT_16BITS(&gabn->namelen);
 
                        /* BIND910: not used */
-                       if (vflag > 2) {
-                               printf(" flags:0x%x",
-                                   EXTRACT_32BITS(&gabn->flags));
+                       if (ndo->ndo_vflag > 2) {
+                               ND_PRINT((ndo, " flags:0x%x",
+                                   EXTRACT_32BITS(&gabn->flags)));
                        }
 
                        v = EXTRACT_32BITS(&gabn->addrtypes);
                        switch (v & (LWRES_ADDRTYPE_V4 | LWRES_ADDRTYPE_V6)) {
                        case LWRES_ADDRTYPE_V4:
-                               printf(" IPv4");
+                               ND_PRINT((ndo, " IPv4"));
                                break;
                        case LWRES_ADDRTYPE_V6:
-                               printf(" IPv6");
+                               ND_PRINT((ndo, " IPv6"));
                                break;
                        case LWRES_ADDRTYPE_V4 | LWRES_ADDRTYPE_V6:
-                               printf(" IPv4/6");
+                               ND_PRINT((ndo, " IPv4/6"));
                                break;
                        }
                        if (v & ~(LWRES_ADDRTYPE_V4 | LWRES_ADDRTYPE_V6))
-                               printf("[0x%x]", v);
+                               ND_PRINT((ndo, "[0x%x]", v));
 
-                       advance = lwres_printname(l, s);
+                       advance = lwres_printname(ndo, l, s);
                        if (advance < 0)
                                goto trunc;
                        s += advance;
                        break;
                case LWRES_OPCODE_GETNAMEBYADDR:
                        gnba = (lwres_gnbarequest_t *)(np + 1);
-                       TCHECK(gnba->addr);
+                       ND_TCHECK(gnba->addr);
 
                        /* BIND910: not used */
-                       if (vflag > 2) {
-                               printf(" flags:0x%x",
-                                   EXTRACT_32BITS(&gnba->flags));
+                       if (ndo->ndo_vflag > 2) {
+                               ND_PRINT((ndo, " flags:0x%x",
+                                   EXTRACT_32BITS(&gnba->flags)));
                        }
 
                        s = (const char *)&gnba->addr;
 
-                       advance = lwres_printaddr(&gnba->addr);
+                       advance = lwres_printaddr(ndo, &gnba->addr);
                        if (advance < 0)
                                goto trunc;
                        s += advance;
@@ -408,19 +409,19 @@ lwres_print(register const u_char *bp, u_int length)
                case LWRES_OPCODE_GETRDATABYNAME:
                        /* XXX no trace, not tested */
                        grbn = (lwres_grbnrequest_t *)(np + 1);
-                       TCHECK(grbn->namelen);
+                       ND_TCHECK(grbn->namelen);
 
                        /* BIND910: not used */
-                       if (vflag > 2) {
-                               printf(" flags:0x%x",
-                                   EXTRACT_32BITS(&grbn->flags));
+                       if (ndo->ndo_vflag > 2) {
+                               ND_PRINT((ndo, " flags:0x%x",
+                                   EXTRACT_32BITS(&grbn->flags)));
                        }
 
-                       printf(" %s", tok2str(ns_type2str, "Type%d",
-                           EXTRACT_16BITS(&grbn->rdtype)));
+                       ND_PRINT((ndo, " %s", tok2str(ns_type2str, "Type%d",
+                           EXTRACT_16BITS(&grbn->rdtype))));
                        if (EXTRACT_16BITS(&grbn->rdclass) != C_IN) {
-                               printf(" %s", tok2str(ns_class2str, "Class%d",
-                                   EXTRACT_16BITS(&grbn->rdclass)));
+                               ND_PRINT((ndo, " %s", tok2str(ns_class2str, "Class%d",
+                                   EXTRACT_16BITS(&grbn->rdclass))));
                        }
 
                        /* XXX grbn points to packed struct */
@@ -428,7 +429,7 @@ lwres_print(register const u_char *bp, u_int length)
                            sizeof(grbn->namelen);
                        l = EXTRACT_16BITS(&grbn->namelen);
 
-                       advance = lwres_printname(l, s);
+                       advance = lwres_printname(ndo, l, s);
                        if (advance < 0)
                                goto trunc;
                        s += advance;
@@ -456,22 +457,22 @@ lwres_print(register const u_char *bp, u_int length)
                        break;
                case LWRES_OPCODE_GETADDRSBYNAME:
                        gabn = (lwres_gabnresponse_t *)(np + 1);
-                       TCHECK(gabn->realnamelen);
+                       ND_TCHECK(gabn->realnamelen);
                        /* XXX gabn points to packed struct */
                        s = (const char *)&gabn->realnamelen +
                            sizeof(gabn->realnamelen);
                        l = EXTRACT_16BITS(&gabn->realnamelen);
 
                        /* BIND910: not used */
-                       if (vflag > 2) {
-                               printf(" flags:0x%x",
-                                   EXTRACT_32BITS(&gabn->flags));
+                       if (ndo->ndo_vflag > 2) {
+                               ND_PRINT((ndo, " flags:0x%x",
+                                   EXTRACT_32BITS(&gabn->flags)));
                        }
 
-                       printf(" %u/%u", EXTRACT_16BITS(&gabn->naliases),
-                           EXTRACT_16BITS(&gabn->naddrs));
+                       ND_PRINT((ndo, " %u/%u", EXTRACT_16BITS(&gabn->naliases),
+                           EXTRACT_16BITS(&gabn->naddrs)));
 
-                       advance = lwres_printname(l, s);
+                       advance = lwres_printname(ndo, l, s);
                        if (advance < 0)
                                goto trunc;
                        s += advance;
@@ -479,7 +480,7 @@ lwres_print(register const u_char *bp, u_int length)
                        /* aliases */
                        na = EXTRACT_16BITS(&gabn->naliases);
                        for (i = 0; i < na; i++) {
-                               advance = lwres_printnamelen(s);
+                               advance = lwres_printnamelen(ndo, s);
                                if (advance < 0)
                                        goto trunc;
                                s += advance;
@@ -488,7 +489,7 @@ lwres_print(register const u_char *bp, u_int length)
                        /* addrs */
                        na = EXTRACT_16BITS(&gabn->naddrs);
                        for (i = 0; i < na; i++) {
-                               advance = lwres_printaddr((lwres_addr_t *)s);
+                               advance = lwres_printaddr(ndo, (lwres_addr_t *)s);
                                if (advance < 0)
                                        goto trunc;
                                s += advance;
@@ -496,21 +497,21 @@ lwres_print(register const u_char *bp, u_int length)
                        break;
                case LWRES_OPCODE_GETNAMEBYADDR:
                        gnba = (lwres_gnbaresponse_t *)(np + 1);
-                       TCHECK(gnba->realnamelen);
+                       ND_TCHECK(gnba->realnamelen);
                        /* XXX gnba points to packed struct */
                        s = (const char *)&gnba->realnamelen +
                            sizeof(gnba->realnamelen);
                        l = EXTRACT_16BITS(&gnba->realnamelen);
 
                        /* BIND910: not used */
-                       if (vflag > 2) {
-                               printf(" flags:0x%x",
-                                   EXTRACT_32BITS(&gnba->flags));
+                       if (ndo->ndo_vflag > 2) {
+                               ND_PRINT((ndo, " flags:0x%x",
+                                   EXTRACT_32BITS(&gnba->flags)));
                        }
 
-                       printf(" %u", EXTRACT_16BITS(&gnba->naliases));
+                       ND_PRINT((ndo, " %u", EXTRACT_16BITS(&gnba->naliases)));
 
-                       advance = lwres_printname(l, s);
+                       advance = lwres_printname(ndo, l, s);
                        if (advance < 0)
                                goto trunc;
                        s += advance;
@@ -518,7 +519,7 @@ lwres_print(register const u_char *bp, u_int length)
                        /* aliases */
                        na = EXTRACT_16BITS(&gnba->naliases);
                        for (i = 0; i < na; i++) {
-                               advance = lwres_printnamelen(s);
+                               advance = lwres_printnamelen(ndo, s);
                                if (advance < 0)
                                        goto trunc;
                                s += advance;
@@ -527,29 +528,29 @@ lwres_print(register const u_char *bp, u_int length)
                case LWRES_OPCODE_GETRDATABYNAME:
                        /* XXX no trace, not tested */
                        grbn = (lwres_grbnresponse_t *)(np + 1);
-                       TCHECK(grbn->nsigs);
+                       ND_TCHECK(grbn->nsigs);
 
                        /* BIND910: not used */
-                       if (vflag > 2) {
-                               printf(" flags:0x%x",
-                                   EXTRACT_32BITS(&grbn->flags));
+                       if (ndo->ndo_vflag > 2) {
+                               ND_PRINT((ndo, " flags:0x%x",
+                                   EXTRACT_32BITS(&grbn->flags)));
                        }
 
-                       printf(" %s", tok2str(ns_type2str, "Type%d",
-                           EXTRACT_16BITS(&grbn->rdtype)));
+                       ND_PRINT((ndo, " %s", tok2str(ns_type2str, "Type%d",
+                           EXTRACT_16BITS(&grbn->rdtype))));
                        if (EXTRACT_16BITS(&grbn->rdclass) != C_IN) {
-                               printf(" %s", tok2str(ns_class2str, "Class%d",
-                                   EXTRACT_16BITS(&grbn->rdclass)));
+                               ND_PRINT((ndo, " %s", tok2str(ns_class2str, "Class%d",
+                                   EXTRACT_16BITS(&grbn->rdclass))));
                        }
-                       printf(" TTL ");
+                       ND_PRINT((ndo, " TTL "));
                        relts_print(EXTRACT_32BITS(&grbn->ttl));
-                       printf(" %u/%u", EXTRACT_16BITS(&grbn->nrdatas),
-                           EXTRACT_16BITS(&grbn->nsigs));
+                       ND_PRINT((ndo, " %u/%u", EXTRACT_16BITS(&grbn->nrdatas),
+                           EXTRACT_16BITS(&grbn->nsigs)));
 
                        /* XXX grbn points to packed struct */
                        s = (const char *)&grbn->nsigs+ sizeof(grbn->nsigs);
 
-                       advance = lwres_printnamelen(s);
+                       advance = lwres_printnamelen(ndo, s);
                        if (advance < 0)
                                goto trunc;
                        s += advance;
@@ -558,7 +559,7 @@ lwres_print(register const u_char *bp, u_int length)
                        na = EXTRACT_16BITS(&grbn->nrdatas);
                        for (i = 0; i < na; i++) {
                                /* XXX should decode resource data */
-                               advance = lwres_printbinlen(s);
+                               advance = lwres_printbinlen(ndo, s);
                                if (advance < 0)
                                        goto trunc;
                                s += advance;
@@ -568,7 +569,7 @@ lwres_print(register const u_char *bp, u_int length)
                        na = EXTRACT_16BITS(&grbn->nsigs);
                        for (i = 0; i < na; i++) {
                                /* XXX how should we print it? */
-                               advance = lwres_printbinlen(s);
+                               advance = lwres_printbinlen(ndo, s);
                                if (advance < 0)
                                        goto trunc;
                                s += advance;
@@ -583,14 +584,13 @@ lwres_print(register const u_char *bp, u_int length)
   tail:
        /* length mismatch */
        if (EXTRACT_32BITS(&np->length) != length) {
-               printf(" [len: %u != %u]", EXTRACT_32BITS(&np->length),
-                   length);
+               ND_PRINT((ndo, " [len: %u != %u]", EXTRACT_32BITS(&np->length),
+                   length));
        }
        if (!unsupported && s < (const char *)np + EXTRACT_32BITS(&np->length))
-               printf("[extra]");
+               ND_PRINT((ndo, "[extra]"));
        return;
 
   trunc:
-       printf("[|lwres]");
-       return;
+       ND_PRINT((ndo, "[|lwres]"));
 }
index 71d1bc3434539c86276bf11e9a82d96c7a191fe4..540cbf424267b0d16ab57aeb6a60706ca165a2c6 100644 (file)
  * Original code by Hannes Gredler ([email protected])
  */
 
+#define NETDISSECT_REWORKED
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
 #include <tcpdump-stdinc.h>
 
-#include <stdio.h>
-#include <stdlib.h>
-
 #include "interface.h"
 #include "extract.h"
 
 void
-sip_print(register const u_char *pptr, register u_int len)
+sip_print(netdissect_options *ndo,
+          register const u_char *pptr, register u_int len)
 {
     u_int idx;
 
-    printf("SIP, length: %u%s", len, vflag ? "\n\t" : "");
+    ND_PRINT((ndo, "SIP, length: %u%s", len, ndo->ndo_vflag ? "\n\t" : ""));
 
     /* in non-verbose mode just lets print the protocol and length */
-    if (vflag < 1)
+    if (ndo->ndo_vflag < 1)
         return;
 
     for (idx = 0; idx < len; idx++) {
-        TCHECK2(*(pptr+idx), 2);
+        ND_TCHECK2(*(pptr+idx), 2);
         if (EXTRACT_16BITS(pptr+idx) != 0x0d0a) { /* linefeed ? */
-            safeputchar(gndo, *(pptr + idx));
+            safeputchar(ndo, *(pptr + idx));
         } else {
-            printf("\n\t");
+            ND_PRINT((ndo, "\n\t"));
             idx+=1;
         }
     }
 
     /* do we want to see an additionally hexdump ? */
-    if (vflag> 1)
-        print_unknown_data(gndo,pptr,"\n\t",len);
+    if (ndo->ndo_vflag > 1)
+        print_unknown_data(ndo, pptr, "\n\t", len);
 
     return;
 
 trunc:
-    printf("[|sip]");
+    ND_PRINT((ndo, "[|sip]"));
 }
index d332f67f5012f0937b29bebbe5b413d09ec2c320..87ce1dc798291942d148cfce9e3f7cb01e5307df 100644 (file)
  * FOR A PARTICULAR PURPOSE.
  */
 
+#define NETDISSECT_REWORKED
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
 #include <tcpdump-stdinc.h>
 
-#include <stdio.h>
-#include <stdlib.h>
-
 #include "interface.h"
 #include "extract.h"
 
@@ -78,7 +76,8 @@ static const struct tok syslog_facility_values[] = {
 };
 
 void
-syslog_print(register const u_char *pptr, register u_int len)
+syslog_print(netdissect_options *ndo,
+             register const u_char *pptr, register u_int len)
 {
     u_int16_t msg_off = 0;
     u_int16_t pri = 0;
@@ -90,57 +89,57 @@ syslog_print(register const u_char *pptr, register u_int len)
      * severity and facility values
      */
 
-    TCHECK2(*pptr, 1);
+    ND_TCHECK2(*pptr, 1);
     if (*(pptr+msg_off) == '<') {
         msg_off++;
-        TCHECK2(*(pptr+msg_off), 1);
+        ND_TCHECK2(*(pptr + msg_off), 1);
         while ( *(pptr+msg_off) >= '0' &&
                 *(pptr+msg_off) <= '9' &&
                 msg_off <= SYSLOG_MAX_DIGITS) {
             pri = pri * 10 + (*(pptr+msg_off) - '0');
             msg_off++;
-            TCHECK2(*(pptr+msg_off), 1);
+            ND_TCHECK2(*(pptr + msg_off), 1);
         }
         if (*(pptr+msg_off) != '>') {
-            printf("%s", tstr);
+            ND_PRINT((ndo, "%s", tstr));
             return;
         }
         msg_off++;
     } else {
-        printf("%s", tstr);
+        ND_PRINT((ndo, "%s", tstr));
         return;
     }
 
     facility = (pri & SYSLOG_FACILITY_MASK) >> 3;
     severity = pri & SYSLOG_SEVERITY_MASK;
 
-    if (vflag < 1 )
+    if (ndo->ndo_vflag < 1 )
     {
-        printf("SYSLOG %s.%s, length: %u",
+        ND_PRINT((ndo, "SYSLOG %s.%s, length: %u",
                tok2str(syslog_facility_values, "unknown (%u)", facility),
                tok2str(syslog_severity_values, "unknown (%u)", severity),
-               len);
+               len));
         return;
     }
 
-    printf("SYSLOG, length: %u\n\tFacility %s (%u), Severity %s (%u)\n\tMsg: ",
+    ND_PRINT((ndo, "SYSLOG, length: %u\n\tFacility %s (%u), Severity %s (%u)\n\tMsg: ",
            len,
            tok2str(syslog_facility_values, "unknown (%u)", facility),
            facility,
            tok2str(syslog_severity_values, "unknown (%u)", severity),
-           severity);
+           severity));
 
     /* print the syslog text in verbose mode */
     for (; msg_off < len; msg_off++) {
-        TCHECK2(*(pptr+msg_off), 1);
-        safeputchar(gndo, *(pptr + msg_off));
+        ND_TCHECK2(*(pptr + msg_off), 1);
+        safeputchar(ndo, *(pptr + msg_off));
     }
 
-    if (vflag > 1)
-        print_unknown_data(gndo,pptr,"\n\t",len);
+    if (ndo->ndo_vflag > 1)
+        print_unknown_data(ndo, pptr, "\n\t", len);
 
     return;
 
 trunc:
-        printf("%s", tstr);
+    ND_PRINT((ndo, "%s", tstr));
 }
index e01cd995b4999b0f0450b2a65f0780476c47f924..9f7d5af90587a27cc875e00b7fe8ff06e338ddcc 100644 (file)
@@ -641,7 +641,7 @@ udp_print(netdissect_options *ndo, register const u_char *bp, u_int length,
                else if (dport == HSRP_PORT)
                        hsrp_print(ndo, (const u_char *)(up + 1), length);
                else if (ISPORT(LWRES_PORT))
-                       lwres_print((const u_char *)(up + 1), length);
+                       lwres_print(ndo, (const u_char *)(up + 1), length);
                else if (ISPORT(LDP_PORT))
                        ldp_print(ndo, (const u_char *)(up + 1), length);
                else if (ISPORT(OLSR_PORT))
@@ -669,9 +669,9 @@ udp_print(netdissect_options *ndo, register const u_char *bp, u_int length,
                 else if (ISPORT(LWAPP_DATA_PORT))
                         lwapp_data_print(ndo, (const u_char *)(up + 1), length);
                 else if (ISPORT(SIP_PORT))
-                       sip_print((const u_char *)(up + 1), length);
+                       sip_print(ndo, (const u_char *)(up + 1), length);
                 else if (ISPORT(SYSLOG_PORT))
-                       syslog_print((const u_char *)(up + 1), length);
+                       syslog_print(ndo, (const u_char *)(up + 1), length);
                 else if (ISPORT(OTV_PORT))
                        otv_print(ndo, (const u_char *)(up + 1), length);
                 else if (ISPORT(VXLAN_PORT))