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