Move CLI examples from wiki to code - VPP-165
[vpp.git] / vnet / vnet / ip / ip4_forward.c
index 8113cd7..751260a 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)
@@ -3229,6 +3245,20 @@ add_del_interface_table (vlib_main_t * vm,
   return error;
 }
 
+/*?
+ * Place the indicated interface into the supplied VRF
+ *
+ * @cliexpar
+ * @cliexstart{set interface ip table}
+ *
+ *  vpp# set interface ip table GigabitEthernet2/0/0 2
+ *
+ * Interface addresses added after setting the interface IP table end up in the indicated VRF table.
+ * Predictable but potentially counter-intuitive results occur if you provision interface addresses in multiple FIBs.
+ * Upon RX, packets will be processed in the last IP table ID provisioned.
+ * It might be marginally useful to evade source RPF drops to put an interface address into multiple FIBs.
+ * @cliexend
+ ?*/
 VLIB_CLI_COMMAND (set_interface_ip_table_command, static) = {
   .path = "set interface ip table",
   .function = add_del_interface_table,