NAT: VPP-1552 code migration from old multiarch scheme
Change-Id: I88f3df8aaa521e7707ef3335acdbf1ab41e7ee28 Signed-off-by: Filip Varga <fivarga@cisco.com>
This commit is contained in:
committed by
Damjan Marion
parent
7dcb80a202
commit
e69e423743
@@ -49,6 +49,25 @@ add_vpp_plugin(nat
|
||||
nat_format.c
|
||||
nat_syslog.c
|
||||
|
||||
MULTIARCH_SOURCES
|
||||
dslite_ce_decap.c
|
||||
dslite_ce_encap.c
|
||||
dslite_in2out.c
|
||||
dslite_out2in.c
|
||||
in2out.c
|
||||
in2out_ed.c
|
||||
nat44_classify.c
|
||||
nat44_hairpinning.c
|
||||
nat44_handoff.c
|
||||
nat64_in2out.c
|
||||
nat64_out2in.c
|
||||
nat66_in2out.c
|
||||
nat66_out2in.c
|
||||
nat_det_in2out.c
|
||||
nat_det_out2in.c
|
||||
out2in.c
|
||||
out2in_ed.c
|
||||
|
||||
API_FILES
|
||||
nat.api
|
||||
|
||||
|
||||
@@ -25,12 +25,22 @@ dslite_init (vlib_main_t * vm)
|
||||
vlib_thread_registration_t *tr;
|
||||
vlib_thread_main_t *tm = vlib_get_thread_main ();
|
||||
uword *p;
|
||||
vlib_node_t *node;
|
||||
dslite_per_thread_data_t *td;
|
||||
u32 translation_buckets = 1024;
|
||||
u32 translation_memory_size = 128 << 20;
|
||||
u32 b4_buckets = 128;
|
||||
u32 b4_memory_size = 64 << 20;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "dslite-in2out");
|
||||
dm->dslite_in2out_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "dslite-in2out-slowpath");
|
||||
dm->dslite_in2out_slowpath_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "dslite-out2in");
|
||||
dm->dslite_out2in_node_index = node->index;
|
||||
|
||||
dm->first_worker_index = 0;
|
||||
dm->num_workers = 0;
|
||||
|
||||
|
||||
@@ -91,6 +91,11 @@ typedef struct
|
||||
vlib_simple_counter_main_t total_b4s;
|
||||
vlib_simple_counter_main_t total_sessions;
|
||||
|
||||
/* node index */
|
||||
u32 dslite_in2out_node_index;
|
||||
u32 dslite_in2out_slowpath_node_index;
|
||||
u32 dslite_out2in_node_index;
|
||||
|
||||
/* If set then the DSLite component behaves as CPE/B4
|
||||
* otherwise it behaves as AFTR */
|
||||
u8 is_ce;
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
#include <nat/dslite.h>
|
||||
#include <nat/nat_inlines.h>
|
||||
|
||||
vlib_node_registration_t dslite_ce_decap_node;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DSLITE_CE_DECAP_NEXT_IP4_LOOKUP,
|
||||
@@ -31,9 +29,9 @@ static char *dslite_ce_decap_error_strings[] = {
|
||||
#undef _
|
||||
};
|
||||
|
||||
static uword
|
||||
dslite_ce_decap_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (dslite_ce_decap_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
dslite_ce_decap_next_t next_index;
|
||||
@@ -119,7 +117,6 @@ dslite_ce_decap_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (dslite_ce_decap_node) = {
|
||||
.function = dslite_ce_decap_node_fn,
|
||||
.name = "dslite-ce-decap",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_dslite_ce_trace,
|
||||
@@ -136,8 +133,6 @@ VLIB_REGISTER_NODE (dslite_ce_decap_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (dslite_ce_decap_node, dslite_ce_decap_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
#include <nat/dslite.h>
|
||||
#include <nat/nat_inlines.h>
|
||||
|
||||
vlib_node_registration_t dslite_ce_encap_node;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DSLITE_CE_ENCAP_NEXT_IP6_LOOKUP,
|
||||
@@ -30,9 +28,9 @@ static char *dslite_ce_encap_error_strings[] = {
|
||||
#undef _
|
||||
};
|
||||
|
||||
static uword
|
||||
dslite_ce_encap_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (dslite_ce_encap_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
dslite_ce_encap_next_t next_index;
|
||||
@@ -112,7 +110,6 @@ dslite_ce_encap_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (dslite_ce_encap_node) = {
|
||||
.function = dslite_ce_encap_node_fn,
|
||||
.name = "dslite-ce-encap",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_dslite_ce_trace,
|
||||
@@ -128,8 +125,6 @@ VLIB_REGISTER_NODE (dslite_ce_encap_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (dslite_ce_encap_node, dslite_ce_encap_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
@@ -16,9 +16,6 @@
|
||||
#include <nat/nat_inlines.h>
|
||||
#include <nat/nat_syslog.h>
|
||||
|
||||
vlib_node_registration_t dslite_in2out_node;
|
||||
vlib_node_registration_t dslite_in2out_slowpath_node;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DSLITE_IN2OUT_NEXT_IP4_LOOKUP,
|
||||
@@ -249,8 +246,8 @@ dslite_in2out_node_fn_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
dslite_main_t *dm = &dslite_main;
|
||||
|
||||
node_index =
|
||||
is_slow_path ? dslite_in2out_slowpath_node.
|
||||
index : dslite_in2out_node.index;
|
||||
is_slow_path ? dm->dslite_in2out_slowpath_node_index :
|
||||
dm->dslite_in2out_node_index;
|
||||
|
||||
error_node = vlib_node_get_runtime (vm, node_index);
|
||||
|
||||
@@ -445,16 +442,15 @@ dslite_in2out_node_fn_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
return frame->n_vectors;
|
||||
}
|
||||
|
||||
static uword
|
||||
dslite_in2out_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (dslite_in2out_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return dslite_in2out_node_fn_inline (vm, node, frame, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (dslite_in2out_node) = {
|
||||
.function = dslite_in2out_node_fn,
|
||||
.name = "dslite-in2out",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_dslite_trace,
|
||||
@@ -472,18 +468,15 @@ VLIB_REGISTER_NODE (dslite_in2out_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (dslite_in2out_node, dslite_in2out_node_fn);
|
||||
|
||||
static uword
|
||||
dslite_in2out_slowpath_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (dslite_in2out_slowpath_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return dslite_in2out_node_fn_inline (vm, node, frame, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (dslite_in2out_slowpath_node) = {
|
||||
.function = dslite_in2out_slowpath_node_fn,
|
||||
.name = "dslite-in2out-slowpath",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_dslite_trace,
|
||||
@@ -501,9 +494,6 @@ VLIB_REGISTER_NODE (dslite_in2out_slowpath_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (dslite_in2out_slowpath_node,
|
||||
dslite_in2out_slowpath_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
#include <nat/dslite.h>
|
||||
#include <nat/nat_inlines.h>
|
||||
|
||||
vlib_node_registration_t dslite_out2in_node;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DSLITE_OUT2IN_NEXT_IP4_LOOKUP,
|
||||
@@ -94,9 +92,9 @@ done:
|
||||
return n;
|
||||
}
|
||||
|
||||
static uword
|
||||
dslite_out2in_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (dslite_out2in_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
dslite_out2in_next_t next_index;
|
||||
@@ -105,7 +103,7 @@ dslite_out2in_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
f64 now = vlib_time_now (vm);
|
||||
dslite_main_t *dm = &dslite_main;
|
||||
|
||||
error_node = vlib_node_get_runtime (vm, dslite_out2in_node.index);
|
||||
error_node = vlib_node_get_runtime (vm, dm->dslite_out2in_node_index);
|
||||
|
||||
from = vlib_frame_vector_args (frame);
|
||||
n_left_from = frame->n_vectors;
|
||||
@@ -270,7 +268,6 @@ dslite_out2in_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (dslite_out2in_node) = {
|
||||
.function = dslite_out2in_node_fn,
|
||||
.name = "dslite-out2in",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_dslite_trace,
|
||||
@@ -287,8 +284,6 @@ VLIB_REGISTER_NODE (dslite_out2in_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (dslite_out2in_node, dslite_out2in_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
+31
-56
@@ -72,13 +72,6 @@ format_snat_in2out_fast_trace (u8 * s, va_list * args)
|
||||
return s;
|
||||
}
|
||||
|
||||
vlib_node_registration_t snat_in2out_node;
|
||||
vlib_node_registration_t snat_in2out_slowpath_node;
|
||||
vlib_node_registration_t snat_in2out_fast_node;
|
||||
vlib_node_registration_t snat_in2out_output_node;
|
||||
vlib_node_registration_t snat_in2out_output_slowpath_node;
|
||||
vlib_node_registration_t nat44_in2out_reass_node;
|
||||
|
||||
#define foreach_snat_in2out_error \
|
||||
_(UNSUPPORTED_PROTOCOL, "unsupported protocol") \
|
||||
_(IN2OUT_PACKETS, "good in2out packets processed") \
|
||||
@@ -198,6 +191,7 @@ nat_not_translate_output_feature (snat_main_t * sm, ip4_header_t * ip0,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
int
|
||||
nat44_i2o_is_idle_session_cb (clib_bihash_kv_8_8_t * kv, void *arg)
|
||||
{
|
||||
@@ -240,6 +234,7 @@ nat44_i2o_is_idle_session_cb (clib_bihash_kv_8_8_t * kv, void *arg)
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static u32
|
||||
slow_path (snat_main_t * sm, vlib_buffer_t * b0,
|
||||
@@ -433,6 +428,7 @@ static_always_inline
|
||||
return -1; /* success */
|
||||
}
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
/**
|
||||
* Get address and port values to be used for ICMP packet translation
|
||||
* and create session if needed
|
||||
@@ -550,7 +546,9 @@ out:
|
||||
*(snat_session_t **) d = s0;
|
||||
return next0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
/**
|
||||
* Get address and port values to be used for ICMP packet translation
|
||||
*
|
||||
@@ -632,7 +630,9 @@ out2:
|
||||
*p_dont_translate = dont_translate;
|
||||
return next0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
u32
|
||||
icmp_in2out (snat_main_t * sm,
|
||||
vlib_buffer_t * b0,
|
||||
@@ -782,6 +782,7 @@ icmp_in2out (snat_main_t * sm,
|
||||
out:
|
||||
return next0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline u32
|
||||
icmp_in2out_slow_path (snat_main_t * sm,
|
||||
@@ -863,8 +864,8 @@ snat_in2out_node_fn_inline (vlib_main_t * vm,
|
||||
u32 tcp_packets = 0, udp_packets = 0, icmp_packets = 0, other_packets =
|
||||
0, fragments = 0;
|
||||
|
||||
stats_node_index = is_slow_path ? snat_in2out_slowpath_node.index :
|
||||
snat_in2out_node.index;
|
||||
stats_node_index = is_slow_path ? sm->in2out_slowpath_node_index :
|
||||
sm->in2out_node_index;
|
||||
|
||||
from = vlib_frame_vector_args (frame);
|
||||
n_left_from = frame->n_vectors;
|
||||
@@ -1552,9 +1553,9 @@ snat_in2out_node_fn_inline (vlib_main_t * vm,
|
||||
return frame->n_vectors;
|
||||
}
|
||||
|
||||
static uword
|
||||
snat_in2out_fast_path_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_in2out_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return snat_in2out_node_fn_inline (vm, node, frame, 0 /* is_slow_path */ ,
|
||||
0);
|
||||
@@ -1562,7 +1563,6 @@ snat_in2out_fast_path_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_in2out_node) = {
|
||||
.function = snat_in2out_fast_path_fn,
|
||||
.name = "nat44-in2out",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_snat_in2out_trace,
|
||||
@@ -1586,12 +1586,9 @@ VLIB_REGISTER_NODE (snat_in2out_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_in2out_node, snat_in2out_fast_path_fn);
|
||||
|
||||
static uword
|
||||
snat_in2out_output_fast_path_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_in2out_output_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return snat_in2out_node_fn_inline (vm, node, frame, 0 /* is_slow_path */ ,
|
||||
1);
|
||||
@@ -1599,7 +1596,6 @@ snat_in2out_output_fast_path_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_in2out_output_node) = {
|
||||
.function = snat_in2out_output_fast_path_fn,
|
||||
.name = "nat44-in2out-output",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_snat_in2out_trace,
|
||||
@@ -1623,12 +1619,9 @@ VLIB_REGISTER_NODE (snat_in2out_output_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_in2out_output_node,
|
||||
snat_in2out_output_fast_path_fn);
|
||||
|
||||
static uword
|
||||
snat_in2out_slow_path_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_in2out_slowpath_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return snat_in2out_node_fn_inline (vm, node, frame, 1 /* is_slow_path */ ,
|
||||
0);
|
||||
@@ -1636,7 +1629,6 @@ snat_in2out_slow_path_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_in2out_slowpath_node) = {
|
||||
.function = snat_in2out_slow_path_fn,
|
||||
.name = "nat44-in2out-slowpath",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_snat_in2out_trace,
|
||||
@@ -1660,13 +1652,9 @@ VLIB_REGISTER_NODE (snat_in2out_slowpath_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_in2out_slowpath_node,
|
||||
snat_in2out_slow_path_fn);
|
||||
|
||||
static uword
|
||||
snat_in2out_output_slow_path_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_in2out_output_slowpath_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return snat_in2out_node_fn_inline (vm, node, frame, 1 /* is_slow_path */ ,
|
||||
1);
|
||||
@@ -1674,7 +1662,6 @@ snat_in2out_output_slow_path_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_in2out_output_slowpath_node) = {
|
||||
.function = snat_in2out_output_slow_path_fn,
|
||||
.name = "nat44-in2out-output-slowpath",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_snat_in2out_trace,
|
||||
@@ -1698,12 +1685,9 @@ VLIB_REGISTER_NODE (snat_in2out_output_slowpath_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_in2out_output_slowpath_node,
|
||||
snat_in2out_output_slow_path_fn);
|
||||
|
||||
static uword
|
||||
nat44_in2out_reass_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_in2out_reass_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
snat_in2out_next_t next_index;
|
||||
@@ -1960,10 +1944,10 @@ nat44_in2out_reass_node_fn (vlib_main_t * vm,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, nat44_in2out_reass_node.index,
|
||||
vlib_node_increment_counter (vm, sm->in2out_reass_node_index,
|
||||
SNAT_IN2OUT_ERROR_PROCESSED_FRAGMENTS,
|
||||
pkts_processed);
|
||||
vlib_node_increment_counter (vm, nat44_in2out_reass_node.index,
|
||||
vlib_node_increment_counter (vm, sm->in2out_reass_node_index,
|
||||
SNAT_IN2OUT_ERROR_CACHED_FRAGMENTS,
|
||||
cached_fragments);
|
||||
|
||||
@@ -1978,7 +1962,6 @@ nat44_in2out_reass_node_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_in2out_reass_node) = {
|
||||
.function = nat44_in2out_reass_node_fn,
|
||||
.name = "nat44-in2out-reass",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_reass_trace,
|
||||
@@ -1998,13 +1981,9 @@ VLIB_REGISTER_NODE (nat44_in2out_reass_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_in2out_reass_node,
|
||||
nat44_in2out_reass_node_fn);
|
||||
|
||||
static uword
|
||||
snat_in2out_fast_static_map_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_in2out_fast_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
snat_in2out_next_t next_index;
|
||||
@@ -2012,7 +1991,7 @@ snat_in2out_fast_static_map_fn (vlib_main_t * vm,
|
||||
snat_main_t *sm = &snat_main;
|
||||
u32 stats_node_index;
|
||||
|
||||
stats_node_index = snat_in2out_fast_node.index;
|
||||
stats_node_index = sm->in2out_fast_node_index;
|
||||
|
||||
from = vlib_frame_vector_args (frame);
|
||||
n_left_from = frame->n_vectors;
|
||||
@@ -2177,7 +2156,6 @@ snat_in2out_fast_static_map_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_in2out_fast_node) = {
|
||||
.function = snat_in2out_fast_static_map_fn,
|
||||
.name = "nat44-in2out-fast",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_snat_in2out_fast_trace,
|
||||
@@ -2201,9 +2179,6 @@ VLIB_REGISTER_NODE (snat_in2out_fast_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_in2out_fast_node,
|
||||
snat_in2out_fast_static_map_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
+27
-58
@@ -81,12 +81,6 @@ typedef struct
|
||||
u32 is_slow_path;
|
||||
} nat_in2out_ed_trace_t;
|
||||
|
||||
vlib_node_registration_t nat44_ed_in2out_node;
|
||||
vlib_node_registration_t nat44_ed_in2out_slowpath_node;
|
||||
vlib_node_registration_t nat44_ed_in2out_output_node;
|
||||
vlib_node_registration_t nat44_ed_in2out_output_slowpath_node;
|
||||
vlib_node_registration_t nat44_ed_in2out_reass_node;
|
||||
|
||||
static u8 *
|
||||
format_nat_in2out_ed_trace (u8 * s, va_list * args)
|
||||
{
|
||||
@@ -154,6 +148,7 @@ icmp_get_ed_key (ip4_header_t * ip0, nat_ed_ses_key_t * p_key0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
int
|
||||
nat44_i2o_ed_is_idle_session_cb (clib_bihash_kv_16_8_t * kv, void *arg)
|
||||
{
|
||||
@@ -243,6 +238,7 @@ nat44_i2o_ed_is_idle_session_cb (clib_bihash_kv_16_8_t * kv, void *arg)
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline u32
|
||||
icmp_in2out_ed_slow_path (snat_main_t * sm, vlib_buffer_t * b0,
|
||||
@@ -587,6 +583,7 @@ nat44_ed_not_translate_output_feature (snat_main_t * sm, ip4_header_t * ip,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
u32
|
||||
icmp_match_in2out_ed (snat_main_t * sm, vlib_node_runtime_t * node,
|
||||
u32 thread_index, vlib_buffer_t * b, ip4_header_t * ip,
|
||||
@@ -696,6 +693,7 @@ out:
|
||||
*(snat_session_t **) d = s;
|
||||
return next;
|
||||
}
|
||||
#endif
|
||||
|
||||
static snat_session_t *
|
||||
nat44_ed_in2out_unknown_proto (snat_main_t * sm,
|
||||
@@ -912,8 +910,8 @@ nat44_ed_in2out_node_fn_inline (vlib_main_t * vm,
|
||||
u32 tcp_packets = 0, udp_packets = 0, icmp_packets = 0, other_packets =
|
||||
0, fragments = 0;
|
||||
|
||||
stats_node_index = is_slow_path ? nat44_ed_in2out_slowpath_node.index :
|
||||
nat44_ed_in2out_node.index;
|
||||
stats_node_index = is_slow_path ? sm->ed_in2out_slowpath_node_index :
|
||||
sm->ed_in2out_node_index;
|
||||
|
||||
from = vlib_frame_vector_args (frame);
|
||||
n_left_from = frame->n_vectors;
|
||||
@@ -1650,17 +1648,15 @@ nat44_ed_in2out_node_fn_inline (vlib_main_t * vm,
|
||||
return frame->n_vectors;
|
||||
}
|
||||
|
||||
static uword
|
||||
nat44_ed_in2out_fast_path_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_in2out_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_ed_in2out_node_fn_inline (vm, node, frame, 0, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_in2out_node) = {
|
||||
.function = nat44_ed_in2out_fast_path_fn,
|
||||
.name = "nat44-ed-in2out",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat_in2out_ed_trace,
|
||||
@@ -1679,20 +1675,15 @@ VLIB_REGISTER_NODE (nat44_ed_in2out_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_in2out_node,
|
||||
nat44_ed_in2out_fast_path_fn);
|
||||
|
||||
static uword
|
||||
nat44_ed_in2out_output_fast_path_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_in2out_output_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_ed_in2out_node_fn_inline (vm, node, frame, 0, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_in2out_output_node) = {
|
||||
.function = nat44_ed_in2out_output_fast_path_fn,
|
||||
.name = "nat44-ed-in2out-output",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat_in2out_ed_trace,
|
||||
@@ -1711,20 +1702,15 @@ VLIB_REGISTER_NODE (nat44_ed_in2out_output_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_in2out_output_node,
|
||||
nat44_ed_in2out_output_fast_path_fn);
|
||||
|
||||
static uword
|
||||
nat44_ed_in2out_slow_path_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_in2out_slowpath_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_ed_in2out_node_fn_inline (vm, node, frame, 1, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_in2out_slowpath_node) = {
|
||||
.function = nat44_ed_in2out_slow_path_fn,
|
||||
.name = "nat44-ed-in2out-slowpath",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat_in2out_ed_trace,
|
||||
@@ -1743,20 +1729,16 @@ VLIB_REGISTER_NODE (nat44_ed_in2out_slowpath_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_in2out_slowpath_node,
|
||||
nat44_ed_in2out_slow_path_fn);
|
||||
|
||||
static uword
|
||||
nat44_ed_in2out_output_slow_path_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_in2out_output_slowpath_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t *
|
||||
node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_ed_in2out_node_fn_inline (vm, node, frame, 1, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_in2out_output_slowpath_node) = {
|
||||
.function = nat44_ed_in2out_output_slow_path_fn,
|
||||
.name = "nat44-ed-in2out-output-slowpath",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat_in2out_ed_trace,
|
||||
@@ -1775,9 +1757,6 @@ VLIB_REGISTER_NODE (nat44_ed_in2out_output_slowpath_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_in2out_output_slowpath_node,
|
||||
nat44_ed_in2out_output_slow_path_fn);
|
||||
|
||||
static inline uword
|
||||
nat44_ed_in2out_reass_node_fn_inline (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
@@ -2102,10 +2081,10 @@ nat44_ed_in2out_reass_node_fn_inline (vlib_main_t * vm,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, nat44_ed_in2out_reass_node.index,
|
||||
vlib_node_increment_counter (vm, sm->ed_in2out_reass_node_index,
|
||||
NAT_IN2OUT_ED_ERROR_PROCESSED_FRAGMENTS,
|
||||
pkts_processed);
|
||||
vlib_node_increment_counter (vm, nat44_ed_in2out_reass_node.index,
|
||||
vlib_node_increment_counter (vm, sm->ed_in2out_reass_node_index,
|
||||
NAT_IN2OUT_ED_ERROR_CACHED_FRAGMENTS,
|
||||
cached_fragments);
|
||||
|
||||
@@ -2118,17 +2097,15 @@ nat44_ed_in2out_reass_node_fn_inline (vlib_main_t * vm,
|
||||
return frame->n_vectors;
|
||||
}
|
||||
|
||||
static uword
|
||||
nat44_ed_in2out_reass_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_in2out_reass_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_ed_in2out_reass_node_fn_inline (vm, node, frame, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_in2out_reass_node) = {
|
||||
.function = nat44_ed_in2out_reass_node_fn,
|
||||
.name = "nat44-ed-in2out-reass",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_reass_trace,
|
||||
@@ -2146,20 +2123,15 @@ VLIB_REGISTER_NODE (nat44_ed_in2out_reass_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_in2out_reass_node,
|
||||
nat44_ed_in2out_reass_node_fn);
|
||||
|
||||
static uword
|
||||
nat44_ed_in2out_reass_output_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_in2out_reass_output_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_ed_in2out_reass_node_fn_inline (vm, node, frame, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_in2out_reass_output_node) = {
|
||||
.function = nat44_ed_in2out_reass_output_node_fn,
|
||||
.name = "nat44-ed-in2out-reass-output",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_reass_trace,
|
||||
@@ -2177,9 +2149,6 @@ VLIB_REGISTER_NODE (nat44_ed_in2out_reass_output_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_in2out_reass_output_node,
|
||||
nat44_ed_in2out_reass_output_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
+57
-4
@@ -2240,7 +2240,7 @@ snat_init (vlib_main_t * vm)
|
||||
uword *bitmap = 0;
|
||||
u32 i;
|
||||
ip4_add_del_interface_address_callback_t cb4;
|
||||
vlib_node_t *error_drop_node;
|
||||
vlib_node_t *node;
|
||||
|
||||
sm->vlib_main = vm;
|
||||
sm->vnet_main = vnet_get_main ();
|
||||
@@ -2262,10 +2262,63 @@ snat_init (vlib_main_t * vm)
|
||||
sm->addr_and_port_alloc_alg = NAT_ADDR_AND_PORT_ALLOC_ALG_DEFAULT;
|
||||
sm->forwarding_enabled = 0;
|
||||
sm->log_class = vlib_log_register_class ("nat", 0);
|
||||
error_drop_node = vlib_get_node_by_name (vm, (u8 *) "error-drop");
|
||||
sm->error_node_index = error_drop_node->index;
|
||||
sm->mss_clamping = 0;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "error-drop");
|
||||
sm->error_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-in2out");
|
||||
sm->in2out_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-in2out-output");
|
||||
sm->in2out_output_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-in2out-fast");
|
||||
sm->in2out_fast_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-in2out-slowpath");
|
||||
sm->in2out_slowpath_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-in2out-output-slowpath");
|
||||
sm->in2out_slowpath_output_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-in2out-reass");
|
||||
sm->in2out_reass_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-ed-in2out");
|
||||
sm->ed_in2out_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-ed-in2out-slowpath");
|
||||
sm->ed_in2out_slowpath_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-ed-in2out-reass");
|
||||
sm->ed_in2out_reass_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-out2in");
|
||||
sm->out2in_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-out2in-fast");
|
||||
sm->out2in_fast_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-out2in-reass");
|
||||
sm->out2in_reass_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-ed-out2in");
|
||||
sm->ed_out2in_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-ed-out2in-slowpath");
|
||||
sm->ed_out2in_slowpath_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-ed-out2in-reass");
|
||||
sm->ed_out2in_reass_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-det-in2out");
|
||||
sm->det_in2out_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-det-out2in");
|
||||
sm->det_out2in_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-hairpinning");
|
||||
sm->hairpinning_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-hairpin-dst");
|
||||
sm->hairpin_dst_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-hairpin-src");
|
||||
sm->hairpin_src_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-ed-hairpinning");
|
||||
sm->ed_hairpinning_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-ed-hairpin-dst");
|
||||
sm->ed_hairpin_dst_node_index = node->index;
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat44-ed-hairpin-src");
|
||||
sm->ed_hairpin_src_node_index = node->index;
|
||||
|
||||
p = hash_get_mem (tm->thread_registrations_by_name, "workers");
|
||||
if (p)
|
||||
{
|
||||
@@ -2329,7 +2382,7 @@ snat_init (vlib_main_t * vm)
|
||||
|
||||
dslite_init (vm);
|
||||
|
||||
nat66_init ();
|
||||
nat66_init (vm);
|
||||
|
||||
ip4_table_bind_callback_t cbt4 = {
|
||||
.function = snat_ip4_table_bind,
|
||||
|
||||
+25
-2
@@ -493,11 +493,34 @@ typedef struct snat_main_s
|
||||
u32 fq_in2out_output_index;
|
||||
u32 fq_out2in_index;
|
||||
|
||||
/* in2out and out2in node index */
|
||||
/* node indexes */
|
||||
u32 error_node_index;
|
||||
|
||||
u32 in2out_node_index;
|
||||
u32 in2out_output_node_index;
|
||||
u32 in2out_fast_node_index;
|
||||
u32 in2out_slowpath_node_index;
|
||||
u32 in2out_slowpath_output_node_index;
|
||||
u32 in2out_reass_node_index;
|
||||
u32 ed_in2out_node_index;
|
||||
u32 ed_in2out_slowpath_node_index;
|
||||
u32 ed_in2out_reass_node_index;
|
||||
u32 out2in_node_index;
|
||||
u32 error_node_index;
|
||||
u32 out2in_fast_node_index;
|
||||
u32 out2in_reass_node_index;
|
||||
u32 ed_out2in_node_index;
|
||||
u32 ed_out2in_slowpath_node_index;
|
||||
u32 ed_out2in_reass_node_index;
|
||||
u32 det_in2out_node_index;
|
||||
u32 det_out2in_node_index;
|
||||
|
||||
u32 hairpinning_node_index;
|
||||
u32 hairpin_dst_node_index;
|
||||
u32 hairpin_src_node_index;
|
||||
u32 ed_hairpinning_node_index;
|
||||
u32 ed_hairpin_dst_node_index;
|
||||
u32 ed_hairpin_src_node_index;
|
||||
|
||||
|
||||
/* Deterministic NAT mappings */
|
||||
snat_det_map_t *det_maps;
|
||||
|
||||
@@ -24,11 +24,6 @@
|
||||
#include <nat/nat_reass.h>
|
||||
#include <nat/nat_inlines.h>
|
||||
|
||||
vlib_node_registration_t nat44_classify_node;
|
||||
vlib_node_registration_t nat44_ed_classify_node;
|
||||
vlib_node_registration_t nat44_det_classify_node;
|
||||
vlib_node_registration_t nat44_handoff_classify_node;
|
||||
|
||||
#define foreach_nat44_classify_error \
|
||||
_(MAX_REASS, "Maximum reassemblies exceeded") \
|
||||
_(MAX_FRAG, "Maximum fragments per reassembly exceeded") \
|
||||
@@ -418,16 +413,15 @@ nat44_classify_node_fn_inline (vlib_main_t * vm,
|
||||
return frame->n_vectors;
|
||||
}
|
||||
|
||||
static uword
|
||||
nat44_classify_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_classify_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_classify_node_fn_inline (vm, node, frame, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_classify_node) = {
|
||||
.function = nat44_classify_node_fn,
|
||||
.name = "nat44-classify",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_classify_trace,
|
||||
@@ -443,17 +437,15 @@ VLIB_REGISTER_NODE (nat44_classify_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_classify_node, nat44_classify_node_fn);
|
||||
static uword
|
||||
nat44_ed_classify_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_classify_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_classify_node_fn_inline (vm, node, frame, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_classify_node) = {
|
||||
.function = nat44_ed_classify_node_fn,
|
||||
.name = "nat44-ed-classify",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_classify_trace,
|
||||
@@ -467,19 +459,15 @@ VLIB_REGISTER_NODE (nat44_ed_classify_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_classify_node,
|
||||
nat44_ed_classify_node_fn);
|
||||
|
||||
static uword
|
||||
nat44_det_classify_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_det_classify_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_classify_node_fn_inline (vm, node, frame, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_det_classify_node) = {
|
||||
.function = nat44_det_classify_node_fn,
|
||||
.name = "nat44-det-classify",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_classify_trace,
|
||||
@@ -493,20 +481,15 @@ VLIB_REGISTER_NODE (nat44_det_classify_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_det_classify_node,
|
||||
nat44_det_classify_node_fn);
|
||||
|
||||
static uword
|
||||
nat44_handoff_classify_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_handoff_classify_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_classify_node_fn_inline (vm, node, frame, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_handoff_classify_node) = {
|
||||
.function = nat44_handoff_classify_node_fn,
|
||||
.name = "nat44-handoff-classify",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_classify_trace,
|
||||
@@ -519,8 +502,6 @@ VLIB_REGISTER_NODE (nat44_handoff_classify_node) = {
|
||||
},
|
||||
};
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_handoff_classify_node,
|
||||
nat44_handoff_classify_node_fn);
|
||||
/* *INDENT-ON* */
|
||||
|
||||
/*
|
||||
|
||||
@@ -57,13 +57,6 @@ static char *nat44_hairpin_error_strings[] = {
|
||||
#undef _
|
||||
};
|
||||
|
||||
vlib_node_registration_t snat_hairpin_dst_node;
|
||||
vlib_node_registration_t snat_hairpin_src_node;
|
||||
vlib_node_registration_t nat44_hairpinning_node;
|
||||
vlib_node_registration_t nat44_ed_hairpin_dst_node;
|
||||
vlib_node_registration_t nat44_ed_hairpin_src_node;
|
||||
vlib_node_registration_t nat44_ed_hairpinning_node;
|
||||
|
||||
extern vnet_feature_arc_registration_t vnet_feat_arc_ip4_local;
|
||||
|
||||
static_always_inline int
|
||||
@@ -92,6 +85,7 @@ is_hairpinning (snat_main_t * sm, ip4_address_t * dst_addr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
int
|
||||
snat_hairpinning (snat_main_t * sm,
|
||||
vlib_buffer_t * b0,
|
||||
@@ -198,7 +192,9 @@ snat_hairpinning (snat_main_t * sm,
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
u32
|
||||
snat_icmp_hairpinning (snat_main_t * sm,
|
||||
vlib_buffer_t * b0,
|
||||
@@ -352,7 +348,9 @@ change_addr:
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
void
|
||||
nat_hairpinning_sm_unknown_proto (snat_main_t * sm,
|
||||
vlib_buffer_t * b, ip4_header_t * ip)
|
||||
@@ -377,7 +375,9 @@ nat_hairpinning_sm_unknown_proto (snat_main_t * sm,
|
||||
if (vnet_buffer (b)->sw_if_index[VLIB_TX] == ~0)
|
||||
vnet_buffer (b)->sw_if_index[VLIB_TX] = m->fib_index;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
void
|
||||
nat44_ed_hairpinning_unknown_proto (snat_main_t * sm,
|
||||
vlib_buffer_t * b, ip4_header_t * ip)
|
||||
@@ -422,7 +422,9 @@ nat44_ed_hairpinning_unknown_proto (snat_main_t * sm,
|
||||
sum = ip_csum_update (sum, old_addr, new_addr, ip4_header_t, dst_address);
|
||||
ip->checksum = ip_csum_fold (sum);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
void
|
||||
nat44_reass_hairpinning (snat_main_t * sm,
|
||||
vlib_buffer_t * b0,
|
||||
@@ -533,6 +535,7 @@ nat44_reass_hairpinning (snat_main_t * sm,
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline uword
|
||||
nat44_hairpinning_fn_inline (vlib_main_t * vm,
|
||||
@@ -547,8 +550,8 @@ nat44_hairpinning_fn_inline (vlib_main_t * vm,
|
||||
u8 arc_index = vnet_feat_arc_ip4_local.feature_arc_index;
|
||||
vnet_feature_config_main_t *cm = &fm->feature_config_mains[arc_index];
|
||||
|
||||
stats_node_index = is_ed ? nat44_ed_hairpinning_node.index :
|
||||
nat44_hairpinning_node.index;
|
||||
stats_node_index = is_ed ? sm->ed_hairpinning_node_index :
|
||||
sm->hairpinning_node_index;
|
||||
from = vlib_frame_vector_args (frame);
|
||||
n_left_from = frame->n_vectors;
|
||||
next_index = node->cached_next_index;
|
||||
@@ -606,16 +609,15 @@ nat44_hairpinning_fn_inline (vlib_main_t * vm,
|
||||
return frame->n_vectors;
|
||||
}
|
||||
|
||||
static uword
|
||||
nat44_hairpinning_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_hairpinning_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_hairpinning_fn_inline (vm, node, frame, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_hairpinning_node) = {
|
||||
.function = nat44_hairpinning_fn,
|
||||
.name = "nat44-hairpinning",
|
||||
.vector_size = sizeof (u32),
|
||||
.type = VLIB_NODE_TYPE_INTERNAL,
|
||||
@@ -629,18 +631,15 @@ VLIB_REGISTER_NODE (nat44_hairpinning_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_hairpinning_node, nat44_hairpinning_fn);
|
||||
|
||||
static uword
|
||||
nat44_ed_hairpinning_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_hairpinning_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_hairpinning_fn_inline (vm, node, frame, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_hairpinning_node) = {
|
||||
.function = nat44_ed_hairpinning_fn,
|
||||
.name = "nat44-ed-hairpinning",
|
||||
.vector_size = sizeof (u32),
|
||||
.type = VLIB_NODE_TYPE_INTERNAL,
|
||||
@@ -654,9 +653,6 @@ VLIB_REGISTER_NODE (nat44_ed_hairpinning_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_hairpinning_node,
|
||||
nat44_ed_hairpinning_fn);
|
||||
|
||||
static inline uword
|
||||
snat_hairpin_dst_fn_inline (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
@@ -667,8 +663,8 @@ snat_hairpin_dst_fn_inline (vlib_main_t * vm,
|
||||
u32 pkts_processed = 0;
|
||||
snat_main_t *sm = &snat_main;
|
||||
|
||||
stats_node_index = is_ed ? nat44_ed_hairpin_dst_node.index :
|
||||
snat_hairpin_dst_node.index;
|
||||
stats_node_index = is_ed ? sm->ed_hairpin_dst_node_index :
|
||||
sm->hairpin_dst_node_index;
|
||||
|
||||
from = vlib_frame_vector_args (frame);
|
||||
n_left_from = frame->n_vectors;
|
||||
@@ -745,16 +741,15 @@ snat_hairpin_dst_fn_inline (vlib_main_t * vm,
|
||||
return frame->n_vectors;
|
||||
}
|
||||
|
||||
static uword
|
||||
snat_hairpin_dst_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_hairpin_dst_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return snat_hairpin_dst_fn_inline (vm, node, frame, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_hairpin_dst_node) = {
|
||||
.function = snat_hairpin_dst_fn,
|
||||
.name = "nat44-hairpin-dst",
|
||||
.vector_size = sizeof (u32),
|
||||
.type = VLIB_NODE_TYPE_INTERNAL,
|
||||
@@ -768,18 +763,15 @@ VLIB_REGISTER_NODE (snat_hairpin_dst_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_hairpin_dst_node, snat_hairpin_dst_fn);
|
||||
|
||||
static uword
|
||||
nat44_ed_hairpin_dst_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_hairpin_dst_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return snat_hairpin_dst_fn_inline (vm, node, frame, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_hairpin_dst_node) = {
|
||||
.function = nat44_ed_hairpin_dst_fn,
|
||||
.name = "nat44-ed-hairpin-dst",
|
||||
.vector_size = sizeof (u32),
|
||||
.type = VLIB_NODE_TYPE_INTERNAL,
|
||||
@@ -793,9 +785,6 @@ VLIB_REGISTER_NODE (nat44_ed_hairpin_dst_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_hairpin_dst_node,
|
||||
nat44_ed_hairpin_dst_fn);
|
||||
|
||||
static inline uword
|
||||
snat_hairpin_src_fn_inline (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
@@ -806,8 +795,8 @@ snat_hairpin_src_fn_inline (vlib_main_t * vm,
|
||||
u32 pkts_processed = 0;
|
||||
snat_main_t *sm = &snat_main;
|
||||
|
||||
stats_node_index = is_ed ? nat44_ed_hairpin_src_node.index :
|
||||
snat_hairpin_src_node.index;
|
||||
stats_node_index = is_ed ? sm->ed_hairpin_src_node_index :
|
||||
sm->hairpin_src_node_index;
|
||||
|
||||
from = vlib_frame_vector_args (frame);
|
||||
n_left_from = frame->n_vectors;
|
||||
@@ -874,16 +863,15 @@ snat_hairpin_src_fn_inline (vlib_main_t * vm,
|
||||
return frame->n_vectors;
|
||||
}
|
||||
|
||||
static uword
|
||||
snat_hairpin_src_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_hairpin_src_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return snat_hairpin_src_fn_inline (vm, node, frame, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_hairpin_src_node) = {
|
||||
.function = snat_hairpin_src_fn,
|
||||
.name = "nat44-hairpin-src",
|
||||
.vector_size = sizeof (u32),
|
||||
.type = VLIB_NODE_TYPE_INTERNAL,
|
||||
@@ -899,18 +887,15 @@ VLIB_REGISTER_NODE (snat_hairpin_src_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_hairpin_src_node, snat_hairpin_src_fn);
|
||||
|
||||
static uword
|
||||
nat44_ed_hairpin_src_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_hairpin_src_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return snat_hairpin_src_fn_inline (vm, node, frame, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_hairpin_src_node) = {
|
||||
.function = nat44_ed_hairpin_src_fn,
|
||||
.name = "nat44-ed-hairpin-src",
|
||||
.vector_size = sizeof (u32),
|
||||
.type = VLIB_NODE_TYPE_INTERNAL,
|
||||
@@ -926,9 +911,6 @@ VLIB_REGISTER_NODE (nat44_ed_hairpin_src_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_hairpin_src_node,
|
||||
nat44_ed_hairpin_src_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
@@ -50,10 +50,6 @@ static char *nat44_handoff_error_strings[] = {
|
||||
};
|
||||
|
||||
|
||||
vlib_node_registration_t snat_in2out_worker_handoff_node;
|
||||
vlib_node_registration_t snat_in2out_output_worker_handoff_node;
|
||||
vlib_node_registration_t snat_out2in_worker_handoff_node;
|
||||
|
||||
static u8 *
|
||||
format_nat44_handoff_trace (u8 * s, va_list * args)
|
||||
{
|
||||
@@ -152,17 +148,15 @@ nat44_worker_handoff_fn_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
return frame->n_vectors;
|
||||
}
|
||||
|
||||
static uword
|
||||
snat_in2out_worker_handoff_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_in2out_worker_handoff_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_worker_handoff_fn_inline (vm, node, frame, 0, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_in2out_worker_handoff_node) = {
|
||||
.function = snat_in2out_worker_handoff_fn,
|
||||
.name = "nat44-in2out-worker-handoff",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_handoff_trace,
|
||||
@@ -176,20 +170,16 @@ VLIB_REGISTER_NODE (snat_in2out_worker_handoff_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_in2out_worker_handoff_node,
|
||||
snat_in2out_worker_handoff_fn);
|
||||
|
||||
static uword
|
||||
snat_in2out_output_worker_handoff_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_in2out_output_worker_handoff_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t *
|
||||
node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_worker_handoff_fn_inline (vm, node, frame, 1, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_in2out_output_worker_handoff_node) = {
|
||||
.function = snat_in2out_output_worker_handoff_fn,
|
||||
.name = "nat44-in2out-output-worker-handoff",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_handoff_trace,
|
||||
@@ -203,20 +193,15 @@ VLIB_REGISTER_NODE (snat_in2out_output_worker_handoff_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_in2out_output_worker_handoff_node,
|
||||
snat_in2out_output_worker_handoff_fn);
|
||||
|
||||
static uword
|
||||
snat_out2in_worker_handoff_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_out2in_worker_handoff_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_worker_handoff_fn_inline (vm, node, frame, 0, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_out2in_worker_handoff_node) = {
|
||||
.function = snat_out2in_worker_handoff_fn,
|
||||
.name = "nat44-out2in-worker-handoff",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_handoff_trace,
|
||||
@@ -230,9 +215,6 @@ VLIB_REGISTER_NODE (snat_out2in_worker_handoff_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_out2in_worker_handoff_node,
|
||||
snat_out2in_worker_handoff_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
+20
-5
@@ -232,16 +232,31 @@ nat64_init (vlib_main_t * vm)
|
||||
vlib_thread_main_t *tm = vlib_get_thread_main ();
|
||||
ip4_add_del_interface_address_callback_t cb4;
|
||||
ip4_main_t *im = &ip4_main;
|
||||
vlib_node_t *error_drop_node =
|
||||
vlib_get_node_by_name (vm, (u8 *) "error-drop");
|
||||
nm->sm = &snat_main;
|
||||
vlib_node_t *node;
|
||||
|
||||
vec_validate (nm->db, tm->n_vlib_mains - 1);
|
||||
|
||||
nm->sm = &snat_main;
|
||||
|
||||
nm->fq_in2out_index = ~0;
|
||||
nm->fq_out2in_index = ~0;
|
||||
nm->error_node_index = error_drop_node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "error-drop");
|
||||
nm->error_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat64-in2out");
|
||||
nm->in2out_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat64-in2out-slowpath");
|
||||
nm->in2out_slowpath_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat64-in2out-reass");
|
||||
nm->in2out_reass_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat64-out2in");
|
||||
nm->out2in_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat64-out2in-reass");
|
||||
nm->out2in_reass_node_index = node->index;
|
||||
|
||||
/* set session timeouts to default values */
|
||||
nm->udp_timeout = SNAT_UDP_TIMEOUT;
|
||||
|
||||
+10
-2
@@ -89,8 +89,6 @@ typedef struct
|
||||
/** Pool of static BIB entries to be added/deleted in worker threads */
|
||||
nat64_static_bib_to_update_t *static_bibs;
|
||||
|
||||
u32 error_node_index;
|
||||
|
||||
/** config parameters */
|
||||
u32 bib_buckets;
|
||||
u32 bib_memory_size;
|
||||
@@ -112,6 +110,16 @@ typedef struct
|
||||
vlib_simple_counter_main_t total_bibs;
|
||||
vlib_simple_counter_main_t total_sessions;
|
||||
|
||||
/** node index **/
|
||||
u32 error_node_index;
|
||||
|
||||
u32 in2out_node_index;
|
||||
u32 in2out_slowpath_node_index;
|
||||
u32 in2out_reass_node_index;
|
||||
|
||||
u32 out2in_node_index;
|
||||
u32 out2in_reass_node_index;
|
||||
|
||||
ip4_main_t *ip4_main;
|
||||
snat_main_t *sm;
|
||||
} nat64_main_t;
|
||||
|
||||
@@ -70,10 +70,6 @@ format_nat64_in2out_reass_trace (u8 * s, va_list * args)
|
||||
return s;
|
||||
}
|
||||
|
||||
vlib_node_registration_t nat64_in2out_node;
|
||||
vlib_node_registration_t nat64_in2out_slowpath_node;
|
||||
vlib_node_registration_t nat64_in2out_reass_node;
|
||||
vlib_node_registration_t nat64_in2out_handoff_node;
|
||||
|
||||
#define foreach_nat64_in2out_error \
|
||||
_(UNSUPPORTED_PROTOCOL, "unsupported protocol") \
|
||||
@@ -970,11 +966,13 @@ nat64_in2out_node_fn_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
u32 pkts_processed = 0;
|
||||
u32 stats_node_index;
|
||||
u32 thread_index = vm->thread_index;
|
||||
nat64_main_t *nm = &nat64_main;
|
||||
|
||||
u32 tcp_packets = 0, udp_packets = 0, icmp_packets = 0, other_packets =
|
||||
0, fragments = 0;
|
||||
|
||||
stats_node_index =
|
||||
is_slow_path ? nat64_in2out_slowpath_node.index : nat64_in2out_node.index;
|
||||
is_slow_path ? nm->in2out_slowpath_node_index : nm->in2out_node_index;
|
||||
|
||||
from = vlib_frame_vector_args (frame);
|
||||
n_left_from = frame->n_vectors;
|
||||
@@ -1171,16 +1169,15 @@ nat64_in2out_node_fn_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
return frame->n_vectors;
|
||||
}
|
||||
|
||||
static uword
|
||||
nat64_in2out_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat64_in2out_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat64_in2out_node_fn_inline (vm, node, frame, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat64_in2out_node) = {
|
||||
.function = nat64_in2out_node_fn,
|
||||
.name = "nat64-in2out",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat64_in2out_trace,
|
||||
@@ -1199,18 +1196,15 @@ VLIB_REGISTER_NODE (nat64_in2out_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat64_in2out_node, nat64_in2out_node_fn);
|
||||
|
||||
static uword
|
||||
nat64_in2out_slowpath_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat64_in2out_slowpath_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat64_in2out_node_fn_inline (vm, node, frame, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat64_in2out_slowpath_node) = {
|
||||
.function = nat64_in2out_slowpath_node_fn,
|
||||
.name = "nat64-in2out-slowpath",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat64_in2out_trace,
|
||||
@@ -1229,9 +1223,6 @@ VLIB_REGISTER_NODE (nat64_in2out_slowpath_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat64_in2out_slowpath_node,
|
||||
nat64_in2out_slowpath_node_fn);
|
||||
|
||||
typedef struct nat64_in2out_frag_set_ctx_t_
|
||||
{
|
||||
vlib_main_t *vm;
|
||||
@@ -1379,9 +1370,9 @@ nat64_in2out_frag_hairpinning (vlib_buffer_t * b, ip6_header_t * ip6,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uword
|
||||
nat64_in2out_reass_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat64_in2out_reass_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
nat64_in2out_next_t next_index;
|
||||
@@ -1648,10 +1639,10 @@ nat64_in2out_reass_node_fn (vlib_main_t * vm,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, nat64_in2out_reass_node.index,
|
||||
vlib_node_increment_counter (vm, nm->in2out_reass_node_index,
|
||||
NAT64_IN2OUT_ERROR_PROCESSED_FRAGMENTS,
|
||||
pkts_processed);
|
||||
vlib_node_increment_counter (vm, nat64_in2out_reass_node.index,
|
||||
vlib_node_increment_counter (vm, nm->in2out_reass_node_index,
|
||||
NAT64_IN2OUT_ERROR_CACHED_FRAGMENTS,
|
||||
cached_fragments);
|
||||
|
||||
@@ -1666,7 +1657,6 @@ nat64_in2out_reass_node_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat64_in2out_reass_node) = {
|
||||
.function = nat64_in2out_reass_node_fn,
|
||||
.name = "nat64-in2out-reass",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat64_in2out_reass_trace,
|
||||
@@ -1685,9 +1675,6 @@ VLIB_REGISTER_NODE (nat64_in2out_reass_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat64_in2out_reass_node,
|
||||
nat64_in2out_reass_node_fn);
|
||||
|
||||
#define foreach_nat64_in2out_handoff_error \
|
||||
_(CONGESTION_DROP, "congestion drop") \
|
||||
_(SAME_WORKER, "same worker") \
|
||||
@@ -1726,9 +1713,9 @@ format_nat64_in2out_handoff_trace (u8 * s, va_list * args)
|
||||
return s;
|
||||
}
|
||||
|
||||
static inline uword
|
||||
nat64_in2out_handoff_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat64_in2out_handoff_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
nat64_main_t *nm = &nat64_main;
|
||||
vlib_buffer_t *bufs[VLIB_FRAME_SIZE], **b;
|
||||
@@ -1793,7 +1780,6 @@ nat64_in2out_handoff_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat64_in2out_handoff_node) = {
|
||||
.function = nat64_in2out_handoff_node_fn,
|
||||
.name = "nat64-in2out-handoff",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat64_in2out_handoff_trace,
|
||||
@@ -1809,9 +1795,6 @@ VLIB_REGISTER_NODE (nat64_in2out_handoff_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat64_in2out_handoff_node,
|
||||
nat64_in2out_handoff_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
@@ -67,9 +67,6 @@ format_nat64_out2in_reass_trace (u8 * s, va_list * args)
|
||||
return s;
|
||||
}
|
||||
|
||||
vlib_node_registration_t nat64_out2in_node;
|
||||
vlib_node_registration_t nat64_out2in_reass_node;
|
||||
vlib_node_registration_t nat64_out2in_handoff_node;
|
||||
|
||||
#define foreach_nat64_out2in_error \
|
||||
_(UNSUPPORTED_PROTOCOL, "unsupported protocol") \
|
||||
@@ -433,12 +430,13 @@ nat64_out2in_unk_proto_set_cb (ip4_header_t * ip4, ip6_header_t * ip6,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uword
|
||||
nat64_out2in_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat64_out2in_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
nat64_out2in_next_t next_index;
|
||||
nat64_main_t *nm = &nat64_main;
|
||||
u32 pkts_processed = 0;
|
||||
u32 thread_index = vm->thread_index;
|
||||
u32 tcp_packets = 0, udp_packets = 0, icmp_packets = 0, other_packets =
|
||||
@@ -557,19 +555,19 @@ nat64_out2in_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
}
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
vlib_node_increment_counter (vm, nat64_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, nm->out2in_node_index,
|
||||
NAT64_OUT2IN_ERROR_OUT2IN_PACKETS,
|
||||
pkts_processed);
|
||||
vlib_node_increment_counter (vm, nat64_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, nm->out2in_node_index,
|
||||
NAT64_OUT2IN_ERROR_TCP_PACKETS, tcp_packets);
|
||||
vlib_node_increment_counter (vm, nat64_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, nm->out2in_node_index,
|
||||
NAT64_OUT2IN_ERROR_UDP_PACKETS, tcp_packets);
|
||||
vlib_node_increment_counter (vm, nat64_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, nm->out2in_node_index,
|
||||
NAT64_OUT2IN_ERROR_ICMP_PACKETS, icmp_packets);
|
||||
vlib_node_increment_counter (vm, nat64_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, nm->out2in_node_index,
|
||||
NAT64_OUT2IN_ERROR_OTHER_PACKETS,
|
||||
other_packets);
|
||||
vlib_node_increment_counter (vm, nat64_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, nm->out2in_node_index,
|
||||
NAT64_OUT2IN_ERROR_FRAGMENTS, fragments);
|
||||
|
||||
return frame->n_vectors;
|
||||
@@ -577,7 +575,6 @@ nat64_out2in_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat64_out2in_node) = {
|
||||
.function = nat64_out2in_node_fn,
|
||||
.name = "nat64-out2in",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat64_out2in_trace,
|
||||
@@ -595,8 +592,6 @@ VLIB_REGISTER_NODE (nat64_out2in_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat64_out2in_node, nat64_out2in_node_fn);
|
||||
|
||||
typedef struct nat64_out2in_frag_set_ctx_t_
|
||||
{
|
||||
vlib_main_t *vm;
|
||||
@@ -695,9 +690,9 @@ nat64_out2in_frag_set_cb (ip4_header_t * ip4, ip6_header_t * ip6, void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uword
|
||||
nat64_out2in_reass_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat64_out2in_reass_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
nat64_out2in_next_t next_index;
|
||||
@@ -916,10 +911,10 @@ nat64_out2in_reass_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, nat64_out2in_reass_node.index,
|
||||
vlib_node_increment_counter (vm, nm->out2in_reass_node_index,
|
||||
NAT64_OUT2IN_ERROR_PROCESSED_FRAGMENTS,
|
||||
pkts_processed);
|
||||
vlib_node_increment_counter (vm, nat64_out2in_reass_node.index,
|
||||
vlib_node_increment_counter (vm, nm->out2in_reass_node_index,
|
||||
NAT64_OUT2IN_ERROR_CACHED_FRAGMENTS,
|
||||
cached_fragments);
|
||||
|
||||
@@ -934,7 +929,6 @@ nat64_out2in_reass_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat64_out2in_reass_node) = {
|
||||
.function = nat64_out2in_reass_node_fn,
|
||||
.name = "nat64-out2in-reass",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat64_out2in_reass_trace,
|
||||
@@ -952,9 +946,6 @@ VLIB_REGISTER_NODE (nat64_out2in_reass_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat64_out2in_reass_node,
|
||||
nat64_out2in_reass_node_fn);
|
||||
|
||||
#define foreach_nat64_out2in_handoff_error \
|
||||
_(CONGESTION_DROP, "congestion drop") \
|
||||
_(SAME_WORKER, "same worker") \
|
||||
@@ -993,9 +984,9 @@ format_nat64_out2in_handoff_trace (u8 * s, va_list * args)
|
||||
return s;
|
||||
}
|
||||
|
||||
static inline uword
|
||||
nat64_out2in_handoff_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat64_out2in_handoff_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
nat64_main_t *nm = &nat64_main;
|
||||
vlib_buffer_t *bufs[VLIB_FRAME_SIZE], **b;
|
||||
@@ -1060,7 +1051,6 @@ nat64_out2in_handoff_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat64_out2in_handoff_node) = {
|
||||
.function = nat64_out2in_handoff_node_fn,
|
||||
.name = "nat64-out2in-handoff",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat64_out2in_handoff_trace,
|
||||
@@ -1076,8 +1066,6 @@ VLIB_REGISTER_NODE (nat64_out2in_handoff_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat64_out2in_handoff_node,
|
||||
nat64_out2in_handoff_node_fn);
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
@@ -40,12 +40,19 @@ VNET_FEATURE_INIT (nat66_out2in, static) = {
|
||||
|
||||
|
||||
void
|
||||
nat66_init (void)
|
||||
nat66_init (vlib_main_t * vm)
|
||||
{
|
||||
nat66_main_t *nm = &nat66_main;
|
||||
vlib_node_t *node;
|
||||
u32 static_mapping_buckets = 1024;
|
||||
uword static_mapping_memory_size = 64 << 20;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat66-in2out");
|
||||
nm->in2out_node_index = node->index;
|
||||
|
||||
node = vlib_get_node_by_name (vm, (u8 *) "nat66-out2in");
|
||||
nm->out2in_node_index = node->index;
|
||||
|
||||
clib_bihash_init_24_8 (&nm->sm_l, "nat66-static-map-by-local",
|
||||
static_mapping_buckets, static_mapping_memory_size);
|
||||
clib_bihash_init_24_8 (&nm->sm_e, "nat66-static-map-by-external",
|
||||
|
||||
@@ -55,6 +55,9 @@ typedef struct
|
||||
clib_bihash_24_8_t sm_e;
|
||||
/** Session counters */
|
||||
vlib_combined_counter_main_t session_counters;
|
||||
/** node index **/
|
||||
u32 in2out_node_index;
|
||||
u32 out2in_node_index;
|
||||
|
||||
u32 outside_vrf_id;
|
||||
u32 outside_fib_index;
|
||||
@@ -64,7 +67,7 @@ extern nat66_main_t nat66_main;
|
||||
extern vlib_node_registration_t nat66_in2out_node;
|
||||
extern vlib_node_registration_t nat66_out2in_node;
|
||||
|
||||
void nat66_init (void);
|
||||
void nat66_init (vlib_main_t * vm);
|
||||
typedef int (*nat66_interface_walk_fn_t) (snat_interface_t * i, void *ctx);
|
||||
void nat66_interfaces_walk (nat66_interface_walk_fn_t fn, void *ctx);
|
||||
int nat66_interface_add_del (u32 sw_if_index, u8 is_inside, u8 is_add);
|
||||
|
||||
@@ -41,8 +41,6 @@ format_nat66_in2out_trace (u8 * s, va_list * args)
|
||||
return s;
|
||||
}
|
||||
|
||||
vlib_node_registration_t nat66_in2out_node;
|
||||
|
||||
#define foreach_nat66_in2out_error \
|
||||
_(IN2OUT_PACKETS, "good in2out packets processed") \
|
||||
_(NO_TRANSLATION, "no translation") \
|
||||
@@ -109,9 +107,9 @@ nat66_not_translate (u32 rx_fib_index, ip6_address_t ip6_addr)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline uword
|
||||
nat66_in2out_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat66_in2out_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
nat66_in2out_next_t next_index;
|
||||
@@ -232,7 +230,7 @@ nat66_in2out_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, nat66_in2out_node.index,
|
||||
vlib_node_increment_counter (vm, nm->in2out_node_index,
|
||||
NAT66_IN2OUT_ERROR_IN2OUT_PACKETS,
|
||||
pkts_processed);
|
||||
return frame->n_vectors;
|
||||
@@ -240,7 +238,6 @@ nat66_in2out_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat66_in2out_node) = {
|
||||
.function = nat66_in2out_node_fn,
|
||||
.name = "nat66-in2out",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat66_in2out_trace,
|
||||
@@ -256,8 +253,6 @@ VLIB_REGISTER_NODE (nat66_in2out_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat66_in2out_node, nat66_in2out_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
@@ -41,8 +41,6 @@ format_nat66_out2in_trace (u8 * s, va_list * args)
|
||||
return s;
|
||||
}
|
||||
|
||||
vlib_node_registration_t nat66_out2in_node;
|
||||
|
||||
#define foreach_nat66_out2in_error \
|
||||
_(OUT2IN_PACKETS, "good out2in packets processed") \
|
||||
_(NO_TRANSLATION, "no translation") \
|
||||
@@ -69,9 +67,9 @@ typedef enum
|
||||
NAT66_OUT2IN_N_NEXT,
|
||||
} nat66_out2in_next_t;
|
||||
|
||||
static inline uword
|
||||
nat66_out2in_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat66_out2in_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
nat66_out2in_next_t next_index;
|
||||
@@ -190,7 +188,7 @@ nat66_out2in_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, nat66_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, nm->out2in_node_index,
|
||||
NAT66_OUT2IN_ERROR_OUT2IN_PACKETS,
|
||||
pkts_processed);
|
||||
return frame->n_vectors;
|
||||
@@ -198,7 +196,6 @@ nat66_out2in_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat66_out2in_node) = {
|
||||
.function = nat66_out2in_node_fn,
|
||||
.name = "nat66-out2in",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat66_out2in_trace,
|
||||
@@ -214,8 +211,6 @@ VLIB_REGISTER_NODE (nat66_out2in_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat66_out2in_node, nat66_out2in_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
@@ -63,8 +63,6 @@ static char *nat_det_in2out_error_strings[] = {
|
||||
#undef _
|
||||
};
|
||||
|
||||
vlib_node_registration_t snat_det_in2out_node;
|
||||
|
||||
static u8 *
|
||||
format_nat_det_in2out_trace (u8 * s, va_list * args)
|
||||
{
|
||||
@@ -78,6 +76,7 @@ format_nat_det_in2out_trace (u8 * s, va_list * args)
|
||||
return s;
|
||||
}
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
/**
|
||||
* Get address and port values to be used for ICMP packet translation
|
||||
* and create session if needed
|
||||
@@ -242,10 +241,11 @@ out:
|
||||
*(snat_det_map_t **) e = dm0;
|
||||
return next0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static uword
|
||||
snat_det_in2out_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_det_in2out_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
nat_det_in2out_next_t next_index;
|
||||
@@ -849,7 +849,7 @@ snat_det_in2out_node_fn (vlib_main_t * vm,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, snat_det_in2out_node.index,
|
||||
vlib_node_increment_counter (vm, sm->det_in2out_node_index,
|
||||
NAT_DET_IN2OUT_ERROR_IN2OUT_PACKETS,
|
||||
pkts_processed);
|
||||
return frame->n_vectors;
|
||||
@@ -857,7 +857,6 @@ snat_det_in2out_node_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_det_in2out_node) = {
|
||||
.function = snat_det_in2out_node_fn,
|
||||
.name = "nat44-det-in2out",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat_det_in2out_trace,
|
||||
@@ -874,8 +873,6 @@ VLIB_REGISTER_NODE (snat_det_in2out_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_det_in2out_node, snat_det_in2out_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
@@ -62,8 +62,6 @@ static char *nat_det_out2in_error_strings[] = {
|
||||
#undef _
|
||||
};
|
||||
|
||||
vlib_node_registration_t snat_det_out2in_node;
|
||||
|
||||
static u8 *
|
||||
format_nat_det_out2in_trace (u8 * s, va_list * args)
|
||||
{
|
||||
@@ -78,6 +76,7 @@ format_nat_det_out2in_trace (u8 * s, va_list * args)
|
||||
return s;
|
||||
}
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
/**
|
||||
* Get address and port values to be used for ICMP packet translation
|
||||
* and create session if needed
|
||||
@@ -217,10 +216,11 @@ out:
|
||||
*(snat_det_map_t **) e = dm0;
|
||||
return next0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static uword
|
||||
snat_det_out2in_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_det_out2in_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
nat_det_out2in_next_t next_index;
|
||||
@@ -680,7 +680,7 @@ snat_det_out2in_node_fn (vlib_main_t * vm,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, snat_det_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, sm->det_out2in_node_index,
|
||||
NAT_DET_OUT2IN_ERROR_OUT2IN_PACKETS,
|
||||
pkts_processed);
|
||||
return frame->n_vectors;
|
||||
@@ -688,7 +688,6 @@ snat_det_out2in_node_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_det_out2in_node) = {
|
||||
.function = snat_det_out2in_node_fn,
|
||||
.name = "nat44-det-out2in",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat_det_out2in_trace,
|
||||
@@ -706,8 +705,6 @@ VLIB_REGISTER_NODE (snat_det_out2in_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_det_out2in_node, snat_det_out2in_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
+26
-34
@@ -69,10 +69,6 @@ format_snat_out2in_fast_trace (u8 * s, va_list * args)
|
||||
return s;
|
||||
}
|
||||
|
||||
vlib_node_registration_t snat_out2in_node;
|
||||
vlib_node_registration_t snat_out2in_fast_node;
|
||||
vlib_node_registration_t nat44_out2in_reass_node;
|
||||
|
||||
#define foreach_snat_out2in_error \
|
||||
_(UNSUPPORTED_PROTOCOL, "unsupported protocol") \
|
||||
_(OUT2IN_PACKETS, "good out2in packets processed") \
|
||||
@@ -114,6 +110,7 @@ typedef enum
|
||||
SNAT_OUT2IN_N_NEXT,
|
||||
} snat_out2in_next_t;
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
int
|
||||
nat44_o2i_is_idle_session_cb (clib_bihash_kv_8_8_t * kv, void *arg)
|
||||
{
|
||||
@@ -156,6 +153,7 @@ nat44_o2i_is_idle_session_cb (clib_bihash_kv_8_8_t * kv, void *arg)
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Create session for static mapping.
|
||||
@@ -297,6 +295,7 @@ static_always_inline
|
||||
return -1; /* success */
|
||||
}
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
/**
|
||||
* Get address and port values to be used for ICMP packet translation
|
||||
* and create session if needed
|
||||
@@ -425,7 +424,9 @@ out:
|
||||
*(snat_session_t **) d = s0;
|
||||
return next0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
/**
|
||||
* Get address and port values to be used for ICMP packet translation
|
||||
*
|
||||
@@ -499,7 +500,9 @@ out2:
|
||||
*p_dont_translate = dont_translate;
|
||||
return next0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
u32
|
||||
icmp_out2in (snat_main_t * sm,
|
||||
vlib_buffer_t * b0,
|
||||
@@ -629,7 +632,7 @@ icmp_out2in (snat_main_t * sm,
|
||||
out:
|
||||
return next0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static inline u32
|
||||
icmp_out2in_slow_path (snat_main_t * sm,
|
||||
@@ -688,9 +691,9 @@ nat_out2in_sm_unknown_proto (snat_main_t * sm,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uword
|
||||
snat_out2in_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_out2in_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
snat_out2in_next_t next_index;
|
||||
@@ -1305,19 +1308,19 @@ snat_out2in_node_fn (vlib_main_t * vm,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, snat_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, sm->out2in_node_index,
|
||||
SNAT_OUT2IN_ERROR_OUT2IN_PACKETS,
|
||||
pkts_processed);
|
||||
vlib_node_increment_counter (vm, snat_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, sm->out2in_node_index,
|
||||
SNAT_OUT2IN_ERROR_TCP_PACKETS, tcp_packets);
|
||||
vlib_node_increment_counter (vm, snat_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, sm->out2in_node_index,
|
||||
SNAT_OUT2IN_ERROR_UDP_PACKETS, udp_packets);
|
||||
vlib_node_increment_counter (vm, snat_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, sm->out2in_node_index,
|
||||
SNAT_OUT2IN_ERROR_ICMP_PACKETS, icmp_packets);
|
||||
vlib_node_increment_counter (vm, snat_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, sm->out2in_node_index,
|
||||
SNAT_OUT2IN_ERROR_OTHER_PACKETS,
|
||||
other_packets);
|
||||
vlib_node_increment_counter (vm, snat_out2in_node.index,
|
||||
vlib_node_increment_counter (vm, sm->out2in_node_index,
|
||||
SNAT_OUT2IN_ERROR_FRAGMENTS, fragments);
|
||||
|
||||
return frame->n_vectors;
|
||||
@@ -1325,7 +1328,6 @@ snat_out2in_node_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_out2in_node) = {
|
||||
.function = snat_out2in_node_fn,
|
||||
.name = "nat44-out2in",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_snat_out2in_trace,
|
||||
@@ -1348,11 +1350,9 @@ VLIB_REGISTER_NODE (snat_out2in_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_out2in_node, snat_out2in_node_fn);
|
||||
|
||||
static uword
|
||||
nat44_out2in_reass_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_out2in_reass_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
snat_out2in_next_t next_index;
|
||||
@@ -1645,10 +1645,10 @@ nat44_out2in_reass_node_fn (vlib_main_t * vm,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, nat44_out2in_reass_node.index,
|
||||
vlib_node_increment_counter (vm, sm->out2in_reass_node_index,
|
||||
SNAT_OUT2IN_ERROR_PROCESSED_FRAGMENTS,
|
||||
pkts_processed);
|
||||
vlib_node_increment_counter (vm, nat44_out2in_reass_node.index,
|
||||
vlib_node_increment_counter (vm, sm->out2in_reass_node_index,
|
||||
SNAT_OUT2IN_ERROR_CACHED_FRAGMENTS,
|
||||
cached_fragments);
|
||||
|
||||
@@ -1663,7 +1663,6 @@ nat44_out2in_reass_node_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_out2in_reass_node) = {
|
||||
.function = nat44_out2in_reass_node_fn,
|
||||
.name = "nat44-out2in-reass",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_reass_trace,
|
||||
@@ -1684,12 +1683,9 @@ VLIB_REGISTER_NODE (nat44_out2in_reass_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_out2in_reass_node,
|
||||
nat44_out2in_reass_node_fn);
|
||||
|
||||
static uword
|
||||
snat_out2in_fast_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node, vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (snat_out2in_fast_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
snat_out2in_next_t next_index;
|
||||
@@ -1847,7 +1843,7 @@ snat_out2in_fast_node_fn (vlib_main_t * vm,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, snat_out2in_fast_node.index,
|
||||
vlib_node_increment_counter (vm, sm->out2in_fast_node_index,
|
||||
SNAT_OUT2IN_ERROR_OUT2IN_PACKETS,
|
||||
pkts_processed);
|
||||
return frame->n_vectors;
|
||||
@@ -1855,7 +1851,6 @@ snat_out2in_fast_node_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (snat_out2in_fast_node) = {
|
||||
.function = snat_out2in_fast_node_fn,
|
||||
.name = "nat44-out2in-fast",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_snat_out2in_fast_trace,
|
||||
@@ -1878,9 +1873,6 @@ VLIB_REGISTER_NODE (snat_out2in_fast_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (snat_out2in_fast_node,
|
||||
snat_out2in_fast_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
+16
-31
@@ -83,10 +83,6 @@ typedef struct
|
||||
u32 is_slow_path;
|
||||
} nat44_ed_out2in_trace_t;
|
||||
|
||||
vlib_node_registration_t nat44_ed_out2in_node;
|
||||
vlib_node_registration_t nat44_ed_out2in_slowpath_node;
|
||||
vlib_node_registration_t nat44_ed_out2in_reass_node;
|
||||
|
||||
static u8 *
|
||||
format_nat44_ed_out2in_trace (u8 * s, va_list * args)
|
||||
{
|
||||
@@ -127,6 +123,7 @@ icmp_out2in_ed_slow_path (snat_main_t * sm, vlib_buffer_t * b0,
|
||||
return next0;
|
||||
}
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
int
|
||||
nat44_o2i_ed_is_idle_session_cb (clib_bihash_kv_16_8_t * kv, void *arg)
|
||||
{
|
||||
@@ -218,6 +215,7 @@ nat44_o2i_ed_is_idle_session_cb (clib_bihash_kv_16_8_t * kv, void *arg)
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static snat_session_t *
|
||||
create_session_for_static_mapping_ed (snat_main_t * sm,
|
||||
@@ -490,6 +488,7 @@ create_bypass_for_fwd (snat_main_t * sm, ip4_header_t * ip, u32 rx_fib_index,
|
||||
nat44_session_update_lru (sm, s, thread_index);
|
||||
}
|
||||
|
||||
#ifndef CLIB_MARCH_VARIANT
|
||||
u32
|
||||
icmp_match_out2in_ed (snat_main_t * sm, vlib_node_runtime_t * node,
|
||||
u32 thread_index, vlib_buffer_t * b, ip4_header_t * ip,
|
||||
@@ -605,6 +604,7 @@ out:
|
||||
*(snat_session_t **) d = s;
|
||||
return next;
|
||||
}
|
||||
#endif
|
||||
|
||||
static snat_session_t *
|
||||
nat44_ed_out2in_unknown_proto (snat_main_t * sm,
|
||||
@@ -724,8 +724,8 @@ nat44_ed_out2in_node_fn_inline (vlib_main_t * vm,
|
||||
u32 tcp_packets = 0, udp_packets = 0, icmp_packets = 0, other_packets =
|
||||
0, fragments = 0;
|
||||
|
||||
stats_node_index = is_slow_path ? nat44_ed_out2in_slowpath_node.index :
|
||||
nat44_ed_out2in_node.index;
|
||||
stats_node_index = is_slow_path ? sm->ed_out2in_slowpath_node_index :
|
||||
sm->ed_out2in_node_index;
|
||||
|
||||
from = vlib_frame_vector_args (frame);
|
||||
n_left_from = frame->n_vectors;
|
||||
@@ -1545,17 +1545,15 @@ nat44_ed_out2in_node_fn_inline (vlib_main_t * vm,
|
||||
return frame->n_vectors;
|
||||
}
|
||||
|
||||
static uword
|
||||
nat44_ed_out2in_fast_path_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_out2in_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_ed_out2in_node_fn_inline (vm, node, frame, 0);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_out2in_node) = {
|
||||
.function = nat44_ed_out2in_fast_path_fn,
|
||||
.name = "nat44-ed-out2in",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_ed_out2in_trace,
|
||||
@@ -1575,20 +1573,15 @@ VLIB_REGISTER_NODE (nat44_ed_out2in_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_out2in_node,
|
||||
nat44_ed_out2in_fast_path_fn);
|
||||
|
||||
static uword
|
||||
nat44_ed_out2in_slow_path_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_out2in_slowpath_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
return nat44_ed_out2in_node_fn_inline (vm, node, frame, 1);
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_out2in_slowpath_node) = {
|
||||
.function = nat44_ed_out2in_slow_path_fn,
|
||||
.name = "nat44-ed-out2in-slowpath",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_ed_out2in_trace,
|
||||
@@ -1608,13 +1601,9 @@ VLIB_REGISTER_NODE (nat44_ed_out2in_slowpath_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_out2in_slowpath_node,
|
||||
nat44_ed_out2in_slow_path_fn);
|
||||
|
||||
static uword
|
||||
nat44_ed_out2in_reass_node_fn (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
VLIB_NODE_FN (nat44_ed_out2in_reass_node) (vlib_main_t * vm,
|
||||
vlib_node_runtime_t * node,
|
||||
vlib_frame_t * frame)
|
||||
{
|
||||
u32 n_left_from, *from, *to_next;
|
||||
nat44_ed_out2in_next_t next_index;
|
||||
@@ -1951,7 +1940,7 @@ nat44_ed_out2in_reass_node_fn (vlib_main_t * vm,
|
||||
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
|
||||
}
|
||||
|
||||
vlib_node_increment_counter (vm, nat44_ed_out2in_reass_node.index,
|
||||
vlib_node_increment_counter (vm, sm->ed_out2in_reass_node_index,
|
||||
NAT_OUT2IN_ED_ERROR_OUT2IN_PACKETS,
|
||||
pkts_processed);
|
||||
|
||||
@@ -1966,7 +1955,6 @@ nat44_ed_out2in_reass_node_fn (vlib_main_t * vm,
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
VLIB_REGISTER_NODE (nat44_ed_out2in_reass_node) = {
|
||||
.function = nat44_ed_out2in_reass_node_fn,
|
||||
.name = "nat44-ed-out2in-reass",
|
||||
.vector_size = sizeof (u32),
|
||||
.format_trace = format_nat44_reass_trace,
|
||||
@@ -1985,9 +1973,6 @@ VLIB_REGISTER_NODE (nat44_ed_out2in_reass_node) = {
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_out2in_reass_node,
|
||||
nat44_ed_out2in_reass_node_fn);
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: ON
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user