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/* OSPF Interface State Machine Event. */ 39#define ISM_NoEvent 0 40#define ISM_InterfaceUp 1 41#define ISM_WaitTimer 2 42#define ISM_BackupSeen 3 43#define ISM_NeighborChange 4 44#define ISM_LoopInd 5 45#define ISM_UnloopInd 6 46#define ISM_InterfaceDown 7 47#define OSPF_ISM_EVENT_MAX 8 48 49#define OSPF_ISM_WRITE_ON() \ 50 do \ 51 { \ 52 if (oi->on_write_q == 0) \ 53 { \ 54 listnode_add (ospf_top->oi_write_q, oi); \ 55 oi->on_write_q = 1; \ 56 } \ 57 if (ospf_top->t_write == NULL) \ 58 ospf_top->t_write = \ 59 thread_add_write (master, ospf_write, ospf_top, ospf_top->fd); \ 60 } while (0) 61 62/* Macro for OSPF ISM timer turn on. */ 63#define OSPF_ISM_TIMER_ON(T,F,V) \ 64 if (!(T)) \ 65 (T) = thread_add_timer (master, (F), oi, (V)) 66 67/* Macro for OSPF ISM timer turn off. */ 68#define OSPF_ISM_TIMER_OFF(X) \ 69 if (X) \ 70 { \ 71 thread_cancel (X); \ 72 (X) = NULL; \ 73 } 74 75/* Macro for OSPF schedule event. */ 76#define OSPF_ISM_EVENT_SCHEDULE(I,E) \ 77 thread_add_event (master, ospf_ism_event, (I), (E)) 78 79/* Macro for OSPF execute event. */ 80#define OSPF_ISM_EVENT_EXECUTE(I,E) \ 81 thread_execute (master, ospf_ism_event, (I), (E)) 82 83/* Prototypes. */ 84int ospf_ism_event (struct thread *); 85void ism_change_status (struct ospf_interface *, int); 86int ospf_hello_timer (struct thread *thread); 87 88#endif /* _ZEBRA_OSPF_ISM_H */ 89