#include <vnet/pg/pg.h>
#include <vnet/ip/format.h>
#include <vnet/adj/adj_types.h>
+#include <vnet/tunnel/tunnel.h>
+#include <vnet/teib/teib.h>
extern vnet_hw_interface_class_t gre_hw_interface_class;
extern vnet_hw_interface_class_t mgre_hw_interface_class;
extern u8 *format_gre_tunnel_type (u8 * s, va_list * args);
-#define foreach_gre_tunnel_mode \
- _(P2P, "point-to-point") \
- _(MP, "multi-point") \
-
-typedef enum gre_tunnel_mode_t_
-{
-#define _(n, s) GRE_TUNNEL_MODE_##n,
- foreach_gre_tunnel_mode
-#undef _
-} __clib_packed gre_tunnel_mode_t;
-
-extern u8 *format_gre_tunnel_mode (u8 * s, va_list * args);
/**
* A GRE payload protocol registration
u32 fib_index;
u16 session_id;
gre_tunnel_type_t type;
- gre_tunnel_mode_t mode;
+ tunnel_mode_t mode;
};
u64 as_u64;
};
u32 hw_if_index;
u32 sw_if_index;
gre_tunnel_type_t type;
- gre_tunnel_mode_t mode;
+ tunnel_mode_t mode;
+ tunnel_encap_decap_flags_t flags;
/**
* an L2 tunnel always rquires an L2 midchain. cache here for DP.
extern void gre_update_adj (vnet_main_t * vnm,
u32 sw_if_index, adj_index_t ai);
+typedef struct mgre_walk_ctx_t_
+{
+ const gre_tunnel_t *t;
+ const teib_entry_t *ne;
+} mgre_walk_ctx_t;
+
+adj_walk_rc_t mgre_mk_complete_walk (adj_index_t ai, void *data);
+adj_walk_rc_t mgre_mk_incomplete_walk (adj_index_t ai, void *data);
+
format_function_t format_gre_protocol;
format_function_t format_gre_header;
format_function_t format_gre_header_with_length;
{
u8 is_add;
gre_tunnel_type_t type;
- gre_tunnel_mode_t mode;
+ tunnel_mode_t mode;
u8 is_ipv6;
u32 instance;
ip46_address_t src, dst;
u32 outer_table_id;
u16 session_id;
+ tunnel_encap_decap_flags_t flags;
} vnet_gre_tunnel_add_del_args_t;
extern int vnet_gre_tunnel_add_del (vnet_gre_tunnel_add_del_args_t * a,
ip4_address_t dst,
u32 fib_index,
gre_tunnel_type_t ttype,
- gre_tunnel_mode_t tmode, u16 session_id, gre_tunnel_key4_t * key)
+ tunnel_mode_t tmode, u16 session_id, gre_tunnel_key4_t * key)
{
key->gtk_src = src;
key->gtk_dst = dst;
const ip6_address_t * dst,
u32 fib_index,
gre_tunnel_type_t ttype,
- gre_tunnel_mode_t tmode, u16 session_id, gre_tunnel_key6_t * key)
+ tunnel_mode_t tmode, u16 session_id, gre_tunnel_key6_t * key)
{
key->gtk_src = *src;
key->gtk_dst = *dst;