#include <vnet/fib/fib_entry.h> /* for FIB table and entry creation */
#include <vnet/fib/fib_urpf_list.h> /* for FIB uRPF check */
#include <vnet/fib/ip4_fib.h>
+#include <vnet/mfib/ip4_mfib.h>
#include <vnet/dpo/load_balance.h>
#include <vnet/dpo/load_balance_map.h>
#include <vnet/dpo/classify_dpo.h>
#include <vnet/ip/ip4_forward.h>
#include <vnet/interface_output.h>
+#include <vnet/classify/vnet_classify.h>
/** @brief IPv4 lookup node.
@node ip4-lookup
goto done;
ip4_sw_interface_enable_disable (sw_if_index, !is_del);
+ ip4_mfib_interface_enable_disable (sw_if_index, !is_del);
/* intf addr routes are added/deleted on admin up/down */
if (vnet_sw_interface_is_admin_up (vnm, sw_if_index))
{
.arc_name = "ip4-unicast",
.node_name = "ip4-inacl",
- .runs_before = VNET_FEATURES ("ip4-source-check-via-rx"),
-};
-
-VNET_FEATURE_INIT (ip4_source_check_1, static) =
-{
- .arc_name = "ip4-unicast",
- .node_name = "ip4-source-check-via-rx",
- .runs_before = VNET_FEATURES ("ip4-source-check-via-any"),
-};
-
-VNET_FEATURE_INIT (ip4_source_check_2, static) =
-{
- .arc_name = "ip4-unicast",
- .node_name = "ip4-source-check-via-any",
.runs_before = VNET_FEATURES ("ip4-policer-classify"),
};
ip4_add_del_interface_address(vm, sw_if_index, address, ia->address_length, 1);
}));
/* *INDENT-ON* */
+ ip4_mfib_interface_enable_disable (sw_if_index, 0);
}
vnet_feature_enable_disable ("ip4-unicast", "ip4-not-enabled", sw_if_index,
{
u32 *from, n_left_from;
vlib_node_runtime_t *error_node =
- vlib_node_get_runtime (vm, ip4_input_node.index);
+ vlib_node_get_runtime (vm, ip4_local_node.index);
u16 nexts[VLIB_FRAME_SIZE], *next;
vlib_buffer_t *bufs[VLIB_FRAME_SIZE], **b;
ip4_header_t *ip[2];
.name = "ip4-local",
.vector_size = sizeof (u32),
.format_trace = format_ip4_forward_next_trace,
+ .n_errors = IP4_N_ERROR,
+ .error_strings = ip4_error_strings,
.n_next_nodes = IP_LOCAL_N_NEXT,
.next_nodes =
{
i32 ttl;
u32 checksum;
if (PREDICT_FALSE (b->flags & VNET_BUFFER_F_LOCALLY_ORIGINATED))
- {
- b->flags &= ~VNET_BUFFER_F_LOCALLY_ORIGINATED;
- return;
- }
+ return;
ttl = ip->ttl;
i32 ttl;
u32 checksum;
if (PREDICT_FALSE (b->flags & VNET_BUFFER_F_LOCALLY_ORIGINATED))
- {
- b->flags &= ~VNET_BUFFER_F_LOCALLY_ORIGINATED;
- return;
- }
+ return;
ttl = ip->ttl;
tx_sw_if_index0, &next_index, b[0]);
next[0] = next_index;
if (is_midchain)
- calc_checksums (vm, b[0]);
+ vnet_calc_checksums_inline (vm, b[0], 1 /* is_ip4 */ ,
+ 0 /* is_ip6 */ ,
+ 0 /* with gso */ );
}
else
{
tx_sw_if_index1, &next_index, b[1]);
next[1] = next_index;
if (is_midchain)
- calc_checksums (vm, b[1]);
+ vnet_calc_checksums_inline (vm, b[0], 1 /* is_ip4 */ ,
+ 0 /* is_ip6 */ ,
+ 0 /* with gso */ );
}
else
{
next[0] = next_index;
if (is_midchain)
- calc_checksums (vm, b[0]);
+ vnet_calc_checksums_inline (vm, b[0], 1 /* is_ip4 */ ,
+ 0 /* is_ip6 */ ,
+ 0 /* with gso */ );
/* Guess we are only writing on simple Ethernet header. */
vnet_rewrite_one_header (adj0[0], ip0, sizeof (ethernet_header_t));
if (is_midchain)
/* this acts on the packet that is about to be encapped */
- calc_checksums (vm, b[0]);
+ vnet_calc_checksums_inline (vm, b[0], 1 /* is_ip4 */ ,
+ 0 /* is_ip6 */ ,
+ 0 /* with gso */ );
/* Guess we are only writing on simple Ethernet header. */
vnet_rewrite_one_header (adj0[0], ip0, sizeof (ethernet_header_t));