X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fgre%2Fgre.h;h=9c12eb4bc1325f4722d835b5a48309e6d9840f9d;hb=ac1f96d7cdfb845c08400d27ec566b991e32e24b;hp=b6544b9b7373a920216e29ab18bcd0f35dbce40d;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vnet/gre/gre.h b/src/vnet/gre/gre.h index b6544b9b737..9c12eb4bc13 100644 --- a/src/vnet/gre/gre.h +++ b/src/vnet/gre/gre.h @@ -21,8 +21,6 @@ #include #include #include -#include -#include #include #include #include @@ -87,11 +85,11 @@ typedef struct { /** * The tunnel's source/local address */ - ip4_address_t tunnel_src; + ip46_address_t tunnel_src; /** * The tunnel's destination/remote address */ - ip4_address_t tunnel_dst; + fib_prefix_t tunnel_dst; /** * The FIB in which the src.dst address are present */ @@ -142,10 +140,16 @@ typedef struct { * Hash tables mapping name/protocol to protocol info index. */ uword * protocol_info_by_name, * protocol_info_by_protocol; + /** - * Hash mapping src/dst addr pair to tunnel + * Hash mapping ipv4 src/dst addr pair to tunnel */ - uword * tunnel_by_key; + uword * tunnel_by_key4; + + /** + * Hash mapping ipv6 src/dst addr pair to tunnel + */ + uword * tunnel_by_key6; /** * Free vlib hw_if_indices. @@ -159,6 +163,10 @@ typedef struct { */ u32 * tunnel_index_by_sw_if_index; + /* Sparse vector mapping gre protocol in network byte order + to next index. */ + u16 * next_by_protocol; + /* convenience */ vlib_main_t * vlib_main; vnet_main_t * vnet_main; @@ -172,6 +180,14 @@ typedef CLIB_PACKED (struct { gre_header_t gre; }) ip4_and_gre_header_t; +/** + * @brief IPv6 and GRE header. + */ +typedef CLIB_PACKED (struct { + ip6_header_t ip6; + gre_header_t gre; +}) ip6_and_gre_header_t; + always_inline gre_protocol_info_t * gre_get_protocol_info (gre_main_t * em, gre_protocol_t protocol) { @@ -179,7 +195,7 @@ gre_get_protocol_info (gre_main_t * em, gre_protocol_t protocol) return p ? vec_elt_at_index (em->protocol_infos, p[0]) : 0; } -gre_main_t gre_main; +extern gre_main_t gre_main; /* Register given node index to take input for given gre type. */ void @@ -200,7 +216,8 @@ format_function_t format_gre_protocol; format_function_t format_gre_header; format_function_t format_gre_header_with_length; -extern vlib_node_registration_t gre_input_node; +extern vlib_node_registration_t gre4_input_node; +extern vlib_node_registration_t gre6_input_node; extern vnet_device_class_t gre_device_class; extern vnet_device_class_t gre_device_teb_class; @@ -224,7 +241,8 @@ gre_register_input_protocol (vlib_main_t * vm, typedef struct { u8 is_add; - ip4_address_t src, dst; + ip46_address_t src, dst; + u8 is_ipv6; u32 outer_fib_id; u8 teb; } vnet_gre_add_del_tunnel_args_t;