diff --git a/print-icmp.c b/print-icmp.c
index 9892594..59eb007 100644
--- a/print-icmp.c
+++ b/print-icmp.c
@@ -19,11 +19,7 @@
  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
-#ifndef lint
-static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-icmp.c,v 1.87 2007-09-13 17:42:31 guy Exp $ (LBL)";
-#endif
-
+#define NETDISSECT_REWORKED
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -51,17 +47,17 @@
  * Structure of an icmp header.
  */
 struct icmp {
-	u_int8_t  icmp_type;		/* type of message, see below */
-	u_int8_t  icmp_code;		/* type sub code */
-	u_int16_t icmp_cksum;		/* ones complement cksum of struct */
+	uint8_t  icmp_type;		/* type of message, see below */
+	uint8_t  icmp_code;		/* type sub code */
+	uint16_t icmp_cksum;		/* ones complement cksum of struct */
 	union {
-		u_int8_t ih_pptr;			/* ICMP_PARAMPROB */
+		uint8_t ih_pptr;			/* ICMP_PARAMPROB */
 		struct in_addr ih_gwaddr;	/* ICMP_REDIRECT */
 		struct ih_idseq {
-			u_int16_t icd_id;
-			u_int16_t icd_seq;
+			uint16_t icd_id;
+			uint16_t icd_seq;
 		} ih_idseq;
-		u_int32_t ih_void;
+		uint32_t ih_void;
 	} icmp_hun;
 #define	icmp_pptr	icmp_hun.ih_pptr
 #define	icmp_gwaddr	icmp_hun.ih_gwaddr
@@ -70,16 +66,16 @@
 #define	icmp_void	icmp_hun.ih_void
 	union {
 		struct id_ts {
-			u_int32_t its_otime;
-			u_int32_t its_rtime;
-			u_int32_t its_ttime;
+			uint32_t its_otime;
+			uint32_t its_rtime;
+			uint32_t its_ttime;
 		} id_ts;
 		struct id_ip  {
 			struct ip idi_ip;
 			/* options and then 64 bits of data */
 		} id_ip;
-		u_int32_t id_mask;
-		u_int8_t id_data[1];
+		uint32_t id_mask;
+		uint8_t id_data[1];
 	} icmp_dun;
 #define	icmp_otime	icmp_dun.id_ts.its_otime
 #define	icmp_rtime	icmp_dun.id_ts.its_rtime
@@ -89,7 +85,7 @@
 #define	icmp_data	icmp_dun.id_data
 };
 
-#define ICMP_MPLS_EXT_EXTRACT_VERSION(x) (((x)&0xf0)>>4) 
+#define ICMP_MPLS_EXT_EXTRACT_VERSION(x) (((x)&0xf0)>>4)
 #define ICMP_MPLS_EXT_VERSION 2
 
 /*
@@ -102,7 +98,7 @@
  */
 #define	ICMP_MINLEN	8				/* abs minimum */
 #define ICMP_EXTD_MINLEN (156 - sizeof (struct ip))     /* draft-bonica-internet-icmp-08 */
-#define	ICMP_TSLEN	(8 + 3 * sizeof (u_int32_t))	/* timestamp */
+#define	ICMP_TSLEN	(8 + 3 * sizeof (uint32_t))	/* timestamp */
 #define	ICMP_MASKLEN	12				/* address mask */
 #define	ICMP_ADVLENMIN	(8 + sizeof (struct ip) + 8)	/* min */
 #define	ICMP_ADVLEN(p)	(8 + (IP_HL(&(p)->icmp_ip) << 2) + 8)
@@ -149,12 +145,10 @@
 
 #define	ICMP_MAXTYPE		18
 
