diff options
Diffstat (limited to 'usr/src/lib/librstp/common/port.h')
| -rw-r--r-- | usr/src/lib/librstp/common/port.h | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/usr/src/lib/librstp/common/port.h b/usr/src/lib/librstp/common/port.h new file mode 100644 index 0000000000..03556eade1 --- /dev/null +++ b/usr/src/lib/librstp/common/port.h @@ -0,0 +1,185 @@ +/************************************************************************ + * RSTP library - Rapid Spanning Tree (802.1t, 802.1w) + * Copyright (C) 2001-2003 Optical Access + * Author: Alex Rozin + * + * This file is part of RSTP library. + * + * RSTP library is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation; version 2.1 + * + * RSTP library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with RSTP library; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + **********************************************************************/ + +/* STP PORT instance : 17.18, 17.15 */ + +#ifndef _STP_PORT_H__ +#define _STP_PORT_H__ + +#include "statmch.h" + +#define TIMERS_NUMBER 9 +typedef unsigned int PORT_TIMER_T; + +typedef enum { + Mine, + Aged, + Received, + Disabled +} INFO_IS_T; + +typedef enum { + SuperiorDesignateMsg, + RepeatedDesignateMsg, + ConfirmedRootMsg, + OtherMsg +} RCVD_MSG_T; + +typedef enum { + DisabledPort = 0, + AlternatePort, + BackupPort, + RootPort, + DesignatedPort, + NonStpPort +} PORT_ROLE_T; + +typedef struct port_t { + struct port_t* next; + + /* per Port state machines */ + STATE_MACH_T* info; /* 17.21 */ + STATE_MACH_T* roletrns; /* 17.23 */ + STATE_MACH_T* sttrans; /* 17.24 */ + STATE_MACH_T* topoch; /* 17.25 */ + STATE_MACH_T* migrate; /* 17.26 */ + STATE_MACH_T* transmit; /* 17.26 */ + STATE_MACH_T* p2p; /* 6.4.3, 6.5.1 */ + STATE_MACH_T* edge; /* */ + STATE_MACH_T* pcost; /* */ + + STATE_MACH_T* machines; /* list of machines */ + + struct stpm_t* owner; /* Bridge, that this port belongs to */ + + /* per port Timers */ + PORT_TIMER_T fdWhile; /* 17.15.1 */ + PORT_TIMER_T helloWhen; /* 17.15.2 */ + PORT_TIMER_T mdelayWhile; /* 17.15.3 */ + PORT_TIMER_T rbWhile; /* 17.15.4 */ + PORT_TIMER_T rcvdInfoWhile;/* 17.15.5 */ + PORT_TIMER_T rrWhile; /* 17.15.6 */ + PORT_TIMER_T tcWhile; /* 17.15.7 */ + PORT_TIMER_T txCount; /* 17.18.40 */ + PORT_TIMER_T lnkWhile; + + PORT_TIMER_T* timers[TIMERS_NUMBER]; /*list of timers */ + + Bool agreed; /* 17.18.1 */ + PRIO_VECTOR_T designPrio; /* 17.18.2 */ + TIMEVALUES_T designTimes; /* 17.18.3 */ + Bool forward; /* 17.18.4 */ + Bool forwarding; /* 17.18.5 */ + INFO_IS_T infoIs; /* 17.18.6 */ + Bool initPm; /* 17.18.7 */ + Bool learn; /* 17.18.8 */ + Bool learning; /* 17.18.9 */ + Bool mcheck; /* 17.18.10 */ + PRIO_VECTOR_T msgPrio; /* 17.18.11 */ + TIMEVALUES_T msgTimes; /* 17.18.12 */ + Bool newInfo; /* 17.18.13 */ + Bool operEdge; /* 17.18.14 */ + Bool adminEdge; /* 17.18.14 */ + Bool portEnabled; /* 17.18.15 */ + PORT_ID port_id; /* 17.18.16 */ + PRIO_VECTOR_T portPrio; /* 17.18.17 */ + TIMEVALUES_T portTimes; /* 17.18.18 */ + Bool proposed; /* 17.18.19 */ + Bool proposing; /* 17.18.20 */ + Bool rcvdBpdu; /* 17.18.21 */ + RCVD_MSG_T rcvdMsg; /* 17.18.22 */ + Bool rcvdRSTP; /* 17/18.23 */ + Bool rcvdSTP; /* 17.18.24 */ + Bool rcvdTc; /* 17.18.25 */ + Bool rcvdTcAck; /* 17.18.26 */ + Bool rcvdTcn; /* 17.18.27 */ + Bool reRoot; /* 17.18.28 */ + Bool reselect; /* 17.18.29 */ + PORT_ROLE_T role; /* 17.18.30 */ + Bool selected; /* 17.18.31 */ + PORT_ROLE_T selectedRole; /* 17.18.32 */ + Bool sendRSTP; /* 17.18.33 */ + Bool sync; /* 17.18.34 */ + Bool synced; /* 17.18.35 */ + Bool tc; /* 17.18.36 */ + Bool tcAck; /* 17.18.37 */ + Bool tcProp; /* 17.18.38 */ + + Bool updtInfo; /* 17.18.41 */ + + /* message information */ + unsigned char msgBpduVersion; + unsigned char msgBpduType; + unsigned char msgPortRole; + unsigned char msgFlags; + + unsigned long adminPCost; /* may be ADMIN_PORT_PATH_COST_AUTO */ + unsigned long operPCost; + unsigned long operSpeed; + unsigned long usedSpeed; + int LinkDelay; /* TBD: LinkDelay may be managed ? */ + Bool adminEnable; /* 'has LINK' */ + Bool wasInitBpdu; + Bool admin_non_stp; + + Bool p2p_recompute; + Bool operPointToPointMac; + ADMIN_P2P_T adminPointToPointMac; + + /* statistics */ + unsigned long rx_cfg_bpdu_cnt; + unsigned long rx_rstp_bpdu_cnt; + unsigned long rx_tcn_bpdu_cnt; + + unsigned long uptime; /* 14.8.2.1.3.a */ + + int port_index; + char* port_name; + +#ifdef STP_DBG + unsigned int skip_rx; + unsigned int skip_tx; +#endif +} PORT_T; + +PORT_T* +STP_port_create (struct stpm_t* stpm, int port_index); + +void +STP_port_delete (PORT_T* this); + +int +STP_port_rx_bpdu (PORT_T* this, BPDU_T* bpdu, size_t len); + +void +STP_port_init (PORT_T* this, struct stpm_t* stpm, Bool check_link); + +#ifdef STP_DBG +int +STP_port_trace_state_machine (PORT_T* this, char* mach_name, int enadis); + +void +STP_port_trace_flags (char* title, PORT_T* this); +#endif + +#endif /* _STP_PORT_H__ */ + |
