diff options
author | Nathan Skrzypczak <nathan.skrzypczak@gmail.com> | 2021-02-26 18:12:20 +0100 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2021-03-04 12:35:15 +0000 |
commit | 8786a4cd4a62f2817da7060afd8523857f504912 (patch) | |
tree | e191304d55a70370bae6a869cbfb7de0c7f7a0cd /src/plugins/cnat/cnat_node_snat.c | |
parent | 30ad571cc35e4dc6d4d7e50b81b97f83f8770eea (diff) |
cnat: Fix snat with dhcp
Type: fix
We didn't check that the srcEndpoint was resolved
when creating the session, we could end up sNATing
with 0.0.0.0 as src_addr
Change-Id: If8dfa577e659cfe90b148657a44c0390a7d383e9
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
Diffstat (limited to 'src/plugins/cnat/cnat_node_snat.c')
-rw-r--r-- | src/plugins/cnat/cnat_node_snat.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/plugins/cnat/cnat_node_snat.c b/src/plugins/cnat/cnat_node_snat.c index ef784a6c103..5cc84c42ccd 100644 --- a/src/plugins/cnat/cnat_node_snat.c +++ b/src/plugins/cnat/cnat_node_snat.c @@ -64,12 +64,9 @@ cnat_snat_node_fn (vlib_main_t *vm, vlib_node_runtime_t *node, vnet_feature_next (&arc_next0, b); next0 = arc_next0; - if (iproto != IP_PROTOCOL_UDP && iproto != IP_PROTOCOL_TCP - && iproto != IP_PROTOCOL_ICMP && iproto != IP_PROTOCOL_ICMP6) - { - /* Dont translate */ - goto trace; - } + /* Wrong session key */ + if (session->key.cs_proto == 0) + goto trace; if (!session_not_found) { @@ -96,6 +93,8 @@ cnat_snat_node_fn (vlib_main_t *vm, vlib_node_runtime_t *node, a VIP) */ if (AF_IP4 == ctx->af) { + if (!(cm->snat_ip4.ce_flags & CNAT_EP_FLAG_RESOLVED)) + goto trace; ip46_address_set_ip4 (&session->value.cs_ip[VLIB_RX], &ip_addr_v4 (&cm->snat_ip4.ce_ip)); ip46_address_set_ip4 (&session->value.cs_ip[VLIB_TX], @@ -103,6 +102,8 @@ cnat_snat_node_fn (vlib_main_t *vm, vlib_node_runtime_t *node, } else { + if (!(cm->snat_ip6.ce_flags & CNAT_EP_FLAG_RESOLVED)) + goto trace; ip46_address_set_ip6 (&session->value.cs_ip[VLIB_RX], &ip_addr_v6 (&cm->snat_ip6.ce_ip)); ip46_address_set_ip6 (&session->value.cs_ip[VLIB_TX], |