From 7d563d60770bad6c283907f785190c96e3c9a5b7 Mon Sep 17 00:00:00 2001 From: Antonin Bas Date: Tue, 12 Jan 2016 21:27:15 -0800 Subject: [PATCH] small fix after bmv2 update, plus a #ifdef hack to test direct meters --- examples/meter/commands.txt | 2 +- examples/meter/p4src/meter.p4 | 16 ++++++++++++++++ examples/register/p4src/register.p4 | 4 +++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/examples/meter/commands.txt b/examples/meter/commands.txt index cce9715..04f59cd 100644 --- a/examples/meter/commands.txt +++ b/examples/meter/commands.txt @@ -2,4 +2,4 @@ table_set_default m_table _nop table_add m_table m_action aa:aa:aa:aa:aa:aa => 0 table_set_default m_filter _drop table_add m_filter _nop 0 => -meter_set_rates my_meter 0.0000005:1 0.00001:1 +meter_array_set_rates my_meter 0.0000005:1 0.00001:1 diff --git a/examples/meter/p4src/meter.p4 b/examples/meter/p4src/meter.p4 index fb880f8..f7cee7f 100644 --- a/examples/meter/p4src/meter.p4 +++ b/examples/meter/p4src/meter.p4 @@ -14,6 +14,9 @@ See the License for the specific language governing permissions and limitations under the License. */ +// to test direct meters +// #define USE_DIRECT_METER + header_type ethernet_t { fields { dstAddr : 48; @@ -58,14 +61,27 @@ action _drop() { action _nop() { } +#ifdef USE_DIRECT_METER +meter my_meter { + type: packets; // or bytes + direct: m_table; + result: meta.meter_tag; +} +#else meter my_meter { type: packets; // or bytes static: m_table; instance_count: 16384; } +#endif action m_action(meter_idx) { +#ifdef USE_DIRECT_METER + // just a hack to ensure that meter_idx is not removed by compiler + modify_field(standard_metadata.egress_spec, meter_idx); +#else execute_meter(my_meter, meter_idx, meta.meter_tag); +#endif modify_field(standard_metadata.egress_spec, 1); } diff --git a/examples/register/p4src/register.p4 b/examples/register/p4src/register.p4 index a61e5ca..96239e1 100644 --- a/examples/register/p4src/register.p4 +++ b/examples/register/p4src/register.p4 @@ -65,7 +65,9 @@ register my_register { } action m_action(register_idx) { - register_read(meta.register_tmp, my_register, register_idx); + modify_field_rng_uniform(meta.register_tmp, 100, 200); + register_write(my_register, register_idx, meta.register_tmp); + // register_read(meta.register_tmp, my_register, register_idx); // TODO }