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