From 43161a873375ddf156cf6fbe8764bfc206b38fa0 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Sat, 12 Aug 2017 02:12:00 -0700 Subject: 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 --- src/vnet/dpo/dpo.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/vnet/dpo/dpo.h') diff --git a/src/vnet/dpo/dpo.h b/src/vnet/dpo/dpo.h index 42fc51d4b6c..33562968272 100644 --- a/src/vnet/dpo/dpo.h +++ b/src/vnet/dpo/dpo.h @@ -112,7 +112,8 @@ typedef enum dpo_type_t_ { DPO_MPLS_LABEL, DPO_MPLS_DISPOSITION, DPO_MFIB_ENTRY, - DPO_INTERFACE, + DPO_INTERFACE_RX, + DPO_INTERFACE_TX, DPO_LAST, } __attribute__((packed)) dpo_type_t; @@ -138,7 +139,8 @@ typedef enum dpo_type_t_ { [DPO_MPLS_LABEL] = "dpo-mpls-label", \ [DPO_MPLS_DISPOSITION] = "dpo-mpls-diposition", \ [DPO_MFIB_ENTRY] = "dpo-mfib_entry", \ - [DPO_INTERFACE] = "dpo-interface" \ + [DPO_INTERFACE_RX] = "dpo-interface-rx", \ + [DPO_INTERFACE_TX] = "dpo-interface-tx" \ } /** @@ -331,6 +333,12 @@ typedef void (*dpo_unlock_fn_t)(dpo_id_t *dpo); */ typedef void (*dpo_mem_show_t)(void); +/** + * @brief Given a DPO instance return a vector of node indices that + * the type/instance will use. + */ +typedef u32* (*dpo_get_next_node_t)(const dpo_id_t *dpo); + /** * @brief A virtual function table regisitered for a DPO type */ @@ -352,6 +360,13 @@ typedef struct dpo_vft_t_ * A show memory usage function */ dpo_mem_show_t dv_mem_show; + /** + * A function to get the next VLIB node given an instance + * of the DPO. If this is null, then the node's name MUST be + * retreiveable from the nodes names array passed in the register + * function + */ + dpo_get_next_node_t dv_get_next_node; } dpo_vft_t; -- cgit 1.2.3-korg