/* Prevent multiple includes. */
#ifndef		HEADER_FILE_ospf_const_h

#define		HEADER_FILE_ospf_const_h

/* Header file defining OSPF constants. */

/* OSPF Architectural Constants. */
#define OSPFC_LS_REFRESH_TIME			1800		/* 30 minutes */
#define OSPFC_MIN_LS_INTERVAL			5
#define OSPFC_MAX_AGE					3600		/* 1 hour */
#define OSPFC_MAX_AGE_DIFF				900			/* 15 minutes */
#define OSPFC_LS_INFINITY				-1

/* Constants describing router types. */
#define	OSPFC_ROUTER_TYPE_INTERNAL		(1<<0)
#define OSPFC_ROUTER_TYPE_AREA_BORDER	(1<<1)
#define OSPFC_ROUTER_TYPE_BACKBONE		(1<<2)

/* Backbone area ID. */
#define OSPFC_BACKBONE_AREA_ID			0

/* Area ID representing inter-area routes.  Used only by routers */
/* to store inter-area routes.                                   */
#define OSPFC_INTER_AREA_ID				-1

/* Maximum length of OSPF strings. */
#define	OSPFC_STR_LEN					512

/* IP Connection class used for OSPF messages. */
#define OSPFC_CONNECTION_CLASS			1

/* Representation of an invalid Area ID. */
#define OSPFC_AREA_ID_INVALID			OPC_NIL

/* Representation of an invalid Router ID. */
#define OSPFC_ROUTER_ID_INVALID			OPC_NIL

/* Number of static fields in an OSPF message. */
#define OSPFC_HELLO_NUM_STATIC_FIELDS			12
#define OSPFC_DBASE_DESC_NUM_STATIC_FIELDS		9
#define OSPFC_LSR_NUM_STATIC_FIELDS				5
#define OSPFC_LSU_NUM_STATIC_FIELDS				6
#define OSPFC_LSACK_NUM_STATIC_FIELDS			5
#define OSPFC_LSH_NUM_STATIC_FIELDS				7

/* Number of possible interface states and events. */
#define OSPFC_INTF_NUM_STATES				7
#define OSPFC_INTF_NUM_EVENTS				7

/* Number of possible neighbor states and events. */
#define OSPFC_NBR_NUM_STATES				8
#define OSPFC_NBR_NUM_EVENTS				13

/* Database description message flags. */
#define OSPFC_MSG_DBASE_DESC_INIT_SET		(1<<0)
#define OSPFC_MSG_DBASE_DESC_MORE_SET		(1<<1)
#define OSPFC_MSG_DBASE_DESC_MASTER_SET		(1<<2)

/* Router links advertisment options flags. */
#define OSPFC_MSG_ROUTER_LINKS_VIRTUAL_SET		(1<<0)
#define OSPFC_MSG_ROUTER_LINKS_ASB_SET			(1<<1)
#define OSPFC_MSG_ROUTER_LINKS_AREA_BORDER_SET	(1<<2)

/* Message options flags. */
#define OSPFC_MSG_TOS_SET					(1<<0)
#define OSPFC_MSG_EXT_SET					(1<<1)

/* Link state request index fields. */
#define OSPFC_MSG_LSR_FD_TYPE				1
#define OSPFC_MSG_LSR_FD_LINK_ID			2
#define OSPFC_MSG_LSR_FD_ROUTER_ID			3

/* LSA header index fields. */
#define OSPFC_MSG_LSAH_FD_AGE				1
#define OSPFC_MSG_LSAH_FD_OPTIONS			2
#define OSPFC_MSG_LSAH_FD_TYPE				3
#define OSPFC_MSG_LSAH_FD_LINK_STATE_ID		4
#define OSPFC_MSG_LSAH_FD_ADV_ROUTER_ID		5
#define OSPFC_MSG_LSAH_FD_SEQ_NUM			6
#define OSPFC_MSG_LSAH_FD_INFO				7

/* Router links advertisement index fields. */
#define OSPFC_MSG_ROUTER_LINKS_FD_OPTIONS	1
#define OSPFC_MSG_ROUTER_LINKS_FD_NUM_LINKS	2
#define OSPFC_MSG_ROUTER_LINKS_FD_INFO		3

#define OSPFC_MSG_ROUTER_LINKS_FD_LINK_ID	1
#define OSPFC_MSG_ROUTER_LINKS_FD_LINK_DATA	2
#define OSPFC_MSG_ROUTER_LINKS_FD_LINK_TYPE	3
#define OSPFC_MSG_ROUTER_LINKS_FD_COST		4
#define OSPFC_MSG_ROUTER_LINKS_FD_LINK_INFO 5

/* Network links advertisement index fields. */
#define OSPFC_MSG_NETWORK_LINKS_FD_MASK			1
#define OSPFC_MSG_NETWORK_LINKS_FD_NUM_ROUTERS	2

/* Summary links advertisement index fields. */
#define OSPFC_MSG_SUMMARY_LINKS_FD_MASK		1
#define OSPFC_MSG_SUMMARY_LINKS_FD_TOS		2
#define OSPFC_MSG_SUMMARY_LINKS_FD_COST		3

/* Size of packet components (in bits). */
#define OSPFC_MSG_LSAH_SIZE					160
#define OSPFC_MSG_ROUTER_LINKS_SIZE			96
#define OSPFC_MSG_NETWORK_LINKS_SIZE		32

/* Defined OSPF message types. */
#define OSPFC_MSG_TYPE_HELLO				1
#define OSPFC_MSG_TYPE_DBASE_DESC			2
#define OSPFC_MSG_TYPE_LSR					3
#define OSPFC_MSG_TYPE_LSU					4
#define OSPFC_MSG_TYPE_LSACK				5

#endif
