diff options
author | Mauro Sardara <msardara@cisco.com> | 2020-03-24 17:34:14 +0000 |
---|---|---|
committer | Mauro Sardara <msardara@cisco.com> | 2020-09-14 17:31:15 +0000 |
commit | 88509fe353767cbde707c3e3b1f29392957819f3 (patch) | |
tree | cccd51bac7966cd3138c525e8075d90341184a66 /hicn-plugin/src/hicn_api.c | |
parent | d875ae92a7fa1eaab3bc2616aeeedfc64a81fea4 (diff) |
[HICN-574] Host stack plugin for VPP.
Signed-off-by: Mauro Sardara <msardara@cisco.com>
Change-Id: I8d8fdffef31a7013265d6529c5f52f3d5ec70d18
Signed-off-by: Mauro Sardara <msardara@cisco.com>
Signed-off-by: Mauro <you@example.com>
Signed-off-by: Mauro Sardara <msardara@cisco.com>
Diffstat (limited to 'hicn-plugin/src/hicn_api.c')
-rw-r--r-- | hicn-plugin/src/hicn_api.c | 727 |
1 files changed, 0 insertions, 727 deletions
diff --git a/hicn-plugin/src/hicn_api.c b/hicn-plugin/src/hicn_api.c deleted file mode 100644 index e6050f96c..000000000 --- a/hicn-plugin/src/hicn_api.c +++ /dev/null @@ -1,727 +0,0 @@ -/* - * Copyright (c) 2017-2020 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. - */ - -#include <vlib/vlib.h> -#include <vnet/vnet.h> -#include <vppinfra/error.h> -#include <vnet/ip/format.h> -#include <vnet/ip/ip4.h> -#include <vnet/ip/ip6.h> -#include <vlibapi/api.h> -#include <vlibmemory/api.h> -#include <vnet/dpo/load_balance.h> -#include <vnet/ip/ip_types_api.h> -#include <vnet/ip/ip_format_fns.h> - -#include "faces/face.h" -#include "udp_tunnels/udp_tunnel.h" -#include "infra.h" -#include "parser.h" -#include "mgmt.h" -#include "strategy_dpo_manager.h" -#include "strategy_dpo_ctx.h" -#include "strategy.h" -#include "pg.h" -#include "error.h" -#include "faces/app/face_prod.h" -#include "faces/app/face_cons.h" -#include "route.h" - -/* define message IDs */ -#include <hicn/hicn.api_enum.h> -#include <hicn/hicn.api_types.h> - -/* define generated endian-swappers */ -#define vl_endianfun -#include <hicn/hicn_all_api_h.h> -#undef vl_endianfun - -#define REPLY_MSG_ID_BASE sm->msg_id_base -#include <vlibapi/api_helper_macros.h> - -/****** SUPPORTING FUNCTION DECLARATIONS ******/ - -/* - * Convert a unix return code to a vnet_api return code. Currently stubby: - * should have more cases. - */ -always_inline vnet_api_error_t -hicn_face_api_entry_params_serialize (hicn_face_id_t faceid, - vl_api_hicn_api_face_params_get_reply_t - * reply); - - -/****************** API MESSAGE HANDLERS ******************/ - -/****** NODE ******/ - -static void -vl_api_hicn_api_node_params_set_t_handler (vl_api_hicn_api_node_params_set_t * - mp) -{ - vl_api_hicn_api_node_params_set_reply_t *rmp; - int rv; - - hicn_main_t *sm = &hicn_main; - - int pit_max_size = clib_net_to_host_i32 (mp->pit_max_size); - pit_max_size = - pit_max_size == -1 ? HICN_PARAM_PIT_ENTRIES_DFLT : pit_max_size; - - f64 pit_max_lifetime_sec = mp->pit_max_lifetime_sec; - pit_max_lifetime_sec = - pit_max_lifetime_sec == - -1 ? HICN_PARAM_PIT_LIFETIME_DFLT_MAX_MS / SEC_MS : pit_max_lifetime_sec; - - int cs_max_size = clib_net_to_host_i32 (mp->cs_max_size); - cs_max_size = cs_max_size == -1 ? HICN_PARAM_CS_ENTRIES_DFLT : cs_max_size; - - rv = hicn_infra_plugin_enable_disable ((int) (mp->enable_disable), - pit_max_size, - pit_max_lifetime_sec, - cs_max_size, - ~0); - - REPLY_MACRO (VL_API_HICN_API_NODE_PARAMS_SET_REPLY /* , rmp, mp, rv */ ); -} - -static void -vl_api_hicn_api_node_params_get_t_handler (vl_api_hicn_api_node_params_get_t * - mp) -{ - vl_api_hicn_api_node_params_get_reply_t *rmp; - int rv = HICN_ERROR_NONE; - - hicn_main_t *sm = &hicn_main; - - /* *INDENT-OFF* */ - REPLY_MACRO2 (VL_API_HICN_API_NODE_PARAMS_GET_REPLY, ( - { - rmp->is_enabled = sm->is_enabled; - rmp->feature_cs = HICN_FEATURE_CS; - rmp->pit_max_size = clib_host_to_net_u32 (hicn_infra_pit_size); - rmp->pit_max_lifetime_sec = ((f64) sm->pit_lifetime_max_ms) / SEC_MS; - rmp->cs_max_size = clib_host_to_net_u32 (hicn_infra_cs_size); - rmp->retval = clib_host_to_net_i32 (rv); - })); - /* *INDENT-ON* */ -} - -static void -vl_api_hicn_api_node_stats_get_t_handler (vl_api_hicn_api_node_stats_get_t * - mp) -{ - vl_api_hicn_api_node_stats_get_reply_t *rmp; - int rv = HICN_ERROR_NONE; - - hicn_main_t *sm = &hicn_main; - - /* *INDENT-OFF* */ - REPLY_MACRO2 (VL_API_HICN_API_NODE_STATS_GET_REPLY, ( - { - rv = hicn_mgmt_node_stats_get (rmp); - rmp->retval =clib_host_to_net_i32 (rv); - })); - /* *INDENT-ON* */ -} - - -static void - vl_api_hicn_api_face_params_get_t_handler - (vl_api_hicn_api_face_params_get_t * mp) -{ - vl_api_hicn_api_face_params_get_reply_t *rmp; - int rv = 0; - - hicn_main_t *sm = &hicn_main; - - hicn_face_id_t faceid = clib_net_to_host_u32 (mp->faceid); - - /* *INDENT-OFF* */ - REPLY_MACRO2 (VL_API_HICN_API_FACE_PARAMS_GET_REPLY, ( - { - rv = hicn_face_api_entry_params_serialize(faceid, rmp); - rmp->retval = clib_host_to_net_u32(rv); - })); - /* *INDENT-ON* */ -} - -static void -send_face_details (hicn_face_t * face, vl_api_hicn_face_t * mp) -{ - vnet_main_t *vnm = vnet_get_main (); - - ip_address_encode (&face->nat_addr, IP46_TYPE_ANY, &mp->nat_addr); - mp->flags = clib_host_to_net_u32 (face->flags); - mp->swif = clib_net_to_host_u32 (face->sw_if); - vnet_sw_interface_t *sw_interface = - vnet_get_sw_interface_or_null (vnm, face->sw_if); - u8 *sbuf = 0; - if (sw_interface != NULL) - { - sbuf = - format (0, "%U", format_vnet_sw_interface_name, vnm, sw_interface); - strcpy ((char *) (mp->if_name), (char *) sbuf); - } -} - -static void -send_faces_details (vl_api_registration_t * reg, - hicn_face_t * face, u32 context) -{ - vl_api_hicn_api_faces_details_t *mp; - hicn_main_t *hm = &hicn_main; - mp = vl_msg_api_alloc (sizeof (*mp)); - memset (mp, 0, sizeof (*mp)); - mp->faceid = clib_host_to_net_u32 (hicn_dpoi_get_index (face)); - mp->_vl_msg_id = htons (VL_API_HICN_API_FACES_DETAILS + hm->msg_id_base); - mp->context = context; - - send_face_details (face, &(mp->face)); - - vl_api_send_msg (reg, (u8 *) mp); -} - -static void -vl_api_hicn_api_faces_dump_t_handler (vl_api_hicn_api_faces_dump_t * mp) -{ - hicn_face_t *face; - vl_api_registration_t *reg; - - reg = vl_api_client_index_to_registration (mp->client_index); - if (!reg) - return; - - /* *INDENT-OFF* */ - pool_foreach (face, hicn_dpoi_face_pool, - ({ - send_faces_details (reg, face, mp->context); - })); - /* *INDENT-ON* */ -} - -static void -vl_api_hicn_api_face_get_t_handler (vl_api_hicn_api_face_get_t * mp) -{ - vl_api_hicn_api_face_get_reply_t *rmp; - int rv = 0; - - hicn_main_t *sm = &hicn_main; - - hicn_face_id_t faceid = clib_net_to_host_u32 (mp->faceid); - - /* *INDENT-OFF* */ - REPLY_MACRO2 (VL_API_HICN_API_FACE_GET_REPLY, ( - { - rv = hicn_dpoi_idx_is_valid(faceid); - if (rv) - { - hicn_face_t * face = hicn_dpoi_get_from_idx(faceid); - send_face_details(face, &(rmp->face)); - rv = HICN_ERROR_NONE; - } - else - { - rv = HICN_ERROR_FACE_NOT_FOUND; - } - rmp->retval = clib_host_to_net_u32(rv); - })); - /* *INDENT-ON* */ -} - -static void -send_face_stats_details (vl_api_registration_t * reg, - hicn_face_t * face, u32 context) -{ - vl_api_hicn_api_face_stats_details_t *mp; - hicn_main_t *hm = &hicn_main; - mp = vl_msg_api_alloc (sizeof (*mp)); - memset (mp, 0, sizeof (*mp)); - - mp->_vl_msg_id = - htons (VL_API_HICN_API_FACE_STATS_DETAILS + hm->msg_id_base); - mp->context = context; - - mp->faceid = htonl (hicn_dpoi_get_index (face)); - vlib_counter_t v; - vlib_get_combined_counter (&counters - [hicn_dpoi_get_index (face) * HICN_N_COUNTER], - HICN_FACE_COUNTERS_INTEREST_RX, &v); - mp->irx_packets = clib_net_to_host_u64 (v.packets); - mp->irx_bytes = clib_net_to_host_u64 (v.bytes); - - vlib_get_combined_counter (&counters - [hicn_dpoi_get_index (face) * HICN_N_COUNTER], - HICN_FACE_COUNTERS_INTEREST_TX, &v); - mp->itx_packets = clib_net_to_host_u64 (v.packets); - mp->itx_bytes = clib_net_to_host_u64 (v.bytes); - - vlib_get_combined_counter (&counters - [hicn_dpoi_get_index (face) * HICN_N_COUNTER], - HICN_FACE_COUNTERS_DATA_RX, &v); - mp->drx_packets = clib_net_to_host_u64 (v.packets); - mp->drx_bytes = clib_net_to_host_u64 (v.bytes); - - vlib_get_combined_counter (&counters - [hicn_dpoi_get_index (face) * HICN_N_COUNTER], - HICN_FACE_COUNTERS_DATA_TX, &v); - mp->dtx_packets = clib_net_to_host_u64 (v.packets); - mp->dtx_bytes = clib_net_to_host_u64 (v.bytes); - - vl_api_send_msg (reg, (u8 *) mp); -} - -static void - vl_api_hicn_api_face_stats_dump_t_handler - (vl_api_hicn_api_face_stats_dump_t * mp) -{ - hicn_face_t *face; - vl_api_registration_t *reg; - - reg = vl_api_client_index_to_registration (mp->client_index); - if (!reg) - return; - - /* *INDENT-OFF* */ - pool_foreach (face, hicn_dpoi_face_pool, - ({ - send_face_stats_details (reg, face, mp->context); - })); - /* *INDENT-ON* */ -} - - -/****** ROUTE *******/ - -static void vl_api_hicn_api_route_get_t_handler - (vl_api_hicn_api_route_get_t * mp) -{ - vl_api_hicn_api_route_get_reply_t *rmp; - int rv = HICN_ERROR_NONE; - - hicn_main_t *sm = &hicn_main; - - fib_prefix_t prefix; - ip_prefix_decode (&mp->prefix, &prefix); - const dpo_id_t *hicn_dpo_id; - hicn_dpo_ctx_t *hicn_dpo_ctx; - u32 fib_index; - - rv = hicn_route_get_dpo (&prefix, &hicn_dpo_id, &fib_index); - - /* *INDENT-OFF* */ - REPLY_MACRO2 (VL_API_HICN_API_ROUTE_GET_REPLY, ( - { - if (rv == HICN_ERROR_NONE) - { - hicn_dpo_ctx = hicn_strategy_dpo_ctx_get(hicn_dpo_id->dpoi_index); - for (int i = 0; hicn_dpo_ctx != NULL && i < hicn_dpo_ctx->entry_count; i++) - { - rmp->faceids[i] = hicn_dpo_ctx->next_hops[i]; - } - rmp->strategy_id = clib_host_to_net_u32(hicn_dpo_get_vft_id(hicn_dpo_id));} - })); - /* *INDENT-ON* */ -} - -static void -send_route_details (vl_api_registration_t * reg, - const fib_prefix_t * pfx, u32 context) -{ - vl_api_hicn_api_routes_details_t *mp; - hicn_main_t *hm = &hicn_main; - mp = vl_msg_api_alloc (sizeof (*mp)); - memset (mp, 0, sizeof (*mp)); - - mp->_vl_msg_id = htons (VL_API_HICN_API_ROUTES_DETAILS + hm->msg_id_base); - mp->context = context; - - ip_prefix_encode (pfx, &mp->prefix); - mp->nfaces = 0; - - const dpo_id_t *hicn_dpo_id; - hicn_dpo_ctx_t *hicn_dpo_ctx; - u32 fib_index; - - int rv = hicn_route_get_dpo (pfx, &hicn_dpo_id, &fib_index); - - if (rv == HICN_ERROR_NONE) - { - hicn_dpo_ctx = hicn_strategy_dpo_ctx_get (hicn_dpo_id->dpoi_index); - for (int i = 0; hicn_dpo_ctx != NULL && i < hicn_dpo_ctx->entry_count; - i++) - { - mp->faceids[i] = - clib_host_to_net_u32 (hicn_dpo_ctx-> - next_hops[i]); - mp->nfaces++; - } - mp->strategy_id = - clib_host_to_net_u32 (hicn_dpo_get_vft_id (hicn_dpo_id)); - } - - vl_api_send_msg (reg, (u8 *) mp); -} - -typedef struct vl_api_hicn_api_route_dump_walk_ctx_t_ -{ - fib_node_index_t *feis; -} vl_api_hicn_api_route_dump_walk_ctx_t; - -static fib_table_walk_rc_t -vl_api_hicn_api_route_dump_walk (fib_node_index_t fei, void *arg) -{ - vl_api_hicn_api_route_dump_walk_ctx_t *ctx = arg; - int found = 0; - const dpo_id_t *former_dpo_id; - - /* Route already existing. We need to update the dpo. */ - const dpo_id_t *load_balance_dpo_id = - fib_entry_contribute_ip_forwarding (fei); - - /* The dpo is not a load balance dpo as expected */ - if (load_balance_dpo_id->dpoi_type == DPO_LOAD_BALANCE) - { - /* former_dpo_id is a load_balance dpo */ - load_balance_t *lb = load_balance_get (load_balance_dpo_id->dpoi_index); - - /* FIB entry exists but there is no hicn dpo. */ - for (int i = 0; i < lb->lb_n_buckets && !found; i++) - { - former_dpo_id = load_balance_get_bucket_i (lb, i); - - if (dpo_is_hicn (former_dpo_id)) - { - vec_add1 (ctx->feis, fei); - } - } - } - - return (FIB_TABLE_WALK_CONTINUE); -} - -static void -vl_api_hicn_api_routes_dump_t_handler (vl_api_hicn_api_routes_dump_t * mp) -{ - vl_api_registration_t *reg; - fib_table_t *fib_table; - ip4_main_t *im = &ip4_main; - ip6_main_t *im6 = &ip6_main; - fib_node_index_t *lfeip; - const fib_prefix_t *pfx; - vl_api_hicn_api_route_dump_walk_ctx_t ctx = { - .feis = NULL, - }; - - reg = vl_api_client_index_to_registration (mp->client_index); - if (!reg) - return; - - pool_foreach (fib_table, im->fibs, ( - { - fib_table_walk (fib_table->ft_index, - FIB_PROTOCOL_IP4, - vl_api_hicn_api_route_dump_walk, - &ctx);} - )); - - pool_foreach (fib_table, im6->fibs, ( - { - fib_table_walk (fib_table->ft_index, - FIB_PROTOCOL_IP6, - vl_api_hicn_api_route_dump_walk, - &ctx);} - )); - - vec_foreach (lfeip, ctx.feis) - { - pfx = fib_entry_get_prefix (*lfeip); - send_route_details (reg, pfx, mp->context); - } - - vec_free (ctx.feis); - -} - -static void vl_api_hicn_api_strategies_get_t_handler - (vl_api_hicn_api_strategies_get_t * mp) -{ - vl_api_hicn_api_strategies_get_reply_t *rmp; - int rv = HICN_ERROR_NONE; - - hicn_main_t *sm = &hicn_main; - - int n_strategies = hicn_strategy_get_all_available (); - - /* *INDENT-OFF* */ - REPLY_MACRO2 (VL_API_HICN_API_STRATEGIES_GET_REPLY/* , rmp, mp, rv */ ,( - { - int j = 0; - for (u32 i = 0; i < (u32) n_strategies; i++) - { - if (hicn_dpo_strategy_id_is_valid (i) == HICN_ERROR_NONE) - { - rmp->strategy_id[j] = clib_host_to_net_u32 (i); j++;} - } - rmp->n_strategies = n_strategies; - })); - /* *INDENT-ON* */ -} - -static void vl_api_hicn_api_strategy_get_t_handler - (vl_api_hicn_api_strategy_get_t * mp) -{ - vl_api_hicn_api_strategy_get_reply_t *rmp; - int rv = HICN_ERROR_NONE; - - hicn_main_t *sm = &hicn_main; - - u32 strategy_id = clib_net_to_host_u32 (mp->strategy_id); - rv = hicn_dpo_strategy_id_is_valid (strategy_id); - - /* *INDENT-OFF* */ - REPLY_MACRO2 (VL_API_HICN_API_STRATEGY_GET_REPLY /* , rmp, mp, rv */ ,( - { - if (rv == HICN_ERROR_NONE) - { - const hicn_strategy_vft_t * hicn_strategy_vft = - hicn_dpo_get_strategy_vft (strategy_id); - hicn_strategy_vft->hicn_format_strategy (rmp->description, 0);} - })); - /* *INDENT-ON* */ -} - -/************* APP FACE ****************/ - -static void vl_api_hicn_api_register_prod_app_t_handler - (vl_api_hicn_api_register_prod_app_t * mp) -{ - vl_api_hicn_api_register_prod_app_reply_t *rmp; - int rv = HICN_ERROR_NONE; - - hicn_main_t *sm = &hicn_main; - - fib_prefix_t prefix; - ip_prefix_decode (&mp->prefix, &prefix); - u32 swif = clib_net_to_host_u32 (mp->swif); - u32 cs_reserved = clib_net_to_host_u32 (mp->cs_reserved); - u32 faceid; - - ip46_address_t prod_addr; - ip46_address_reset (&prod_addr); - rv = hicn_face_prod_add (&prefix, swif, &cs_reserved, &prod_addr, &faceid); - - /* *INDENT-OFF* */ - REPLY_MACRO2 (VL_API_HICN_API_REGISTER_PROD_APP_REPLY, ( - { - ip_address_encode(&prod_addr, IP46_TYPE_ANY, &rmp->prod_addr); - rmp->cs_reserved = clib_net_to_host_u32(cs_reserved); - rmp->faceid = clib_net_to_host_u32(faceid); - })); - /* *INDENT-ON* */ -} - -static void -vl_api_hicn_api_face_prod_del_t_handler (vl_api_hicn_api_face_prod_del_t * mp) -{ - vl_api_hicn_api_face_prod_del_reply_t *rmp; - int rv = HICN_ERROR_FACE_NOT_FOUND; - - hicn_main_t *sm = &hicn_main; - - hicn_face_id_t faceid = clib_net_to_host_u32 (mp->faceid); - rv = hicn_face_prod_del (faceid); - - REPLY_MACRO (VL_API_HICN_API_FACE_PROD_DEL_REPLY /* , rmp, mp, rv */ ); -} - -static void vl_api_hicn_api_register_cons_app_t_handler - (vl_api_hicn_api_register_cons_app_t * mp) -{ - vl_api_hicn_api_register_cons_app_reply_t *rmp; - int rv = HICN_ERROR_NONE; - - hicn_main_t *sm = &hicn_main; - ip46_address_t src_addr4 = ip46_address_initializer; - ip46_address_t src_addr6 = ip46_address_initializer; - - u32 swif = clib_net_to_host_u32 (mp->swif); - u32 faceid1; - u32 faceid2; - - rv = - hicn_face_cons_add (&src_addr4.ip4, &src_addr6.ip6, swif, &faceid1, - &faceid2); - - /* *INDENT-OFF* */ - REPLY_MACRO2 (VL_API_HICN_API_REGISTER_CONS_APP_REPLY, ( - { - ip_address_encode(&src_addr4, IP46_TYPE_ANY, &rmp->src_addr4); - ip_address_encode(&src_addr6, IP46_TYPE_ANY, &rmp->src_addr6); - rmp->faceid1 = clib_net_to_host_u32(faceid1); - rmp->faceid2 = clib_net_to_host_u32(faceid2); - })); - /* *INDENT-ON* */ -} - -static void -vl_api_hicn_api_face_cons_del_t_handler (vl_api_hicn_api_face_cons_del_t * mp) -{ - vl_api_hicn_api_face_cons_del_reply_t *rmp; - int rv = HICN_ERROR_FACE_NOT_FOUND; - - hicn_main_t *sm = &hicn_main; - - hicn_face_id_t faceid = clib_net_to_host_u32 (mp->faceid); - rv = hicn_face_cons_del (faceid); - - REPLY_MACRO (VL_API_HICN_API_FACE_CONS_DEL_REPLY /* , rmp, mp, rv */ ); -} - -static void vl_api_hicn_api_enable_disable_t_handler -(vl_api_hicn_api_enable_disable_t * mp) -{ - vl_api_hicn_api_enable_disable_reply_t *rmp; - int rv = HICN_ERROR_NONE; - - hicn_main_t *sm = &hicn_main; - - fib_prefix_t prefix; - ip_prefix_decode (&mp->prefix, &prefix); - - switch (clib_net_to_host_u32(mp->enable_disable)) - { - case HICN_ENABLE: - rv = hicn_route_enable(&prefix); - break; - case HICN_DISABLE: - rv = hicn_route_disable(&prefix); - break; - } - - REPLY_MACRO (VL_API_HICN_API_ENABLE_DISABLE_REPLY/* , rmp, mp, rv */ ); -} - -/*********************************** UDP TUNNELS ************************************/ - -static void vl_api_hicn_api_udp_tunnel_add_del_t_handler -(vl_api_hicn_api_udp_tunnel_add_del_t * mp) -{ - vl_api_hicn_api_udp_tunnel_add_del_reply_t *rmp; - int rv = HICN_ERROR_NONE; - - hicn_main_t *sm = &hicn_main; - - ip46_address_t src_addr; - ip46_address_t dst_addr; - u16 src_port; - u16 dst_port; - index_t uei = ~0; - - ip46_type_t type = ip_address_decode (&mp->src_addr, &src_addr); - if (type != ip_address_decode (&mp->dst_addr, &dst_addr)) - { - rv = HICN_ERROR_UDP_TUNNEL_SRC_DST_TYPE; - goto done; - } - - src_port = clib_net_to_host_u16(mp->src_port); - dst_port = clib_net_to_host_u16(mp->dst_port); - - fib_protocol_t proto = ip46_address_is_ip4(&src_addr) ? FIB_PROTOCOL_IP4 : FIB_PROTOCOL_IP6; - - index_t fib_index = fib_table_find (proto, HICN_FIB_TABLE); - - if (mp->is_add) - { - uei = udp_tunnel_add(proto, - fib_index, &src_addr, &dst_addr, src_port, dst_port, - UDP_ENCAP_FIXUP_NONE); - } - else - { - udp_tunnel_del(proto, - fib_index, &src_addr, &dst_addr, src_port, dst_port, - UDP_ENCAP_FIXUP_NONE); - } - - - done: - - /* *INDENT-OFF* */ - REPLY_MACRO2 (VL_API_HICN_API_UDP_TUNNEL_ADD_DEL_REPLY, ( - { - rmp->uei = clib_host_to_net_u32(uei); - })); - /* *INDENT-ON* */ -} - -/************************************************************************************/ - -#include <hicn/hicn.api.c> - -/* Set up the API message handling tables */ -clib_error_t * -hicn_api_plugin_hookup (vlib_main_t * vm) -{ - hicn_main_t *hm = &hicn_main; - - hm->msg_id_base = setup_message_id_table (); - return 0; -} - - - -/******************* SUPPORTING FUNCTIONS *******************/ - -/* - * Binary serialization for get face configuration API. for the moment - * assuming only ip faces here. To be completed with othet types of faces - */ -vnet_api_error_t -hicn_face_api_entry_params_serialize (hicn_face_id_t faceid, - vl_api_hicn_api_face_params_get_reply_t - * reply) -{ - int rv = HICN_ERROR_NONE; - - if (!reply) - { - rv = VNET_API_ERROR_INVALID_ARGUMENT; - goto done; - } - hicn_face_t *face = hicn_dpoi_get_from_idx (faceid); - - if (face != NULL) - { - ip_address_encode (&face->nat_addr, IP46_TYPE_ANY, - &reply->nat_addr); - - reply->swif = clib_host_to_net_u32 (face->sw_if); - reply->flags = clib_host_to_net_u32 (face->flags); - reply->faceid = clib_host_to_net_u32 (faceid); - } - else - rv = HICN_ERROR_FACE_IP_ADJ_NOT_FOUND; - -done: - return (rv); -} - -/* - * fd.io coding-style-patch-verification: ON - * - * Local Variables: eval: (c-set-style "gnu") End: - */ |