⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ip_cmn_rte_table.h

📁 备
💻 H
📖 第 1 页 / 共 3 页
字号:
	} IpT_Redist_Info;

/* This structure is used for sending redist	*/
/* information in an ICI.						*/
typedef struct IpT_Redist_Ici_Info
	{
	IpT_Cmn_Rte_Table_Entry*	rte_table_entry;		/* The route table entry which is being	*/
														/* redistributed.						*/
	int							redist_type;			/* The message type for this			*/
														/* redistributed route.					*/
	int							ext_metric_type;		/* The external metric type.			*/
	IpT_Cmn_Rte_Table*			route_table_ptr;		/* Specifies the rte table to which		*/
														/* the src and dest processes are 		*/
														/* adding routes. Can be VRF specific	*/
														/* or the common route table.			*/	
	} IpT_Redist_Ici_Info;

/* Route Distinguisher as defined in RFC2547bis	*/
/* Used for BGP/MPLS VPNs						*/
typedef struct IpT_Route_Distinguisher
	{
	short	type;

	union
		{
		IpT_Address	ip_address;
		int		as_number;
		} admin_field;
	int			assigned_number;
	
	} IpT_Route_Distinguisher;

/* Data structures part of the dynamic routing API. */
typedef void *					IpT_Rte_Table_Handle;
typedef IpT_Cmn_Rte_Table* 		IpT_Cmn_Table_Handle;
typedef Compcode	(* IpT_Rte_Table_Lookup_Proc) (int, IpT_Rte_Table_Handle, IpT_Address, IpT_Address *);
typedef int			(* IpT_Rte_Table_Fast_Addr_Proc) (IpT_Rte_Table_Handle, IpT_Address);

typedef Compcode        (* IpT_Rte_Table_Install_Proc) (int, IpT_Rte_Table_Handle, IpT_Cmn_Table_Handle, IpT_Address, IpT_Address);
typedef Compcode        (* InetT_Rte_Table_Install_Proc) (IpT_Rte_Table_Handle, IpT_Cmn_Table_Handle, IpT_Dest_Prefix);

typedef struct IpT_Rte_Info
	{
	IpT_Rte_Table_Handle			table_handle;	/* Pass to routing table services.			*/

	IpT_Rte_Table_Lookup_Proc		lookup_proc;	/* Lookup next hop given a destination.		*/ 

	IpT_Rte_Table_Fast_Addr_Proc	fast_addr_proc;	/* Get fast address for given net and node.	*/

	IpT_Rte_Table_Install_Proc      install_proc;   /* Install routes into common route table */

	InetT_Rte_Table_Install_Proc    inet_install_proc;   /* Inet version of the install proc 	*/

	} IpT_Rte_Info;

/** Pointer to the route table lookup	**/
/** function.							**/
typedef Compcode	(* IpT_Cmn_Rte_Table_Lookup_Proc) (int, IpT_Cmn_Rte_Table*, IpT_Address, IpT_Address *);

/* Total number of demands originating at gateway nodes in the		*/
/* network. This information is used to estimate the number of		*/
/* possible source dest pairs.										*/
extern int					ip_num_gateway_demands;

/* Total number of host nodes in the network. This information is 	*/
/* used to estimate the number of src dest pairs in the network.	*/
extern int					ip_num_host_nodes;

/* Total number of bgp neighbors in the network. This information	*/
/* is used to estimate the number of src dest pairs in the network.	*/
extern int					ip_num_bgp_neighbors;

/** ------ Function Declarations ------	**/
IpT_Rte_Info *		ip_dyn_rte_info_create (void);

IpT_Cmn_Rte_Table*	ip_cmn_rte_table_create (Objid node_objid, struct IpT_Rte_Module_Data* intf_lptr,
						struct IpT_Vrf_Table* vrf_table_ptr);

IpT_Rte_Proc_Id		Ip_Cmn_Rte_Table_Custom_Rte_Protocol_Register (char* custom_rte_protocol_label_ptr);

Compcode			Inet_Cmn_Rte_Table_Entry_Add_Options (IpT_Cmn_Rte_Table* route_table,	void* src_obj_ptr,
						IpT_Dest_Prefix dest_prefix, InetT_Address next_hop,
						IpT_Port_Info port_info, int metric, IpT_Rte_Proc_Id proto, int admin_distance, int options);

Compcode			Inet_Cmn_Rte_Table_Entry_Delete (IpT_Cmn_Rte_Table* route_table, IpT_Dest_Prefix dest_prefix,
						InetT_Address next_hop, IpT_Rte_Proc_Id proto);

Compcode            Inet_Cmn_Rte_Table_Route_Delete (IpT_Cmn_Rte_Table* route_table, IpT_Dest_Prefix dest_prefix,
                        IpT_Rte_Proc_Id proto);

Compcode			Inet_Cmn_Rte_Table_Entry_Update (IpT_Cmn_Rte_Table* route_table, IpT_Dest_Prefix dest_prefix,
						InetT_Address next_hop, IpT_Rte_Proc_Id proto, InetT_Address new_next_hop, IpT_Port_Info new_port_info,
						int new_metric, void* src_obj_ptr);

Boolean				Inet_Cmn_Rte_Table_Entry_Exists (IpT_Cmn_Rte_Table* route_table, IpT_Dest_Prefix dest_prefix,
						int admin_distance);

void				Inet_Cmn_Rte_Table_Clear (IpT_Cmn_Rte_Table* route_table, InetT_Addr_Family addr_family);

/* Macro cover function for Inet_Cmn_Rte_Table_Entry_Add */
#define		Inet_Cmn_Rte_Table_Entry_Add(_rte_table, _src_ptr, _dest, _next_hop, _port_info, _metric, _proto, _admin) \
				Inet_Cmn_Rte_Table_Entry_Add_Options (_rte_table, _src_ptr, _dest, _next_hop, _port_info,\
					_metric, _proto, _admin, IPC_CMN_RTE_TABLE_ENTRY_NO_OPTION)

/* Macros for API funcitons using IpT_Address structure	*/
#define		Ip_Cmn_Rte_Table_Entry_Add(_rte_table, _src_ptr, _dest, _mask, _next_hop, _port_info, _metric, _proto, _admin) \
					Inet_Cmn_Rte_Table_Entry_Add (_rte_table, _src_ptr, ip_cmn_rte_table_v4_dest_prefix_create (_dest, _mask), \
						inet_address_from_ipv4_address_create (_next_hop), _port_info, _metric, _proto, _admin)

#define		Ip_Cmn_Rte_Table_Entry_Delete(_rte_table, _dest, _mask, _next_hop, _proto) \
					Inet_Cmn_Rte_Table_Entry_Delete (_rte_table, ip_cmn_rte_table_v4_dest_prefix_create (_dest, _mask), \
						inet_address_from_ipv4_address_create (_next_hop), _proto)

#define		Ip_Cmn_Rte_Table_Route_Delete(_rte_table, _dest, _mask, _proto) \
					Inet_Cmn_Rte_Table_Route_Delete (_rte_table, ip_cmn_rte_table_v4_dest_prefix_create (_dest, _mask), _proto)

#define		Ip_Cmn_Rte_Table_Entry_Update(_rte_table, _dest, _mask, _next_hop, _proto, _new_next_hop, _port_info, _metric, _src_obj_ptr) \
					Inet_Cmn_Rte_Table_Entry_Update (_rte_table, ip_cmn_rte_table_v4_dest_prefix_create ((_dest), (_mask)), \
						inet_address_from_ipv4_address_create (_next_hop), _proto, \
						inet_address_from_ipv4_address_create (_new_next_hop), _port_info, _metric, _src_obj_ptr)

#define		Ip_Cmn_Rte_Table_Entry_Exists(_rte_table, _dest, _mask, _admin) \
					Inet_Cmn_Rte_Table_Entry_Exists(_rte_table, ip_cmn_rte_table_v4_dest_prefix_create (_dest, _mask), _admin)

#define		ip_cmn_rte_table_v4_dest_prefix_create	inet_ipv4_address_range_network_create

Compcode			ip_cmn_rte_table_lookup_cache (int fast_address_unused, 
						IpT_Cmn_Rte_Table* route_table, IpT_Address dest, IpT_Address* next_hop_ptr,
						IpT_Port_Info* port_info_ptr, IpT_Rte_Proc_Id* src_proto_ptr, IpT_Cmn_Rte_Table_Entry** rte_entry_pptr,
						int dest_fast_addr, int src_fast_addr, int lookup_index);

Compcode			ip_cmn_rte_table_recursive_lookup_cache (int fast_address_unused, 
						IpT_Cmn_Rte_Table* route_table, IpT_Address dest, 
						IpT_Address* next_hop_ptr, IpT_Port_Info* port_info_ptr, 
						IpT_Rte_Proc_Id* src_proto_ptr, IpT_Cmn_Rte_Table_Entry ** rte_entry_pptr, 
						int dest_host_addr, int src_host_addr);

