summaryrefslogtreecommitdiffstats
path: root/contrib/tcpdump/print-llc.c
diff options
context:
space:
mode:
authorfenner <fenner@FreeBSD.org>2000-01-30 01:05:24 +0000
committerfenner <fenner@FreeBSD.org>2000-01-30 01:05:24 +0000
commitc780ea93f313e481b5e76344d0c206cf1568e727 (patch)
treecd7ad03c67eea60f72e32cf23a00c051002101b6 /contrib/tcpdump/print-llc.c
parent107d567bf3f832610112e1377af645f8f827e1dd (diff)
downloadFreeBSD-src-c780ea93f313e481b5e76344d0c206cf1568e727.zip
FreeBSD-src-c780ea93f313e481b5e76344d0c206cf1568e727.tar.gz
Merge tcpdump 3.5
Diffstat (limited to 'contrib/tcpdump/print-llc.c')
-rw-r--r--contrib/tcpdump/print-llc.c68
1 files changed, 44 insertions, 24 deletions
diff --git a/contrib/tcpdump/print-llc.c b/contrib/tcpdump/print-llc.c
index 183c357..3216f4d 100644
--- a/contrib/tcpdump/print-llc.c
+++ b/contrib/tcpdump/print-llc.c
@@ -20,11 +20,17 @@
*
* Code by Matt Thomas, Digital Equipment Corporation
* with an awful lot of hacking by Jeffrey Mogul, DECWRL
+ *
+ * $FreeBSD$
*/
#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 +85,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 +103,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 +147,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 +161,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) {
OpenPOWER on IntegriCloud