| 
									
										
										
										
											1999-03-09 22:27:43 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *	BIRD -- OSPF | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  |  *	(c) 1999--2004 Ondrej Filip <feela@network.cz> | 
					
						
							| 
									
										
										
										
											1999-03-09 22:27:43 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  *	Can be freely distributed and used under the terms of the GNU GPL. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _BIRD_OSPF_H_
 | 
					
						
							|  |  |  | #define _BIRD_OSPF_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-05 02:23:20 +00:00
										 |  |  | #define MAXNETS 10
 | 
					
						
							| 
									
										
										
										
											2000-06-06 02:09:58 +00:00
										 |  |  | #ifdef LOCAL_DEBUG
 | 
					
						
							|  |  |  | #define OSPF_FORCE_DEBUG 1
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define OSPF_FORCE_DEBUG 0
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #define OSPF_TRACE(flags, msg, args...) do { if ((p->debug & flags) || OSPF_FORCE_DEBUG) \
 | 
					
						
							|  |  |  |   log(L_TRACE "%s: " msg, p->name , ## args ); } while(0) | 
					
						
							| 
									
										
										
										
											2000-03-30 00:18:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-17 15:50:41 +00:00
										 |  |  | #include "nest/bird.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "lib/checksum.h"
 | 
					
						
							| 
									
										
										
										
											1999-11-10 12:27:01 +00:00
										 |  |  | #include "lib/ip.h"
 | 
					
						
							|  |  |  | #include "lib/lists.h"
 | 
					
						
							| 
									
										
										
										
											2000-03-08 12:50:28 +00:00
										 |  |  | #include "lib/slists.h"
 | 
					
						
							| 
									
										
										
										
											1999-11-10 12:27:01 +00:00
										 |  |  | #include "lib/socket.h"
 | 
					
						
							|  |  |  | #include "lib/timer.h"
 | 
					
						
							|  |  |  | #include "lib/resource.h"
 | 
					
						
							|  |  |  | #include "nest/protocol.h"
 | 
					
						
							|  |  |  | #include "nest/iface.h"
 | 
					
						
							| 
									
										
										
										
											1999-11-17 15:50:41 +00:00
										 |  |  | #include "nest/route.h"
 | 
					
						
							| 
									
										
										
										
											2000-06-01 15:53:06 +00:00
										 |  |  | #include "nest/cli.h"
 | 
					
						
							| 
									
										
										
										
											2000-06-06 00:46:00 +00:00
										 |  |  | #include "nest/locks.h"
 | 
					
						
							| 
									
										
										
										
											1999-11-17 15:50:41 +00:00
										 |  |  | #include "conf/conf.h"
 | 
					
						
							| 
									
										
										
										
											2000-05-04 01:23:03 +00:00
										 |  |  | #include "lib/string.h"
 | 
					
						
							| 
									
										
										
										
											1999-11-10 12:27:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-12 23:54:21 +00:00
										 |  |  | #define OSPF_PROTO 89
 | 
					
						
							| 
									
										
										
										
											1999-04-13 18:21:53 +00:00
										 |  |  | #ifndef IPV6
 | 
					
						
							| 
									
										
										
										
											1999-05-11 15:34:33 +00:00
										 |  |  | #define OSPF_VERSION 2
 | 
					
						
							| 
									
										
										
										
											1999-04-12 23:54:21 +00:00
										 |  |  | #define AllSPFRouters ipa_from_u32(0xe0000005)	/* 224.0.0.5 */
 | 
					
						
							|  |  |  | #define AllDRouters ipa_from_u32(0xe0000006)	/* 224.0.0.6 */
 | 
					
						
							| 
									
										
										
										
											2000-04-30 11:31:05 +00:00
										 |  |  | #define DEFAULTDES ipa_from_u32(0)
 | 
					
						
							| 
									
										
										
										
											1999-04-13 18:21:53 +00:00
										 |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2004-06-06 14:27:11 +00:00
										 |  |  | #error OSPF for IPv6 is not implemented (mail to Feela <feela@network.cz>)
 | 
					
						
							| 
									
										
										
										
											1999-04-13 18:21:53 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-05 00:03:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-04-04 00:32:17 +00:00
										 |  |  | #define LSREFRESHTIME 1800	/* 30 minutes */
 | 
					
						
							| 
									
										
										
										
											2000-01-05 00:03:47 +00:00
										 |  |  | #define MINLSINTERVAL 5
 | 
					
						
							|  |  |  | #define MINLSARRIVAL 1
 | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  | #define LSINFINITY 0xffffff
 | 
					
						
							| 
									
										
										
										
											2004-06-06 14:27:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define DEFAULT_OSPFTICK 5
 | 
					
						
							| 
									
										
										
										
											2004-06-06 16:00:09 +00:00
										 |  |  | #define DEFAULT_AREATICK 4
 | 
					
						
							|  |  |  | #define DEFAULT_RFC1583 1	/* compatibility with rfc1583 */
 | 
					
						
							| 
									
										
										
										
											2004-06-06 14:27:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-05 00:03:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_config | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1999-03-09 22:27:43 +00:00
										 |  |  |   struct proto_config c; | 
					
						
							| 
									
										
										
										
											2004-06-06 16:00:09 +00:00
										 |  |  |   unsigned tick; | 
					
						
							| 
									
										
										
										
											2000-06-02 15:05:41 +00:00
										 |  |  |   int rfc1583; | 
					
						
							| 
									
										
										
										
											2000-06-02 19:55:55 +00:00
										 |  |  |   list area_list; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct nbma_node | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-06-05 23:44:26 +00:00
										 |  |  |   node n; | 
					
						
							|  |  |  |   ip_addr ip; | 
					
						
							| 
									
										
										
										
											2000-09-02 00:03:36 +00:00
										 |  |  |   int eligible; | 
					
						
							| 
									
										
										
										
											2000-06-05 23:44:26 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  | struct area_net_config | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2001-08-12 00:04:42 +00:00
										 |  |  |   node n; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:13:37 +00:00
										 |  |  |   struct prefix px; | 
					
						
							| 
									
										
										
										
											2001-08-12 00:04:42 +00:00
										 |  |  |   int hidden; | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct area_net | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   struct fib_node fn; | 
					
						
							|  |  |  |   int hidden; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:13:37 +00:00
										 |  |  |   int active; | 
					
						
							| 
									
										
										
										
											2001-08-12 00:04:42 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_area_config | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-06-02 19:55:55 +00:00
										 |  |  |   node n; | 
					
						
							|  |  |  |   u32 areaid; | 
					
						
							|  |  |  |   int stub; | 
					
						
							|  |  |  |   unsigned tick; | 
					
						
							| 
									
										
										
										
											2000-06-03 01:29:00 +00:00
										 |  |  |   list patt_list; | 
					
						
							| 
									
										
										
										
											2001-08-12 00:04:42 +00:00
										 |  |  |   list net_list; | 
					
						
							| 
									
										
										
										
											1999-03-09 22:27:43 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-13 11:58:50 +00:00
										 |  |  | struct obits | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | #ifdef _BIG_ENDIAN
 | 
					
						
							|  |  |  |   u8 unused2:2; | 
					
						
							|  |  |  |   u8 dc:1; | 
					
						
							|  |  |  |   u8 ea:1; | 
					
						
							|  |  |  |   u8 np:1; | 
					
						
							|  |  |  |   u8 mc:1; | 
					
						
							|  |  |  |   u8 e:1; | 
					
						
							|  |  |  |   u8 unused1:1; | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |   u8 unused1:1; | 
					
						
							|  |  |  |   u8 e:1; | 
					
						
							|  |  |  |   u8 mc:1; | 
					
						
							|  |  |  |   u8 np:1; | 
					
						
							|  |  |  |   u8 ea:1; | 
					
						
							|  |  |  |   u8 dc:1; | 
					
						
							|  |  |  |   u8 unused2:2; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union options | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   u8 byte; | 
					
						
							|  |  |  |   struct obits bit; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_iface | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1999-04-14 15:13:44 +00:00
										 |  |  |   node n; | 
					
						
							| 
									
										
										
										
											1999-05-11 09:50:02 +00:00
										 |  |  |   struct proto_ospf *proto; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   struct iface *iface;		/* Nest's iface */ | 
					
						
							| 
									
										
										
										
											2000-03-08 12:50:28 +00:00
										 |  |  |   struct ospf_area *oa; | 
					
						
							| 
									
										
										
										
											2000-06-06 00:46:00 +00:00
										 |  |  |   struct object_lock *lock; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   u32 an;			/* Area number */ | 
					
						
							|  |  |  |   sock *hello_sk;		/* Hello socket */ | 
					
						
							|  |  |  |   sock *dr_sk;			/* For states DR or BACKUP */ | 
					
						
							|  |  |  |   sock *ip_sk;			/* IP socket (for DD ...) */ | 
					
						
							|  |  |  |   list neigh_list;		/* List of neigbours */ | 
					
						
							|  |  |  |   u16 cost;			/* Cost of iface */ | 
					
						
							|  |  |  |   u16 inftransdelay;		/* The estimated number of seconds it takes to
 | 
					
						
							|  |  |  | 				   transmit a Link State Update Packet over this | 
					
						
							|  |  |  | 				   interface.  LSAs contained in the update */ | 
					
						
							| 
									
										
										
										
											2004-06-09 12:39:49 +00:00
										 |  |  |   u32 waitint;			/* number of sec before changing state from wait */ | 
					
						
							|  |  |  |   u32 rxmtint;			/* number of seconds between LSA retransmissions */ | 
					
						
							|  |  |  |   u32 pollint;			/* Poll interval */ | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   u32 deadc;			/* after "deadint" missing hellos is router dead */ | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  |   u32 vid;			/* Id of peer of virtual link */ | 
					
						
							|  |  |  |   ip_addr vip;			/* IP of peer of virtual link */ | 
					
						
							|  |  |  |   struct ospf_area *voa;	/* Area wich the vlink goes through */ | 
					
						
							| 
									
										
										
										
											1999-04-12 23:54:21 +00:00
										 |  |  |   u16 autype; | 
					
						
							| 
									
										
										
										
											2004-07-13 11:58:50 +00:00
										 |  |  |   u16 helloint;			/* number of seconds between hello sending */ | 
					
						
							| 
									
										
										
										
											2004-06-26 20:15:34 +00:00
										 |  |  |   list *passwords; | 
					
						
							|  |  |  |   u32 csn;                      /* Crypt seq num. that will be sent net */ | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   ip_addr drip;			/* Designated router */ | 
					
						
							| 
									
										
										
										
											1999-04-13 18:21:53 +00:00
										 |  |  |   u32 drid; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   ip_addr bdrip;		/* Backup DR */ | 
					
						
							| 
									
										
										
										
											1999-04-13 18:21:53 +00:00
										 |  |  |   u32 bdrid; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   u8 type;			/* OSPF view of type */ | 
					
						
							| 
									
										
										
										
											1999-10-18 21:48:51 +00:00
										 |  |  | #define OSPF_IT_BCAST 0
 | 
					
						
							| 
									
										
										
										
											1999-04-13 21:46:20 +00:00
										 |  |  | #define OSPF_IT_NBMA 1
 | 
					
						
							|  |  |  | #define OSPF_IT_PTP 2
 | 
					
						
							| 
									
										
										
										
											1999-10-18 21:48:51 +00:00
										 |  |  | #define OSPF_IT_VLINK 3
 | 
					
						
							| 
									
										
										
										
											2000-06-03 09:50:31 +00:00
										 |  |  | #define OSPF_IT_UNDEF 4
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   u8 strictnbma;		/* Can I talk with unknown neighbors? */ | 
					
						
							|  |  |  |   u8 stub;			/* Inactive interface */ | 
					
						
							|  |  |  | #define OSPF_I_OK 0		/* Everything OK */
 | 
					
						
							|  |  |  | #define OSPF_I_MC 1		/* I didn't open MC socket */
 | 
					
						
							|  |  |  | #define OSPF_I_IP 2		/* I didn't open IP socet */
 | 
					
						
							|  |  |  |   u8 state;			/* Interface state machine */ | 
					
						
							| 
									
										
										
										
											1999-10-18 21:48:51 +00:00
										 |  |  | #define OSPF_IS_DOWN 0		/* Not working */
 | 
					
						
							|  |  |  | #define OSPF_IS_LOOP 1		/* Should never happen */
 | 
					
						
							|  |  |  | #define OSPF_IS_WAITING 2	/* Waiting for Wait timer */
 | 
					
						
							|  |  |  | #define OSPF_IS_PTP 3		/* PTP operational */
 | 
					
						
							|  |  |  | #define OSPF_IS_DROTHER 4	/* I'm on BCAST or NBMA and I'm not DR */
 | 
					
						
							|  |  |  | #define OSPF_IS_BACKUP 5	/* I'm BDR */
 | 
					
						
							|  |  |  | #define OSPF_IS_DR 6		/* I'm DR */
 | 
					
						
							| 
									
										
										
										
											1999-05-24 18:22:00 +00:00
										 |  |  |   timer *wait_timer;		/* WAIT timer */ | 
					
						
							|  |  |  |   timer *hello_timer;		/* HELLOINT timer */ | 
					
						
							| 
									
										
										
										
											2000-09-02 00:03:36 +00:00
										 |  |  |   timer *poll_timer;		/* Poll Interval - for NBMA */ | 
					
						
							| 
									
										
										
										
											1999-04-12 23:54:21 +00:00
										 |  |  | /* Default values for interface parameters */ | 
					
						
							|  |  |  | #define COST_D 10
 | 
					
						
							|  |  |  | #define RXMTINT_D 5
 | 
					
						
							| 
									
										
										
										
											2000-05-02 22:31:48 +00:00
										 |  |  | #define INFTRANSDELAY_D 1
 | 
					
						
							| 
									
										
										
										
											1999-04-13 21:46:20 +00:00
										 |  |  | #define PRIORITY_D 1
 | 
					
						
							| 
									
										
										
										
											1999-04-12 23:54:21 +00:00
										 |  |  | #define HELLOINT_D 10
 | 
					
						
							| 
									
										
										
										
											2000-09-02 00:03:36 +00:00
										 |  |  | #define POLLINT_D 20
 | 
					
						
							| 
									
										
										
										
											1999-05-31 18:56:20 +00:00
										 |  |  | #define DEADC_D 4
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | #define WAIT_DMH 4		/* Value of Wait timer - not found it in RFC 
 | 
					
						
							|  |  |  | 				 * - using 4*HELLO | 
					
						
							|  |  |  | 				 */ | 
					
						
							| 
									
										
										
										
											2000-05-03 00:08:48 +00:00
										 |  |  |   struct top_hash_entry *nlsa;	/* Originated net lsa */ | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   int orignet;			/* Schedule network LSA origination */ | 
					
						
							|  |  |  |   int fadj;			/* Number of full adjacent neigh */ | 
					
						
							| 
									
										
										
										
											2000-06-05 23:44:26 +00:00
										 |  |  |   list nbma_list; | 
					
						
							| 
									
										
										
										
											2004-07-13 11:58:50 +00:00
										 |  |  |   u8 priority;			/* A router priority for DR election */ | 
					
						
							|  |  |  |   u8 ioprob; | 
					
						
							| 
									
										
										
										
											1999-04-12 23:54:21 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-26 20:15:34 +00:00
										 |  |  | struct ospf_md5 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   u16 zero; | 
					
						
							|  |  |  |   u8 keyid; | 
					
						
							|  |  |  |   u8 len; | 
					
						
							|  |  |  |   u32 csn; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union ospf_auth | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   u8 password[8]; | 
					
						
							|  |  |  |   struct ospf_md5 md5; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_packet | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1999-05-11 15:34:33 +00:00
										 |  |  |   u8 version; | 
					
						
							|  |  |  |   u8 type; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | #define HELLO_P 1		/* Hello */
 | 
					
						
							|  |  |  | #define DBDES_P 2		/* Database description */
 | 
					
						
							|  |  |  | #define LSREQ_P 3		/* Link state request */
 | 
					
						
							|  |  |  | #define LSUPD_P 4		/* Link state update */
 | 
					
						
							|  |  |  | #define LSACK_P 5		/* Link state acknowledgement */
 | 
					
						
							| 
									
										
										
										
											1999-05-11 15:34:33 +00:00
										 |  |  |   u16 length; | 
					
						
							|  |  |  |   u32 routerid; | 
					
						
							|  |  |  |   u32 areaid; | 
					
						
							| 
									
										
										
										
											2000-04-05 00:51:25 +00:00
										 |  |  | #define BACKBONE 0
 | 
					
						
							| 
									
										
										
										
											1999-05-11 15:34:33 +00:00
										 |  |  |   u16 checksum; | 
					
						
							|  |  |  |   u16 autype; | 
					
						
							| 
									
										
										
										
											2004-06-26 20:15:34 +00:00
										 |  |  |   union ospf_auth u; | 
					
						
							| 
									
										
										
										
											1999-05-11 15:34:33 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_hello_packet | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1999-05-14 08:46:06 +00:00
										 |  |  |   struct ospf_packet ospf_packet; | 
					
						
							|  |  |  |   ip_addr netmask; | 
					
						
							| 
									
										
										
										
											1999-05-31 18:56:20 +00:00
										 |  |  |   u16 helloint; | 
					
						
							| 
									
										
										
										
											1999-05-11 15:34:33 +00:00
										 |  |  |   u8 options; | 
					
						
							|  |  |  |   u8 priority; | 
					
						
							|  |  |  |   u32 deadint; | 
					
						
							| 
									
										
										
										
											2000-06-08 01:49:19 +00:00
										 |  |  |   ip_addr dr; | 
					
						
							|  |  |  |   ip_addr bdr; | 
					
						
							| 
									
										
										
										
											1999-05-11 15:34:33 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct immsb | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-08-26 10:41:02 +00:00
										 |  |  | #ifdef _BIG_ENDIAN
 | 
					
						
							|  |  |  |   u8 padding:5; | 
					
						
							|  |  |  |   u8 i:1; | 
					
						
							|  |  |  |   u8 m:1; | 
					
						
							|  |  |  |   u8 ms:1; | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2000-03-29 12:32:25 +00:00
										 |  |  |   u8 ms:1; | 
					
						
							|  |  |  |   u8 m:1; | 
					
						
							|  |  |  |   u8 i:1; | 
					
						
							|  |  |  |   u8 padding:5; | 
					
						
							| 
									
										
										
										
											2003-08-26 10:41:02 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2000-03-29 12:32:25 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | union imms | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-03-29 12:32:25 +00:00
										 |  |  |   u8 byte; | 
					
						
							|  |  |  |   struct immsb bit; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_dbdes_packet | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1999-08-24 18:32:26 +00:00
										 |  |  |   struct ospf_packet ospf_packet; | 
					
						
							|  |  |  |   u16 iface_mtu; | 
					
						
							| 
									
										
										
										
											1999-08-25 18:44:50 +00:00
										 |  |  |   u8 options; | 
					
						
							| 
									
										
										
										
											2000-03-29 12:32:25 +00:00
										 |  |  |   union imms imms;		/* I, M, MS bits */ | 
					
						
							| 
									
										
										
										
											1999-08-25 18:44:50 +00:00
										 |  |  | #define DBDES_MS 1
 | 
					
						
							|  |  |  | #define DBDES_M 2
 | 
					
						
							|  |  |  | #define DBDES_I 4
 | 
					
						
							|  |  |  |   u32 ddseq; | 
					
						
							| 
									
										
										
										
											1999-08-24 18:32:26 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_lsa_header | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   u16 age;			/* LS Age */ | 
					
						
							|  |  |  | #define LSA_MAXAGE 3600		/* 1 hour */
 | 
					
						
							|  |  |  | #define LSA_CHECKAGE 300	/* 5 minutes */
 | 
					
						
							|  |  |  | #define LSA_MAXAGEDIFF 900	/* 15 minutes */
 | 
					
						
							| 
									
										
										
										
											1999-08-25 18:44:50 +00:00
										 |  |  |   u8 options; | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  |   u8 type; | 
					
						
							|  |  |  |   u32 id; | 
					
						
							|  |  |  | #define LSA_T_RT 1
 | 
					
						
							|  |  |  | #define LSA_T_NET 2
 | 
					
						
							|  |  |  | #define LSA_T_SUM_NET 3
 | 
					
						
							|  |  |  | #define LSA_T_SUM_RT 4
 | 
					
						
							|  |  |  | #define LSA_T_EXT 5
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   u32 rt;			/* Advertising router */ | 
					
						
							|  |  |  |   s32 sn;			/* LS Sequence number */ | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  | #define LSA_INITSEQNO 0x80000001
 | 
					
						
							|  |  |  | #define LSA_MAXSEQNO 0x7fffffff
 | 
					
						
							| 
									
										
										
										
											1999-08-25 18:44:50 +00:00
										 |  |  |   u16 checksum; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   u16 length; | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct vebb | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2004-06-11 09:36:50 +00:00
										 |  |  | #ifdef _BIG_ENDIAN
 | 
					
						
							|  |  |  |   u8 padding:5; | 
					
						
							|  |  |  |   u8 v:1; | 
					
						
							|  |  |  |   u8 e:1; | 
					
						
							|  |  |  |   u8 b:1; | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2000-09-03 22:18:40 +00:00
										 |  |  |   u8 b:1; | 
					
						
							|  |  |  |   u8 e:1; | 
					
						
							|  |  |  |   u8 v:1; | 
					
						
							|  |  |  |   u8 padding:5; | 
					
						
							| 
									
										
										
										
											2004-06-11 09:36:50 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2000-09-03 22:18:40 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | union veb | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-09-03 22:18:40 +00:00
										 |  |  |   u8 byte; | 
					
						
							|  |  |  |   struct vebb bit; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_lsa_rt | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-09-03 22:18:40 +00:00
										 |  |  |   union veb veb; | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  |   u8 padding; | 
					
						
							|  |  |  |   u16 links; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_lsa_rt_link | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  |   u32 id; | 
					
						
							|  |  |  |   u32 data; | 
					
						
							|  |  |  |   u8 type; | 
					
						
							|  |  |  | #define LSART_PTP 1
 | 
					
						
							|  |  |  | #define LSART_NET 2
 | 
					
						
							|  |  |  | #define LSART_STUB 3
 | 
					
						
							|  |  |  | #define LSART_VLNK 4
 | 
					
						
							|  |  |  |   u8 notos; | 
					
						
							|  |  |  |   u16 metric; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_lsa_rt_link_tos | 
					
						
							|  |  |  | {				/* Actually we ignore TOS. This is useless */ | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  |   u8 tos; | 
					
						
							|  |  |  |   u8 padding; | 
					
						
							|  |  |  |   u16 metric; | 
					
						
							| 
									
										
										
										
											1999-08-25 18:44:50 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_lsa_net | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-04-30 11:31:05 +00:00
										 |  |  |   ip_addr netmask; | 
					
						
							| 
									
										
										
										
											2000-04-26 12:54:23 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  | struct ospf_lsa_sum | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2000-04-30 11:31:05 +00:00
										 |  |  |   ip_addr netmask; | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct ospf_lsa_ext | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  |   ip_addr netmask; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct ospf_lsa_ext_etos  | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | #ifdef _BIG_ENDIAN
 | 
					
						
							|  |  |  |   u8 ebit:1; | 
					
						
							|  |  |  |   u8 tos:7; | 
					
						
							|  |  |  |   u8 padding1; | 
					
						
							|  |  |  |   u16 padding2; | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |   u16 padding2; | 
					
						
							|  |  |  |   u8 padding1; | 
					
						
							|  |  |  |   u8 tos:7; | 
					
						
							|  |  |  |   u8 ebit:1; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define METRIC_MASK 0x00FFFFFF
 | 
					
						
							|  |  |  | struct ospf_lsa_sum_tos  | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | #ifdef _BIG_ENDIAN
 | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  |   u8 tos; | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  |   u8 padding1; | 
					
						
							|  |  |  |   u16 padding2; | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |   u16 padding2; | 
					
						
							|  |  |  |   u8 padding1; | 
					
						
							|  |  |  |   u8 tos; | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  | union ospf_lsa_sum_tm | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  |   struct ospf_lsa_sum_tos tos; | 
					
						
							|  |  |  |   u32 metric; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union ospf_lsa_ext_etm | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   struct ospf_lsa_ext_etos etos; | 
					
						
							|  |  |  |   u32 metric; | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_lsa_ext_tos | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  |   union ospf_lsa_ext_etm etm; | 
					
						
							| 
									
										
										
										
											2000-05-10 11:22:08 +00:00
										 |  |  |   ip_addr fwaddr; | 
					
						
							| 
									
										
										
										
											2000-03-09 22:38:05 +00:00
										 |  |  |   u32 tag; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_lsreq_packet | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-03-30 00:18:59 +00:00
										 |  |  |   struct ospf_packet ospf_packet; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_lsreq_header | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-03-30 00:18:59 +00:00
										 |  |  |   u16 padd1; | 
					
						
							|  |  |  |   u8 padd2; | 
					
						
							|  |  |  |   u8 type; | 
					
						
							|  |  |  |   u32 id; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   u32 rt;			/* Advertising router */ | 
					
						
							| 
									
										
										
										
											2000-03-30 00:18:59 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct l_lsr_head | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-03-31 00:21:41 +00:00
										 |  |  |   node n; | 
					
						
							|  |  |  |   struct ospf_lsreq_header lsh; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_lsupd_packet | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-03-30 20:00:42 +00:00
										 |  |  |   struct ospf_packet ospf_packet; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   u32 lsano;			/* Number of LSA's */ | 
					
						
							| 
									
										
										
										
											2000-03-30 20:00:42 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_lsack_packet | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-03-30 20:00:42 +00:00
										 |  |  |   struct ospf_packet ospf_packet; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-24 21:17:16 +00:00
										 |  |  | struct ospf_neighbor | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1999-08-09 17:58:01 +00:00
										 |  |  |   node n; | 
					
						
							| 
									
										
										
										
											2004-06-01 13:12:10 +00:00
										 |  |  |   pool *pool; | 
					
						
							| 
									
										
										
										
											1999-05-24 21:49:22 +00:00
										 |  |  |   struct ospf_iface *ifa; | 
					
						
							| 
									
										
										
										
											1999-08-25 18:44:50 +00:00
										 |  |  |   u8 state; | 
					
						
							| 
									
										
										
										
											1999-05-24 21:17:16 +00:00
										 |  |  | #define NEIGHBOR_DOWN 0
 | 
					
						
							| 
									
										
										
										
											1999-06-01 16:35:18 +00:00
										 |  |  | #define NEIGHBOR_ATTEMPT 1
 | 
					
						
							|  |  |  | #define NEIGHBOR_INIT 2
 | 
					
						
							|  |  |  | #define NEIGHBOR_2WAY 3
 | 
					
						
							| 
									
										
										
										
											1999-05-24 21:17:16 +00:00
										 |  |  | #define NEIGHBOR_EXSTART 4
 | 
					
						
							| 
									
										
										
										
											1999-05-24 21:49:22 +00:00
										 |  |  | #define NEIGHBOR_EXCHANGE 5
 | 
					
						
							|  |  |  | #define NEIGHBOR_LOADING 6
 | 
					
						
							|  |  |  | #define NEIGHBOR_FULL 7
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   timer *inactim;		/* Inactivity timer */ | 
					
						
							| 
									
										
										
										
											2000-03-29 12:32:25 +00:00
										 |  |  |   union imms imms;		/* I, M, Master/slave received */ | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   u32 dds;			/* DD Sequence number being sent */ | 
					
						
							|  |  |  |   u32 ddr;			/* last Dat Des packet received */ | 
					
						
							| 
									
										
										
										
											2000-03-29 12:32:25 +00:00
										 |  |  |   union imms myimms;		/* I, M Master/slave */ | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   u32 rid;			/* Router ID */ | 
					
						
							|  |  |  |   ip_addr ip;			/* IP of it's interface */ | 
					
						
							|  |  |  |   u8 priority;			/* Priority */ | 
					
						
							|  |  |  |   u8 options;			/* Options received */ | 
					
						
							|  |  |  |   ip_addr dr;			/* Neigbour's idea of DR */ | 
					
						
							|  |  |  |   ip_addr bdr;			/* Neigbour's idea of BDR */ | 
					
						
							|  |  |  |   u8 adj;			/* built adjacency? */ | 
					
						
							|  |  |  |   siterator dbsi;		/* Database summary list iterator */ | 
					
						
							|  |  |  |   slist lsrql;			/* Link state request */ | 
					
						
							|  |  |  |   struct top_graph *lsrqh;	/* LSA graph */ | 
					
						
							| 
									
										
										
										
											2000-03-08 12:50:28 +00:00
										 |  |  |   siterator lsrqi; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   slist lsrtl;			/* Link state retransmission list */ | 
					
						
							| 
									
										
										
										
											2000-03-08 12:50:28 +00:00
										 |  |  |   siterator lsrti; | 
					
						
							| 
									
										
										
										
											2000-04-04 00:32:17 +00:00
										 |  |  |   struct top_graph *lsrth; | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   void *ldbdes;			/* Last database description packet */ | 
					
						
							|  |  |  |   timer *rxmt_timer;		/* RXMT timer */ | 
					
						
							| 
									
										
										
										
											2004-06-04 16:30:04 +00:00
										 |  |  |   list ackl[2]; | 
					
						
							|  |  |  | #define ACKL_DIRECT 0
 | 
					
						
							|  |  |  | #define ACKL_DELAY 1
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  |   timer *ackd_timer;		/* Delayed ack timer */ | 
					
						
							| 
									
										
										
										
											2004-06-26 20:15:34 +00:00
										 |  |  |   u32 csn;                      /* Last received crypt seq number (for MD5) */ | 
					
						
							| 
									
										
										
										
											1999-05-24 21:17:16 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-10-18 21:48:51 +00:00
										 |  |  | /* Definitions for interface state machine */ | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | #define ISM_UP 0		/* Interface Up */
 | 
					
						
							|  |  |  | #define ISM_WAITF 1		/* Wait timer fired */
 | 
					
						
							|  |  |  | #define ISM_BACKS 2		/* Backup seen */
 | 
					
						
							|  |  |  | #define ISM_NEICH 3		/* Neighbor change */
 | 
					
						
							|  |  |  | #define ISM_LOOP 4		/* Loop indicated */
 | 
					
						
							|  |  |  | #define ISM_UNLOOP 5		/* Unloop indicated */
 | 
					
						
							|  |  |  | #define ISM_DOWN 6		/* Interface down */
 | 
					
						
							| 
									
										
										
										
											1999-10-18 21:48:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* Definitions for neighbor state machine */ | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | #define INM_HELLOREC 0		/* Hello Received */
 | 
					
						
							|  |  |  | #define INM_START 1		/* Neighbor start - for NBMA */
 | 
					
						
							|  |  |  | #define INM_2WAYREC 2		/* 2-Way received */
 | 
					
						
							|  |  |  | #define INM_NEGDONE 3		/* Negotiation done */
 | 
					
						
							|  |  |  | #define INM_EXDONE 4		/* Exchange done */
 | 
					
						
							|  |  |  | #define INM_BADLSREQ 5		/* Bad LS Request */
 | 
					
						
							|  |  |  | #define INM_LOADDONE 6		/* Load done */
 | 
					
						
							|  |  |  | #define INM_ADJOK 7		/* AdjOK? */
 | 
					
						
							|  |  |  | #define INM_SEQMIS 8		/* Sequence number mismatch */
 | 
					
						
							|  |  |  | #define INM_1WAYREC 9		/* 1-Way */
 | 
					
						
							|  |  |  | #define INM_KILLNBR 10		/* Kill Neighbor */
 | 
					
						
							|  |  |  | #define INM_INACTTIM 11		/* Inactivity timer */
 | 
					
						
							|  |  |  | #define INM_LLDOWN 12		/* Line down */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct ospf_area | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-04-03 22:31:07 +00:00
										 |  |  |   node n; | 
					
						
							| 
									
										
										
										
											2000-01-05 00:03:47 +00:00
										 |  |  |   u32 areaid; | 
					
						
							| 
									
										
										
										
											2000-05-31 14:06:33 +00:00
										 |  |  |   timer *disp_timer;		/* Area's dispatcher hear beat */ | 
					
						
							|  |  |  |   int origrt;			/* Rt lsa origination scheduled? */ | 
					
						
							| 
									
										
										
										
											2000-01-05 00:03:47 +00:00
										 |  |  |   struct top_graph *gr;		/* LSA graph */ | 
					
						
							| 
									
										
										
										
											2000-03-08 12:50:28 +00:00
										 |  |  |   slist lsal;			/* List of all LSA's */ | 
					
						
							| 
									
										
										
										
											2000-02-25 19:19:41 +00:00
										 |  |  |   struct top_hash_entry *rt;	/* My own router LSA */ | 
					
						
							| 
									
										
										
										
											2000-04-26 12:54:23 +00:00
										 |  |  |   list cand;			/* List of candidates for RT calc. */ | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  |   struct fib net_fib;		/* Networks to advertise or not */ | 
					
						
							| 
									
										
										
										
											2000-06-02 19:55:55 +00:00
										 |  |  |   int stub; | 
					
						
							|  |  |  |   int trcap;			/* Transit capability? */ | 
					
						
							| 
									
										
										
										
											2000-05-02 22:19:41 +00:00
										 |  |  |   struct proto_ospf *po; | 
					
						
							| 
									
										
										
										
											2000-06-05 20:57:53 +00:00
										 |  |  |   unsigned tick; | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  |   struct fib rtr;		/* Routing tables for routers */ | 
					
						
							| 
									
										
										
										
											2004-07-13 11:58:50 +00:00
										 |  |  |   union options opt;            /* RFC2328 - A.2 */ | 
					
						
							| 
									
										
										
										
											2000-01-05 00:03:47 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct proto_ospf | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1999-11-17 15:50:41 +00:00
										 |  |  |   struct proto proto; | 
					
						
							| 
									
										
										
										
											2004-06-06 16:00:09 +00:00
										 |  |  |   timer *disp_timer;		/* OSPF proto dispatcher */ | 
					
						
							|  |  |  |   unsigned tick; | 
					
						
							|  |  |  |   int calcrt;			/* Routing table calculation scheduled? */ | 
					
						
							| 
									
										
										
										
											1999-11-17 15:50:41 +00:00
										 |  |  |   list iface_list;		/* Interfaces we really use */ | 
					
						
							| 
									
										
										
										
											2000-04-03 22:31:07 +00:00
										 |  |  |   list area_list; | 
					
						
							| 
									
										
										
										
											2000-01-05 00:03:47 +00:00
										 |  |  |   int areano;			/* Number of area I belong to */ | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  |   struct fib rtf;		/* Routing table */ | 
					
						
							| 
									
										
										
										
											2000-09-03 22:18:40 +00:00
										 |  |  |   int rfc1583;			/* RFC1583 compatibility */ | 
					
						
							|  |  |  |   int ebit;			/* Did I originate any ext lsa? */ | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  |   struct ospf_area *backbone;	/* If exists */ | 
					
						
							| 
									
										
										
										
											1999-11-10 12:27:01 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | struct ospf_iface_patt | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-06-03 01:29:00 +00:00
										 |  |  |   struct iface_patt i; | 
					
						
							| 
									
										
										
										
											2004-06-09 12:39:49 +00:00
										 |  |  |   u32 cost; | 
					
						
							|  |  |  |   u32 helloint; | 
					
						
							|  |  |  |   u32 rxmtint; | 
					
						
							|  |  |  |   u32 pollint; | 
					
						
							|  |  |  |   u32 inftransdelay; | 
					
						
							|  |  |  |   u32 priority; | 
					
						
							|  |  |  |   u32 waitint; | 
					
						
							|  |  |  |   u32 deadc; | 
					
						
							|  |  |  |   u32 type; | 
					
						
							|  |  |  |   u32 autype; | 
					
						
							|  |  |  |   u32 strictnbma; | 
					
						
							|  |  |  |   u32 stub; | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  |   u32 vid; | 
					
						
							| 
									
										
										
										
											2004-06-26 20:15:34 +00:00
										 |  |  | #define OSPF_AUTH_NONE 0
 | 
					
						
							|  |  |  | #define OSPF_AUTH_SIMPLE 1
 | 
					
						
							|  |  |  | #define OSPF_AUTH_CRYPT 2
 | 
					
						
							|  |  |  | #define OSPF_AUTH_CRYPT_SIZE 16
 | 
					
						
							|  |  |  |   list *passwords; | 
					
						
							| 
									
										
										
										
											2000-06-05 23:44:26 +00:00
										 |  |  |   list nbma_list; | 
					
						
							| 
									
										
										
										
											2000-06-03 01:29:00 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-06 16:00:09 +00:00
										 |  |  | int ospf_import_control(struct proto *p, rte **new, ea_list **attrs, | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | 			struct linpool *pool); | 
					
						
							| 
									
										
										
										
											2000-05-30 21:25:32 +00:00
										 |  |  | struct ea_list *ospf_make_tmp_attrs(struct rte *rt, struct linpool *pool); | 
					
						
							|  |  |  | void ospf_store_tmp_attrs(struct rte *rt, struct ea_list *attrs); | 
					
						
							| 
									
										
										
										
											2004-06-06 16:00:09 +00:00
										 |  |  | void ospf_rt_notify(struct proto *p, net *n, rte *new, rte *old, | 
					
						
							| 
									
										
										
										
											2004-06-06 09:37:54 +00:00
										 |  |  | 		    ea_list * attrs); | 
					
						
							| 
									
										
										
										
											2000-05-31 14:06:33 +00:00
										 |  |  | void schedule_rt_lsa(struct ospf_area *oa); | 
					
						
							| 
									
										
										
										
											2004-06-06 16:00:09 +00:00
										 |  |  | void schedule_rtcalc(struct proto_ospf *po); | 
					
						
							| 
									
										
										
										
											2004-06-06 08:55:33 +00:00
										 |  |  | void schedule_net_lsa(struct ospf_iface *ifa); | 
					
						
							| 
									
										
										
										
											2000-06-01 17:52:21 +00:00
										 |  |  | void ospf_sh_neigh(struct proto *p, char *iff); | 
					
						
							| 
									
										
										
										
											2000-06-01 16:26:59 +00:00
										 |  |  | void ospf_sh(struct proto *p); | 
					
						
							| 
									
										
										
										
											2000-06-01 17:52:21 +00:00
										 |  |  | void ospf_sh_iface(struct proto *p, char *iff); | 
					
						
							| 
									
										
										
										
											1999-11-17 15:50:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-05-30 21:25:32 +00:00
										 |  |  | #define EA_OSPF_METRIC1	EA_CODE(EAP_OSPF, 0)
 | 
					
						
							|  |  |  | #define EA_OSPF_METRIC2	EA_CODE(EAP_OSPF, 1)
 | 
					
						
							|  |  |  | #define EA_OSPF_TAG	EA_CODE(EAP_OSPF, 2)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-25 16:39:53 +00:00
										 |  |  | #include "proto/ospf/rt.h"
 | 
					
						
							| 
									
										
										
										
											1999-11-17 15:50:41 +00:00
										 |  |  | #include "proto/ospf/hello.h"
 | 
					
						
							|  |  |  | #include "proto/ospf/packet.h"
 | 
					
						
							|  |  |  | #include "proto/ospf/iface.h"
 | 
					
						
							|  |  |  | #include "proto/ospf/neighbor.h"
 | 
					
						
							|  |  |  | #include "proto/ospf/topology.h"
 | 
					
						
							|  |  |  | #include "proto/ospf/dbdes.h"
 | 
					
						
							| 
									
										
										
										
											2000-03-30 00:18:59 +00:00
										 |  |  | #include "proto/ospf/lsreq.h"
 | 
					
						
							| 
									
										
										
										
											2000-03-31 00:21:41 +00:00
										 |  |  | #include "proto/ospf/lsupd.h"
 | 
					
						
							|  |  |  | #include "proto/ospf/lsack.h"
 | 
					
						
							|  |  |  | #include "proto/ospf/lsalib.h"
 | 
					
						
							| 
									
										
										
										
											1999-11-10 12:27:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-09 22:27:43 +00:00
										 |  |  | #endif /* _BIRD_OSPF_H_ */
 |