PPPoE usses a midchain adjacency stack on an interface-tx DPO
1) introduce an interface-tx DPO. This is a simple wrapper around a sw_if_index. enhance DPO stacking functions to allow per-instance next-nodes and hence allow children to stack onto the interface per-instance tx node and not on 'interface-output'.
2) update PPPoE code to use ta midchain stack on a interface-tx DPO of the encap-interface. This remove the need for pppoe_encap node (which is replaced by the adj-midchain-tx) and interface-output node is no longer used (see above). Since PPPoE encap node is no longer needed, the PPPoE seesion does not need to be retrieved in the data-path, hence the cahce misses are removed.
Change-Id: Id8b40f53daa14889a9c51d802e14fed7fba4399a
Signed-off-by: Neale Ranns <nranns@cisco.com>
diff --git a/src/vnet/fib/fib_test.c b/src/vnet/fib/fib_test.c
index 7ca4cb3..6867cca 100644
--- a/src/vnet/fib/fib_test.c
+++ b/src/vnet/fib/fib_test.c
@@ -25,7 +25,7 @@
#include <vnet/dpo/receive_dpo.h>
#include <vnet/dpo/ip_null_dpo.h>
#include <vnet/bfd/bfd_main.h>
-#include <vnet/dpo/interface_dpo.h>
+#include <vnet/dpo/interface_rx_dpo.h>
#include <vnet/dpo/replicate_dpo.h>
#include <vnet/mpls/mpls.h>
@@ -407,7 +407,7 @@
}
break;
case FT_REP_INTF:
- FIB_TEST_LB((DPO_INTERFACE == dpo->dpoi_type),
+ FIB_TEST_LB((DPO_INTERFACE_RX == dpo->dpoi_type),
"bucket %d stacks on %U",
bucket,
format_dpo_type, dpo->dpoi_type);
@@ -589,7 +589,7 @@
exp->adj.adj);
break;
case FT_LB_INTF:
- FIB_TEST_I((DPO_INTERFACE == dpo->dpoi_type),
+ FIB_TEST_I((DPO_INTERFACE_RX == dpo->dpoi_type),
"bucket %d stacks on %U",
bucket,
format_dpo_type, dpo->dpoi_type);
@@ -8523,7 +8523,7 @@
*/
dpo_id_t idpo = DPO_INVALID;
- interface_dpo_add_or_lock(DPO_PROTO_IP4,
+ interface_rx_dpo_add_or_lock(DPO_PROTO_IP4,
tm->hw[0]->sw_if_index,
&idpo);
@@ -8667,9 +8667,9 @@
FIB_TEST(lb_count == pool_elts(load_balance_pool),
"Load-balance resources freed %d of %d",
lb_count, pool_elts(load_balance_pool));
- FIB_TEST(0 == pool_elts(interface_dpo_pool),
- "interface_dpo resources freed %d of %d",
- 0, pool_elts(interface_dpo_pool));
+ FIB_TEST(0 == pool_elts(interface_rx_dpo_pool),
+ "interface_rx_dpo resources freed %d of %d",
+ 0, pool_elts(interface_rx_dpo_pool));
return (0);
}