Compcode			inet_cmn_rte_table_lookup_cache (IpT_Cmn_Rte_Table* route_table, InetT_Address dest,
						InetT_Address* next_hop_ptr, IpT_Port_Info* port_info_ptr, IpT_Rte_Proc_Id* src_proto_ptr,
						IpT_Cmn_Rte_Table_Entry** rte_entry_pptr, int dest_host_addr, int src_host_addr, int lookup_index);

Compcode			inet_cmn_rte_table_recursive_lookup_cache (IpT_Cmn_Rte_Table* route_table,
						InetT_Address dest, InetT_Address* next_hop_ptr, IpT_Port_Info* port_info_ptr, 
						IpT_Rte_Proc_Id* src_proto_ptr, IpT_Cmn_Rte_Table_Entry ** rte_entry_pptr, 
						int dest_host_addr, int src_host_addr);

void				ip_cmn_rte_static_route_add (IpT_Cmn_Rte_Table* route_table, IpT_Rte_Table* static_route_table,
						IpT_Dest_Prefix dest_prefix, InetT_Address next_hop, IpT_Port_Info port_info,
						int admin_distance);

void				ip_cmn_rte_default_network_add (IpT_Cmn_Rte_Table* route_table, InetT_Address network_address);

void				ip_cmn_rte_table_entry_free (IpT_Cmn_Rte_Table_Entry* entry, IpT_Cmn_Rte_Table* route_table);

IpT_Rte_Proc_Id		ip_cmn_rte_table_entry_src_proto_get (IpT_Cmn_Rte_Table_Entry* route_entry);

Compcode			inet_cmn_rte_table_entry_exists (IpT_Cmn_Rte_Table* route_table, IpT_Dest_Prefix dest_prefix,
						IpT_Cmn_Rte_Table_Entry** route_entry_pptr);

#define		ip_cmn_rte_table_entry_exists(_route_table, _dest, _mask, _entry_pptr) \
					inet_cmn_rte_table_entry_exists (_route_table, ip_cmn_rte_table_v4_dest_prefix_create (_dest, _mask), \
						_entry_pptr)

int					ip_cmn_rte_table_num_entries_get (IpT_Cmn_Rte_Table* route_table, int addr_family);

IpT_Cmn_Rte_Table_Entry*
					ip_cmn_rte_table_access (IpT_Cmn_Rte_Table* route_table, int i, int addr_family);

void*				ip_cmn_rte_table_entry_src_obj_ptr_get (IpT_Cmn_Rte_Table_Entry* route_entry);

char*				ip_cmn_rte_proto_name_print (char* proto_str, IpT_Rte_Proc_Id protocol);

Compcode			ip_cmn_rte_table_print (IpT_Cmn_Rte_Table* route_table);

void				ip_cmn_rte_table_redistribute (IpT_Cmn_Rte_Table* route_table);

IpT_Rte_Prot_Type	ip_cmn_rte_table_intf_rte_proto_to_dyn_rte_proto (int);

void				ip_cmn_rte_table_import_from_external_file_log_write (void);

IpT_Rte_Proc_Id		ip_cmn_rte_table_custom_rte_protocol_id_get (char* custom_rte_protocol_label_ptr);

const char*			ip_cmn_rte_table_custom_rte_protocol_label_get (IpT_Rte_Proc_Id custom_rte_protocol_id);

#define				ip_cmn_rte_table_best_default_route_get(_route_table)	((_route_table)->best_default_route)

int 				ip_cmn_rte_table_entry_hop_num (IpT_Cmn_Rte_Table* route_table, IpT_Cmn_Rte_Table_Entry * rte_entry_ptr);

InetT_Address 		inet_cmn_rte_table_entry_hop_get (IpT_Cmn_Rte_Table_Entry * rte_entry_ptr, int hop_index, IpT_Port_Info* port_info_ptr);

#define				ip_cmn_rte_table_entry_hop_get(_entry, _index, _port_info_ptr)	inet_ipv4_address_get (inet_cmn_rte_table_entry_hop_get(_entry, _index, _port_info_ptr))

#define				ip_cmn_rte_table_next_hop_addr_get(_next_hop_ptr)	(inet_ipv4_address_get ((_next_hop_ptr)->next_hop))

char *				ip_cmn_rte_global_exp_file_create (void);

int					ip_cmn_rte_table_entry_least_cost_get (const IpT_Cmn_Rte_Table_Entry *rte_entry_ptr);

int 				ip_cmn_rte_table_entry_cost_get (IpT_Cmn_Rte_Table_Entry *rte_entry_ptr,int hop_index);

