X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Flisp-gpe%2Flisp_gpe.h;h=f1fa7715820488daf02d591729bac5bddd627081;hb=47feb1146ec3b0e1cf2ebd83cd5211e1df261194;hp=bb0f788b1977a408a78a7c746281fa38b9a07d86;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vnet/lisp-gpe/lisp_gpe.h b/src/vnet/lisp-gpe/lisp_gpe.h index bb0f788b197..f1fa7715820 100644 --- a/src/vnet/lisp-gpe/lisp_gpe.h +++ b/src/vnet/lisp-gpe/lisp_gpe.h @@ -27,10 +27,12 @@ #include #include #include -#include +#include #include #include #include +#include +#include /** IP4-UDP-LISP encap header */ /* *INDENT-OFF* */ @@ -65,6 +67,9 @@ typedef enum LISP_GPE_INPUT_N_NEXT, } lisp_gpe_input_next_t; +/* Arc to nsh-input added only if nsh-input exists */ +#define LISP_GPE_INPUT_NEXT_NSH_INPUT 4 + typedef enum { #define lisp_gpe_error(n,s) LISP_GPE_ERROR_##n, @@ -85,6 +90,30 @@ typedef struct tunnel_lookup uword *vni_by_sw_if_index; } tunnel_lookup_t; +typedef struct +{ + u32 fwd_entry_index; + u32 tunnel_index; +} lisp_stats_key_t; + +typedef struct +{ + u32 vni; + dp_address_t deid; + dp_address_t seid; + ip_address_t loc_rloc; + ip_address_t rmt_rloc; + + vlib_counter_t counters; +} lisp_api_stats_t; + +typedef enum gpe_encap_mode_e +{ + GPE_ENCAP_LISP, + GPE_ENCAP_VXLAN, + GPE_ENCAP_COUNT +} gpe_encap_mode_t; + /** LISP-GPE global state*/ typedef struct lisp_gpe_main { @@ -119,6 +148,25 @@ typedef struct lisp_gpe_main /** Load-balance for a miss in the table */ dpo_id_t l2_lb_cp_lkup; + /* NSH data structures + * ================== */ + + BVT (clib_bihash) nsh_fib; + + tunnel_lookup_t nsh_ifaces; + + const dpo_id_t *nsh_cp_lkup; + + gpe_encap_mode_t encap_mode; + + u8 *dummy_stats_pool; + uword *lisp_stats_index_by_key; + vlib_combined_counter_main_t counters; + + /** Native fwd data structures */ + fib_route_path_t *native_fwd_rpath[2]; + u32 *native_fwd_lfes[2]; + /** convenience */ vlib_main_t *vlib_main; vnet_main_t *vnet_main; @@ -129,7 +177,7 @@ typedef struct lisp_gpe_main } lisp_gpe_main_t; /** LISP-GPE global state*/ -lisp_gpe_main_t lisp_gpe_main; +extern lisp_gpe_main_t lisp_gpe_main; always_inline lisp_gpe_main_t * vnet_lisp_gpe_get_main () @@ -155,7 +203,8 @@ lisp_gpe_l3_iface_find_or_create (lisp_gpe_main_t * lgm, extern void lisp_gpe_del_l2_iface (lisp_gpe_main_t * lgm, u32 vni, u32 bd_id); extern u32 lisp_gpe_add_l2_iface (lisp_gpe_main_t * lgm, u32 vni, u32 bd_id); extern void lisp_gpe_del_l3_iface (lisp_gpe_main_t * lgm, u32 vni, u32 bd_id); -extern u32 lisp_gpe_add_l3_iface (lisp_gpe_main_t * lgm, u32 vni, u32 bd_id); +extern u32 lisp_gpe_add_l3_iface (lisp_gpe_main_t * lgm, u32 vni, u32 bd_id, + u8 with_default_route); typedef struct @@ -177,6 +226,11 @@ typedef enum /** */ typedef struct { + /** forwarding entry index of */ + u32 fwd_entry_index; + + u8 is_src_dst; + u8 is_add; /** type of mapping */ @@ -213,13 +267,29 @@ typedef struct u32 table_id; /** bridge domain id */ - u16 bd_id; + u32 bd_id; /** generic access */ u32 dp_table; }; } vnet_lisp_gpe_add_del_fwd_entry_args_t; +typedef struct +{ + fib_route_path_t rpath; + u8 is_add; +} vnet_gpe_native_fwd_rpath_args_t; + +typedef struct +{ + u32 fwd_entry_index; + u32 dp_table; + u32 vni; + u8 action; + dp_address_t leid; + dp_address_t reid; +} lisp_api_gpe_fwd_entry_t; + #define foreach_lgpe_ip4_lookup_next \ _(DROP, "error-drop") \ _(LISP_CP_LOOKUP, "lisp-cp-lookup") @@ -246,6 +316,18 @@ typedef enum lgpe_ip6_lookup_next u8 *format_vnet_lisp_gpe_status (u8 * s, va_list * args); +lisp_api_gpe_fwd_entry_t *vnet_lisp_gpe_fwd_entries_get_by_vni (u32 vni); +gpe_encap_mode_t vnet_gpe_get_encap_mode (void); +int vnet_gpe_set_encap_mode (gpe_encap_mode_t mode); + +u8 vnet_lisp_stats_enable_disable_state (void); +vnet_api_error_t vnet_lisp_stats_enable_disable (u8 enable); +lisp_api_stats_t *vnet_lisp_get_stats (void); +int vnet_lisp_flush_stats (void); +int vnet_gpe_add_del_native_fwd_rpath (vnet_gpe_native_fwd_rpath_args_t * a); +u32 vnet_lisp_gpe_add_nsh_iface (lisp_gpe_main_t * lgm); +void vnet_lisp_gpe_del_nsh_iface (lisp_gpe_main_t * lgm); + #endif /* included_vnet_lisp_gpe_h */ /*