1*4eaa4710SRishi Srivatsavai /************************************************************************ 2*4eaa4710SRishi Srivatsavai * RSTP library - Rapid Spanning Tree (802.1t, 802.1w) 3*4eaa4710SRishi Srivatsavai * Copyright (C) 2001-2003 Optical Access 4*4eaa4710SRishi Srivatsavai * Author: Alex Rozin 5*4eaa4710SRishi Srivatsavai * 6*4eaa4710SRishi Srivatsavai * This file is part of RSTP library. 7*4eaa4710SRishi Srivatsavai * 8*4eaa4710SRishi Srivatsavai * RSTP library is free software; you can redistribute it and/or modify it 9*4eaa4710SRishi Srivatsavai * under the terms of the GNU Lesser General Public License as published by the 10*4eaa4710SRishi Srivatsavai * Free Software Foundation; version 2.1 11*4eaa4710SRishi Srivatsavai * 12*4eaa4710SRishi Srivatsavai * RSTP library is distributed in the hope that it will be useful, but 13*4eaa4710SRishi Srivatsavai * WITHOUT ANY WARRANTY; without even the implied warranty of 14*4eaa4710SRishi Srivatsavai * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser 15*4eaa4710SRishi Srivatsavai * General Public License for more details. 16*4eaa4710SRishi Srivatsavai * 17*4eaa4710SRishi Srivatsavai * You should have received a copy of the GNU Lesser General Public License 18*4eaa4710SRishi Srivatsavai * along with RSTP library; see the file COPYING. If not, write to the Free 19*4eaa4710SRishi Srivatsavai * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 20*4eaa4710SRishi Srivatsavai * 02111-1307, USA. 21*4eaa4710SRishi Srivatsavai **********************************************************************/ 22*4eaa4710SRishi Srivatsavai 23*4eaa4710SRishi Srivatsavai /* External management communication API definitions */ 24*4eaa4710SRishi Srivatsavai 25*4eaa4710SRishi Srivatsavai #ifndef _UID_STP_H__ 26*4eaa4710SRishi Srivatsavai #define _UID_STP_H__ 27*4eaa4710SRishi Srivatsavai 28*4eaa4710SRishi Srivatsavai #define STP_DBG 1 29*4eaa4710SRishi Srivatsavai 30*4eaa4710SRishi Srivatsavai #define NAME_LEN 20 31*4eaa4710SRishi Srivatsavai 32*4eaa4710SRishi Srivatsavai typedef enum { 33*4eaa4710SRishi Srivatsavai STP_DISABLED, 34*4eaa4710SRishi Srivatsavai STP_ENABLED 35*4eaa4710SRishi Srivatsavai } UID_STP_MODE_T; 36*4eaa4710SRishi Srivatsavai 37*4eaa4710SRishi Srivatsavai typedef struct { 38*4eaa4710SRishi Srivatsavai unsigned short prio; 39*4eaa4710SRishi Srivatsavai unsigned char addr[6]; 40*4eaa4710SRishi Srivatsavai } UID_BRIDGE_ID_T; 41*4eaa4710SRishi Srivatsavai 42*4eaa4710SRishi Srivatsavai typedef struct { 43*4eaa4710SRishi Srivatsavai char vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */ 44*4eaa4710SRishi Srivatsavai char action; /* 1-create, 0- delete */ 45*4eaa4710SRishi Srivatsavai } UID_STP_BR_CTRL_T; 46*4eaa4710SRishi Srivatsavai 47*4eaa4710SRishi Srivatsavai #define BR_CFG_STATE (1L << 0) 48*4eaa4710SRishi Srivatsavai #define BR_CFG_PRIO (1L << 1) 49*4eaa4710SRishi Srivatsavai #define BR_CFG_AGE (1L << 2) 50*4eaa4710SRishi Srivatsavai #define BR_CFG_HELLO (1L << 3) 51*4eaa4710SRishi Srivatsavai #define BR_CFG_DELAY (1L << 4) 52*4eaa4710SRishi Srivatsavai #define BR_CFG_FORCE_VER (1L << 5) 53*4eaa4710SRishi Srivatsavai #define BR_CFG_AGE_MODE (1L << 6) 54*4eaa4710SRishi Srivatsavai #define BR_CFG_AGE_TIME (1L << 7) 55*4eaa4710SRishi Srivatsavai #define BR_CFG_HOLD_TIME (1L << 8) 56*4eaa4710SRishi Srivatsavai #define BR_CFG_ALL BR_CFG_STATE | \ 57*4eaa4710SRishi Srivatsavai BR_CFG_PRIO | \ 58*4eaa4710SRishi Srivatsavai BR_CFG_AGE | \ 59*4eaa4710SRishi Srivatsavai BR_CFG_HELLO | \ 60*4eaa4710SRishi Srivatsavai BR_CFG_DELAY | \ 61*4eaa4710SRishi Srivatsavai BR_CFG_FORCE_VER | \ 62*4eaa4710SRishi Srivatsavai BR_CFG_AGE_MODE | \ 63*4eaa4710SRishi Srivatsavai BR_CFG_AGE_TIME | \ 64*4eaa4710SRishi Srivatsavai BR_CFG_HOLD_TIME 65*4eaa4710SRishi Srivatsavai 66*4eaa4710SRishi Srivatsavai typedef struct { 67*4eaa4710SRishi Srivatsavai /* service data */ 68*4eaa4710SRishi Srivatsavai unsigned long field_mask; /* which fields to change */ 69*4eaa4710SRishi Srivatsavai UID_STP_MODE_T stp_enabled; 70*4eaa4710SRishi Srivatsavai char vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */ 71*4eaa4710SRishi Srivatsavai 72*4eaa4710SRishi Srivatsavai /* protocol data */ 73*4eaa4710SRishi Srivatsavai int bridge_priority; 74*4eaa4710SRishi Srivatsavai int max_age; 75*4eaa4710SRishi Srivatsavai int hello_time; 76*4eaa4710SRishi Srivatsavai int forward_delay; 77*4eaa4710SRishi Srivatsavai int force_version; 78*4eaa4710SRishi Srivatsavai int hold_time; 79*4eaa4710SRishi Srivatsavai } UID_STP_CFG_T; 80*4eaa4710SRishi Srivatsavai 81*4eaa4710SRishi Srivatsavai typedef struct { 82*4eaa4710SRishi Srivatsavai /* service data */ 83*4eaa4710SRishi Srivatsavai char vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */ 84*4eaa4710SRishi Srivatsavai unsigned long vlan_id; 85*4eaa4710SRishi Srivatsavai UID_STP_MODE_T stp_enabled; 86*4eaa4710SRishi Srivatsavai 87*4eaa4710SRishi Srivatsavai /* protocol data */ 88*4eaa4710SRishi Srivatsavai UID_BRIDGE_ID_T designated_root; 89*4eaa4710SRishi Srivatsavai unsigned long root_path_cost; 90*4eaa4710SRishi Srivatsavai 91*4eaa4710SRishi Srivatsavai unsigned long timeSince_Topo_Change; /* 14.8.1.1.3.b: TBD */ 92*4eaa4710SRishi Srivatsavai unsigned long Topo_Change_Count; /* 14.8.1.1.3.c: TBD */ 93*4eaa4710SRishi Srivatsavai unsigned char Topo_Change; /* 14.8.1.1.3.d: TBD */ 94*4eaa4710SRishi Srivatsavai 95*4eaa4710SRishi Srivatsavai unsigned short root_port; 96*4eaa4710SRishi Srivatsavai int max_age; 97*4eaa4710SRishi Srivatsavai int hello_time; 98*4eaa4710SRishi Srivatsavai int forward_delay; 99*4eaa4710SRishi Srivatsavai UID_BRIDGE_ID_T bridge_id; 100*4eaa4710SRishi Srivatsavai } UID_STP_STATE_T; 101*4eaa4710SRishi Srivatsavai 102*4eaa4710SRishi Srivatsavai typedef enum { 103*4eaa4710SRishi Srivatsavai UID_PORT_DISABLED = 0, 104*4eaa4710SRishi Srivatsavai UID_PORT_DISCARDING, 105*4eaa4710SRishi Srivatsavai UID_PORT_LEARNING, 106*4eaa4710SRishi Srivatsavai UID_PORT_FORWARDING, 107*4eaa4710SRishi Srivatsavai UID_PORT_NON_STP, 108*4eaa4710SRishi Srivatsavai UID_PORT_BADSDU 109*4eaa4710SRishi Srivatsavai } RSTP_PORT_STATE; 110*4eaa4710SRishi Srivatsavai 111*4eaa4710SRishi Srivatsavai typedef unsigned short UID_PORT_ID; 112*4eaa4710SRishi Srivatsavai 113*4eaa4710SRishi Srivatsavai typedef enum { 114*4eaa4710SRishi Srivatsavai P2P_FORCE_TRUE, 115*4eaa4710SRishi Srivatsavai P2P_FORCE_FALSE, 116*4eaa4710SRishi Srivatsavai P2P_AUTO 117*4eaa4710SRishi Srivatsavai } ADMIN_P2P_T; 118*4eaa4710SRishi Srivatsavai 119*4eaa4710SRishi Srivatsavai #define PT_CFG_STATE (1L << 0) 120*4eaa4710SRishi Srivatsavai #define PT_CFG_COST (1L << 1) 121*4eaa4710SRishi Srivatsavai #define PT_CFG_PRIO (1L << 2) 122*4eaa4710SRishi Srivatsavai #define PT_CFG_P2P (1L << 3) 123*4eaa4710SRishi Srivatsavai #define PT_CFG_EDGE (1L << 4) 124*4eaa4710SRishi Srivatsavai #define PT_CFG_MCHECK (1L << 5) 125*4eaa4710SRishi Srivatsavai #define PT_CFG_NON_STP (1L << 6) 126*4eaa4710SRishi Srivatsavai #ifdef STP_DBG 127*4eaa4710SRishi Srivatsavai #define PT_CFG_DBG_SKIP_RX (1L << 16) 128*4eaa4710SRishi Srivatsavai #define PT_CFG_DBG_SKIP_TX (1L << 17) 129*4eaa4710SRishi Srivatsavai #endif 130*4eaa4710SRishi Srivatsavai 131*4eaa4710SRishi Srivatsavai #define PT_CFG_ALL PT_CFG_STATE | \ 132*4eaa4710SRishi Srivatsavai PT_CFG_COST | \ 133*4eaa4710SRishi Srivatsavai PT_CFG_PRIO | \ 134*4eaa4710SRishi Srivatsavai PT_CFG_P2P | \ 135*4eaa4710SRishi Srivatsavai PT_CFG_EDGE | \ 136*4eaa4710SRishi Srivatsavai PT_CFG_MCHECK | \ 137*4eaa4710SRishi Srivatsavai PT_CFG_NON_STP 138*4eaa4710SRishi Srivatsavai 139*4eaa4710SRishi Srivatsavai #define ADMIN_PORT_PATH_COST_AUTO 0 140*4eaa4710SRishi Srivatsavai 141*4eaa4710SRishi Srivatsavai typedef struct { 142*4eaa4710SRishi Srivatsavai /* service data */ 143*4eaa4710SRishi Srivatsavai unsigned long field_mask; /* which fields to change */ 144*4eaa4710SRishi Srivatsavai char vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */ 145*4eaa4710SRishi Srivatsavai 146*4eaa4710SRishi Srivatsavai /* protocol data */ 147*4eaa4710SRishi Srivatsavai int port_priority; 148*4eaa4710SRishi Srivatsavai unsigned long admin_port_path_cost; /* ADMIN_PORT_PATH_COST_AUTO - auto sence */ 149*4eaa4710SRishi Srivatsavai ADMIN_P2P_T admin_point2point; 150*4eaa4710SRishi Srivatsavai unsigned char admin_edge; 151*4eaa4710SRishi Srivatsavai unsigned char admin_non_stp; /* 1- doesn't participate in STP, 1 - regular */ 152*4eaa4710SRishi Srivatsavai #ifdef STP_DBG 153*4eaa4710SRishi Srivatsavai unsigned int skip_rx; 154*4eaa4710SRishi Srivatsavai unsigned int skip_tx; 155*4eaa4710SRishi Srivatsavai #endif 156*4eaa4710SRishi Srivatsavai 157*4eaa4710SRishi Srivatsavai } UID_STP_PORT_CFG_T; 158*4eaa4710SRishi Srivatsavai 159*4eaa4710SRishi Srivatsavai typedef struct { 160*4eaa4710SRishi Srivatsavai /* service data */ 161*4eaa4710SRishi Srivatsavai char vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */ 162*4eaa4710SRishi Srivatsavai unsigned int port_no; /* key of the entry */ 163*4eaa4710SRishi Srivatsavai 164*4eaa4710SRishi Srivatsavai /* protocol data */ 165*4eaa4710SRishi Srivatsavai UID_PORT_ID port_id; 166*4eaa4710SRishi Srivatsavai RSTP_PORT_STATE state; 167*4eaa4710SRishi Srivatsavai unsigned long path_cost; 168*4eaa4710SRishi Srivatsavai 169*4eaa4710SRishi Srivatsavai UID_BRIDGE_ID_T designated_root; 170*4eaa4710SRishi Srivatsavai unsigned long designated_cost; 171*4eaa4710SRishi Srivatsavai UID_BRIDGE_ID_T designated_bridge; 172*4eaa4710SRishi Srivatsavai UID_PORT_ID designated_port; 173*4eaa4710SRishi Srivatsavai 174*4eaa4710SRishi Srivatsavai #if 0 175*4eaa4710SRishi Srivatsavai int infoIs; 176*4eaa4710SRishi Srivatsavai unsigned short handshake_flags; 177*4eaa4710SRishi Srivatsavai #endif 178*4eaa4710SRishi Srivatsavai 179*4eaa4710SRishi Srivatsavai unsigned long rx_cfg_bpdu_cnt; 180*4eaa4710SRishi Srivatsavai unsigned long rx_rstp_bpdu_cnt; 181*4eaa4710SRishi Srivatsavai unsigned long rx_tcn_bpdu_cnt; 182*4eaa4710SRishi Srivatsavai int fdWhile; /* 17.15.1 */ 183*4eaa4710SRishi Srivatsavai int helloWhen; /* 17.15.2 */ 184*4eaa4710SRishi Srivatsavai int mdelayWhile; /* 17.15.3 */ 185*4eaa4710SRishi Srivatsavai int rbWhile; /* 17.15.4 */ 186*4eaa4710SRishi Srivatsavai int rcvdInfoWhile;/* 17.15.5 */ 187*4eaa4710SRishi Srivatsavai int rrWhile; /* 17.15.6 */ 188*4eaa4710SRishi Srivatsavai int tcWhile; /* 17.15.7 */ 189*4eaa4710SRishi Srivatsavai int txCount; /* 17.18.40 */ 190*4eaa4710SRishi Srivatsavai int lnkWhile; 191*4eaa4710SRishi Srivatsavai 192*4eaa4710SRishi Srivatsavai unsigned long uptime; /* 14.8.2.1.3.a */ 193*4eaa4710SRishi Srivatsavai unsigned long oper_port_path_cost; 194*4eaa4710SRishi Srivatsavai unsigned char role; 195*4eaa4710SRishi Srivatsavai unsigned char oper_point2point; 196*4eaa4710SRishi Srivatsavai unsigned char oper_edge; 197*4eaa4710SRishi Srivatsavai unsigned char oper_stp_neigb; 198*4eaa4710SRishi Srivatsavai unsigned char top_change_ack; 199*4eaa4710SRishi Srivatsavai unsigned char tc; 200*4eaa4710SRishi Srivatsavai } UID_STP_PORT_STATE_T; 201*4eaa4710SRishi Srivatsavai 202*4eaa4710SRishi Srivatsavai #endif 203