From c1b56d5861829a23289f42cecd716e681b520cf0 Mon Sep 17 00:00:00 2001 From: Alberto Compagno Date: Wed, 22 Apr 2020 18:29:52 +0200 Subject: [HICN-602] Added bidirectional udp tunnels - Implemented a udp decapsulation node - Added a hash table to identify the incoming udp tunnel when an interest or data packets are received - Added udp punting through udp_register_dst_port Signed-off-by: Alberto Compagno Change-Id: Iffea4d81c5ea8ce8ccbbfd749113f06a698a2afe --- hicn-plugin/src/faces/face_node.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'hicn-plugin/src/faces/face_node.c') diff --git a/hicn-plugin/src/faces/face_node.c b/hicn-plugin/src/faces/face_node.c index a52967dae..5b42f0dde 100644 --- a/hicn-plugin/src/faces/face_node.c +++ b/hicn-plugin/src/faces/face_node.c @@ -18,7 +18,6 @@ #include "face.h" #include "face_node.h" #include "dpo_face.h" -//#include "app/face_prod.h" #include "../strategy_dpo_manager.h" #include "face.h" #include "../cache_policies/cs_lru.h" @@ -465,12 +464,16 @@ VLIB_REGISTER_NODE(hicn6_face_input_node) = typedef enum { HICN4_FACE_OUTPUT_NEXT_ECHO_REPLY, + HICN4_FACE_OUTPUT_NEXT_UDP4_ENCAP, + HICN4_FACE_OUTPUT_NEXT_UDP6_ENCAP, HICN4_FACE_OUTPUT_N_NEXT, } hicn4_face_output_next_t; typedef enum { HICN6_FACE_OUTPUT_NEXT_ECHO_REPLY, + HICN6_FACE_OUTPUT_NEXT_UDP4_ENCAP, + HICN6_FACE_OUTPUT_NEXT_UDP6_ENCAP, HICN6_FACE_OUTPUT_N_NEXT, } hicn6_face_output_next_t; @@ -563,7 +566,7 @@ hicn_face_rewrite_interest (vlib_main_t * vm, vlib_buffer_t * b0, ip46_address_reset (&temp_addr); hicn_type_t type = hicn_get_buffer (b0)->type; hicn_ops_vft[type.l1]->rewrite_interest (type, &hicn->protocol, - &face->nat_addr, &temp_addr); + &face->nat_addr, &temp_addr); if (ip46_address_is_ip4(&face->nat_addr)) b0->flags |= VNET_BUFFER_F_OFFLOAD_IP_CKSUM; @@ -616,7 +619,7 @@ hicn6_face_output_trace_t; do { \ vlib_buffer_t *b0; \ u32 bi0; \ - u32 next0 = IP_LOOKUP_NEXT_DROP; \ + u32 next0 = ~0; \ hicn_face_t * face; \ \ /* Prefetch for next iteration. */ \ @@ -678,8 +681,8 @@ hicn6_face_output_trace_t; do { \ vlib_buffer_t *b0, *b1; \ u32 bi0, bi1; \ - u32 next0 = IP_LOOKUP_NEXT_DROP; \ - u32 next1 = IP_LOOKUP_NEXT_DROP; \ + u32 next0 = ~0; \ + u32 next1 = ~0; \ hicn_face_t *face0, *face1; \ \ /* Prefetch for next iteration. */ \ @@ -844,6 +847,8 @@ VLIB_REGISTER_NODE(hicn4_face_output_node) = .next_nodes = { [HICN4_FACE_OUTPUT_NEXT_ECHO_REPLY] = "hicn4-face-input", + [HICN4_FACE_OUTPUT_NEXT_UDP4_ENCAP] = "udp4-encap", + [HICN4_FACE_OUTPUT_NEXT_UDP6_ENCAP] = "udp6-encap" } }; /* *INDENT-ON* */ @@ -920,7 +925,9 @@ VLIB_REGISTER_NODE(hicn6_face_output_node) = /* Reusing the list of nodes from lookup to be compatible with neighbour discovery */ .next_nodes = { - [HICN6_FACE_OUTPUT_NEXT_ECHO_REPLY] = "hicn6-face-input" + [HICN6_FACE_OUTPUT_NEXT_ECHO_REPLY] = "hicn6-face-input", + [HICN6_FACE_OUTPUT_NEXT_UDP4_ENCAP] = "udp4-encap", + [HICN6_FACE_OUTPUT_NEXT_UDP6_ENCAP] = "udp6-encap" } }; /* *INDENT-ON* */ -- cgit 1.2.3-korg