VPP-385: Fix ARP for indirect adjacencies 73/2673/1
authorFlorin Coras <fcoras@cisco.com>
Mon, 5 Sep 2016 17:54:17 +0000 (19:54 +0200)
committerFlorin Coras <florin.coras@gmail.com>
Tue, 6 Sep 2016 17:15:21 +0000 (17:15 +0000)
Change-Id: I48cffb8acbd9e6655d7ec661ee8f7e0689b12a2d
Signed-off-by: Florin Coras <fcoras@cisco.com>
vnet/vnet/ip/ip4_forward.c

index 4b019bc..dfd8a21 100644 (file)
@@ -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)