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.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.c')
-rw-r--r-- | hicn-plugin/src/hicn.c | 264 |
1 files changed, 0 insertions, 264 deletions
diff --git a/hicn-plugin/src/hicn.c b/hicn-plugin/src/hicn.c deleted file mode 100644 index 43a717f80..000000000 --- a/hicn-plugin/src/hicn.c +++ /dev/null @@ -1,264 +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 <vnet/vnet.h> -#include <vnet/plugin/plugin.h> -#include <vlib/vlib.h> -#include <vnet/interface.h> - -#include "hicn.h" -#include "params.h" -#include "infra.h" -#include "strategy_dpo_manager.h" -#include "mgmt.h" -#include "error.h" -#include "faces/app/address_mgr.h" -#include "face_db.h" -#include "udp_tunnels/udp_tunnel.h" -#include "route.h" - -hicn_main_t hicn_main; -/* Module vars */ -int hicn_infra_fwdr_initialized = 0; - -/* - * Global time counters we're trying out for opportunistic hashtable - * expiration. - */ -uint16_t hicn_infra_fast_timer; /* Counts at 1 second intervals */ -uint16_t hicn_infra_slow_timer; /* Counts at 1 minute intervals */ - -hicn_face_bucket_t *hicn_face_bucket_pool; - -/* - * Init hicn forwarder with configurable PIT, CS sizes - */ -static int -hicn_infra_fwdr_init (uint32_t shard_pit_size, uint32_t shard_cs_size) -{ - int ret = 0; - - if (hicn_infra_fwdr_initialized) - { - ret = HICN_ERROR_FWD_ALREADY_ENABLED; - goto done; - } - /* Init per worker limits */ - hicn_infra_pit_size = shard_pit_size; - hicn_infra_cs_size = shard_cs_size; - - /* Init the global time-compression counters */ - hicn_infra_fast_timer = 1; - hicn_infra_slow_timer = 1; - - ret = hicn_pit_create (&hicn_main.pitcs, hicn_infra_pit_size); - hicn_pit_set_lru_max (&hicn_main.pitcs, hicn_infra_cs_size); -done: - if ((ret == HICN_ERROR_NONE) && !hicn_infra_fwdr_initialized) - { - hicn_infra_fwdr_initialized = 1; - } - return (ret); -} - -/* - * Action function shared between message handler and debug CLI NOTICE: we're - * only 'enabling' now - */ -int -hicn_infra_plugin_enable_disable (int enable_disable, - int pit_size_req, - f64 pit_max_lifetime_sec_req, - int cs_size_req, - vnet_link_t link) -{ - int ret = 0; - - hicn_main_t *sm = &hicn_main; - uint32_t pit_size, cs_size; - - /* Notice if we're already enabled... */ - if (sm->is_enabled) - { - ret = HICN_ERROR_FWD_ALREADY_ENABLED; - goto done; - } - /* Set up params and call fwdr_init set up PIT/CS, forwarder nodes */ - - /* Check the range and assign some globals */ - if (pit_max_lifetime_sec_req < 0) - { - sm->pit_lifetime_max_ms = HICN_PARAM_PIT_LIFETIME_DFLT_MAX_MS; - } - else - { - if (pit_max_lifetime_sec_req < HICN_PARAM_PIT_LIFETIME_BOUND_MIN_SEC || - pit_max_lifetime_sec_req > HICN_PARAM_PIT_LIFETIME_BOUND_MAX_SEC) - { - ret = HICN_ERROR_PIT_CONFIG_MAXLT_OOB; - goto done; - } - sm->pit_lifetime_max_ms = pit_max_lifetime_sec_req * SEC_MS; - } - - if (pit_size_req < 0) - { - pit_size = HICN_PARAM_PIT_ENTRIES_DFLT; - } - else - { - if (pit_size_req < HICN_PARAM_PIT_ENTRIES_MIN || - pit_size_req > HICN_PARAM_PIT_ENTRIES_MAX) - { - ret = HICN_ERROR_PIT_CONFIG_SIZE_OOB; - goto done; - } - pit_size = (uint32_t) pit_size_req; - } - - if (cs_size_req < 0) - { - cs_size = HICN_PARAM_CS_ENTRIES_DFLT; - } - else - { - /* - * This should be relatively safe - * At this point vlib buffers should have been already allocated - */ - - vlib_buffer_main_t *bm; - vlib_buffer_pool_t *bp; - vlib_main_t *vm = vlib_get_main (); - bm = vm->buffer_main; - - u32 n_buffers = 0; - vec_foreach (bp, bm->buffer_pools) - n_buffers = n_buffers < bp->n_buffers ? bp->n_buffers : n_buffers; - - // check if CS is bugger tha PIT or bigger than the available vlib_buffers - uword cs_buffers = - (n_buffers > - HICN_PARAM_CS_MIN_MBUF) ? n_buffers - HICN_PARAM_CS_MIN_MBUF : 0; - - if (cs_size_req > (pit_size_req / 2) || cs_size_req > cs_buffers) - { - cs_size_req = - ((pit_size_req / 2) > cs_buffers) ? cs_buffers : pit_size_req / 2; - vlib_cli_output (vm, - "WARNING!! CS too large. Please check size of PIT or the number of buffers available in VPP\n"); - - } - cs_size = (uint32_t) cs_size_req; - } - - ret = hicn_infra_fwdr_init (pit_size, cs_size); - - hicn_face_db_init (pit_size); - - if (ret != HICN_ERROR_NONE) - { - goto done; - } - sm->is_enabled = 1; - sm->link = link; - //hicn_face_udp_init_internal (); - -done: - - return (ret); -} - -static clib_error_t * -hicn_configure (vlib_main_t * vm, unformat_input_t * input) -{ - u32 pit_size = HICN_PARAM_PIT_ENTRIES_DFLT; - u32 cs_size = HICN_PARAM_CS_ENTRIES_DFLT; - u64 pit_lifetime_max_sec = HICN_PARAM_PIT_LIFETIME_DFLT_MAX_MS / SEC_MS; - - vnet_link_t link; - - - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) - { - if (unformat (input, "pit-size %u", &pit_size)) - ; - else if (unformat (input, "cs-size %u", &cs_size)) - ; - else if (unformat (input, "pit-lifetime-max %u", &pit_lifetime_max_sec)) - ; - else if (unformat (input, "grab mpls-tunnels")) - link = VNET_LINK_MPLS; - else - break; - } - - unformat_free (input); - - hicn_infra_plugin_enable_disable (1, pit_size, - pit_lifetime_max_sec, - cs_size, link); - - - return 0; -} - -VLIB_CONFIG_FUNCTION (hicn_configure, "hicn"); - -/* - * Init entry-point for the icn plugin - */ -static clib_error_t * -hicn_init (vlib_main_t * vm) -{ - clib_error_t *error = 0; - - hicn_main_t *sm = &hicn_main; - - /* Init other elements in the 'main' struct */ - sm->is_enabled = 0; - - error = hicn_api_plugin_hookup (vm); - - /* Init the dpo module */ - hicn_dpos_init (); - - /* Init the app manager */ - address_mgr_init (); - - hicn_face_module_init (vm); - - /* Init the route module */ - hicn_route_init (); - - udp_tunnel_init (); - - return error; -} - -VLIB_INIT_FUNCTION (hicn_init); - -/* *INDENT-OFF* */ -VLIB_PLUGIN_REGISTER() = -{ - .description = "hICN forwarder" -}; -/* *INDENT-ON* */ - -/* - * fd.io coding-style-patch-verification: ON - * - * Local Variables: eval: (c-set-style "gnu") End: - */ |