X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fvxlan%2Fvxlan.h;h=7399b19e3879dc0219039f6ea9c1a877a37c1077;hb=bdc0e6b7;hp=0f226aa3e72c174b67659b4bfadfeb81941c2fcd;hpb=af86a48733c548931f8983984328b906f7e7aef8;p=vpp.git diff --git a/src/vnet/vxlan/vxlan.h b/src/vnet/vxlan/vxlan.h index 0f226aa3e72..7399b19e387 100644 --- a/src/vnet/vxlan/vxlan.h +++ b/src/vnet/vxlan/vxlan.h @@ -17,6 +17,8 @@ #include #include +#include +#include #include #include #include @@ -30,47 +32,40 @@ #include #include +/* *INDENT-OFF* */ typedef CLIB_PACKED (struct { - ip4_header_t ip4; /* 20 bytes */ - udp_header_t udp; /* 8 bytes */ - vxlan_header_t vxlan; /* 8 bytes */ + ip4_header_t ip4; /* 20 bytes */ + udp_header_t udp; /* 8 bytes */ + vxlan_header_t vxlan; /* 8 bytes */ }) ip4_vxlan_header_t; typedef CLIB_PACKED (struct { - ip6_header_t ip6; /* 40 bytes */ - udp_header_t udp; /* 8 bytes */ - vxlan_header_t vxlan; /* 8 bytes */ + ip6_header_t ip6; /* 40 bytes */ + udp_header_t udp; /* 8 bytes */ + vxlan_header_t vxlan; /* 8 bytes */ }) ip6_vxlan_header_t; +/* *INDENT-ON* */ -typedef CLIB_PACKED(struct { - /* - * Key fields: ip src and vxlan vni on incoming VXLAN packet - * all fields in NET byte order - */ - union { - struct { - u32 src; - u32 vni; /* shifted left 8 bits */ - }; - u64 as_u64; - }; -}) vxlan4_tunnel_key_t; - -typedef CLIB_PACKED(struct { - /* - * Key fields: ip src and vxlan vni on incoming VXLAN packet - * all fields in NET byte order - */ - ip6_address_t src; - u32 vni; /* shifted left 8 bits */ -}) vxlan6_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; -typedef struct { +/* +* 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 clib_bihash_kv_24_8_t vxlan6_tunnel_key_t; + +typedef struct +{ /* Required for pool_get_aligned */ - CLIB_CACHE_LINE_ALIGN_MARK(cacheline0); + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); /* FIB DPO for IP forwarding of VXLAN encap packet */ - dpo_id_t next_dpo; + dpo_id_t next_dpo; /* vxlan VNI in HOST byte order */ u32 vni; @@ -83,7 +78,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; @@ -105,60 +100,63 @@ 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. */ u32 sibling_index; - u32 flow_index; /* infra flow index */ - u32 dev_instance; /* Real device instance in tunnel vector */ - u32 user_instance; /* Instance name being shown to user */ + u32 flow_index; /* infra flow index */ + 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 (VLIB_BUFFER_PRE_DATA_SIZE); } vxlan_tunnel_t; #define foreach_vxlan_input_next \ _(DROP, "error-drop") \ _(L2_INPUT, "l2-input") -typedef enum { +typedef enum +{ #define _(s,n) VXLAN_INPUT_NEXT_##s, foreach_vxlan_input_next #undef _ - VXLAN_INPUT_N_NEXT, + VXLAN_INPUT_N_NEXT, } vxlan_input_next_t; -typedef enum { +typedef enum +{ #define vxlan_error(n,s) VXLAN_ERROR_##n, #include #undef vxlan_error VXLAN_N_ERROR, } vxlan_input_error_t; -typedef struct { +typedef struct +{ /* vector of encap tunnel instances */ - vxlan_tunnel_t * tunnels; + vxlan_tunnel_t *tunnels; /* lookup tunnel by key */ - uword * vxlan4_tunnel_by_key; /* keyed on ipv4.dst + vni */ - uword * vxlan6_tunnel_by_key; /* keyed on ipv6.dst + 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 */ - uword * vtep4; /* local ip4 VTEPs keyed on their ip4 addr */ - uword * vtep6; /* local ip6 VTEPs keyed on their ip6 addr */ + uword *vtep4; /* local ip4 VTEPs keyed on their ip4 addr */ + uword *vtep6; /* local ip6 VTEPs keyed on their ip6 addr */ /* mcast shared info */ - uword * mcast_shared; /* keyed on mcast ip46 addr */ + uword *mcast_shared; /* keyed on mcast ip46 addr */ /* Mapping from sw_if_index to tunnel index */ - u32 * tunnel_index_by_sw_if_index; + u32 *tunnel_index_by_sw_if_index; /* convenience */ - vlib_main_t * vlib_main; - vnet_main_t * vnet_main; + vlib_main_t *vlib_main; + vnet_main_t *vnet_main; /* Record used instances */ uword *instance_used; @@ -173,13 +171,14 @@ extern vlib_node_registration_t vxlan4_encap_node; extern vlib_node_registration_t vxlan6_encap_node; extern vlib_node_registration_t vxlan4_flow_input_node; -u8 * format_vxlan_encap_trace (u8 * s, va_list * args); +u8 *format_vxlan_encap_trace (u8 * s, va_list * args); -typedef struct { +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; @@ -189,19 +188,19 @@ typedef struct { u32 vni; } vnet_vxlan_add_del_tunnel_args_t; -int vnet_vxlan_add_del_tunnel -(vnet_vxlan_add_del_tunnel_args_t *a, u32 * sw_if_indexp); +int vnet_vxlan_add_del_tunnel + (vnet_vxlan_add_del_tunnel_args_t * a, u32 * sw_if_indexp); -void vnet_int_vxlan_bypass_mode -(u32 sw_if_index, u8 is_ip6, u8 is_enable); +void vnet_int_vxlan_bypass_mode (u32 sw_if_index, u8 is_ip6, u8 is_enable); -int vnet_vxlan_add_del_rx_flow -(u32 hw_if_index, u32 t_imdex, int is_add); +int vnet_vxlan_add_del_rx_flow (u32 hw_if_index, u32 t_imdex, int is_add); u32 vnet_vxlan_get_tunnel_index (u32 sw_if_index); #endif /* included_vnet_vxlan_h */ /* + * fd.io coding-style-patch-verification: ON + * * Local Variables: * eval: (c-set-style "gnu") * End: