diff options
Diffstat (limited to 'hicn-plugin/src/faces')
-rw-r--r-- | hicn-plugin/src/faces/face.c | 1 | ||||
-rw-r--r-- | hicn-plugin/src/faces/face.h | 5 | ||||
-rw-r--r-- | hicn-plugin/src/faces/iface_node.c | 10 |
3 files changed, 13 insertions, 3 deletions
diff --git a/hicn-plugin/src/faces/face.c b/hicn-plugin/src/faces/face.c index 7ddf38910..d62054365 100644 --- a/hicn-plugin/src/faces/face.c +++ b/hicn-plugin/src/faces/face.c @@ -24,6 +24,7 @@ dpo_id_t *face_dpo_vec; hicn_face_vft_t *face_vft_vec; char **face_type_names_vec; +u8 pl_index = 1; hicn_face_t *hicn_dpoi_face_pool; diff --git a/hicn-plugin/src/faces/face.h b/hicn-plugin/src/faces/face.h index 234c3fcc2..95c78b206 100644 --- a/hicn-plugin/src/faces/face.h +++ b/hicn-plugin/src/faces/face.h @@ -189,6 +189,9 @@ extern hicn_face_vft_t *face_vft_vec; /* Vector holding the set of face names */ extern char **face_type_names_vec; +/* Pathlabel counter */ +extern u8 pl_index; + /* First face type registered in the sytem.*/ extern dpo_type_t first_type; @@ -526,7 +529,7 @@ hicn_iface_add (ip46_address_t * nat_address, int sw_if, face->dpo.dpoi_proto = DPO_PROTO_NONE; face->dpo.dpoi_index = adj_index; face->dpo.dpoi_next_node = 0; - face->pl_id = (u16) 0; + face->pl_id = pl_index++; face->flags = HICN_FACE_FLAGS_IFACE; face->locks = 1; diff --git a/hicn-plugin/src/faces/iface_node.c b/hicn-plugin/src/faces/iface_node.c index 8d8500995..82c0f75b2 100644 --- a/hicn-plugin/src/faces/iface_node.c +++ b/hicn-plugin/src/faces/iface_node.c @@ -535,8 +535,11 @@ hicn_rewrite_iface_data4 (vlib_main_t *vm, vlib_buffer_t *b0, ip46_address_t temp_addr; ip46_address_reset (&temp_addr); hicn_type_t type = hicn_get_buffer (b0)->type; + u8 flags = hicn_get_buffer (b0)->flags; + u8 reset_pl = flags & HICN_BUFFER_FLAGS_FROM_CS; int ret = hicn_ops_vft[type.l1]->rewrite_data ( - type, &hicn->protocol, &(iface->nat_addr), &(temp_addr), iface->pl_id); + type, &hicn->protocol, &(iface->nat_addr), &(temp_addr), + iface->pl_id, reset_pl); if (ret == HICN_LIB_ERROR_REWRITE_CKSUM_REQUIRED) { ensure_offload_flags (b0, 1 /* is_v4 */); @@ -567,8 +570,11 @@ hicn_rewrite_iface_data6 (vlib_main_t *vm, vlib_buffer_t *b0, ip46_address_t temp_addr; ip46_address_reset (&temp_addr); hicn_type_t type = hicn_get_buffer (b0)->type; + u8 flags = hicn_get_buffer (b0)->flags; + u8 reset_pl = flags & HICN_BUFFER_FLAGS_FROM_CS; int ret = hicn_ops_vft[type.l1]->rewrite_data ( - type, &hicn->protocol, &(iface->nat_addr), &(temp_addr), iface->pl_id); + type, &hicn->protocol, &(iface->nat_addr), &(temp_addr), + iface->pl_id, reset_pl); if (ret == HICN_LIB_ERROR_REWRITE_CKSUM_REQUIRED) { |