aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-plugin/src/udp_tunnels
diff options
context:
space:
mode:
authorMauro Sardara <msardara@cisco.com>2023-01-19 13:33:57 +0000
committerMauro Sardara <msardara@cisco.com>2023-01-20 10:18:55 +0000
commit00b070cfbb3164df823653c7e1d32b7851cf0ee0 (patch)
treeabf40bfd2f48e082e0f5f4fa10420b7f567a6669 /hicn-plugin/src/udp_tunnels
parentce8807815b2e9c6630f639e8dc6924f0eff74775 (diff)
fix: correctly set next node for ifaces and faces
Ticket: HICN-828 Change-Id: I7853bc37e34ca4f2303a537396aef4cb8b06ec98 Signed-off-by: Mauro Sardara <msardara@cisco.com>
Diffstat (limited to 'hicn-plugin/src/udp_tunnels')
-rw-r--r--hicn-plugin/src/udp_tunnels/udp_tunnel.c13
-rw-r--r--hicn-plugin/src/udp_tunnels/udp_tunnel.h20
2 files changed, 33 insertions, 0 deletions
diff --git a/hicn-plugin/src/udp_tunnels/udp_tunnel.c b/hicn-plugin/src/udp_tunnels/udp_tunnel.c
index d03d6a74e..5b0c0a9ef 100644
--- a/hicn-plugin/src/udp_tunnels/udp_tunnel.c
+++ b/hicn-plugin/src/udp_tunnels/udp_tunnel.c
@@ -17,6 +17,7 @@
#include <vppinfra/bihash_40_8.h>
#include <vnet/fib/fib_table.h>
#include <vnet/udp/udp_local.h>
+#include "../faces/iface_node.h"
#include "../error.h"
#include "../strategy_dpo_ctx.h"
@@ -178,6 +179,18 @@ udp_tunnel_get_create (const ip46_address_t *src_ip,
}
void
+udp_tunnel_set_face (hicn_face_id_t face_id, int isv4)
+{
+ hicn_face_t *face = NULL;
+ face = hicn_dpoi_get_from_idx (face_id);
+ ASSERT (face);
+ ASSERT (dpo_is_udp_encap (&face->dpo));
+
+ face->iface_next = isv4 ? HICN4_IFACE_OUTPUT_NEXT_UDP4_ENCAP :
+ HICN4_IFACE_OUTPUT_NEXT_UDP6_ENCAP;
+}
+
+void
udp_tunnel_init ()
{
clib_bihash_init_40_8 (&udp_tunnels_hashtb, "udp encap table", 2048,
diff --git a/hicn-plugin/src/udp_tunnels/udp_tunnel.h b/hicn-plugin/src/udp_tunnels/udp_tunnel.h
index 376adf5fa..f7865f58a 100644
--- a/hicn-plugin/src/udp_tunnels/udp_tunnel.h
+++ b/hicn-plugin/src/udp_tunnels/udp_tunnel.h
@@ -20,6 +20,8 @@
#include <vppinfra/error.h>
#include <vnet/udp/udp_encap.h>
+#include "../faces/face.h"
+
/**
* @file udp_tunnel.h
*
@@ -109,6 +111,24 @@ int udp_tunnel_del (fib_protocol_t proto, index_t fib_index,
void udp_tunnel_add_existing (index_t uei, dpo_proto_t proto);
/**
+ * @brief Check if DPO is UDP encap
+ */
+always_inline int
+dpo_is_udp_encap (const dpo_id_t *dpo)
+{
+ return dpo->dpoi_type == dpo_type_udp_ip4 ||
+ dpo->dpoi_type == dpo_type_udp_ip6;
+}
+
+always_inline dpo_proto_t
+dpo_udp_encap_get_proto (const dpo_id_t *dpo)
+{
+ return dpo->dpoi_type == dpo_type_udp_ip4 ? DPO_PROTO_IP4 : DPO_PROTO_IP6;
+}
+
+void udp_tunnel_set_face (hicn_face_id_t face_id, int isv4);
+
+/**
* @brief Init the udp tunnel module
*
*/