summaryrefslogtreecommitdiffstats
path: root/hicn-plugin/src/strategy.c
diff options
context:
space:
mode:
authorAlberto Compagno <acompagn+fdio@cisco.com>2019-01-19 17:28:57 +0100
committerAlberto Compagno <acompagn+fdio@cisco.com>2019-01-19 17:35:54 +0100
commitc7f942175b8c25c77ddc21561b52e3e6b5620b80 (patch)
treed9cecc4574ae9ed2f4a9e041010c8794e6001363 /hicn-plugin/src/strategy.c
parentd13d37534d9449dd54277af664310d5f957dc44a (diff)
Improved performance on data-fwd node:
- Removed full pit entry initialization in favor of a lighter initialization on few fields - Squeezed pit entry size in order to store only the number of incomplete faces (as set in HICN_PARAM_PIT_ENTRY_PHOPS_MAX). The bitmap size is now determined by HICN_PARAM_FACES_MAX and optimized to do a fast lookup Replaced the field is_appface with the field flags in the hicn_buffer_t: - is_appface is now a flag with value 0x01 (HICN_BUFFER_FLAGS_FACE_IS_APP) - Added flag HICN_BUFFER_FLAGS_PKT_LESS_TWO_CL (0x02) to handle the copy of pkt with length < than 2*CACHE_LINES (in this case cloning is prevented by the cloning function in vpp). Such flag is initialized by the incoming face of the pkt. Change-Id: Ia956fd5719a28ee29f7fa2fd23d283964743efd8 Signed-off-by: Alberto Compagno <acompagn+fdio@cisco.com>
Diffstat (limited to 'hicn-plugin/src/strategy.c')
-rwxr-xr-xhicn-plugin/src/strategy.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/hicn-plugin/src/strategy.c b/hicn-plugin/src/strategy.c
index 56de34e6b..247de9d07 100755
--- a/hicn-plugin/src/strategy.c
+++ b/hicn-plugin/src/strategy.c
@@ -41,7 +41,8 @@ hicn_new_interest (hicn_strategy_runtime_t * rt, vlib_buffer_t * b0,
u32 * next, f64 tnow, u8 * nameptr,
u16 namelen, dpo_id_t * outface, int nh_idx,
index_t hicn_dpo_idx, hicn_strategy_vft_t * strategy,
- u8 isv6, vl_api_hicn_api_node_stats_get_reply_t * stats)
+ dpo_type_t dpo_type, u8 isv6,
+ vl_api_hicn_api_node_stats_get_reply_t * stats)
{
int ret;
hicn_hash_node_t *nodep;
@@ -50,8 +51,8 @@ hicn_new_interest (hicn_strategy_runtime_t * rt, vlib_buffer_t * b0,
hicn_main_t *sm = &hicn_main;
hicn_buffer_t *hicnb0 = hicn_get_buffer (b0);
u32 node_id0 = 0;
- u8 dpo_ctx_id0 = 0;
- u8 vft_id0 = 0;
+ u8 dpo_ctx_id0 = vnet_buffer (b0)->ip.adj_index[VLIB_TX];
+ u8 vft_id0 = dpo_type;
u8 is_cs0 = 0;
u8 hash_entry_id = 0;
u8 bucket_is_overflow = 0;
@@ -92,6 +93,7 @@ hicn_new_interest (hicn_strategy_runtime_t * rt, vlib_buffer_t * b0,
hicnb0->name_hash, &node_id0, &dpo_ctx_id0, &vft_id0,
&is_cs0, &hash_entry_id, &bucket_id,
&bucket_is_overflow);
+
if (ret == HICN_ERROR_NONE)
{
strategy->hicn_add_interest (vnet_buffer (b0)->ip.adj_index[VLIB_TX],
@@ -140,6 +142,7 @@ hicn_forward_interest_fn (vlib_main_t * vm,
vlib_node_runtime_t * node,
vlib_frame_t * frame,
hicn_strategy_vft_t * strategy,
+ dpo_type_t dpo_type,
vlib_node_registration_t * hicn_strategy_node)
{
@@ -221,7 +224,7 @@ hicn_forward_interest_fn (vlib_main_t * vm,
hicn_new_interest (rt, b0, &next0, tnow, nameptr, namelen,
outface, nh_idx,
vnet_buffer (b0)->ip.adj_index[VLIB_TX],
- strategy, isv6, &stats);
+ strategy, dpo_type, isv6, &stats);
}
/* Maybe trace */
if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE) &&