ip: Replace Sematics for Interface IP addresses
[vpp.git] / src / plugins / gbp / gbp_vxlan.h
index 7aa22e3..6e01dc1 100644 (file)
@@ -17,6 +17,7 @@
 #define __GBP_VXLAN_H__
 
 #include <vnet/fib/fib_types.h>
+#include <plugins/gbp/gbp_itf.h>
 
 #define forecah_gbp_vxlan_tunnel_layer          \
   _(L2, "l2")                                   \
@@ -51,10 +52,6 @@ typedef struct gbp_vxlan_tunnel_t_
   {
     struct
     {
-      /**
-       * BD index (if L2)
-       */
-      u32 gt_bd_index;
       /**
        * Reference to the GPB-BD
        */
@@ -62,10 +59,6 @@ typedef struct gbp_vxlan_tunnel_t_
     };
     struct
     {
-      /**
-       * FIB inidices (if L3)
-       */
-      u32 gt_fib_index[FIB_PROTOCOL_IP_MAX];
       /**
        * References to the GBP-RD
        */
@@ -76,12 +69,17 @@ typedef struct gbp_vxlan_tunnel_t_
   /**
    * 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;
 
 /**
@@ -103,18 +101,21 @@ typedef enum gbp_vxlan_tunnel_type_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);
@@ -122,6 +123,7 @@ 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
 
 /*