L2 over LISP and GRE (VPP-457)
[vpp.git] / vnet / vnet / adj / adj_midchain.h
index adf86f1..ae414ae 100644 (file)
 
 #include <vnet/adj/adj.h>
 
+/**
+ * @brief Flags controlling the midchain adjacency
+ */
+typedef enum adj_midchain_flag_t_
+{
+    /**
+     * No flags
+     */
+    ADJ_MIDCHAIN_FLAG_NONE = 0,
+
+    /**
+     * Packets TX through the midchain do not increment the interface
+     * counters. This should be used when the adj is associated with an L2
+     * interface and that L2 interface is in a bridege domain. In that case
+     * the packet will have traversed the interface's TX node, and hence have
+     * been counted, before it traverses ths midchain
+     */
+    ADJ_MIDCHAIN_FLAG_NO_COUNT = (1 << 0),
+} adj_midchain_flag_t;
+
 /**
  * @brief
  *  Convert an existing neighbour adjacency into a midchain
@@ -39,7 +59,8 @@
  *  The rewrite.
  */
 extern void adj_nbr_midchain_update_rewrite(adj_index_t adj_index,
-                                           u32 post_rewrite_node,
+                                           adj_midchain_fixup_t fixup,
+                                           adj_midchain_flag_t flags,
                                            u8 *rewrite);
 
 /**
@@ -56,6 +77,16 @@ extern void adj_nbr_midchain_update_rewrite(adj_index_t adj_index,
 extern void adj_nbr_midchain_stack(adj_index_t adj_index,
                                   const dpo_id_t *dpo);
 
+/**
+ * @brief
+ *  unstack a midchain. This will break the chain between the midchain and
+ *  the next graph section. This is a implemented as stack-on-drop
+ *
+ * @param adj_index
+ *  The index of the midchain to stack
+ */
+extern void adj_nbr_midchain_unstack(adj_index_t adj_index);
+
 /**
  * @brief
  *  Module initialisation