summaryrefslogtreecommitdiffstats
path: root/contrib/tcpdump/print-llc.c
diff options
context:
space:
mode:
authorfenner <fenner@FreeBSD.org>2000-01-30 00:45:58 +0000
committerfenner <fenner@FreeBSD.org>2000-01-30 00:45:58 +0000
commit54c4a9c9f2aca2e032cbf41f5eb012e2e9628dd4 (patch)
treed25e1fd8c818bfce397a4c7e3f2c66229c814b2a /contrib/tcpdump/print-llc.c
parent0c669098d078c88cf703bade2263846b39e01d83 (diff)
downloadFreeBSD-src-54c4a9c9f2aca2e032cbf41f5eb012e2e9628dd4.zip
FreeBSD-src-54c4a9c9f2aca2e032cbf41f5eb012e2e9628dd4.tar.gz
Virgin import of tcpdump.org tcpdump v3.5
Diffstat (limited to 'contrib/tcpdump/print-llc.c')
-rw-r--r--contrib/tcpdump/print-llc.c69
1 files changed, 42 insertions, 27 deletions
diff --git a/contrib/tcpdump/print-llc.c b/contrib/tcpdump/print-llc.c
index da68156..19f9f86 100644
--- a/contrib/tcpdump/print-llc.c
+++ b/contrib/tcpdump/print-llc.c
@@ -24,7 +24,11 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: print-llc.c,v 1.24 97/01/01 20:56:48 leres Exp $";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-llc.c,v 1.27 1999/12/22 06:27:21 itojun Exp $";
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
#endif
#include <sys/param.h>
@@ -79,10 +83,15 @@ llc_print(const u_char *p, u_int length, u_int caplen,
ipx_print(p, length);
return (1);
}
-#ifdef notyet
- else if (p[0] == 0xf0 && p[1] == 0xf0)
- netbios_print(p, length);
-#endif
+ 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) {
isoclns_print(p + 3, length - 3, caplen - 3, esrc, edst);
@@ -92,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));
@@ -136,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);
@@ -150,22 +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));
+ }
+
} 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) {
@@ -185,8 +203,5 @@ llc_print(const u_char *p, u_int length, u_int caplen,
caplen -= 4;
}
(void)printf(" len=%d", length);
- if (caplen > 0) {
- default_print_unaligned(p, caplen);
- }
return(1);
}
OpenPOWER on IntegriCloud