port.h
上传用户:allwinjm
上传日期:2021-08-29
资源大小:99k
文件大小:6k
源码类别:

Internet/IE编程

开发平台:

Unix_Linux

  1. /************************************************************************ 
  2.  * RSTP library - Rapid Spanning Tree (802.1t, 802.1w) 
  3.  * Copyright (C) 2001-2003 Optical Access 
  4.  * Author: Alex Rozin 
  5.  * 
  6.  * This file is part of RSTP library. 
  7.  * 
  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 
  11.  * 
  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. 
  16.  * 
  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 
  20.  * 02111-1307, USA. 
  21.  **********************************************************************/
  22. /* STP PORT instance : 17.18, 17.15 */
  23.  
  24. #ifndef _STP_PORT_H__
  25. #define _STP_PORT_H__
  26. #include "statmch.h"
  27. #define TIMERS_NUMBER   9
  28. typedef unsigned int    PORT_TIMER_T;
  29. typedef enum {
  30.   Mine,
  31.   Aged,
  32.   Received,
  33.   Disabled
  34. } INFO_IS_T;
  35. typedef enum {
  36.   SuperiorDesignateMsg,
  37.   RepeatedDesignateMsg,
  38.   ConfirmedRootMsg,
  39.   OtherMsg
  40. } RCVD_MSG_T;
  41. typedef enum {
  42.   DisabledPort = 0,
  43.   AlternatePort,
  44.   BackupPort,
  45.   RootPort,
  46.   DesignatedPort,
  47.   NonStpPort
  48. } PORT_ROLE_T;
  49. typedef struct port_t {
  50.   struct port_t*     next;
  51.   /* per Port state machines */
  52.   STATE_MACH_T*     info;      /* 17.21 */
  53.   STATE_MACH_T*     roletrns;  /* 17.23 */
  54.   STATE_MACH_T*     sttrans;   /* 17.24 */
  55.   STATE_MACH_T*     topoch;    /* 17.25 */
  56.   STATE_MACH_T*     migrate;   /* 17.26 */
  57.   STATE_MACH_T*     transmit;  /* 17.26 */
  58.   STATE_MACH_T*     p2p;       /* 6.4.3, 6.5.1 */
  59.   STATE_MACH_T*     edge;      /*  */
  60.   STATE_MACH_T*     pcost;     /*  */
  61.   STATE_MACH_T*     machines; /* list of machines */
  62.   struct stpm_t*    owner; /* Bridge, that this port belongs to */
  63.   
  64.   /* per port Timers */
  65.   PORT_TIMER_T      fdWhile;      /* 17.15.1 */
  66.   PORT_TIMER_T      helloWhen;    /* 17.15.2 */
  67.   PORT_TIMER_T      mdelayWhile;  /* 17.15.3 */
  68.   PORT_TIMER_T      rbWhile;      /* 17.15.4 */
  69.   PORT_TIMER_T      rcvdInfoWhile;/* 17.15.5 */
  70.   PORT_TIMER_T      rrWhile;      /* 17.15.6 */
  71.   PORT_TIMER_T      tcWhile;      /* 17.15.7 */
  72.   PORT_TIMER_T      txCount;      /* 17.18.40 */
  73.   PORT_TIMER_T      lnkWhile;
  74.   PORT_TIMER_T*     timers[TIMERS_NUMBER]; /*list of timers */
  75.   Bool              agreed;        /* 17.18.1 */
  76.   PRIO_VECTOR_T     designPrio;    /* 17.18.2 */
  77.   TIMEVALUES_T      designTimes;   /* 17.18.3 */
  78.   Bool              forward;       /* 17.18.4 */
  79.   Bool              forwarding;    /* 17.18.5 */
  80.   INFO_IS_T         infoIs;        /* 17.18.6 */
  81.   Bool              initPm;        /* 17.18.7  */
  82.   Bool              learn;         /* 17.18.8 */
  83.   Bool              learning;      /* 17.18.9 */
  84.   Bool              mcheck;        /* 17.18.10 */
  85.   PRIO_VECTOR_T     msgPrio;       /* 17.18.11 */
  86.   TIMEVALUES_T      msgTimes;      /* 17.18.12 */
  87.   Bool              newInfo;       /* 17.18.13 */
  88.   Bool              operEdge;      /* 17.18.14 */
  89.   Bool              adminEdge;     /* 17.18.14 */
  90.   Bool              portEnabled;   /* 17.18.15 */
  91.   PORT_ID           port_id;       /* 17.18.16 */
  92.   PRIO_VECTOR_T     portPrio;      /* 17.18.17 */
  93.   TIMEVALUES_T      portTimes;     /* 17.18.18 */
  94.   Bool              proposed;      /* 17.18.19 */
  95.   Bool              proposing;     /* 17.18.20 */
  96.   Bool              rcvdBpdu;      /* 17.18.21 */
  97.   RCVD_MSG_T        rcvdMsg;       /* 17.18.22 */
  98.   Bool              rcvdRSTP;      /* 17/18.23 */
  99.   Bool              rcvdSTP;       /* 17.18.24 */
  100.   Bool              rcvdTc;        /* 17.18.25 */
  101.   Bool              rcvdTcAck;     /* 17.18.26 */
  102.   Bool              rcvdTcn;       /* 17.18.27 */
  103.   Bool              reRoot;        /* 17.18.28 */
  104.   Bool              reselect;      /* 17.18.29 */
  105.   PORT_ROLE_T       role;          /* 17.18.30 */
  106.   Bool              selected;      /* 17.18.31 */
  107.   PORT_ROLE_T       selectedRole;  /* 17.18.32 */
  108.   Bool              sendRSTP;      /* 17.18.33 */
  109.   Bool              sync;          /* 17.18.34 */
  110.   Bool              synced;        /* 17.18.35 */
  111.   Bool              tc;            /* 17.18.36 */
  112.   Bool              tcAck;         /* 17.18.37 */
  113.   Bool              tcProp;        /* 17.18.38 */
  114.   Bool              updtInfo;      /* 17.18.41 */
  115.   /* message information */
  116.   unsigned char     msgBpduVersion;
  117.   unsigned char     msgBpduType;
  118.   unsigned char     msgPortRole;
  119.   unsigned char     msgFlags;
  120.   unsigned long     adminPCost; /* may be ADMIN_PORT_PATH_COST_AUTO */
  121.   unsigned long     operPCost;
  122.   unsigned long     operSpeed;
  123.   unsigned long     usedSpeed;
  124.   int               LinkDelay;   /* TBD: LinkDelay may be managed ? */
  125.   Bool              adminEnable; /* 'has LINK' */
  126.   Bool              wasInitBpdu;  
  127.   Bool              admin_non_stp;
  128.   Bool              p2p_recompute;
  129.   Bool              operPointToPointMac;
  130.   ADMIN_P2P_T       adminPointToPointMac;
  131.   /* statistics */
  132.   unsigned long     rx_cfg_bpdu_cnt;
  133.   unsigned long     rx_rstp_bpdu_cnt;
  134.   unsigned long     rx_tcn_bpdu_cnt;
  135.   unsigned long     uptime;       /* 14.8.2.1.3.a */
  136.   int               port_index;
  137.   char*             port_name;
  138. #ifdef STP_DBG
  139.   unsigned int     skip_rx;
  140.   unsigned int     skip_tx;
  141. #endif
  142. } PORT_T;
  143. PORT_T*
  144. STP_port_create (struct stpm_t* stpm, int port_index);
  145. void
  146. STP_port_delete (PORT_T* this);
  147. int
  148. STP_port_rx_bpdu (PORT_T* this, BPDU_T* bpdu, size_t len);
  149. void
  150. STP_port_init (PORT_T* this, struct stpm_t* stpm, Bool check_link);
  151. #ifdef STP_DBG
  152. int
  153. STP_port_trace_state_machine (PORT_T* this, char* mach_name, int enadis, int vlan_id);
  154. void
  155. STP_port_trace_flags (char* title, PORT_T* this);
  156. #endif
  157. #endif /*  _STP_PORT_H__ */