xref: /onnv-gate/usr/src/lib/librstp/common/port.h (revision 10491:8893b747ecdf)
1*10491SRishi.Srivatsavai@Sun.COM /************************************************************************
2*10491SRishi.Srivatsavai@Sun.COM  * RSTP library - Rapid Spanning Tree (802.1t, 802.1w)
3*10491SRishi.Srivatsavai@Sun.COM  * Copyright (C) 2001-2003 Optical Access
4*10491SRishi.Srivatsavai@Sun.COM  * Author: Alex Rozin
5*10491SRishi.Srivatsavai@Sun.COM  *
6*10491SRishi.Srivatsavai@Sun.COM  * This file is part of RSTP library.
7*10491SRishi.Srivatsavai@Sun.COM  *
8*10491SRishi.Srivatsavai@Sun.COM  * RSTP library is free software; you can redistribute it and/or modify it
9*10491SRishi.Srivatsavai@Sun.COM  * under the terms of the GNU Lesser General Public License as published by the
10*10491SRishi.Srivatsavai@Sun.COM  * Free Software Foundation; version 2.1
11*10491SRishi.Srivatsavai@Sun.COM  *
12*10491SRishi.Srivatsavai@Sun.COM  * RSTP library is distributed in the hope that it will be useful, but
13*10491SRishi.Srivatsavai@Sun.COM  * WITHOUT ANY WARRANTY; without even the implied warranty of
14*10491SRishi.Srivatsavai@Sun.COM  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
15*10491SRishi.Srivatsavai@Sun.COM  * General Public License for more details.
16*10491SRishi.Srivatsavai@Sun.COM  *
17*10491SRishi.Srivatsavai@Sun.COM  * You should have received a copy of the GNU Lesser General Public License
18*10491SRishi.Srivatsavai@Sun.COM  * along with RSTP library; see the file COPYING.  If not, write to the Free
19*10491SRishi.Srivatsavai@Sun.COM  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20*10491SRishi.Srivatsavai@Sun.COM  * 02111-1307, USA.
21*10491SRishi.Srivatsavai@Sun.COM  **********************************************************************/
22*10491SRishi.Srivatsavai@Sun.COM 
23*10491SRishi.Srivatsavai@Sun.COM /* STP PORT instance : 17.18, 17.15 */
24*10491SRishi.Srivatsavai@Sun.COM 
25*10491SRishi.Srivatsavai@Sun.COM #ifndef _STP_PORT_H__
26*10491SRishi.Srivatsavai@Sun.COM #define _STP_PORT_H__
27*10491SRishi.Srivatsavai@Sun.COM 
28*10491SRishi.Srivatsavai@Sun.COM #include "statmch.h"
29*10491SRishi.Srivatsavai@Sun.COM 
30*10491SRishi.Srivatsavai@Sun.COM #define TIMERS_NUMBER   9
31*10491SRishi.Srivatsavai@Sun.COM typedef unsigned int    PORT_TIMER_T;
32*10491SRishi.Srivatsavai@Sun.COM 
33*10491SRishi.Srivatsavai@Sun.COM typedef enum {
34*10491SRishi.Srivatsavai@Sun.COM   Mine,
35*10491SRishi.Srivatsavai@Sun.COM   Aged,
36*10491SRishi.Srivatsavai@Sun.COM   Received,
37*10491SRishi.Srivatsavai@Sun.COM   Disabled
38*10491SRishi.Srivatsavai@Sun.COM } INFO_IS_T;
39*10491SRishi.Srivatsavai@Sun.COM 
40*10491SRishi.Srivatsavai@Sun.COM typedef enum {
41*10491SRishi.Srivatsavai@Sun.COM   SuperiorDesignateMsg,
42*10491SRishi.Srivatsavai@Sun.COM   RepeatedDesignateMsg,
43*10491SRishi.Srivatsavai@Sun.COM   ConfirmedRootMsg,
44*10491SRishi.Srivatsavai@Sun.COM   OtherMsg
45*10491SRishi.Srivatsavai@Sun.COM } RCVD_MSG_T;
46*10491SRishi.Srivatsavai@Sun.COM 
47*10491SRishi.Srivatsavai@Sun.COM typedef enum {
48*10491SRishi.Srivatsavai@Sun.COM   DisabledPort = 0,
49*10491SRishi.Srivatsavai@Sun.COM   AlternatePort,
50*10491SRishi.Srivatsavai@Sun.COM   BackupPort,
51*10491SRishi.Srivatsavai@Sun.COM   RootPort,
52*10491SRishi.Srivatsavai@Sun.COM   DesignatedPort,
53*10491SRishi.Srivatsavai@Sun.COM   NonStpPort
54*10491SRishi.Srivatsavai@Sun.COM } PORT_ROLE_T;
55*10491SRishi.Srivatsavai@Sun.COM 
56*10491SRishi.Srivatsavai@Sun.COM typedef struct port_t {
57*10491SRishi.Srivatsavai@Sun.COM   struct port_t*     next;
58*10491SRishi.Srivatsavai@Sun.COM 
59*10491SRishi.Srivatsavai@Sun.COM   /* per Port state machines */
60*10491SRishi.Srivatsavai@Sun.COM   STATE_MACH_T*     info;      /* 17.21 */
61*10491SRishi.Srivatsavai@Sun.COM   STATE_MACH_T*     roletrns;  /* 17.23 */
62*10491SRishi.Srivatsavai@Sun.COM   STATE_MACH_T*     sttrans;   /* 17.24 */
63*10491SRishi.Srivatsavai@Sun.COM   STATE_MACH_T*     topoch;    /* 17.25 */
64*10491SRishi.Srivatsavai@Sun.COM   STATE_MACH_T*     migrate;   /* 17.26 */
65*10491SRishi.Srivatsavai@Sun.COM   STATE_MACH_T*     transmit;  /* 17.26 */
66*10491SRishi.Srivatsavai@Sun.COM   STATE_MACH_T*     p2p;       /* 6.4.3, 6.5.1 */
67*10491SRishi.Srivatsavai@Sun.COM   STATE_MACH_T*     edge;      /*  */
68*10491SRishi.Srivatsavai@Sun.COM   STATE_MACH_T*     pcost;     /*  */
69*10491SRishi.Srivatsavai@Sun.COM 
70*10491SRishi.Srivatsavai@Sun.COM   STATE_MACH_T*     machines; /* list of machines */
71*10491SRishi.Srivatsavai@Sun.COM 
72*10491SRishi.Srivatsavai@Sun.COM   struct stpm_t*    owner; /* Bridge, that this port belongs to */
73*10491SRishi.Srivatsavai@Sun.COM 
74*10491SRishi.Srivatsavai@Sun.COM   /* per port Timers */
75*10491SRishi.Srivatsavai@Sun.COM   PORT_TIMER_T      fdWhile;      /* 17.15.1 */
76*10491SRishi.Srivatsavai@Sun.COM   PORT_TIMER_T      helloWhen;    /* 17.15.2 */
77*10491SRishi.Srivatsavai@Sun.COM   PORT_TIMER_T      mdelayWhile;  /* 17.15.3 */
78*10491SRishi.Srivatsavai@Sun.COM   PORT_TIMER_T      rbWhile;      /* 17.15.4 */
79*10491SRishi.Srivatsavai@Sun.COM   PORT_TIMER_T      rcvdInfoWhile;/* 17.15.5 */
80*10491SRishi.Srivatsavai@Sun.COM   PORT_TIMER_T      rrWhile;      /* 17.15.6 */
81*10491SRishi.Srivatsavai@Sun.COM   PORT_TIMER_T      tcWhile;      /* 17.15.7 */
82*10491SRishi.Srivatsavai@Sun.COM   PORT_TIMER_T      txCount;      /* 17.18.40 */
83*10491SRishi.Srivatsavai@Sun.COM   PORT_TIMER_T      lnkWhile;
84*10491SRishi.Srivatsavai@Sun.COM 
85*10491SRishi.Srivatsavai@Sun.COM   PORT_TIMER_T*     timers[TIMERS_NUMBER]; /*list of timers */
86*10491SRishi.Srivatsavai@Sun.COM 
87*10491SRishi.Srivatsavai@Sun.COM   Bool              agreed;        /* 17.18.1 */
88*10491SRishi.Srivatsavai@Sun.COM   PRIO_VECTOR_T     designPrio;    /* 17.18.2 */
89*10491SRishi.Srivatsavai@Sun.COM   TIMEVALUES_T      designTimes;   /* 17.18.3 */
90*10491SRishi.Srivatsavai@Sun.COM   Bool              forward;       /* 17.18.4 */
91*10491SRishi.Srivatsavai@Sun.COM   Bool              forwarding;    /* 17.18.5 */
92*10491SRishi.Srivatsavai@Sun.COM   INFO_IS_T         infoIs;        /* 17.18.6 */
93*10491SRishi.Srivatsavai@Sun.COM   Bool              initPm;        /* 17.18.7  */
94*10491SRishi.Srivatsavai@Sun.COM   Bool              learn;         /* 17.18.8 */
95*10491SRishi.Srivatsavai@Sun.COM   Bool              learning;      /* 17.18.9 */
96*10491SRishi.Srivatsavai@Sun.COM   Bool              mcheck;        /* 17.18.10 */
97*10491SRishi.Srivatsavai@Sun.COM   PRIO_VECTOR_T     msgPrio;       /* 17.18.11 */
98*10491SRishi.Srivatsavai@Sun.COM   TIMEVALUES_T      msgTimes;      /* 17.18.12 */
99*10491SRishi.Srivatsavai@Sun.COM   Bool              newInfo;       /* 17.18.13 */
100*10491SRishi.Srivatsavai@Sun.COM   Bool              operEdge;      /* 17.18.14 */
101*10491SRishi.Srivatsavai@Sun.COM   Bool              adminEdge;     /* 17.18.14 */
102*10491SRishi.Srivatsavai@Sun.COM   Bool              portEnabled;   /* 17.18.15 */
103*10491SRishi.Srivatsavai@Sun.COM   PORT_ID           port_id;       /* 17.18.16 */
104*10491SRishi.Srivatsavai@Sun.COM   PRIO_VECTOR_T     portPrio;      /* 17.18.17 */
105*10491SRishi.Srivatsavai@Sun.COM   TIMEVALUES_T      portTimes;     /* 17.18.18 */
106*10491SRishi.Srivatsavai@Sun.COM   Bool              proposed;      /* 17.18.19 */
107*10491SRishi.Srivatsavai@Sun.COM   Bool              proposing;     /* 17.18.20 */
108*10491SRishi.Srivatsavai@Sun.COM   Bool              rcvdBpdu;      /* 17.18.21 */
109*10491SRishi.Srivatsavai@Sun.COM   RCVD_MSG_T        rcvdMsg;       /* 17.18.22 */
110*10491SRishi.Srivatsavai@Sun.COM   Bool              rcvdRSTP;      /* 17/18.23 */
111*10491SRishi.Srivatsavai@Sun.COM   Bool              rcvdSTP;       /* 17.18.24 */
112*10491SRishi.Srivatsavai@Sun.COM   Bool              rcvdTc;        /* 17.18.25 */
113*10491SRishi.Srivatsavai@Sun.COM   Bool              rcvdTcAck;     /* 17.18.26 */
114*10491SRishi.Srivatsavai@Sun.COM   Bool              rcvdTcn;       /* 17.18.27 */
115*10491SRishi.Srivatsavai@Sun.COM   Bool              reRoot;        /* 17.18.28 */
116*10491SRishi.Srivatsavai@Sun.COM   Bool              reselect;      /* 17.18.29 */
117*10491SRishi.Srivatsavai@Sun.COM   PORT_ROLE_T       role;          /* 17.18.30 */
118*10491SRishi.Srivatsavai@Sun.COM   Bool              selected;      /* 17.18.31 */
119*10491SRishi.Srivatsavai@Sun.COM   PORT_ROLE_T       selectedRole;  /* 17.18.32 */
120*10491SRishi.Srivatsavai@Sun.COM   Bool              sendRSTP;      /* 17.18.33 */
121*10491SRishi.Srivatsavai@Sun.COM   Bool              sync;          /* 17.18.34 */
122*10491SRishi.Srivatsavai@Sun.COM   Bool              synced;        /* 17.18.35 */
123*10491SRishi.Srivatsavai@Sun.COM   Bool              tc;            /* 17.18.36 */
124*10491SRishi.Srivatsavai@Sun.COM   Bool              tcAck;         /* 17.18.37 */
125*10491SRishi.Srivatsavai@Sun.COM   Bool              tcProp;        /* 17.18.38 */
126*10491SRishi.Srivatsavai@Sun.COM 
127*10491SRishi.Srivatsavai@Sun.COM   Bool              updtInfo;      /* 17.18.41 */
128*10491SRishi.Srivatsavai@Sun.COM 
129*10491SRishi.Srivatsavai@Sun.COM   /* message information */
130*10491SRishi.Srivatsavai@Sun.COM   unsigned char     msgBpduVersion;
131*10491SRishi.Srivatsavai@Sun.COM   unsigned char     msgBpduType;
132*10491SRishi.Srivatsavai@Sun.COM   unsigned char     msgPortRole;
133*10491SRishi.Srivatsavai@Sun.COM   unsigned char     msgFlags;
134*10491SRishi.Srivatsavai@Sun.COM 
135*10491SRishi.Srivatsavai@Sun.COM   unsigned long     adminPCost; /* may be ADMIN_PORT_PATH_COST_AUTO */
136*10491SRishi.Srivatsavai@Sun.COM   unsigned long     operPCost;
137*10491SRishi.Srivatsavai@Sun.COM   unsigned long     operSpeed;
138*10491SRishi.Srivatsavai@Sun.COM   unsigned long     usedSpeed;
139*10491SRishi.Srivatsavai@Sun.COM   int               LinkDelay;   /* TBD: LinkDelay may be managed ? */
140*10491SRishi.Srivatsavai@Sun.COM   Bool              adminEnable; /* 'has LINK' */
141*10491SRishi.Srivatsavai@Sun.COM   Bool              wasInitBpdu;
142*10491SRishi.Srivatsavai@Sun.COM   Bool              admin_non_stp;
143*10491SRishi.Srivatsavai@Sun.COM 
144*10491SRishi.Srivatsavai@Sun.COM   Bool              p2p_recompute;
145*10491SRishi.Srivatsavai@Sun.COM   Bool              operPointToPointMac;
146*10491SRishi.Srivatsavai@Sun.COM   ADMIN_P2P_T       adminPointToPointMac;
147*10491SRishi.Srivatsavai@Sun.COM 
148*10491SRishi.Srivatsavai@Sun.COM   /* statistics */
149*10491SRishi.Srivatsavai@Sun.COM   unsigned long     rx_cfg_bpdu_cnt;
150*10491SRishi.Srivatsavai@Sun.COM   unsigned long     rx_rstp_bpdu_cnt;
151*10491SRishi.Srivatsavai@Sun.COM   unsigned long     rx_tcn_bpdu_cnt;
152*10491SRishi.Srivatsavai@Sun.COM 
153*10491SRishi.Srivatsavai@Sun.COM   unsigned long     uptime;       /* 14.8.2.1.3.a */
154*10491SRishi.Srivatsavai@Sun.COM 
155*10491SRishi.Srivatsavai@Sun.COM   int               port_index;
156*10491SRishi.Srivatsavai@Sun.COM   char*             port_name;
157*10491SRishi.Srivatsavai@Sun.COM 
158*10491SRishi.Srivatsavai@Sun.COM #ifdef STP_DBG
159*10491SRishi.Srivatsavai@Sun.COM   unsigned int	    skip_rx;
160*10491SRishi.Srivatsavai@Sun.COM   unsigned int	    skip_tx;
161*10491SRishi.Srivatsavai@Sun.COM #endif
162*10491SRishi.Srivatsavai@Sun.COM } PORT_T;
163*10491SRishi.Srivatsavai@Sun.COM 
164*10491SRishi.Srivatsavai@Sun.COM PORT_T*
165*10491SRishi.Srivatsavai@Sun.COM STP_port_create (struct stpm_t* stpm, int port_index);
166*10491SRishi.Srivatsavai@Sun.COM 
167*10491SRishi.Srivatsavai@Sun.COM void
168*10491SRishi.Srivatsavai@Sun.COM STP_port_delete (PORT_T* this);
169*10491SRishi.Srivatsavai@Sun.COM 
170*10491SRishi.Srivatsavai@Sun.COM int
171*10491SRishi.Srivatsavai@Sun.COM STP_port_rx_bpdu (PORT_T* this, BPDU_T* bpdu, size_t len);
172*10491SRishi.Srivatsavai@Sun.COM 
173*10491SRishi.Srivatsavai@Sun.COM void
174*10491SRishi.Srivatsavai@Sun.COM STP_port_init (PORT_T* this, struct stpm_t* stpm, Bool check_link);
175*10491SRishi.Srivatsavai@Sun.COM 
176*10491SRishi.Srivatsavai@Sun.COM #ifdef STP_DBG
177*10491SRishi.Srivatsavai@Sun.COM int
178*10491SRishi.Srivatsavai@Sun.COM STP_port_trace_state_machine (PORT_T* this, char* mach_name, int enadis);
179*10491SRishi.Srivatsavai@Sun.COM 
180*10491SRishi.Srivatsavai@Sun.COM void
181*10491SRishi.Srivatsavai@Sun.COM STP_port_trace_flags (char* title, PORT_T* this);
182*10491SRishi.Srivatsavai@Sun.COM #endif
183*10491SRishi.Srivatsavai@Sun.COM 
184*10491SRishi.Srivatsavai@Sun.COM #endif /*  _STP_PORT_H__ */
185*10491SRishi.Srivatsavai@Sun.COM 
186