File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / ospfd / ospf_ism.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:12 2012 UTC (12 years, 4 months ago) by misho
Branches: quagga, MAIN
CVS tags: v1_0_20160315, v0_99_22p0, v0_99_22, v0_99_21, v0_99_20_1, v0_99_20, HEAD
quagga

    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: 
   24: #ifndef _ZEBRA_OSPF_ISM_H
   25: #define _ZEBRA_OSPF_ISM_H
   26: 
   27: /* OSPF Interface State Machine Status. */
   28: #define ISM_DependUpon                    0
   29: #define ISM_Down                          1
   30: #define ISM_Loopback                      2
   31: #define ISM_Waiting                       3
   32: #define ISM_PointToPoint                  4
   33: #define ISM_DROther                       5
   34: #define ISM_Backup                        6
   35: #define ISM_DR                            7
   36: #define OSPF_ISM_STATE_MAX   	          8
   37: 
   38: /* Because DR/DROther values are exhanged wrt RFC */
   39: #define ISM_SNMP(x) (((x) == ISM_DROther) ? ISM_DR : \
   40:                      ((x) == ISM_DR) ? ISM_DROther : (x))
   41: 
   42: /* OSPF Interface State Machine Event. */
   43: #define ISM_NoEvent                       0
   44: #define ISM_InterfaceUp                   1
   45: #define ISM_WaitTimer                     2
   46: #define ISM_BackupSeen                    3
   47: #define ISM_NeighborChange                4
   48: #define ISM_LoopInd                       5
   49: #define ISM_UnloopInd                     6
   50: #define ISM_InterfaceDown                 7
   51: #define OSPF_ISM_EVENT_MAX                8
   52: 
   53: #define OSPF_ISM_WRITE_ON(O)                                                  \
   54:       do                                                                      \
   55:         {                                                                     \
   56:           if (oi->on_write_q == 0)                                            \
   57: 	    {                                                                 \
   58:               listnode_add ((O)->oi_write_q, oi);                             \
   59: 	      oi->on_write_q = 1;                                             \
   60: 	    }                                                                 \
   61: 	  if ((O)->t_write == NULL)                                           \
   62: 	    (O)->t_write =                                                    \
   63: 	      thread_add_write (master, ospf_write, (O), (O)->fd);            \
   64:         } while (0)
   65:      
   66: /* Macro for OSPF ISM timer turn on. */
   67: #define OSPF_ISM_TIMER_ON(T,F,V) \
   68:   do { \
   69:     if (!(T)) \
   70:       (T) = thread_add_timer (master, (F), oi, (V)); \
   71:   } while (0)
   72: #define OSPF_ISM_TIMER_MSEC_ON(T,F,V) \
   73:   do { \
   74:     if (!(T)) \
   75:       (T) = thread_add_timer_msec (master, (F), oi, (V)); \
   76:   } while (0)
   77: 
   78: /* convenience macro to set hello timer correctly, according to
   79:  * whether fast-hello is set or not
   80:  */
   81: #define OSPF_HELLO_TIMER_ON(O) \
   82:   do { \
   83:     if (OSPF_IF_PARAM ((O), fast_hello)) \
   84:         OSPF_ISM_TIMER_MSEC_ON ((O)->t_hello, ospf_hello_timer, \
   85:                                 1000 / OSPF_IF_PARAM ((O), fast_hello)); \
   86:     else \
   87:         OSPF_ISM_TIMER_ON ((O)->t_hello, ospf_hello_timer, \
   88:                                 OSPF_IF_PARAM ((O), v_hello)); \
   89:   } while (0)
   90: 
   91: /* Macro for OSPF ISM timer turn off. */
   92: #define OSPF_ISM_TIMER_OFF(X) \
   93:   do { \
   94:     if (X) \
   95:       { \
   96: 	thread_cancel (X); \
   97: 	(X) = NULL; \
   98:       } \
   99:   } while (0)
  100: 
  101: /* Macro for OSPF schedule event. */
  102: #define OSPF_ISM_EVENT_SCHEDULE(I,E) \
  103:       thread_add_event (master, ospf_ism_event, (I), (E))
  104: 
  105: /* Macro for OSPF execute event. */
  106: #define OSPF_ISM_EVENT_EXECUTE(I,E) \
  107:       thread_execute (master, ospf_ism_event, (I), (E))
  108: 
  109: /* Prototypes. */
  110: extern int ospf_ism_event (struct thread *);
  111: extern void ism_change_status (struct ospf_interface *, int);
  112: extern int ospf_hello_timer (struct thread *thread);
  113: 
  114: #endif /* _ZEBRA_OSPF_ISM_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>