From 00b070cfbb3164df823653c7e1d32b7851cf0ee0 Mon Sep 17 00:00:00 2001 From: Mauro Sardara Date: Thu, 19 Jan 2023 13:33:57 +0000 Subject: fix: correctly set next node for ifaces and faces Ticket: HICN-828 Change-Id: I7853bc37e34ca4f2303a537396aef4cb8b06ec98 Signed-off-by: Mauro Sardara --- hicn-plugin/src/udp_tunnels/udp_tunnel.c | 13 +++++++++++++ hicn-plugin/src/udp_tunnels/udp_tunnel.h | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+) (limited to 'hicn-plugin/src/udp_tunnels') 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 #include #include +#include "../faces/iface_node.h" #include "../error.h" #include "../strategy_dpo_ctx.h" @@ -177,6 +178,18 @@ udp_tunnel_get_create (const ip46_address_t *src_ip, return ret; } +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 () { 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 #include +#include "../faces/face.h" + /** * @file udp_tunnel.h * @@ -108,6 +110,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 * -- cgit 1.2.3-korg