Re: [ovs-dev] [PATCH v15] Improved Packet Drop Statistics in OVS

2019-11-25 Thread Ilya Maximets
On 25.11.2019 14:10, Eelco Chaudron wrote:
> Anju are you going to sent a v16 with the change?
> 
> Ilya putting your new email address on CC, to make sure you have no further 
> comments…

My comments are mostly the same as was for the previous versions.
They wasn't fixed.  'lib' files still includes 'ofproto' headers,
non-kernel coding style in kernel headers, 'enum xlate_error'
duplicated now for unknown reason..

> 
> //Eelco
> 
> 
> On 11 Nov 2019, at 15:51, Eelco Chaudron wrote:
> 
>> On 8 Nov 2019, at 6:02, Anju Thomas wrote:
>>
>>> Currently OVS maintains explicit packet drop/error counters only on port 
>>> level. Packets that are dropped as part of normal OpenFlow processing are 
>>> counted in flow stats of “drop” flows or as table misses in table stats. 
>>> These can only be interpreted by controllers that know the semantics of the 
>>> configured OpenFlow pipeline.
>>> Without that knowledge, it is impossible for an OVS user to obtain e.g. the 
>>> total number of packets dropped due to OpenFlow rules.
>>>
>>> Furthermore, there are numerous other reasons for which packets can be 
>>> dropped by OVS slow path that are not related to the OpenFlow pipeline.
>>> The generated datapath flow entries include a drop action to avoid further 
>>> expensive upcalls to the slow path, but subsequent packets dropped by the 
>>> datapath are not accounted anywhere.
>>>
>>> Finally, the datapath itself drops packets in certain error situations.
>>> Also, these drops are today not accounted for.This makes it difficult for 
>>> OVS users to monitor packet drop in an OVS instance and to alert a 
>>> management system in case of a unexpected increase of such drops.
>>> Also OVS trouble-shooters face difficulties in analysing packet drops.
>>>
>>> With this patch we implement following changes to address the issues 
>>> mentioned above.
>>>
>>> 1. Identify and account all the silent packet drop scenarios
>>>
>>> 2. Display these drops in ovs-appctl coverage/show
>>>
>>> Co-authored-by: Rohith Basavaraja 
>>> Co-authored-by: Keshav Gupta 
>>> Signed-off-by: Anju Thomas 
>>> Signed-off-by: Rohith Basavaraja 
>>> Signed-off-by: Keshav Gupta 
>>> Acked-by: Eelco Chaudron >
>> Not sure what is happening, but your patches show up from “Sriram Vatala via 
>> dev”
>>
>>
>>> ---
>>
>> 
>>> diff --git a/lib/odp-util.c b/lib/odp-util.c
>>> index 3a574bf..2f8544b 100644
>>> --- a/lib/odp-util.c
>>> +++ b/lib/odp-util.c
>>> @@ -45,6 +45,7 @@
>>>  #include "openvswitch/match.h"
>>>  #include "odp-netlink-macros.h"
>>>  #include "csum.h"
>>> +#include "ofproto/ofproto-dpif-xlate.h"
>>>
>>>  VLOG_DEFINE_THIS_MODULE(odp_util);
>>>
>>> @@ -141,6 +142,7 @@ odp_action_len(uint16_t type)
>>>  case OVS_ACTION_ATTR_PUSH_NSH: return ATTR_LEN_VARIABLE;
>>>  case OVS_ACTION_ATTR_POP_NSH: return 0;
>>>  case OVS_ACTION_ATTR_CHECK_PKT_LEN: return ATTR_LEN_VARIABLE;
>>> +    case OVS_ACTION_ATTR_DROP: return sizeof(uint32_t);
>>>
>>>  case OVS_ACTION_ATTR_UNSPEC:
>>>  case __OVS_ACTION_ATTR_MAX:
>>> @@ -1238,6 +1240,9 @@ format_odp_action(struct ds *ds, const struct nlattr 
>>> *a,
>>>  case OVS_ACTION_ATTR_CHECK_PKT_LEN:
>>>  format_odp_check_pkt_len_action(ds, a, portno_names);
>>>  break;
>>> +    case OVS_ACTION_ATTR_DROP:
>>> +    ds_put_cstr(ds, "drop");
>>> +    break;
>>>  case OVS_ACTION_ATTR_UNSPEC:
>>>  case __OVS_ACTION_ATTR_MAX:
>>>  default:
>>> @@ -2573,8 +2578,10 @@ odp_actions_from_string(const char *s, const struct 
>>> simap *port_names,
>>>  struct ofpbuf *actions)
>>>  {
>>>  size_t old_size;
>>> +    enum xlate_error drop_action;
>>
>> Remove the above, as it’s not used. Make sure you use the --enable-Werror 
>> when doing ./configure as it will catch these errors.
>>
>>
>> Rest looks good to me…
>>
>> ___
>> dev mailing list
>> d...@openvswitch.org
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> 
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH v15] Improved Packet Drop Statistics in OVS

2019-11-25 Thread Eelco Chaudron

Anju are you going to sent a v16 with the change?

Ilya putting your new email address on CC, to make sure you have no 
further comments…


//Eelco


On 11 Nov 2019, at 15:51, Eelco Chaudron wrote:


On 8 Nov 2019, at 6:02, Anju Thomas wrote:

Currently OVS maintains explicit packet drop/error counters only on 
port level. Packets that are dropped as part of normal OpenFlow 
processing are counted in flow stats of “drop” flows or as table 
misses in table stats. These can only be interpreted by controllers 
that know the semantics of the configured OpenFlow pipeline.
Without that knowledge, it is impossible for an OVS user to obtain 
e.g. the total number of packets dropped due to OpenFlow rules.


Furthermore, there are numerous other reasons for which packets can 
be dropped by OVS slow path that are not related to the OpenFlow 
pipeline.
The generated datapath flow entries include a drop action to avoid 
further expensive upcalls to the slow path, but subsequent packets 
dropped by the datapath are not accounted anywhere.


Finally, the datapath itself drops packets in certain error 
situations.
Also, these drops are today not accounted for.This makes it difficult 
for OVS users to monitor packet drop in an OVS instance and to alert 
a management system in case of a unexpected increase of such drops.
Also OVS trouble-shooters face difficulties in analysing packet 
drops.


With this patch we implement following changes to address the issues 
mentioned above.


1. Identify and account all the silent packet drop scenarios

2. Display these drops in ovs-appctl coverage/show

Co-authored-by: Rohith Basavaraja 
Co-authored-by: Keshav Gupta 
Signed-off-by: Anju Thomas 
Signed-off-by: Rohith Basavaraja 
Signed-off-by: Keshav Gupta 
Acked-by: Eelco Chaudron 

Not sure what is happening, but your patches show up from “Sriram 
Vatala via dev”




---




diff --git a/lib/odp-util.c b/lib/odp-util.c
index 3a574bf..2f8544b 100644
--- a/lib/odp-util.c
+++ b/lib/odp-util.c
@@ -45,6 +45,7 @@
 #include "openvswitch/match.h"
 #include "odp-netlink-macros.h"
 #include "csum.h"
+#include "ofproto/ofproto-dpif-xlate.h"

 VLOG_DEFINE_THIS_MODULE(odp_util);

@@ -141,6 +142,7 @@ odp_action_len(uint16_t type)
 case OVS_ACTION_ATTR_PUSH_NSH: return ATTR_LEN_VARIABLE;
 case OVS_ACTION_ATTR_POP_NSH: return 0;
 case OVS_ACTION_ATTR_CHECK_PKT_LEN: return ATTR_LEN_VARIABLE;
+case OVS_ACTION_ATTR_DROP: return sizeof(uint32_t);

 case OVS_ACTION_ATTR_UNSPEC:
 case __OVS_ACTION_ATTR_MAX:
@@ -1238,6 +1240,9 @@ format_odp_action(struct ds *ds, const struct 
nlattr *a,

 case OVS_ACTION_ATTR_CHECK_PKT_LEN:
 format_odp_check_pkt_len_action(ds, a, portno_names);
 break;
+case OVS_ACTION_ATTR_DROP:
+ds_put_cstr(ds, "drop");
+break;
 case OVS_ACTION_ATTR_UNSPEC:
 case __OVS_ACTION_ATTR_MAX:
 default:
@@ -2573,8 +2578,10 @@ odp_actions_from_string(const char *s, const 
struct simap *port_names,

 struct ofpbuf *actions)
 {
 size_t old_size;
+enum xlate_error drop_action;


Remove the above, as it’s not used. Make sure you use the 
--enable-Werror when doing ./configure as it will catch these errors.



Rest looks good to me…

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH v15] Improved Packet Drop Statistics in OVS

2019-11-11 Thread Eelco Chaudron



On 8 Nov 2019, at 6:02, Anju Thomas wrote:

Currently OVS maintains explicit packet drop/error counters only on 
port level. Packets that are dropped as part of normal OpenFlow 
processing are counted in flow stats of “drop” flows or as table 
misses in table stats. These can only be interpreted by controllers 
that know the semantics of the configured OpenFlow pipeline.
Without that knowledge, it is impossible for an OVS user to obtain 
e.g. the total number of packets dropped due to OpenFlow rules.


Furthermore, there are numerous other reasons for which packets can be 
dropped by OVS slow path that are not related to the OpenFlow 
pipeline.
The generated datapath flow entries include a drop action to avoid 
further expensive upcalls to the slow path, but subsequent packets 
dropped by the datapath are not accounted anywhere.


Finally, the datapath itself drops packets in certain error 
situations.
Also, these drops are today not accounted for.This makes it difficult 
for OVS users to monitor packet drop in an OVS instance and to alert a 
management system in case of a unexpected increase of such drops.

Also OVS trouble-shooters face difficulties in analysing packet drops.

With this patch we implement following changes to address the issues 
mentioned above.


1. Identify and account all the silent packet drop scenarios

2. Display these drops in ovs-appctl coverage/show

Co-authored-by: Rohith Basavaraja 
Co-authored-by: Keshav Gupta 
Signed-off-by: Anju Thomas 
Signed-off-by: Rohith Basavaraja 
Signed-off-by: Keshav Gupta 
Acked-by: Eelco Chaudron 

Not sure what is happening, but your patches show up from “Sriram 
Vatala via dev”




---




diff --git a/lib/odp-util.c b/lib/odp-util.c
index 3a574bf..2f8544b 100644
--- a/lib/odp-util.c
+++ b/lib/odp-util.c
@@ -45,6 +45,7 @@
 #include "openvswitch/match.h"
 #include "odp-netlink-macros.h"
 #include "csum.h"
+#include "ofproto/ofproto-dpif-xlate.h"

 VLOG_DEFINE_THIS_MODULE(odp_util);

@@ -141,6 +142,7 @@ odp_action_len(uint16_t type)
 case OVS_ACTION_ATTR_PUSH_NSH: return ATTR_LEN_VARIABLE;
 case OVS_ACTION_ATTR_POP_NSH: return 0;
 case OVS_ACTION_ATTR_CHECK_PKT_LEN: return ATTR_LEN_VARIABLE;
+case OVS_ACTION_ATTR_DROP: return sizeof(uint32_t);

 case OVS_ACTION_ATTR_UNSPEC:
 case __OVS_ACTION_ATTR_MAX:
@@ -1238,6 +1240,9 @@ format_odp_action(struct ds *ds, const struct 
nlattr *a,

 case OVS_ACTION_ATTR_CHECK_PKT_LEN:
 format_odp_check_pkt_len_action(ds, a, portno_names);
 break;
+case OVS_ACTION_ATTR_DROP:
+ds_put_cstr(ds, "drop");
+break;
 case OVS_ACTION_ATTR_UNSPEC:
 case __OVS_ACTION_ATTR_MAX:
 default:
@@ -2573,8 +2578,10 @@ odp_actions_from_string(const char *s, const 
struct simap *port_names,

 struct ofpbuf *actions)
 {
 size_t old_size;
+enum xlate_error drop_action;


Remove the above, as it’s not used. Make sure you use the 
--enable-Werror when doing ./configure as it will catch these errors.



Rest looks good to me…

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH v15] Improved Packet Drop Statistics in OVS

2019-11-07 Thread 0-day Robot
Bleep bloop.  Greetings Anju Thomas via dev, I am a robot and I have tried out 
your patch.
Thanks for your contribution.

I encountered some error that I wasn't expecting.  See the details below.


build:
/bin/sh ./libtool  --tag=CC   --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I. 
   -I ./include -I ./include -I ./lib -I ./lib-Wstrict-prototypes -Wall 
-Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security 
-Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align 
-Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes 
-Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror   -g 
-O2 -MT lib/nx-match.lo -MD -MP -MF $depbase.Tpo -c -o lib/nx-match.lo 
lib/nx-match.c &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I ./include -I ./include 
-I ./lib -I ./lib -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare 
-Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter 
-Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition 
-Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow 
-Werror -Werror -g -O2 -MT lib/nx-match.lo -MD -MP -MF lib/.deps/nx-match.Tpo 
-c lib/nx-match.c -o lib/nx-match.o
depbase=`echo lib/object-collection.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool  --tag=CC   --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I. 
   -I ./include -I ./include -I ./lib -I ./lib-Wstrict-prototypes -Wall 
-Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security 
-Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align 
-Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes 
-Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror   -g 
-O2 -MT lib/object-collection.lo -MD -MP -MF $depbase.Tpo -c -o 
lib/object-collection.lo lib/object-collection.c &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I ./include -I ./include 
-I ./lib -I ./lib -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare 
-Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter 
-Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition 
-Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow 
-Werror -Werror -g -O2 -MT lib/object-collection.lo -MD -MP -MF 
lib/.deps/object-collection.Tpo -c lib/object-collection.c -o 
lib/object-collection.o
depbase=`echo lib/odp-execute.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool  --tag=CC   --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I. 
   -I ./include -I ./include -I ./lib -I ./lib-Wstrict-prototypes -Wall 
-Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security 
-Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align 
-Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes 
-Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror   -g 
-O2 -MT lib/odp-execute.lo -MD -MP -MF $depbase.Tpo -c -o lib/odp-execute.lo 
lib/odp-execute.c &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I ./include -I ./include 
-I ./lib -I ./lib -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare 
-Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter 
-Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition 
-Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow 
-Werror -Werror -g -O2 -MT lib/odp-execute.lo -MD -MP -MF 
lib/.deps/odp-execute.Tpo -c lib/odp-execute.c -o lib/odp-execute.o
depbase=`echo lib/odp-util.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool  --tag=CC   --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I. 
   -I ./include -I ./include -I ./lib -I ./lib-Wstrict-prototypes -Wall 
-Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security 
-Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align 
-Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes 
-Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror   -g 
-O2 -MT lib/odp-util.lo -MD -MP -MF $depbase.Tpo -c -o lib/odp-util.lo 
lib/odp-util.c &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I ./include -I ./include 
-I ./lib -I ./lib -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare 
-Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter 
-Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition 
-Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow 
-Werror -Werror -g -O2 -MT lib/odp-util.lo -MD -MP -MF lib/.deps/odp-util.Tpo 
-c lib/odp-util.c -o lib/odp-util.o
lib/odp-util.c: In function 'odp_actions_from_string':
lib/odp-util.c:2581:22: error: unused variable 'drop_action' 
[-Werror=unused-variable]
 enum xlate_error drop_action;
  ^
cc1: all warnings 

[ovs-dev] [PATCH v15] Improved Packet Drop Statistics in OVS

2019-11-07 Thread Anju Thomas via dev
Currently OVS maintains explicit packet drop/error counters only on port level. 
Packets that are dropped as part of normal OpenFlow processing are counted in 
flow stats of “drop” flows or as table misses in table stats. These can only be 
interpreted by controllers that know the semantics of the configured OpenFlow 
pipeline.
Without that knowledge, it is impossible for an OVS user to obtain e.g. the 
total number of packets dropped due to OpenFlow rules.

Furthermore, there are numerous other reasons for which packets can be dropped 
by OVS slow path that are not related to the OpenFlow pipeline.
The generated datapath flow entries include a drop action to avoid further 
expensive upcalls to the slow path, but subsequent packets dropped by the 
datapath are not accounted anywhere.

Finally, the datapath itself drops packets in certain error situations.
Also, these drops are today not accounted for.This makes it difficult for OVS 
users to monitor packet drop in an OVS instance and to alert a management 
system in case of a unexpected increase of such drops.
Also OVS trouble-shooters face difficulties in analysing packet drops.

With this patch we implement following changes to address the issues mentioned 
above.

1. Identify and account all the silent packet drop scenarios

2. Display these drops in ovs-appctl coverage/show

Co-authored-by: Rohith Basavaraja 
Co-authored-by: Keshav Gupta 
Signed-off-by: Anju Thomas 
Signed-off-by: Rohith Basavaraja 
Signed-off-by: Keshav Gupta 
Acked-by: Eelco Chaudron size
 3. Add version history

 v12(Ben's comments)
 1. new dp action in kernel block in openvswitch.h
 2. change xlate_error enum to be used as u32 3. resetting xlate error in case 
of congestion drop
 and forwarding disabled
---
 datapath/linux/compat/include/linux/openvswitch.h |  18 ++
 lib/dpif-netdev.c |  47 +-
 lib/dpif.c|   7 +
 lib/dpif.h|   2 +
 lib/odp-execute.c |  78 +
 lib/odp-util.c|   7 +
 ofproto/ofproto-dpif-ipfix.c  |   1 +
 ofproto/ofproto-dpif-sflow.c  |   1 +
 ofproto/ofproto-dpif-xlate.c  |  38 -
 ofproto/ofproto-dpif-xlate.h  |   7 +-
 ofproto/ofproto-dpif.c|   8 +
 ofproto/ofproto-dpif.h|   8 +-
 tests/automake.mk |   3 +-
 tests/dpif-netdev.at  |   8 +
 tests/drop-stats.at   | 190 ++
 tests/ofproto-dpif.at |   2 +-
 tests/testsuite.at|   1 +
 tests/tunnel-push-pop.at  |  28 +++-
 tests/tunnel.at   |  16 +-
 19 files changed, 457 insertions(+), 13 deletions(-)
 create mode 100644 tests/drop-stats.at

diff --git a/datapath/linux/compat/include/linux/openvswitch.h 
b/datapath/linux/compat/include/linux/openvswitch.h
index 7b16b1d..60525a2 100644
--- a/datapath/linux/compat/include/linux/openvswitch.h
+++ b/datapath/linux/compat/include/linux/openvswitch.h
@@ -403,6 +403,22 @@ enum ovs_tunnel_key_attr {
__OVS_TUNNEL_KEY_ATTR_MAX
 };
 
+enum xlate_error {
+XLATE_OK = 0,
+XLATE_BRIDGE_NOT_FOUND,
+XLATE_RECURSION_TOO_DEEP,
+XLATE_TOO_MANY_RESUBMITS,
+XLATE_STACK_TOO_DEEP,
+XLATE_NO_RECIRCULATION_CONTEXT,
+XLATE_RECIRCULATION_CONFLICT,
+XLATE_TOO_MANY_MPLS_LABELS,
+XLATE_INVALID_TUNNEL_METADATA,
+XLATE_UNSUPPORTED_PACKET_TYPE,
+XLATE_CONGESTION_DROP,
+XLATE_FORWARDING_DISABLED,
+XLATE_MAX,
+};
+
 #define OVS_TUNNEL_KEY_ATTR_MAX (__OVS_TUNNEL_KEY_ATTR_MAX - 1)
 
 /**
@@ -961,6 +977,7 @@ struct check_pkt_len_arg {
  * @OVS_ACTION_ATTR_CHECK_PKT_LEN: Check the packet length and execute a set
  * of actions if greater than the specified packet length, else execute
  * another set of actions.
+ * @OVS_ACTION_ATTR_DROP: Explicit drop action.
  */
 
 enum ovs_action_attr {
@@ -993,6 +1010,7 @@ enum ovs_action_attr {
 #ifndef __KERNEL__
OVS_ACTION_ATTR_TUNNEL_PUSH,   /* struct ovs_action_push_tnl*/
OVS_ACTION_ATTR_TUNNEL_POP,/* u32 port number. */
+   OVS_ACTION_ATTR_DROP,  /* explicit drop action. */
 #endif
__OVS_ACTION_ATTR_MAX,/* Nothing past this will be accepted
   * from userspace. */
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 4720ba1..8835158 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -102,6 +102,17 @@ enum { MAX_METERS = 65536 };/* Maximum number of 
meters. */
 enum { MAX_BANDS = 8 }; /* Maximum number of bands / meter. */
 enum { N_METER_LOCKS = 64 };/* Maximum number of meters. */
 
+COVERAGE_DEFINE(datapath_drop_meter);