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

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. /* "Times" API : bridgeTime, rootTimes, portTimes, designatedTimes, msgTimes */
  23.  
  24. #include "base.h"
  25. int
  26. STP_compare_times (IN TIMEVALUES_T *t1, IN TIMEVALUES_T *t2)
  27. {
  28.   if (t1->MessageAge < t2->MessageAge)     return -1;
  29.   if (t1->MessageAge > t2->MessageAge)     return  1;
  30.   if (t1->MaxAge < t2->MaxAge)             return -2;
  31.   if (t1->MaxAge > t2->MaxAge)             return  2;
  32.   if (t1->ForwardDelay < t2->ForwardDelay) return -3;
  33.   if (t1->ForwardDelay > t2->ForwardDelay) return  3;
  34.   if (t1->HelloTime < t2->HelloTime)       return -4;
  35.   if (t1->HelloTime > t2->HelloTime)       return  4;
  36.   return 0;
  37. }
  38. void
  39. STP_get_times (IN BPDU_BODY_T *b, OUT TIMEVALUES_T *v)
  40. {
  41.   v->MessageAge =   ntohs (*((unsigned short*) b->message_age))   >> 8;
  42.   v->MaxAge =       ntohs (*((unsigned short*) b->max_age))       >> 8;
  43.   v->ForwardDelay = ntohs (*((unsigned short*) b->forward_delay)) >> 8;
  44.   v->HelloTime =    ntohs (*((unsigned short*) b->hello_time))    >> 8;
  45. }
  46. void
  47. STP_set_times (IN TIMEVALUES_T *v, OUT BPDU_BODY_T *b)
  48. {
  49.   unsigned short mt;
  50.   #define STP_SET_TIME(f, t)        
  51.      mt = htons (f << 8);           
  52.      memcpy (t, &mt, 2); 
  53.   
  54.   STP_SET_TIME(v->MessageAge,   b->message_age);
  55.   STP_SET_TIME(v->MaxAge,       b->max_age);
  56.   STP_SET_TIME(v->ForwardDelay, b->forward_delay);
  57.   STP_SET_TIME(v->HelloTime,    b->hello_time);
  58. }
  59. void 
  60. STP_copy_times (OUT TIMEVALUES_T *t, IN TIMEVALUES_T *f)
  61. {
  62.   t->MessageAge = f->MessageAge;
  63.   t->MaxAge = f->MaxAge;
  64.   t->ForwardDelay = f->ForwardDelay;
  65.   t->HelloTime = f->HelloTime;
  66. }