#define __GBP_VXLAN_H__
#include <vnet/fib/fib_types.h>
+#include <plugins/gbp/gbp_itf.h>
#define forecah_gbp_vxlan_tunnel_layer \
_(L2, "l2") \
{
struct
{
- /**
- * BD index (if L2)
- */
- u32 gt_bd_index;
/**
* Reference to the GPB-BD
*/
};
struct
{
- /**
- * FIB inidices (if L3)
- */
- u32 gt_fib_index[FIB_PROTOCOL_IP_MAX];
/**
* References to the GBP-RD
*/
/**
* gbp-itf config for this interface
*/
- index_t gt_itf;
+ gbp_itf_hdl_t gt_itf;
/**
* list of child vxlan-gbp tunnels built from this template
*/
index_t *gt_tuns;
+
+ /**
+ * The source address to use for child tunnels
+ */
+ ip46_address_t gt_src;
} gbp_vxlan_tunnel_t;
/**
} gbp_vxlan_tunnel_type_t;
extern int gbp_vxlan_tunnel_add (u32 vni, gbp_vxlan_tunnel_layer_t layer,
- u32 bd_rd_id, u32 * sw_if_indexp);
+ u32 bd_rd_id,
+ const ip4_address_t * src,
+ u32 * sw_if_indexp);
extern int gbp_vxlan_tunnel_del (u32 vni);
extern gbp_vxlan_tunnel_type_t gbp_vxlan_tunnel_get_type (u32 sw_if_index);
-extern u32 gbp_vxlan_tunnel_clone_and_lock (u32 parent_tunnel,
- const ip46_address_t * src,
- const ip46_address_t * dst);
+extern gbp_itf_hdl_t gbp_vxlan_tunnel_clone_and_lock (u32 parent_tunnel,
+ const ip46_address_t *
+ src,
+ const ip46_address_t *
+ dst);
-extern void vxlan_gbp_tunnel_lock (u32 sw_if_index);
-extern void vxlan_gbp_tunnel_unlock (u32 sw_if_index);
extern u32 vxlan_gbp_tunnel_get_parent (u32 sw_if_index);
+extern gbp_itf_hdl_t vxlan_gbp_tunnel_lock_itf (u32 sw_if_index);
typedef walk_rc_t (*gbp_vxlan_cb_t) (gbp_vxlan_tunnel_t * gt, void *ctx);
extern void gbp_vxlan_walk (gbp_vxlan_cb_t cb, void *ctx);
extern u8 *format_gbp_vxlan_tunnel (u8 * s, va_list * args);
extern u8 *format_gbp_vxlan_tunnel_layer (u8 * s, va_list * args);
+extern gbp_vxlan_tunnel_t *gbp_vxlan_tunnel_get (index_t gti);
#endif
/*