geneve gtpu vxlan vxlan-gpe: VRF-aware bypass node
[vpp.git] / src / vnet / vxlan / vxlan.h
index 7399b19..772c9d7 100644 (file)
@@ -21,6 +21,7 @@
 #include <vppinfra/bihash_24_8.h>
 #include <vnet/vnet.h>
 #include <vnet/ip/ip.h>
+#include <vnet/ip/vtep.h>
 #include <vnet/l2/l2_input.h>
 #include <vnet/l2/l2_output.h>
 #include <vnet/l2/l2_bd.h>
@@ -59,6 +60,24 @@ typedef clib_bihash_kv_16_8_t vxlan4_tunnel_key_t;
 */
 typedef clib_bihash_kv_24_8_t vxlan6_tunnel_key_t;
 
+typedef union
+{
+  struct
+  {
+    u32 sw_if_index;           /* unicast - input interface / mcast - stats interface */
+    union
+    {
+      struct                   /* unicast action */
+      {
+       u16 next_index;
+       u8 error;
+      };
+      ip4_address_t local_ip;  /* used as dst ip for mcast pkts to assign them to unicast tunnel */
+    };
+  };
+  u64 as_u64;
+} vxlan_decap_info_t;
+
 typedef struct
 {
   /* Required for pool_get_aligned */
@@ -111,7 +130,7 @@ typedef struct
   u32 dev_instance;            /* Real device instance in tunnel vector */
   u32 user_instance;           /* Instance name being shown to user */
 
-    vnet_declare_rewrite (VLIB_BUFFER_PRE_DATA_SIZE);
+    VNET_DECLARE_REWRITE;
 } vxlan_tunnel_t;
 
 #define foreach_vxlan_input_next        \
@@ -145,8 +164,7 @@ typedef struct
 
   /* local VTEP IPs ref count used by vxlan-bypass node to check if
      received VXLAN packet DIP matches any local VTEP address */
-  uword *vtep4;                        /* local ip4 VTEPs keyed on their ip4 addr */
-  uword *vtep6;                        /* local ip6 VTEPs keyed on their ip6 addr */
+  vtep_table_t vtep_table;
 
   /* mcast shared info */
   uword *mcast_shared;         /* keyed on mcast ip46 addr */
@@ -154,6 +172,10 @@ typedef struct
   /* Mapping from sw_if_index to tunnel index */
   u32 *tunnel_index_by_sw_if_index;
 
+  /* graph node state */
+  uword *bm_ip4_bypass_enabled_by_sw_if;
+  uword *bm_ip6_bypass_enabled_by_sw_if;
+
   /* convenience */
   vlib_main_t *vlib_main;
   vnet_main_t *vnet_main;