X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fqos%2Fqos_egress_map.c;h=43c0c55df076bd144f0b5a5c006f303af578fc25;hb=c3148b1be8f519c80c4417c21b978dfef72b351b;hp=158ff8445c605a81e50f2c6ab49f7d8dfb656846;hpb=b7b929931a07fbb27b43d5cd105f366c3e29807e;p=vpp.git diff --git a/src/vnet/qos/qos_egress_map.c b/src/vnet/qos/qos_egress_map.c index 158ff8445c6..43c0c55df07 100644 --- a/src/vnet/qos/qos_egress_map.c +++ b/src/vnet/qos/qos_egress_map.c @@ -41,6 +41,21 @@ qos_egress_map_find (qos_egress_map_id_t mid) return (INDEX_INVALID); } +qos_egress_map_id_t +qos_egress_map_get_id (index_t qemi) +{ + qos_egress_map_id_t qid; + index_t qmi; + + hash_foreach(qid, qmi, qem_db, + ({ + if (qmi == qemi) + return (qid); + })); + + return (~0); +} + qos_egress_map_t * qos_egress_map_find_i (qos_egress_map_id_t mid) { @@ -106,6 +121,18 @@ qos_egress_map_delete (qos_egress_map_id_t mid) } } +void +qos_egress_map_walk (qos_egress_map_walk_cb_t fn, void *c) +{ + qos_egress_map_id_t qid; + index_t qmi; + + hash_foreach(qid, qmi, qem_db, + ({ + fn(qid, pool_elt_at_index(qem_pool, qmi), c); + })); +} + static clib_error_t * qos_egress_map_update_cli (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) @@ -150,66 +177,62 @@ qos_egress_map_update_cli (vlib_main_t * vm, * @cliexpar * @cliexcmd{qos egress map id 0 [ip][4]=4} ?*/ -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (qos_egress_map_update_command, static) = { .path = "qos egress map", .short_help = "qos egress map id %d [delete] {[SOURCE][INPUT]=OUTPUT}", .function = qos_egress_map_update_cli, .is_mp_safe = 1, }; -/* *INDENT-ON* */ -u8 * -format_qos_egress_map (u8 * s, va_list * args) -{ - qos_egress_map_t *qem = va_arg (*args, qos_egress_map_t *); - u32 indent = va_arg (*args, u32); - int qs; - u32 ii; - - FOR_EACH_QOS_SOURCE (qs) + u8 *format_qos_egress_map (u8 * s, va_list * args) { - s = format (s, "%U%U:[", - format_white_space, indent, format_qos_source, qs); + qos_egress_map_t *qem = va_arg (*args, qos_egress_map_t *); + u32 indent = va_arg (*args, u32); + int qs; + u32 ii; - for (ii = 0; ii < ARRAY_LEN (qem->qem_output[qs]) - 1; ii++) - { - s = format (s, "%d,", qem->qem_output[qs][ii]); - } - s = format (s, "%d]\n", qem->qem_output[qs][ii]); - } - - return (s); -} - -static clib_error_t * -qos_egress_map_show (vlib_main_t * vm, - unformat_input_t * input, vlib_cli_command_t * cmd) -{ - qos_egress_map_id_t map_id; - qos_egress_map_t *qem; - clib_error_t *error; - - map_id = ~0; - qem = NULL; - error = NULL; - - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) + FOR_EACH_QOS_SOURCE (qs) { - if (unformat (input, "id %d", &map_id)) - ; - else + s = format (s, "%U%U:[", + format_white_space, indent, format_qos_source, qs); + + for (ii = 0; ii < ARRAY_LEN (qem->qem_output[qs]) - 1; ii++) { - error = unformat_parse_error (input); - goto done; + s = format (s, "%d,", qem->qem_output[qs][ii]); } + s = format (s, "%d]\n", qem->qem_output[qs][ii]); } - if (~0 == map_id) - { - index_t qemi; + return (s); + } + + static clib_error_t *qos_egress_map_show (vlib_main_t * vm, + unformat_input_t * input, + vlib_cli_command_t * cmd) + { + qos_egress_map_id_t map_id; + qos_egress_map_t *qem; + clib_error_t *error; + + map_id = ~0; + qem = NULL; + error = NULL; + + while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (input, "id %d", &map_id)) + ; + else + { + error = unformat_parse_error (input); + goto done; + } + } + + if (~0 == map_id) + { + index_t qemi; - /* *INDENT-OFF* */ hash_foreach(map_id, qemi, qem_db, ({ vlib_cli_output (vm, " Map-ID:%d\n%U", @@ -217,26 +240,25 @@ qos_egress_map_show (vlib_main_t * vm, format_qos_egress_map, pool_elt_at_index(qem_pool, qemi), 2); })); - /* *INDENT-ON* */ - } - else - { - qem = qos_egress_map_find_i (map_id); - - if (NULL == qem) - { - error = clib_error_return (0, "No Map for ID %d", map_id); - } - else - { - vlib_cli_output (vm, " Map-ID:%d\n%U", - map_id, format_qos_egress_map, qem, 2); - } - } + } + else + { + qem = qos_egress_map_find_i (map_id); + + if (NULL == qem) + { + error = clib_error_return (0, "No Map for ID %d", map_id); + } + else + { + vlib_cli_output (vm, " Map-ID:%d\n%U", + map_id, format_qos_egress_map, qem, 2); + } + } -done: - return (error); -} + done: + return (error); + } /*? * Show Egress Qos Maps @@ -244,14 +266,12 @@ done: * @cliexpar * @cliexcmd{show qos egress map} ?*/ -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (qos_egress_map_show_command, static) = { .path = "show qos egress map", .short_help = "show qos egress map id %d", .function = qos_egress_map_show, .is_mp_safe = 1, }; -/* *INDENT-ON* */ /* * fd.io coding-style-patch-verification: ON