summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES13
-rw-r--r--interface.h15
-rw-r--r--isakmp.h24
-rw-r--r--print-bgp.c114
-rw-r--r--print-dhcp6.c8
-rw-r--r--print-frag6.c10
-rw-r--r--print-ip.c10
-rw-r--r--print-l2tp.c32
-rw-r--r--print-llc.c61
-rw-r--r--print-null.c10
-rw-r--r--print-ppp.c64
-rw-r--r--print-rt6.c86
-rw-r--r--print-smb.c35
-rw-r--r--print-snmp.c10
-rw-r--r--print-tcp.c12
-rw-r--r--print-udp.c6
-rw-r--r--smb.h2
-rw-r--r--smbutil.c22
-rw-r--r--tcpdump.c28
19 files changed, 353 insertions, 209 deletions
diff --git a/CHANGES b/CHANGES
index 5c3aeb3c..f2194039 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,14 @@
+Wed Dec 22 13:06:17 JST 1999 itojun@iijlab.net
+ * print-rt6.c: make IPv6 routing header printing work with new 2292bis
+ API.
+ * print-bgp.c: improve options printing. ugly code exists for
+ unaligned option parsing (need some fix).
+ * const poisoning in SMB decoder.
+ * make dump format back to original. someone may want to add an
+ option to do ascii printing, but keep the default behavior as is
+ for scripts used in many places.
+ * -Wall -Werror clean checks.
+
1999-11-21 Assar Westerlund <assar@sics.se>
* Add SMB printing code from Andrew Tridgell <tridge@linuxcare.com>
@@ -543,4 +554,4 @@ v2.0 Sun Jan 13 12:20:40 PST 1991
- Initial public release.
-@(#) $Header: /tcpdump/master/tcpdump/CHANGES,v 1.61 1999-11-21 15:58:53 assar Exp $ (LBL)
+@(#) $Header: /tcpdump/master/tcpdump/CHANGES,v 1.62 1999-12-22 06:27:19 itojun Exp $ (LBL)
diff --git a/interface.h b/interface.h
index a7a0661e..52316132 100644
--- a/interface.h
+++ b/interface.h
@@ -18,7 +18,7 @@
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.116 1999-12-15 07:55:42 fenner Exp $ (LBL)
+ * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.117 1999-12-22 06:27:20 itojun Exp $ (LBL)
*/
#ifndef tcpdump_interface_h
@@ -48,6 +48,7 @@ extern int tflag; /* print packet arrival time */
extern int vflag; /* verbose */
extern int xflag; /* print packet in hex */
+extern char *ahsecret;
extern char *espsecret;
extern int packettype; /* as specified by -T */
@@ -231,13 +232,13 @@ extern int esp_print(register const u_char *, register const u_char *, int *);
extern void isakmp_print(const u_char *, u_int, const u_char *);
extern int ipcomp_print(register const u_char *, register const u_char *, int *);
extern void rx_print(register const u_char *, int, int, int, u_char *);
-extern void netbeui_print(u_char *, u_char *);
-extern void ipx_netbios_print(u_char *, u_char *);
-extern void nbt_tcp_print(u_char *, int);
-extern void nbt_udp137_print(u_char *data, int);
-extern void nbt_udp138_print(u_char *data, int);
+extern void netbeui_print(const u_char *, const u_char *);
+extern void ipx_netbios_print(const u_char *, const u_char *);
+extern void nbt_tcp_print(const u_char *, int);
+extern void nbt_udp137_print(const u_char *data, int);
+extern void nbt_udp138_print(const u_char *data, int);
extern char *smb_errstr(int, int);
-extern void print_data(unsigned char *, int);
+extern void print_data(const unsigned char *, int);
extern void l2tp_print(const u_char *, u_int);
extern void lcp_print(const u_char *, u_int);
diff --git a/isakmp.h b/isakmp.h
index e8c7bd55..da793e1f 100644
--- a/isakmp.h
+++ b/isakmp.h
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* YIPS @(#)$Id: isakmp.h,v 1.3 1999-11-17 04:14:50 assar Exp $ */
+/* YIPS @(#)$Id: isakmp.h,v 1.4 1999-12-22 06:27:20 itojun Exp $ */
/* refer to RFC 2408 */
@@ -98,20 +98,20 @@ typedef struct { /* i_cookie + r_cookie */
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
struct isakmp {
- cookie_t i_ck; /* Initiator Cookie */
- cookie_t r_ck; /* Responder Cookie */
- u_int8_t np; /* Next Payload Type */
+ cookie_t i_ck; /* Initiator Cookie */
+ cookie_t r_ck; /* Responder Cookie */
+ u_int8_t np; /* Next Payload Type */
#if defined(WORDS_BIGENDIAN) || (defined(BYTE_ORDER) && (BYTE_ORDER == BIG_ENDIAN))
- u_int v_maj:4, /* MnVer */
- v_min:4; /* MjVer */
+ u_int v_maj:4, /* MnVer */
+ v_min:4; /* MjVer */
#else
- u_int v_min:4, /* MnVer */
- v_maj:4; /* MjVer */
+ u_int v_min:4, /* MnVer */
+ v_maj:4; /* MjVer */
#endif
- u_int8_t etype; /* Exchange Type */
- u_int8_t flags; /* Flags */
- msgid_t msgid;
- u_int32_t len; /* Length */
+ u_int8_t etype; /* Exchange Type */
+ u_int8_t flags; /* Flags */
+ msgid_t msgid;
+ u_int32_t len; /* Length */
};
/* Next Payload Type */
diff --git a/print-bgp.c b/print-bgp.c
index d1a938be..37ea9cb0 100644
--- a/print-bgp.c
+++ b/print-bgp.c
@@ -74,6 +74,12 @@ struct bgp_open {
/* options should follow */
};
+struct bgp_opt {
+ u_int8_t bgpopt_type;
+ u_int8_t bgpopt_len;
+ /* variable length */
+};
+
struct bgp_notification {
u_int8_t bgpn_marker[16];
u_int16_t bgpn_len;
@@ -104,6 +110,12 @@ struct bgp_attr {
#define BGPTYPE_LOCAL_PREF 5
#define BGPTYPE_ATOMIC_AGGREGATE 6
#define BGPTYPE_AGGREGATOR 7
+#define BGPTYPE_COMMUNITIES 8 /* RFC1997 */
+#define BGPTYPE_ORIGINATOR_ID 9 /* RFC1998 */
+#define BGPTYPE_CLUSTER_LIST 10 /* RFC1998 */
+#define BGPTYPE_DPA 11 /* work in progress */
+#define BGPTYPE_ADVERTISERS 12 /* RFC1863 */
+#define BGPTYPE_RCID_PATH 13 /* RFC1863 */
#define BGPTYPE_MP_REACH_NLRI 14 /* RFC2283 */
#define BGPTYPE_MP_UNREACH_NLRI 15 /* RFC2283 */
@@ -113,6 +125,12 @@ static const char *bgptype[] = {
};
#define bgp_type(x) num_or_str(bgptype, sizeof(bgptype)/sizeof(bgptype[0]), (x))
+static const char *bgpopt_type[] = {
+ NULL, "Authentication Information",
+};
+#define bgp_opttype(x) \
+ num_or_str(bgpopt_type, sizeof(bgpopt_type)/sizeof(bgpopt_type[0]), (x))
+
static const char *bgpnotify_major[] = {
NULL, "Message Header Error",
"OPEN Message Error", "UPDATE Message Error",
@@ -163,8 +181,8 @@ static const char *bgpattr_origin[] = {
static const char *bgpattr_type[] = {
NULL, "ORIGIN", "AS_PATH", "NEXT_HOP",
"MULTI_EXIT_DISC", "LOCAL_PREF", "ATOMIC_AGGREGATE", "AGGREGATOR",
- NULL, NULL, NULL, NULL,
- NULL, NULL, "MP_REACH_NLRI", "MP_UNREACH_NLRI",
+ "COMMUNITIES", "ORIGINATOR_ID", "CLUSTER_LIST", "DPA",
+ "ADVERTISERS", "RCID_PATH", "MP_REACH_NLRI", "MP_UNREACH_NLRI",
};
#define bgp_attr_type(x) \
num_or_str(bgpattr_type, \
@@ -178,6 +196,11 @@ static const char *bgpattr_nlri_safi[] = {
num_or_str(bgpattr_nlri_safi, \
sizeof(bgpattr_nlri_safi)/sizeof(bgpattr_nlri_safi[0]), (x))
+/* well-known community */
+#define BGP_COMMUNITY_NO_EXPORT 0xffffff01
+#define BGP_COMMUNITY_NO_ADVERT 0xffffff02
+#define BGP_COMMUNITY_NO_EXPORT_SUBCONFED 0xffffff03
+
/* RFC1700 address family numbers */
#define AFNUM_INET 1
#define AFNUM_INET6 2
@@ -311,8 +334,23 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *dat, int len)
printf(" invalid len");
break;
}
- for (i = 0; i < len; i += 2)
- printf(" %u", ntohs(*(u_int16_t *)&p[i]));
+ while (p < dat + len) {
+ /*
+ * under RFC1965, p[0] means:
+ * 1: AS_SET 2: AS_SEQUENCE
+ * 3: AS_CONFED_SET 4: AS_CONFED_SEQUENCE
+ */
+ printf(" ");
+ if (p[0] == 3 || p[0] == 4)
+ printf("confed");
+ printf("%s", (p[0] & 1) ? "{" : "");
+ for (i = 0; i < p[1]; i += 2) {
+ printf("%s%u", i == 0 ? "" : " ",
+ ntohs(*(u_int16_t *)&p[2 + i]));
+ }
+ printf("%s", (p[0] & 1) ? "}" : "");
+ p += 2 + p[1] * 2;
+ }
break;
case BGPTYPE_NEXT_HOP:
if (len != 4)
@@ -339,6 +377,31 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *dat, int len)
printf(" AS #%u, origin %s", ntohs(*(u_int16_t *)p),
getname(p + 2));
break;
+ case BGPTYPE_COMMUNITIES:
+ if (len % 4) {
+ printf(" invalid len");
+ break;
+ }
+ for (i = 0; i < len; i++) {
+ u_int32_t comm;
+ comm = (u_int32_t)ntohl(*(u_int32_t *)&p[i]);
+ switch (comm) {
+ case BGP_COMMUNITY_NO_EXPORT:
+ printf(" NO_EXPORT");
+ break;
+ case BGP_COMMUNITY_NO_ADVERT:
+ printf(" NO_ADVERTISE");
+ break;
+ case BGP_COMMUNITY_NO_EXPORT_SUBCONFED:
+ printf(" NO_EXPORT_SUBCONFED");
+ break;
+ default:
+ printf(" (AS #%d value 0x%04x)",
+ (comm >> 16) & 0xffff, comm & 0xfffff);
+ break;
+ }
+ }
+ break;
case BGPTYPE_MP_REACH_NLRI:
af = ntohs(*(u_int16_t *)p);
safi = p[2];
@@ -440,7 +503,10 @@ static void
bgp_open_print(const u_char *dat, int length)
{
struct bgp_open bgpo;
+ struct bgp_opt bgpopt;
int hlen;
+ const u_char *opt;
+ int i;
memcpy(&bgpo, dat, sizeof(bgpo));
hlen = ntohs(bgpo.bgpo_len);
@@ -450,6 +516,22 @@ bgp_open_print(const u_char *dat, int length)
printf(" Holdtime %u,", ntohs(bgpo.bgpo_holdtime));
printf(" ID %s,", getname((char *)&bgpo.bgpo_id));
printf(" Option length %u", bgpo.bgpo_optlen);
+
+ /* ugly! */
+ opt = &((struct bgp_open *)dat)->bgpo_optlen;
+ opt++;
+
+ for (i = 0; i < bgpo.bgpo_optlen; i++) {
+ memcpy(&bgpopt, &opt[i], sizeof(bgpopt));
+ if (i + 2 + bgpopt.bgpopt_len > bgpo.bgpo_optlen) {
+ printf(" [|opt %d %d]", bgpopt.bgpopt_len, bgpopt.bgpopt_type);
+ break;
+ }
+
+ printf(" (option %s, len=%d)", bgp_opttype(bgpopt.bgpopt_type),
+ bgpopt.bgpopt_len);
+ i += sizeof(bgpopt) + bgpopt.bgpopt_len;
+ }
}
static void
@@ -505,14 +587,6 @@ bgp_update_print(const u_char *dat, int length)
bgp_attr_print(&bgpa, &p[i + aoff], alen);
newline = 1;
-#if 0
- default:
- proto_tree_add_text(subtree2, p - pd + i + aoff, alen,
- "Unknown (%d bytes)", alen);
- break;
- }
-#endif
-
/* ( */
printf(")");
@@ -524,6 +598,22 @@ bgp_update_print(const u_char *dat, int length)
}
p += 2 + len;
+ if (len && dat + length > p)
+ printf("\n\t\t");
+ if (dat + length > p) {
+ printf("(NLRI:"); /* ) */
+ while (dat + length > p) {
+ char buf[256];
+ i = decode_prefix4(p, buf, sizeof(buf));
+ printf(" %s", buf);
+ if (i < 0)
+ break;
+ p += i;
+ }
+
+ /* ( */
+ printf(")");
+ }
}
static void
diff --git a/print-dhcp6.c b/print-dhcp6.c
index 0885771c..1e3be6be 100644
--- a/print-dhcp6.c
+++ b/print-dhcp6.c
@@ -29,7 +29,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-dhcp6.c,v 1.2 1999-11-21 09:36:50 fenner Exp $";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-dhcp6.c,v 1.3 1999-12-22 06:27:20 itojun Exp $";
#endif
#ifdef HAVE_CONFIG_H
@@ -54,6 +54,7 @@ struct rtentry;
#endif
#include <stdio.h>
#include <string.h>
+#include <arpa/inet.h>
#include "interface.h"
#include "addrtoname.h"
@@ -62,8 +63,8 @@ struct rtentry;
#if 0
static void dhcp6opttab_init __P((void));
-#endif
static struct dhcp6_opt *dhcp6opttab_byname __P((char *));
+#endif
static struct dhcp6_opt *dhcp6opttab_bycode __P((u_int));
static char tstr[] = " [|dhcp6]";
@@ -122,6 +123,7 @@ dhcp6opttab_init()
}
#endif
+#if 0
static struct dhcp6_opt *
dhcp6opttab_byname(name)
char *name;
@@ -133,6 +135,7 @@ dhcp6opttab_byname(name)
return p;
return NULL;
}
+#endif
static struct dhcp6_opt *
dhcp6opttab_bycode(code)
@@ -151,7 +154,6 @@ dhcp6ext_print(u_char *cp, u_char *ep)
{
u_int16_t code, len;
struct dhcp6_opt *p;
- char *q;
char buf[BUFSIZ];
int i;
diff --git a/print-frag6.c b/print-frag6.c
index ddfc3b49..a8bc0b20 100644
--- a/print-frag6.c
+++ b/print-frag6.c
@@ -74,16 +74,16 @@ frag6_print(register const u_char *bp, register const u_char *bp2)
TCHECK(dp->ip6f_offlg);
if (vflag) {
- printf("frag (0x%08x:%d|%d)",
- ntohl(dp->ip6f_ident),
+ printf("frag (0x%08x:%d|%ld)",
+ (u_int32_t)ntohl(dp->ip6f_ident),
ntohs(dp->ip6f_offlg & IP6F_OFF_MASK),
sizeof(struct ip6_hdr) + ntohs(ip6->ip6_plen) -
- (bp - bp2) - sizeof(struct ip6_frag));
+ (long)(bp - bp2) - sizeof(struct ip6_frag));
} else {
- printf("frag (%d|%d)",
+ printf("frag (%d|%ld)",
ntohs(dp->ip6f_offlg & IP6F_OFF_MASK),
sizeof(struct ip6_hdr) + ntohs(ip6->ip6_plen) -
- (bp - bp2) - sizeof(struct ip6_frag));
+ (long)(bp - bp2) - sizeof(struct ip6_frag));
}
#if 0
diff --git a/print-ip.c b/print-ip.c
index 1eddff59..2ae036af 100644
--- a/print-ip.c
+++ b/print-ip.c
@@ -21,7 +21,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.78 1999-12-15 00:34:10 fenner Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.79 1999-12-22 06:27:21 itojun Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -119,8 +119,8 @@ static void print_mtrace(register const u_char *bp, register u_int len)
{
register struct tr_query *tr = (struct tr_query *)(bp + 8);
- printf("mtrace %ld: %s to %s reply-to %s",
- TR_GETQID(ntohl(tr->tr_rttlqid)),
+ printf("mtrace %lu: %s to %s reply-to %s",
+ (u_long)TR_GETQID(ntohl(tr->tr_rttlqid)),
ipaddr_string(&tr->tr_src), ipaddr_string(&tr->tr_dst),
ipaddr_string(&tr->tr_raddr));
if (IN_CLASSD(ntohl(tr->tr_raddr)))
@@ -131,8 +131,8 @@ static void print_mresp(register const u_char *bp, register u_int len)
{
register struct tr_query *tr = (struct tr_query *)(bp + 8);
- printf("mresp %ld: %s to %s reply-to %s",
- TR_GETQID(ntohl(tr->tr_rttlqid)),
+ printf("mresp %lu: %s to %s reply-to %s",
+ (u_long)TR_GETQID(ntohl(tr->tr_rttlqid)),
ipaddr_string(&tr->tr_src), ipaddr_string(&tr->tr_dst),
ipaddr_string(&tr->tr_raddr));
if (IN_CLASSD(ntohl(tr->tr_raddr)))
diff --git a/print-l2tp.c b/print-l2tp.c
index 0a28d661..fa6c4365 100644
--- a/print-l2tp.c
+++ b/print-l2tp.c
@@ -23,7 +23,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-l2tp.c,v 1.5 1999-12-15 06:55:43 fenner Exp $";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-l2tp.c,v 1.6 1999-12-22 06:27:21 itojun Exp $";
#endif
#ifdef HAVE_CONFIG_H
@@ -156,6 +156,7 @@ static struct l2tp_avp_vec l2tp_avp[] = {
#define L2TP_MAX_AVP_INDEX 40
};
+#if 0
static char *l2tp_result_code_StopCCN[] = {
"Reserved",
"General request to clear control connection",
@@ -167,7 +168,9 @@ static char *l2tp_result_code_StopCCN[] = {
"Finite State Machine error"
#define L2TP_MAX_RESULT_CODE_STOPCC_INDEX 8
};
+#endif
+#if 0
static char *l2tp_result_code_CDN[] = {
"Reserved",
"Call disconnected due to loss of carrier",
@@ -185,7 +188,9 @@ static char *l2tp_result_code_CDN[] = {
"Call was connected but no appropriate framing was detected"
#define L2TP_MAX_RESULT_CODE_CDN_INDEX 12
};
+#endif
+#if 0
static char *l2tp_error_code_general[] = {
"No general error",
"No control connection exists yet for this LAC-LNS pair",
@@ -198,6 +203,7 @@ static char *l2tp_error_code_general[] = {
"Try another"
#define L2TP_MAX_ERROR_CODE_GENERAL_INDEX 8
};
+#endif
/******************************/
/* generic print out routines */
@@ -223,13 +229,13 @@ print_octets(const u_char *dat, u_int length)
static void
print_short(const u_short *dat)
{
- printf("%d", ntohs(*dat));
+ printf("%u", ntohs(*dat));
}
static void
print_int(const u_int *dat)
{
- printf("%d", ntohl(*dat));
+ printf("%lu", (u_long)ntohl(*dat));
}
/**********************************/
@@ -252,11 +258,11 @@ l2tp_result_code_print(const u_char *dat, u_int length)
u_short *ptr = (u_short *)dat;
if (length == 2) { /* result code */
- printf("%d", ntohs(*ptr));
+ printf("%u", ntohs(*ptr));
} else if (length == 4) { /* result & error code */
- printf("%d/%d", ntohs(*ptr), ntohs(*(ptr+1)));
+ printf("%u/%u", ntohs(*ptr), ntohs(*(ptr+1)));
} else if (length > 4) { /* result & error code & msg */
- printf("%d/%d ", ntohs(*ptr), ntohs(*(ptr+1)));
+ printf("%u/%u ", ntohs(*ptr), ntohs(*(ptr+1)));
print_string((u_char *)(ptr+2), length - 4);
}
}
@@ -340,7 +346,7 @@ static void
l2tp_q931_cc_print(const u_char *dat, u_int length)
{
print_short((u_short *)dat);
- printf(",%02x", dat+2);
+ printf(", %02x", dat[2]);
if (length > 3) {
printf(" ");
print_string(dat+3, length-3);
@@ -503,7 +509,7 @@ l2tp_proxy_auth_id_print(const u_char *dat, u_int length)
{
u_short *ptr = (u_short *)dat;
- printf("%d", ntohs(*ptr) & L2TP_PROXY_AUTH_ID_MASK);
+ printf("%u", ntohs(*ptr) & L2TP_PROXY_AUTH_ID_MASK);
}
static void
@@ -602,7 +608,7 @@ l2tp_avp_print(const u_char *dat, u_int length)
}
printf(")");
} else {
- printf(" invalid AVP %d", ntohs(*ptr));
+ printf(" invalid AVP %u", ntohs(*ptr));
}
l2tp_avp_print(dat + len, length - len);
@@ -676,13 +682,13 @@ l2tp_print(const u_char *dat, u_int length)
l2tp_len = 0;
}
- printf("(%d/", ntohs(*ptr++)); /* Tunnel ID */
- printf("%d)", ntohs(*ptr++)); /* Session ID */
+ printf("(%u/", ntohs(*ptr++)); /* Tunnel ID */
+ printf("%u)", ntohs(*ptr++)); /* Session ID */
cnt += 4;
if (flag_s) {
- printf("Ns=%d,", ntohs(*ptr++));
- printf("Nr=%d", ntohs(*ptr++));
+ printf("Ns=%u,", ntohs(*ptr++));
+ printf("Nr=%u", ntohs(*ptr++));
cnt += 4;
}
diff --git a/print-llc.c b/print-llc.c
index 4df0f9f9..59a76e58 100644
--- a/print-llc.c
+++ b/print-llc.c
@@ -24,7 +24,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-llc.c,v 1.26 1999-11-21 15:57:52 assar Exp $";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-llc.c,v 1.27 1999-12-22 06:27:21 itojun Exp $";
#endif
#ifdef HAVE_CONFIG_H
@@ -83,11 +83,14 @@ llc_print(const u_char *p, u_int length, u_int caplen,
ipx_print(p, length);
return (1);
}
- else if (p[0] == 0xf0 && p[1] == 0xf0) {
- /* we don't actually have a full netbeui parser yet, but the
- smb parser can handle many smb-in-netbeui packets, which
- is very useful, so we call that */
- netbeui_print(p+2,p+min(caplen,length));
+ if (llc.ssap == 0xf0 && llc.dsap == 0xf0) {
+ /*
+ * we don't actually have a full netbeui parser yet, but the
+ * smb parser can handle many smb-in-netbeui packets, which
+ * is very useful, so we call that
+ */
+ netbeui_print(p + 2, p + min(caplen, length));
+ return (1);
}
if (llc.ssap == LLCSAP_ISONS && llc.dsap == LLCSAP_ISONS
&& llc.llcui == LLC_UI) {
@@ -98,9 +101,9 @@ llc_print(const u_char *p, u_int length, u_int caplen,
if (llc.ssap == LLCSAP_SNAP && llc.dsap == LLCSAP_SNAP
&& llc.llcui == LLC_UI) {
if (caplen < sizeof(llc)) {
- (void)printf("[|llc-snap]");
- default_print((u_char *)p, caplen);
- return (0);
+ (void)printf("[|llc-snap]");
+ default_print((u_char *)p, caplen);
+ return (0);
}
if (vflag)
(void)printf("snap %s ", protoid_string(llc.llcpi));
@@ -142,11 +145,11 @@ llc_print(const u_char *p, u_int length, u_int caplen,
char f;
m = tok2str(cmd2str, "%02x", LLC_U_CMD(llc.llcu));
switch ((llc.ssap & LLC_GSAP) | (llc.llcu & LLC_U_POLL)) {
- case 0: f = 'C'; break;
- case LLC_GSAP: f = 'R'; break;
- case LLC_U_POLL: f = 'P'; break;
- case LLC_GSAP|LLC_U_POLL: f = 'F'; break;
- default: f = '?'; break;
+ case 0: f = 'C'; break;
+ case LLC_GSAP: f = 'R'; break;
+ case LLC_U_POLL: f = 'P'; break;
+ case LLC_GSAP|LLC_U_POLL: f = 'F'; break;
+ default: f = '?'; break;
}
printf("%s/%c", m, f);
@@ -156,29 +159,31 @@ llc_print(const u_char *p, u_int length, u_int caplen,
caplen -= 3;
if ((llc.llcu & ~LLC_U_POLL) == LLC_XID) {
- if (*p == LLC_XID_FI) {
- printf(": %02x %02x", p[1], p[2]);
- p += 3;
- length -= 3;
- caplen -= 3;
- }
+ if (*p == LLC_XID_FI) {
+ printf(": %02x %02x", p[1], p[2]);
+ p += 3;
+ length -= 3;
+ caplen -= 3;
+ }
}
if (!strcmp(m,"ui") && f=='C') {
- /* we don't have a proper ipx decoder yet, but there
- is a partial one in the smb code */
- ipx_netbios_print(p,p+min(caplen,length));
+ /*
+ * we don't have a proper ipx decoder yet, but there
+ * is a partial one in the smb code
+ */
+ ipx_netbios_print(p,p+min(caplen,length));
}
} else {
char f;
llc.llcis = ntohs(llc.llcis);
switch ((llc.ssap & LLC_GSAP) | (llc.llcu & LLC_U_POLL)) {
- case 0: f = 'C'; break;
- case LLC_GSAP: f = 'R'; break;
- case LLC_U_POLL: f = 'P'; break;
- case LLC_GSAP|LLC_U_POLL: f = 'F'; break;
- default: f = '?'; break;
+ case 0: f = 'C'; break;
+ case LLC_GSAP: f = 'R'; break;
+ case LLC_U_POLL: f = 'P'; break;
+ case LLC_GSAP|LLC_U_POLL: f = 'F'; break;
+ default: f = '?'; break;
}
if ((llc.llcu & LLC_S_FMT) == LLC_S_FMT) {
diff --git a/print-null.c b/print-null.c
index 26a343ac..7089eb9d 100644
--- a/print-null.c
+++ b/print-null.c
@@ -21,7 +21,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-null.c,v 1.29 1999-11-21 12:38:24 itojun Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-null.c,v 1.30 1999-12-22 06:27:21 itojun Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -128,15 +128,15 @@ null_if_print(u_char *user, const struct pcap_pkthdr *h, const u_char *p)
null_print(p, ip, length);
switch (ip->ip_v) {
- case 4 :
- ip_print((const void *)ip, length);
+ case 4:
+ ip_print((const u_char *)ip, length);
break;
#ifdef INET6
case 6:
- ip6_print((const void *)ip, length);
+ ip6_print((const u_char *)ip, length);
break;
#endif /* INET6 */
- default :
+ default:
printf("ip v%d", ip->ip_v);
break;
}
diff --git a/print-ppp.c b/print-ppp.c
index 505cb408..1d242efc 100644
--- a/print-ppp.c
+++ b/print-ppp.c
@@ -21,7 +21,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-ppp.c,v 1.32 1999-12-15 07:52:15 fenner Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-ppp.c,v 1.33 1999-12-22 06:27:22 itojun Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -481,7 +481,7 @@ ppp_if_print(u_char *user, const struct pcap_pkthdr *h,
ip = (struct ip *)(p + PPP_HDRLEN);
switch (proto) {
case PPP_LCP:
- handle_lcp (p, length);
+ handle_lcp(p, length);
break;
case PPP_CHAP:
handle_chap(p, length);
@@ -512,36 +512,36 @@ out:
}
struct tok ppptype2str[] = {
- { PPP_IP, "IP" },
- { PPP_OSI, "OSI" },
- { PPP_NS, "NS" },
- { PPP_DECNET, "DECNET" },
- { PPP_APPLE, "APPLE" },
- { PPP_IPX, "IPX" },
- { PPP_VJC, "VJC" },
- { PPP_VJNC, "VJNC" },
- { PPP_BRPDU, "BRPDU" },
- { PPP_STII, "STII" },
- { PPP_VINES, "VINES" },
-
- { PPP_HELLO, "HELLO" },
- { PPP_LUXCOM, "LUXCOM" },
- { PPP_SNS, "SNS" },
- { PPP_IPCP, "IPCP" },
- { PPP_OSICP, "OSICP" },
- { PPP_NSCP, "NSCP" },
- { PPP_DECNETCP, "DECNETCP" },
- { PPP_APPLECP, "APPLECP" },
- { PPP_IPXCP, "IPXCP" },
- { PPP_STIICP, "STIICP" },
- { PPP_VINESCP, "VINESCP" },
-
- { PPP_LCP, "LCP" },
- { PPP_PAP, "PAP" },
- { PPP_LQM, "LQM" },
- { PPP_CHAP, "CHAP" },
- { 0, NULL }
- };
+ { PPP_IP, "IP" },
+ { PPP_OSI, "OSI" },
+ { PPP_NS, "NS" },
+ { PPP_DECNET, "DECNET" },
+ { PPP_APPLE, "APPLE" },
+ { PPP_IPX, "IPX" },
+ { PPP_VJC, "VJC" },
+ { PPP_VJNC, "VJNC" },
+ { PPP_BRPDU, "BRPDU" },
+ { PPP_STII, "STII" },
+ { PPP_VINES, "VINES" },
+
+ { PPP_HELLO, "HELLO" },
+ { PPP_LUXCOM, "LUXCOM" },
+ { PPP_SNS, "SNS" },
+ { PPP_IPCP, "IPCP" },
+ { PPP_OSICP, "OSICP" },
+ { PPP_NSCP, "NSCP" },
+ { PPP_DECNETCP, "DECNETCP" },
+ { PPP_APPLECP, "APPLECP" },
+ { PPP_IPXCP, "IPXCP" },
+ { PPP_STIICP, "STIICP" },
+ { PPP_VINESCP, "VINESCP" },
+
+ { PPP_LCP, "LCP" },
+ { PPP_PAP, "PAP" },
+ { PPP_LQM, "LQM" },
+ { PPP_CHAP, "CHAP" },
+ { 0, NULL }
+};
#define PPP_BSDI_HDRLEN 24
diff --git a/print-rt6.c b/print-rt6.c
index b8e16d59..a0750e0b 100644
--- a/print-rt6.c
+++ b/print-rt6.c
@@ -57,20 +57,15 @@ static const char rcsid[] =
int
rt6_print(register const u_char *bp, register const u_char *bp2)
{
- register const struct ip6_rthdr0 *dp;
+ register const struct ip6_rthdr *dp;
+ register const struct ip6_rthdr0 *dp0;
register const struct ip6_hdr *ip;
register const u_char *ep;
- u_long bitmap = 0x0800;
- u_long slmap;
int i, len;
-#if 0
-#define TCHECK(var) if ((u_char *)&(var) >= ep - sizeof(var)) goto trunc
-#endif
-
- dp = (struct ip6_rthdr0 *)bp;
+ dp = (struct ip6_rthdr *)bp;
ip = (struct ip6_hdr *)bp2;
- len = dp->ip6r0_len;
+ len = dp->ip6r_len;
/* 'ep' points to the end of avaible data. */
ep = snapend;
@@ -78,43 +73,48 @@ rt6_print(register const u_char *bp, register const u_char *bp2)
printf("%s > %s: ",
ip6addr_string(&ip->ip6_src),
ip6addr_string(&ip->ip6_dst));
-
- TCHECK(dp->ip6r0_slmap[2]);
- printf("srcrt (len=%d, ", dp->ip6r0_len);
- printf("type=%d, ", dp->ip6r0_type);
- printf("segleft=%d, ", dp->ip6r0_segleft);
- if (dp->ip6r0_type != 0)
- goto trunc;
- slmap = (dp->ip6r0_slmap[0] << 16)
- | (dp->ip6r0_slmap[1] << 8)
- | (dp->ip6r0_slmap[2]);
- printf("bitmap=");
- for (i = 24; i > 0; i--) {
- if (slmap & bitmap)
- printf("S");
- else
- printf("L");
- bitmap >>= 1;
- }
- if (len % 2 == 1)
- goto trunc;
- len >>= 1;
- printf(", ");
- for (i = 0; i < len; i++) {
- if ((((u_char *)&(dp->ip6r0_reserved)) + sizeof(u_long)
- + (i<<4)) > ep) goto trunc;
- printf(" [%d]%s", i,
- ip6addr_string(((u_char *)&(dp->ip6r0_reserved)) +
- sizeof(u_long) + (i<<4)));
- if (i != len - 1)
- printf(", ");
+
+ TCHECK(dp->ip6r_segleft);
+
+ printf("srcrt (len=%d, ", dp->ip6r_len);
+ printf("type=%d, ", dp->ip6r_type);
+ printf("segleft=%d, ", dp->ip6r_segleft);
+
+ switch(dp->ip6r_type) {
+ case IPV6_RTHDR_TYPE_0:
+ dp0 = (struct ip6_rthdr0 *)dp;
+
+ TCHECK(dp0->ip6r0_reserved);
+ if (dp0->ip6r0_reserved || vflag) {
+ printf("rsv=0x%0x, ",
+ (u_int32_t)ntohl(dp0->ip6r0_reserved));
+ }
+
+ if (len % 2 == 1)
+ goto trunc;
+ len >>= 1;
+ for (i = 0; i < len; i++) {
+ struct in6_addr *addr;
+
+ addr = ((struct in6_addr *)(dp0 + 1)) + i;
+ if ((u_char *)addr > ep - sizeof(*addr))
+ goto trunc;
+
+ printf("[%d]%s", i, ip6addr_string((u_char *)addr));
+ if (i != len - 1)
+ printf(", ");
+ }
+ printf(")");
+ return((dp0->ip6r0_len + 1) << 3);
+ break;
+ default:
+ goto trunc;
+ break;
}
- printf(")");
- return((dp->ip6r0_len + 1) << 3);
+
trunc:
fputs("[|srcrt]", stdout);
- return 65535;
-#undef TCHECK
+ return 65535; /* XXX */
}
#endif /* INET6 */
diff --git a/print-smb.c b/print-smb.c
index 4f8af9d0..9810cda9 100644
--- a/print-smb.c
+++ b/print-smb.c
@@ -18,7 +18,7 @@
static int request=0;
-uchar *startbuf=NULL;
+const uchar *startbuf=NULL;
struct smbdescript
{
@@ -179,9 +179,9 @@ static void print_trans2(uchar *words,uchar *dat,uchar *buf,uchar *maxbuf)
}
-static void print_browse(uchar *param,int paramlen,uchar *data,int datalen)
+static void print_browse(uchar *param,int paramlen,const uchar *data,int datalen)
{
- uchar *maxbuf = data + datalen;
+ const uchar *maxbuf = data + datalen;
int command = CVAL(data,0);
fdata(param,"BROWSE PACKET\n|Param ",param+paramlen);
@@ -605,10 +605,10 @@ NULL,NULL}},
/*******************************************************************
print a SMB message
********************************************************************/
-static void print_smb(uchar *buf,uchar *maxbuf)
+static void print_smb(const uchar *buf, const uchar *maxbuf)
{
int command;
- uchar *words, *data;
+ const uchar *words, *data;
struct smbfns *fn;
char *fmt_smbheader =
"[P4]SMB Command = [B]\nError class = [BP1]\nError code = [d]\nFlags1 = [B]\nFlags2 = [B][P13]\nTree ID = [d]\nProc ID = [d]\nUID = [d]\nMID = [d]\nWord Count = [b]\n";
@@ -673,7 +673,7 @@ static void print_smb(uchar *buf,uchar *maxbuf)
printf("smb_bcc=%d\n",bcc);
if (bcc>0) {
printf("smb_buf[]=\n");
- print_data(data+2,MIN(bcc,PTR_DIFF(maxbuf,data+2)));
+ print_data(data + 2, MIN(bcc,PTR_DIFF(maxbuf,data+2)));
}
}
}
@@ -698,11 +698,12 @@ static void print_smb(uchar *buf,uchar *maxbuf)
/*
print a NBT packet received across tcp on port 139
*/
-void nbt_tcp_print(uchar *data,int length)
+void nbt_tcp_print(const uchar *data,int length)
{
- uchar *maxbuf = data + length;
+ const uchar *maxbuf = data + length;
int flags = CVAL(data,0);
int nbt_len = RSVAL(data,2);
+
startbuf = data;
if (maxbuf <= data) return;
@@ -715,7 +716,7 @@ void nbt_tcp_print(uchar *data,int length)
data = fdata(data,"NBT Session Packet\nFlags=[rw]\nLength=[rd]\n",data+4);
if (memcmp(data,"\377SMB",4)==0) {
if (nbt_len>PTR_DIFF(maxbuf,data))
- printf("WARNING: Short packet. Try increasing the snap length (%d)\n",
+ printf("WARNING: Short packet. Try increasing the snap length (%ld)\n",
PTR_DIFF(maxbuf,data));
print_smb(data,maxbuf>data+nbt_len?data+nbt_len:maxbuf);
} else {
@@ -771,9 +772,9 @@ void nbt_tcp_print(uchar *data,int length)
/*
print a NBT packet received across udp on port 137
*/
-void nbt_udp137_print(uchar *data,int length)
+void nbt_udp137_print(const uchar *data, int length)
{
- uchar *maxbuf = data + length;
+ const uchar *maxbuf = data + length;
int name_trn_id = RSVAL(data,0);
int response = (CVAL(data,2)>>7);
int opcode = (CVAL(data,2) >> 3) & 0xF;
@@ -785,7 +786,7 @@ void nbt_udp137_print(uchar *data,int length)
int arcount = RSVAL(data,10);
char des[1024];
char *opcodestr="OPUNKNOWN";
- char *p;
+ const char *p;
startbuf = data;
@@ -897,9 +898,9 @@ void nbt_udp137_print(uchar *data,int length)
/*
print a NBT packet received across udp on port 138
*/
-void nbt_udp138_print(uchar *data,int length)
+void nbt_udp138_print(const uchar *data, int length)
{
- uchar *maxbuf = data + length;
+ const uchar *maxbuf = data + length;
startbuf = data;
if (maxbuf <= data) return;
@@ -916,11 +917,11 @@ void nbt_udp138_print(uchar *data,int length)
/*
print netbeui frames
*/
-void netbeui_print(uchar *data,uchar *maxbuf)
+void netbeui_print(const uchar *data, const uchar *maxbuf)
{
int len = SVAL(data,1);
int command = CVAL(data,5);
- uchar *data2 = data + 1 + len;
+ const uchar *data2 = data + 1 + len;
startbuf = data;
@@ -984,7 +985,7 @@ void netbeui_print(uchar *data,uchar *maxbuf)
/*
print IPX-Netbios frames
*/
-void ipx_netbios_print(uchar *data,uchar *maxbuf)
+void ipx_netbios_print(const uchar *data, const uchar *maxbuf)
{
/* this is a hack till I work out how to parse the rest of the IPX stuff */
int i;
diff --git a/print-snmp.c b/print-snmp.c
index a546d5d7..b5835dc1 100644
--- a/print-snmp.c
+++ b/print-snmp.c
@@ -45,7 +45,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-snmp.c,v 1.38 1999-12-13 18:06:14 mcr Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-snmp.c,v 1.39 1999-12-22 06:27:22 itojun Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -721,11 +721,19 @@ asn1_print(struct be *elem)
d = elem->data.uns64.high * 4294967296.0; /* 2^32 */
if (elem->data.uns64.high <= 0x1fffff) {
d += elem->data.uns64.low;
+#if 0 /*is looks illegal, but what is the intention???*/
printf("%.f", d);
+#else
+ printf("%f", d);
+#endif
break;
}
d += (elem->data.uns64.low & 0xfffff000);
+#if 0 /*is looks illegal, but what is the intention???*/
sprintf(first, "%.f", d);
+#else
+ sprintf(first, "%f", d);
+#endif
sprintf(last, "%5.5d", elem->data.uns64.low & 0xfff);
for (carry = 0, cpf = first+strlen(first)-1, cpl = last+4;
cpl >= last;
diff --git a/print-tcp.c b/print-tcp.c
index 895be3bf..1561cdc3 100644
--- a/print-tcp.c
+++ b/print-tcp.c
@@ -21,7 +21,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-tcp.c,v 1.61 1999-11-22 04:27:10 fenner Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-tcp.c,v 1.62 1999-12-22 06:27:23 itojun Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -108,6 +108,9 @@ struct tcp_seq_hash {
static struct tcp_seq_hash tcp_seq_hash[TSEQ_HASHSIZE];
+#ifndef BGP_PORT
+#define BGP_PORT 179
+#endif
#define NETBIOS_SSN_PORT 139
void
@@ -184,10 +187,11 @@ tcp_print(register const u_char *bp, register u_int length,
return;
}
#ifdef TH_ECN
- if ((flags = tp->th_flags) & (TH_SYN|TH_FIN|TH_RST|TH_PUSH|TH_ECN)) {
+ if ((flags = tp->th_flags) & (TH_SYN|TH_FIN|TH_RST|TH_PUSH|TH_ECN))
#else
- if ((flags = tp->th_flags) & (TH_SYN|TH_FIN|TH_RST|TH_PUSH)) {
+ if ((flags = tp->th_flags) & (TH_SYN|TH_FIN|TH_RST|TH_PUSH))
#endif
+ {
if (flags & TH_SYN)
putchar('S');
if (flags & TH_FIN)
@@ -487,7 +491,7 @@ tcp_print(register const u_char *bp, register u_int length,
* Decode payload if necessary.
*/
bp += (tp->th_off * 4);
- if (sport == 179 || dport == 179)
+ if (sport == BGP_PORT || dport == BGP_PORT)
bgp_print(bp, length);
if (sport == NETBIOS_SSN_PORT || dport == NETBIOS_SSN_PORT)
nbt_tcp_print(bp, length);
diff --git a/print-udp.c b/print-udp.c
index 7b4e535e..13e571c5 100644
--- a/print-udp.c
+++ b/print-udp.c
@@ -21,7 +21,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.69 1999-11-23 08:27:41 fenner Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.70 1999-12-22 06:27:23 itojun Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -514,10 +514,10 @@ udp_print(register const u_char *bp, u_int length, register const u_char *bp2)
else if (ISPORT(L2TP_PORT))
l2tp_print((const u_char *)(up + 1), length);
else if (ISPORT(NETBIOS_NS_PORT)) {
- nbt_udp137_print((const u_char *)(up + 1), length);
+ nbt_udp137_print((const u_char *)(up + 1), length);
}
else if (ISPORT(NETBIOS_DGRAM_PORT)) {
- nbt_udp138_print((const u_char *)(up + 1), length);
+ nbt_udp138_print((const u_char *)(up + 1), length);
}
else if (dport == 3456)
vat_print((const void *)(up + 1), length, up);
diff --git a/smb.h b/smb.h
index ae47037c..0c5461ac 100644
--- a/smb.h
+++ b/smb.h
@@ -149,4 +149,4 @@
#define PTR_DIFF(p1,p2) ((unsigned long)(((char *)(p1)) - (char *)(p2)))
/* some protos */
-uchar *fdata(uchar *buf,char *fmt,uchar *maxbuf);
+const uchar *fdata(const uchar *buf, const char *fmt, const uchar *maxbuf);
diff --git a/smbutil.c b/smbutil.c
index 3b72d86f..bcea660e 100644
--- a/smbutil.c
+++ b/smbutil.c
@@ -50,7 +50,7 @@ static void interpret_dos_date(uint32 date,int *year,int *month,int *day,int *ho
/*******************************************************************
create a unix date from a dos date
********************************************************************/
-static time_t make_unix_date(void *date_ptr)
+static time_t make_unix_date(const void *date_ptr)
{
uint32 dos_date=0;
struct tm t;
@@ -71,7 +71,7 @@ static time_t make_unix_date(void *date_ptr)
/*******************************************************************
create a unix date from a dos date
********************************************************************/
-static time_t make_unix_date2(void *date_ptr)
+static time_t make_unix_date2(const void *date_ptr)
{
uint32 x,x2;
@@ -86,7 +86,7 @@ static time_t make_unix_date2(void *date_ptr)
interpret an 8 byte "filetime" structure to a time_t
It's originally in "100ns units since jan 1st 1601"
****************************************************************************/
-static time_t interpret_long_date(char *p)
+static time_t interpret_long_date(const char *p)
{
double d;
time_t ret;
@@ -167,9 +167,9 @@ static int name_extract(char *buf,int ofs,char *name)
/****************************************************************************
return the total storage length of a mangled name
****************************************************************************/
-static int name_len(unsigned char *s)
+static int name_len(const unsigned char *s)
{
- char *s0 = s;
+ const char *s0 = s;
unsigned char c = *(unsigned char *)s;
if ((c & 0xC0) == 0xC0)
return(2);
@@ -177,7 +177,7 @@ static int name_len(unsigned char *s)
return(PTR_DIFF(s,s0)+1);
}
-static void print_asc(unsigned char *buf,int len)
+static void print_asc(const unsigned char *buf,int len)
{
int i;
for (i=0;i<len;i++)
@@ -199,7 +199,7 @@ static char *name_type_str(int name_type)
return(f);
}
-void print_data(unsigned char *buf,int len)
+void print_data(const unsigned char *buf, int len)
{
int i=0;
if (len<=0) return;
@@ -246,7 +246,7 @@ static void write_bits(unsigned int val,char *fmt)
}
/* convert a unicode string */
-static char *unistr(char *s, int *len)
+static const char *unistr(const char *s, int *len)
{
static char buf[1000];
int l=0;
@@ -283,7 +283,7 @@ static char *unistr(char *s, int *len)
return buf;
}
-static uchar *fdata1(uchar *buf,char *fmt,uchar *maxbuf)
+static const uchar *fdata1(const uchar *buf, const char *fmt, const uchar *maxbuf)
{
int reverse=0;
char *attrib_fmt = "READONLY|HIDDEN|SYSTEM|VOLUME|DIR|ARCHIVE|";
@@ -482,7 +482,7 @@ static uchar *fdata1(uchar *buf,char *fmt,uchar *maxbuf)
return(buf);
}
-uchar *fdata(uchar *buf,char *fmt,uchar *maxbuf)
+const uchar *fdata(const uchar *buf, const char *fmt, const uchar *maxbuf)
{
static int depth=0;
char s[128];
@@ -493,7 +493,7 @@ uchar *fdata(uchar *buf,char *fmt,uchar *maxbuf)
case '*':
fmt++;
while (buf < maxbuf) {
- uchar *buf2;
+ const uchar *buf2;
depth++;
buf2 = fdata(buf,fmt,maxbuf);
depth--;
diff --git a/tcpdump.c b/tcpdump.c
index f331cf8c..714b19ee 100644
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -24,7 +24,7 @@ static const char copyright[] =
"@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997\n\
The Regents of the University of California. All rights reserved.\n";
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.136 1999-12-13 18:06:15 mcr Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.137 1999-12-22 06:27:24 itojun Exp $ (LBL)";
#endif
/*
@@ -50,6 +50,7 @@ static const char rcsid[] =
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <ctype.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
@@ -444,7 +445,25 @@ cleanup(int signo)
void
default_print_unaligned(register const u_char *cp, register u_int length)
{
- register u_int i, s;
+#if 1
+ register u_int i, s;
+ register int nshorts;
+
+ nshorts = (u_int) length / sizeof(u_short);
+ i = 0;
+ while (--nshorts >= 0) {
+ if ((i++ % 8) == 0)
+ (void)printf("\n\t\t\t");
+ s = *cp++;
+ (void)printf(" %02x%02x", s, *cp++);
+ }
+ if (length & 1) {
+ if ((i % 8) == 0)
+ (void)printf("\n\t\t\t");
+ (void)printf(" %02x", *cp);
+ }
+#else
+ register u_int i;
register int nshorts;
char line[81];
@@ -480,6 +499,7 @@ default_print_unaligned(register const u_char *cp, register u_int length)
cp += 2;
nshorts--;
}
+#endif
}
/*
@@ -490,10 +510,6 @@ default_print_unaligned(register const u_char *cp, register u_int length)
void
default_print(register const u_char *bp, register u_int length)
{
- register const u_short *sp;
- register u_int i;
- register int nshorts;
-
default_print_unaligned(bp, length);
}