diff options
Diffstat (limited to 'hicn-plugin/src/strategies')
-rw-r--r-- | hicn-plugin/src/strategies/dpo_mw.c | 161 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/dpo_mw.h | 149 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/dpo_rr.c | 160 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/dpo_rr.h | 152 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/strategy_mw.c | 128 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/strategy_mw.h | 41 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/strategy_mw_cli.c | 142 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/strategy_rr.c | 122 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/strategy_rr.h | 41 |
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: - */ |