aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-plugin/src/strategies
diff options
context:
space:
mode:
authorMauro Sardara <msardara@cisco.com>2020-03-24 17:34:14 +0000
committerMauro Sardara <msardara@cisco.com>2020-09-14 17:31:15 +0000
commit88509fe353767cbde707c3e3b1f29392957819f3 (patch)
treecccd51bac7966cd3138c525e8075d90341184a66 /hicn-plugin/src/strategies
parentd875ae92a7fa1eaab3bc2616aeeedfc64a81fea4 (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/strategies')
-rw-r--r--hicn-plugin/src/strategies/dpo_mw.c161
-rw-r--r--hicn-plugin/src/strategies/dpo_mw.h149
-rw-r--r--hicn-plugin/src/strategies/dpo_rr.c160
-rw-r--r--hicn-plugin/src/strategies/dpo_rr.h152
-rw-r--r--hicn-plugin/src/strategies/strategy_mw.c128
-rw-r--r--hicn-plugin/src/strategies/strategy_mw.h41
-rw-r--r--hicn-plugin/src/strategies/strategy_mw_cli.c142
-rw-r--r--hicn-plugin/src/strategies/strategy_rr.c122
-rw-r--r--hicn-plugin/src/strategies/strategy_rr.h41
9 files changed, 0 insertions, 1096 deletions
diff --git a/hicn-plugin/src/strategies/dpo_mw.c b/hicn-plugin/src/strategies/dpo_mw.c
deleted file mode 100644
index 12c77bce8..000000000
--- a/hicn-plugin/src/strategies/dpo_mw.c
+++ /dev/null
@@ -1,161 +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 "dpo_mw.h"
-#include "strategy_mw.h"
-#include "../strategy_dpo_manager.h"
-#include "../strategy_dpo_ctx.h"
-
-/**
- * @brief DPO type value for the mw_strategy
- */
-static dpo_type_t hicn_dpo_type_mw;
-
-static const hicn_dpo_vft_t hicn_dpo_mw_vft = {
- .hicn_dpo_is_type = &hicn_dpo_is_type_strategy_mw,
- .hicn_dpo_get_type = &hicn_dpo_strategy_mw_get_type,
- .hicn_dpo_module_init = &hicn_dpo_strategy_mw_module_init,
- .hicn_dpo_create = &hicn_strategy_mw_ctx_create,
- .hicn_dpo_add_update_nh = &hicn_strategy_mw_ctx_add_nh,
- .hicn_dpo_del_nh = &hicn_strategy_mw_ctx_del_nh,
- .hicn_dpo_format = &hicn_strategy_mw_format_ctx
-};
-
-int
-hicn_dpo_is_type_strategy_mw (const dpo_id_t * dpo)
-{
- return dpo->dpoi_type == hicn_dpo_type_mw;
-}
-
-void
-hicn_dpo_strategy_mw_module_init (void)
-{
- /*
- * Register our type of dpo
- */
- hicn_dpo_type_mw =
- hicn_dpo_register_new_type (hicn_nodes_strategy, &hicn_dpo_mw_vft,
- hicn_mw_strategy_get_vft (),
- &dpo_strategy_mw_ctx_vft);
-}
-
-dpo_type_t
-hicn_dpo_strategy_mw_get_type (void)
-{
- return hicn_dpo_type_mw;
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-u8 *
-hicn_strategy_mw_format_ctx (u8 * s, int n, ...)
-{
- va_list args;
- va_start (args, n);
- s = format_hicn_strategy_mw_ctx (s, &args);
- return s;
-}
-
-u8 *
-format_hicn_strategy_mw_ctx (u8 * s, va_list * ap)
-{
- int i = 0;
- index_t index = va_arg (*ap, index_t);
- hicn_dpo_ctx_t *dpo_ctx = NULL;
- hicn_strategy_mw_ctx_t *mw_dpo_ctx = NULL;
- u32 indent = va_arg (*ap, u32);;
-
- dpo_ctx = hicn_strategy_dpo_ctx_get (index);
- if (dpo_ctx == NULL)
- return s;
-
- mw_dpo_ctx = (hicn_strategy_mw_ctx_t *) dpo_ctx->data;
-
- s = format (s, "hicn-mw");
- for (i = 0; i < HICN_PARAM_FIB_ENTRY_NHOPS_MAX; i++)
- {
- u8 *buf = NULL;
- if (i < dpo_ctx->entry_count)
- buf = format (NULL, "FIB");
- else if (i >=
- HICN_PARAM_FIB_ENTRY_NHOPS_MAX - dpo_ctx->tfib_entry_count)
- buf = format (NULL, "TFIB");
- else
- continue;
-
- s = format (s, "\n");
- s =
- format (s, "%U ", format_hicn_face, dpo_ctx->next_hops[i],
- indent);
- s = format (s, "weight %u", mw_dpo_ctx->weight[i]);
- s = format (s, " %s", buf);
- }
-
- return (s);
-}
-
-void
-hicn_strategy_mw_ctx_create (fib_protocol_t proto, const hicn_face_id_t * next_hop,
- int nh_len, index_t * dpo_idx)
-{
- hicn_strategy_mw_ctx_t *hicn_strategy_mw_ctx;
- hicn_dpo_ctx_t *hicn_strategy_ctx;
-
- /* Allocate a hicn_dpo_ctx on the vpp pool and initialize it */
- hicn_strategy_ctx = hicn_strategy_dpo_ctx_alloc ();
- hicn_strategy_mw_ctx = (hicn_strategy_mw_ctx_t *) hicn_strategy_ctx->data;
-
- *dpo_idx = hicn_strategy_dpo_ctx_get_index (hicn_strategy_ctx);
-
- init_dpo_ctx (hicn_strategy_ctx, next_hop, nh_len, hicn_dpo_type_mw, proto);
-
- memset (hicn_strategy_mw_ctx->weight, 0, HICN_PARAM_FIB_ENTRY_NHOPS_MAX);
-}
-
-int
-hicn_strategy_mw_ctx_add_nh (hicn_face_id_t nh, index_t dpo_idx)
-{
- hicn_dpo_ctx_t *hicn_strategy_dpo_ctx = hicn_strategy_dpo_ctx_get (dpo_idx);
- u8 pos = 0;
-
- if (hicn_strategy_dpo_ctx == NULL)
- {
- return HICN_ERROR_STRATEGY_NOT_FOUND;
- }
-
- hicn_strategy_dpo_ctx_add_nh (nh, hicn_strategy_dpo_ctx, &pos);
- hicn_strategy_mw_ctx_t *hicn_strategy_mw_ctx =
- (hicn_strategy_mw_ctx_t *) & hicn_strategy_dpo_ctx->data;
-
- hicn_strategy_mw_ctx->weight[pos] = DEFAULT_WEIGHT;
- return HICN_ERROR_NONE;
-}
-
-int
-hicn_strategy_mw_ctx_del_nh (hicn_face_id_t face_id, index_t dpo_idx)
-{
- hicn_dpo_ctx_t *hicn_strategy_dpo_ctx = hicn_strategy_dpo_ctx_get (dpo_idx);
- //No need to flush the weights, they are initialized when a dpo_ctx is created;
- return hicn_strategy_dpo_ctx_del_nh (face_id, hicn_strategy_dpo_ctx);
-}
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/hicn-plugin/src/strategies/dpo_mw.h b/hicn-plugin/src/strategies/dpo_mw.h
deleted file mode 100644
index 433c415fb..000000000
--- a/hicn-plugin/src/strategies/dpo_mw.h
+++ /dev/null
@@ -1,149 +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.
- */
-
-#ifndef __HICN_DPO_MW_H__
-#define __HICN_DPO_MW_H__
-
-#include <vnet/dpo/dpo.h>
-#include "../strategy_dpo_ctx.h"
-
-/**
- * @file dpo_mw.h
- *
- * This file implements the strategy vtf (see strategy.h) and
- * the dpo vft (see strategy_dpo_manager.h) for the strategy
- * maximum weight
- */
-
-#define DEFAULT_WEIGHT 0
-
-typedef struct hicn_strategy_mw_ctx_s
-{
- u8 weight[HICN_PARAM_FIB_ENTRY_NHOPS_MAX];
-} hicn_strategy_mw_ctx_t;
-
-/**
- * @brief Format the dpo ctx for a human-readable string
- *
- * @param s String to which to append the formatted dpo ctx
- * @param ap List of parameters for the formatting
- *
- * @result The string with the formatted dpo ctx
- */
-u8 *format_hicn_strategy_mw_ctx (u8 * s, va_list * ap);
-
-const static dpo_vft_t dpo_strategy_mw_ctx_vft = {
- .dv_lock = hicn_strategy_dpo_ctx_lock,
- .dv_unlock = hicn_strategy_dpo_ctx_unlock,
- .dv_format = format_hicn_strategy_mw_ctx,
-};
-
-/**
- * @brief Retrieve an hicn_strategy_mw_ctx object
- *
- * @param indext Index of the hicn_dpo_ctx to retrieve
- * @return The hicn_dpo_ctx object or NULL
- */
-hicn_dpo_ctx_t *hicn_strategy_mw_ctx_get (index_t index);
-
-/**
- * @brief Create a new mw ctx
- *
- * @param proto The protocol to which the dpo is meant for (see vpp docs)
- * @param next_hop A list of next hops to be inserted in the dpo ctx
- * @param nh_len Size of the list
- * @param dpo_idx index_t that will hold the index of the created dpo ctx
- * @return HICN_ERROR_NONE if the creation was fine, otherwise EINVAL
- */
-void
-hicn_strategy_mw_ctx_create (fib_protocol_t proto, const hicn_face_id_t * next_hop,
- int nh_len, index_t * dpo_idx);
-
-/**
- * @brief Add or update a next hop in the dpo ctx.
- *
- * This function is meant to be used in the control plane and not in the data plane,
- * as it is not optimized for the latter.
- *
- * @param nh Next hop to insert in the dpo ctx
- * @param dpo_idx Index of the dpo ctx to update with the new or updated next
- * hop
- * @return HICN_ERROR_NONE if the update or insert was fine,
- * otherwise HICN_ERROR_DPO_CTX_NOT_FOUND
- */
-int hicn_strategy_mw_ctx_add_nh (hicn_face_id_t nh, index_t dpo_idx);
-
-/**
- * @brief Delete a next hop in the dpo ctx.
- *
- * @param face_id Face identifier of the next hop
- * @param dpo_idx Index of the dpo ctx to update with the new or updated next
- * hop
- * @return HICN_ERROR_NONE if the update or insert was fine,
- * otherwise HICN_ERROR_DPO_CTS_NOT_FOUND
- */
-int hicn_strategy_mw_ctx_del_nh (hicn_face_id_t face_id, index_t dpo_idx);
-
-/**
- * @brief Prefetch a dpo
- *
- * @param dpo_idx Index of the dpo ctx to prefetch
- */
-void hicn_strategy_mw_ctx_prefetch (index_t dpo_idx);
-
-/**
- * @brief Return true if the dpo is of type strategy mw
- *
- * @param dpo Dpo to check the type
- */
-int hicn_dpo_is_type_strategy_mw (const dpo_id_t * dpo);
-
-/**
- * @brief Initialize the Maximum Weight strategy
- */
-void hicn_dpo_strategy_mw_module_init (void);
-
-/**
- * @brief Return the dpo type for the Maximum Weight strategy
- */
-dpo_type_t hicn_dpo_strategy_mw_get_type (void);
-
-/**
- * @brief Format the dpo ctx for the strategy Maximum Weight
- *
- * @param s String to append the formatted dpo ctx
- * @param ap List of arguments to format
- */
-u8 *format_hicn_dpo_strategy_mw (u8 * s, va_list * ap);
-
-/**
- * @brief Format the dpo ctx for the strategy Maximum Weight. To
- * call from other functions
- *
- * @param s String to append the formatted dpo ctx
- * @param ... List of arguments to format
- */
-u8 *hicn_strategy_mw_format_ctx (u8 * s, int n, ...);
-
-
-#endif // __HICN_DPO_MW_H__
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/hicn-plugin/src/strategies/dpo_rr.c b/hicn-plugin/src/strategies/dpo_rr.c
deleted file mode 100644
index adb7e1025..000000000
--- a/hicn-plugin/src/strategies/dpo_rr.c
+++ /dev/null
@@ -1,160 +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 "dpo_rr.h"
-#include "strategy_rr.h"
-#include "../strategy_dpo_manager.h"
-#include "../strategy_dpo_ctx.h"
-
-/**
- * @brief DPO type value for the rr_strategy
- */
-static dpo_type_t hicn_dpo_type_rr;
-
-static const hicn_dpo_vft_t hicn_dpo_rr_vft = {
- .hicn_dpo_is_type = &hicn_dpo_is_type_strategy_rr,
- .hicn_dpo_get_type = &hicn_dpo_strategy_rr_get_type,
- .hicn_dpo_module_init = &hicn_dpo_strategy_rr_module_init,
- .hicn_dpo_create = &hicn_strategy_rr_ctx_create,
- .hicn_dpo_add_update_nh = &hicn_strategy_rr_ctx_add_nh,
- .hicn_dpo_del_nh = &hicn_strategy_rr_ctx_del_nh,
- .hicn_dpo_format = &hicn_strategy_rr_format_ctx
-};
-
-int
-hicn_dpo_is_type_strategy_rr (const dpo_id_t * dpo)
-{
- return dpo->dpoi_type == hicn_dpo_type_rr;
-}
-
-void
-hicn_dpo_strategy_rr_module_init (void)
-{
- /*
- * Register our type of dpo
- */
- hicn_dpo_type_rr =
- hicn_dpo_register_new_type (hicn_nodes_strategy, &hicn_dpo_rr_vft,
- hicn_rr_strategy_get_vft (),
- &dpo_strategy_rr_ctx_vft);
-}
-
-dpo_type_t
-hicn_dpo_strategy_rr_get_type (void)
-{
- return hicn_dpo_type_rr;
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-u8 *
-hicn_strategy_rr_format_ctx (u8 * s, int n, ...)
-{
- va_list args;
- va_start (args, n);
- s = format_hicn_strategy_rr_ctx (s, &args);
- return s;
-}
-
-u8 *
-format_hicn_strategy_rr_ctx (u8 * s, va_list * ap)
-{
- int i = 0;
- index_t index = va_arg (*ap, index_t);
- hicn_dpo_ctx_t *dpo_ctx = NULL;
- hicn_strategy_rr_ctx_t *rr_dpo_ctx = NULL;
- u32 indent = va_arg (*ap, u32);
-
- dpo_ctx = hicn_strategy_dpo_ctx_get (index);
- if (dpo_ctx == NULL)
- return s;
-
- rr_dpo_ctx = (hicn_strategy_rr_ctx_t *) dpo_ctx->data;
-
- s =
- format (s, "hicn-rr, next hop Face %d",
- dpo_ctx->next_hops[rr_dpo_ctx->current_nhop]);
-
- for (i = 0; i < HICN_PARAM_FIB_ENTRY_NHOPS_MAX; i++)
- {
- u8 *buf = NULL;
- if (i < dpo_ctx->entry_count)
- buf = format (NULL, "FIB");
- else if (i >=
- HICN_PARAM_FIB_ENTRY_NHOPS_MAX - dpo_ctx->tfib_entry_count)
- buf = format (NULL, "TFIB");
- else
- continue;
-
- s = format (s, "\n");
- s =
- format (s, "%U ", format_hicn_face, dpo_ctx->next_hops[i],
- indent);
- s = format (s, " %s", buf);
- }
-
- return (s);
-}
-
-void
-hicn_strategy_rr_ctx_create (fib_protocol_t proto, const hicn_face_id_t * next_hop,
- int nh_len, index_t * dpo_idx)
-{
- hicn_strategy_rr_ctx_t *hicn_strategy_rr_ctx;
- hicn_dpo_ctx_t *hicn_strategy_ctx;
-
- /* Allocate a hicn_dpo_ctx on the vpp pool and initialize it */
- hicn_strategy_ctx = hicn_strategy_dpo_ctx_alloc ();
- hicn_strategy_rr_ctx = (hicn_strategy_rr_ctx_t *) hicn_strategy_ctx->data;
-
- *dpo_idx = hicn_strategy_dpo_ctx_get_index (hicn_strategy_ctx);
-
- init_dpo_ctx (hicn_strategy_ctx, next_hop, nh_len, hicn_dpo_type_rr, proto);
-
- hicn_strategy_rr_ctx->current_nhop = 0;
-}
-
-int
-hicn_strategy_rr_ctx_add_nh (hicn_face_id_t nh, index_t dpo_idx)
-{
- hicn_dpo_ctx_t *hicn_strategy_dpo_ctx = hicn_strategy_dpo_ctx_get (dpo_idx);
- u8 pos = 0;
-
- if (hicn_strategy_dpo_ctx == NULL)
- {
- return HICN_ERROR_STRATEGY_NOT_FOUND;
- }
-
- hicn_strategy_dpo_ctx_add_nh (nh, hicn_strategy_dpo_ctx, &pos);
- //nothing else to initialize in this strategy
- return HICN_ERROR_NONE;
-}
-
-int
-hicn_strategy_rr_ctx_del_nh (hicn_face_id_t face_id, index_t dpo_idx)
-{
- hicn_dpo_ctx_t *hicn_strategy_dpo_ctx = hicn_strategy_dpo_ctx_get (dpo_idx);
- //No need to change the current_nhop. It will be updated at the next selection.
- return hicn_strategy_dpo_ctx_del_nh (face_id, hicn_strategy_dpo_ctx);
-}
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/hicn-plugin/src/strategies/dpo_rr.h b/hicn-plugin/src/strategies/dpo_rr.h
deleted file mode 100644
index e4e5b5372..000000000
--- a/hicn-plugin/src/strategies/dpo_rr.h
+++ /dev/null
@@ -1,152 +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.
- */
-
-#ifndef __HICN_DPO_RR_H__
-#define __HICN_DPO_RR_H__
-
-#include <vnet/dpo/dpo.h>
-#include "../strategy_dpo_ctx.h"
-
-/**
- * @file dpo_rr.h
- *
- * This file implements the strategy vtf (see strategy.h) and
- * the dpo vft (see strategy_dpo_manager.h) for the strategy
- * round robin.
- */
-
-
-/**
- * Context for the Round Robin strategy
- */
-
-typedef struct hicn_strategy_rr_ctx_s
-{
- u8 current_nhop;
-} hicn_strategy_rr_ctx_t;
-
-/**
- * @brief Format the dpo ctx for a human-readable string
- *
- * @param s String to which to append the formatted dpo ctx
- * @param ap List of parameters for the formatting
- *
- * @result The string with the formatted dpo ctx
- */
-u8 *format_hicn_strategy_rr_ctx (u8 * s, va_list * ap);
-
-const static dpo_vft_t dpo_strategy_rr_ctx_vft = {
- .dv_lock = hicn_strategy_dpo_ctx_lock,
- .dv_unlock = hicn_strategy_dpo_ctx_unlock,
- .dv_format = format_hicn_strategy_rr_ctx,
-};
-
-/**
- * @brief Retrieve an hicn_strategy_rr_ctx object
- *
- * @param indext Index of the hicn_dpo_ctx to retrieve
- * @return The hicn_dpo_ctx object or NULL
- */
-hicn_dpo_ctx_t *hicn_strategy_rr_ctx_get (index_t index);
-
-/**
- * @brief Create a new round robin ctx
- *
- * @param proto The protocol to which the dpo is meant for (see vpp docs)
- * @param next_hop A list of next hops to be inserted in the dpo ctx
- * @param nh_len Size of the list
- * @param dpo_idx index_t that will hold the index of the created dpo ctx
- * @return HICN_ERROR_NONE if the creation was fine, otherwise EINVAL
- */
-void
-hicn_strategy_rr_ctx_create (fib_protocol_t proto, const hicn_face_id_t * next_hop,
- int nh_len, index_t * dpo_idx);
-
-/**
- * @brief Add or update a next hop in the dpo ctx.
- *
- * This function is meant to be used in the control plane and not in the data plane,
- * as it is not optimized for the latter.
- *
- * @param nh Next hop to insert in the dpo ctx
- * @param dpo_idx Index of the dpo ctx to update with the new or updated next
- * hop
- * @return HICN_ERROR_NONE if the update or insert was fine,
- * otherwise HICN_ERROR_DPO_CTX_NOT_FOUND
- */
-int hicn_strategy_rr_ctx_add_nh (hicn_face_id_t nh, index_t dpo_idx);
-
-/**
- * @brief Delete a next hop in the dpo ctx.
- *
- * @param face_id Face identifier of the next hop
- * @param dpo_idx Index of the dpo ctx to update with the new or updated next
- * hop
- * @return HICN_ERROR_NONE if the update or insert was fine,
- * otherwise HICN_ERROR_DPO_CTS_NOT_FOUND
- */
-int hicn_strategy_rr_ctx_del_nh (hicn_face_id_t face_id, index_t dpo_idx);
-
-/**
- * @brief Prefetch a dpo
- *
- * @param dpo_idx Index of the dpo ctx to prefetch
- */
-void hicn_strategy_rr_ctx_prefetch (index_t dpo_idx);
-
-/**
- * @brief Return true if the dpo is of type strategy rr
- *
- * @param dpo Dpo to check the type
- */
-int hicn_dpo_is_type_strategy_rr (const dpo_id_t * dpo);
-
-/**
- * @brief Initialize the Round Robin strategy
- */
-void hicn_dpo_strategy_rr_module_init (void);
-
-/**
- * @brief Return the dpo type for the Round Robin strategy
- */
-dpo_type_t hicn_dpo_strategy_rr_get_type (void);
-
-/**
- * @brief Format the dpo ctx for the strategy Round Robin
- *
- * @param s String to append the formatted dpo ctx
- * @param ap List of arguments to format
- */
-u8 *format_hicn_dpo_strategy_rr (u8 * s, va_list * ap);
-
-/**
- * @brief Format the dpo ctx for the strategy Round Robin. To
- * call from other functions
- *
- * @param s String to append the formatted dpo ctx
- * @param ... List of arguments to format
- */
-u8 *hicn_strategy_rr_format_ctx (u8 * s, int n, ...);
-
-
-#endif // __HICN_DPO_RR_H__
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/hicn-plugin/src/strategies/strategy_mw.c b/hicn-plugin/src/strategies/strategy_mw.c
deleted file mode 100644
index fe4d5896a..000000000
--- a/hicn-plugin/src/strategies/strategy_mw.c
+++ /dev/null
@@ -1,128 +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 "dpo_mw.h"
-#include "../strategy.h"
-#include "../strategy_dpo_ctx.h"
-#include "../faces/face.h"
-#include "../hashtb.h"
-#include "../strategy_dpo_manager.h"
-
-/* Simple strategy that chooses the next hop with the maximum weight */
-/* It does not require to exend the hicn_dpo */
-void hicn_receive_data_mw (index_t dpo_idx, int nh_idx);
-void hicn_add_interest_mw (index_t dpo_idx, hicn_hash_entry_t * pit_entry);
-void hicn_on_interest_timeout_mw (index_t dpo_idx);
-u32 hicn_select_next_hop_mw (index_t dpo_idx, int *nh_idx,
- hicn_face_id_t* outface);
-u32 get_strategy_node_index_mw (void);
-u8 *hicn_strategy_format_trace_mw (u8 * s, hicn_strategy_trace_t * t);
-u8 *hicn_strategy_format_mw (u8 * s, va_list * ap);
-
-
-static hicn_strategy_vft_t hicn_strategy_mw_vft = {
- .hicn_receive_data = &hicn_receive_data_mw,
- .hicn_add_interest = &hicn_add_interest_mw,
- .hicn_on_interest_timeout = &hicn_on_interest_timeout_mw,
- .hicn_select_next_hop = &hicn_select_next_hop_mw,
- .hicn_format_strategy_trace = hicn_strategy_format_trace_mw,
- .hicn_format_strategy = &hicn_strategy_format_mw
-};
-
-/*
- * Return the vft of the strategy.
- */
-hicn_strategy_vft_t *
-hicn_mw_strategy_get_vft (void)
-{
- return &hicn_strategy_mw_vft;
-}
-
-/* DPO should be give in input as it containes all the information to calculate the next hops*/
-u32
-hicn_select_next_hop_mw (index_t dpo_idx, int *nh_idx, hicn_face_id_t* outface)
-{
- hicn_dpo_ctx_t *dpo_ctx = hicn_strategy_dpo_ctx_get (dpo_idx);
-
- if (dpo_ctx == NULL)
- return HICN_ERROR_STRATEGY_NOT_FOUND;
-
- hicn_strategy_mw_ctx_t *hicn_strategy_mw_ctx =
- (hicn_strategy_mw_ctx_t *) dpo_ctx->data;
-
- u8 next_hop_index = 0;
- for (int i = 0; i < dpo_ctx->entry_count; i++)
- {
- if (hicn_strategy_mw_ctx->weight[next_hop_index] <
- hicn_strategy_mw_ctx->weight[i])
- {
- next_hop_index = i;
- }
- }
-
- *outface = dpo_ctx->next_hops[next_hop_index];
-
- return HICN_ERROR_NONE;
-}
-
-void
-hicn_add_interest_mw (index_t dpo_ctx_idx, hicn_hash_entry_t * hash_entry)
-{
- hash_entry->dpo_ctx_id = dpo_ctx_idx;
- dpo_id_t hicn_dpo_id =
- { hicn_dpo_strategy_mw_get_type (), 0, 0, dpo_ctx_idx };
- hicn_strategy_dpo_ctx_lock (&hicn_dpo_id);
- hash_entry->vft_id = hicn_dpo_get_vft_id (&hicn_dpo_id);
-}
-
-void
-hicn_on_interest_timeout_mw (index_t dpo_idx)
-{
- /* Nothign to do in the mw strategy when we receive an interest */
-}
-
-void
-hicn_receive_data_mw (index_t dpo_idx, int nh_idx)
-{
-}
-
-
-/* packet trace format function */
-u8 *
-hicn_strategy_format_trace_mw (u8 * s, hicn_strategy_trace_t * t)
-{
- s = format (s, "Strategy_mw: pkt: %d, sw_if_index %d, next index %d",
- (int) t->pkt_type, t->sw_if_index, t->next_index);
- return (s);
-}
-
-u8 *
-hicn_strategy_format_mw (u8 * s, va_list * ap)
-{
-
- u32 indent = va_arg (*ap, u32);
- s =
- format (s,
- "Static Weights: weights are updated by the control plane, next hop is the one with the maximum weight.\n",
- indent);
- return (s);
-}
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/hicn-plugin/src/strategies/strategy_mw.h b/hicn-plugin/src/strategies/strategy_mw.h
deleted file mode 100644
index 9e0078b23..000000000
--- a/hicn-plugin/src/strategies/strategy_mw.h
+++ /dev/null
@@ -1,41 +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.
- */
-
-#ifndef __HICN_STRATEGY_MW_H__
-#define __HICN_STRATEGY_MW_H__
-
-#include "../strategy.h"
-
-/**
- * @file strategy_mw.h
- *
- * This file implements the maximum weight strategy. In this
- * strategy the choosen next hop is one with the maximum weight.
- */
-
-/**
- * @brief Return the vft for the Maximum Weight strategy
- */
-hicn_strategy_vft_t *hicn_mw_strategy_get_vft (void);
-
-#endif // __HICN_STRATEGY_MW_H__
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/hicn-plugin/src/strategies/strategy_mw_cli.c b/hicn-plugin/src/strategies/strategy_mw_cli.c
deleted file mode 100644
index 636d7effa..000000000
--- a/hicn-plugin/src/strategies/strategy_mw_cli.c
+++ /dev/null
@@ -1,142 +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/dpo/dpo.h>
-#include <vlib/vlib.h>
-#include <vnet/fib/fib_entry.h>
-#include <vnet/fib/fib_table.h>
-
-#include "../strategy_dpo_manager.h"
-#include "../faces/face.h"
-#include "../error.h"
-#include "../route.h"
-#include "dpo_mw.h"
-
-static clib_error_t *
-hicn_mw_strategy_cli_set_weight_command_fn (vlib_main_t * vm,
- unformat_input_t * main_input,
- vlib_cli_command_t * cmd)
-{
- clib_error_t *cl_err = 0;
- int ret = HICN_ERROR_NONE;
- fib_prefix_t prefix;
- hicn_face_id_t faceid = HICN_FACE_NULL;
- u32 fib_index;
- u32 weight = HICN_PARAM_FIB_ENTRY_NHOP_WGHT_DFLT;
- hicn_dpo_ctx_t *hicn_dpo_ctx;
- const dpo_id_t *hicn_dpo_id;
-
- /* Get a line of input. */
- unformat_input_t _line_input, *line_input = &_line_input;
- if (unformat_user (main_input, unformat_line_input, line_input))
- {
- while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (line_input, "prefix %U/%u", unformat_ip46_address,
- &prefix.fp_addr, IP46_TYPE_ANY, &prefix.fp_len))
- ;
- else if (unformat (line_input, "face %u", &faceid))
- ;
- else if (unformat (line_input, "weight %u", &weight))
- ;
- else
- {
- return clib_error_return (0, "%s",
- get_error_string
- (HICN_ERROR_CLI_INVAL));
- }
-
- }
- }
-
- if (((weight < 0) || (weight > HICN_PARAM_FIB_ENTRY_NHOP_WGHT_MAX)))
- {
- cl_err = clib_error_return (0,
- "Next-hop weight must be between 0 and %d",
- (int) HICN_PARAM_FIB_ENTRY_NHOP_WGHT_MAX);
- goto done;
- }
-
- if (((ip46_address_is_zero (&prefix.fp_addr)) || faceid == HICN_FACE_NULL))
- {
- cl_err =
- clib_error_return (0, "Please specify prefix and a valid faceid...");
- goto done;
- }
-
- prefix.fp_proto =
- ip46_address_is_ip4 (&prefix.
- fp_addr) ? FIB_PROTOCOL_IP4 : FIB_PROTOCOL_IP6;
- ret = hicn_route_get_dpo (&prefix, &hicn_dpo_id, &fib_index);
-
- if (ret == HICN_ERROR_NONE)
- {
- hicn_dpo_ctx = hicn_strategy_dpo_ctx_get (hicn_dpo_id->dpoi_index);
-
- if (hicn_dpo_ctx == NULL
- || hicn_dpo_id->dpoi_type != hicn_dpo_strategy_mw_get_type ())
- {
- cl_err = clib_error_return (0, get_error_string (ret));
- goto done;
- }
-
- hicn_strategy_mw_ctx_t *mw_dpo =
- (hicn_strategy_mw_ctx_t *) hicn_dpo_ctx;
- int idx = ~0;
- for (int i = 0; i < hicn_dpo_ctx->entry_count; i++)
- if (hicn_dpo_ctx->next_hops[i] == faceid)
- idx = i;
-
- if (idx == ~0)
- {
- cl_err =
- clib_error_return (0,
- get_error_string
- (HICN_ERROR_STRATEGY_NH_NOT_FOUND));
- goto done;
- }
-
- mw_dpo->weight[idx] = weight;
- }
- else
- {
- cl_err = clib_error_return (0, get_error_string (ret));
-
- }
-
-done:
-
- return (cl_err);
-
-}
-
-/* cli declaration for 'strategy mw' */
-/* *INDENT-OFF* */
-VLIB_CLI_COMMAND(hicn_mw_strategy_cli_set_weight_command, static)=
-{
- .path = "hicn strategy mw set",
- .short_help = "hicn strategy mw set prefix <prefix> face <face_id> weight <weight>",
- .function = hicn_mw_strategy_cli_set_weight_command_fn,
-};
-/* *INDENT-ON* */
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/hicn-plugin/src/strategies/strategy_rr.c b/hicn-plugin/src/strategies/strategy_rr.c
deleted file mode 100644
index 4c65ce52a..000000000
--- a/hicn-plugin/src/strategies/strategy_rr.c
+++ /dev/null
@@ -1,122 +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 "dpo_rr.h"
-#include "../strategy.h"
-#include "../strategy_dpo_ctx.h"
-#include "../faces/face.h"
-#include "../hashtb.h"
-#include "../strategy_dpo_manager.h"
-
-/* Simple strategy that chooses the next hop with the maximum weight */
-/* It does not require to exend the hicn_dpo */
-void hicn_receive_data_rr (index_t dpo_idx, int nh_idx);
-void hicn_add_interest_rr (index_t dpo_idx, hicn_hash_entry_t * pit_entry);
-void hicn_on_interest_timeout_rr (index_t dpo_idx);
-u32 hicn_select_next_hop_rr (index_t dpo_idx, int *nh_idx,
- hicn_face_id_t* outface);
-u8 *hicn_strategy_format_trace_rr (u8 * s, hicn_strategy_trace_t * t);
-u8 *hicn_strategy_format_rr (u8 * s, va_list * ap);
-
-
-static hicn_strategy_vft_t hicn_strategy_rr_vft = {
- .hicn_receive_data = &hicn_receive_data_rr,
- .hicn_add_interest = &hicn_add_interest_rr,
- .hicn_on_interest_timeout = &hicn_on_interest_timeout_rr,
- .hicn_select_next_hop = &hicn_select_next_hop_rr,
- .hicn_format_strategy_trace = &hicn_strategy_format_trace_rr,
- .hicn_format_strategy = &hicn_strategy_format_rr
-};
-
-/*
- * Return the vft of the strategy.
- */
-hicn_strategy_vft_t *
-hicn_rr_strategy_get_vft (void)
-{
- return &hicn_strategy_rr_vft;
-}
-
-/* DPO should be give in input as it containes all the information to calculate the next hops*/
-u32
-hicn_select_next_hop_rr (index_t dpo_idx, int *nh_idx, hicn_face_id_t* outface)
-{
- hicn_dpo_ctx_t *dpo_ctx = hicn_strategy_dpo_ctx_get (dpo_idx);
-
- if (dpo_ctx == NULL)
- return HICN_ERROR_STRATEGY_NOT_FOUND;
-
- hicn_strategy_rr_ctx_t *hicn_strategy_rr_ctx =
- (hicn_strategy_rr_ctx_t *) dpo_ctx->data;
-
- *outface =
- dpo_ctx->next_hops[hicn_strategy_rr_ctx->current_nhop];
-
- hicn_strategy_rr_ctx->current_nhop =
- (hicn_strategy_rr_ctx->current_nhop + 1) % dpo_ctx->entry_count;
-
- return HICN_ERROR_NONE;
-}
-
-void
-hicn_add_interest_rr (index_t dpo_ctx_idx, hicn_hash_entry_t * hash_entry)
-{
- hash_entry->dpo_ctx_id = dpo_ctx_idx;
- dpo_id_t hicn_dpo_id =
- { hicn_dpo_strategy_rr_get_type (), 0, 0, dpo_ctx_idx };
- hicn_strategy_dpo_ctx_lock (&hicn_dpo_id);
- hash_entry->vft_id = hicn_dpo_get_vft_id (&hicn_dpo_id);
-}
-
-void
-hicn_on_interest_timeout_rr (index_t dpo_idx)
-{
- /* Nothing to do in the rr strategy when we receive an interest */
-}
-
-void
-hicn_receive_data_rr (index_t dpo_idx, int nh_idx)
-{
-}
-
-
-/* packet trace format function */
-u8 *
-hicn_strategy_format_trace_rr (u8 * s, hicn_strategy_trace_t * t)
-{
- s = format (s, "Strategy_rr: pkt: %d, sw_if_index %d, next index %d",
- (int) t->pkt_type, t->sw_if_index, t->next_index);
- return (s);
-}
-
-u8 *
-hicn_strategy_format_rr (u8 * s, va_list * ap)
-{
-
- u32 indent = va_arg (*ap, u32);
- s =
- format (s,
- "Round Robin: next hop is chosen ciclying between all the available next hops, one after the other.\n",
- indent);
- return (s);
-}
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/hicn-plugin/src/strategies/strategy_rr.h b/hicn-plugin/src/strategies/strategy_rr.h
deleted file mode 100644
index 4dfe76b43..000000000
--- a/hicn-plugin/src/strategies/strategy_rr.h
+++ /dev/null
@@ -1,41 +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_STRATEGY_RR_H__
-#define __HICN_STRATEGY_RR_H__
-
-#include "../strategy.h"
-
-/**
- * @file strategy_rr.h
- *
- * This file implements the round robin strategy. In this
- * strategy the next hop is choosen in a round robin way.
- */
-
-/**
- * @brief Return the vft for the Round Robin strategy
- */
-hicn_strategy_vft_t *hicn_rr_strategy_get_vft (void);
-
-#endif // __HICN_STRATEGY_RR_H__
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */