ospf_ism.h
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:3k
源码类别:

网络

开发平台:

Unix_Linux

  1. /*
  2.  * OSPF version 2  Interface State Machine.
  3.  *   From RFC2328 [OSPF Version 2]
  4.  * Copyright (C) 1999 Toshiaki Takada
  5.  *
  6.  * This file is part of GNU Zebra.
  7.  *
  8.  * GNU Zebra is free software; you can redistribute it and/or modify it
  9.  * under the terms of the GNU General Public License as published by the
  10.  * Free Software Foundation; either version 2, or (at your option) any
  11.  * later version.
  12.  *
  13.  * GNU Zebra is distributed in the hope that it will be useful, but
  14.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.  * General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with GNU Zebra; see the file COPYING.  If not, write to the Free
  20.  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  21.  * 02111-1307, USA.
  22.  */
  23. #ifndef _ZEBRA_OSPF_ISM_H
  24. #define _ZEBRA_OSPF_ISM_H
  25. /* OSPF Interface State Machine Status. */
  26. #define ISM_DependUpon                    0
  27. #define ISM_Down                          1
  28. #define ISM_Loopback                      2
  29. #define ISM_Waiting                       3
  30. #define ISM_PointToPoint                  4
  31. #define ISM_DROther                       5
  32. #define ISM_Backup                        6
  33. #define ISM_DR                            7
  34. #define OSPF_ISM_STATE_MAX              8
  35. /* OSPF Interface State Machine Event. */
  36. #define ISM_NoEvent                       0
  37. #define ISM_InterfaceUp                   1
  38. #define ISM_WaitTimer                     2
  39. #define ISM_BackupSeen                    3
  40. #define ISM_NeighborChange                4
  41. #define ISM_LoopInd                       5
  42. #define ISM_UnloopInd                     6
  43. #define ISM_InterfaceDown                 7
  44. #define OSPF_ISM_EVENT_MAX                8
  45. #define OSPF_ISM_WRITE_ON(O)                                                  
  46.       do                                                                      
  47.         {                                                                     
  48.           if (oi->on_write_q == 0)                                            
  49.     {                                                                 
  50.               listnode_add ((O)->oi_write_q, oi);                             
  51.       oi->on_write_q = 1;                                             
  52.     }                                                                 
  53.   if ((O)->t_write == NULL)                                           
  54.     (O)->t_write =                                                    
  55.       thread_add_write (master, ospf_write, (O), (O)->fd);            
  56.         } while (0)
  57.      
  58. /* Macro for OSPF ISM timer turn on. */
  59. #define OSPF_ISM_TIMER_ON(T,F,V) 
  60.       if (!(T)) 
  61.         (T) = thread_add_timer (master, (F), oi, (V))
  62. /* Macro for OSPF ISM timer turn off. */
  63. #define OSPF_ISM_TIMER_OFF(X) 
  64.       if (X) 
  65.         { 
  66.           thread_cancel (X); 
  67.           (X) = NULL; 
  68.         }
  69. /* Macro for OSPF schedule event. */
  70. #define OSPF_ISM_EVENT_SCHEDULE(I,E) 
  71.       thread_add_event (master, ospf_ism_event, (I), (E))
  72. /* Macro for OSPF execute event. */
  73. #define OSPF_ISM_EVENT_EXECUTE(I,E) 
  74.       thread_execute (master, ospf_ism_event, (I), (E))
  75. /* Prototypes. */
  76. int ospf_ism_event (struct thread *);
  77. void ism_change_status (struct ospf_interface *, int);
  78. int ospf_hello_timer (struct thread *thread);
  79. #endif /* _ZEBRA_OSPF_ISM_H */