summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vnet.am8
-rw-r--r--src/vnet/policer/policer.api147
-rw-r--r--src/vnet/policer/policer_api.c232
-rw-r--r--src/vnet/vnet_all_api_h.h1
-rw-r--r--src/vpp/api/api.c138
-rw-r--r--src/vpp/api/vpe.api128
6 files changed, 387 insertions, 267 deletions
diff --git a/src/vnet.am b/src/vnet.am
index 96cfa5578f9..3d681a13374 100644
--- a/src/vnet.am
+++ b/src/vnet.am
@@ -73,12 +73,16 @@ API_FILES += vnet/interface.api
libvnet_la_SOURCES += \
vnet/policer/node_funcs.c \
vnet/policer/policer.c \
- vnet/policer/xlate.c
+ vnet/policer/xlate.c \
+ vnet/policer/policer_api.c
nobase_include_HEADERS += \
vnet/policer/police.h \
vnet/policer/policer.h \
- vnet/policer/xlate.h
+ vnet/policer/xlate.h \
+ vnet/policer/policer.api.h
+
+API_FILES += vnet/policer/policer.api
########################################
# Cop - junk filter
diff --git a/src/vnet/policer/policer.api b/src/vnet/policer/policer.api
new file mode 100644
index 00000000000..26c69032907
--- /dev/null
+++ b/src/vnet/policer/policer.api
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2015-2016 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.
+ */
+
+/** \brief Add/del policer
+ @param client_index - opaque cookie to identify the sender
+ @param context - sender context, to match reply w/ request
+ @param is_add - add policer if non-zero, else delete
+ @param name - policer name
+ @param cir - CIR
+ @param eir - EIR
+ @param cb - Committed Burst
+ @param eb - Excess or Peak Burst
+ @param rate_type - rate type
+ @param round_type - rounding type
+ @param type - policer algorithm
+ @param color_aware - 0=color-blind, 1=color-aware
+ @param conform_action_type - conform action type
+ @param conform_dscp - DSCP for conform mar-and-transmit action
+ @param exceed_action_type - exceed action type
+ @param exceed_dscp - DSCP for exceed mar-and-transmit action
+ @param violate_action_type - violate action type
+ @param violate_dscp - DSCP for violate mar-and-transmit action
+*/
+define policer_add_del
+{
+ u32 client_index;
+ u32 context;
+
+ u8 is_add;
+ u8 name[64];
+ u32 cir;
+ u32 eir;
+ u64 cb;
+ u64 eb;
+ u8 rate_type;
+ u8 round_type;
+ u8 type;
+ u8 color_aware;
+ u8 conform_action_type;
+ u8 conform_dscp;
+ u8 exceed_action_type;
+ u8 exceed_dscp;
+ u8 violate_action_type;
+ u8 violate_dscp;
+};
+
+/** \brief Add/del policer response
+ @param context - sender context, to match reply w/ request
+ @param retval - return value for request
+ @param policer_index - for add, returned index of the new policer
+*/
+define policer_add_del_reply
+{
+ u32 context;
+ i32 retval;
+ u32 policer_index;
+};
+
+/** \brief Get list of policers
+ @param client_index - opaque cookie to identify the sender
+ @param context - sender context, to match reply w/ request
+ @param match_name_valid - if 0 request all policers otherwise use match_name
+ @param match_name - policer name
+*/
+define policer_dump
+{
+ u32 client_index;
+ u32 context;
+
+ u8 match_name_valid;
+ u8 match_name[64];
+};
+
+/** \brief Policer operational state response.
+ @param context - sender context, to match reply w/ request
+ @param name - policer name
+ @param cir - CIR
+ @param eir - EIR
+ @param cb - Committed Burst
+ @param eb - Excess or Peak Burst
+ @param rate_type - rate type
+ @param round_type - rounding type
+ @param type - policer algorithm
+ @param conform_action_type - conform action type
+ @param conform_dscp - DSCP for conform mar-and-transmit action
+ @param exceed_action_type - exceed action type
+ @param exceed_dscp - DSCP for exceed mar-and-transmit action
+ @param violate_action_type - violate action type
+ @param violate_dscp - DSCP for violate mar-and-transmit action
+ @param single_rate - 1 = single rate policer, 0 = two rate policer
+ @param color_aware - for hierarchical policing
+ @param scale - power-of-2 shift amount for lower rates
+ @param cir_tokens_per_period - number of tokens for each period
+ @param pir_tokens_per_period - number of tokens for each period for 2-rate policer
+ @param current_limit - current limit
+ @param current_bucket - current bucket
+ @param extended_limit - extended limit
+ @param extended_bucket - extended bucket
+ @param last_update_time - last update time
+*/
+define policer_details
+{
+ u32 context;
+
+ u8 name[64];
+ u32 cir;
+ u32 eir;
+ u64 cb;
+ u64 eb;
+ u8 rate_type;
+ u8 round_type;
+ u8 type;
+ u8 conform_action_type;
+ u8 conform_dscp;
+ u8 exceed_action_type;
+ u8 exceed_dscp;
+ u8 violate_action_type;
+ u8 violate_dscp;
+ u8 single_rate;
+ u8 color_aware;
+ u32 scale;
+ u32 cir_tokens_per_period;
+ u32 pir_tokens_per_period;
+ u32 current_limit;
+ u32 current_bucket;
+ u32 extended_limit;
+ u32 extended_bucket;
+ u64 last_update_time;
+};
+
+/*
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/src/vnet/policer/policer_api.c b/src/vnet/policer/policer_api.c
new file mode 100644
index 00000000000..fb5f08b890d
--- /dev/null
+++ b/src/vnet/policer/policer_api.c
@@ -0,0 +1,232 @@
+/*
+ *------------------------------------------------------------------
+ * policer_api.c - policer api
+ *
+ * Copyright (c) 2016 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 <vlibmemory/api.h>
+
+#include <vnet/interface.h>
+#include <vnet/api_errno.h>
+#include <vnet/policer/policer.h>
+
+#include <vnet/vnet_msg_enum.h>
+
+#define vl_typedefs /* define message structures */
+#include <vnet/vnet_all_api_h.h>
+#undef vl_typedefs
+
+#define vl_endianfun /* define message structures */
+#include <vnet/vnet_all_api_h.h>
+#undef vl_endianfun
+
+/* instantiate all the print functions we know about */
+#define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
+#define vl_printfun
+#include <vnet/vnet_all_api_h.h>
+#undef vl_printfun
+
+#include <vlibapi/api_helper_macros.h>
+
+#define foreach_vpe_api_msg \
+_(POLICER_ADD_DEL, policer_add_del) \
+_(POLICER_DUMP, policer_dump)
+
+static void
+vl_api_policer_add_del_t_handler (vl_api_policer_add_del_t * mp)
+{
+ vlib_main_t *vm = vlib_get_main ();
+ vl_api_policer_add_del_reply_t *rmp;
+ int rv = 0;
+ u8 *name = NULL;
+ sse2_qos_pol_cfg_params_st cfg;
+ clib_error_t *error;
+ u32 policer_index;
+
+ name = format (0, "%s", mp->name);
+
+ memset (&cfg, 0, sizeof (cfg));
+ cfg.rfc = mp->type;
+ cfg.rnd_type = mp->round_type;
+ cfg.rate_type = mp->rate_type;
+ cfg.rb.kbps.cir_kbps = mp->cir;
+ cfg.rb.kbps.eir_kbps = mp->eir;
+ cfg.rb.kbps.cb_bytes = mp->cb;
+ cfg.rb.kbps.eb_bytes = mp->eb;
+ cfg.conform_action.action_type = mp->conform_action_type;
+ cfg.conform_action.dscp = mp->conform_dscp;
+ cfg.exceed_action.action_type = mp->exceed_action_type;
+ cfg.exceed_action.dscp = mp->exceed_dscp;
+ cfg.violate_action.action_type = mp->violate_action_type;
+ cfg.violate_action.dscp = mp->violate_dscp;
+ cfg.color_aware = mp->color_aware;
+
+ error = policer_add_del (vm, name, &cfg, &policer_index, mp->is_add);
+
+ if (error)
+ rv = VNET_API_ERROR_UNSPECIFIED;
+
+ /* *INDENT-OFF* */
+ REPLY_MACRO2(VL_API_POLICER_ADD_DEL_REPLY,
+ ({
+ if (rv == 0 && mp->is_add)
+ rmp->policer_index = ntohl(policer_index);
+ else
+ rmp->policer_index = ~0;
+ }));
+ /* *INDENT-ON* */
+}
+
+static void
+send_policer_details (u8 * name,
+ sse2_qos_pol_cfg_params_st * config,
+ policer_read_response_type_st * templ,
+ unix_shared_memory_queue_t * q, u32 context)
+{
+ vl_api_policer_details_t *mp;
+
+ mp = vl_msg_api_alloc (sizeof (*mp));
+ memset (mp, 0, sizeof (*mp));
+ mp->_vl_msg_id = ntohs (VL_API_POLICER_DETAILS);
+ mp->context = context;
+ mp->cir = htonl (config->rb.kbps.cir_kbps);
+ mp->eir = htonl (config->rb.kbps.eir_kbps);
+ mp->cb = htonl (config->rb.kbps.cb_bytes);
+ mp->eb = htonl (config->rb.kbps.eb_bytes);
+ mp->rate_type = config->rate_type;
+ mp->round_type = config->rnd_type;
+ mp->type = config->rfc;
+ mp->conform_action_type = config->conform_action.action_type;
+ mp->conform_dscp = config->conform_action.dscp;
+ mp->exceed_action_type = config->exceed_action.action_type;
+ mp->exceed_dscp = config->exceed_action.dscp;
+ mp->violate_action_type = config->violate_action.action_type;
+ mp->violate_dscp = config->violate_action.dscp;
+ mp->single_rate = templ->single_rate ? 1 : 0;
+ mp->color_aware = templ->color_aware ? 1 : 0;
+ mp->scale = htonl (templ->scale);
+ mp->cir_tokens_per_period = htonl (templ->cir_tokens_per_period);
+ mp->pir_tokens_per_period = htonl (templ->pir_tokens_per_period);
+ mp->current_limit = htonl (templ->current_limit);
+ mp->current_bucket = htonl (templ->current_bucket);
+ mp->extended_limit = htonl (templ->extended_limit);
+ mp->extended_bucket = htonl (templ->extended_bucket);
+ mp->last_update_time = clib_host_to_net_u64 (templ->last_update_time);
+
+ strncpy ((char *) mp->name, (char *) name, ARRAY_LEN (mp->name) - 1);
+
+ vl_msg_api_send_shmem (q, (u8 *) & mp);
+}
+
+static void
+vl_api_policer_dump_t_handler (vl_api_policer_dump_t * mp)
+{
+ unix_shared_memory_queue_t *q;
+ vnet_policer_main_t *pm = &vnet_policer_main;
+ hash_pair_t *hp;
+ uword *p;
+ u32 pool_index;
+ u8 *match_name = 0;
+ u8 *name;
+ sse2_qos_pol_cfg_params_st *config;
+ policer_read_response_type_st *templ;
+
+ q = vl_api_client_index_to_input_queue (mp->client_index);
+ if (q == 0)
+ return;
+
+ if (mp->match_name_valid)
+ {
+ match_name = format (0, "%s%c", mp->match_name, 0);
+ }
+
+ if (mp->match_name_valid)
+ {
+ p = hash_get_mem (pm->policer_config_by_name, match_name);
+ if (p)
+ {
+ pool_index = p[0];
+ config = pool_elt_at_index (pm->configs, pool_index);
+ templ = pool_elt_at_index (pm->policer_templates, pool_index);
+ send_policer_details (match_name, config, templ, q, mp->context);
+ }
+ }
+ else
+ {
+ /* *INDENT-OFF* */
+ hash_foreach_pair (hp, pm->policer_config_by_name,
+ ({
+ name = (u8 *) hp->key;
+ pool_index = hp->value[0];
+ config = pool_elt_at_index (pm->configs, pool_index);
+ templ = pool_elt_at_index (pm->policer_templates, pool_index);
+ send_policer_details(name, config, templ, q, mp->context);
+ }));
+ /* *INDENT-ON* */
+ }
+}
+
+/*
+ * policer_api_hookup
+ * Add vpe's API message handlers to the table.
+ * vlib has alread mapped shared memory and
+ * added the client registration handlers.
+ * See .../vlib-api/vlibmemory/memclnt_vlib.c:memclnt_process()
+ */
+#define vl_msg_name_crc_list
+#include <vnet/vnet_all_api_h.h>
+#undef vl_msg_name_crc_list
+
+static void
+setup_message_id_table (api_main_t * am)
+{
+#define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id);
+ foreach_vl_msg_name_crc_policer;
+#undef _
+}
+
+static clib_error_t *
+policer_api_hookup (vlib_main_t * vm)
+{
+ api_main_t *am = &api_main;
+
+#define _(N,n) \
+ vl_msg_api_set_handlers(VL_API_##N, #n, \
+ vl_api_##n##_t_handler, \
+ vl_noop_handler, \
+ vl_api_##n##_t_endian, \
+ vl_api_##n##_t_print, \
+ sizeof(vl_api_##n##_t), 1);
+ foreach_vpe_api_msg;
+#undef _
+ /*
+ * Set up the (msg_name, crc, message-id) table
+ */
+ setup_message_id_table (am);
+
+ return 0;
+}
+
+VLIB_API_INIT_FUNCTION (policer_api_hookup);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/src/vnet/vnet_all_api_h.h b/src/vnet/vnet_all_api_h.h
index 9a75872d0b0..801ec2d11f3 100644
--- a/src/vnet/vnet_all_api_h.h
+++ b/src/vnet/vnet_all_api_h.h
@@ -56,6 +56,7 @@
#include <vnet/flow/flow.api.h>
#include <vnet/dhcp/dhcp.api.h>
#include <vnet/cop/cop.api.h>
+#include <vnet/policer/policer.api.h>
/*
* fd.io coding-style-patch-verification: ON
diff --git a/src/vpp/api/api.c b/src/vpp/api/api.c
index f929f566049..60fd0199d2a 100644
--- a/src/vpp/api/api.c
+++ b/src/vpp/api/api.c
@@ -66,7 +66,6 @@
#include <vnet/map/map.h>
#include <vnet/ip/ip6_hop_by_hop.h>
#include <vnet/ip/ip_source_and_port_range_check.h>
-#include <vnet/policer/policer.h>
#include <vnet/ip/punt.h>
#include <vnet/feature/feature.h>
@@ -144,8 +143,6 @@ _(BD_IP_MAC_ADD_DEL, bd_ip_mac_add_del) \
_(GET_NODE_GRAPH, get_node_graph) \
_(IOAM_ENABLE, ioam_enable) \
_(IOAM_DISABLE, ioam_disable) \
-_(POLICER_ADD_DEL, policer_add_del) \
-_(POLICER_DUMP, policer_dump) \
_(GET_NEXT_INDEX, get_next_index) \
_(PG_CREATE_INTERFACE, pg_create_interface) \
_(PG_CAPTURE, pg_capture) \
@@ -2028,141 +2025,6 @@ vl_api_ioam_disable_t_handler (vl_api_ioam_disable_t * mp)
}
static void
-vl_api_policer_add_del_t_handler (vl_api_policer_add_del_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- vl_api_policer_add_del_reply_t *rmp;
- int rv = 0;
- u8 *name = NULL;
- sse2_qos_pol_cfg_params_st cfg;
- clib_error_t *error;
- u32 policer_index;
-
- name = format (0, "%s", mp->name);
-
- memset (&cfg, 0, sizeof (cfg));
- cfg.rfc = mp->type;
- cfg.rnd_type = mp->round_type;
- cfg.rate_type = mp->rate_type;
- cfg.rb.kbps.cir_kbps = mp->cir;
- cfg.rb.kbps.eir_kbps = mp->eir;
- cfg.rb.kbps.cb_bytes = mp->cb;
- cfg.rb.kbps.eb_bytes = mp->eb;
- cfg.conform_action.action_type = mp->conform_action_type;
- cfg.conform_action.dscp = mp->conform_dscp;
- cfg.exceed_action.action_type = mp->exceed_action_type;
- cfg.exceed_action.dscp = mp->exceed_dscp;
- cfg.violate_action.action_type = mp->violate_action_type;
- cfg.violate_action.dscp = mp->violate_dscp;
- cfg.color_aware = mp->color_aware;
-
- error = policer_add_del (vm, name, &cfg, &policer_index, mp->is_add);
-
- if (error)
- rv = VNET_API_ERROR_UNSPECIFIED;
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_POLICER_ADD_DEL_REPLY,
- ({
- if (rv == 0 && mp->is_add)
- rmp->policer_index = ntohl(policer_index);
- else
- rmp->policer_index = ~0;
- }));
- /* *INDENT-ON* */
-}
-
-static void
-send_policer_details (u8 * name,
- sse2_qos_pol_cfg_params_st * config,
- policer_read_response_type_st * templ,
- unix_shared_memory_queue_t * q, u32 context)
-{
- vl_api_policer_details_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_POLICER_DETAILS);
- mp->context = context;
- mp->cir = htonl (config->rb.kbps.cir_kbps);
- mp->eir = htonl (config->rb.kbps.eir_kbps);
- mp->cb = htonl (config->rb.kbps.cb_bytes);
- mp->eb = htonl (config->rb.kbps.eb_bytes);
- mp->rate_type = config->rate_type;
- mp->round_type = config->rnd_type;
- mp->type = config->rfc;
- mp->conform_action_type = config->conform_action.action_type;
- mp->conform_dscp = config->conform_action.dscp;
- mp->exceed_action_type = config->exceed_action.action_type;
- mp->exceed_dscp = config->exceed_action.dscp;
- mp->violate_action_type = config->violate_action.action_type;
- mp->violate_dscp = config->violate_action.dscp;
- mp->single_rate = templ->single_rate ? 1 : 0;
- mp->color_aware = templ->color_aware ? 1 : 0;
- mp->scale = htonl (templ->scale);
- mp->cir_tokens_per_period = htonl (templ->cir_tokens_per_period);
- mp->pir_tokens_per_period = htonl (templ->pir_tokens_per_period);
- mp->current_limit = htonl (templ->current_limit);
- mp->current_bucket = htonl (templ->current_bucket);
- mp->extended_limit = htonl (templ->extended_limit);
- mp->extended_bucket = htonl (templ->extended_bucket);
- mp->last_update_time = clib_host_to_net_u64 (templ->last_update_time);
-
- strncpy ((char *) mp->name, (char *) name, ARRAY_LEN (mp->name) - 1);
-
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
-static void
-vl_api_policer_dump_t_handler (vl_api_policer_dump_t * mp)
-{
- unix_shared_memory_queue_t *q;
- vnet_policer_main_t *pm = &vnet_policer_main;
- hash_pair_t *hp;
- uword *p;
- u32 pool_index;
- u8 *match_name = 0;
- u8 *name;
- sse2_qos_pol_cfg_params_st *config;
- policer_read_response_type_st *templ;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
- return;
-
- if (mp->match_name_valid)
- {
- match_name = format (0, "%s%c", mp->match_name, 0);
- }
-
- if (mp->match_name_valid)
- {
- p = hash_get_mem (pm->policer_config_by_name, match_name);
- if (p)
- {
- pool_index = p[0];
- config = pool_elt_at_index (pm->configs, pool_index);
- templ = pool_elt_at_index (pm->policer_templates, pool_index);
- send_policer_details (match_name, config, templ, q, mp->context);
- }
- }
- else
- {
- /* *INDENT-OFF* */
- hash_foreach_pair (hp, pm->policer_config_by_name,
- ({
- name = (u8 *) hp->key;
- pool_index = hp->value[0];
- config = pool_elt_at_index (pm->configs, pool_index);
- templ = pool_elt_at_index (pm->policer_templates, pool_index);
- send_policer_details(name, config, templ, q, mp->context);
- }));
- /* *INDENT-ON* */
- }
-}
-
-
-static void
vl_api_pg_create_interface_t_handler (vl_api_pg_create_interface_t * mp)
{
vl_api_pg_create_interface_reply_t *rmp;
diff --git a/src/vpp/api/vpe.api b/src/vpp/api/vpe.api
index 6e174009c85..24f482936d0 100644
--- a/src/vpp/api/vpe.api
+++ b/src/vpp/api/vpe.api
@@ -45,6 +45,7 @@
* FLOW APIs: see ... /src/vnet/flow/{flow.api, flow_api.c}
* DHCP APIs: see ... /src/vnet/dhcp/{dhcpk.api, dhcp_api.c}
* COP APIs: see ... /src/vnet/cop/{cop.api, cop_api.c}
+ * POLICER APIs: see ... /src/vnet/policer/{policer.api, policer_api.c}
*/
/** \brief Create a new subinterface with the given vlan id
@@ -1063,133 +1064,6 @@ define ioam_disable_reply
i32 retval;
};
-/** \brief Add/del policer
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_add - add policer if non-zero, else delete
- @param name - policer name
- @param cir - CIR
- @param eir - EIR
- @param cb - Committed Burst
- @param eb - Excess or Peak Burst
- @param rate_type - rate type
- @param round_type - rounding type
- @param type - policer algorithm
- @param color_aware - 0=color-blind, 1=color-aware
- @param conform_action_type - conform action type
- @param conform_dscp - DSCP for conform mar-and-transmit action
- @param exceed_action_type - exceed action type
- @param exceed_dscp - DSCP for exceed mar-and-transmit action
- @param violate_action_type - violate action type
- @param violate_dscp - DSCP for violate mar-and-transmit action
-*/
-define policer_add_del
-{
- u32 client_index;
- u32 context;
-
- u8 is_add;
- u8 name[64];
- u32 cir;
- u32 eir;
- u64 cb;
- u64 eb;
- u8 rate_type;
- u8 round_type;
- u8 type;
- u8 color_aware;
- u8 conform_action_type;
- u8 conform_dscp;
- u8 exceed_action_type;
- u8 exceed_dscp;
- u8 violate_action_type;
- u8 violate_dscp;
-};
-
-/** \brief Add/del policer response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
- @param policer_index - for add, returned index of the new policer
-*/
-define policer_add_del_reply
-{
- u32 context;
- i32 retval;
- u32 policer_index;
-};
-
-/** \brief Get list of policers
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param match_name_valid - if 0 request all policers otherwise use match_name
- @param match_name - policer name
-*/
-define policer_dump
-{
- u32 client_index;
- u32 context;
-
- u8 match_name_valid;
- u8 match_name[64];
-};
-
-/** \brief Policer operational state response.
- @param context - sender context, to match reply w/ request
- @param name - policer name
- @param cir - CIR
- @param eir - EIR
- @param cb - Committed Burst
- @param eb - Excess or Peak Burst
- @param rate_type - rate type
- @param round_type - rounding type
- @param type - policer algorithm
- @param conform_action_type - conform action type
- @param conform_dscp - DSCP for conform mar-and-transmit action
- @param exceed_action_type - exceed action type
- @param exceed_dscp - DSCP for exceed mar-and-transmit action
- @param violate_action_type - violate action type
- @param violate_dscp - DSCP for violate mar-and-transmit action
- @param single_rate - 1 = single rate policer, 0 = two rate policer
- @param color_aware - for hierarchical policing
- @param scale - power-of-2 shift amount for lower rates
- @param cir_tokens_per_period - number of tokens for each period
- @param pir_tokens_per_period - number of tokens for each period for 2-rate policer
- @param current_limit - current limit
- @param current_bucket - current bucket
- @param extended_limit - extended limit
- @param extended_bucket - extended bucket
- @param last_update_time - last update time
-*/
-define policer_details
-{
- u32 context;
-
- u8 name[64];
- u32 cir;
- u32 eir;
- u64 cb;
- u64 eb;
- u8 rate_type;
- u8 round_type;
- u8 type;
- u8 conform_action_type;
- u8 conform_dscp;
- u8 exceed_action_type;
- u8 exceed_dscp;
- u8 violate_action_type;
- u8 violate_dscp;
- u8 single_rate;
- u8 color_aware;
- u32 scale;
- u32 cir_tokens_per_period;
- u32 pir_tokens_per_period;
- u32 current_limit;
- u32 current_bucket;
- u32 extended_limit;
- u32 extended_bucket;
- u64 last_update_time;
-};
-
/** \brief Query relative index via node names
@param client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request