Improve mechanism for using loopback interface as BVI for BDs 51/851/2
authorJohn Lo <[email protected]>
Sat, 23 Apr 2016 19:14:12 +0000 (15:14 -0400)
committerDave Barach <[email protected]>
Mon, 25 Apr 2016 12:58:41 +0000 (12:58 +0000)
commit405e41b50e336dccfdeeafae93bf4453774ecfec
tree021e77ef0458f1b2e814655d1d64a0b5b08f7613
parentd06b9f9cbf9402d66d26fc638a12b84ade197848
Improve mechanism for using loopback interface as BVI for BDs

When loopback interface is configured as BVI, instead of changing its
output node from loopN-output to l2-input, the loopN-output node is now
kept while its next tx node is changed from ethernet-input to l2-input.
The packet setup previously done in bvi_to_l2 as part of l2-input is now
performed in the loop output node.

This change adds an extra node in the BVI output path but provides the
following improvements:
1. IP address/route created on loopback prior to it being configured as
   BVI will still work properly. The requirement to (re)configure IP/route
   on loopback after it is configured as BVI is removed.
2. The output stats for loopback interfaces are always provided irrespective
   of their BVI configuration.
3. The loopback-BVI output stats can be batch updated outside the packet
   loop in output node, instead of per packet update in l2-input node,
   making l2-input node more efficient for BVI packets.
4. Restore original node property as implemented in node.c function
   vlib_node_add_next_with_slot() where next node indices stored in next
   slots of each node will remain unique.
5. Packet trace for BVI output includes loopN output node which provides
   useful packet data.

Change-Id: I7f5bc72ef953a367363a179088210596881f9e73
Signed-off-by: John Lo <[email protected]>
vlib/vlib/node.c
vnet/vnet/ethernet/interface.c
vnet/vnet/interface_funcs.h
vnet/vnet/l2/l2_bd.h
vnet/vnet/l2/l2_bvi.h
vnet/vnet/l2/l2_input.c
vnet/vnet/l2/l2_input.h