void				Ip_Cmn_Rte_Table_Install_Routing_Proc (IpT_Cmn_Rte_Table *ip_route_table, IpT_Rte_Proc_Id routeproc_id, Prohandle routeproc_handle);
void				Ip_Cmn_Rte_Table_Install_Redist_Matrix_Entry (IpT_Cmn_Rte_Table *ip_route_table, IpT_Rte_Proc_Id dest_routeproc_id,
						IpT_Rte_Proc_Id src_routeproc_id, void *redist_metric, int bgp_redist_type);

Prohandle			Ip_Cmn_Rte_Table_Pro_Handle_From_Proto_Id (IpT_Rte_Proc_Id routeproc_id, IpT_Cmn_Rte_Table *ip_route_table);
void *				Ip_Cmn_Rte_Table_Redist_Metric_Get (IpT_Cmn_Rte_Table *ip_route_table, IpT_Rte_Proc_Id to_routeproc_id, IpT_Rte_Proc_Id from_routeproc_id);
IpT_Rte_Proc_Id		Ip_Cmn_Rte_Table_Normalized_Route_Proc_Id (IpT_Rte_Proc_Id specific_routeproc_id);

/* Redistribution related procedures											*/
void				ip_cmn_rte_table_redist_proto_add_message (IpT_Rte_Proc_Id dest_routeproc_id, IpT_Rte_Proc_Id src_routeproc_id,
						IpT_Address dest_addr, int dest_mask_length, IpT_Address next_hop, int metric);
void				ip_cmn_rte_table_redist_proto_withdraw_message (IpT_Rte_Proc_Id dest_routeproc_id, IpT_Rte_Proc_Id src_routeproc_id,
						IpT_Address dest_addr, int dest_mask_length, IpT_Address next_hop);
void				ip_cmn_rte_table_redist_proto_update_message (IpT_Rte_Proc_Id dest_routeproc_id, IpT_Rte_Proc_Id src_routeproc_id,
						IpT_Address dest_addr, int dest_mask_length, IpT_Address next_hop, int metric);

/* Routing Policies related procedures											*/
void*				ip_rte_table_static_entry_access (IpT_Rte_Table_Entry*, int);
Boolean				ip_rte_table_static_entry_match (IpT_Rte_Table_Entry* rte_entry_ptr, IpT_Rte_Map_Match_Info* match_info_ptr, 
								IpT_Acl_Table* as_path_table, IpT_Acl_Table* comm_table, 
								IpT_Acl_Table* acl_table, IpT_Acl_Table* prefix_table, IpT_Acl_Pre_Override* override);

void*				ip_cmn_rte_table_dir_conn_rte_entry_access (IpT_Cmn_Rte_Table_Entry* rte_entry_ptr, int match_condition);

Boolean				ip_cmn_rte_table_dir_conn_rte_entry_match (IpT_Cmn_Rte_Table_Entry* rte_entry_ptr, IpT_Rte_Map_Match_Info* match_info_ptr, 
								IpT_Acl_Table* as_path_table, IpT_Acl_Table* comm_table, 
								IpT_Acl_Table* acl_table, IpT_Acl_Table* prefix_table, IpT_Acl_Pre_Override* override);

void				ip_cmn_rte_table_dest_src_table_print (IpT_Cmn_Rte_Table* route_table_ptr);
void				ip_cmn_rte_table_redist_ici_info_destroy (IpT_Redist_Ici_Info* redistr_info_ptr);
IpT_Cmn_Rte_Table_Entry*
					ip_cmn_rte_table_entry_copy (IpT_Cmn_Rte_Table_Entry* entry_ptr);
void				ip_cmn_rte_table_golr_print (IpT_Cmn_Rte_Table* route_table);
void				ip_cmn_rte_table_default_routes_print (IpT_Cmn_Rte_Table* route_table);

#define				ip_cmn_rte_table_is_vrf(_ip_cmn_rte_table) ((_ip_cmn_rte_table)->vrf_table_ptr != OPC_NIL)

/* This function has been phased out. Calls to this function from routing protocol code may be deleted.	*/
#define				ip_cmn_rte_table_proto_init(_rte_table, proto_flag)  ;

#define				ip_cmn_rte_table_vrf_table_get(_ip_cmn_rte_table) ((_ip_cmn_rte_table)->vrf_table_ptr)
#if defined (__cplusplus)
} /* end of 'extern "C" {' */
#endif

#endif			/* _IP_CMN_RTE_TABLE_H_INCL_	*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -