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);
+void ip4_unregister_protocol (u32 protocolx);
serialize_function_t serialize_vnet_ip4_main, unserialize_vnet_ip4_main;
void ip4_punt_redirect_add (u32 rx_sw_if_index,
u32 tx_sw_if_index, ip46_address_t * nh);
+void ip4_punt_redirect_add_paths (u32 rx_sw_if_index,
+ fib_route_path_t * paths);
+
void ip4_punt_redirect_del (u32 rx_sw_if_index);
/* Compute flow hash. We'll use it to select which adjacency to use for this
ih->src_address.as_u32 = src->as_u32;
ih->dst_address.as_u32 = dst->as_u32;
+ vnet_buffer (b)->l3_hdr_offset = (u8 *) ih - b->data;
+ b->flags |= VNET_BUFFER_F_IS_IP4 | VNET_BUFFER_F_L3_HDR_OFFSET_VALID;
+
/* Offload ip4 header checksum generation */
if (csum_offload)
{
ih->checksum = 0;
- b->flags |= VNET_BUFFER_F_OFFLOAD_IP_CKSUM | VNET_BUFFER_F_IS_IP4;
- vnet_buffer (b)->l3_hdr_offset = (u8 *) ih - b->data;
- vnet_buffer (b)->l4_hdr_offset = vnet_buffer (b)->l3_hdr_offset +
- sizeof (*ih);
+ b->flags |= VNET_BUFFER_F_OFFLOAD_IP_CKSUM;
}
else
ih->checksum = ip4_header_checksum (ih);