summaryrefslogtreecommitdiffstats
path: root/hicn-plugin/src/faces/ip/dpo_ip.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/faces/ip/dpo_ip.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/faces/ip/dpo_ip.c')
-rwxr-xr-xhicn-plugin/src/faces/ip/dpo_ip.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/hicn-plugin/src/faces/ip/dpo_ip.c b/hicn-plugin/src/faces/ip/dpo_ip.c
index 1b2dbcff9..de71f1b01 100755
--- a/hicn-plugin/src/faces/ip/dpo_ip.c
+++ b/hicn-plugin/src/faces/ip/dpo_ip.c
@@ -78,7 +78,7 @@ hicn_dpo_ip4_create (dpo_id_t * dpo,
/* If local matches the dpoi is a face */
hicn_face_t *face =
hicn_face_ip4_get (local_addr, sw_if, &hicn_face_ip_local_hashtb);
- u8 is_appface;
+ u8 hicnb_flags;
if (face != NULL)
return HICN_ERROR_FACE_ALREADY_CREATED;
@@ -87,7 +87,7 @@ hicn_dpo_ip4_create (dpo_id_t * dpo,
if (face == NULL)
{
- hicn_dpo_ip4_add_and_lock_from_remote (dpo, &is_appface, local_addr,
+ hicn_dpo_ip4_add_and_lock_from_remote (dpo, &hicnb_flags, local_addr,
remote_addr, sw_if, node_index);
*face_id = (hicn_face_id_t) dpo->dpoi_index;
face = hicn_dpoi_get_from_idx (*face_id);
@@ -127,7 +127,7 @@ hicn_dpo_ip6_create (dpo_id_t * dpo,
hicn_face_t *face =
hicn_face_ip6_get (local_addr, sw_if, &hicn_face_ip_local_hashtb);
- u8 is_appface;
+ u8 hicnb_flags;
if (face != NULL)
return HICN_ERROR_FACE_ALREADY_CREATED;
@@ -137,7 +137,7 @@ hicn_dpo_ip6_create (dpo_id_t * dpo,
/* If remote matches the dpoi is a iface */
if (face == NULL)
{
- hicn_dpo_ip6_add_and_lock_from_remote (dpo, &is_appface, local_addr,
+ hicn_dpo_ip6_add_and_lock_from_remote (dpo, &hicnb_flags, local_addr,
remote_addr, sw_if, node_index);
*face_id = (hicn_face_id_t) dpo->dpoi_index;
face = hicn_dpoi_get_from_idx (*face_id);
@@ -172,9 +172,8 @@ hicn_dpo_ip_create_from_face (hicn_face_t * face, dpo_id_t * dpo,
hicn_face_id_t face_dpoi_id = hicn_dpoi_get_index (face);
hicn_face_ip_t *ip_face = (hicn_face_ip_t *) face->data;
dpo_set (dpo, face->shared.face_type,
- ip46_address_is_ip4 (&ip_face->
- local_addr) ? DPO_PROTO_IP4 : DPO_PROTO_IP6,
- face_dpoi_id);
+ ip46_address_is_ip4 (&ip_face->local_addr) ? DPO_PROTO_IP4 :
+ DPO_PROTO_IP6, face_dpoi_id);
dpo->dpoi_next_node = dpoi_next_node;
}