From ace14a2b50f2cc05c079d0b9137b49066dbb1206 Mon Sep 17 00:00:00 2001 From: fenner Date: Tue, 3 Apr 2001 07:45:48 +0000 Subject: Virgin import of tcpdump.org tcpdump v3.6.2 --- contrib/tcpdump/print-stp.c | 106 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 contrib/tcpdump/print-stp.c (limited to 'contrib/tcpdump/print-stp.c') diff --git a/contrib/tcpdump/print-stp.c b/contrib/tcpdump/print-stp.c new file mode 100644 index 0000000..9281663 --- /dev/null +++ b/contrib/tcpdump/print-stp.c @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2000 Lennert Buytenhek + * + * This software may be distributed either under the terms of the + * BSD-style license that accompanies tcpdump or the GNU General + * Public License + * + * Format and print IEEE 802.1d spanning tree protocol packets. + * Contributed by Lennert Buytenhek + */ + +#ifndef lint +static const char rcsid[] = + "@(#) $Header: /tcpdump/master/tcpdump/print-stp.c,v 1.6 2000/09/29 04:58:50 guy Exp $"; +#endif + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +#include + +#include +#include +#include + +#include "interface.h" +#include "addrtoname.h" +#include "extract.h" + +static void +stp_print_bridge_id(const u_char *p) +{ + printf("%.2x%.2x.%.2x:%.2x:%.2x:%.2x:%.2x:%.2x", + p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]); +} + +static void +stp_print_config_bpdu(const u_char *p, u_int length) +{ + printf("config "); + if (p[7] & 1) + printf("TOP_CHANGE "); + if (p[7] & 0x80) + printf("TOP_CHANGE_ACK "); + + stp_print_bridge_id(p+20); + printf(".%.2x%.2x ", p[28], p[29]); + + printf("root "); + stp_print_bridge_id(p+8); + + printf(" pathcost %i ", (p[16] << 24) | (p[17] << 16) | (p[18] << 8) | p[19]); + + printf("age %i ", p[30]); + printf("max %i ", p[32]); + printf("hello %i ", p[34]); + printf("fdelay %i ", p[36]); +} + +static void +stp_print_tcn_bpdu(const u_char *p, u_int length) +{ + printf("tcn"); +} + +/* + * Print 802.1d packets. + */ +void +stp_print(const u_char *p, u_int length) +{ + if (length < 7) + goto trunc; + + printf("802.1d "); + if (p[2] != 0x03 || p[3] || p[4] || p[5]) { + printf("unknown version"); + return; + } + + switch (p[6]) + { + case 0: + if (length < 10) + goto trunc; + stp_print_config_bpdu(p, length); + break; + + case 1: + stp_print_tcn_bpdu(p, length); + break; + + default: + printf("unknown type %i\n", p[6]); + break; + } + + return; +trunc: + printf("[|stp %d]", length); +} -- cgit v1.1