From 73bb1458f7e60b5b6b363cbaad64105a9d4a6da0 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Mon, 5 Sep 2016 19:54:17 +0200 Subject: VPP-385: Fix ARP for indirect adjacencies Change-Id: I48cffb8acbd9e6655d7ec661ee8f7e0689b12a2d Signed-off-by: Florin Coras --- vnet/vnet/ip/ip4_forward.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/vnet/vnet/ip/ip4_forward.c b/vnet/vnet/ip/ip4_forward.c index 4b019bce8de..dfd8a21b88c 100644 --- a/vnet/vnet/ip/ip4_forward.c +++ b/vnet/vnet/ip/ip4_forward.c @@ -884,6 +884,15 @@ ip4_lookup_inline (vlib_main_t * vm, vnet_buffer (p0)->ip.adj_index[VLIB_TX] = adj_index0; vnet_buffer (p1)->ip.adj_index[VLIB_TX] = adj_index1; + if (is_indirect) + { + /* ARP for next-hop not packet's destination address */ + if (adj0->lookup_next_index == IP_LOOKUP_NEXT_ARP) + ip0->dst_address.as_u32 = dst_addr0->as_u32; + if (adj1->lookup_next_index == IP_LOOKUP_NEXT_ARP) + ip1->dst_address.as_u32 = dst_addr1->as_u32; + } + vlib_increment_combined_counter (cm, cpu_index, adj_index0, 1, vlib_buffer_length_in_chain (vm, p0) @@ -1027,6 +1036,13 @@ ip4_lookup_inline (vlib_main_t * vm, vnet_buffer (p0)->ip.adj_index[VLIB_TX] = adj_index0; + if (is_indirect) + { + /* ARP for next-hop not packet's destination address */ + if (adj0->lookup_next_index == IP_LOOKUP_NEXT_ARP) + ip0->dst_address.as_u32 = dst_addr0->as_u32; + } + vlib_increment_combined_counter (cm, cpu_index, adj_index0, 1, vlib_buffer_length_in_chain (vm, p0) -- cgit 1.2.3-korg