/* ospf_interface.h: Header file for interface sub-package. */

/* Prevent multiple includes. */
#ifndef		HEADER_FILE_ospf_interface_h

#define		HEADER_FILE_ospf_interface_h

/***** Procedure Declarations *****/
OspfT_Interface *				ospf_interface_alloc (void);
OspfT_Interface_Invoke_Info *	ospf_interface_invoke_info_create (void);
OspfT_Interface *				ospf_interface_create (Objid interface_objid, IpT_Interface_Info *ip_interface_ptr,
	                                OspfT_Area *parent_area_ptr, Objid root_objid);
void							ospf_interface_destroy (OspfT_Interface *interface_ptr, OspfT_Interface_Event interface_event);
OspfT_Interface_Type			ospf_interface_type_get (OspfT_Interface *interface_ptr, char *interface_type_str);
OspfT_Interface_State			ospf_interface_state_get (OspfT_Interface *interface_ptr, char *interface_state_str);
void							ospf_interface_state_str_get (OspfT_Interface_State intf_state, char *interface_state_str);
void							ospf_interface_event_str_get (OspfT_Interface_Event intf_event, char *interface_event_str);
OspfT_Router_Id					ospf_interface_dr_get (OspfT_Interface *interface_ptr);
IpT_Address						ospf_interface_dr_intf_get (OspfT_Interface *interface_ptr);
OspfT_Router_Id					ospf_interface_backup_dr_get (OspfT_Interface *interface_ptr);
IpT_Address						ospf_interface_backup_dr_intf_get (OspfT_Interface *interface_ptr);
List *							ospf_interface_neighbor_list_get (OspfT_Interface *interface_ptr);
void							ospf_interface_print (OspfT_Interface *interface_ptr);
void							ospf_interface_list_print (List *interface_list_ptr);
void							ospf_interface_hello_message_send (OspfT_Interface *interface_ptr, Packet *message_ptr);
void							ospf_interface_message_adj_send (OspfT_Interface *interface_ptr, Packet *message_ptr);
OspfT_Router *					ospf_interface_parent_router_get (OspfT_Interface *interface_ptr);
OspfT_Interface *				ospf_interface_list_find (List *interface_list_ptr, IpT_Address intf_addr);
void							ospf_interface_ev_schedule (OspfT_Interface *interface_ptr, 
                                 	OspfT_Interface_Event interface_event, double delta_t);
OspfT_Neighbor *				ospf_interface_neighbor_find (OspfT_Interface *interface_ptr, IpT_Address addr);
void							ospf_interface_neighbor_add (OspfT_Interface *intf_ptr, OspfT_Neighbor *neighbor_ptr);
void							ospf_interface_invoke (OspfT_Interface *interface_ptr, OspfT_Interface_Event interface_event);
void							ospf_interface_undef_handler (OspfT_Interface *interface_ptr, OspfT_Interface_Event interface_event);
void							ospf_interface_process_invoke (OspfT_Interface *interface_ptr, OspfT_Interface_Event interface_event);
void							ospf_interface_event_suppress (OspfT_Interface *interface_ptr, OspfT_Interface_Event interface_event);
void							ospf_interface_wait_cancel_invoke (OspfT_Interface *interface_ptr, OspfT_Interface_Event interface_event);
void							ospf_interface_network_links_lsa_regenerate (OspfT_Interface *intf_ptr, int intrpt_code);
void							ospf_interface_network_links_originate (OspfT_Interface *intf_ptr);
OspfT_Lsa *						ospf_interface_network_links_lsa_create (OspfT_Interface *intf_ptr, Boolean override_timer_check);

#endif
