NDOize EAP, IEEE CFM, lwres, SIP & Syslog decoders
diff --git a/interface.h b/interface.h
index 47f0350..451702c 100644
--- a/interface.h
+++ b/interface.h
@@ -181,10 +181,6 @@
 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
diff --git a/netdissect.h b/netdissect.h
index 1cfc6fd..03b0b9f 100644
--- a/netdissect.h
+++ b/netdissect.h
@@ -502,6 +502,10 @@
 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 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 *);
diff --git a/print-cfm.c b/print-cfm.c
index 2f43d61..6901b89 100644
--- a/print-cfm.c
+++ b/print-cfm.c
@@ -17,6 +17,7 @@
  * Original code by Hannes Gredler (hannes@juniper.net)
  */
 
+#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"
@@ -34,12 +33,6 @@
 #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 @@
 };
 
 
-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 @@
      * 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 @@
 /*
  * 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 @@
 }
 
 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 @@
 
     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 @@
         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 @@
         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 @@
         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 @@
     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_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 @@
 
         /* 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 @@
             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 @@
 
             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 @@
                 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 @@
             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 @@
             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"));
 }
diff --git a/print-eap.c b/print-eap.c
index fba40e2..5c623dc 100644
--- a/print-eap.c
+++ b/print-eap.c
@@ -21,19 +21,16 @@
  *
  */
 
+#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 @@
  * 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 @@
     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 @@
     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 @@
                  * 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 @@
 
             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 @@
     return;
 
  trunc:
-    printf("\n\t[|EAP]");
+    ND_PRINT((ndo, "\n\t[|EAP]"));
 }
 
 /*
diff --git a/print-ether.c b/print-ether.c
index 4702e88..2bae574 100644
--- a/print-ether.c
+++ b/print-ether.c
@@ -390,7 +390,7 @@
 
 	case ETHERTYPE_CFM:
 	case ETHERTYPE_CFM_OLD:
-	        cfm_print(/*ndo,*/p, length);
+		cfm_print(ndo, p, length);
 		return (1);
 
 	case ETHERTYPE_LLDP:
diff --git a/print-lwres.c b/print-lwres.c
index e4e80c7..d253da9 100644
--- a/print-lwres.c
+++ b/print-lwres.c
@@ -27,6 +27,7 @@
  * SUCH DAMAGE.
  */
 
+#define NETDISSECT_REWORKED
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -182,25 +183,21 @@
 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 @@
 }
 
 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 @@
 }
 
 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 @@
 }
 
 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 @@
 }
 
 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 @@
 	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 @@
 	/* 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 @@
 			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 @@
 		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 @@
 			    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 @@
 			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 @@
 			/* 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 @@
 			/* 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 @@
 			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 @@
 			/* 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 @@
 		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 @@
 			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 @@
 			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 @@
   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]"));
 }
diff --git a/print-sip.c b/print-sip.c
index 71d1bc3..540cbf4 100644
--- a/print-sip.c
+++ b/print-sip.c
@@ -13,45 +13,44 @@
  * Original code by Hannes Gredler (hannes@juniper.net)
  */
 
+#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]"));
 }
diff --git a/print-syslog.c b/print-syslog.c
index d332f67..87ce1dc 100644
--- a/print-syslog.c
+++ b/print-syslog.c
@@ -14,15 +14,13 @@
  * 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 @@
 };
 
 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 @@
      * 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));
 }
diff --git a/print-udp.c b/print-udp.c
index e01cd99..9f7d5af 100644
--- a/print-udp.c
+++ b/print-udp.c
@@ -641,7 +641,7 @@
 		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 @@
                 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))