25 #include <vpp/app/version.h> 51 #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__) 57 #define vl_api_version(n,v) static u32 api_version=(v); 63 #define foreach_gbp_api_msg \ 64 _(GBP_ENDPOINT_ADD, gbp_endpoint_add) \ 65 _(GBP_ENDPOINT_DEL, gbp_endpoint_del) \ 66 _(GBP_ENDPOINT_DUMP, gbp_endpoint_dump) \ 67 _(GBP_SUBNET_ADD_DEL, gbp_subnet_add_del) \ 68 _(GBP_SUBNET_DUMP, gbp_subnet_dump) \ 69 _(GBP_ENDPOINT_GROUP_ADD, gbp_endpoint_group_add) \ 70 _(GBP_ENDPOINT_GROUP_DEL, gbp_endpoint_group_del) \ 71 _(GBP_ENDPOINT_GROUP_DUMP, gbp_endpoint_group_dump) \ 72 _(GBP_BRIDGE_DOMAIN_ADD, gbp_bridge_domain_add) \ 73 _(GBP_BRIDGE_DOMAIN_DEL, gbp_bridge_domain_del) \ 74 _(GBP_BRIDGE_DOMAIN_DUMP, gbp_bridge_domain_dump) \ 75 _(GBP_ROUTE_DOMAIN_ADD, gbp_route_domain_add) \ 76 _(GBP_ROUTE_DOMAIN_DEL, gbp_route_domain_del) \ 77 _(GBP_ROUTE_DOMAIN_DUMP, gbp_route_domain_dump) \ 78 _(GBP_RECIRC_ADD_DEL, gbp_recirc_add_del) \ 79 _(GBP_RECIRC_DUMP, gbp_recirc_dump) \ 80 _(GBP_EXT_ITF_ADD_DEL, gbp_ext_itf_add_del) \ 81 _(GBP_EXT_ITF_DUMP, gbp_ext_itf_dump) \ 82 _(GBP_CONTRACT_ADD_DEL, gbp_contract_add_del) \ 83 _(GBP_CONTRACT_DUMP, gbp_contract_dump) \ 84 _(GBP_VXLAN_TUNNEL_ADD, gbp_vxlan_tunnel_add) \ 85 _(GBP_VXLAN_TUNNEL_DEL, gbp_vxlan_tunnel_del) \ 86 _(GBP_VXLAN_TUNNEL_DUMP, gbp_vxlan_tunnel_dump) 92 #define GBP_MSG_BASE msg_id_base 113 static vl_api_gbp_endpoint_flags_t
116 vl_api_gbp_endpoint_flags_t v = 0;
148 sw_if_index = ntohl (mp->
endpoint.sw_if_index);
163 ip46_address_t tun_src, tun_dst;
169 sw_if_index, ips, &mac,
172 gef, &tun_src, &tun_dst, &handle);
177 sw_if_index, ips, &mac,
180 gef, NULL, NULL, &handle);
188 rmp->
handle = htonl (handle);
196 vl_api_gbp_endpoint_del_reply_t *rmp;
229 mp->_vl_msg_id = ntohs (VL_API_GBP_ENDPOINT_DETAILS +
GBP_MSG_BASE);
296 vl_api_gbp_endpoint_group_add_reply_t *rmp;
316 vl_api_gbp_endpoint_group_del_reply_t *rmp;
330 a = clib_net_to_host_u32 (a);
347 vl_api_gbp_bridge_domain_add_reply_t *rmp;
351 ntohl (mp->
bd.rd_id),
354 ntohl (mp->
bd.bvi_sw_if_index),
355 ntohl (mp->
bd.uu_fwd_sw_if_index),
356 ntohl (mp->
bd.bm_flood_sw_if_index));
364 vl_api_gbp_bridge_domain_del_reply_t *rmp;
375 vl_api_gbp_route_domain_add_reply_t *rmp;
379 ntohs (mp->
rd.scope),
380 ntohl (mp->
rd.ip4_table_id),
381 ntohl (mp->
rd.ip6_table_id),
382 ntohl (mp->
rd.ip4_uu_sw_if_index),
383 ntohl (mp->
rd.ip6_uu_sw_if_index));
391 vl_api_gbp_route_domain_del_reply_t *rmp;
402 a = clib_net_to_host_u32 (a);
429 vl_api_gbp_subnet_add_del_reply_t *rmp;
453 static vl_api_gbp_subnet_type_t
456 vl_api_gbp_subnet_type_t
a = 0;
477 a = clib_host_to_net_u32 (a);
497 mp->_vl_msg_id = ntohs (VL_API_GBP_SUBNET_DETAILS +
GBP_MSG_BASE);
540 mp->_vl_msg_id = ntohs (VL_API_GBP_ENDPOINT_GROUP_DETAILS +
GBP_MSG_BASE);
584 memset (mp, 0,
sizeof (*mp));
585 mp->_vl_msg_id = ntohs (VL_API_GBP_BRIDGE_DOMAIN_DETAILS +
GBP_MSG_BASE);
594 mp->
bd.bm_flood_sw_if_index =
630 memset (mp, 0,
sizeof (*mp));
631 mp->_vl_msg_id = ntohs (VL_API_GBP_ROUTE_DOMAIN_DETAILS +
GBP_MSG_BASE);
635 mp->
rd.ip4_uu_sw_if_index =
637 mp->
rd.ip6_uu_sw_if_index =
665 vl_api_gbp_recirc_add_del_reply_t *rmp;
671 goto bad_sw_if_index;
696 mp->_vl_msg_id = ntohs (VL_API_GBP_RECIRC_DETAILS +
GBP_MSG_BASE);
728 vl_api_gbp_ext_itf_add_del_reply_t *rmp;
738 goto bad_sw_if_index;
742 ntohl (ext_itf->
bd_id), ntohl (ext_itf->
rd_id),
743 ntohl (ext_itf->
flags));
764 mp->_vl_msg_id = ntohs (VL_API_GBP_EXT_ITF_DETAILS +
GBP_MSG_BASE);
798 in = clib_net_to_host_u32 (in);
803 *out = GBP_RULE_PERMIT;
806 *out = GBP_RULE_DENY;
809 *out = GBP_RULE_REDIRECT;
819 in = clib_net_to_host_u32 (in);
824 *out = GBP_HASH_MODE_SRC_IP;
827 *out = GBP_HASH_MODE_DST_IP;
830 *out = GBP_HASH_MODE_SYMMETRIC;
847 return (VNET_API_ERROR_BD_NOT_MODIFIABLE);
852 return (VNET_API_ERROR_NO_SUCH_FIB);
878 for (ii = 0; ii < in->n_nhs; ii++)
906 if (GBP_RULE_REDIRECT == action)
915 hash_mode = GBP_HASH_MODE_SRC_IP;
939 for (ii = 0; ii <
n_rules; ii++)
961 u32 stats_index = ~0;
973 allowed_ethertypes = NULL;
981 for (ii = 0; ii < n_et; ii++)
984 allowed_ethertypes[ii] = mp->
contract.allowed_ethertypes[ii];
991 rules, allowed_ethertypes, &stats_index);
1019 mp->_vl_msg_id = ntohs (VL_API_GBP_CONTRACT_DETAILS +
GBP_MSG_BASE);
1053 mode = clib_net_to_host_u32 (mode);
1058 *l = GBP_VXLAN_TUN_L2;
1061 *l = GBP_VXLAN_TUN_L3;
1084 ntohl (mp->
tunnel.bd_rd_id), &src, &sw_if_index);
1098 vl_api_gbp_vxlan_tunnel_del_reply_t *rmp;
1106 static vl_api_gbp_vxlan_tunnel_mode_t
1113 case GBP_VXLAN_TUN_L2:
1116 case GBP_VXLAN_TUN_L3:
1120 mode = clib_host_to_net_u32 (mode);
1136 memset (mp, 0,
sizeof (*mp));
1137 mp->_vl_msg_id = htons (VL_API_GBP_VXLAN_TUNNEL_DETAILS +
GBP_MSG_BASE);
1173 #define vl_msg_name_crc_list 1175 #undef vl_msg_name_crc_list 1180 #define _(id,n,crc) \ 1181 vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id + GBP_MSG_BASE); 1182 foreach_vl_msg_name_crc_gbp;
1190 vl_msg_api_set_handlers(VL_API_##N + GBP_MSG_BASE, \ 1192 vl_api_##n##_t_handler, \ 1194 vl_api_##n##_t_endian, \ 1195 vl_api_##n##_t_print, \ 1196 sizeof(vl_api_##n##_t), 1); 1226 .version = VPP_BUILD_VER,
1227 .description =
"Group Based Policy (GBP)",
#define vec_validate(V, I)
Make sure vector is long enough for given index (no header, unspecified alignment) ...
void gbp_bridge_domain_walk(gbp_bridge_domain_cb_t cb, void *ctx)
sclass_t gr_sclass
EPG ID that packets will classify to when they arrive on this recirc.
#define vec_foreach_index(var, v)
Iterate over vector indices.
u32 gb_uu_fwd_sw_if_index
The BD's MAC spine-proxy interface (optional)
static void vl_api_gbp_vxlan_tunnel_dump_t_handler(vl_api_gbp_vxlan_tunnel_dump_t *mp)
void gbp_subnet_walk(gbp_subnet_cb_t cb, void *ctx)
int gbp_endpoint_is_remote(const gbp_endpoint_t *ge)
static gbp_endpoint_t * gbp_endpoint_get(index_t gbpei)
Get the endpoint from a port/interface.
f64 ge_last_time
The last time a packet from seen from this end point.
static int gbp_contract_send_details(gbp_contract_t *gbpc, void *args)
A Group Based Policy Endpoint.
static int gbp_contract_rules_decode(u8 n_rules, const vl_api_gbp_rule_t *rules, index_t **out)
fib_prefix_t * gek_ips
A vector of ip addresses that belong to the endpoint.
static void vl_api_gbp_endpoint_add_t_handler(vl_api_gbp_endpoint_add_t *mp)
vl_api_gbp_endpoint_group_t epg
gbp_contract_key_t gc_key
source and destination EPGs
vl_api_gbp_endpoint_t endpoint
static gbp_endpoint_flags_t gbp_endpoint_flags_decode(vl_api_gbp_endpoint_flags_t v)
static gbp_bridge_domain_flags_t gbp_bridge_domain_flags_from_api(vl_api_gbp_bridge_domain_flags_t a)
vl_api_gbp_subnet_t subnet
void gbp_endpoint_unlock(gbp_endpoint_src_t src, index_t gei)
void ip_prefix_decode(const vl_api_prefix_t *in, fib_prefix_t *out)
Information about the location of the endpoint provided by a source of endpoints. ...
gbp_endpoint_fwd_t ge_fwd
gbp_endpoint_key_t ge_key
The key/ID of this EP.
int gbp_recirc_add(u32 sw_if_index, sclass_t sclass, u8 is_ext)
void mac_address_encode(const mac_address_t *in, u8 *out)
int gbp_bridge_domain_add_and_lock(u32 bd_id, u32 rd_id, gbp_bridge_domain_flags_t flags, u32 bvi_sw_if_index, u32 uu_fwd_sw_if_index, u32 bm_flood_sw_if_index)
#define REPLY_MACRO2(t, body)
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
gbp_endpoint_flags_t gef_flags
static f64 vlib_time_now(vlib_main_t *vm)
static void vl_api_gbp_recirc_dump_t_handler(vl_api_gbp_recirc_dump_t *mp)
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
static void gbp_retention_decode(const vl_api_gbp_endpoint_retention_t *in, gbp_endpoint_retention_t *out)
A bridge Domain Representation.
int gbp_vxlan_tunnel_add(u32 vni, gbp_vxlan_tunnel_layer_t layer, u32 bd_rd_id, const ip4_address_t *src, u32 *sw_if_indexp)
int gbp_endpoint_group_delete(sclass_t sclass)
u32 index_t
A Data-Path Object is an object that represents actions that are applied to packets are they are swit...
vl_api_gbp_vxlan_tunnel_t tunnel
static void vl_api_gbp_vxlan_tunnel_del_t_handler(vl_api_gbp_vxlan_tunnel_add_t *mp)
void gbp_vxlan_walk(gbp_vxlan_cb_t cb, void *ctx)
vl_api_gbp_vxlan_tunnel_t tunnel
index_t gg_rd
route-domain/IP-table ID the EPG is in
Endpoint Retnetion Policy.
gbp_itf_hdl_t gx_itf
The interface.
vl_api_gbp_ext_itf_t ext_itf
void * vl_msg_api_alloc(int nbytes)
static int gbp_endpoint_group_send_details(gbp_endpoint_group_t *gg, void *args)
gbp_endpoint_src_t gel_src
The source providing this location information.
static void vl_api_gbp_contract_add_del_t_handler(vl_api_gbp_contract_add_del_t *mp)
int gbp_subnet_del(u32 rd_id, const fib_prefix_t *pfx)
static void vl_api_gbp_bridge_domain_add_t_handler(vl_api_gbp_bridge_domain_add_t *mp)
vl_api_gbp_endpoint_retention_t retention
u32 gbp_itf_get_sw_if_index(gbp_itf_hdl_t hdl)
static int gbp_contract_rule_action_deocde(vl_api_gbp_rule_action_t in, gbp_rule_action_t *out)
enum walk_rc_t_ walk_rc_t
Walk return code.
static void vl_api_gbp_vxlan_tunnel_add_t_handler(vl_api_gbp_vxlan_tunnel_add_t *mp)
u8 gr_is_ext
Is the interface for packets post-NAT translation (i.e.
vl_api_gbp_bridge_domain_t bd
enum gbp_bridge_domain_flags_t_ gbp_bridge_domain_flags_t
Bridge Domain Flags.
vl_api_interface_index_t sw_if_index
static int gbp_route_domain_send_details(gbp_route_domain_t *grd, void *args)
int gbp_subnet_add(u32 rd_id, const fib_prefix_t *pfx, gbp_subnet_type_t type, u32 sw_if_index, sclass_t sclass)
static vl_api_gbp_subnet_type_t gub_subnet_type_to_api(gbp_subnet_type_t t)
void gbp_route_domain_walk(gbp_route_domain_cb_t cb, void *ctx)
Aggregate type for a prefix.
static void vl_api_gbp_route_domain_del_t_handler(vl_api_gbp_route_domain_del_t *mp)
static void setup_message_id_table(api_main_t *am)
A GBP recirculation interface representation Thes interfaces join Bridge domains that are internal to...
index_t gx_bd
The BD this external interface is a member of.
static vl_api_gbp_endpoint_flags_t gbp_endpoint_flags_encode(gbp_endpoint_flags_t f)
ip46_type_t ip_address_decode(const vl_api_address_t *in, ip46_address_t *out)
vl_api_fib_path_type_t type
static walk_rc_t gbp_endpoint_send_details(index_t gei, void *args)
int gbp_ext_itf_delete(u32 sw_if_index)
enum gbp_subnet_type_t_ gbp_subnet_type_t
ip46_address_t fp_addr
The address type is not deriveable from the fp_addr member.
static walk_rc_t gbp_subnet_send_details(u32 rd_id, const fib_prefix_t *pfx, gbp_subnet_type_t type, u32 sw_if_index, sclass_t sclass, void *args)
static void vl_api_gbp_endpoint_group_add_t_handler(vl_api_gbp_endpoint_group_add_t *mp)
static void vl_api_gbp_contract_dump_t_handler(vl_api_gbp_contract_dump_t *mp)
int gbp_route_domain_delete(u32 rd_id)
int gbp_contract_delete(gbp_scope_t scope, sclass_t sclass, sclass_t dclass)
sclass_t gck_src
source and destination EPGs for which the ACL applies
int gbp_endpoint_group_add_and_lock(vnid_t vnid, u16 sclass, u32 bd_id, u32 rd_id, u32 uplink_sw_if_index, const gbp_endpoint_retention_t *retention)
static vl_api_gbp_vxlan_tunnel_mode_t gbp_vxlan_tunnel_layer_2_mode(gbp_vxlan_tunnel_layer_t layer)
u32 grd_uu_sw_if_index[FIB_PROTOCOL_IP_MAX]
The interfaces on which to send packets to unnknown EPs.
u32 remote_ep_timeout
Aging timeout for remote endpoints.
vl_api_gbp_next_hop_t nhs[8]
u32 gb_bd_id
Bridge-domain ID.
u32 gb_rdi
Index of the Route-domain this BD is associated with.
sclass_t gef_sclass
Endpoint Group's sclass.
mac_address_t gek_mac
MAC address of the endpoint.
u32 gel_parent_sw_if_index
int gbp_endpoint_update_and_lock(gbp_endpoint_src_t src, u32 sw_if_index, const ip46_address_t *ips, const mac_address_t *mac, index_t gbdi, index_t grdi, sclass_t sclass, gbp_endpoint_flags_t flags, const ip46_address_t *tun_src, const ip46_address_t *tun_dst, u32 *handle)
enum gbp_hash_mode_t_ gbp_hash_mode_t
An external interface maps directly to an oflex L3ExternalInterface.
An Endpoint Group representation.
API main structure, used by both vpp and binary API clients.
int gbp_route_domain_add_and_lock(u32 rd_id, gbp_scope_t scope, u32 ip4_table_id, u32 ip6_table_id, u32 ip4_uu_sw_if_index, u32 ip6_uu_sw_if_index)
vl_api_gbp_bridge_domain_t bd
static void vl_api_gbp_recirc_add_del_t_handler(vl_api_gbp_recirc_add_del_t *mp)
An API client registration, only in vpp/vlib.
#define BAD_SW_IF_INDEX_LABEL
static uword vnet_sw_if_index_is_api_valid(u32 sw_if_index)
enum gbp_vxlan_tunnel_layer_t_ gbp_vxlan_tunnel_layer_t
static void vl_api_gbp_bridge_domain_dump_t_handler(vl_api_gbp_bridge_domain_dump_t *mp)
int gbp_contract_update(gbp_scope_t scope, sclass_t sclass, sclass_t dclass, u32 acl_index, index_t *rules, u16 *allowed_ethertypes, u32 *stats_index)
void gbp_endpoint_walk(gbp_endpoint_cb_t cb, void *ctx)
#define vec_free(V)
Free vector's memory (no header).
static void vl_api_gbp_ext_itf_add_del_t_handler(vl_api_gbp_ext_itf_add_del_t *mp)
static walk_rc_t gbp_vxlan_tunnel_send_details(gbp_vxlan_tunnel_t *gt, void *args)
static void vl_api_gbp_subnet_add_del_t_handler(vl_api_gbp_subnet_add_del_t *mp)
int gbp_vxlan_tunnel_del(u32 vni)
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
vl_api_gbp_endpoint_group_t epg
static void vl_api_gbp_route_domain_dump_t_handler(vl_api_gbp_route_domain_dump_t *mp)
vl_api_gbp_subnet_t subnet
vl_api_vxlan_gbp_api_tunnel_mode_t mode
index_t gx_rd
The RD this external interface is a member of.
index_t gbp_bridge_domain_find_and_lock(u32 bd_id)
vl_api_gbp_rule_t rules[n_rules]
static void vl_api_gbp_endpoint_dump_t_handler(vl_api_gbp_endpoint_dump_t *mp)
vl_api_gbp_contract_t contract
enum gbp_endpoint_flags_t_ gbp_endpoint_flags_t
gbp_vxlan_tunnel_layer_t gt_layer
gbp_route_domain_t * gbp_route_domain_get(index_t i)
static void vl_api_gbp_endpoint_group_dump_t_handler(vl_api_gbp_endpoint_group_dump_t *mp)
u32 gb_bvi_sw_if_index
The BD's BVI interface (obligatory)
vl_api_gbp_recirc_t recirc
static clib_error_t * gbp_init(vlib_main_t *vm)
index_t gbp_rule_alloc(gbp_rule_action_t action, gbp_hash_mode_t hash_mode, index_t *nhs)
static void gbp_api_hookup(vlib_main_t *vm)
static f64 clib_host_to_net_f64(f64 x)
static void vl_api_gbp_ext_itf_dump_t_handler(vl_api_gbp_ext_itf_dump_t *mp)
static void vl_api_gbp_subnet_dump_t_handler(vl_api_gbp_subnet_dump_t *mp)
int gbp_bridge_domain_delete(u32 bd_id)
vl_api_gbp_contract_t contract
static vlib_main_t * vlib_get_main(void)
enum gbp_rule_action_t_ gbp_rule_action_t
void gbp_recirc_walk(gbp_recirc_cb_t cb, void *ctx)
vl_api_gbp_subnet_type_t type
void ip_prefix_encode(const fib_prefix_t *in, vl_api_prefix_t *out)
static void vl_api_gbp_endpoint_del_t_handler(vl_api_gbp_endpoint_del_t *mp)
static void vl_api_gbp_route_domain_add_t_handler(vl_api_gbp_route_domain_add_t *mp)
gbp_itf_hdl_t gef_itf
The interface on which the EP is connected.
static int gbp_next_hop_set_decode(const vl_api_gbp_next_hop_set_t *in, gbp_hash_mode_t *hash_mode, index_t **out)
And endpoints current forwarding state.
gbp_itf_hdl_t gb_bm_flood_itf
The BD's interface to sned Broadcast and multicast packets.
vl_api_gbp_endpoint_t endpoint
static walk_rc_t gbp_recirc_send_details(gbp_recirc_t *gr, void *args)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
A route Domain Representation.
u32 gg_uplink_sw_if_index
the uplink interface dedicated to the EPG
static int gbp_next_hop_decode(const vl_api_gbp_next_hop_t *in, index_t *gnhi)
#define INDEX_INVALID
Invalid index - used when no index is known blazoned capitals INVALID speak volumes where ~0 does not...
u32 gbp_route_domain_get_rd_id(index_t grdi)
void ip4_address_decode(const vl_api_ip4_address_t in, ip4_address_t *out)
vl_api_registration_t * reg
u32 gx_flags
The associated flags.
void gbp_ext_itf_walk(gbp_ext_itf_cb_t cb, void *ctx)
static int gbp_bridge_domain_send_details(gbp_bridge_domain_t *gb, void *args)
static walk_rc_t gbp_ext_itf_send_details(gbp_ext_itf_t *gx, void *args)
Group Base Policy (GBP) defines:
void ip_address_encode(const ip46_address_t *in, ip46_type_t type, vl_api_address_t *out)
struct gbp_endpoint_loc_t_::@462 tun
Tunnel info for remote endpoints.
int gbp_recirc_delete(u32 sw_if_index)
GBP VXLAN (template) tunnel.
u32 grd_id
Route-domain ID.
vl_api_gbp_ext_itf_t ext_itf
vl_api_gbp_route_domain_t rd
vl_api_address_t ips[n_ips]
u32 gbp_endpoint_group_get_bd_id(const gbp_endpoint_group_t *gg)
#define vec_foreach(var, vec)
Vector iterator.
static void vl_api_gbp_bridge_domain_del_t_handler(vl_api_gbp_bridge_domain_del_t *mp)
static void vl_api_gbp_endpoint_group_del_t_handler(vl_api_gbp_endpoint_group_del_t *mp)
u16 allowed_ethertypes[16]
u32 gt_bd_rd_id
The BD or RD value (depending on the layer) that the tunnel is bound to.
VLIB_API_INIT_FUNCTION(gbp_init)
gbp_endpoint_loc_t * ge_locs
Location information provided by the various sources.
vl_api_gbp_route_domain_t rd
void gbp_contract_walk(gbp_contract_cb_t cb, void *ctx)
struct gbp_walk_ctx_t_ gbp_walk_ctx_t
static int gbp_contract_rule_decode(const vl_api_gbp_rule_t *in, index_t *gui)
u32 gbp_bridge_domain_get_bd_id(index_t gbdi)
int gbp_ext_itf_add(u32 sw_if_index, u32 bd_id, u32 rd_id, u32 flags)
void mac_address_decode(const u8 *in, mac_address_t *out)
Conversion functions to/from (decode/encode) API types to VPP internal types.
static int gbp_hash_mode_decode(vl_api_gbp_hash_mode_t in, gbp_hash_mode_t *out)
static int gbp_vxlan_tunnel_mode_2_layer(vl_api_gbp_vxlan_tunnel_mode_t mode, gbp_vxlan_tunnel_layer_t *l)
index_t gbp_next_hop_alloc(const ip46_address_t *ip, index_t grd, const mac_address_t *mac, index_t gbd)
vl_api_gbp_recirc_t recirc
index_t gbp_route_domain_find_and_lock(u32 rd_id)
vl_api_gbp_ext_itf_flags_t flags
A Group Based Policy Contract.
#define VALIDATE_SW_IF_INDEX(mp)
void gbp_rule_free(index_t gui)
u16 vl_msg_api_get_msg_ids(const char *name, int n)
void gbp_endpoint_group_walk(gbp_endpoint_group_cb_t cb, void *ctx)
#define foreach_gbp_api_msg
static int gub_subnet_type_from_api(vl_api_gbp_subnet_type_t a, gbp_subnet_type_t *t)