diff options
author | Ole Troan <ot@cisco.com> | 2018-08-16 22:08:49 +0200 |
---|---|---|
committer | John Lo <loj@cisco.com> | 2018-08-17 21:38:47 +0000 |
commit | b3655e5592e3e8e48eb087632f3fa71915891a9f (patch) | |
tree | 9d73bb5fa359ed1a5c27f20d829494e2c302310a /src/vnet/ip | |
parent | ee4efa7c39c914eb908e7fd629b18585cfa70b4a (diff) |
VPP-1392: VXLAN fails with IP fragmentation
Not only is it wasteful to send all fragments back through ip4-lookup, but
it doesn't work with tunnel mechanisms that don't have IP enabled on their
payload side.
Change-Id: Ic92d95982dddaa70969a2a6ea2f98edec7614425
Signed-off-by: Ole Troan <ot@cisco.com>
Diffstat (limited to 'src/vnet/ip')
-rw-r--r-- | src/vnet/ip/ip4_forward.c | 2 | ||||
-rw-r--r-- | src/vnet/ip/ip6_forward.c | 2 | ||||
-rw-r--r-- | src/vnet/ip/ip_frag.c | 2 | ||||
-rw-r--r-- | src/vnet/ip/ip_frag.h | 2 |
4 files changed, 6 insertions, 2 deletions
diff --git a/src/vnet/ip/ip4_forward.c b/src/vnet/ip/ip4_forward.c index 358e666e9f4..48442a00b26 100644 --- a/src/vnet/ip/ip4_forward.c +++ b/src/vnet/ip/ip4_forward.c @@ -2116,7 +2116,7 @@ ip4_mtu_check (vlib_buffer_t * b, u16 packet_len, { /* IP fragmentation */ ip_frag_set_vnet_buffer (b, 0, adj_packet_bytes, - IP4_FRAG_NEXT_IP4_LOOKUP, 0); + IP4_FRAG_NEXT_IP4_REWRITE, 0); *next = IP4_REWRITE_NEXT_FRAGMENT; } } diff --git a/src/vnet/ip/ip6_forward.c b/src/vnet/ip/ip6_forward.c index efd5e0d106a..5abbba59617 100644 --- a/src/vnet/ip/ip6_forward.c +++ b/src/vnet/ip/ip6_forward.c @@ -1567,7 +1567,7 @@ ip6_mtu_check (vlib_buffer_t * b, u16 packet_bytes, { /* IP fragmentation */ ip_frag_set_vnet_buffer (b, 0, adj_packet_bytes, - IP6_FRAG_NEXT_IP6_LOOKUP, 0); + IP6_FRAG_NEXT_IP6_REWRITE, 0); *next = IP6_REWRITE_NEXT_FRAGMENT; } else diff --git a/src/vnet/ip/ip_frag.c b/src/vnet/ip/ip_frag.c index 630948723cd..eb9bb4a5ebc 100644 --- a/src/vnet/ip/ip_frag.c +++ b/src/vnet/ip/ip_frag.c @@ -602,6 +602,7 @@ VLIB_REGISTER_NODE (ip4_frag_node) = { .n_next_nodes = IP4_FRAG_N_NEXT, .next_nodes = { + [IP4_FRAG_NEXT_IP4_REWRITE] = "ip4-rewrite", [IP4_FRAG_NEXT_IP4_LOOKUP] = "ip4-lookup", [IP4_FRAG_NEXT_IP6_LOOKUP] = "ip6-lookup", [IP4_FRAG_NEXT_ICMP_ERROR] = "ip4-icmp-error", @@ -623,6 +624,7 @@ VLIB_REGISTER_NODE (ip6_frag_node) = { .n_next_nodes = IP6_FRAG_N_NEXT, .next_nodes = { + [IP6_FRAG_NEXT_IP6_REWRITE] = "ip6-rewrite", [IP6_FRAG_NEXT_IP4_LOOKUP] = "ip4-lookup", [IP6_FRAG_NEXT_IP6_LOOKUP] = "ip6-lookup", [IP6_FRAG_NEXT_DROP] = "ip6-drop" diff --git a/src/vnet/ip/ip_frag.h b/src/vnet/ip/ip_frag.h index 9d19299e2a5..ef5eb4c0543 100644 --- a/src/vnet/ip/ip_frag.h +++ b/src/vnet/ip/ip_frag.h @@ -48,6 +48,7 @@ extern vlib_node_registration_t ip6_frag_node; typedef enum { + IP4_FRAG_NEXT_IP4_REWRITE, IP4_FRAG_NEXT_IP4_LOOKUP, IP4_FRAG_NEXT_IP6_LOOKUP, IP4_FRAG_NEXT_ICMP_ERROR, @@ -59,6 +60,7 @@ typedef enum { IP6_FRAG_NEXT_IP4_LOOKUP, IP6_FRAG_NEXT_IP6_LOOKUP, + IP6_FRAG_NEXT_IP6_REWRITE, IP6_FRAG_NEXT_DROP, IP6_FRAG_N_NEXT } ip6_frag_next_t; |