FD.io VPP  v16.06
Vector Packet Processing
ip4.h File Reference
+ Include dependency graph for ip4.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ip4_fib_t
 
struct  ip4_add_del_route_callback_t
 
struct  ip4_add_del_interface_address_callback_t
 
struct  ip4_main_t
 
struct  ip4_add_del_route_args_t
 

Macros

#define IP4_ROUTE_FLAG_ADD   (0 << 0)
 
#define IP4_ROUTE_FLAG_DEL   (1 << 0)
 
#define IP4_ROUTE_FLAG_TABLE_ID   (0 << 1)
 
#define IP4_ROUTE_FLAG_FIB_INDEX   (1 << 1)
 
#define IP4_ROUTE_FLAG_KEEP_OLD_ADJACENCY   (1 << 2)
 
#define IP4_ROUTE_FLAG_NO_REDISTRIBUTE   (1 << 3)
 
#define IP4_ROUTE_FLAG_NOT_LAST_IN_GROUP   (1 << 4)
 
#define IP4_ROUTE_FLAG_NEIGHBOR   (1 << 5)
 

Typedefs

typedef struct ip4_fib_t ip4_fib_t
 
typedef voidip4_add_del_route_function_t) (struct ip4_main_t *im, uword opaque, ip4_fib_t *fib, u32 flags, ip4_address_t *address, u32 address_length, void *old_result, void *new_result)
 
typedef voidip4_add_del_interface_address_function_t) (struct ip4_main_t *im, uword opaque, u32 sw_if_index, ip4_address_t *address, u32 address_length, u32 if_address_index, u32 is_del)
 
typedef struct ip4_main_t ip4_main_t
 

Enumerations

enum  ip4_rx_feature_type_t {
  IP4_RX_FEATURE_CHECK_ACCESS, IP4_RX_FEATURE_SOURCE_CHECK_REACHABLE_VIA_RX, IP4_RX_FEATURE_SOURCE_CHECK_REACHABLE_VIA_ANY, IP4_RX_FEATURE_IPSEC,
  IP4_RX_FEATURE_VPATH, IP4_RX_FEATURE_LOOKUP, IP4_N_RX_FEATURE
}
 

Functions

u32 ip4_fib_lookup_with_table (ip4_main_t *im, u32 fib_index, ip4_address_t *dst, u32 disable_default_route)
 
always_inline u32 ip4_fib_lookup_buffer (ip4_main_t *im, u32 fib_index, ip4_address_t *dst, vlib_buffer_t *b)
 
always_inline u32 ip4_fib_lookup (ip4_main_t *im, u32 sw_if_index, ip4_address_t *dst)
 
always_inline uword ip4_destination_matches_route (ip4_main_t *im, ip4_address_t *key, ip4_address_t *dest, uword dest_length)
 
always_inline uword ip4_destination_matches_interface (ip4_main_t *im, ip4_address_t *key, ip_interface_address_t *ia)
 
always_inline uword ip4_unaligned_destination_matches_route (ip4_main_t *im, ip4_address_t *key, ip4_address_t *dest, uword dest_length)
 
always_inline void ip4_src_address_for_packet (ip4_main_t *im, vlib_buffer_t *p, ip4_address_t *src, u32 sw_if_index)
 
always_inline ip4_address_tip4_interface_address_matching_destination (ip4_main_t *im, ip4_address_t *dst, u32 sw_if_index, ip_interface_address_t **result_ia)
 
clib_error_tip4_add_del_interface_address (vlib_main_t *vm, u32 sw_if_index, ip4_address_t *address, u32 address_length, u32 is_del)
 
int ip4_address_compare (ip4_address_t *a1, ip4_address_t *a2)
 
ip4_fib_tfind_ip4_fib_by_table_index_or_id (ip4_main_t *im, u32 table_index_or_id, u32 flags)
 Get or create an IPv4 fib. More...
 
void ip4_add_del_route (ip4_main_t *im, ip4_add_del_route_args_t *args)
 
void ip4_add_del_route_next_hop (ip4_main_t *im, u32 flags, ip4_address_t *dst_address, u32 dst_address_length, ip4_address_t *next_hop, u32 next_hop_sw_if_index, u32 next_hop_weight, u32 adj_index, u32 explicit_fib_index)
 
voidip4_get_route (ip4_main_t *im, u32 fib_index_or_table_id, u32 flags, u8 *address, u32 address_length)
 
void ip4_foreach_matching_route (ip4_main_t *im, u32 table_index_or_table_id, u32 flags, ip4_address_t *address, u32 address_length, ip4_address_t **results, u8 **result_lengths)
 
void ip4_delete_matching_routes (ip4_main_t *im, u32 table_index_or_table_id, u32 flags, ip4_address_t *address, u32 address_length)
 
void ip4_maybe_remap_adjacencies (ip4_main_t *im, u32 table_index_or_table_id, u32 flags)
 
void ip4_adjacency_set_interface_route (vnet_main_t *vnm, ip_adjacency_t *adj, u32 sw_if_index, u32 if_address_index)
 
clib_error_tip4_probe_neighbor (vlib_main_t *vm, ip4_address_t *dst, u32 sw_if_index)
 
clib_error_tip4_set_arp_limit (u32 arp_limit)
 
uword ip4_udp_register_listener (vlib_main_t *vm, u16 dst_port, u32 next_node_index)
 
void ip4_icmp_register_type (vlib_main_t *vm, icmp4_type_t type, u32 node_index)
 
u16 ip4_tcp_udp_compute_checksum (vlib_main_t *vm, vlib_buffer_t *p0, ip4_header_t *ip0)
 
void ip4_register_protocol (u32 protocol, u32 node_index)
 
int vnet_set_ip4_flow_hash (u32 table_id, u32 flow_hash_config)
 
void ip4_mtrie_init (ip4_fib_mtrie_t *m)
 
int vnet_set_ip4_classify_intfc (vlib_main_t *vm, u32 sw_if_index, u32 table_index)
 
always_inline u32 ip4_compute_flow_hash (ip4_header_t *ip, u32 flow_hash_config)
 

Variables

ip4_main_t ip4_main
 
vlib_node_registration_t ip4_input_node
 (constructor) VLIB_REGISTER_NODE (ip4_input_node) More...
 
vlib_node_registration_t ip4_lookup_node
 (constructor) VLIB_REGISTER_NODE (ip4_lookup_node) More...
 
vlib_node_registration_t ip4_rewrite_node
 (constructor) VLIB_REGISTER_NODE (ip4_rewrite_node) More...
 
vlib_node_registration_t ip4_rewrite_local_node
 (constructor) VLIB_REGISTER_NODE (ip4_rewrite_local_node) More...
 
vlib_node_registration_t ip4_arp_node
 (constructor) VLIB_REGISTER_NODE (ip4_arp_node) More...
 
serialize_function_t serialize_vnet_ip4_main
 
serialize_function_t unserialize_vnet_ip4_main
 

Macro Definition Documentation

#define IP4_ROUTE_FLAG_ADD   (0 << 0)

Definition at line 264 of file ip4.h.

#define IP4_ROUTE_FLAG_DEL   (1 << 0)

Definition at line 265 of file ip4.h.

#define IP4_ROUTE_FLAG_FIB_INDEX   (1 << 1)

Definition at line 267 of file ip4.h.

#define IP4_ROUTE_FLAG_KEEP_OLD_ADJACENCY   (1 << 2)

Definition at line 268 of file ip4.h.

#define IP4_ROUTE_FLAG_NEIGHBOR   (1 << 5)

Definition at line 273 of file ip4.h.

#define IP4_ROUTE_FLAG_NO_REDISTRIBUTE   (1 << 3)

Definition at line 269 of file ip4.h.

#define IP4_ROUTE_FLAG_NOT_LAST_IN_GROUP   (1 << 4)

Definition at line 271 of file ip4.h.

#define IP4_ROUTE_FLAG_TABLE_ID   (0 << 1)

Definition at line 266 of file ip4.h.

Typedef Documentation

typedef void( ip4_add_del_interface_address_function_t) (struct ip4_main_t *im, uword opaque, u32 sw_if_index, ip4_address_t *address, u32 address_length, u32 if_address_index, u32 is_del)

Definition at line 91 of file ip4.h.

typedef void( ip4_add_del_route_function_t) (struct ip4_main_t *im, uword opaque, ip4_fib_t *fib, u32 flags, ip4_address_t *address, u32 address_length, void *old_result, void *new_result)

Definition at line 75 of file ip4.h.

typedef struct ip4_fib_t ip4_fib_t
typedef struct ip4_main_t ip4_main_t

Enumeration Type Documentation

Enumerator
IP4_RX_FEATURE_CHECK_ACCESS 
IP4_RX_FEATURE_SOURCE_CHECK_REACHABLE_VIA_RX 
IP4_RX_FEATURE_SOURCE_CHECK_REACHABLE_VIA_ANY 
IP4_RX_FEATURE_IPSEC 
IP4_RX_FEATURE_VPATH 
IP4_RX_FEATURE_LOOKUP 
IP4_N_RX_FEATURE 

Definition at line 104 of file ip4.h.

Function Documentation

ip4_fib_t* find_ip4_fib_by_table_index_or_id ( ip4_main_t im,
u32  table_index_or_id,
u32  flags 
)

Get or create an IPv4 fib.

Get or create an IPv4 fib with the provided fib ID or index. The fib ID is a possibly-sparse user-defined value while the fib index defines the position of the fib in the fib vector.

Parameters
imip4_main pointer.
table_index_or_idThe table index if IP4_ROUTE_FLAG_FIB_INDEX bit is set in flags. Otherwise, when set to ~0, an arbitrary and unused fib ID is picked and can be retrieved with ret->table_id. Otherwise, the fib ID to be used to retrieve or create the desired fib.
flagsIndicates whether table_index_or_id is the fib index or ID. When the bit IP4_ROUTE_FLAG_FIB_INDEX is set, table_index_or_id is considered as the fib index, and the fib ID otherwise.
Returns
A pointer to the retrieved or created fib.
Remarks
When getting a fib with the fib index, the fib MUST already exist.

Definition at line 98 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* ip4_add_del_interface_address ( vlib_main_t vm,
u32  sw_if_index,
ip4_address_t address,
u32  address_length,
u32  is_del 
)

Definition at line 1239 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ip4_add_del_route ( ip4_main_t im,
ip4_add_del_route_args_t args 
)

Definition at line 196 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ip4_add_del_route_next_hop ( ip4_main_t im,
u32  flags,
ip4_address_t dst_address,
u32  dst_address_length,
ip4_address_t next_hop,
u32  next_hop_sw_if_index,
u32  next_hop_weight,
u32  adj_index,
u32  explicit_fib_index 
)

Definition at line 274 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int ip4_address_compare ( ip4_address_t a1,
ip4_address_t a2 
)

Definition at line 42 of file ip46_cli.c.

+ Here is the caller graph for this function:

void ip4_adjacency_set_interface_route ( vnet_main_t vnm,
ip_adjacency_t adj,
u32  sw_if_index,
u32  if_address_index 
)

Definition at line 1005 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

always_inline u32 ip4_compute_flow_hash ( ip4_header_t ip,
u32  flow_hash_config 
)

Definition at line 397 of file ip4.h.

+ Here is the caller graph for this function:

void ip4_delete_matching_routes ( ip4_main_t im,
u32  table_index_or_table_id,
u32  flags,
ip4_address_t address,
u32  address_length 
)

Definition at line 602 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

always_inline uword ip4_destination_matches_interface ( ip4_main_t im,
ip4_address_t key,
ip_interface_address_t ia 
)

Definition at line 206 of file ip4.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

always_inline uword ip4_destination_matches_route ( ip4_main_t im,
ip4_address_t key,
ip4_address_t dest,
uword  dest_length 
)

Definition at line 199 of file ip4.h.

+ Here is the caller graph for this function:

always_inline u32 ip4_fib_lookup ( ip4_main_t im,
u32  sw_if_index,
ip4_address_t dst 
)

Definition at line 191 of file ip4.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

always_inline u32 ip4_fib_lookup_buffer ( ip4_main_t im,
u32  fib_index,
ip4_address_t dst,
vlib_buffer_t b 
)

Definition at line 183 of file ip4.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u32 ip4_fib_lookup_with_table ( ip4_main_t im,
u32  fib_index,
ip4_address_t dst,
u32  disable_default_route 
)

Definition at line 50 of file ip4_forward.c.

+ Here is the caller graph for this function:

void ip4_foreach_matching_route ( ip4_main_t im,
u32  table_index_or_table_id,
u32  flags,
ip4_address_t address,
u32  address_length,
ip4_address_t **  results,
u8 **  result_lengths 
)

Definition at line 488 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void* ip4_get_route ( ip4_main_t im,
u32  fib_index_or_table_id,
u32  flags,
u8 address,
u32  address_length 
)

Definition at line 469 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ip4_icmp_register_type ( vlib_main_t vm,
icmp4_type_t  type,
u32  node_index 
)

Definition at line 696 of file icmp4.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

always_inline ip4_address_t* ip4_interface_address_matching_destination ( ip4_main_t im,
ip4_address_t dst,
u32  sw_if_index,
ip_interface_address_t **  result_ia 
)

Definition at line 233 of file ip4.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ip4_maybe_remap_adjacencies ( ip4_main_t im,
u32  table_index_or_table_id,
u32  flags 
)

Definition at line 522 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ip4_mtrie_init ( ip4_fib_mtrie_t m)

Definition at line 353 of file ip4_mtrie.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* ip4_probe_neighbor ( vlib_main_t vm,
ip4_address_t dst,
u32  sw_if_index 
)

Definition at line 2383 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ip4_register_protocol ( u32  protocol,
u32  node_index 
)

Definition at line 2125 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* ip4_set_arp_limit ( u32  arp_limit)

Definition at line 1249 of file arp.c.

+ Here is the caller graph for this function:

always_inline void ip4_src_address_for_packet ( ip4_main_t im,
vlib_buffer_t p,
ip4_address_t src,
u32  sw_if_index 
)

Definition at line 223 of file ip4.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u16 ip4_tcp_udp_compute_checksum ( vlib_main_t vm,
vlib_buffer_t p0,
ip4_header_t ip0 
)

Definition at line 1685 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword ip4_udp_register_listener ( vlib_main_t vm,
u16  dst_port,
u32  next_node_index 
)
always_inline uword ip4_unaligned_destination_matches_route ( ip4_main_t im,
ip4_address_t key,
ip4_address_t dest,
uword  dest_length 
)

Definition at line 216 of file ip4.h.

int vnet_set_ip4_classify_intfc ( vlib_main_t vm,
u32  sw_if_index,
u32  table_index 
)

Definition at line 3239 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int vnet_set_ip4_flow_hash ( u32  table_id,
u32  flow_hash_config 
)

Definition at line 3176 of file ip4_forward.c.

+ Here is the caller graph for this function:

Variable Documentation

(constructor) VLIB_REGISTER_NODE (ip4_arp_node)

Definition at line 2341 of file ip4_forward.c.

vlib_node_registration_t ip4_input_node

(constructor) VLIB_REGISTER_NODE (ip4_input_node)

Definition at line 353 of file ip4_input.c.

vlib_node_registration_t ip4_lookup_node

(constructor) VLIB_REGISTER_NODE (ip4_lookup_node)

Definition at line 1360 of file ip4_forward.c.

ip4_main_t ip4_main

Definition at line 1394 of file ip4_forward.c.

vlib_node_registration_t ip4_rewrite_local_node

(constructor) VLIB_REGISTER_NODE (ip4_rewrite_local_node)

Definition at line 2792 of file ip4_forward.c.

vlib_node_registration_t ip4_rewrite_node

(constructor) VLIB_REGISTER_NODE (ip4_rewrite_node)

Definition at line 2778 of file ip4_forward.c.

serialize_function_t serialize_vnet_ip4_main

Definition at line 385 of file ip4.h.

serialize_function_t unserialize_vnet_ip4_main

Definition at line 385 of file ip4.h.