#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;
STATE_MACH_T* info;
STATE_MACH_T* roletrns;
STATE_MACH_T* sttrans;
STATE_MACH_T* topoch;
STATE_MACH_T* migrate;
STATE_MACH_T* transmit;
STATE_MACH_T* p2p;
STATE_MACH_T* edge;
STATE_MACH_T* pcost;
STATE_MACH_T* machines;
struct stpm_t* owner;
PORT_TIMER_T fdWhile;
PORT_TIMER_T helloWhen;
PORT_TIMER_T mdelayWhile;
PORT_TIMER_T rbWhile;
PORT_TIMER_T rcvdInfoWhile;
PORT_TIMER_T rrWhile;
PORT_TIMER_T tcWhile;
PORT_TIMER_T txCount;
PORT_TIMER_T lnkWhile;
PORT_TIMER_T* timers[TIMERS_NUMBER];
Bool agreed;
PRIO_VECTOR_T designPrio;
TIMEVALUES_T designTimes;
Bool forward;
Bool forwarding;
INFO_IS_T infoIs;
Bool initPm;
Bool learn;
Bool learning;
Bool mcheck;
PRIO_VECTOR_T msgPrio;
TIMEVALUES_T msgTimes;
Bool newInfo;
Bool operEdge;
Bool adminEdge;
Bool portEnabled;
PORT_ID port_id;
PRIO_VECTOR_T portPrio;
TIMEVALUES_T portTimes;
Bool proposed;
Bool proposing;
Bool rcvdBpdu;
RCVD_MSG_T rcvdMsg;
Bool rcvdRSTP;
Bool rcvdSTP;
Bool rcvdTc;
Bool rcvdTcAck;
Bool rcvdTcn;
Bool reRoot;
Bool reselect;
PORT_ROLE_T role;
Bool selected;
PORT_ROLE_T selectedRole;
Bool sendRSTP;
Bool sync;
Bool synced;
Bool tc;
Bool tcAck;
Bool tcProp;
Bool updtInfo;
unsigned char msgBpduVersion;
unsigned char msgBpduType;
unsigned char msgPortRole;
unsigned char msgFlags;
unsigned long adminPCost;
unsigned long operPCost;
unsigned long operSpeed;
unsigned long usedSpeed;
int LinkDelay;
Bool adminEnable;
Bool wasInitBpdu;
Bool admin_non_stp;
Bool p2p_recompute;
Bool operPointToPointMac;
ADMIN_P2P_T adminPointToPointMac;
unsigned long rx_cfg_bpdu_cnt;
unsigned long rx_rstp_bpdu_cnt;
unsigned long rx_tcn_bpdu_cnt;
unsigned long uptime;
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