blob: 402ffe9949b3cdb07c92037c5f5b5c377a61bb2b [file] [log] [blame]
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001#ifndef __PORT_COUNTERS_P4__
2#define __PORT_COUNTERS_P4__
3#include "defines.p4"
4
Carmelo Cascone4f011022017-06-05 01:41:02 -04005counter ingress_port_counter {
Carmelo Cascone0ce8f5d2017-09-13 03:50:36 +02006 type : bytes; // bmv2 always counts both bytes and packets
Carmelo Cascone4f011022017-06-05 01:41:02 -04007 instance_count : MAX_PORTS;
Carmelo Cascone133c7b12017-09-13 15:36:08 +02008 min_width : 64;
Carmelo Cascone4f011022017-06-05 01:41:02 -04009}
10
11counter egress_port_counter {
Carmelo Cascone0ce8f5d2017-09-13 03:50:36 +020012 type: bytes;
Carmelo Cascone4f011022017-06-05 01:41:02 -040013 instance_count : MAX_PORTS;
Carmelo Cascone133c7b12017-09-13 15:36:08 +020014 min_width : 64;
Carmelo Cascone4f011022017-06-05 01:41:02 -040015}
16
Carmelo Cascone16de6db2017-08-22 00:27:57 +020017action count_ingress() {
18 count(ingress_port_counter, IGR_PORT_FIELD);
Carmelo Cascone4f011022017-06-05 01:41:02 -040019}
20
Carmelo Cascone16de6db2017-08-22 00:27:57 +020021action count_egress() {
22 count(egress_port_counter, EGR_PORT_FIELD);
23}
24
25table ingress_port_count_table {
26 actions { count_ingress; }
27 default_action: count_ingress;
28}
29
30table egress_port_count_table {
31 actions { count_egress; }
32 default_action: count_egress;
Carmelo Cascone4f011022017-06-05 01:41:02 -040033}
34
35control process_port_counters {
Carmelo Cascone16de6db2017-08-22 00:27:57 +020036 if (EGR_PORT_FIELD < MAX_PORTS) {
37 apply(ingress_port_count_table);
38 apply(egress_port_count_table);
39 }
40}
41
42#endif