vxlan:ip4 decap:remove access to tunnel object
[vpp.git] / src / vnet / vxlan / vxlan.h
index 21b7650..7305227 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <vppinfra/error.h>
 #include <vppinfra/hash.h>
+#include <vppinfra/bihash_16_8.h>
 #include <vppinfra/bihash_24_8.h>
 #include <vnet/vnet.h>
 #include <vnet/ip/ip.h>
@@ -43,27 +44,38 @@ typedef CLIB_PACKED (struct {
   udp_header_t udp;    /* 8 bytes */
   vxlan_header_t vxlan;        /* 8 bytes */
 }) ip6_vxlan_header_t;
+/* *INDENT-ON* */
 
-typedef CLIB_PACKED (union {
-  /*
-  * Key fields: remote ip, vni on incoming VXLAN packet
-  * all fields in NET byte order
-  */
-  struct
-    {
-      u32 src;
-      u32 vni; /* shifted left 8 bits */
-    };
-  u64 as_u64;
-}) vxlan4_tunnel_key_t;
+/*
+* Key fields: remote ip, vni on incoming VXLAN packet
+* all fields in NET byte order
+*/
+typedef clib_bihash_kv_16_8_t vxlan4_tunnel_key_t;
 
 /*
 * Key fields: remote ip, vni and fib index on incoming VXLAN packet
 * ip, vni fields in NET byte order
 * fib index field in host byte order
 */
-typedef BVT (clib_bihash_kv)  vxlan6_tunnel_key_t;
-/* *INDENT-ON* */
+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
 {
@@ -84,7 +96,7 @@ typedef struct
   u32 mcast_sw_if_index;
 
   /* decap next index */
-  u32 decap_next_index;
+  u16 decap_next_index;
 
   /* The FIB index for src/dst addresses */
   u32 encap_fib_index;
@@ -106,7 +118,7 @@ typedef struct
   adj_index_t mcast_adj_index;
 
   /**
-   * The tunnel is a child of the FIB entry for its desintion. This is
+   * The tunnel is a child of the FIB entry for its destination. This is
    * so it receives updates when the forwarding information for that entry
    * changes.
    * The tunnels sibling index on the FIB entry's dependency list.
@@ -146,8 +158,8 @@ typedef struct
   vxlan_tunnel_t *tunnels;
 
   /* lookup tunnel by key */
-  uword *vxlan4_tunnel_by_key; /* keyed on ipv4.dst + vni */
-    BVT (clib_bihash) vxlan6_tunnel_by_key;    /* keyed on ipv6.dst + fib +  vni */
+  clib_bihash_16_8_t vxlan4_tunnel_by_key;     /* keyed on ipv4.dst + fib + vni */
+  clib_bihash_24_8_t vxlan6_tunnel_by_key;     /* keyed on ipv6.dst + fib + vni */
 
   /* local VTEP IPs ref count used by vxlan-bypass node to check if
      received VXLAN packet DIP matches any local VTEP address */
@@ -184,7 +196,7 @@ typedef struct
   u8 is_add;
 
   /* we normally use is_ip4, but since this adds to the
-   * structure, this seems less of abreaking change */
+   * structure, this seems less of a breaking change */
   u8 is_ip6;
   u32 instance;
   ip46_address_t src, dst;