summaryrefslogtreecommitdiffstats
path: root/vnet
diff options
context:
space:
mode:
authorJohn Lo <loj@cisco.com>2016-06-02 09:28:37 -0400
committerDave Barach <openvpp@barachs.net>2016-06-02 14:16:05 +0000
commit3419d0b9c1f64c6f477601eeea6b0e5465a89dce (patch)
tree38bdcbeda2cc81d3229328dca6d2cb4b067d974e /vnet
parent079d86e8c8181aa5d7b5e8cd928b93fcd10d9e2c (diff)
VPP-100: Fix IPv4 local handling of IP fragmented packets
Before VPP is enhenced to do IP reassembly of local packets, just set the protocol path to "experimental" for now so they will be error-punted as unknow IP protocol. Change-Id: I2ffefb0b4205357653ba24d80c722cafd5972fba Signed-off-by: John Lo <loj@cisco.com>
Diffstat (limited to 'vnet')
-rw-r--r--vnet/vnet/ip/ip4_forward.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/vnet/vnet/ip/ip4_forward.c b/vnet/vnet/ip/ip4_forward.c
index ae2f9eea12a..5c2ac3828a1 100644
--- a/vnet/vnet/ip/ip4_forward.c
+++ b/vnet/vnet/ip/ip4_forward.c
@@ -1783,8 +1783,10 @@ ip4_local (vlib_main_t * vm,
leaf0 = ip4_fib_mtrie_lookup_step (mtrie0, leaf0, &ip0->src_address, 0);
leaf1 = ip4_fib_mtrie_lookup_step (mtrie1, leaf1, &ip1->src_address, 0);
- proto0 = ip0->protocol;
- proto1 = ip1->protocol;
+ /* Treat IP frag packets as "experimental" protocol for now
+ until support of IP frag reassembly is implemented */
+ proto0 = (ip0->flags_and_fragment_offset << 2) ? 0xfe : ip0->protocol;
+ proto1 = (ip1->flags_and_fragment_offset << 2) ? 0xfe : ip1->protocol;
is_udp0 = proto0 == IP_PROTOCOL_UDP;
is_udp1 = proto1 == IP_PROTOCOL_UDP;
is_tcp_udp0 = is_udp0 || proto0 == IP_PROTOCOL_TCP;
@@ -1976,7 +1978,9 @@ ip4_local (vlib_main_t * vm,
leaf0 = ip4_fib_mtrie_lookup_step (mtrie0, leaf0, &ip0->src_address, 0);
- proto0 = ip0->protocol;
+ /* Treat IP frag packets as "experimental" protocol for now
+ until support of IP frag reassembly is implemented */
+ proto0 = (ip0->flags_and_fragment_offset << 2) ? 0xfe : ip0->protocol;
is_udp0 = proto0 == IP_PROTOCOL_UDP;
is_tcp_udp0 = is_udp0 || proto0 == IP_PROTOCOL_TCP;