summaryrefslogtreecommitdiff
path: root/usr/src/lib/librstp/common/port.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/librstp/common/port.h')
-rw-r--r--usr/src/lib/librstp/common/port.h185
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__ */
+