Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
VPP-446: 1:1 SNAT Inside overlapping interfaces
[vpp.git]
/
plugins
/
snat-plugin
/
snat
/
out2in.c
diff --git
a/plugins/snat-plugin/snat/out2in.c
b/plugins/snat-plugin/snat/out2in.c
index
b3497c4
..
7601eb8
100644
(file)
--- a/
plugins/snat-plugin/snat/out2in.c
+++ b/
plugins/snat-plugin/snat/out2in.c
@@
-19,6
+19,7
@@
#include <vnet/ip/ip.h>
#include <vnet/ethernet/ethernet.h>
#include <vnet/ip/ip.h>
#include <vnet/ethernet/ethernet.h>
+#include <vnet/fib/ip4_fib.h>
#include <snat/snat.h>
#include <vppinfra/hash.h>
#include <snat/snat.h>
#include <vppinfra/hash.h>
@@
-778,7
+779,8
@@
static inline u32 icmp_out2in_fast (snat_main_t *sm,
icmp46_header_t * icmp0,
u32 sw_if_index0,
vlib_node_runtime_t * node,
icmp46_header_t * icmp0,
u32 sw_if_index0,
vlib_node_runtime_t * node,
- u32 next0)
+ u32 next0,
+ u32 rx_fib_index0)
{
snat_session_key_t key0, sm0;
icmp_echo_header_t *echo0;
{
snat_session_key_t key0, sm0;
icmp_echo_header_t *echo0;
@@
-791,6
+793,7
@@
static inline u32 icmp_out2in_fast (snat_main_t *sm,
key0.addr = ip0->dst_address;
key0.port = echo0->identifier;
key0.addr = ip0->dst_address;
key0.port = echo0->identifier;
+ key0.fib_index = rx_fib_index0;
if (snat_static_mapping_match(sm, key0, &sm0, 1))
{
if (snat_static_mapping_match(sm, key0, &sm0, 1))
{
@@
-879,6
+882,7
@@
snat_out2in_fast_node_fn (vlib_main_t * vm,
icmp46_header_t * icmp0;
snat_session_key_t key0, sm0;
u32 proto0;
icmp46_header_t * icmp0;
snat_session_key_t key0, sm0;
u32 proto0;
+ u32 rx_fib_index0;
/* speculatively enqueue b0 to the current next frame */
bi0 = from[0];
/* speculatively enqueue b0 to the current next frame */
bi0 = from[0];
@@
-896,6
+900,7
@@
snat_out2in_fast_node_fn (vlib_main_t * vm,
icmp0 = (icmp46_header_t *) udp0;
sw_if_index0 = vnet_buffer(b0)->sw_if_index[VLIB_RX];
icmp0 = (icmp46_header_t *) udp0;
sw_if_index0 = vnet_buffer(b0)->sw_if_index[VLIB_RX];
+ rx_fib_index0 = ip4_fib_table_get_index_for_sw_if_index(sw_if_index0);
vnet_get_config_data (&cm->config_main,
&b0->current_config_index,
vnet_get_config_data (&cm->config_main,
&b0->current_config_index,
@@
-915,12
+920,13
@@
snat_out2in_fast_node_fn (vlib_main_t * vm,
if (PREDICT_FALSE (proto0 == SNAT_PROTOCOL_ICMP))
{
next0 = icmp_out2in_fast
if (PREDICT_FALSE (proto0 == SNAT_PROTOCOL_ICMP))
{
next0 = icmp_out2in_fast
- (sm, b0, ip0, icmp0, sw_if_index0, node, next0);
+ (sm, b0, ip0, icmp0, sw_if_index0, node, next0
, rx_fib_index0
);
goto trace00;
}
key0.addr = ip0->dst_address;
key0.port = udp0->dst_port;
goto trace00;
}
key0.addr = ip0->dst_address;
key0.port = udp0->dst_port;
+ key0.fib_index = rx_fib_index0;
if (snat_static_mapping_match(sm, key0, &sm0, 1))
{
if (snat_static_mapping_match(sm, key0, &sm0, 1))
{