FD.io VPP  v16.12-rc0-308-g931be3a
Vector Packet Processing
ip4_forward.c File Reference

IPv4 Forwarding. More...

+ Include dependency graph for ip4_forward.c:

Go to the source code of this file.

Data Structures

struct  ip4_forward_next_trace_t
 

Macros

#define foreach_notrace_ip4_arp_error
 

Enumerations

enum  ip4_rewrite_next_t { IP4_REWRITE_NEXT_DROP, IP4_REWRITE_NEXT_ARP, IP4_REWRITE_NEXT_ICMP_ERROR }
 

Functions

void ip4_forward_next_trace (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, vlib_rx_or_tx_t which_adj_index)
 
static uword ip4_lookup_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, int lookup_for_responses_to_locally_received_packets)
 
static uword ip4_lookup (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 IPv4 lookup node. More...
 
static u8format_ip4_lookup_trace (u8 *s, va_list *args)
 
static uword ip4_load_balance (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static u8format_ip4_forward_next_trace (u8 *s, va_list *args)
 
ip4_address_tip4_interface_first_address (ip4_main_t *im, u32 sw_if_index, ip_interface_address_t **result_ia)
 
static void ip4_add_interface_routes (u32 sw_if_index, ip4_main_t *im, u32 fib_index, ip_interface_address_t *a)
 
static void ip4_del_interface_routes (ip4_main_t *im, u32 fib_index, ip4_address_t *address, u32 address_length)
 
void ip4_sw_interface_enable_disable (u32 sw_if_index, u32 is_enable)
 
static clib_error_tip4_add_del_interface_address_internal (vlib_main_t *vm, u32 sw_if_index, ip4_address_t *address, u32 address_length, u32 is_del)
 
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)
 
 VNET_IP4_UNICAST_FEATURE_INIT (ip4_flow_classify, static)
 
 VNET_IP4_UNICAST_FEATURE_INIT (ip4_inacl, static)
 
 VNET_IP4_UNICAST_FEATURE_INIT (ip4_source_check_1, static)
 
 VNET_IP4_UNICAST_FEATURE_INIT (ip4_source_check_2, static)
 
 VNET_IP4_UNICAST_FEATURE_INIT (ip4_source_and_port_range_check_rx, static)
 
 VNET_IP4_UNICAST_FEATURE_INIT (ip4_policer_classify, static)
 
 VNET_IP4_UNICAST_FEATURE_INIT (ip4_ipsec, static)
 
 VNET_IP4_UNICAST_FEATURE_INIT (ip4_vpath, static)
 
 VNET_IP4_UNICAST_FEATURE_INIT (ip4_lookup, static)
 
 VNET_IP4_UNICAST_FEATURE_INIT (ip4_drop, static)
 
 VNET_IP4_MULTICAST_FEATURE_INIT (ip4_vpath_mc, static)
 
 VNET_IP4_MULTICAST_FEATURE_INIT (ip4_lookup_mc, static)
 
 VNET_IP4_MULTICAST_FEATURE_INIT (ip4_mc_drop, static)
 
 VNET_IP4_TX_FEATURE_INIT (ip4_source_and_port_range_check_tx, static)
 
 VNET_IP4_TX_FEATURE_INIT (interface_output, static)
 
static clib_error_tip4_feature_init (vlib_main_t *vm, ip4_main_t *im)
 
static clib_error_tip4_sw_interface_add_del (vnet_main_t *vnm, u32 sw_if_index, u32 is_add)
 
 VNET_SW_INTERFACE_ADD_DEL_FUNCTION (ip4_sw_interface_add_del)
 
clib_error_tip4_lookup_init (vlib_main_t *vm)
 
static u8format_ip4_rewrite_trace (u8 *s, va_list *args)
 
static uword ip4_drop_or_punt (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, ip4_error_t error_code)
 
static uword ip4_drop (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static uword ip4_punt (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
u16 ip4_tcp_udp_compute_checksum (vlib_main_t *vm, vlib_buffer_t *p0, ip4_header_t *ip0)
 
static u32 ip4_tcp_udp_validate_checksum (vlib_main_t *vm, vlib_buffer_t *p0)
 
static uword ip4_local (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
void ip4_register_protocol (u32 protocol, u32 node_index)
 
static clib_error_tshow_ip_local_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static uword ip4_arp_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, int is_glean)
 
static uword ip4_arp (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static uword ip4_glean (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
clib_error_tarp_notrace_init (vlib_main_t *vm)
 
clib_error_tip4_probe_neighbor (vlib_main_t *vm, ip4_address_t *dst, u32 sw_if_index)
 
static uword ip4_rewrite_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, int rewrite_for_locally_received_packets, int is_midchain)
 
static uword ip4_rewrite_transit (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 IPv4 transit rewrite node. More...
 
static uword ip4_rewrite_local (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 IPv4 local rewrite node. More...
 
static uword ip4_midchain (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static clib_error_tadd_del_interface_table (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static uword ip4_lookup_multicast (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
int ip4_lookup_validate (ip4_address_t *a, u32 fib_index0)
 
static clib_error_ttest_lookup_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
int vnet_set_ip4_flow_hash (u32 table_id, u32 flow_hash_config)
 
static clib_error_tset_ip_flow_hash_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
int vnet_set_ip4_classify_intfc (vlib_main_t *vm, u32 sw_if_index, u32 table_index)
 
static clib_error_tset_ip_classify_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 

Variables

vlib_node_registration_t ip4_lookup_node
 (constructor) VLIB_REGISTER_NODE (ip4_lookup_node) More...
 
vlib_node_registration_t ip4_load_balance_node
 (constructor) VLIB_REGISTER_NODE (ip4_load_balance_node) More...
 
static char * rx_feature_start_nodes []
 
static char * tx_feature_start_nodes []
 
ip4_main_t ip4_main
 Global ip4 main structure. More...
 
static vlib_node_registration_t ip4_drop_node
 (constructor) VLIB_REGISTER_NODE (ip4_drop_node) More...
 
static vlib_node_registration_t ip4_punt_node
 (constructor) VLIB_REGISTER_NODE (ip4_punt_node) More...
 
static vlib_node_registration_t ip4_local_node
 (constructor) VLIB_REGISTER_NODE (ip4_local_node) More...
 
static vlib_cli_command_t show_ip_local
 (constructor) VLIB_CLI_COMMAND (show_ip_local) More...
 
static char * ip4_arp_error_strings []
 
vlib_node_registration_t ip4_arp_node
 (constructor) VLIB_REGISTER_NODE (ip4_arp_node) More...
 
vlib_node_registration_t ip4_glean_node
 (constructor) VLIB_REGISTER_NODE (ip4_glean_node) More...
 
vlib_node_registration_t ip4_rewrite_node
 (constructor) VLIB_REGISTER_NODE (ip4_rewrite_node) More...
 
vlib_node_registration_t ip4_midchain_node
 (constructor) VLIB_REGISTER_NODE (ip4_midchain_node) More...
 
vlib_node_registration_t ip4_rewrite_local_node
 (constructor) VLIB_REGISTER_NODE (ip4_rewrite_local_node) More...
 
static vlib_cli_command_t set_interface_ip_table_command
 (constructor) VLIB_CLI_COMMAND (set_interface_ip_table_command) More...
 
static vlib_node_registration_t ip4_lookup_multicast_node
 (constructor) VLIB_REGISTER_NODE (ip4_lookup_multicast_node) More...
 
static vlib_node_registration_t ip4_multicast_node
 (constructor) VLIB_REGISTER_NODE (ip4_multicast_node) More...
 
static vlib_cli_command_t lookup_test_command
 (constructor) VLIB_CLI_COMMAND (lookup_test_command) More...
 
static vlib_cli_command_t set_ip_flow_hash_command
 (constructor) VLIB_CLI_COMMAND (set_ip_flow_hash_command) More...
 
static vlib_cli_command_t set_ip_classify_command
 (constructor) VLIB_CLI_COMMAND (set_ip_classify_command) More...
 

Detailed Description

IPv4 Forwarding.

This file contains the source code for IPv4 forwarding.

Definition in file ip4_forward.c.

Macro Definition Documentation

#define foreach_notrace_ip4_arp_error
Value:
_(DROP) \
_(REQUEST_SENT) \
_(REPLICATE_DROP) \
_(REPLICATE_FAIL)
DROP
Definition: error.def:41

Definition at line 2081 of file ip4_forward.c.

Enumeration Type Documentation

Enumerator
IP4_REWRITE_NEXT_DROP 
IP4_REWRITE_NEXT_ARP 
IP4_REWRITE_NEXT_ICMP_ERROR 

Definition at line 2169 of file ip4_forward.c.

Function Documentation

static clib_error_t* add_del_interface_table ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 2701 of file ip4_forward.c.

+ Here is the call graph for this function:

clib_error_t* arp_notrace_init ( vlib_main_t vm)

Definition at line 2087 of file ip4_forward.c.

+ Here is the call graph for this function:

static u8 * format_ip4_forward_next_trace ( u8 s,
va_list *  args 
)
static

Definition at line 1134 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u8 * format_ip4_lookup_trace ( u8 s,
va_list *  args 
)
static

Definition at line 1146 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u8* format_ip4_rewrite_trace ( u8 s,
va_list *  args 
)
static

Definition at line 1161 of file ip4_forward.c.

+ Here is the call 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 847 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

Definition at line 765 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip4_add_interface_routes ( u32  sw_if_index,
ip4_main_t im,
u32  fib_index,
ip_interface_address_t a 
)
static

Definition at line 611 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip4_arp ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 2025 of file ip4_forward.c.

+ Here is the call graph for this function:

static uword ip4_arp_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame,
int  is_glean 
)
inlinestatic

Definition at line 1841 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip4_del_interface_routes ( ip4_main_t im,
u32  fib_index,
ip4_address_t address,
u32  address_length 
)
static

Definition at line 684 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip4_drop ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 1293 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip4_drop_or_punt ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame,
ip4_error_t  error_code 
)
static

Definition at line 1270 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static clib_error_t* ip4_feature_init ( vlib_main_t vm,
ip4_main_t im 
)
static

Definition at line 967 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ip4_forward_next_trace ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame,
vlib_rx_or_tx_t  which_adj_index 
)

Definition at line 1183 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip4_glean ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 2033 of file ip4_forward.c.

+ Here is the call graph for this function:

ip4_address_t* ip4_interface_first_address ( ip4_main_t im,
u32  sw_if_index,
ip_interface_address_t **  result_ia 
)

Definition at line 591 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip4_load_balance ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
inlinestatic

Definition at line 498 of file ip4_forward.c.

+ Here is the call graph for this function:

static uword ip4_local ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 1407 of file ip4_forward.c.

+ Here is the call graph for this function:

static uword ip4_lookup ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

IPv4 lookup node.

Node Identifier:
ip4-lookup

This is the main IPv4 lookup dispatch node.

Parameters
vmvlib_main_t corresponding to the current thread
nodevlib_node_runtime_t
framevlib_frame_t whose contents should be dispatched
Graph mechanics: buffer metadata, next index usage

Uses:

  • vnet_buffer(b)->sw_if_index[VLIB_RX]
    • Indicates the sw_if_index value of the interface that the packet was received on.
  • vnet_buffer(b)->sw_if_index[VLIB_TX]
    • When the value is ~0 then the node performs a longest prefix match (LPM) for the packet destination address in the FIB attached to the receive interface.
    • Otherwise perform LPM for the packet destination address in the indicated FIB. In this case [VLIB_TX] is a FIB index value (0, 1, ...) and not a VRF id.

Sets:

  • vnet_buffer(b)->ip.adj_index[VLIB_TX]
    • The lookup result adjacency index.

Next Index:

  • Dispatches the packet to the node index found in ip_adjacency_t adj->lookup_next_index (where adj is the lookup result adjacency).

Definition at line 474 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_lookup_init ( vlib_main_t vm)

Definition at line 1063 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip4_lookup_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame,
int  lookup_for_responses_to_locally_received_packets 
)
inlinestatic

Definition at line 68 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip4_lookup_multicast ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 2777 of file ip4_forward.c.

+ Here is the call graph for this function:

int ip4_lookup_validate ( ip4_address_t a,
u32  fib_index0 
)

Definition at line 3015 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip4_midchain ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 2649 of file ip4_forward.c.

+ Here is the call 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 2107 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip4_punt ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 1299 of file ip4_forward.c.

+ Here is the call graph for this function:

void ip4_register_protocol ( u32  protocol,
u32  node_index 
)

Definition at line 1790 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip4_rewrite_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame,
int  rewrite_for_locally_received_packets,
int  is_midchain 
)
inlinestatic

Definition at line 2176 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip4_rewrite_local ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

IPv4 local rewrite node.

Node Identifier:
ip4-rewrite-local

This is the IPv4 local rewrite node. Fetch the ip adjacency, check the outbound interface mtu, apply the adjacency rewrite, and send pkts to the adjacency rewrite header's rewrite_next_index. Deal with hemorrhoids of the form "some clown sends an icmp4 w/ src = dst = interface addr."

Parameters
vmvlib_main_t corresponding to the current thread
nodevlib_node_runtime_t
framevlib_frame_t whose contents should be dispatched
Graph mechanics: buffer metadata, next index usage

Uses:

  • vnet_buffer(b)->ip.adj_index[VLIB_RX]
    • the rewrite adjacency index
  • adj->lookup_next_index
    • Must be IP_LOOKUP_NEXT_REWRITE or IP_LOOKUP_NEXT_ARP, otherwise the packet will be dropped.
  • adj->rewrite_header
    • Rewrite string length, rewrite string, next_index

Sets:

  • b->current_data, b->current_length
    • Updated net of applying the rewrite string

Next Indices:

  • adj->rewrite_header.next_index or error-drop

Definition at line 2640 of file ip4_forward.c.

+ Here is the call graph for this function:

static uword ip4_rewrite_transit ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

IPv4 transit rewrite node.

Node Identifier:
ip4-rewrite-transit

This is the IPv4 transit-rewrite node: decrement TTL, fix the ipv4 header checksum, fetch the ip adjacency, check the outbound mtu, apply the adjacency rewrite, and send pkts to the adjacency rewrite header's rewrite_next_index.

Parameters
vmvlib_main_t corresponding to the current thread
nodevlib_node_runtime_t
framevlib_frame_t whose contents should be dispatched
Graph mechanics: buffer metadata, next index usage

Uses:

  • vnet_buffer(b)->ip.adj_index[VLIB_TX]
    • the rewrite adjacency index
  • adj->lookup_next_index
    • Must be IP_LOOKUP_NEXT_REWRITE or IP_LOOKUP_NEXT_ARP, otherwise the packet will be dropped.
  • adj->rewrite_header
    • Rewrite string length, rewrite string, next_index

Sets:

  • b->current_data, b->current_length
    • Updated net of applying the rewrite string

Next Indices:

  • adj->rewrite_header.next_index or error-drop

Definition at line 2598 of file ip4_forward.c.

+ Here is the call graph for this function:

static clib_error_t* ip4_sw_interface_add_del ( vnet_main_t vnm,
u32  sw_if_index,
u32  is_add 
)
static

Definition at line 1005 of file ip4_forward.c.

+ Here is the call graph for this function:

void ip4_sw_interface_enable_disable ( u32  sw_if_index,
u32  is_enable 
)

Definition at line 709 of file ip4_forward.c.

+ 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 1336 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 ip4_tcp_udp_validate_checksum ( vlib_main_t vm,
vlib_buffer_t p0 
)
static

Definition at line 1381 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static clib_error_t* set_ip_classify_command_fn ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 3325 of file ip4_forward.c.

+ Here is the call graph for this function:

static clib_error_t* set_ip_flow_hash_command_fn ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 3131 of file ip4_forward.c.

+ Here is the call graph for this function:

static clib_error_t* show_ip_local_command_fn ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 1801 of file ip4_forward.c.

+ Here is the call graph for this function:

static clib_error_t* test_lookup_command_fn ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 3038 of file ip4_forward.c.

+ Here is the call graph for this function:

VNET_IP4_MULTICAST_FEATURE_INIT ( ip4_vpath_mc  ,
static   
)

+ Here is the caller graph for this function:

VNET_IP4_MULTICAST_FEATURE_INIT ( ip4_lookup_mc  ,
static   
)
VNET_IP4_MULTICAST_FEATURE_INIT ( ip4_mc_drop  ,
static   
)
VNET_IP4_TX_FEATURE_INIT ( ip4_source_and_port_range_check_tx  ,
static   
)
VNET_IP4_TX_FEATURE_INIT ( interface_output  ,
static   
)
VNET_IP4_UNICAST_FEATURE_INIT ( ip4_flow_classify  ,
static   
)

+ Here is the caller graph for this function:

VNET_IP4_UNICAST_FEATURE_INIT ( ip4_inacl  ,
static   
)
VNET_IP4_UNICAST_FEATURE_INIT ( ip4_source_check_1  ,
static   
)
VNET_IP4_UNICAST_FEATURE_INIT ( ip4_source_check_2  ,
static   
)
VNET_IP4_UNICAST_FEATURE_INIT ( ip4_source_and_port_range_check_rx  ,
static   
)
VNET_IP4_UNICAST_FEATURE_INIT ( ip4_policer_classify  ,
static   
)
VNET_IP4_UNICAST_FEATURE_INIT ( ip4_ipsec  ,
static   
)
VNET_IP4_UNICAST_FEATURE_INIT ( ip4_vpath  ,
static   
)
VNET_IP4_UNICAST_FEATURE_INIT ( ip4_lookup  ,
static   
)
VNET_IP4_UNICAST_FEATURE_INIT ( ip4_drop  ,
static   
)
int vnet_set_ip4_classify_intfc ( vlib_main_t vm,
u32  sw_if_index,
u32  table_index 
)

Definition at line 3263 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 3115 of file ip4_forward.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

VNET_SW_INTERFACE_ADD_DEL_FUNCTION ( ip4_sw_interface_add_del  )

+ Here is the caller graph for this function:

Variable Documentation

char* ip4_arp_error_strings[]
static
Initial value:
= {
[IP4_ARP_ERROR_DROP] = "address overflow drops",
[IP4_ARP_ERROR_REQUEST_SENT] = "ARP requests sent",
[IP4_ARP_ERROR_NON_ARP_ADJ] = "ARPs to non-ARP adjacencies",
[IP4_ARP_ERROR_REPLICATE_DROP] = "ARP replication completed",
[IP4_ARP_ERROR_REPLICATE_FAIL] = "ARP replication failed",
[IP4_ARP_ERROR_NO_SOURCE_ADDRESS] = "no source address for ARP request",
}

Definition at line 2040 of file ip4_forward.c.

Initial value:
= {
.function = ip4_arp,
.name = "ip4-arp",
.vector_size = sizeof (u32),
.error_strings = ip4_arp_error_strings,
.n_next_nodes = IP4_ARP_N_NEXT,
.next_nodes = {
[IP4_ARP_NEXT_DROP] = "error-drop",
},
}
static uword ip4_arp(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: ip4_forward.c:2025
#define ARRAY_LEN(x)
Definition: clib.h:59
unsigned int u32
Definition: types.h:88
static u8 * format_ip4_forward_next_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1134
static char * ip4_arp_error_strings[]
Definition: ip4_forward.c:2040

(constructor) VLIB_REGISTER_NODE (ip4_arp_node)

Definition at line 2049 of file ip4_forward.c.

vlib_node_registration_t ip4_drop_node
static
Initial value:
= {
.function = ip4_drop,
.name = "ip4-drop",
.vector_size = sizeof (u32),
.n_next_nodes = 1,
.next_nodes = {
[0] = "error-drop",
},
}
static uword ip4_drop(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: ip4_forward.c:1293
unsigned int u32
Definition: types.h:88
static u8 * format_ip4_forward_next_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1134

(constructor) VLIB_REGISTER_NODE (ip4_drop_node)

Definition at line 1304 of file ip4_forward.c.

vlib_node_registration_t ip4_glean_node
Initial value:
= {
.function = ip4_glean,
.name = "ip4-glean",
.vector_size = sizeof (u32),
.error_strings = ip4_arp_error_strings,
.n_next_nodes = IP4_ARP_N_NEXT,
.next_nodes = {
[IP4_ARP_NEXT_DROP] = "error-drop",
},
}
static uword ip4_glean(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: ip4_forward.c:2033
#define ARRAY_LEN(x)
Definition: clib.h:59
unsigned int u32
Definition: types.h:88
static u8 * format_ip4_forward_next_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1134
static char * ip4_arp_error_strings[]
Definition: ip4_forward.c:2040

(constructor) VLIB_REGISTER_NODE (ip4_glean_node)

Definition at line 2065 of file ip4_forward.c.

vlib_node_registration_t ip4_load_balance_node
Initial value:
= {
.function = ip4_load_balance,
.name = "ip4-load-balance",
.vector_size = sizeof (u32),
.sibling_of = "ip4-lookup",
}
static uword ip4_load_balance(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: ip4_forward.c:498
unsigned int u32
Definition: types.h:88
static u8 * format_ip4_forward_next_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1134

(constructor) VLIB_REGISTER_NODE (ip4_load_balance_node)

Definition at line 578 of file ip4_forward.c.

vlib_node_registration_t ip4_local_node
static
Initial value:
= {
.function = ip4_local,
.name = "ip4-local",
.vector_size = sizeof (u32),
.n_next_nodes = IP_LOCAL_N_NEXT,
.next_nodes = {
[IP_LOCAL_NEXT_DROP] = "error-drop",
[IP_LOCAL_NEXT_PUNT] = "error-punt",
[IP_LOCAL_NEXT_UDP_LOOKUP] = "ip4-udp-lookup",
[IP_LOCAL_NEXT_ICMP] = "ip4-icmp-input",
},
}
unsigned int u32
Definition: types.h:88
static uword ip4_local(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: ip4_forward.c:1407
static u8 * format_ip4_forward_next_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1134

(constructor) VLIB_REGISTER_NODE (ip4_local_node)

Definition at line 1772 of file ip4_forward.c.

vlib_node_registration_t ip4_lookup_multicast_node
static
Initial value:
= {
.function = ip4_lookup_multicast,
.name = "ip4-lookup-multicast",
.vector_size = sizeof (u32),
.sibling_of = "ip4-lookup",
.format_trace = format_ip4_lookup_trace,
.n_next_nodes = 0,
}
static u8 * format_ip4_lookup_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1146
unsigned int u32
Definition: types.h:88
static uword ip4_lookup_multicast(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: ip4_forward.c:2777

(constructor) VLIB_REGISTER_NODE (ip4_lookup_multicast_node)

Definition at line 2990 of file ip4_forward.c.

vlib_node_registration_t ip4_lookup_node
Initial value:
= {
.function = ip4_lookup,
.name = "ip4-lookup",
.vector_size = sizeof (u32),
.format_trace = format_ip4_lookup_trace,
.n_next_nodes = IP_LOOKUP_N_NEXT,
.next_nodes = IP4_LOOKUP_NEXT_NODES,
}
#define IP4_LOOKUP_NEXT_NODES
Definition: lookup.h:108
static u8 * format_ip4_lookup_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1146
unsigned int u32
Definition: types.h:88
static uword ip4_lookup(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
IPv4 lookup node.
Definition: ip4_forward.c:474

(constructor) VLIB_REGISTER_NODE (ip4_lookup_node)

Definition at line 485 of file ip4_forward.c.

ip4_main_t ip4_main

Global ip4 main structure.

Definition at line 1060 of file ip4_forward.c.

vlib_node_registration_t ip4_midchain_node
Initial value:
= {
.function = ip4_midchain,
.name = "ip4-midchain",
.vector_size = sizeof (u32),
.sibling_of = "ip4-rewrite-transit",
}
static uword ip4_midchain(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: ip4_forward.c:2649
unsigned int u32
Definition: types.h:88
static u8 * format_ip4_forward_next_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1134

(constructor) VLIB_REGISTER_NODE (ip4_midchain_node)

Definition at line 2674 of file ip4_forward.c.

vlib_node_registration_t ip4_multicast_node
static
Initial value:
= {
.function = ip4_drop,
.name = "ip4-multicast",
.vector_size = sizeof (u32),
.n_next_nodes = 1,
.next_nodes = {
[0] = "error-drop",
},
}
static uword ip4_drop(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: ip4_forward.c:1293
unsigned int u32
Definition: types.h:88
static u8 * format_ip4_forward_next_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1134

(constructor) VLIB_REGISTER_NODE (ip4_multicast_node)

Definition at line 3002 of file ip4_forward.c.

vlib_node_registration_t ip4_punt_node
static
Initial value:
= {
.function = ip4_punt,
.name = "ip4-punt",
.vector_size = sizeof (u32),
.n_next_nodes = 1,
.next_nodes = {
[0] = "error-punt",
},
}
static uword ip4_punt(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: ip4_forward.c:1299
unsigned int u32
Definition: types.h:88
static u8 * format_ip4_forward_next_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1134

(constructor) VLIB_REGISTER_NODE (ip4_punt_node)

Definition at line 1319 of file ip4_forward.c.

vlib_node_registration_t ip4_rewrite_local_node
Initial value:
= {
.function = ip4_rewrite_local,
.name = "ip4-rewrite-local",
.vector_size = sizeof (u32),
.sibling_of = "ip4-rewrite-transit",
.format_trace = format_ip4_rewrite_trace,
.n_next_nodes = 0,
}
static uword ip4_rewrite_local(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
IPv4 local rewrite node.
Definition: ip4_forward.c:2640
static u8 * format_ip4_rewrite_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1161
unsigned int u32
Definition: types.h:88

(constructor) VLIB_REGISTER_NODE (ip4_rewrite_local_node)

Definition at line 2686 of file ip4_forward.c.

vlib_node_registration_t ip4_rewrite_node
Initial value:
= {
.function = ip4_rewrite_transit,
.name = "ip4-rewrite-transit",
.vector_size = sizeof (u32),
.format_trace = format_ip4_rewrite_trace,
.n_next_nodes = 3,
.next_nodes = {
[IP4_REWRITE_NEXT_DROP] = "error-drop",
[IP4_REWRITE_NEXT_ARP] = "ip4-arp",
[IP4_REWRITE_NEXT_ICMP_ERROR] = "ip4-icmp-error",
},
}
static uword ip4_rewrite_transit(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
IPv4 transit rewrite node.
Definition: ip4_forward.c:2598
static u8 * format_ip4_rewrite_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1161
unsigned int u32
Definition: types.h:88

(constructor) VLIB_REGISTER_NODE (ip4_rewrite_node)

Definition at line 2657 of file ip4_forward.c.

vlib_cli_command_t lookup_test_command
static
Initial value:
= {
.path = "test lookup",
.short_help = "test lookup <ipv4-addr> [table <fib-id>] [count <nn>]",
}
static clib_error_t * test_lookup_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: ip4_forward.c:3038

(constructor) VLIB_CLI_COMMAND (lookup_test_command)

Definition at line 3108 of file ip4_forward.c.

char* rx_feature_start_nodes[]
static
Initial value:
=
{ "ip4-input", "ip4-input-no-checksum"}

Definition at line 941 of file ip4_forward.c.

vlib_cli_command_t set_interface_ip_table_command
static
Initial value:
= {
.path = "set interface ip table",
.short_help = "set interface ip table <interface> <table-id>",
}
static clib_error_t * add_del_interface_table(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: ip4_forward.c:2701

(constructor) VLIB_CLI_COMMAND (set_interface_ip_table_command)

Definition at line 2768 of file ip4_forward.c.

vlib_cli_command_t set_ip_classify_command
static
Initial value:
= {
.path = "set ip classify",
.short_help =
"set ip classify intfc <interface> table-index <classify-idx>",
}
static clib_error_t * set_ip_classify_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: ip4_forward.c:3325

(constructor) VLIB_CLI_COMMAND (set_ip_classify_command)

Definition at line 3377 of file ip4_forward.c.

vlib_cli_command_t set_ip_flow_hash_command
static
Initial value:
= {
.path = "set ip flow-hash",
.short_help =
"set ip flow-hash table <table-id> [src] [dst] [sport] [dport] [proto] [reverse]",
}
static clib_error_t * set_ip_flow_hash_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: ip4_forward.c:3131

(constructor) VLIB_CLI_COMMAND (set_ip_flow_hash_command)

Definition at line 3255 of file ip4_forward.c.

vlib_cli_command_t show_ip_local
static
Initial value:
= {
.path = "show ip local",
.short_help = "show ip local",
}
static clib_error_t * show_ip_local_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: ip4_forward.c:1801

(constructor) VLIB_CLI_COMMAND (show_ip_local)

Definition at line 1833 of file ip4_forward.c.

char* tx_feature_start_nodes[]
static
Initial value:
=
{
"ip4-rewrite-transit",
"ip4-midchain",
}

Definition at line 944 of file ip4_forward.c.