Annotation of embedaddon/quagga/ospfd/ospf_ism.h, revision 1.1.1.1

1.1       misho       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>