-#define	ICMP_INFOTYPE(type) \
-	((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
-	(type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \
-	(type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
-	(type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
-	(type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
+#define ICMP_ERRTYPE(type) \
+	((type) == ICMP_UNREACH || (type) == ICMP_SOURCEQUENCH || \
+	(type) == ICMP_REDIRECT || (type) == ICMP_TIMXCEED || \
+	(type) == ICMP_PARAMPROB)
 #define	ICMP_MPLS_EXT_TYPE(type) \
 	((type) == ICMP_UNREACH || \
          (type) == ICMP_TIMXCEED || \
@@ -245,20 +239,20 @@
 
 /* rfc1191 */
 struct mtu_discovery {
-	u_int16_t unused;
-	u_int16_t nexthopmtu;
+	uint16_t unused;
+	uint16_t nexthopmtu;
 };
 
 /* rfc1256 */
 struct ih_rdiscovery {
-	u_int8_t ird_addrnum;
-	u_int8_t ird_addrsiz;
-	u_int16_t ird_lifetime;
+	uint8_t ird_addrnum;
+	uint8_t ird_addrsiz;
+	uint16_t ird_lifetime;
 };
 
 struct id_rdiscovery {
-	u_int32_t ird_addr;
-	u_int32_t ird_pref;
+	uint32_t ird_addr;
+	uint32_t ird_pref;
 };
 
 /*
@@ -288,22 +282,22 @@
  */
 
 struct icmp_ext_t {
-    u_int8_t icmp_type;
-    u_int8_t icmp_code;
-    u_int8_t icmp_checksum[2];
-    u_int8_t icmp_reserved;
-    u_int8_t icmp_length;
-    u_int8_t icmp_reserved2[2];
-    u_int8_t icmp_ext_legacy_header[128]; /* extension header starts 128 bytes after ICMP header */
-    u_int8_t icmp_ext_version_res[2];
-    u_int8_t icmp_ext_checksum[2];
-    u_int8_t icmp_ext_data[1];
+    uint8_t icmp_type;
+    uint8_t icmp_code;
+    uint8_t icmp_checksum[2];
+    uint8_t icmp_reserved;
+    uint8_t icmp_length;
+    uint8_t icmp_reserved2[2];
+    uint8_t icmp_ext_legacy_header[128]; /* extension header starts 128 bytes after ICMP header */
+    uint8_t icmp_ext_version_res[2];
+    uint8_t icmp_ext_checksum[2];
+    uint8_t icmp_ext_data[1];
 };
 
 struct icmp_mpls_ext_object_header_t {
-    u_int8_t length[2];
-    u_int8_t class_num;
-    u_int8_t ctype;
+    uint8_t length[2];
+    uint8_t class_num;
+    uint8_t ctype;
 };
 
 static const struct tok icmp_mpls_ext_obj_values[] = {
@@ -317,7 +311,8 @@
 
 /* print the milliseconds since midnight UTC */
 const char *
-icmp_tstamp_print(u_int tstamp) {
+icmp_tstamp_print(u_int tstamp)
+{
     u_int msec,sec,min,hrs;
 
     static char buf[64];
@@ -329,9 +324,10 @@
     snprintf(buf, sizeof(buf), "%02u:%02u:%02u.%03u",hrs,min,sec,msec);
     return buf;
 }
- 
+
 void
-icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
+icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *bp2,
+           int fragmented)
 {
 	char *cp;
 	const struct icmp *dp;
@@ -340,8 +336,8 @@
 	const char *str, *fmt;
 	const struct ip *oip;
 	const struct udphdr *ouh;
-        const u_int8_t *obj_tptr;
-        u_int32_t raw_label;
+        const uint8_t *obj_tptr;
+        uint32_t raw_label;
         const u_char *snapend_save;
 	const struct icmp_mpls_ext_object_header_t *icmp_mpls_ext_object_header;
 	u_int hlen, dport, mtu, obj_tlen, obj_class_num, obj_ctype;
@@ -353,12 +349,12 @@
 	ip = (struct ip *)bp2;
 	str = buf;
 
-	TCHECK(dp->icmp_code);
+	ND_TCHECK(dp->icmp_code);
 	switch (dp->icmp_type) {
 
 	case ICMP_ECHO:
 	case ICMP_ECHOREPLY:
-		TCHECK(dp->icmp_seq);
+		ND_TCHECK(dp->icmp_seq);
 		(void)snprintf(buf, sizeof(buf), "echo %s, id %u, seq %u",
                                dp->icmp_type == ICMP_ECHO ?
                                "request" : "reply",
@@ -367,44 +363,44 @@
 		break;
 
 	case ICMP_UNREACH:
-		TCHECK(dp->icmp_ip.ip_dst);
+		ND_TCHECK(dp->icmp_ip.ip_dst);
 		switch (dp->icmp_code) {
 
 		case ICMP_UNREACH_PROTOCOL:
-			TCHECK(dp->icmp_ip.ip_p);
+			ND_TCHECK(dp->icmp_ip.ip_p);
 			(void)snprintf(buf, sizeof(buf),
 			    "%s protocol %d unreachable",
-			    ipaddr_string(&dp->icmp_ip.ip_dst),
+			    ipaddr_string(ndo, &dp->icmp_ip.ip_dst),
 			    dp->icmp_ip.ip_p);
 			break;
 
 		case ICMP_UNREACH_PORT:
-			TCHECK(dp->icmp_ip.ip_p);
+			ND_TCHECK(dp->icmp_ip.ip_p);
 			oip = &dp->icmp_ip;
 			hlen = IP_HL(oip) * 4;
 			ouh = (struct udphdr *)(((u_char *)oip) + hlen);
-			TCHECK(ouh->uh_dport);
+			ND_TCHECK(ouh->uh_dport);
 			dport = EXTRACT_16BITS(&ouh->uh_dport);
 			switch (oip->ip_p) {
 
 			case IPPROTO_TCP:
 				(void)snprintf(buf, sizeof(buf),
 					"%s tcp port %s unreachable",
-					ipaddr_string(&oip->ip_dst),
+					ipaddr_string(ndo, &oip->ip_dst),
 					tcpport_string(dport));
 				break;
 
 			case IPPROTO_UDP:
 				(void)snprintf(buf, sizeof(buf),
 					"%s udp port %s unreachable",
-					ipaddr_string(&oip->ip_dst),
+					ipaddr_string(ndo, &oip->ip_dst),
 					udpport_string(dport));
 				break;
 
 			default:
 				(void)snprintf(buf, sizeof(buf),
 					"%s protocol %d port %d unreachable",
-					ipaddr_string(&oip->ip_dst),
+					ipaddr_string(ndo, &oip->ip_dst),
 					oip->ip_p, dport);
 				break;
 			}
@@ -418,11 +414,11 @@
 			if (mtu) {
 				(void)snprintf(buf, sizeof(buf),
 				    "%s unreachable - need to frag (mtu %d)",
-				    ipaddr_string(&dp->icmp_ip.ip_dst), mtu);
+				    ipaddr_string(ndo, &dp->icmp_ip.ip_dst), mtu);
 			} else {
 				(void)snprintf(buf, sizeof(buf),
 				    "%s unreachable - need to frag",
-				    ipaddr_string(&dp->icmp_ip.ip_dst));
+				    ipaddr_string(ndo, &dp->icmp_ip.ip_dst));
 			}
 		    }
 			break;
@@ -431,18 +427,18 @@
 			fmt = tok2str(unreach2str, "#%d %%s unreachable",
 			    dp->icmp_code);
 			(void)snprintf(buf, sizeof(buf), fmt,
-			    ipaddr_string(&dp->icmp_ip.ip_dst));
+			    ipaddr_string(ndo, &dp->icmp_ip.ip_dst));
 			break;
 		}
 		break;
 
 	case ICMP_REDIRECT:
-		TCHECK(dp->icmp_ip.ip_dst);
+		ND_TCHECK(dp->icmp_ip.ip_dst);
 		fmt = tok2str(type2str, "redirect-#%d %%s to net %%s",
 		    dp->icmp_code);
 		(void)snprintf(buf, sizeof(buf), fmt,
-		    ipaddr_string(&dp->icmp_ip.ip_dst),
-		    ipaddr_string(&dp->icmp_gwaddr));
+		    ipaddr_string(ndo, &dp->icmp_ip.ip_dst),
+		    ipaddr_string(ndo, &dp->icmp_gwaddr));
 		break;
 
 	case ICMP_ROUTERADVERT:
@@ -455,7 +451,7 @@
 		cp = buf + strlen(buf);
 
 		ihp = (struct ih_rdiscovery *)&dp->icmp_void;
-		TCHECK(*ihp);
+		ND_TCHECK(*ihp);
 		(void)strncpy(cp, " lifetime ", sizeof(buf) - (cp - buf));
 		cp = buf + strlen(buf);
 		lifetime = EXTRACT_16BITS(&ihp->ird_lifetime);
@@ -486,9 +482,9 @@
 		}
 		idp = (struct id_rdiscovery *)&dp->icmp_data;
 		while (num-- > 0) {
-			TCHECK(*idp);
+			ND_TCHECK(*idp);
 			(void)snprintf(cp, sizeof(buf) - (cp - buf), " {%s %u}",
-			    ipaddr_string(&idp->ird_addr),
+			    ipaddr_string(ndo, &idp->ird_addr),
 			    EXTRACT_32BITS(&idp->ird_pref));
 			cp = buf + strlen(buf);
 			++idp;
@@ -497,7 +493,7 @@
 		break;
 
 	case ICMP_TIMXCEED:
-		TCHECK(dp->icmp_ip.ip_dst);
+		ND_TCHECK(dp->icmp_ip.ip_dst);
 		switch (dp->icmp_code) {
 
 		case ICMP_TIMXCEED_INTRANS:
@@ -520,20 +516,20 @@
 			(void)snprintf(buf, sizeof(buf),
 			    "parameter problem - code %d", dp->icmp_code);
 		else {
-			TCHECK(dp->icmp_pptr);
+			ND_TCHECK(dp->icmp_pptr);
 			(void)snprintf(buf, sizeof(buf),
 			    "parameter problem - octet %d", dp->icmp_pptr);
 		}
 		break;
 
 	case ICMP_MASKREPLY:
-		TCHECK(dp->icmp_mask);
+		ND_TCHECK(dp->icmp_mask);
 		(void)snprintf(buf, sizeof(buf), "address mask is 0x%08x",
 		    EXTRACT_32BITS(&dp->icmp_mask));
 		break;
 
 	case ICMP_TSTAMP:
-		TCHECK(dp->icmp_seq);
+		ND_TCHECK(dp->icmp_seq);
 		(void)snprintf(buf, sizeof(buf),
 		    "time stamp query id %u seq %u",
 		    EXTRACT_16BITS(&dp->icmp_id),
@@ -541,7 +537,7 @@
 		break;
 
 	case ICMP_TSTAMPREPLY:
-		TCHECK(dp->icmp_ttime);
+		ND_TCHECK(dp->icmp_ttime);
 		(void)snprintf(buf, sizeof(buf),
 		    "time stamp reply id %u seq %u: org %s",
                                EXTRACT_16BITS(&dp->icmp_id),
@@ -558,19 +554,19 @@
 		str = tok2str(icmp2str, "type-#%d", dp->icmp_type);
 		break;
 	}
-	(void)printf("ICMP %s, length %u", str, plen);
-	if (vflag && !fragmented) { /* don't attempt checksumming if this is a frag */
-		u_int16_t sum, icmp_sum;
+	ND_PRINT((ndo, "ICMP %s, length %u", str, plen));
+	if (ndo->ndo_vflag && !fragmented) { /* don't attempt checksumming if this is a frag */
+		uint16_t sum, icmp_sum;
 		struct cksum_vec vec[1];
-		if (TTEST2(*bp, plen)) {
-			vec[0].ptr = (const u_int8_t *)(void *)dp;
+		if (ND_TTEST2(*bp, plen)) {
+			vec[0].ptr = (const uint8_t *)(void *)dp;
 			vec[0].len = plen;
 			sum = in_cksum(vec, 1);
 			if (sum != 0) {
 				icmp_sum = EXTRACT_16BITS(&dp->icmp_cksum);
-				(void)printf(" (wrong icmp cksum %x (->%x)!)",
+				ND_PRINT((ndo, " (wrong icmp cksum %x (->%x)!)",
 					     icmp_sum,
-					     in_cksum_shouldbe(icmp_sum, sum));
+					     in_cksum_shouldbe(icmp_sum, sum)));
 			}
 		}
 	}
@@ -579,22 +575,22 @@
          * print the remnants of the IP packet.
          * save the snaplength as this may get overidden in the IP printer.
          */
-	if (vflag >= 1 && !ICMP_INFOTYPE(dp->icmp_type)) {
+	if (ndo->ndo_vflag >= 1 && ICMP_ERRTYPE(dp->icmp_type)) {
 		bp += 8;
-		(void)printf("\n\t");
+		ND_PRINT((ndo, "\n\t"));
 		ip = (struct ip *)bp;
-		snaplen = snapend - bp;
-                snapend_save = snapend;
-		ip_print(gndo, bp, EXTRACT_16BITS(&ip->ip_len));
-                snapend = snapend_save;
+		ndo->ndo_snaplen = ndo->ndo_snapend - bp;
+                snapend_save = ndo->ndo_snapend;
+		ip_print(ndo, bp, EXTRACT_16BITS(&ip->ip_len));
+                ndo->ndo_snapend = snapend_save;
 	}
 
         /*
          * Attempt to decode the MPLS extensions only for some ICMP types.
          */
-        if (vflag >= 1 && plen > ICMP_EXTD_MINLEN && ICMP_MPLS_EXT_TYPE(dp->icmp_type)) {
+        if (ndo->ndo_vflag >= 1 && plen > ICMP_EXTD_MINLEN && ICMP_MPLS_EXT_TYPE(dp->icmp_type)) {
 
-            TCHECK(*ext_dp);
+            ND_TCHECK(*ext_dp);
 
             /*
              * Check first if the mpls extension header shows a non-zero length.
@@ -603,54 +599,54 @@
              * however not all implementations set the length field proper.
              */
             if (!ext_dp->icmp_length) {
-                vec[0].ptr = (const u_int8_t *)(void *)&ext_dp->icmp_ext_version_res;
+                vec[0].ptr = (const uint8_t *)(void *)&ext_dp->icmp_ext_version_res;
                 vec[0].len = plen - ICMP_EXTD_MINLEN;
                 if (in_cksum(vec, 1)) {
                     return;
                 }
             }
 
-            printf("\n\tMPLS extension v%u",
-                   ICMP_MPLS_EXT_EXTRACT_VERSION(*(ext_dp->icmp_ext_version_res)));
-            
+            ND_PRINT((ndo, "\n\tMPLS extension v%u",
+                   ICMP_MPLS_EXT_EXTRACT_VERSION(*(ext_dp->icmp_ext_version_res))));
+
             /*
              * Sanity checking of the header.
              */
             if (ICMP_MPLS_EXT_EXTRACT_VERSION(*(ext_dp->icmp_ext_version_res)) !=
                 ICMP_MPLS_EXT_VERSION) {
-                printf(" packet not supported");
+                ND_PRINT((ndo, " packet not supported"));
                 return;
             }
 
             hlen = plen - ICMP_EXTD_MINLEN;
-            vec[0].ptr = (const u_int8_t *)(void *)&ext_dp->icmp_ext_version_res;
+            vec[0].ptr = (const uint8_t *)(void *)&ext_dp->icmp_ext_version_res;
             vec[0].len = hlen;
-            printf(", checksum 0x%04x (%scorrect), length %u",
+            ND_PRINT((ndo, ", checksum 0x%04x (%scorrect), length %u",
                    EXTRACT_16BITS(ext_dp->icmp_ext_checksum),
                    in_cksum(vec, 1) ? "in" : "",
-                   hlen);
+                   hlen));
 
             hlen -= 4; /* subtract common header size */
-            obj_tptr = (u_int8_t *)ext_dp->icmp_ext_data;
+            obj_tptr = (uint8_t *)ext_dp->icmp_ext_data;
 
             while (hlen > sizeof(struct icmp_mpls_ext_object_header_t)) {
 
                 icmp_mpls_ext_object_header = (struct icmp_mpls_ext_object_header_t *)obj_tptr;
-                TCHECK(*icmp_mpls_ext_object_header);
+                ND_TCHECK(*icmp_mpls_ext_object_header);
                 obj_tlen = EXTRACT_16BITS(icmp_mpls_ext_object_header->length);
                 obj_class_num = icmp_mpls_ext_object_header->class_num;
                 obj_ctype = icmp_mpls_ext_object_header->ctype;
                 obj_tptr += sizeof(struct icmp_mpls_ext_object_header_t);
 
-                printf("\n\t  %s Object (%u), Class-Type: %u, length %u",
+                ND_PRINT((ndo, "\n\t  %s Object (%u), Class-Type: %u, length %u",
                        tok2str(icmp_mpls_ext_obj_values,"unknown",obj_class_num),
                        obj_class_num,
                        obj_ctype,
-                       obj_tlen);
+                       obj_tlen));
 
                 hlen-=sizeof(struct icmp_mpls_ext_object_header_t); /* length field includes tlv header */
 
-                /* infinite loop protection */                
+                /* infinite loop protection */
                 if ((obj_class_num == 0) ||
                     (obj_tlen < sizeof(struct icmp_mpls_ext_object_header_t))) {
                     return;
@@ -661,15 +657,15 @@
                 case 1:
                     switch(obj_ctype) {
                     case 1:
-                        TCHECK2(*obj_tptr, 4);
+                        ND_TCHECK2(*obj_tptr, 4);
                         raw_label = EXTRACT_32BITS(obj_tptr);
-                        printf("\n\t    label %u, exp %u", MPLS_LABEL(raw_label), MPLS_EXP(raw_label));
+                        ND_PRINT((ndo, "\n\t    label %u, exp %u", MPLS_LABEL(raw_label), MPLS_EXP(raw_label)));
                         if (MPLS_STACK(raw_label))
-                            printf(", [S]");
-                        printf(", ttl %u", MPLS_TTL(raw_label));
+                            ND_PRINT((ndo, ", [S]"));
+                        ND_PRINT((ndo, ", ttl %u", MPLS_TTL(raw_label)));
                         break;
                     default:
-                        print_unknown_data(obj_tptr, "\n\t    ", obj_tlen);
+                        print_unknown_data(ndo, obj_tptr, "\n\t    ", obj_tlen);
                     }
                     break;
 
@@ -679,7 +675,7 @@
                 */
                 case 2:
                 default:
-                    print_unknown_data(obj_tptr, "\n\t    ", obj_tlen);
+                    print_unknown_data(ndo, obj_tptr, "\n\t    ", obj_tlen);
                     break;
                 }
                 if (hlen < obj_tlen)
@@ -691,5 +687,11 @@
 
 	return;
 trunc:
-	fputs("[|icmp]", stdout);
+	ND_PRINT((ndo, "[|icmp]"));
 }
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 8
+ * End:
+ */
