#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>
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
{
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;
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.
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 */
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;