📄 ip_cmn_rte_table.h
字号:
} 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 + -