From 6570a746680fb9f99718183157909acfd2c85cad Mon Sep 17 00:00:00 2001 From: Alberto Compagno Date: Fri, 22 Feb 2019 10:06:58 +0100 Subject: [HICN-74] Data with lifetime 0 are never cached in the CS. When such data is received the PIT entry is removed. If the data comes from the push node the data is dropped. Change-Id: I8780e16cca30ad8298f1a494f1138f8b35ae0fab Signed-off-by: Alberto Compagno --- hicn-plugin/src/data_push_node.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'hicn-plugin/src/data_push_node.c') diff --git a/hicn-plugin/src/data_push_node.c b/hicn-plugin/src/data_push_node.c index d530173bc..b955a765d 100644 --- a/hicn-plugin/src/data_push_node.c +++ b/hicn-plugin/src/data_push_node.c @@ -97,7 +97,7 @@ hicn_new_data (vlib_main_t * vm, hicn_data_push_runtime_t * rt, u32 bi0 = vlib_get_buffer_index (vm, b0); hicn_hash_node_t *nodep; hicn_pcs_entry_t *pitp; - hicn_header_t *hicn0; + hicn_header_t *hicn0 = vlib_buffer_get_current (b0); hicn_buffer_t *hicnb0 = hicn_get_buffer (b0); u32 node_id0 = 0; u8 dpo_ctx_id0 = ~0; @@ -108,6 +108,17 @@ hicn_new_data (vlib_main_t * vm, hicn_data_push_runtime_t * rt, u8 bucket_is_overflow = 0; hicn_lifetime_t dmsg_lifetime; + hicnb0 = hicn_get_buffer (b0); + hicn_type_t type = hicnb0->type; + hicn_ops_vft[type.l1]->get_lifetime (type, &hicn0->protocol, + &dmsg_lifetime); + + if (!dmsg_lifetime) + { + vlib_buffer_free_one (vm, bi0); + return HICN_ERROR_NONE; + } + /* Create PIT node and init PIT entry */ nodep = hicn_hashtb_alloc_node (rt->pitcs->pcs_table); if (PREDICT_FALSE (nodep == NULL)) @@ -121,12 +132,6 @@ hicn_new_data (vlib_main_t * vm, hicn_data_push_runtime_t * rt, hicn_pit_init_data (pitp); pitp->shared.create_time = tnow; - hicn0 = vlib_buffer_get_current (b0); - - hicn_type_t type = hicnb0->type; - hicn_ops_vft[type.l1]->get_lifetime (type, &hicn0->protocol, - &dmsg_lifetime); - if (dmsg_lifetime < HICN_PARAM_CS_LIFETIME_MIN || dmsg_lifetime > HICN_PARAM_CS_LIFETIME_MAX) { @@ -238,10 +243,13 @@ hicn_data_push_fn (vlib_main_t * vm, ret0 = hicn_data_parse_pkt (b0, &name, &namelen, &hicn0, &isv6); nameptr = (u8 *) (&name); + if (PREDICT_TRUE (ret0 == HICN_ERROR_NONE)) - hicn_new_data (vm, rt, b0, &to_forward, &n_to_forward, tnow, nameptr, - namelen, isv6); - stats.pkts_data_count++; + { + hicn_new_data (vm, rt, b0, &to_forward, &n_to_forward, tnow, + nameptr, namelen, isv6); + stats.pkts_data_count++; + } } to_forward -= n_to_forward; -- cgit 1.2.3-korg