1*55fea89dSDan Cross /************************************************************************
2*55fea89dSDan Cross  * RSTP library - Rapid Spanning Tree (802.1t, 802.1w)
3*55fea89dSDan Cross  * Copyright (C) 2001-2003 Optical Access
4*55fea89dSDan Cross  * Author: Alex Rozin
5*55fea89dSDan Cross  *
6*55fea89dSDan Cross  * This file is part of RSTP library.
7*55fea89dSDan Cross  *
8*55fea89dSDan Cross  * RSTP library is free software; you can redistribute it and/or modify it
9*55fea89dSDan Cross  * under the terms of the GNU Lesser General Public License as published by the
10*55fea89dSDan Cross  * Free Software Foundation; version 2.1
11*55fea89dSDan Cross  *
12*55fea89dSDan Cross  * RSTP library is distributed in the hope that it will be useful, but
13*55fea89dSDan Cross  * WITHOUT ANY WARRANTY; without even the implied warranty of
14*55fea89dSDan Cross  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
15*55fea89dSDan Cross  * General Public License for more details.
16*55fea89dSDan Cross  *
17*55fea89dSDan Cross  * You should have received a copy of the GNU Lesser General Public License
18*55fea89dSDan Cross  * along with RSTP library; see the file COPYING.  If not, write to the Free
19*55fea89dSDan Cross  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20*55fea89dSDan Cross  * 02111-1307, USA.
214eaa4710SRishi Srivatsavai  **********************************************************************/
224eaa4710SRishi Srivatsavai 
234eaa4710SRishi Srivatsavai /* BPDU formats: 9.1 - 9.3, 17.28 */
24*55fea89dSDan Cross 
254eaa4710SRishi Srivatsavai #ifndef _STP_BPDU_H__
264eaa4710SRishi Srivatsavai #define _STP_BPDU_H__
274eaa4710SRishi Srivatsavai 
284eaa4710SRishi Srivatsavai #define MIN_BPDU                7
294eaa4710SRishi Srivatsavai #define BPDU_L_SAP              0x42
304eaa4710SRishi Srivatsavai #define LLC_UI                  0x03
314eaa4710SRishi Srivatsavai #define BPDU_PROTOCOL_ID        0x0000
324eaa4710SRishi Srivatsavai #define BPDU_VERSION_ID         0x00
334eaa4710SRishi Srivatsavai #define BPDU_VERSION_RAPID_ID   0x02
344eaa4710SRishi Srivatsavai 
354eaa4710SRishi Srivatsavai #define BPDU_TOPO_CHANGE_TYPE   0x80
364eaa4710SRishi Srivatsavai #define BPDU_CONFIG_TYPE        0x00
374eaa4710SRishi Srivatsavai #define BPDU_RSTP               0x02
384eaa4710SRishi Srivatsavai 
394eaa4710SRishi Srivatsavai #define TOPOLOGY_CHANGE_BIT     0x01
404eaa4710SRishi Srivatsavai #define PROPOSAL_BIT            0x02
414eaa4710SRishi Srivatsavai #define PORT_ROLE_OFFS          2   /* 0x04 & 0x08 */
424eaa4710SRishi Srivatsavai #define PORT_ROLE_MASK          (0x03 << PORT_ROLE_OFFS)
434eaa4710SRishi Srivatsavai #define LEARN_BIT               0x10
444eaa4710SRishi Srivatsavai #define FORWARD_BIT             0x20
454eaa4710SRishi Srivatsavai #define AGREEMENT_BIT           0x40
464eaa4710SRishi Srivatsavai #define TOPOLOGY_CHANGE_ACK_BIT 0x80
474eaa4710SRishi Srivatsavai 
484eaa4710SRishi Srivatsavai #define RSTP_PORT_ROLE_UNKN     0x00
494eaa4710SRishi Srivatsavai #define RSTP_PORT_ROLE_ALTBACK  0x01
504eaa4710SRishi Srivatsavai #define RSTP_PORT_ROLE_ROOT     0x02
514eaa4710SRishi Srivatsavai #define RSTP_PORT_ROLE_DESGN    0x03
524eaa4710SRishi Srivatsavai 
534eaa4710SRishi Srivatsavai typedef struct mac_header_t {
544eaa4710SRishi Srivatsavai   unsigned char dst_mac[6];
554eaa4710SRishi Srivatsavai   unsigned char src_mac[6];
564eaa4710SRishi Srivatsavai } MAC_HEADER_T;
574eaa4710SRishi Srivatsavai 
584eaa4710SRishi Srivatsavai typedef struct eth_header_t {
594eaa4710SRishi Srivatsavai   unsigned char len8023[2];
604eaa4710SRishi Srivatsavai   unsigned char dsap;
614eaa4710SRishi Srivatsavai   unsigned char ssap;
624eaa4710SRishi Srivatsavai   unsigned char llc;
634eaa4710SRishi Srivatsavai } ETH_HEADER_T;
644eaa4710SRishi Srivatsavai 
654eaa4710SRishi Srivatsavai typedef struct bpdu_header_t {
664eaa4710SRishi Srivatsavai   unsigned char protocol[2];
674eaa4710SRishi Srivatsavai   unsigned char version;
684eaa4710SRishi Srivatsavai   unsigned char bpdu_type;
694eaa4710SRishi Srivatsavai } BPDU_HEADER_T;
704eaa4710SRishi Srivatsavai 
714eaa4710SRishi Srivatsavai typedef struct bpdu_body_t {
724eaa4710SRishi Srivatsavai   unsigned char flags;
734eaa4710SRishi Srivatsavai   unsigned char root_id[8];
744eaa4710SRishi Srivatsavai   unsigned char root_path_cost[4];
754eaa4710SRishi Srivatsavai   unsigned char bridge_id[8];
764eaa4710SRishi Srivatsavai   unsigned char port_id[2];
774eaa4710SRishi Srivatsavai   unsigned char message_age[2];
784eaa4710SRishi Srivatsavai   unsigned char max_age[2];
794eaa4710SRishi Srivatsavai   unsigned char hello_time[2];
804eaa4710SRishi Srivatsavai   unsigned char forward_delay[2];
814eaa4710SRishi Srivatsavai } BPDU_BODY_T;
824eaa4710SRishi Srivatsavai 
834eaa4710SRishi Srivatsavai typedef struct stp_bpdu_t {
844eaa4710SRishi Srivatsavai   ETH_HEADER_T  eth;
854eaa4710SRishi Srivatsavai   BPDU_HEADER_T hdr;
864eaa4710SRishi Srivatsavai   BPDU_BODY_T   body;
874eaa4710SRishi Srivatsavai   unsigned char ver_1_len[2];
884eaa4710SRishi Srivatsavai } BPDU_T;
894eaa4710SRishi Srivatsavai 
904eaa4710SRishi Srivatsavai #endif /* _STP_BPDU_H__ */
91