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
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;
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;
#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,
#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;
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (dslite_ce_decap_node, dslite_ce_decap_node_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
#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,
#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;
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (dslite_ce_encap_node, dslite_ce_encap_node_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
#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,
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);
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,
};
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (dslite_in2out_slowpath_node,
- dslite_in2out_slowpath_node_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
#include <nat/dslite.h>
#include <nat/nat_inlines.h>
-vlib_node_registration_t dslite_out2in_node;
-
typedef enum
{
DSLITE_OUT2IN_NEXT_IP4_LOOKUP,
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;
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;
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (dslite_out2in_node, dslite_out2in_node_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
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") \
return 0;
}
+#ifndef CLIB_MARCH_VARIANT
int
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,
return -1; /* success */
}
+#ifndef CLIB_MARCH_VARIANT
/**
* Get address and port values to be used for ICMP packet translation
* and create session if needed
*(snat_session_t **) d = s0;
return next0;
}
+#endif
+#ifndef CLIB_MARCH_VARIANT
/**
* Get address and port values to be used for ICMP packet translation
*
*p_dont_translate = dont_translate;
return next0;
}
+#endif
+#ifndef CLIB_MARCH_VARIANT
u32
icmp_in2out (snat_main_t * sm,
vlib_buffer_t * b0,
out:
return next0;
}
+#endif
static inline u32
icmp_in2out_slow_path (snat_main_t * sm,
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;
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);
/* *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,
};
/* *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);
/* *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,
};
/* *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);
/* *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,
};
/* *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);
/* *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,
};
/* *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;
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);
/* *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,
};
/* *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;
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;
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (snat_in2out_fast_node,
- snat_in2out_fast_static_map_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
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)
{
return 0;
}
+#ifndef CLIB_MARCH_VARIANT
int
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,
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,
*(snat_session_t **) d = s;
return next;
}
+#endif
static snat_session_t *
nat44_ed_in2out_unknown_proto (snat_main_t * sm,
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;
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,
};
/* *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,
};
/* *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,
};
/* *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,
};
/* *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,
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);
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,
};
/* *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,
};
/* *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
*
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 ();
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)
{
dslite_init (vm);
- nat66_init ();
+ nat66_init (vm);
ip4_table_bind_callback_t cbt4 = {
.function = snat_ip4_table_bind,
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;
#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") \
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,
};
/* *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,
};
/* *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,
};
/* *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,
},
};
-VLIB_NODE_FUNCTION_MULTIARCH (nat44_handoff_classify_node,
- nat44_handoff_classify_node_fn);
/* *INDENT-ON* */
/*
#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
return 0;
}
+#ifndef CLIB_MARCH_VARIANT
int
snat_hairpinning (snat_main_t * sm,
vlib_buffer_t * b0,
}
return 0;
}
+#endif
+#ifndef CLIB_MARCH_VARIANT
u32
snat_icmp_hairpinning (snat_main_t * sm,
vlib_buffer_t * b0,
}
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)
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)
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,
}
}
}
+#endif
static inline uword
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;
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,
};
/* *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,
};
/* *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,
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;
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,
};
/* *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,
};
/* *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,
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;
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,
};
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_hairpin_src_node,
- nat44_ed_hairpin_src_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
};
-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)
{
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,
};
/* *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,
};
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (snat_out2in_worker_handoff_node,
- snat_out2in_worker_handoff_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
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;
/** 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;
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;
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") \
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;
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,
};
/* *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,
};
/* *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;
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;
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);
/* *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,
};
/* *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") \
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;
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (nat64_in2out_handoff_node,
- nat64_in2out_handoff_node_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
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") \
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 =
}
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;
/* *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,
};
/* *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;
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;
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);
/* *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,
};
/* *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") \
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;
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (nat64_out2in_handoff_node,
- nat64_out2in_handoff_node_fn);
/*
* fd.io coding-style-patch-verification: ON
*
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",
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;
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);
return s;
}
-vlib_node_registration_t nat66_in2out_node;
-
#define foreach_nat66_in2out_error \
_(IN2OUT_PACKETS, "good in2out packets processed") \
_(NO_TRANSLATION, "no translation") \
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;
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;
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (nat66_in2out_node, nat66_in2out_node_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
return s;
}
-vlib_node_registration_t nat66_out2in_node;
-
#define foreach_nat66_out2in_error \
_(OUT2IN_PACKETS, "good out2in packets processed") \
_(NO_TRANSLATION, "no translation") \
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;
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;
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (nat66_out2in_node, nat66_out2in_node_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
#undef _
};
-vlib_node_registration_t snat_det_in2out_node;
-
static u8 *
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
*(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;
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;
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (snat_det_in2out_node, snat_det_in2out_node_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
#undef _
};
-vlib_node_registration_t snat_det_out2in_node;
-
static u8 *
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
*(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;
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;
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (snat_det_out2in_node, snat_det_out2in_node_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
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") \
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)
{
return 0;
}
+#endif
/**
* @brief Create session for static mapping.
return -1; /* success */
}
+#ifndef CLIB_MARCH_VARIANT
/**
* Get address and port values to be used for ICMP packet translation
* and create session if needed
*(snat_session_t **) d = s0;
return next0;
}
+#endif
+#ifndef CLIB_MARCH_VARIANT
/**
* Get address and port values to be used for ICMP packet translation
*
*p_dont_translate = dont_translate;
return next0;
}
+#endif
+#ifndef CLIB_MARCH_VARIANT
u32
icmp_out2in (snat_main_t * sm,
vlib_buffer_t * b0,
out:
return next0;
}
-
+#endif
static inline u32
icmp_out2in_slow_path (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;
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;
/* *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,
};
/* *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;
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);
/* *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,
};
/* *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;
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;
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (snat_out2in_fast_node,
- snat_out2in_fast_node_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*
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)
{
return next0;
}
+#ifndef CLIB_MARCH_VARIANT
int
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,
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,
*(snat_session_t **) d = s;
return next;
}
+#endif
static snat_session_t *
nat44_ed_out2in_unknown_proto (snat_main_t * sm,
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;
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,
};
/* *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,
};
/* *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;
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);
/* *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,
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (nat44_ed_out2in_reass_node,
- nat44_ed_out2in_reass_node_fn);
-
/*
* fd.io coding-style-patch-verification: ON
*