From 61b94c6bc417dbcb11323962b40493e6f7ec2f7e Mon Sep 17 00:00:00 2001 From: Mohsin Kazmi Date: Mon, 20 Aug 2018 18:32:39 +0200 Subject: vxlan-gbp: Add support for vxlan gbp This patch implements vxlan with extension of group based policy support. Change-Id: I70405bf7332c02867286da8958d9652837edd3c2 Signed-off-by: Mohsin Kazmi --- src/plugins/gbp/gbp.api | 12 ++++++------ src/plugins/gbp/gbp_api.c | 30 +++++++++++++++--------------- src/plugins/gbp/gbp_classify.c | 2 +- src/plugins/gbp/gbp_contract.c | 12 ++++++------ src/plugins/gbp/gbp_contract.h | 4 ++-- src/plugins/gbp/gbp_policy.c | 2 +- src/plugins/gbp/gbp_policy_dpo.c | 2 +- src/plugins/gbp/gbp_subnet.c | 2 +- src/plugins/gbp/gbp_types.h | 4 ++-- 9 files changed, 35 insertions(+), 35 deletions(-) (limited to 'src/plugins/gbp') diff --git a/src/plugins/gbp/gbp.api b/src/plugins/gbp/gbp.api index b2b32e90d4b..3e27abbb88a 100644 --- a/src/plugins/gbp/gbp.api +++ b/src/plugins/gbp/gbp.api @@ -24,7 +24,7 @@ option version = "1.0.0"; typeonly define gbp_endpoint { u32 sw_if_index; - u32 epg_id; + u16 epg_id; u8 is_ip6; u8 address[16]; u8 mac[6]; @@ -52,7 +52,7 @@ define gbp_endpoint_details typeonly define gbp_endpoint_group { - u32 epg_id; + u16 epg_id; u32 bd_id; u32 ip4_table_id; u32 ip6_table_id; @@ -81,8 +81,8 @@ define gbp_endpoint_group_details typeonly define gbp_recirc { - u32 epg_id; u32 sw_if_index; + u16 epg_id; u8 is_ext; }; @@ -110,7 +110,7 @@ typeonly define gbp_subnet { u32 table_id; u32 sw_if_index; - u32 epg_id; + u16 epg_id; u8 is_ip6; u8 is_internal; u8 address_length; @@ -139,8 +139,8 @@ define gbp_subnet_details typeonly define gbp_contract { - u32 src_epg; - u32 dst_epg; + u16 src_epg; + u16 dst_epg; u32 acl_index; }; diff --git a/src/plugins/gbp/gbp_api.c b/src/plugins/gbp/gbp_api.c index 1f24eedc3d0..f487695bdf3 100644 --- a/src/plugins/gbp/gbp_api.c +++ b/src/plugins/gbp/gbp_api.c @@ -93,7 +93,7 @@ vl_api_gbp_endpoint_add_del_t_handler (vl_api_gbp_endpoint_add_del_t * mp) if (mp->is_add) { rv = - gbp_endpoint_update (sw_if_index, &ip, ntohl (mp->endpoint.epg_id)); + gbp_endpoint_update (sw_if_index, &ip, ntohs (mp->endpoint.epg_id)); } else { @@ -137,7 +137,7 @@ gbp_endpoint_send_details (gbp_endpoint_t * gbpe, void *args) &gbpe->ge_key->gek_ip.ip4, sizeof (gbpe->ge_key->gek_ip.ip4)); - mp->endpoint.epg_id = ntohl (gbpe->ge_epg_id); + mp->endpoint.epg_id = ntohs (gbpe->ge_epg_id); vl_api_send_msg (ctx->reg, (u8 *) mp); @@ -175,7 +175,7 @@ static void if (mp->is_add) { - rv = gbp_endpoint_group_add (ntohl (mp->epg.epg_id), + rv = gbp_endpoint_group_add (ntohs (mp->epg.epg_id), ntohl (mp->epg.bd_id), ntohl (mp->epg.ip4_table_id), ntohl (mp->epg.ip6_table_id), @@ -183,7 +183,7 @@ static void } else { - gbp_endpoint_group_delete (ntohl (mp->epg.epg_id)); + gbp_endpoint_group_delete (ntohs (mp->epg.epg_id)); } BAD_SW_IF_INDEX_LABEL; @@ -211,7 +211,7 @@ vl_api_gbp_subnet_add_del_t_handler (vl_api_gbp_subnet_add_del_t * mp) rv = gbp_subnet_add_del (ntohl (mp->subnet.table_id), &pfx, ntohl (mp->subnet.sw_if_index), - ntohl (mp->subnet.epg_id), + ntohs (mp->subnet.epg_id), mp->is_add, mp->subnet.is_internal); REPLY_MACRO (VL_API_GBP_SUBNET_ADD_DEL_REPLY + GBP_MSG_BASE); @@ -237,7 +237,7 @@ gbp_subnet_send_details (u32 table_id, mp->subnet.is_internal = is_internal; mp->subnet.sw_if_index = ntohl (sw_if_index); - mp->subnet.epg_id = ntohl (epg); + mp->subnet.epg_id = ntohs (epg); mp->subnet.is_ip6 = (pfx->fp_proto == FIB_PROTOCOL_IP6); mp->subnet.address_length = pfx->fp_len; mp->subnet.table_id = ntohl (table_id); @@ -287,7 +287,7 @@ gbp_endpoint_group_send_details (gbp_endpoint_group_t * gepg, void *args) mp->context = ctx->context; mp->epg.uplink_sw_if_index = ntohl (gepg->gepg_uplink_sw_if_index); - mp->epg.epg_id = ntohl (gepg->gepg_id); + mp->epg.epg_id = ntohs (gepg->gepg_id); mp->epg.bd_id = ntohl (gepg->gepg_bd); mp->epg.ip4_table_id = ntohl (gepg->gepg_rd[FIB_PROTOCOL_IP4]); mp->epg.ip6_table_id = ntohl (gepg->gepg_rd[FIB_PROTOCOL_IP6]); @@ -328,7 +328,7 @@ vl_api_gbp_recirc_add_del_t_handler (vl_api_gbp_recirc_add_del_t * mp) if (mp->is_add) gbp_recirc_add (sw_if_index, - ntohl (mp->recirc.epg_id), mp->recirc.is_ext); + ntohs (mp->recirc.epg_id), mp->recirc.is_ext); else gbp_recirc_delete (sw_if_index); @@ -352,7 +352,7 @@ gbp_recirc_send_details (gbp_recirc_t * gr, void *args) mp->_vl_msg_id = ntohs (VL_API_GBP_RECIRC_DETAILS + GBP_MSG_BASE); mp->context = ctx->context; - mp->recirc.epg_id = ntohl (gr->gr_epg); + mp->recirc.epg_id = ntohs (gr->gr_epg); mp->recirc.sw_if_index = ntohl (gr->gr_sw_if_index); mp->recirc.is_ext = ntohl (gr->gr_is_ext); @@ -385,12 +385,12 @@ vl_api_gbp_contract_add_del_t_handler (vl_api_gbp_contract_add_del_t * mp) int rv = 0; if (mp->is_add) - gbp_contract_update (ntohl (mp->contract.src_epg), - ntohl (mp->contract.dst_epg), + gbp_contract_update (ntohs (mp->contract.src_epg), + ntohs (mp->contract.dst_epg), ntohl (mp->contract.acl_index)); else - gbp_contract_delete (ntohl (mp->contract.src_epg), - ntohl (mp->contract.dst_epg)); + gbp_contract_delete (ntohs (mp->contract.src_epg), + ntohs (mp->contract.dst_epg)); REPLY_MACRO (VL_API_GBP_CONTRACT_ADD_DEL_REPLY + GBP_MSG_BASE); } @@ -410,8 +410,8 @@ gbp_contract_send_details (gbp_contract_t * gbpc, void *args) mp->_vl_msg_id = ntohs (VL_API_GBP_CONTRACT_DETAILS + GBP_MSG_BASE); mp->context = ctx->context; - mp->contract.src_epg = ntohl (gbpc->gc_key.gck_src); - mp->contract.dst_epg = ntohl (gbpc->gc_key.gck_dst); + mp->contract.src_epg = ntohs (gbpc->gc_key.gck_src); + mp->contract.dst_epg = ntohs (gbpc->gc_key.gck_dst); mp->contract.acl_index = ntohl (gbpc->gc_value.gc_acl_index); vl_api_send_msg (ctx->reg, (u8 *) mp); diff --git a/src/plugins/gbp/gbp_classify.c b/src/plugins/gbp/gbp_classify.c index 6b91d8cf099..fdb1e9f6776 100644 --- a/src/plugins/gbp/gbp_classify.c +++ b/src/plugins/gbp/gbp_classify.c @@ -90,7 +90,7 @@ gbp_classify_inline (vlib_main_t * vm, if (GBP_SRC_CLASSIFY_NULL == type) { - src_epg = ~0; + src_epg = EPG_INVALID; next0 = vnet_l2_feature_next (b0, gscm->l2_input_feat_next[type], L2INPUT_FEAT_GBP_NULL_CLASSIFY); diff --git a/src/plugins/gbp/gbp_contract.c b/src/plugins/gbp/gbp_contract.c index a536f89e5fe..32dd94441db 100644 --- a/src/plugins/gbp/gbp_contract.c +++ b/src/plugins/gbp/gbp_contract.c @@ -45,7 +45,7 @@ gbp_contract_update (epg_id_t src_epg, epg_id_t dst_epg, u32 acl_index) gm->acl_plugin.register_user_module ("GBP ACL", "src-epg", "dst-epg"); } - p = hash_get (gbp_contract_db.gc_hash, key.as_u64); + p = hash_get (gbp_contract_db.gc_hash, key.as_u32); if (p != NULL) { value.as_u64 = p[0]; @@ -56,7 +56,7 @@ gbp_contract_update (epg_id_t src_epg, epg_id_t dst_epg, u32 acl_index) gm->acl_plugin.get_lookup_context_index (gm->gbp_acl_user_id, src_epg, dst_epg); value.gc_acl_index = acl_index; - hash_set (gbp_contract_db.gc_hash, key.as_u64, value.as_u64); + hash_set (gbp_contract_db.gc_hash, key.as_u32, value.as_u64); } if (value.gc_lc_index == ~0) @@ -77,13 +77,13 @@ gbp_contract_delete (epg_id_t src_epg, epg_id_t dst_epg) .gck_dst = dst_epg, }; - p = hash_get (gbp_contract_db.gc_hash, key.as_u64); + p = hash_get (gbp_contract_db.gc_hash, key.as_u32); if (p != NULL) { value.as_u64 = p[0]; gm->acl_plugin.put_lookup_context_index (value.gc_lc_index); } - hash_unset (gbp_contract_db.gc_hash, key.as_u64); + hash_unset (gbp_contract_db.gc_hash, key.as_u32); } void @@ -93,7 +93,7 @@ gbp_contract_walk (gbp_contract_cb_t cb, void *ctx) gbp_contract_value_t value; /* *INDENT-OFF* */ - hash_foreach(key.as_u64, value.as_u64, gbp_contract_db.gc_hash, + hash_foreach(key.as_u32, value.as_u64, gbp_contract_db.gc_hash, ({ gbp_contract_t gbpc = { .gc_key = key, @@ -174,7 +174,7 @@ gbp_contract_show (vlib_main_t * vm, vlib_cli_output (vm, "Contracts:"); /* *INDENT-OFF* */ - hash_foreach (key.as_u64, value.as_u64, gbp_contract_db.gc_hash, + hash_foreach (key.as_u32, value.as_u64, gbp_contract_db.gc_hash, { vlib_cli_output (vm, " {%d,%d} -> %d", key.gck_src, key.gck_dst, value.gc_acl_index); diff --git a/src/plugins/gbp/gbp_contract.h b/src/plugins/gbp/gbp_contract.h index 75f2edca116..121192c9c96 100644 --- a/src/plugins/gbp/gbp_contract.h +++ b/src/plugins/gbp/gbp_contract.h @@ -33,7 +33,7 @@ typedef struct gbp_contract_key_t_ epg_id_t gck_src; epg_id_t gck_dst; }; - u64 as_u64; + u32 as_u32; }; } gbp_contract_key_t; @@ -102,7 +102,7 @@ gbp_acl_lookup (gbp_contract_key_t * key) { uword *p; - p = hash_get (gbp_contract_db.gc_hash, key->as_u64); + p = hash_get (gbp_contract_db.gc_hash, key->as_u32); if (NULL != p) return (p[0]); diff --git a/src/plugins/gbp/gbp_policy.c b/src/plugins/gbp/gbp_policy.c index 38254644631..c0a8866e1ee 100644 --- a/src/plugins/gbp/gbp_policy.c +++ b/src/plugins/gbp/gbp_policy.c @@ -110,7 +110,7 @@ gbp_policy (vlib_main_t * vm, key0.gck_dst = gbp_port_to_epg (sw_if_index0); key0.gck_src = vnet_buffer2 (b0)->gbp.src_epg; - if (~0 != key0.gck_src) + if (EPG_INVALID != key0.gck_src) { if (PREDICT_FALSE (key0.gck_src == key0.gck_dst)) { diff --git a/src/plugins/gbp/gbp_policy_dpo.c b/src/plugins/gbp/gbp_policy_dpo.c index 4b8cd5bf6ad..3a06604121b 100644 --- a/src/plugins/gbp/gbp_policy_dpo.c +++ b/src/plugins/gbp/gbp_policy_dpo.c @@ -248,7 +248,7 @@ gbp_policy_dpo_inline (vlib_main_t * vm, key0.gck_src = vnet_buffer2 (b0)->gbp.src_epg; key0.gck_dst = gpd0->gpd_epg; - if (~0 != key0.gck_src) + if (EPG_INVALID != key0.gck_src) { if (PREDICT_FALSE (key0.gck_src == key0.gck_dst)) { diff --git a/src/plugins/gbp/gbp_subnet.c b/src/plugins/gbp/gbp_subnet.c index 3819a51595b..b3925110b7b 100644 --- a/src/plugins/gbp/gbp_subnet.c +++ b/src/plugins/gbp/gbp_subnet.c @@ -129,7 +129,7 @@ gbp_subnet_fib_table_walk (fib_node_index_t fei, void *arg) /* *INDENT-OFF* */ ctx->cb (table_id, pfx, ~0, // sw_if_index - ~0, // epg + EPG_INVALID, // epg 1, // is_internal ctx->ctx); /* *INDENT-ON* */ diff --git a/src/plugins/gbp/gbp_types.h b/src/plugins/gbp/gbp_types.h index fa337451028..afb17e3a5d5 100644 --- a/src/plugins/gbp/gbp_types.h +++ b/src/plugins/gbp/gbp_types.h @@ -18,8 +18,8 @@ #include -typedef u32 epg_id_t; -#define EPG_INVALID (~0) +typedef u16 epg_id_t; +#define EPG_INVALID ((u16)~0) #endif -- cgit 1.2.3-korg