DVR: Control the reinject as L2 or L3 based on the output interface type
[vpp.git] / src / vnet / dpo / dvr_dpo.h
index 669c492..4fef281 100644 (file)
 
 #include <vnet/dpo/dpo.h>
 
+/**
+ * Control how the reinject is performed
+ */
+typedef enum dvr_dpo_reinject_t_
+{
+    DVR_REINJECT_L2,
+    DVR_REINJECT_L3,
+} __clib_packed dvr_dpo_reinject_t;
+
 /**
  * @brief
  * The DVR DPO. Used as the resolving object for a DVR route.
@@ -39,12 +48,20 @@ typedef struct dvr_dpo_t_
      */
     dpo_proto_t dd_proto;
 
+    /**
+     * Control for how the re-inject is performed
+     */
+    dvr_dpo_reinject_t dd_reinject;
+
     /**
      * number of locks.
      */
     u16 dd_locks;
 } dvr_dpo_t;
 
+/* 8 bytes is a factor of cache line size so this struct will never span */
+STATIC_ASSERT_SIZEOF(dvr_dpo_t, 8);
+
 extern void dvr_dpo_add_or_lock (u32 sw_if_index,
                                  dpo_proto_t dproto,
                                  dpo_id_t *dpo);