small fix after bmv2 update, plus a #ifdef hack to test direct meters

This commit is contained in:
Antonin Bas 2016-01-12 21:27:15 -08:00
parent 17952c0f42
commit 7d563d6077
3 changed files with 20 additions and 2 deletions

View File

@ -2,4 +2,4 @@ table_set_default m_table _nop
table_add m_table m_action aa:aa:aa:aa:aa:aa => 0 table_add m_table m_action aa:aa:aa:aa:aa:aa => 0
table_set_default m_filter _drop table_set_default m_filter _drop
table_add m_filter _nop 0 => 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

View File

@ -14,6 +14,9 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
// to test direct meters
// #define USE_DIRECT_METER
header_type ethernet_t { header_type ethernet_t {
fields { fields {
dstAddr : 48; dstAddr : 48;
@ -58,14 +61,27 @@ action _drop() {
action _nop() { action _nop() {
} }
#ifdef USE_DIRECT_METER
meter my_meter {
type: packets; // or bytes
direct: m_table;
result: meta.meter_tag;
}
#else
meter my_meter { meter my_meter {
type: packets; // or bytes type: packets; // or bytes
static: m_table; static: m_table;
instance_count: 16384; instance_count: 16384;
} }
#endif
action m_action(meter_idx) { 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); execute_meter(my_meter, meter_idx, meta.meter_tag);
#endif
modify_field(standard_metadata.egress_spec, 1); modify_field(standard_metadata.egress_spec, 1);
} }

View File

@ -65,7 +65,9 @@ register my_register {
} }
action m_action(register_idx) { 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 // TODO
} }