diff options
author | 2020-04-07 11:43:39 +0200 | |
---|---|---|
committer | 2020-05-04 11:16:59 +0200 | |
commit | c61e2e149421b849888bea0239c50607edce35ac (patch) | |
tree | f1191d338c9e27c77484c0d8bed6118c6d4612b6 /hicn-plugin/src/faces/udp/dpo_udp.h | |
parent | dee66271e7f84cb756dae31d154982d5b6bb9807 (diff) |
[HICN-590] Removed andjacency type specific face implementation
Changes in the new implementation are:
- the adjacency index is replaced with a dpo that allows the single face node
to dispatch the packet to the right vlib node.
- local and remote address in the face are replaced with a single nat address
which is used to perform the nat operation when rewriting an interest or a
data (in case of tunnels the nat address will be equal to 0)
- the list of next hop in the load balance is no longer a list of dpos but
a list of face id (this makes the code easier and increases the number of
next hop we supports)
Signed-off-by: Alberto Compagno <acompagn+fdio@cisco.com>
Change-Id: I4ac2b4eb09425bfe1b3ca9f82d7d0ff564297b0d
Diffstat (limited to 'hicn-plugin/src/faces/udp/dpo_udp.h')
-rw-r--r-- | hicn-plugin/src/faces/udp/dpo_udp.h | 289 |
1 files changed, 0 insertions, 289 deletions
diff --git a/hicn-plugin/src/faces/udp/dpo_udp.h b/hicn-plugin/src/faces/udp/dpo_udp.h deleted file mode 100644 index 98abf3d29..000000000 --- a/hicn-plugin/src/faces/udp/dpo_udp.h +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __HICN_DPO_UDP_H__ -#define __HICN_DPO_UDP_H__ - -#include <vnet/adj/adj_types.h> -#include <vnet/ip/ip4_packet.h> -#include <vnet/ip/ip6_packet.h> - -#include "face_udp.h" -#include "../face.h" -#include "../../error.h" - -extern u32 strategy_face_udp4_vlib_edge; -extern u32 strategy_face_udp6_vlib_edge; - - -/** - * @brief Initialize the internal structures of the dpo udp face module. - */ -void hicn_dpo_udp_module_init (void); - -/** - * @brief Create a udp face and its corresponding dpo. Meant to be used for the - * control plane. - * - * @param dpo: Data plane object that point to the face created. - * @param local_addr: Local address of the UDP tunnel - * @param remote_addr: Remote address of the UDP tunnel - * @param local_port: Local port of the UDP tunnel - * @param remote_port: Remote port of the UDP tunnel - * @param adj: Ip adjacency corresponding to the remote address in the face - * @param node_index: vlib edge index to use in the packet processing - * @param flags: Flags of the face - * @param face_id: Identifier for the face (dpoi_index) - * @return HICN_ERROR_FACE_ALREADY_CREATED if the face exists, otherwise HICN_ERROR_NONE - */ -int -hicn_dpo_udp4_create (dpo_id_t * dpo, - const ip4_address_t * local_addr, - const ip4_address_t * remote_addr, - u16 local_port, u16 remote_port, - u32 sw_if, - adj_index_t adj, - u32 node_index, - hicn_face_flags_t flags, hicn_face_id_t * face_id); - -/** - * @brief Retrieve a face using the face identifier, i.e., the quadruplet (local_addr, remote_addr, - * local_port, remote_port). This method adds a lock on the face state. - * - * @param dpo: Result of the lookup. If the face doesn't exist dpo = NULL - * @param local_addr: Local address of the UDP tunnel - * @param remote_addr: Remote address of the UDP tunnel - * @param local_port: Local port of the UDP tunnel - * @param remote_port: Remote port of the UDP tunnel - * @param hicnb_flags: Flags that indicate whether the face is an application - * face or not in the hicn_buffer. (Currently only IP faces can be appface) - * - * @result HICN_ERROR_FACE_NOT_FOUND if the face does not exist, otherwise HICN_ERROR_NONE. - */ -always_inline int -hicn_dpo_udp4_lock (dpo_id_t * dpo, - const ip4_address_t * local_addr, - const ip4_address_t * remote_addr, - u16 local_port, u16 remote_port, u8 * hicnb_flags) -{ - dpo->dpoi_type = DPO_FIRST; - dpo->dpoi_proto = DPO_PROTO_NONE; - dpo->dpoi_index = INDEX_INVALID; - dpo->dpoi_next_node = 0; - - hicn_face_t *face = - hicn_face_udp4_get (local_addr, remote_addr, local_port, remote_port); - - if (PREDICT_FALSE (face == NULL)) - return HICN_ERROR_FACE_NOT_FOUND; - - index_t dpoi_index = hicn_dpoi_get_index (face); - dpo_set (dpo, hicn_face_udp_type, DPO_PROTO_IP4, dpoi_index); - dpo->dpoi_next_node = strategy_face_udp4_vlib_edge; - dpo_unlock (dpo); - - *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT; - - return HICN_ERROR_NONE; -} - -/** - * @brief Retrieve, or create if it doesn't exist, a face from the face - * identifier (local_addr, remote_addr, local_port, remote_port) and returns its - * dpo. This method adds a lock on the face state. - * - * @param dpo: Result of the lookup - * @param local_addr: Local address of the UDP tunnel - * @param remote_addr: Remote address of the UDP tunnel - * @param local_port: Local port of the UDP tunnel - * @param remote_port: Remote port of the UDP tunnel - * @param hicnb_flags: Flags that indicate whether the face is an application - * face or not. (Currently only IP faces can be appface) - * @param node_index: vlib edge index to use in the packet processing - */ -always_inline void -hicn_dpo_udp4_add_and_lock (dpo_id_t * dpo, - const ip4_address_t * local_addr, - const ip4_address_t * remote_addr, - u16 local_port, u16 remote_port, - u32 node_index, u8 * hicnb_flags, u32 sw_if) -{ - dpo->dpoi_type = DPO_FIRST; - dpo->dpoi_proto = DPO_PROTO_NONE; - dpo->dpoi_index = INDEX_INVALID; - dpo->dpoi_next_node = 0; - - hicn_face_t *face = - hicn_face_udp4_get (local_addr, remote_addr, local_port, remote_port); - - if (face == NULL) - { - - hicn_face_id_t dpoi_index; - hicn_iface_udp4_add (local_addr, remote_addr, local_port, remote_port, - sw_if, &dpoi_index); - - *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT; - dpo_set (dpo, hicn_face_udp_type, DPO_PROTO_IP4, dpoi_index); - dpo->dpoi_next_node = node_index; - dpo_unlock (dpo); - - return; - } - - *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT; - - hicn_face_id_t dpoi_index = hicn_dpoi_get_index (face); - dpo_set (dpo, hicn_face_udp_type, DPO_PROTO_IP4, dpoi_index); - dpo->dpoi_next_node = node_index; - dpo_unlock (dpo); -} - -/** - * @brief Create a udp face and its corresponding dpo. Meant to be used for the - * control plane. - * - * @param dpo: Data plane object that point to the face created. - * @param local_addr: Local address of the UDP tunnel - * @param remote_addr: Remote address of the UDP tunnel - * @param local_port: Local port of the UDP tunnel - * @param remote_port: Remote port of the UDP tunnel - * @param adj: Ip adjacency corresponding to the remote address in the face - * @param node_index: vlib edge index to use in the packet processing - * @param flags: Flags of the face - * @param face_id: Identifier for the face (dpoi_index) - * @return HICN_ERROR_FACE_ALREADY_CREATED if the face exists, otherwise HICN_ERROR_NONE - */ -int -hicn_dpo_udp6_create (dpo_id_t * dpo, - const ip6_address_t * local_addr, - const ip6_address_t * remote_addr, - u16 local_port, u16 remote_port, - u32 sw_if, - adj_index_t adj, - u32 node_index, - hicn_face_flags_t flags, hicn_face_id_t * face_id); - - -/** - * @brief Retrieve a face using the face identifier, i.e., the quadruplet (local_addr, remote_addr, - * local_port, remote_port). This method adds a lock on the face state. - * - * @param dpo: Result of the lookup. If the face doesn't exist dpo = NULL - * @param local_addr: Local address of the UDP tunnel - * @param remote_addr: Remote address of the UDP tunnel - * @param local_port: Local port of the UDP tunnel - * @param remote_port: Remote port of the UDP tunnel - * @param hicnb_flags: Flags that indicate whether the face is an application - * face or not. (Currently only IP faces can be appface) - * - * @result HICN_ERROR_FACE_NOT_FOUND if the face does not exist, otherwise HICN_ERROR_NONE. - */ -always_inline int -hicn_dpo_udp6_lock (dpo_id_t * dpo, - const ip6_address_t * local_addr, - const ip6_address_t * remote_addr, - u16 local_port, u16 remote_port, u8 * hicnb_flags) -{ - dpo->dpoi_type = DPO_FIRST; - dpo->dpoi_proto = DPO_PROTO_NONE; - dpo->dpoi_index = INDEX_INVALID; - dpo->dpoi_next_node = 0; - - hicn_face_t *face = - hicn_face_udp6_get (local_addr, remote_addr, local_port, remote_port); - - - if (PREDICT_FALSE (face == NULL)) - return HICN_ERROR_FACE_NOT_FOUND; - - hicn_face_id_t dpoi_index = hicn_dpoi_get_index (face); - dpo_set (dpo, hicn_face_udp_type, DPO_PROTO_IP6, dpoi_index); - dpo->dpoi_next_node = strategy_face_udp6_vlib_edge; - dpo_unlock (dpo); - *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT; - - return HICN_ERROR_NONE; -} - -/** - * @brief Retrieve, or create if it doesn't exist, a face from the face - * identifier (local_addr, remote_addr, local_port, remote_port) and returns its - * dpo. This method adds a lock on the face state. - * - * @param dpo: Result of the lookup - * @param local_addr: Local address of the UDP tunnel - * @param remote_addr: Remote address of the UDP tunnel - * @param local_port: Local port of the UDP tunnel - * @param remote_port: Remote port of the UDP tunnel - * @param hicnb_flags: Flags that indicate whether the face is an application - * face or not. (Currently only IP faces can be appface) - * @param node_index: vlib edge index to use in the packet processing - */ -always_inline void -hicn_dpo_udp6_add_and_lock (dpo_id_t * dpo, - const ip6_address_t * local_addr, - const ip6_address_t * remote_addr, - u16 local_port, u16 remote_port, - u32 node_index, u8 * hicnb_flags, u32 sw_if) -{ - dpo->dpoi_type = DPO_FIRST; - dpo->dpoi_proto = DPO_PROTO_NONE; - dpo->dpoi_index = INDEX_INVALID; - dpo->dpoi_next_node = 0; - - hicn_face_t *face = - hicn_face_udp6_get (local_addr, remote_addr, local_port, remote_port); - - if (face == NULL) - { - hicn_face_id_t dpoi_index; - hicn_iface_udp6_add (local_addr, remote_addr, local_port, remote_port, - sw_if, &dpoi_index); - - *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT; - dpo_set (dpo, hicn_face_udp_type, DPO_PROTO_IP6, dpoi_index); - dpo->dpoi_next_node = node_index; - dpo_unlock (dpo); - - return; - } - - *hicnb_flags = HICN_BUFFER_FLAGS_DEFAULT; - - hicn_face_id_t dpoi_index = hicn_dpoi_get_index (face); - dpo_set (dpo, hicn_face_udp_type, DPO_PROTO_IP6, dpoi_index); - dpo->dpoi_next_node = node_index; - dpo_unlock (dpo); -} - -/** - * @brief Create a dpo from a udp face - * - * @param face Face from which to create the dpo - * @return the dpo - */ -void hicn_dpo_udp_create_from_face (hicn_face_t * face, dpo_id_t * dpo, - u16 dpoi_next_node); - -#endif // __HICN_DPO_UDP_H__ - -/* - * fd.io coding-style-patch-verification: ON - * - * Local Variables: - * eval: (c-set-style "gnu") - * End: - */ |