summaryrefslogtreecommitdiffstats
path: root/hicn-plugin/src/faces/ip
diff options
context:
space:
mode:
Diffstat (limited to 'hicn-plugin/src/faces/ip')
-rwxr-xr-xhicn-plugin/src/faces/ip/dpo_ip.c13
-rwxr-xr-xhicn-plugin/src/faces/ip/dpo_ip.h44
-rwxr-xr-xhicn-plugin/src/faces/ip/face_ip_node.c6
-rwxr-xr-xhicn-plugin/src/faces/ip/iface_ip_node.c8
4 files changed, 43 insertions, 28 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;
}
diff --git a/hicn-plugin/src/faces/ip/dpo_ip.h b/hicn-plugin/src/faces/ip/dpo_ip.h
index 675443277..426d5a146 100755
--- a/hicn-plugin/src/faces/ip/dpo_ip.h
+++ b/hicn-plugin/src/faces/ip/dpo_ip.h
@@ -33,7 +33,7 @@ void hicn_dpo_ip_module_init (void);
* method adds a lock on the face state.
*
* @param dpo: Result of the lookup. If the face doesn't exist dpo = NULL
- * @param is_appface: Boolean that indicates whether the face is an application
+ * @param hicnb_flags: Flags that indicate whether the face is an application
* face or not
* @param local_addr: Ip v4 local address of the face
* @param sw_if: software interface id of the face
@@ -42,7 +42,7 @@ void hicn_dpo_ip_module_init (void);
*/
always_inline int
hicn_dpo_ip4_lock_from_local (dpo_id_t * dpo,
- u8 * is_appface,
+ u8 * hicnb_flags,
const ip4_address_t * local_addr, u32 sw_if)
{
hicn_face_t *face =
@@ -51,7 +51,10 @@ hicn_dpo_ip4_lock_from_local (dpo_id_t * dpo,
if (PREDICT_FALSE (face == NULL))
return HICN_ERROR_FACE_NOT_FOUND;
- *is_appface = face->shared.flags & HICN_FACE_FLAGS_APPFACE_PROD;
+ *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT;
+ *hicnb_flags |=
+ (face->shared.flags & HICN_FACE_FLAGS_APPFACE_PROD) >>
+ HICN_FACE_FLAGS_APPFACE_PROD_BIT;
hicn_face_id_t dpoi_index = hicn_dpoi_get_index (face);
dpo_set (dpo, hicn_face_ip_type, DPO_PROTO_IP4, dpoi_index);
@@ -66,7 +69,7 @@ hicn_dpo_ip4_lock_from_local (dpo_id_t * dpo,
* method adds a lock on the face state.
*
* @param dpo: Result of the lookup. If the face doesn't exist dpo = NULL
- * @param is_appface: Boolean that indicates whether the face is an application
+ * @param hicnb_flags: Flags that indicate whether the face is an application
* face or not
* @param local_addr: Ip v6 local address of the face
* @param sw_if: software interface id of the face
@@ -75,7 +78,7 @@ hicn_dpo_ip4_lock_from_local (dpo_id_t * dpo,
*/
always_inline int
hicn_dpo_ip6_lock_from_local (dpo_id_t * dpo,
- u8 * is_appface,
+ u8 * hicnb_flags,
const ip6_address_t * local_addr, u32 sw_if)
{
hicn_face_t *face =
@@ -84,7 +87,10 @@ hicn_dpo_ip6_lock_from_local (dpo_id_t * dpo,
if (PREDICT_FALSE (face == NULL))
return HICN_ERROR_FACE_NOT_FOUND;
- *is_appface = face->shared.flags & HICN_FACE_FLAGS_APPFACE_PROD;
+ *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT;
+ *hicnb_flags |=
+ (face->shared.flags & HICN_FACE_FLAGS_APPFACE_PROD) >>
+ HICN_FACE_FLAGS_APPFACE_PROD_BIT;
hicn_face_id_t dpoi_index = hicn_dpoi_get_index (face);
dpo_set (dpo, hicn_face_ip_type, DPO_PROTO_IP6, dpoi_index);
@@ -100,7 +106,7 @@ hicn_dpo_ip6_lock_from_local (dpo_id_t * dpo,
* address and returns its dpo. This method adds a lock on the face state.
*
* @param dpo: Result of the lookup
- * @param is_appface: Boolean that indicates whether the face is an application
+ * @param hicnb_flags: Flags that indicate whether the face is an application
* face or not
* @param local_addr: Ip v4 local address of the face
* @param remote_addr: Ip v4 remote address of the face
@@ -109,7 +115,7 @@ hicn_dpo_ip6_lock_from_local (dpo_id_t * dpo,
*/
always_inline void
hicn_dpo_ip4_add_and_lock_from_remote (dpo_id_t * dpo,
- u8 * is_appface,
+ u8 * hicnb_flags,
const ip4_address_t * local_addr,
const ip4_address_t * remote_addr,
u32 sw_if, u32 node_index)
@@ -125,7 +131,7 @@ hicn_dpo_ip4_add_and_lock_from_remote (dpo_id_t * dpo,
ip46_address_t remote_addr46 = to_ip46 (0, (u8 *) remote_addr);
hicn_iface_ip_add (&local_addr46, &remote_addr46, sw_if, &dpoi_index);
- *is_appface = 0;
+ *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT;
dpo_set (dpo, hicn_face_ip_type, DPO_PROTO_IP4, dpoi_index);
dpo->dpoi_next_node = node_index;
@@ -135,7 +141,10 @@ hicn_dpo_ip4_add_and_lock_from_remote (dpo_id_t * dpo,
}
/* Code replicated on purpose */
- *is_appface = face->shared.flags & HICN_FACE_FLAGS_APPFACE_PROD;
+ *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT;
+ *hicnb_flags |=
+ (face->shared.flags & HICN_FACE_FLAGS_APPFACE_PROD) >>
+ HICN_FACE_FLAGS_APPFACE_PROD_BIT;
hicn_face_id_t dpoi_index = hicn_dpoi_get_index (face);
dpo_set (dpo, hicn_face_ip_type, DPO_PROTO_IP4, dpoi_index);
@@ -148,7 +157,7 @@ hicn_dpo_ip4_add_and_lock_from_remote (dpo_id_t * dpo,
* address and returns its dpo. This method adds a lock on the face state.
*
* @param dpo: Result of the lookup
- * @param is_appface: Boolean that indicates whether the face is an application
+ * @param hicnb_flags: Flags that indicate whether the face is an application
* face or not
* @param local_addr: Ip v6 local address of the face
* @param remote_addr: Ip v6 remote address of the face
@@ -157,11 +166,15 @@ hicn_dpo_ip4_add_and_lock_from_remote (dpo_id_t * dpo,
*/
always_inline void
hicn_dpo_ip6_add_and_lock_from_remote (dpo_id_t * dpo,
- u8 * is_appface,
+ u8 * hicnb_flags,
const ip6_address_t * local_addr,
const ip6_address_t * remote_addr,
u32 sw_if, u32 node_index)
{
+ dpo->dpoi_type = DPO_FIRST;
+ dpo->dpoi_proto = DPO_PROTO_NONE;
+ dpo->dpoi_index = INDEX_INVALID;
+ dpo->dpoi_next_node = 0;
/*All (complete) faces are indexed by remote addess as well */
hicn_face_t *face =
hicn_face_ip6_get (remote_addr, sw_if, &hicn_face_ip_remote_hashtb);
@@ -172,7 +185,7 @@ hicn_dpo_ip6_add_and_lock_from_remote (dpo_id_t * dpo,
hicn_iface_ip_add ((ip46_address_t *) local_addr,
(ip46_address_t *) remote_addr, sw_if, &dpoi_index);
- *is_appface = 0;
+ *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT;
dpo_set (dpo, hicn_face_ip_type, DPO_PROTO_IP4, dpoi_index);
dpo->dpoi_next_node = node_index;
@@ -181,7 +194,10 @@ hicn_dpo_ip6_add_and_lock_from_remote (dpo_id_t * dpo,
return;
}
/* Code replicated on purpose */
- *is_appface = face->shared.flags & HICN_FACE_FLAGS_APPFACE_PROD;
+ *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT;
+ *hicnb_flags |=
+ (face->shared.flags & HICN_FACE_FLAGS_APPFACE_PROD) >>
+ HICN_FACE_FLAGS_APPFACE_PROD_BIT;
index_t dpoi_index = hicn_dpoi_get_index (face);
dpo_set (dpo, hicn_face_ip_type, DPO_PROTO_IP6, dpoi_index);
diff --git a/hicn-plugin/src/faces/ip/face_ip_node.c b/hicn-plugin/src/faces/ip/face_ip_node.c
index 6081e4737..b3577f65f 100755
--- a/hicn-plugin/src/faces/ip/face_ip_node.c
+++ b/hicn-plugin/src/faces/ip/face_ip_node.c
@@ -140,7 +140,7 @@ typedef enum
\
ret = LOCK_FROM_LOCAL_IP##ipv \
(&(hicnb0->face_dpo_id), \
- &hicnb0->is_appface, \
+ &hicnb0->flags, \
&(ip_hdr->dst_address), \
vnet_buffer (b0)->sw_if_index[VLIB_RX]); \
\
@@ -217,13 +217,13 @@ typedef enum
\
ret0 = LOCK_FROM_LOCAL_IP##ipv \
(&(hicnb0->face_dpo_id), \
- &hicnb0->is_appface, \
+ &hicnb0->flags, \
&(ip_hdr0->dst_address), \
vnet_buffer (b0)->sw_if_index[VLIB_RX]); \
\
ret1 = LOCK_FROM_LOCAL_IP##ipv \
(&(hicnb1->face_dpo_id), \
- &hicnb1->is_appface, \
+ &hicnb1->flags, \
&(ip_hdr1->dst_address), \
vnet_buffer (b1)->sw_if_index[VLIB_RX]); \
\
diff --git a/hicn-plugin/src/faces/ip/iface_ip_node.c b/hicn-plugin/src/faces/ip/iface_ip_node.c
index 8df0467f0..9ca00d7bf 100755
--- a/hicn-plugin/src/faces/ip/iface_ip_node.c
+++ b/hicn-plugin/src/faces/ip/iface_ip_node.c
@@ -143,7 +143,7 @@ typedef enum
{ \
vlib_buffer_t *b1; \
b1 = vlib_get_buffer (vm, from[1]); \
- CLIB_PREFETCH (b1, 2*CLIB_CACHE_LINE_BYTES, STORE); \
+ CLIB_PREFETCH (b1, 2*CLIB_CACHE_LINE_BYTES, STORE); \
CLIB_PREFETCH (b1->data, CLIB_CACHE_LINE_BYTES , LOAD); \
} \
/* Dequeue a packet buffer */ \
@@ -171,7 +171,7 @@ typedef enum
\
DPO_ADD_LOCK_IP##ipv \
(&(hicnb0->face_dpo_id), \
- &hicnb0->is_appface, \
+ &hicnb0->flags, \
local_address, \
&(ip_hdr->src_address), \
vnet_buffer(b0)->sw_if_index[VLIB_RX], \
@@ -248,7 +248,7 @@ typedef enum
\
DPO_ADD_LOCK_IP##ipv \
(&(hicnb0->face_dpo_id), \
- &hicnb0->is_appface, \
+ &hicnb0->flags, \
local_address0, \
&(ip_hdr0->src_address), \
vnet_buffer(b0)->sw_if_index[VLIB_RX], \
@@ -256,7 +256,7 @@ typedef enum
\
DPO_ADD_LOCK_IP##ipv \
(&(hicnb1->face_dpo_id), \
- &hicnb1->is_appface, \
+ &hicnb1->flags, \
local_address1, \
&(ip_hdr1->src_address), \
vnet_buffer(b1)->sw_if_index[VLIB_RX], \