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)
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)
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,