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

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. /* This file contains system dependent API
  23.    from the RStp to a operation system (see stp_to.h) */
  24. /* stp_to API for Linux */
  25. #include <stddef.h>
  26. #include <stdio.h>
  27. #include <stdarg.h>
  28. #include <time.h>
  29. #include <unistd.h>
  30. #include "base.h"
  31. #include "stpm.h"
  32. #include "stp_in.h"
  33. #include "stp_to.h"
  34. extern BITMAP_T        enabled_ports;
  35. /*************
  36. void
  37. stp_trace (const char *format, ...)
  38. {
  39.   #define MAX_MSG_LEN  128
  40.   char     msg[MAX_MSG_LEN];
  41.   va_list  args;
  42.   va_start(args, format);
  43.   vsnprintf (msg, MAX_MSG_LEN-1, format, args);
  44.   printf ("%sn", msg);
  45.   va_end(args);
  46.   
  47. }
  48. ***********/
  49. #ifdef STRONGLY_SPEC_802_1W
  50. int
  51. STP_OUT_set_learning (int port_index, int vlan_id, int enable)
  52. {
  53.   return STP_OK;
  54. }
  55. int
  56. STP_OUT_set_forwarding (int port_index, int vlan_id, int enable)
  57. {
  58.   return STP_OK;
  59. }
  60. #else
  61. /* 
  62.  * In many kinds of hardware the state of ports may
  63.  * be changed with another method
  64.  */
  65. int
  66. STP_OUT_set_port_state (IN int port_index, IN int vlan_id,
  67.             IN RSTP_PORT_STATE state)
  68. {
  69.   return STP_OK;
  70.   //return AR_INT_STP_set_port_state (port_index, vlan_id, state);
  71. }
  72. #endif
  73. void
  74. STP_OUT_get_port_mac (int port_index, unsigned char *mac)
  75. {
  76.   static long pid = -1;
  77.   static unsigned char mac_beg[] = {'', '', '', '', '', ''};
  78.   if (pid < 0) {
  79.     pid = getpid ();
  80.     memcpy (mac_beg + 1, &pid, 4);
  81.   }
  82.   memcpy (mac, mac_beg, 5);
  83.   mac[5] = port_index;
  84.   //memcpy (mac, STP_MAIN_get_port_mac (port_index), 6);
  85. }
  86. int             /* 1- Up, 0- Down */
  87. STP_OUT_get_port_link_status (int port_index)
  88. {
  89.   if (BitmapGetBit (&enabled_ports, (port_index - 1))) return 1;
  90.   return 0;
  91. }
  92. int
  93. STP_OUT_flush_lt (IN int port_index, IN int vlan_id, LT_FLASH_TYPE_T type, char* reason)
  94. {
  95. /****
  96.   stp_trace("clearFDB (%d, %s, '%s')",
  97.         port_index, 
  98.         (type == LT_FLASH_ALL_PORTS_EXCLUDE_THIS) ? "Exclude" : "Only", 
  99.         reason);
  100. ****/
  101.   return STP_OK;
  102. }
  103. int
  104. STP_OUT_set_hardware_mode (int vlan_id, UID_STP_MODE_T mode)
  105. {
  106.   return STP_OK;
  107.   //return AR_INT_STP_set_mode (vlan_id, mode);
  108. }
  109. int
  110. STP_OUT_tx_bpdu (int port_index, int vlan_id,
  111.          unsigned char *bpdu, size_t bpdu_len)
  112. {
  113. extern int bridge_tx_bpdu (int port_index, unsigned char *bpdu, size_t bpdu_len);
  114.   return bridge_tx_bpdu (port_index, bpdu, bpdu_len);
  115. }
  116. const char *
  117. STP_OUT_get_port_name (IN int port_index)
  118. {
  119.   static char tmp[4];
  120.   sprintf (tmp, "p%02d", (int) port_index);
  121.   return tmp;
  122.   //return port2str (port_index, &sys_config);
  123. }
  124. unsigned long
  125. STP_OUT_get_deafult_port_path_cost (IN unsigned int portNo)
  126. {
  127.   return 20000;
  128. }
  129. unsigned long STP_OUT_get_port_oper_speed (unsigned int portNo)
  130. {
  131.   if (portNo <= 2)
  132.     return 1000000L;
  133.   else
  134.     return 1000L;
  135. }
  136. int             /* 1- Full, 0- Half */
  137. STP_OUT_get_duplex (IN int port_index)
  138. {
  139.   return 1;
  140. }
  141. int
  142. STP_OUT_get_init_stpm_cfg (IN int vlan_id,
  143.                            INOUT UID_STP_CFG_T* cfg)
  144. {
  145.   cfg->bridge_priority =        DEF_BR_PRIO;
  146.   cfg->max_age =                DEF_BR_MAXAGE;
  147.   cfg->hello_time =             DEF_BR_HELLOT;
  148.   cfg->forward_delay =          DEF_BR_FWDELAY;
  149.   cfg->force_version =          NORMAL_RSTP;
  150.   return STP_OK;
  151. }
  152.   
  153. int
  154. STP_OUT_get_init_port_cfg (IN int vlan_id,
  155.                            IN int port_index,
  156.                            INOUT UID_STP_PORT_CFG_T* cfg)
  157. {
  158.   cfg->port_priority =                  DEF_PORT_PRIO;
  159.   cfg->admin_non_stp =                  DEF_ADMIN_NON_STP;
  160.   cfg->admin_edge =                     DEF_ADMIN_EDGE;
  161.   cfg->admin_port_path_cost =           ADMIN_PORT_PATH_COST_AUTO;
  162.   cfg->admin_point2point =              DEF_P2P;
  163.   return STP_OK;
  164. }