|
FD.io VPP
v21.06-3-gbb25fbf28
Vector Packet Processing
|
Go to the documentation of this file.
25 #include <vpp/app/version.h>
40 #include <gbp/gbp.api_enum.h>
41 #include <gbp/gbp.api_types.h>
44 #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
50 #define GBP_MSG_BASE msg_id_base
71 static vl_api_gbp_endpoint_flags_t
74 vl_api_gbp_endpoint_flags_t v = 0;
121 ip46_address_t tun_src, tun_dst;
130 gef, &tun_src, &tun_dst, &handle);
138 gef, NULL, NULL, &handle);
146 rmp->
handle = htonl (handle);
154 vl_api_gbp_endpoint_del_reply_t *rmp;
190 gel = &
ge->ge_locs[0];
254 vl_api_gbp_endpoint_group_add_reply_t *rmp;
262 ntohl (mp->
epg.bd_id),
263 ntohl (mp->
epg.rd_id),
264 ntohl (mp->
epg.uplink_sw_if_index),
274 vl_api_gbp_endpoint_group_del_reply_t *rmp;
288 a = clib_net_to_host_u32 (
a);
305 vl_api_gbp_bridge_domain_add_reply_t *rmp;
309 ntohl (mp->
bd.rd_id),
312 ntohl (mp->
bd.bvi_sw_if_index),
313 ntohl (mp->
bd.uu_fwd_sw_if_index),
314 ntohl (mp->
bd.bm_flood_sw_if_index));
322 vl_api_gbp_bridge_domain_del_reply_t *rmp;
333 vl_api_gbp_route_domain_add_reply_t *rmp;
338 ntohl (mp->
rd.ip4_table_id),
339 ntohl (mp->
rd.ip6_table_id),
340 ntohl (mp->
rd.ip4_uu_sw_if_index),
341 ntohl (mp->
rd.ip6_uu_sw_if_index));
349 vl_api_gbp_route_domain_del_reply_t *rmp;
360 a = clib_net_to_host_u32 (
a);
387 vl_api_gbp_subnet_add_del_reply_t *rmp;
402 ntohl (mp->
subnet.sw_if_index),
411 static vl_api_gbp_subnet_type_t
414 vl_api_gbp_subnet_type_t
a = 0;
435 a = clib_host_to_net_u32 (
a);
542 memset (mp, 0,
sizeof (*mp));
552 mp->
bd.bm_flood_sw_if_index =
588 memset (mp, 0,
sizeof (*mp));
593 mp->
rd.ip4_uu_sw_if_index =
595 mp->
rd.ip6_uu_sw_if_index =
623 vl_api_gbp_recirc_add_del_reply_t *rmp;
629 goto bad_sw_if_index;
686 vl_api_gbp_ext_itf_add_del_reply_t *rmp;
688 vl_api_gbp_ext_itf_t *ext_itf;
696 goto bad_sw_if_index;
700 ntohl (ext_itf->bd_id), ntohl (ext_itf->rd_id),
701 ntohl (ext_itf->flags));
756 in = clib_net_to_host_u32 (in);
761 *out = GBP_RULE_PERMIT;
764 *out = GBP_RULE_DENY;
767 *out = GBP_RULE_REDIRECT;
777 in = clib_net_to_host_u32 (in);
782 *out = GBP_HASH_MODE_SRC_IP;
785 *out = GBP_HASH_MODE_DST_IP;
788 *out = GBP_HASH_MODE_SYMMETRIC;
805 return (VNET_API_ERROR_BD_NOT_MODIFIABLE);
810 return (VNET_API_ERROR_NO_SUCH_FIB);
836 for (ii = 0; ii < in->n_nhs; ii++)
864 if (GBP_RULE_REDIRECT ==
action)
873 hash_mode = GBP_HASH_MODE_SRC_IP;
897 for (ii = 0; ii <
n_rules; ii++)
939 for (ii = 0; ii < n_et; ii++)
1011 mode = clib_net_to_host_u32 (
mode);
1016 *l = GBP_VXLAN_TUN_L2;
1019 *l = GBP_VXLAN_TUN_L3;
1056 vl_api_gbp_vxlan_tunnel_del_reply_t *rmp;
1064 static vl_api_gbp_vxlan_tunnel_mode_t
1071 case GBP_VXLAN_TUN_L2:
1074 case GBP_VXLAN_TUN_L3:
1078 mode = clib_host_to_net_u32 (
mode);
1094 memset (mp, 0,
sizeof (*mp));
1095 mp->_vl_msg_id = htons (VL_API_GBP_VXLAN_TUNNEL_DETAILS +
GBP_MSG_BASE);
1124 #include <gbp/gbp.api.c>
1142 .version = VPP_BUILD_VER,
1143 .description =
"Group Based Policy (GBP)",
void gbp_ext_itf_walk(gbp_ext_itf_cb_t cb, void *ctx)
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)
int gbp_endpoint_group_delete(sclass_t sclass)
static walk_rc_t gbp_ext_itf_send_details(gbp_ext_itf_t *gx, void *args)
@ GBP_BD_FLAG_DO_NOT_LEARN
@ GBP_API_ENDPOINT_FLAG_LEARNT
static void vl_api_gbp_vxlan_tunnel_del_t_handler(vl_api_gbp_vxlan_tunnel_add_t *mp)
u32 gbp_bridge_domain_get_bd_id(index_t gbdi)
#define VALIDATE_SW_IF_INDEX(mp)
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
@ GBP_ENDPOINT_FLAG_LEARNT
static int gbp_bridge_domain_send_details(gbp_bridge_domain_t *gb, void *args)
static void vl_api_gbp_bridge_domain_add_t_handler(vl_api_gbp_bridge_domain_add_t *mp)
@ GBP_API_HASH_MODE_DST_IP
int gbp_recirc_add(u32 sw_if_index, sclass_t sclass, u8 is_ext)
sclass_t gr_sclass
EPG ID that packets will classify to when they arrive on this recirc.
static void vl_api_gbp_endpoint_group_del_t_handler(vl_api_gbp_endpoint_group_del_t *mp)
static int gbp_contract_rule_action_deocde(vl_api_gbp_rule_action_t in, gbp_rule_action_t *out)
@ GBP_API_HASH_MODE_SRC_IP
#define REPLY_MACRO2(t, body)
void ip4_address_decode(const vl_api_ip4_address_t in, ip4_address_t *out)
@ GBP_API_SUBNET_ANON_L3_OUT
@ GBP_ENDPOINT_FLAG_REMOTE
void gbp_rule_free(index_t gui)
u32 gb_rdi
Index of the Route-domain this BD is associated with.
static void vl_api_gbp_bridge_domain_del_t_handler(vl_api_gbp_bridge_domain_del_t *mp)
int gbp_ext_itf_add(u32 sw_if_index, u32 bd_id, u32 rd_id, u32 flags)
void gbp_subnet_walk(gbp_subnet_cb_t cb, void *ctx)
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
static int gbp_vxlan_tunnel_mode_2_layer(vl_api_gbp_vxlan_tunnel_mode_t mode, gbp_vxlan_tunnel_layer_t *l)
static void vl_api_gbp_vxlan_tunnel_add_t_handler(vl_api_gbp_vxlan_tunnel_add_t *mp)
static f64 clib_host_to_net_f64(f64 x)
gbp_contract_key_t gc_key
source and destination EPGs
void gbp_endpoint_unlock(gbp_endpoint_src_t src, index_t gei)
static void vl_api_gbp_route_domain_del_t_handler(vl_api_gbp_route_domain_del_t *mp)
void gbp_endpoint_group_walk(gbp_endpoint_group_cb_t cb, void *ctx)
static int gbp_contract_rule_decode(const vl_api_gbp_rule_t *in, index_t *gui)
vl_api_gbp_contract_t contract
static int gbp_hash_mode_decode(vl_api_gbp_hash_mode_t in, gbp_hash_mode_t *out)
void gbp_route_domain_walk(gbp_route_domain_cb_t cb, void *ctx)
static vl_api_gbp_endpoint_flags_t gbp_endpoint_flags_encode(gbp_endpoint_flags_t f)
vl_api_gbp_ext_itf_t ext_itf
int gbp_endpoint_is_remote(const gbp_endpoint_t *ge)
static int gub_subnet_type_from_api(vl_api_gbp_subnet_type_t a, gbp_subnet_type_t *t)
static gbp_endpoint_t * gbp_endpoint_get(index_t gbpei)
Get the endpoint from a port/interface.
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)
vl_api_tunnel_mode_t mode
u32 gg_uplink_sw_if_index
the uplink interface dedicated to the EPG
A route Domain Representation.
@ GBP_API_ENDPOINT_FLAG_BOUNCE
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
@ GBP_SUBNET_STITCHED_INTERNAL
u8 gr_is_ext
Is the interface for packets post-NAT translation (i.e.
u32 grd_id
Route-domain ID.
static void vl_api_gbp_endpoint_group_add_t_handler(vl_api_gbp_endpoint_group_add_t *mp)
gbp_endpoint_flags_t gef_flags
vl_api_gbp_route_domain_t rd
@ GBP_VXLAN_TUNNEL_MODE_L2
vl_api_gbp_next_hop_t nhs[8]
u32 gx_flags
The associated flags.
And endpoints current forwarding state.
vl_api_interface_index_t sw_if_index
struct gbp_walk_ctx_t_ gbp_walk_ctx_t
vl_api_gbp_endpoint_group_t epg
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 void vl_api_gbp_endpoint_add_t_handler(vl_api_gbp_endpoint_add_t *mp)
vl_api_gbp_bridge_domain_t bd
u16 allowed_ethertypes[16]
u32 gb_bd_id
Bridge-domain ID.
u32 gb_bvi_sw_if_index
The BD's BVI interface (obligatory)
@ GBP_API_SUBNET_STITCHED_INTERNAL
static gbp_bridge_domain_flags_t gbp_bridge_domain_flags_from_api(vl_api_gbp_bridge_domain_flags_t a)
@ GBP_API_ENDPOINT_FLAG_REMOTE
static void vl_api_gbp_contract_dump_t_handler(vl_api_gbp_contract_dump_t *mp)
gbp_endpoint_src_t gel_src
The source providing this location information.
void gbp_bridge_domain_walk(gbp_bridge_domain_cb_t cb, void *ctx)
vl_api_gbp_recirc_t recirc
void ip_prefix_encode(const fib_prefix_t *in, vl_api_prefix_t *out)
enum gbp_endpoint_flags_t_ gbp_endpoint_flags_t
static void gbp_retention_decode(const vl_api_gbp_endpoint_retention_t *in, gbp_endpoint_retention_t *out)
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)
int gbp_contract_delete(gbp_scope_t scope, sclass_t sclass, sclass_t dclass)
vl_api_gbp_bridge_domain_t bd
static vl_api_gbp_vxlan_tunnel_mode_t gbp_vxlan_tunnel_layer_2_mode(gbp_vxlan_tunnel_layer_t layer)
ip46_type_t ip_address_decode(const vl_api_address_t *in, ip46_address_t *out)
Decode/Encode for struct/union types.
@ GBP_SUBNET_STITCHED_EXTERNAL
A GBP recirculation interface representation Thes interfaces join Bridge domains that are internal to...
vl_api_gbp_recirc_t recirc
vl_api_address_t ips[n_ips]
static void setup_message_id_table(api_main_t *am)
static void vl_api_gbp_recirc_dump_t_handler(vl_api_gbp_recirc_dump_t *mp)
vl_api_gbp_subnet_t subnet
enum gbp_hash_mode_t_ gbp_hash_mode_t
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
vl_api_gbp_route_domain_t rd
@ GBP_API_HASH_MODE_SYMMETRIC
vl_api_registration_t * reg
static void vl_api_gbp_recirc_add_del_t_handler(vl_api_gbp_recirc_add_del_t *mp)
static int gbp_endpoint_group_send_details(gbp_endpoint_group_t *gg, void *args)
static void vl_api_gbp_contract_add_del_t_handler(vl_api_gbp_contract_add_del_t *mp)
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)
An API client registration, only in vpp/vlib.
Information about the location of the endpoint provided by a source of endpoints.
u32 grd_uu_sw_if_index[FIB_PROTOCOL_IP_MAX]
The interfaces on which to send packets to unnknown EPs.
@ GBP_API_ENDPOINT_FLAG_EXTERNAL
static void vl_api_gbp_ext_itf_add_del_t_handler(vl_api_gbp_ext_itf_add_del_t *mp)
u32 index_t
A Data-Path Object is an object that represents actions that are applied to packets are they are swit...
void ip_prefix_decode(const vl_api_prefix_t *in, fib_prefix_t *out)
#define vec_foreach_index(var, v)
Iterate over vector indices.
int gbp_recirc_delete(u32 sw_if_index)
u32 gbp_itf_get_sw_if_index(gbp_itf_hdl_t hdl)
@ GBP_ENDPOINT_FLAG_BOUNCE
static int gbp_route_domain_send_details(gbp_route_domain_t *grd, void *args)
An Endpoint Group representation.
static void vl_api_gbp_route_domain_dump_t_handler(vl_api_gbp_route_domain_dump_t *mp)
index_t gx_rd
The RD this external interface is a member of.
int gbp_subnet_del(u32 rd_id, const fib_prefix_t *pfx)
static void vl_api_gbp_endpoint_dump_t_handler(vl_api_gbp_endpoint_dump_t *mp)
sclass_t gck_src
source and destination EPGs for which the ACL applies
vl_api_gbp_endpoint_retention_t retention
@ GBP_ENDPOINT_FLAG_EXTERNAL
#define vec_validate(V, I)
Make sure vector is long enough for given index (no header, unspecified alignment)
gbp_itf_hdl_t gef_itf
The interface on which the EP is connected.
static void vl_api_gbp_ext_itf_dump_t_handler(vl_api_gbp_ext_itf_dump_t *mp)
static vl_api_gbp_subnet_type_t gub_subnet_type_to_api(gbp_subnet_type_t t)
vl_api_gbp_vxlan_tunnel_t tunnel
gbp_vxlan_tunnel_layer_t gt_layer
enum gbp_subnet_type_t_ gbp_subnet_type_t
int gbp_ext_itf_delete(u32 sw_if_index)
gbp_itf_hdl_t gb_bm_flood_itf
The BD's interface to sned Broadcast and multicast packets.
@ GBP_API_SUBNET_STITCHED_EXTERNAL
static void vl_api_gbp_subnet_dump_t_handler(vl_api_gbp_subnet_dump_t *mp)
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 walk_rc_t gbp_recirc_send_details(gbp_recirc_t *gr, void *args)
#define BAD_SW_IF_INDEX_LABEL
static int gbp_next_hop_decode(const vl_api_gbp_next_hop_t *in, index_t *gnhi)
vl_api_gbp_ext_itf_t ext_itf
static uword vnet_sw_if_index_is_api_valid(u32 sw_if_index)
static walk_rc_t gbp_endpoint_send_details(index_t gei, void *args)
GBP VXLAN (template) tunnel.
int gbp_route_domain_delete(u32 rd_id)
u32 gel_parent_sw_if_index
#define vec_free(V)
Free vector's memory (no header).
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)
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)
index_t gx_bd
The BD this external interface is a member of.
enum gbp_rule_action_t_ gbp_rule_action_t
vl_api_gbp_vxlan_tunnel_t tunnel
vl_api_gbp_endpoint_t endpoint
@ GBP_BD_API_FLAG_UU_FWD_DROP
void mac_address_encode(const mac_address_t *in, u8 *out)
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)
u32 gbp_endpoint_group_get_bd_id(const gbp_endpoint_group_t *gg)
vl_api_gbp_contract_t contract
vl_api_gbp_rule_t rules[n_rules]
void gbp_endpoint_walk(gbp_endpoint_cb_t cb, void *ctx)
#define vec_foreach(var, vec)
Vector iterator.
gbp_route_domain_t * gbp_route_domain_get(index_t i)
@ GBP_BD_FLAG_UU_FWD_DROP
void mac_address_decode(const u8 *in, mac_address_t *out)
Conversion functions to/from (decode/encode) API types to VPP internal types.
index_t gbp_bridge_domain_find_and_lock(u32 bd_id)
struct gbp_endpoint_loc_t_::@659 tun
Tunnel info for remote endpoints.
A bridge Domain Representation.
index_t gbp_route_domain_find_and_lock(u32 rd_id)
@ GBP_BD_API_FLAG_UCAST_ARP
VLIB_API_INIT_FUNCTION(gbp_init)
index_t gbp_rule_alloc(gbp_rule_action_t action, gbp_hash_mode_t hash_mode, index_t *nhs)
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
@ GBP_BD_API_FLAG_MCAST_DROP
vl_api_gbp_endpoint_t endpoint
u32 gb_uu_fwd_sw_if_index
The BD's MAC spine-proxy interface (optional)
void ip_address_encode(const ip46_address_t *in, ip46_type_t type, vl_api_address_t *out)
static vlib_main_t * vlib_get_main(void)
Endpoint Retnetion Policy.
static walk_rc_t gbp_vxlan_tunnel_send_details(gbp_vxlan_tunnel_t *gt, void *args)
index_t gg_rd
route-domain/IP-table ID the EPG is in
static void vl_api_gbp_subnet_add_del_t_handler(vl_api_gbp_subnet_add_del_t *mp)
void gbp_contract_walk(gbp_contract_cb_t cb, void *ctx)
int gbp_bridge_domain_delete(u32 bd_id)
A Group Based Policy Contract.
static int gbp_contract_send_details(gbp_contract_t *gbpc, void *args)
gbp_itf_hdl_t gx_itf
The interface.
enum gbp_bridge_domain_flags_t_ gbp_bridge_domain_flags_t
Bridge Domain Flags.
static clib_error_t * gbp_init(vlib_main_t *vm)
An external interface maps directly to an oflex L3ExternalInterface.
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)
void gbp_recirc_walk(gbp_recirc_cb_t cb, void *ctx)
A Group Based Policy Endpoint.
static void vl_api_gbp_vxlan_tunnel_dump_t_handler(vl_api_gbp_vxlan_tunnel_dump_t *mp)
static f64 vlib_time_now(vlib_main_t *vm)
static void vl_api_gbp_endpoint_group_dump_t_handler(vl_api_gbp_endpoint_group_dump_t *mp)
index_t gbp_next_hop_alloc(const ip46_address_t *ip, index_t grd, const mac_address_t *mac, index_t gbd)
static int gbp_contract_rules_decode(u8 n_rules, const vl_api_gbp_rule_t *rules, index_t **out)
@ GBP_VXLAN_TUNNEL_MODE_L3
u32 remote_ep_timeout
Aging timeout for remote endpoints.
static gbp_endpoint_flags_t gbp_endpoint_flags_decode(vl_api_gbp_endpoint_flags_t v)
#define INDEX_INVALID
Invalid index - used when no index is known blazoned capitals INVALID speak volumes where ~0 does not...
vl_api_mac_event_action_t action
vl_api_interface_index_t sw_if_index
Group Base Policy (GBP) defines:
void gbp_vxlan_walk(gbp_vxlan_cb_t cb, void *ctx)
enum walk_rc_t_ walk_rc_t
Walk return code.
Aggregate type for a prefix.
vl_api_fib_path_type_t type
int gbp_vxlan_tunnel_del(u32 vni)
@ GBP_API_SUBNET_TRANSPORT
@ GBP_BD_API_FLAG_DO_NOT_LEARN
static void vl_api_gbp_endpoint_del_t_handler(vl_api_gbp_endpoint_del_t *mp)
u32 gbp_route_domain_get_rd_id(index_t grdi)
static void vl_api_gbp_route_domain_add_t_handler(vl_api_gbp_route_domain_add_t *mp)
void * vl_msg_api_alloc(int nbytes)
u32 gt_bd_rd_id
The BD or RD value (depending on the layer) that the tunnel is bound to.
vl_api_gbp_subnet_t subnet
vl_api_gbp_endpoint_group_t epg