#include <vnet/fib/fib_types.h>
/**
- * An Endpoint Group representation
+ * A GBP recirculation interface representation
+ * Thes interfaces join Bridge domains that are internal to those that are
+ * NAT external, so the packets can be NAT translated and then undergo the
+ * whole policy process again.
*/
typedef struct gpb_recirc_t_
{
*/
epg_id_t gr_epg;
+ /**
+ * The index of the EPG
+ */
+ index_t gr_epgi;
+
/**
* FIB indices the EPG is mapped to
*/
- u32 gr_fib_index[FIB_PROTOCOL_IP_MAX];
+ u32 gr_fib_index[DPO_PROTO_NUM];
/**
- * Is the interface for packets post-NAT translatoin (i.e. ext)
- * or pre-NAT ranslation (i.e. internal)
+ * Is the interface for packets post-NAT translation (i.e. ext)
+ * or pre-NAT translation (i.e. internal)
*/
u8 gr_is_ext;
/**
*/
u32 gr_sw_if_index;
+ u32 gr_itf;
+ /**
+ * The endpoint created to represent the reric interface
+ */
+ index_t gr_ep;
} gbp_recirc_t;
extern int gbp_recirc_add (u32 sw_if_index, epg_id_t epg_id, u8 is_ext);
extern void gbp_recirc_delete (u32 sw_if_index);
-typedef int (*gbp_recirc_cb_t) (gbp_recirc_t * gbpe, void *ctx);
+typedef walk_rc_t (*gbp_recirc_cb_t) (gbp_recirc_t * gbpe, void *ctx);
extern void gbp_recirc_walk (gbp_recirc_cb_t bgpe, void *ctx);
/**
extern gbp_recirc_t *gbp_recirc_pool;
extern index_t *gbp_recirc_db;
-always_inline const gbp_recirc_t *
+always_inline gbp_recirc_t *
gbp_recirc_get (u32 sw_if_index)
{
return (pool_elt_at_index (gbp_recirc_pool, gbp_recirc_db[sw_if_index]));