API refactoring : policer 63/4863/5
authorPavel Kotucek <pkotucek@cisco.com>
Wed, 25 Jan 2017 07:45:38 +0000 (08:45 +0100)
committerDamjan Marion <dmarion.lists@gmail.com>
Fri, 27 Jan 2017 20:52:33 +0000 (20:52 +0000)
Change-Id: Ia7d8b557bcdf45eb8e33bb3d297bc6f7ad321c72
Signed-off-by: Pavel Kotucek <pkotucek@cisco.com>
src/vnet.am
src/vnet/policer/policer.api [new file with mode: 0644]
src/vnet/policer/policer_api.c [new file with mode: 0644]
src/vnet/vnet_all_api_h.h
src/vpp/api/api.c
src/vpp/api/vpe.api

index 96cfa55..3d681a1 100644 (file)
@@ -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 (file)
index 0000000..26c6903
--- /dev/null
@@ -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 (file)
index 0000000..fb5f08b
--- /dev/null
@@ -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:
+ */
index 9a75872..801ec2d 100644 (file)
@@ -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
index f929f56..60fd019 100644 (file)
@@ -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)                                               \
@@ -2027,141 +2024,6 @@ vl_api_ioam_disable_t_handler (vl_api_ioam_disable_t * mp)
   REPLY_MACRO (VL_API_IOAM_DISABLE_REPLY);
 }
 
-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)
 {
index 6e17400..24f4829 100644 (file)
@@ -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