aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-plugin/src/hicn_api.c
diff options
context:
space:
mode:
authorAlberto Compagno <acompagn+fdio@cisco.com>2019-11-21 11:59:54 +0000
committerAlberto Compagno <acompagn+fdio@cisco.com>2019-11-22 12:47:14 +0000
commit62f7b46d4c49d6e5bfb5b3b537bfcaf6503e7bac (patch)
tree35e206900cf6a1535df2b3439a55e0fdd9091a7f /hicn-plugin/src/hicn_api.c
parentae6f3b8e1f55fc4bb7807c293850d3cb46cab1fd (diff)
[HICN-405] Added application face delete
Added two new messages in the binary api: - hicn_api_face_cons_del to delete a consumer face - hicn_api_face_prod_del to delete a producer face Added the corresponding commands in the vpp_api_test for debugging and testing Reworked the cache policy structure to add a new function that flash the content store from the content coming from the destroyed producer face. This is required since the CS while each producer face has its own lru list. Removing only the producer face without flushing the CS from the content coming from the producer face will lead to a segfault in case there is a hit in the CS as the lru no longer exists and it won't be possible to update the head of the lru. Signed-off-by: Alberto Compagno <acompagn+fdio@cisco.com> Change-Id: I8776c86952d50900aa504dd22aec521ed25c1dae
Diffstat (limited to 'hicn-plugin/src/hicn_api.c')
-rw-r--r--hicn-plugin/src/hicn_api.c78
1 files changed, 57 insertions, 21 deletions
diff --git a/hicn-plugin/src/hicn_api.c b/hicn-plugin/src/hicn_api.c
index 1cb14fe1b..6724d524b 100644
--- a/hicn-plugin/src/hicn_api.c
+++ b/hicn-plugin/src/hicn_api.c
@@ -86,8 +86,9 @@
_(HICN_API_PUNTING_ADD, hicn_api_punting_add) \
_(HICN_API_PUNTING_DEL, hicn_api_punting_del) \
_(HICN_API_REGISTER_PROD_APP, hicn_api_register_prod_app) \
- _(HICN_API_REGISTER_CONS_APP, hicn_api_register_cons_app)
-
+ _(HICN_API_FACE_PROD_DEL, hicn_api_face_prod_del) \
+ _(HICN_API_REGISTER_CONS_APP, hicn_api_register_cons_app) \
+ _(HICN_API_FACE_CONS_DEL, hicn_api_face_cons_del)
/****** SUPPORTING FUNCTION DECLARATIONS ******/
@@ -392,7 +393,6 @@ vl_api_hicn_api_face_del_t_handler (vl_api_hicn_api_face_del_t * mp)
}
REPLY_MACRO (VL_API_HICN_API_FACE_DEL_REPLY /* , rmp, mp, rv */ );
-
}
static void
@@ -488,7 +488,7 @@ send_faces_details (vl_api_registration_t * reg,
}
static void
- vl_api_hicn_api_faces_dump_t_handler (vl_api_hicn_api_faces_dump_t * mp)
+vl_api_hicn_api_faces_dump_t_handler (vl_api_hicn_api_faces_dump_t * mp)
{
hicn_face_t *face;
vl_api_registration_t *reg;
@@ -506,7 +506,7 @@ static void
}
static void
- vl_api_hicn_api_face_get_t_handler (vl_api_hicn_api_face_get_t * mp)
+vl_api_hicn_api_face_get_t_handler (vl_api_hicn_api_face_get_t * mp)
{
vl_api_hicn_api_face_get_reply_t *rmp;
int rv = 0;
@@ -745,8 +745,8 @@ send_route_details (vl_api_registration_t * reg,
{
mp->faceids[i] =
clib_host_to_net_u32 (((dpo_id_t *) &
- hicn_dpo_ctx->next_hops[i])->
- dpoi_index);
+ hicn_dpo_ctx->
+ next_hops[i])->dpoi_index);
mp->nfaces++;
}
}
@@ -817,8 +817,7 @@ static void
fib_table_walk (fib_table->ft_index,
FIB_PROTOCOL_IP4,
vl_api_hicn_api_route_dump_walk,
- &ctx);
- }
+ &ctx);}
));
pool_foreach (fib_table, im6->fibs, (
@@ -826,8 +825,7 @@ static void
fib_table_walk (fib_table->ft_index,
FIB_PROTOCOL_IP6,
vl_api_hicn_api_route_dump_walk,
- &ctx);
- }
+ &ctx);}
));
vec_foreach (lfeip, ctx.feis)
@@ -890,17 +888,20 @@ static void vl_api_hicn_api_strategy_get_t_handler
/****** PUNTING *******/
-static hicn_error_t add_ip_punting (vl_api_hicn_punting_ip_t * mp)
+static hicn_error_t
+add_ip_punting (vl_api_hicn_punting_ip_t * mp)
{
vlib_main_t *vm = vlib_get_main ();
fib_prefix_t prefix;
ip_prefix_decode (&mp->prefix, &prefix);
u32 swif = clib_net_to_host_u32 (mp->swif);
- return hicn_punt_interest_data_for_ip (vm, &prefix, swif, HICN_PUNT_IP_TYPE, NO_L2);
+ return hicn_punt_interest_data_for_ip (vm, &prefix, swif, HICN_PUNT_IP_TYPE,
+ NO_L2);
}
-static hicn_error_t add_udp_punting (vl_api_hicn_punting_udp_t * mp)
+static hicn_error_t
+add_udp_punting (vl_api_hicn_punting_udp_t * mp)
{
vlib_main_t *vm = vlib_get_main ();
fib_prefix_t prefix;
@@ -908,9 +909,11 @@ static hicn_error_t add_udp_punting (vl_api_hicn_punting_udp_t * mp)
u32 swif = clib_net_to_host_u32 (mp->swif);
u16 sport = clib_net_to_host_u16 (mp->sport);
u16 dport = clib_net_to_host_u16 (mp->sport);
- u8 type = mp->ip_version == ADDRESS_IP6 ? HICN_PUNT_UDP6_TYPE : HICN_PUNT_UDP4_TYPE;
+ u8 type =
+ mp->ip_version == ADDRESS_IP6 ? HICN_PUNT_UDP6_TYPE : HICN_PUNT_UDP4_TYPE;
- return hicn_punt_interest_data_for_udp (vm, &prefix, swif, type, sport, dport, NO_L2);
+ return hicn_punt_interest_data_for_udp (vm, &prefix, swif, type, sport,
+ dport, NO_L2);
}
static void vl_api_hicn_api_punting_add_t_handler
@@ -923,11 +926,11 @@ static void vl_api_hicn_api_punting_add_t_handler
if (mp->type == IP_PUNT)
{
- rv = add_ip_punting(&(mp->rule.ip));
+ rv = add_ip_punting (&(mp->rule.ip));
}
else if (mp->type == UDP_PUNT)
{
- rv = add_udp_punting(&(mp->rule.udp));
+ rv = add_udp_punting (&(mp->rule.udp));
}
else
{
@@ -981,6 +984,20 @@ static void vl_api_hicn_api_register_prod_app_t_handler
/* *INDENT-ON* */
}
+static void
+vl_api_hicn_api_face_prod_del_t_handler (vl_api_hicn_api_face_prod_del_t * mp)
+{
+ vl_api_hicn_api_face_prod_del_reply_t *rmp;
+ int rv = HICN_ERROR_FACE_NOT_FOUND;
+
+ hicn_main_t *sm = &hicn_main;
+
+ hicn_face_id_t faceid = clib_net_to_host_u32 (mp->faceid);
+ rv = hicn_face_prod_del (faceid);
+
+ REPLY_MACRO (VL_API_HICN_API_FACE_PROD_DEL_REPLY /* , rmp, mp, rv */ );
+}
+
static void vl_api_hicn_api_register_cons_app_t_handler
(vl_api_hicn_api_register_cons_app_t * mp)
{
@@ -992,20 +1009,39 @@ static void vl_api_hicn_api_register_cons_app_t_handler
ip46_address_t src_addr6 = ip46_address_initializer;
u32 swif = clib_net_to_host_u32 (mp->swif);
- u32 faceid;
+ u32 faceid1;
+ u32 faceid2;
- rv = hicn_face_cons_add (&src_addr4.ip4, &src_addr6.ip6, swif, &faceid);
+ rv =
+ hicn_face_cons_add (&src_addr4.ip4, &src_addr6.ip6, swif, &faceid1,
+ &faceid2);
/* *INDENT-OFF* */
REPLY_MACRO2 (VL_API_HICN_API_REGISTER_CONS_APP_REPLY, (
{
ip_address_encode(&src_addr4, IP46_TYPE_ANY, &rmp->src_addr4);
ip_address_encode(&src_addr6, IP46_TYPE_ANY, &rmp->src_addr6);
- rmp->faceid = clib_net_to_host_u32(faceid);
+ rmp->faceid1 = clib_net_to_host_u32(faceid1);
+ rmp->faceid2 = clib_net_to_host_u32(faceid2);
}));
/* *INDENT-ON* */
}
+static void
+vl_api_hicn_api_face_cons_del_t_handler (vl_api_hicn_api_face_cons_del_t * mp)
+{
+ vl_api_hicn_api_face_cons_del_reply_t *rmp;
+ int rv = HICN_ERROR_FACE_NOT_FOUND;
+
+ hicn_main_t *sm = &hicn_main;
+
+ hicn_face_id_t faceid = clib_net_to_host_u32 (mp->faceid);
+ rv = hicn_face_cons_del (faceid);
+
+ REPLY_MACRO (VL_API_HICN_API_FACE_CONS_DEL_REPLY /* , rmp, mp, rv */ );
+}
+
+
/************************************************************************************/
#define vl_msg_name_crc_list