Distributed Virtual Router Support
[vpp.git] / src / vnet / dpo / dpo.h
index 5aa4e2d..d1309c1 100644 (file)
@@ -59,14 +59,10 @@ typedef u32 index_t;
  */
 typedef enum dpo_proto_t_
 {
-#if CLIB_DEBUG > 0
-    DPO_PROTO_IP4 = 1,
-#else
     DPO_PROTO_IP4 = 0,
-#endif
     DPO_PROTO_IP6,
-    DPO_PROTO_ETHERNET,
     DPO_PROTO_MPLS,
+    DPO_PROTO_ETHERNET,
     DPO_PROTO_NSH,
 } __attribute__((packed)) dpo_proto_t;
 
@@ -116,7 +112,9 @@ typedef enum dpo_type_t_ {
     DPO_MPLS_LABEL,
     DPO_MPLS_DISPOSITION,
     DPO_MFIB_ENTRY,
-    DPO_INTERFACE,
+    DPO_INTERFACE_RX,
+    DPO_INTERFACE_TX,
+    DPO_L2_BRIDGE,
     DPO_LAST,
 } __attribute__((packed)) dpo_type_t;
 
@@ -142,7 +140,9 @@ 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",   \
+    [DPO_L2_BRIDGE] = "dpo-l2-bridge"  \
 }
 
 /**
@@ -272,6 +272,11 @@ extern u8 *format_dpo_type(u8 * s, va_list * args);
  */
 extern u8 *format_dpo_proto(u8 * s, va_list * args);
 
+/**
+ * @brief format a DPO protocol
+ */
+extern vnet_link_t dpo_proto_to_link(dpo_proto_t dp);
+
 /**
  * @brief
  *  Set and stack a DPO.
@@ -330,6 +335,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
  */
@@ -351,6 +362,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;