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

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 API from an operation system to the RSTP library */
  23. #include "base.h"
  24. #include "stpm.h"
  25. #include "stp_in.h" /* for bridge defaults */
  26. #include "stp_to.h"
  27. int
  28. STP_IN_stpm_create (int vlan_id, char* name, BITMAP_T* port_bmp)
  29. {
  30.   register STPM_T*  this;
  31.   int               err_code;
  32.   UID_STP_CFG_T init_cfg;
  33.    
  34.   stp_trace ("STP_IN_stpm_create(%s)", name);
  35.   init_cfg.field_mask = BR_CFG_ALL;
  36.   STP_OUT_get_init_stpm_cfg (vlan_id, &init_cfg);
  37.   init_cfg.field_mask = 0;
  38.   RSTP_CRITICAL_PATH_START;  
  39.   this = stp_in_stpm_create (vlan_id, name, port_bmp, &err_code);
  40.   if (this) {
  41.     this->BrId.prio = init_cfg.bridge_priority;
  42.     this->BrTimes.MaxAge = init_cfg.max_age;
  43.     this->BrTimes.HelloTime = init_cfg.hello_time;
  44.     this->BrTimes.ForwardDelay = init_cfg.forward_delay;
  45.     this->ForceVersion = (PROTOCOL_VERSION_T) init_cfg.force_version;
  46.   }
  47.   RSTP_CRITICAL_PATH_END;
  48.   return err_code;  
  49. }
  50. int
  51. STP_IN_stpm_delete (int vlan_id)
  52. {
  53.   register STPM_T* this;
  54.   int iret = 0;
  55.   RSTP_CRITICAL_PATH_START;  
  56.   this = stpapi_stpm_find (vlan_id);
  57.   if (! this) { /* it had not yet been created :( */
  58.     iret = STP_Vlan_Had_Not_Yet_Been_Created;
  59.   } else {
  60.     if (STP_ENABLED == this->admin_state) {
  61.       if (0 != STP_stpm_enable (this, STP_DISABLED)) {/* can't disable :( */
  62.         iret = STP_Another_Error;
  63.       } else
  64.         STP_OUT_set_hardware_mode (vlan_id, STP_DISABLED);
  65.     }
  66.     if (0 == iret) {
  67.       STP_stpm_delete (this);   
  68.     }
  69.   }
  70.   RSTP_CRITICAL_PATH_END;
  71.   return iret;
  72. }
  73. int
  74. STP_IN_stpm_get_vlan_id_by_name (char* name, int* vlan_id)
  75. {
  76.   register STPM_T* stpm;
  77.   int iret = STP_Cannot_Find_Vlan;
  78.   RSTP_CRITICAL_PATH_START;  
  79.   for (stpm = STP_stpm_get_the_list (); stpm; stpm = stpm->next) {
  80.     if (stpm->name && ! strcmp (stpm->name, name)) {
  81.       *vlan_id = stpm->vlan_id;
  82.       iret = 0;
  83.       break;
  84.     }
  85.   }
  86.   RSTP_CRITICAL_PATH_END;
  87.   return iret;
  88. }
  89.     
  90. Bool
  91. STP_IN_get_is_stpm_enabled (int vlan_id)
  92. {
  93.   STPM_T* this;
  94.   Bool iret = False;
  95.   RSTP_CRITICAL_PATH_START;  
  96.   this = stpapi_stpm_find (vlan_id);
  97.   
  98.   if (this) { 
  99.     if (this->admin_state == STP_ENABLED) {
  100.       iret = True;
  101.     }
  102.   } else {
  103.     ;   /* it had not yet been created :( */
  104.   }
  105.   
  106.   RSTP_CRITICAL_PATH_END;
  107.   return iret;
  108. }
  109. int
  110. STP_IN_stop_all (void)
  111. {
  112.   register STPM_T* stpm;
  113.   RSTP_CRITICAL_PATH_START;
  114.   
  115.   for (stpm = STP_stpm_get_the_list (); stpm; stpm = stpm->next) {
  116.     if (STP_DISABLED != stpm->admin_state) {
  117.       STP_OUT_set_hardware_mode (stpm->vlan_id, STP_DISABLED);
  118.       STP_stpm_enable (stpm, STP_DISABLED);
  119.     }
  120.   }
  121.   RSTP_CRITICAL_PATH_END;
  122.   return 0;
  123. int
  124. STP_IN_delete_all (void)
  125. {
  126.   register STPM_T* stpm;
  127.   RSTP_CRITICAL_PATH_START;
  128.   for (stpm = STP_stpm_get_the_list (); stpm; stpm = stpm->next) {
  129.     STP_stpm_enable (stpm, STP_DISABLED);
  130.     STP_stpm_delete (stpm);
  131.   }
  132.   RSTP_CRITICAL_PATH_END;
  133.   return 0;
  134. }