dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / cmd / cmd-inet / usr.sbin / snoop / snoop_bpdu.c
blob89aa7750d3002f4483341564ec4fc16670cab035
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #include <stdio.h>
28 #include <sys/types.h>
29 #include <sys/socket.h>
30 #include <sys/ethernet.h>
32 #include <snoop.h>
34 struct conf_bpdu {
35 uchar_t cb_protid[2]; /* Protocol Identifier */
36 uchar_t cb_protvers; /* Protocol Version Identifier */
37 uchar_t cb_type; /* BPDU Type */
38 uchar_t cb_flags; /* BPDU Flags */
39 uchar_t cb_rootid[8]; /* Root Identifier */
40 uchar_t cb_rootcost[4]; /* Root Path Cost */
41 uchar_t cb_bridgeid[8]; /* Bridge Identifier */
42 uchar_t cb_portid[2]; /* Port Identifier */
43 uchar_t cb_messageage[2]; /* Message Age */
44 uchar_t cb_maxage[2]; /* Max Age */
45 uchar_t cb_hello[2]; /* Hello Time */
46 uchar_t cb_fwddelay[2]; /* Forward Delay */
49 #define BPDU_TYPE_CONF 0
50 #define BPDU_TYPE_RCONF 2
51 #define BPDU_TYPE_TCNOTIF 0x80
53 int
54 interpret_bpdu(int flags, char *data, int dlen)
56 struct conf_bpdu *cb;
57 const char *pdutype;
59 if (dlen < 4) {
60 (void) snprintf(get_sum_line(), MAXLINE,
61 "BPDU (short packet)");
62 return (0);
65 cb = (struct conf_bpdu *)data;
67 if (flags & F_SUM) {
68 (void) snprintf(get_sum_line(), MAXLINE,
69 "Bridge PDU T:%d L:%d", cb->cb_type, dlen);
72 if (flags & F_DTAIL) {
73 show_header("Bridge-PDU: ",
74 "Bridge PDU Frame", dlen);
75 show_space();
76 switch (cb->cb_type) {
77 case BPDU_TYPE_CONF:
78 pdutype = "Configuration";
79 break;
80 case BPDU_TYPE_RCONF:
81 pdutype = "Rapid Configuration";
82 break;
83 case BPDU_TYPE_TCNOTIF:
84 pdutype = "TC Notification";
85 break;
86 default:
87 pdutype = "?";
88 break;
90 (void) snprintf(get_line(0, 0), get_line_remain(),
91 "PDU type = %d (%s)", cb->cb_type, pdutype);
92 show_trailer();
94 return (0);