summaryrefslogtreecommitdiffstats
path: root/src/vnet/dpo/dpo.h
diff options
context:
space:
mode:
authorNeale Ranns <nranns@cisco.com>2017-08-12 02:12:00 -0700
committerNeale Ranns <nranns@cisco.com>2017-08-21 04:07:00 -0700
commit43161a873375ddf156cf6fbe8764bfc206b38fa0 (patch)
tree939e5455aaff68341d387b559f743dc049b03377 /src/vnet/dpo/dpo.h
parent352829f538783afe8609f09850f45536a4779b70 (diff)
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>
Diffstat (limited to 'src/vnet/dpo/dpo.h')
-rw-r--r--src/vnet/dpo/dpo.h19
1 files changed, 17 insertions, 2 deletions
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" \
}
/**
@@ -332,6 +334,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
*/
typedef struct dpo_vft_t_
@@ -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;