1 /************************************************************************
2 * RSTP library - Rapid Spanning Tree (802.1t, 802.1w)
3 * Copyright (C) 2001-2003 Optical Access
6 * This file is part of RSTP library.
8 * RSTP library is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU Lesser General Public License as published by the
10 * Free Software Foundation; version 2.1
12 * RSTP library is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
15 * General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with RSTP library; see the file COPYING. If not, write to the Free
19 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
21 **********************************************************************/
23 /* STP PORT instance : 17.18, 17.15 */
30 #define TIMERS_NUMBER 9
31 typedef unsigned int PORT_TIMER_T
;
56 typedef struct port_t
{
59 /* per Port state machines */
60 STATE_MACH_T
* info
; /* 17.21 */
61 STATE_MACH_T
* roletrns
; /* 17.23 */
62 STATE_MACH_T
* sttrans
; /* 17.24 */
63 STATE_MACH_T
* topoch
; /* 17.25 */
64 STATE_MACH_T
* migrate
; /* 17.26 */
65 STATE_MACH_T
* transmit
; /* 17.26 */
66 STATE_MACH_T
* p2p
; /* 6.4.3, 6.5.1 */
67 STATE_MACH_T
* edge
; /* */
68 STATE_MACH_T
* pcost
; /* */
70 STATE_MACH_T
* machines
; /* list of machines */
72 struct stpm_t
* owner
; /* Bridge, that this port belongs to */
75 PORT_TIMER_T fdWhile
; /* 17.15.1 */
76 PORT_TIMER_T helloWhen
; /* 17.15.2 */
77 PORT_TIMER_T mdelayWhile
; /* 17.15.3 */
78 PORT_TIMER_T rbWhile
; /* 17.15.4 */
79 PORT_TIMER_T rcvdInfoWhile
;/* 17.15.5 */
80 PORT_TIMER_T rrWhile
; /* 17.15.6 */
81 PORT_TIMER_T tcWhile
; /* 17.15.7 */
82 PORT_TIMER_T txCount
; /* 17.18.40 */
83 PORT_TIMER_T lnkWhile
;
85 PORT_TIMER_T
* timers
[TIMERS_NUMBER
]; /*list of timers */
87 Bool agreed
; /* 17.18.1 */
88 PRIO_VECTOR_T designPrio
; /* 17.18.2 */
89 TIMEVALUES_T designTimes
; /* 17.18.3 */
90 Bool forward
; /* 17.18.4 */
91 Bool forwarding
; /* 17.18.5 */
92 INFO_IS_T infoIs
; /* 17.18.6 */
93 Bool initPm
; /* 17.18.7 */
94 Bool learn
; /* 17.18.8 */
95 Bool learning
; /* 17.18.9 */
96 Bool mcheck
; /* 17.18.10 */
97 PRIO_VECTOR_T msgPrio
; /* 17.18.11 */
98 TIMEVALUES_T msgTimes
; /* 17.18.12 */
99 Bool newInfo
; /* 17.18.13 */
100 Bool operEdge
; /* 17.18.14 */
101 Bool adminEdge
; /* 17.18.14 */
102 Bool portEnabled
; /* 17.18.15 */
103 PORT_ID port_id
; /* 17.18.16 */
104 PRIO_VECTOR_T portPrio
; /* 17.18.17 */
105 TIMEVALUES_T portTimes
; /* 17.18.18 */
106 Bool proposed
; /* 17.18.19 */
107 Bool proposing
; /* 17.18.20 */
108 Bool rcvdBpdu
; /* 17.18.21 */
109 RCVD_MSG_T rcvdMsg
; /* 17.18.22 */
110 Bool rcvdRSTP
; /* 17/18.23 */
111 Bool rcvdSTP
; /* 17.18.24 */
112 Bool rcvdTc
; /* 17.18.25 */
113 Bool rcvdTcAck
; /* 17.18.26 */
114 Bool rcvdTcn
; /* 17.18.27 */
115 Bool reRoot
; /* 17.18.28 */
116 Bool reselect
; /* 17.18.29 */
117 PORT_ROLE_T role
; /* 17.18.30 */
118 Bool selected
; /* 17.18.31 */
119 PORT_ROLE_T selectedRole
; /* 17.18.32 */
120 Bool sendRSTP
; /* 17.18.33 */
121 Bool sync
; /* 17.18.34 */
122 Bool synced
; /* 17.18.35 */
123 Bool tc
; /* 17.18.36 */
124 Bool tcAck
; /* 17.18.37 */
125 Bool tcProp
; /* 17.18.38 */
127 Bool updtInfo
; /* 17.18.41 */
129 /* message information */
130 unsigned char msgBpduVersion
;
131 unsigned char msgBpduType
;
132 unsigned char msgPortRole
;
133 unsigned char msgFlags
;
135 unsigned long adminPCost
; /* may be ADMIN_PORT_PATH_COST_AUTO */
136 unsigned long operPCost
;
137 unsigned long operSpeed
;
138 unsigned long usedSpeed
;
139 int LinkDelay
; /* TBD: LinkDelay may be managed ? */
140 Bool adminEnable
; /* 'has LINK' */
145 Bool operPointToPointMac
;
146 ADMIN_P2P_T adminPointToPointMac
;
149 unsigned long rx_cfg_bpdu_cnt
;
150 unsigned long rx_rstp_bpdu_cnt
;
151 unsigned long rx_tcn_bpdu_cnt
;
153 unsigned long uptime
; /* 14.8.2.1.3.a */
159 unsigned int skip_rx
;
160 unsigned int skip_tx
;
165 STP_port_create (struct stpm_t
* stpm
, int port_index
);
168 STP_port_delete (PORT_T
* this);
171 STP_port_rx_bpdu (PORT_T
* this, BPDU_T
* bpdu
, size_t len
);
174 STP_port_init (PORT_T
* this, struct stpm_t
* stpm
, Bool check_link
);
178 STP_port_trace_state_machine (PORT_T
* this, char* mach_name
, int enadis
);
181 STP_port_trace_flags (char* title
, PORT_T
* this);
184 #endif /* _STP_PORT_H__ */