📄 ip_rte_support.h
字号:
IpC_Rte_Process_Type_Distrib_Cpu,
IpC_Rte_Process_Type_Slot,
IpC_Rte_Process_Type_Cloud
} IpT_Rte_Process_Type;
/* Information used for tracer packets that need to be forwarded */
/* to a set of interfaces. */
typedef struct IpT_Tracer_Info
{
IpT_Interface_Info * interface_ptr;
int minor_port;
int output_intf_index;
InetT_Address next_addr;
double ratio;
} IpT_Tracer_Info;
/* Structure to pass info to MANET routing protocol (AODV, DYMO) from IP */
/* Code will define void* pointer type, which can be Application */
/* layer packet or a Destination Address. */
typedef struct ManetT_Info
{
int code;
void* manet_info_type_ptr;
} ManetT_Info;
/* Structure to pass on the nexthop info of MANET (AODV, DYMO) control */
/* packets to IP. This is facilitated by even state functions. */
typedef struct ManetT_Nexthop_Info
{
InetT_Address next_hop_addr;
int output_table_index;
IpT_Interface_Info* interface_info_ptr;
} ManetT_Nexthop_Info;
/* the flow mapping on interface from one flow_id to another */
/* this is the element of the "per_if_flow_mapping" of IpT_Interface_Info */
typedef struct
{
double in_flow;
double out_flow;
InetT_Address next_hop_addr;
} IpT_Flow_Pair;
/* Type used by the ip_rte_proto_intf_attr_objid_table functions */
typedef PrgT_String_Hash_Table* IpT_Intf_Name_Objid_Table_Handle;
#define IpC_Intf_Name_Objid_Table_Invalid ((IpT_Intf_Name_Objid_Table_Handle) OPC_NIL)
/* Used for broadcast */
typedef void (*IpT_Rte_Datagram_Interface_Forward)(IpT_Rte_Module_Data *,
InetT_Address dest_addr, InetT_Address next_addr, Packet* pk_ptr,
int intf_tbl_index, IpT_Rte_Ind_Ici_Fields* intf_ici_fdstruct_ptr);
void ip_rte_set_procs (IpT_Rte_Module_Data * iprmd_ptr,
IpT_Rte_Error_Proc error_proc, IpT_Rte_Warning_Proc warning_proc);
/* Macro for checking whether a node is a gateway or not */
#define ip_rte_node_is_gateway(_iprmd_ptr) ((Boolean) ((_iprmd_ptr)->gateway_status))
/* Macros for checking if IPv4/IPv6 is active on a node. */
#define ip_rte_node_ipv4_active(_iprmd_ptr) ((Boolean) ((_iprmd_ptr)->first_loopback_intf_index != IPC_INTF_INDEX_INVALID))
#define ip_rte_node_ipv6_active(_iprmd_ptr) ((Boolean) ((_iprmd_ptr)->first_ipv6_loopback_intf_index != IPC_INTF_INDEX_INVALID))
#define ip_rte_node_ip_version_active(_iprmd_ptr, _ver) \
((Boolean) (((InetC_Addr_Family_v4 == (_ver)) && ((_iprmd_ptr)->first_loopback_intf_index != IPC_INTF_INDEX_INVALID)) || \
((InetC_Addr_Family_v6 == (_ver)) && ((_iprmd_ptr)->first_ipv6_loopback_intf_index != IPC_INTF_INDEX_INVALID))))
/* Functions used to interface with the IpT_Interface_Table structure */
#define ip_rte_num_interfaces_get(_iprmd_ptr) ((_iprmd_ptr)->interface_table.num_ipv4_interfaces)
#define inet_rte_num_interfaces_get(_iprmd_ptr) ((_iprmd_ptr)->interface_table.total_interfaces)
#define inet_rte_num_phy_interfaces_get(_iprmd_ptr) ((_iprmd_ptr)->num_phys_interfaces)
#define ipv6_rte_num_interfaces_get(_iprmd_ptr) ((_iprmd_ptr)->interface_table.num_ipv6_interfaces)
#define inet_first_ipv4_intf_index_get(_iprmd_ptr) (0)
#define inet_last_ipv4_intf_index_get(_iprmd_ptr) ((_iprmd_ptr)->interface_table.num_ipv4_interfaces - 1)
#define inet_first_ipv6_intf_index_get(_iprmd_ptr) ((_iprmd_ptr)->interface_table.total_interfaces - \
(_iprmd_ptr)->interface_table.num_ipv6_interfaces)
#define inet_last_ipv6_intf_index_get(_iprmd_ptr) ((_iprmd_ptr)->interface_table.total_interfaces - 1)
#define inet_ipv6_intf_index_to_inet_index_convert(_iprmd_ptr, _ipv6_index) \
((_ipv6_index) + inet_first_ipv6_intf_index_get (_iprmd_ptr))
#define inet_intf_index_to_ipv6_intf_index_convert(_iprmd_ptr, _inet_index) \
((_inet_index) - inet_first_ipv6_intf_index_get (_iprmd_ptr))
/* Macros to check if IPv4/IPv6 is active on the interface. */
#define ip_rte_intf_ipv4_active(_intf_ptr) ((Boolean) ((_intf_ptr)->addr_range_ptr != OPC_NIL))
#define ip_rte_intf_ipv6_active(_intf_ptr) ((Boolean) ((_intf_ptr)->ipv6_info_ptr != OPC_NIL))
#define ip_rte_intf_ip_version_active(_intf_ptr, _ver) \
((Boolean) (((InetC_Addr_Family_v4 == (_ver)) && ((_intf_ptr)->addr_range_ptr != OPC_NIL)) || \
((InetC_Addr_Family_v6 == (_ver)) && ((_intf_ptr)->ipv6_info_ptr != OPC_NIL))))
/* Macro for checking whether an interface is a subinterface or a */
/* physical interface. Note that even loopbacks will be considered */
/* physical since they are not subintefaces. */
#define ip_rte_intf_is_physical(_intf_ptr) ((Boolean) (IPC_SUBINTF_PHYS_INTF == (_intf_ptr)->subintf_addr_index))
/* Macro for checking whether an interface is loopback. */
#define ip_rte_intf_is_loopback(_intf_ptr) ((Boolean) (IpC_Intf_Status_Loopback == (_intf_ptr)->phys_intf_info_ptr->intf_status))
/* Macro for checking whether an interface is unconnected. */
#define ip_rte_intf_is_unconnected(_intf_ptr) ((Boolean) (IpC_Intf_Status_Unconnected == (_intf_ptr)->phys_intf_info_ptr->intf_status))
/* Macro for checking whether an interface is a tunnel */
#define ip_rte_intf_is_tunnel(_intf_ptr) ((Boolean) ((_intf_ptr)->tunnel_info_ptr != OPC_NIL))
/* Macro for checking whether a given interface is logical. */
#define ip_rte_intf_is_logical(_intf_ptr) ((Boolean) (IPC_PORT_NUM_INVALID == ip_rte_intf_in_port_num_get (_intf_ptr)))
/* Macros for checking if a given tunnel interface is point to */
/* multipoint or not. */
#define ip_rte_intf_tunnel_is_point_to_multipoint_v6(_intf_ptr) ((Boolean) (IpC_Tunnel_Mode_IPv6_6to4 == (_intf_ptr)->tunnel_info_ptr->mode))
#define ip_rte_intf_tunnel_is_point_to_multipoint_v4(_intf_ptr) ((Boolean) (0 != (_intf_ptr)->tunnel_info_ptr->dest_count))
/* Used to access what is currently */
/* IpT_Phys_Interface_Info type */
#define ip_rte_intf_type_get(_intf_ptr) ((IpT_Interface_Type) ((_intf_ptr)->phys_intf_info_ptr->intf_type))
#define ip_rte_intf_addr_index_get(_intf_ptr) ((short) ((_intf_ptr)->phys_intf_info_ptr->addr_index))
#define ip_rte_intf_ip_addr_index_get(_intf_ptr) ((short) ((_intf_ptr)->phys_intf_info_ptr->ip_addr_index))
#define ip_rte_intf_out_port_num_get(_intf_ptr) ((short) ((_intf_ptr)->phys_intf_info_ptr->port_num))
#define ip_rte_intf_in_port_num_get(_intf_ptr) ((short) ((_intf_ptr)->phys_intf_info_ptr->in_port_num))
#define ip_rte_intf_slot_index_get(_intf_ptr) ((short) ((_intf_ptr)->phys_intf_info_ptr->slot_index))
#define ip_rte_intf_conn_link_objid_get(_intf_ptr) ((Objid) ((_intf_ptr)->phys_intf_info_ptr->connected_link_objid))
#define ip_rte_intf_link_bandwidth_get(_intf_ptr) ((double) ((_intf_ptr)->phys_intf_info_ptr->link_bandwidth))
#define ip_rte_intf_unnumbered(_intf_ptr) ((Boolean) (OPC_NIL != (_intf_ptr)->unnumbered_info))
#define ip_rte_unnumbered_intf_addr_get(_intf_ptr) ((IpT_Address) ((_intf_ptr)->unnumbered_info->interface_addr))
#define ip_rte_intf_status_get(_intf_ptr) ((IpT_Interface_Status) ((_intf_ptr)->phys_intf_info_ptr->intf_status))
#define ip_rte_intf_link_status_get(_intf_ptr) ((Boolean) ((_intf_ptr)->phys_intf_info_ptr->link_status))
#define ip_rte_intf_link_is_failed(_intf_ptr) ((Boolean) ((_intf_ptr)->phys_intf_info_ptr->link_status == 0))
#define ip_rte_intf_active(_intf_ptr) ((Boolean) (IpC_Intf_Status_Shutdown != ((_intf_ptr)->phys_intf_info_ptr->intf_status)))
#define ip_rte_intf_is_shutdown(_intf_ptr) ((Boolean) (IpC_Intf_Status_Shutdown == ((_intf_ptr)->phys_intf_info_ptr->intf_status)))
#define ip_rte_intf_is_group(_intf_ptr) ((Boolean) (IpC_Intf_Status_Group == ((_intf_ptr)->phys_intf_info_ptr->intf_status)))
#define ip_rte_num_subinterfaces_get(_intf_ptr) ((const int) ((_intf_ptr)->phys_intf_info_ptr->num_subinterfaces))
#define ip_rte_ith_subintf_info_get(_intf_ptr, _i) ((IPC_SUBINTF_PHYS_INTF == _i) ? (_intf_ptr) : (_intf_ptr)->phys_intf_info_ptr->subintf_pptr[_i])
#define ip_rte_intf_lower_layer_addr_get(_intf_ptr) ((int) ((_intf_ptr)->phys_intf_info_ptr->lower_layer_addr))
#define ip_rte_intf_lower_layer_addr_type_get(_intf_ptr) ((IpT_Intf_Lower_Layer_Type) ((_intf_ptr)->phys_intf_info_ptr->lower_layer_type))
/* Used to access what is currently */
/* IpT_Interface_Info type */
#define ip_rte_intf_index_get(_intf_ptr) ((int) ((_intf_ptr)->intf_index))
#define ip_rte_intf_addr_range_get(_intf_ptr) ((IpT_Address_Range *) ((_intf_ptr)->addr_range_ptr))
#define ip_rte_intf_addr_get(_intf_ptr) ((const IpT_Address) ((_intf_ptr)->addr_range_ptr->address))
#define ip_rte_intf_mask_get(_intf_ptr) ((const IpT_Address) ((_intf_ptr)->addr_range_ptr->subnet_mask))
#define ip_rte_intf_network_address_get(_intf_ptr) ((const IpT_Address) ((_intf_ptr)->network_address))
#define ip_rte_intf_name_get(_intf_ptr) ((char *) ((_intf_ptr)->full_name))
#define ip_rte_intf_name_string_get(_intf_ptr, _intf_name_str) \
(strcpy (_intf_name_str, ip_rte_intf_name_get (_intf_ptr)))
#define inet_rte_intf_mtu_get(_intf_ptr,_addr_family) ((InetC_Addr_Family_v6 == _addr_family) ? IPV6C_MIN_MTU : ((_intf_ptr)->mtu))
#define ip_rte_intf_mtu_get(_intf_ptr) ((_intf_ptr)->mtu)
#define ip_rte_intf_routing_prot_get(_intf_ptr) ((List *) ((_intf_ptr)->routing_protocols_lptr))
#define ip_rte_intf_load_bits_get(_intf_ptr) ((const double) ((_intf_ptr)->load_bits))
#define ip_rte_intf_load_bps_get(_intf_ptr) ((const double) ((_intf_ptr)->load_bps))
#define ip_rte_intf_avail_bw_get(_intf_ptr) ((const double) ((_intf_ptr)->avail_bw))
#define ip_rte_intf_delay_get(_intf_ptr) ((const double) ((_intf_ptr)->delay))
#define ip_rte_intf_reliability_get(_intf_ptr) ((const double) ((_intf_ptr)->reliability))
#define ip_rte_intf_comp_info_get(_intf_ptr) ((IpT_Compression_Info *) ((_intf_ptr)->comp_info))
#define ip_rte_intf_group_info_get(_intf_ptr) ((IpT_Group_Intf_Info *) ((_intf_ptr)->phys_intf_info_ptr->group_info_ptr))
#define ip_rte_intf_group_type_get(_intf_ptr) ((const IpT_Intf_Aggregation_Type) ((_intf_ptr)->phys_intf_info_ptr->group_info_ptr->aggregation_type))
#define ip_rte_intf_mcast_enabled(_intf_ptr) ((const Boolean) ((_intf_ptr)->multicast_enabled))
#define ip_rte_intf_igmp_enabled(_intf_ptr) ((const Boolean) ((_intf_ptr)->igmp_enabled))
#define ip_rte_intf_igmp_ph_get(_intf_ptr) ((Prohandle) ((_intf_ptr)->igmp_rte_iface_ph))
#define ip_rte_intf_load_bgutil_get(_intf_ptr) ((OmsT_Bgutil_Routed_State *) ((_intf_ptr)->load_bgutil_routed_state_ptr))
#define ip_rte_intf_last_load_update_get(_intf_ptr) ((double) ((_intf_ptr)->last_load_update_time))
#define ip_rte_intf_queuing_scheme_get(_intf_ptr) ((IpT_Queuing_Scheme) ((_intf_ptr)->queuing_scheme))
#define ip_rte_intf_output_ph_get(_intf_ptr) ((Prohandle) ((_intf_ptr)->output_iface_prohandle))
#define ip_rte_intf_rsvp_enabled(_intf_ptr) ((Boolean) ((_intf_ptr)->rsvp_enabled))
#define ip_rte_intf_sub_addr_index_get(_intf_ptr) ((short) ((_intf_ptr)->subintf_addr_index))
#define ip_rte_intf_l2_mappings_get(_intf_ptr) ((IpT_Layer2_Mappings) ((_intf_ptr)->layer2_mappings))
#define ip_rte_intf_user_metrics_get(_intf_ptr) ((IpT_Intf_User_Metrics *) ((_intf_ptr)->user_metrics))
#define ip_rte_intf_no_ip_address(_intf_ptr) ((Boolean) (ip_address_equal ((_intf_ptr)->addr_range_ptr->address, IpI_No_Ip_Address)))
#define ip_rte_intf_is_dumb(_intf_ptr) ((Boolean) (IpC_Intf_Type_Dumb == ip_rte_intf_type_get (_intf_ptr)))
#define ip_rte_intf_is_smart(_intf_ptr) ((Boolean) (IpC_Intf_Type_Smart == ip_rte_intf_type_get (_intf_ptr)))
#define ip_rte_intf_is_ethernet_group(_intf_ptr) ((Boolean) (IpC_Intf_Aggregation_Type_Ethernet == ip_rte_intf_group_type_get (_intf_ptr)))
/* Macros for identifying MIPv6 node types. */
#define ip_rte_intf_is_mipv6_home_agent(_intf_ptr) (((_intf_ptr)->ipv6_info_ptr->mipv6_info_ptr != OPC_NIL) && ((_intf_ptr)->ipv6_info_ptr->mipv6_info_ptr->mipv6_iface_type == Mipv6C_Home_Agent))
#define ip_rte_node_is_mipv6_enabled(_iprmd_ptr) (((_iprmd_ptr)->mipv6_info_ptr != OPC_NIL))
#define ip_rte_node_is_mipv6_home_agent(_iprmd_ptr) (((_iprmd_ptr)->mipv6_info_ptr != OPC_NIL) && ((_iprmd_ptr)->mipv6_info_ptr->node_type == Mipv6C_Home_Agent))
#define ip_rte_node_is_mipv6_mobile_node(_iprmd_ptr) (((_iprmd_ptr)->mipv6_info_ptr != OPC_NIL) && ((_iprmd_ptr)->mipv6_info_ptr->node_type == Mipv6C_Mobile_Node))
#define ip_rte_node_is_mipv6_correspondent_node(_iprmd_ptr) (((_iprmd_ptr)->mipv6_info_ptr != OPC_NIL) && ((_iprmd_ptr)->mipv6_info_ptr->node_type == Mipv6C_Correspondent_Node))
/* Macros for accessing fields in IpT_Tunnel_Info structure */
#define ip_rte_intf_tunnel_mode_get(_intf_ptr) ((_intf_ptr)->tunnel_info_ptr->mode)
#define ip_rte_tunnel_dest_addr_get(_intf_ptr) ((_intf_ptr)->tunnel_info_ptr->dest_addr)
/* IPv6 related functions */
#define ip_rte_intf_link_local_addr_get(_intf_ptr) (inet_address_range_addr_get (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[0])))
#define ip_rte_intf_link_local_addr_get_fast(_intf_ptr) (inet_address_range_addr_get_fast (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[0])))
#define ip_rte_intf_link_local_addr_range_get_fast(_intf_ptr) ((&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[0])))
#define ip_rte_intf_link_local_addr_equal(_intf_ptr,_addr) (inet_address_range_address_equal (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[0]), &(_addr)))
#define ip_rte_intf_num_ipv6_addrs_get(_intf_ptr) ((_intf_ptr)->ipv6_info_ptr->num_addresses)
#define ip_rte_intf_ith_ipv6_addr_get(_intf_ptr,_i) (inet_address_range_addr_get (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[_i])))
#define ip_rte_intf_ith_ipv6_addr_get_fast(_intf_ptr, _i) (inet_address_range_addr_get_fast (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[_i])))
#define ip_rte_intf_ith_ipv6_addr_equal(_intf_ptr, _i, _addr) (inet_address_range_address_equal (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[_i]), &(_addr)))
#define ip_rte_intf_ith_ipv6_addr_range_get_fast(_intf_ptr, _i) (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[_i]))
#define ip_rte_intf_ith_ipv6_prefix_len_get(_intf_ptr, _i) (inet_address_range_mask_get (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[_i])))
#define ip_rte_intf_ith_ipv6_ntwk_addr_get(_intf_ptr, _i) (inet_address_range_network_addr_get (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[_i])))
#define ip_rte_intf_num_ipv6_gbl_addrs_get(_intf_ptr) (ipv6_rte_intf_num_gbl_addrs_get ((_intf_ptr)->ipv6_info_ptr))
#define ip_rte_intf_ith_gbl_ipv6_addr_get(_intf_ptr,_i) (inet_address_range_addr_get (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[(_i) + 1])))
#define ip_rte_intf_ith_gbl_ipv6_addr_get_fast(_intf_ptr, _i) (inet_address_range_addr_get_fast (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[(_i) + 1])))
#define ip_rte_intf_ith_gbl_ipv6_addr_equal(_intf_ptr,_i,_addr) (inet_address_range_address_equal (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[(_i) + 1]), _addr))
#define ip_rte_intf_ith_gbl_ipv6_addr_range_get(_intf_ptr, _i) (ipv6_rte_intf_ith_gbl_addr_range_get ((_intf_ptr)->ipv6_info_ptr, (_i)))
#define ip_rte_intf_ith_gbl_ipv6_addr_range_get_fast(_intf_ptr, _i) (ipv6_rte_intf_ith_gbl_addr_range_get_fast ((_intf_ptr)->ipv6_info_ptr, (_i)))
#define ip_rte_intf_ith_gbl_ipv6_prefix_len_get(_intf_ptr, _i) (inet_address_range_mask_get (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[_i + 1])))
#define ip_rte_intf_ith_gbl_ipv6_ntwk_addr_get(_intf_ptr, _i) (inet_address_range_network_addr_get (&((_intf_ptr)->ipv6_info_ptr->ipv6_addr_array[_i + 1])))
#define ip_rte_intf_mac_addr_get(_intf_ptr) ((_intf_ptr)->ipv6_info_ptr->mac_addr)
#define ipv6_rte_intf_num_gbl_addrs_get(_ipv6_info_ptr) (((_ipv6_info_ptr)->num_addresses) - 1)
#define ipv6_rte_intf_ith_gbl_addr_range_get(_ipv6_info_ptr,_i) (inet_address_range_copy ((_ipv6_info_ptr)->ipv6_addr_array[(_i) + 1]))
#define ipv6_rte_intf_ith_gbl_addr_range_get_fast(_ipv6_info_ptr, _i) (&((_ipv6_info_ptr)->ipv6_addr_array[(_i) + 1]))
/* Default route related funcitons. */
InetT_Address inet_default_route_get (IpT_Rte_Module_Data* iprmd_ptr, InetT_Addr_Family addr_family, short* out_intf_index_ptr);
#define inet_default_route_available(_iprmd_ptr, _addr_family) (inet_address_valid (_iprmd_ptr->default_route_addr_array[_addr_family]))
#define ip_default_route_available(_iprmd_ptr) (inet_address_valid ((_iprmd_ptr)->default_route_addr_array[InetC_Addr_Family_v4]))
#define ip_default_route_get(_iprmd_ptr, intf_index_ptr) (inet_ipv4_address_get (\
inet_default_route_get (_iprmd_ptr,InetC_Addr_Family_v4,intf_index_ptr)))
/* Macros for accessing the first loopback index. */
#define ip_rte_first_loopback_intf_index_get(_iprmd_ptr, _addr_family) \
((InetC_Addr_Family_v4 == _addr_family) ? (_iprmd_ptr->first_loopback_intf_index) : (_iprmd_ptr->first_ipv6_loopback_intf_index))
/* Macros to access secondary IP address information */
#define ip_rte_intf_num_secondary_addresses_get(_intf_ptr) \
((_intf_ptr->sec_addr_tbl_ptr == OPC_NIL) ? 0 : (_intf_ptr)->sec_addr_tbl_ptr->num_sec_addresses)
/* Following macros assume that the interface has secondary addresses */
/* Macro for accessing the ith secondary address. If the index */
/* passed is -1, the primary address is returned. */
#define ip_rte_intf_secondary_addr_range_get(_intf_ptr, _ith_addr) \
((-1 == (_ith_addr)) ? ((_intf_ptr)->addr_range_ptr) : (&((_intf_ptr)->sec_addr_tbl_ptr->sec_addr_array[_ith_addr].ip_addr_range)))
#define inet_rte_intf_secondary_addr_range_get(_intf_ptr, _ith_addr) \
((-1 == (_ith_addr)) ? (&((_intf_ptr)->inet_addr_range)) : (&((_intf_ptr)->sec_addr_tbl_ptr->sec_addr_array[_ith_addr].inet_addr_range)))
#define ip_rte_intf_secondary_addr_get(_intf_ptr, _ith_addr) \
((-1 == (_ith_addr)) ? ((_intf_ptr)->addr_range_ptr->address) : ((_intf_ptr)->sec_addr_tbl_ptr->sec_addr_array[_ith_addr].ip_addr_range.address))
#define inet_rte_intf_secondary_addr_get(_intf_ptr, _ith_addr) \
(inet_address_from_ipv4_address_create (ip_rte_intf_secondary_addr_get ((_intf_ptr), (_ith_addr))))
#define ip_rte_intf_secondary_addr_mask_get(_intf_ptr, _ith_addr) \
((-1 == (_ith_addr)) ? ((_intf_ptr)->addr_range_ptr->subnet_mask) : ((_intf_ptr)->sec_addr_tbl_ptr->sec_addr_array[_ith_addr].ip_addr_range.subnet_mask))
#define inet_rte_intf_secondary_addr_equal(_intf_ptr, _i, _addr) \
(ip_address_equal (ip_rte_intf_secondary_addr_get((_intf_ptr), (_i)), inet_ipv4_address_get (_addr)))
/* Macros for setting elements in the IpT_Interface_Info structure. */
void ip_rte_intf_last_load_update_set (IpT_Interface_Info *intf_info_ptr, double new_last_load_update);
void ip_rte_intf_load_bits_set (IpT_Interface_Info *intf_info_ptr, double new_load_bits);
void ip_rte_intf_load_bps_set (IpT_Interface_Info *intf_info_ptr, double new_load_bps);
void ip_rte_intf_load_bgutil_set (IpT_Interface_Info *intf_info_ptr, struct OmsT_Bgutil_Routed_State *new_load_bgutil);
void ip_rte_intf_mcast_enabled_set (IpT_Interface_Info *intf_info_ptr, Boolean new_mcast_enabled);
void ip_rte_intf_network_address_set (IpT_Interface_Info *intf_info_ptr, IpT_Address new_network_address);
void ip_rte_intf_name_set (IpT_Interface_Info *intf_info_ptr, char* name);
/* Functions to validate interface indices. */
#define ip_rte_intf_tbl_index_valid(_iprmd_ptr, _i) (((_i) >= 0) && ((_i) < ip_rte_num_interfaces_get (_iprmd_ptr)))
#define ipv6_rte_intf_tbl_index_valid(_iprmd_ptr, _i) (((_i) >= 0) && ((_i) < ipv6_rte_num_interfaces_get (_iprmd_ptr)))
#define inet_rte_intf_tbl_index_valid(_iprmd_ptr, _i) (((_i) >= 0) && ((_i) < inet_rte_num_interfaces_get (_iprmd_ptr)))
/* Functions to access the ith interface. */
IpT_Interface_Info* ip_rte_intf_tbl_access (IpT_Rte_Module_Data* iprmd_ptr, int i);
IpT_Interface_Info* ipv6_rte_intf_tbl_access (IpT_Rte_Module_Data* iprmd_ptr, int i);
IpT_Interface_Info* inet_rte_intf_tbl_access (IpT_Rte_Module_Data* iprmd_ptr, int i);
/* Function to convert an inet interface index to an IPv6 index */
int ip_rte_ipv6_intf_index_get (IpT_Rte_Module_Data * iprmd_ptr, int intf_index);
/* Function that returns the mode of the interface. */
IpT_Interface_Mode ip_rte_intf_mode_get (const IpT_Interface_Info* intf_ptr);
IpT_Interface_Mode ip_rte_node_mode_get (const IpT_Rte_Module_Data* iprmd_ptr);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -