diff options
Diffstat (limited to 'hicn-plugin/src/strategies')
-rw-r--r-- | hicn-plugin/src/strategies/dpo_mw.c | 26 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/dpo_mw.h | 12 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/dpo_rr.c | 25 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/dpo_rr.h | 15 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/strategy_mw.c | 22 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/strategy_mw.h | 7 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/strategy_mw_cli.c | 4 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/strategy_rr.c | 17 | ||||
-rw-r--r-- | hicn-plugin/src/strategies/strategy_rr.h | 7 |
9 files changed, 70 insertions, 65 deletions
diff --git a/hicn-plugin/src/strategies/dpo_mw.c b/hicn-plugin/src/strategies/dpo_mw.c index eebb572c4..12c77bce8 100644 --- a/hicn-plugin/src/strategies/dpo_mw.c +++ b/hicn-plugin/src/strategies/dpo_mw.c @@ -76,8 +76,6 @@ format_hicn_strategy_mw_ctx (u8 * s, va_list * ap) index_t index = va_arg (*ap, index_t); hicn_dpo_ctx_t *dpo_ctx = NULL; hicn_strategy_mw_ctx_t *mw_dpo_ctx = NULL; - dpo_id_t *next_hop = NULL; - hicn_face_vft_t *face_vft = NULL; u32 indent = va_arg (*ap, u32);; dpo_ctx = hicn_strategy_dpo_ctx_get (index); @@ -97,24 +95,20 @@ format_hicn_strategy_mw_ctx (u8 * s, va_list * ap) buf = format (NULL, "TFIB"); else continue; - next_hop = &dpo_ctx->next_hops[i]; - face_vft = hicn_face_get_vft (next_hop->dpoi_type); - if (face_vft != NULL) - { - s = format (s, "\n"); - s = - format (s, "%U ", face_vft->format_face, next_hop->dpoi_index, - indent); - s = format (s, "weight %u", mw_dpo_ctx->weight[i]); - s = format (s, " %s", buf); - } + + 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 (dpo_proto_t proto, const dpo_id_t * next_hop, +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; @@ -126,13 +120,13 @@ hicn_strategy_mw_ctx_create (dpo_proto_t proto, const dpo_id_t * next_hop, *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); + 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 (const dpo_id_t * nh, index_t dpo_idx) +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; diff --git a/hicn-plugin/src/strategies/dpo_mw.h b/hicn-plugin/src/strategies/dpo_mw.h index ccc8d044f..433c415fb 100644 --- a/hicn-plugin/src/strategies/dpo_mw.h +++ b/hicn-plugin/src/strategies/dpo_mw.h @@ -19,6 +19,14 @@ #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 @@ -60,7 +68,7 @@ hicn_dpo_ctx_t *hicn_strategy_mw_ctx_get (index_t index); * @return HICN_ERROR_NONE if the creation was fine, otherwise EINVAL */ void -hicn_strategy_mw_ctx_create (dpo_proto_t proto, const dpo_id_t * next_hop, +hicn_strategy_mw_ctx_create (fib_protocol_t proto, const hicn_face_id_t * next_hop, int nh_len, index_t * dpo_idx); /** @@ -75,7 +83,7 @@ hicn_strategy_mw_ctx_create (dpo_proto_t proto, const dpo_id_t * 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 (const dpo_id_t * nh, index_t dpo_idx); +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. diff --git a/hicn-plugin/src/strategies/dpo_rr.c b/hicn-plugin/src/strategies/dpo_rr.c index a67b06acb..adb7e1025 100644 --- a/hicn-plugin/src/strategies/dpo_rr.c +++ b/hicn-plugin/src/strategies/dpo_rr.c @@ -76,8 +76,6 @@ format_hicn_strategy_rr_ctx (u8 * s, va_list * ap) index_t index = va_arg (*ap, index_t); hicn_dpo_ctx_t *dpo_ctx = NULL; hicn_strategy_rr_ctx_t *rr_dpo_ctx = NULL; - dpo_id_t *next_hop = NULL; - hicn_face_vft_t *face_vft = NULL; u32 indent = va_arg (*ap, u32); dpo_ctx = hicn_strategy_dpo_ctx_get (index); @@ -88,7 +86,7 @@ format_hicn_strategy_rr_ctx (u8 * s, va_list * ap) s = format (s, "hicn-rr, next hop Face %d", - dpo_ctx->next_hops[rr_dpo_ctx->current_nhop].dpoi_index); + dpo_ctx->next_hops[rr_dpo_ctx->current_nhop]); for (i = 0; i < HICN_PARAM_FIB_ENTRY_NHOPS_MAX; i++) { @@ -101,23 +99,18 @@ format_hicn_strategy_rr_ctx (u8 * s, va_list * ap) else continue; - next_hop = &dpo_ctx->next_hops[i]; - face_vft = hicn_face_get_vft (next_hop->dpoi_type); - if (face_vft != NULL) - { - s = format (s, "\n"); - s = - format (s, "%U ", face_vft->format_face, next_hop->dpoi_index, - indent); - s = format (s, " %s", buf); - } + 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 (dpo_proto_t proto, const dpo_id_t * next_hop, +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; @@ -129,13 +122,13 @@ hicn_strategy_rr_ctx_create (dpo_proto_t proto, const dpo_id_t * next_hop, *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); + 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 (const dpo_id_t * nh, index_t dpo_idx) +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; diff --git a/hicn-plugin/src/strategies/dpo_rr.h b/hicn-plugin/src/strategies/dpo_rr.h index 8afd0dabc..e4e5b5372 100644 --- a/hicn-plugin/src/strategies/dpo_rr.h +++ b/hicn-plugin/src/strategies/dpo_rr.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * 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: @@ -20,6 +20,15 @@ #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 */ @@ -62,7 +71,7 @@ hicn_dpo_ctx_t *hicn_strategy_rr_ctx_get (index_t index); * @return HICN_ERROR_NONE if the creation was fine, otherwise EINVAL */ void -hicn_strategy_rr_ctx_create (dpo_proto_t proto, const dpo_id_t * next_hop, +hicn_strategy_rr_ctx_create (fib_protocol_t proto, const hicn_face_id_t * next_hop, int nh_len, index_t * dpo_idx); /** @@ -77,7 +86,7 @@ hicn_strategy_rr_ctx_create (dpo_proto_t proto, const dpo_id_t * 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 (const dpo_id_t * nh, index_t dpo_idx); +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. diff --git a/hicn-plugin/src/strategies/strategy_mw.c b/hicn-plugin/src/strategies/strategy_mw.c index 2422d4fed..fe4d5896a 100644 --- a/hicn-plugin/src/strategies/strategy_mw.c +++ b/hicn-plugin/src/strategies/strategy_mw.c @@ -25,7 +25,7 @@ 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, - dpo_id_t ** outface); + 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); @@ -51,7 +51,7 @@ hicn_mw_strategy_get_vft (void) /* 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, dpo_id_t ** outface) +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); @@ -64,20 +64,14 @@ hicn_select_next_hop_mw (index_t dpo_idx, int *nh_idx, dpo_id_t ** outface) u8 next_hop_index = 0; for (int i = 0; i < dpo_ctx->entry_count; i++) { - if (dpo_id_is_valid (&dpo_ctx->next_hops[i])) - { - if (hicn_strategy_mw_ctx->weight[next_hop_index] < - hicn_strategy_mw_ctx->weight[i]) - { - next_hop_index = i; - } - } + if (hicn_strategy_mw_ctx->weight[next_hop_index] < + hicn_strategy_mw_ctx->weight[i]) + { + next_hop_index = i; + } } - if (!dpo_id_is_valid (&dpo_ctx->next_hops[next_hop_index])) - return HICN_ERROR_STRATEGY_NH_NOT_FOUND; - - *outface = (dpo_id_t *) & dpo_ctx->next_hops[next_hop_index]; + *outface = dpo_ctx->next_hops[next_hop_index]; return HICN_ERROR_NONE; } diff --git a/hicn-plugin/src/strategies/strategy_mw.h b/hicn-plugin/src/strategies/strategy_mw.h index f64f1fdc7..9e0078b23 100644 --- a/hicn-plugin/src/strategies/strategy_mw.h +++ b/hicn-plugin/src/strategies/strategy_mw.h @@ -19,6 +19,13 @@ #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); diff --git a/hicn-plugin/src/strategies/strategy_mw_cli.c b/hicn-plugin/src/strategies/strategy_mw_cli.c index 701f96fa7..636d7effa 100644 --- a/hicn-plugin/src/strategies/strategy_mw_cli.c +++ b/hicn-plugin/src/strategies/strategy_mw_cli.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * 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: @@ -97,7 +97,7 @@ hicn_mw_strategy_cli_set_weight_command_fn (vlib_main_t * vm, (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].dpoi_index == (index_t) faceid) + if (hicn_dpo_ctx->next_hops[i] == faceid) idx = i; if (idx == ~0) diff --git a/hicn-plugin/src/strategies/strategy_rr.c b/hicn-plugin/src/strategies/strategy_rr.c index cdcca7f2a..4c65ce52a 100644 --- a/hicn-plugin/src/strategies/strategy_rr.c +++ b/hicn-plugin/src/strategies/strategy_rr.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * 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: @@ -26,7 +26,7 @@ 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, - dpo_id_t ** outface); + 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); @@ -51,7 +51,7 @@ hicn_rr_strategy_get_vft (void) /* 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, dpo_id_t ** outface) +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); @@ -61,15 +61,8 @@ hicn_select_next_hop_rr (index_t dpo_idx, int *nh_idx, dpo_id_t ** outface) hicn_strategy_rr_ctx_t *hicn_strategy_rr_ctx = (hicn_strategy_rr_ctx_t *) dpo_ctx->data; - if (dpo_id_is_valid - (&dpo_ctx->next_hops[hicn_strategy_rr_ctx->current_nhop])) - { - *outface = - (dpo_id_t *) & dpo_ctx->next_hops[hicn_strategy_rr_ctx->current_nhop]; - - } - else - return HICN_ERROR_STRATEGY_NH_NOT_FOUND; + *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; diff --git a/hicn-plugin/src/strategies/strategy_rr.h b/hicn-plugin/src/strategies/strategy_rr.h index 3936845fe..4dfe76b43 100644 --- a/hicn-plugin/src/strategies/strategy_rr.h +++ b/hicn-plugin/src/strategies/strategy_rr.h @@ -19,6 +19,13 @@ #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); |