diff --git a/dash-pipeline/SAI/sai_api_gen.py b/dash-pipeline/SAI/sai_api_gen.py index 6502a2cd8..6ce04a02b 100755 --- a/dash-pipeline/SAI/sai_api_gen.py +++ b/dash-pipeline/SAI/sai_api_gen.py @@ -54,13 +54,26 @@ def p4_annotation_to_sai_attr(p4rt, sai_attr): sai_attr['type'] = kv['value']['stringValue'] elif kv['key'] == 'isresourcetype': sai_attr['isresourcetype'] = kv['value']['stringValue'] + elif kv['key'] == 'isreadonly': + sai_attr['isreadonly'] = kv['value']['stringValue'] elif kv['key'] == 'objects': sai_attr['objectName'] = kv['value']['stringValue'] + elif kv['key'] == 'isattribute': + sai_attr['isattribute'] = kv['value']['stringValue'] else: print("Unknown attr annotation " + kv['key']) exit(1) sai_attr['field'] = sai_type_to_field[sai_attr['type']] +def p4_annotation_to_sai_table(p4rt, sai_table): + for anno in p4rt[STRUCTURED_ANNOTATIONS_TAG]: + if anno[NAME_TAG] == SAI_TAG: + for kv in anno[KV_PAIR_LIST_TAG][KV_PAIRS_TAG]: + if kv['key'] == 'isobject': + sai_table['is_object'] = kv['value']['stringValue'] + if kv['key'] == 'ignoretable': + sai_table['ignore_table'] = kv['value']['stringValue'] + def get_sai_key_type(key_size, key_header, key_field): if key_size == 1: return 'bool', "booldata" @@ -252,7 +265,11 @@ def generate_sai_apis(program, ignore_tables): sai_table_data[ACTIONS_TAG] = [] sai_table_data[ACTION_PARAMS_TAG] = [] + if STRUCTURED_ANNOTATIONS_TAG in table['preamble']: + p4_annotation_to_sai_table(table['preamble'], sai_table_data) table_control, table_name = table[PREAMBLE_TAG][NAME_TAG].split('.', 1) + if 'ignore_table' in sai_table_data.keys(): + ignore_tables.append(table_name) if table_name in ignore_tables: continue @@ -300,13 +317,14 @@ def generate_sai_apis(program, ignore_tables): fill_action_params(sai_table_data[ACTION_PARAMS_TAG], param_names, all_actions[action_id]) sai_table_data[ACTIONS_TAG].append(all_actions[action_id]) - if len(sai_table_data['keys']) == 1 and sai_table_data['keys'][0]['sai_key_name'].endswith(table_name.split('.')[-1] + '_id'): - sai_table_data['is_object'] = 'true' - elif len(sai_table_data['keys']) > 5: - sai_table_data['is_object'] = 'true' - else: - sai_table_data['is_object'] = 'false' - sai_table_data['name'] = sai_table_data['name'] + '_entry' + if 'is_object' not in sai_table_data.keys(): + if len(sai_table_data['keys']) == 1 and sai_table_data['keys'][0]['sai_key_name'].endswith(table_name.split('.')[-1] + '_id'): + sai_table_data['is_object'] = 'true' + elif len(sai_table_data['keys']) > 5: + sai_table_data['is_object'] = 'true' + else: + sai_table_data['is_object'] = 'false' + sai_table_data['name'] = sai_table_data['name'] + '_entry' table_names.append(sai_table_data[NAME_TAG]) is_new_api = True diff --git a/dash-pipeline/SAI/templates/saiapi.cpp.j2 b/dash-pipeline/SAI/templates/saiapi.cpp.j2 index 92c3edffb..00df32569 100644 --- a/dash-pipeline/SAI/templates/saiapi.cpp.j2 +++ b/dash-pipeline/SAI/templates/saiapi.cpp.j2 @@ -77,6 +77,7 @@ sai_status_t sai_create_{{ table.name }}( for (uint32_t i = 0; i < attr_count; i++) { switch(attr_list[i].id) { {% for key in table['keys'] %} + {% if key.isattribute != 'false' %} case SAI_{{ table.name | upper }}_ATTR_{{ key.sai_key_name | upper }}: { auto mf = matchActionEntry->add_match(); mf->set_field_id({{key.id}}); @@ -118,6 +119,7 @@ sai_status_t sai_create_{{ table.name }}( {% endif %} break; } + {% endif %} {% endfor %} {% if table['keys'] | selectattr('match_type', 'ne', 'exact') | list | length > 0 %} {% if table['keys'] | selectattr('match_type', 'eq', 'lpm') | list | length == 0 %} diff --git a/dash-pipeline/SAI/templates/saiapi.h.j2 b/dash-pipeline/SAI/templates/saiapi.h.j2 index 71e4adf7c..ad4cca035 100644 --- a/dash-pipeline/SAI/templates/saiapi.h.j2 +++ b/dash-pipeline/SAI/templates/saiapi.h.j2 @@ -118,6 +118,7 @@ typedef enum _sai_{{ table.name }}_attr_t {% if table.is_object == 'true' %} {% if table['keys'] | length > 1 %} {% for key in table['keys'] %} +{% if key.isattribute != 'false' %} /** * @brief {{ key.match_type | capitalize | replace('Lpm', 'LPM') }} matched key {{ key.sai_key_name }} * @@ -149,6 +150,7 @@ typedef enum _sai_{{ table.name }}_attr_t */ SAI_{{ table.name | upper }}_ATTR_{{ key.sai_key_name | upper }}_MASK, +{% endif %} {% endif %} {% endfor %} {% endif %} @@ -158,7 +160,11 @@ typedef enum _sai_{{ table.name }}_attr_t * @brief Action {% for action in param.paramActions %}{{ action }}{{ ", " if not loop.last else "" }}{% endfor %} parameter {{ param.name | upper }} * * @type {{ param.type }} +{% if param.isreadonly == 'true' %} + * @flags READ_ONLY +{% else %} * @flags CREATE_AND_SET +{% endif %} {% if param.type == 'sai_uint16_t' %} * @isvlan false {% endif %} @@ -177,8 +183,10 @@ typedef enum _sai_{{ table.name }}_attr_t {% elif param.field == 's32' %} * @default {{ param.default }} {% else %} +{% if param.isreadonly != 'true' %} * @default 0 {% endif %} +{% endif %} {% if table.actions | length > 1 %} {% if param.paramActions | length > 0 %} * @validonly {% for action in param.paramActions %}SAI_{{ table.name | upper }}_ATTR_ACTION == SAI_{{ table.name | upper }}_ACTION_{{ action | upper }}{{ " or " if not loop.last else "" }}{% endfor %} diff --git a/dash-pipeline/SAI/templates/utils.h.j2 b/dash-pipeline/SAI/templates/utils.h.j2 index 3cd47d08e..b18bd6c33 100644 --- a/dash-pipeline/SAI/templates/utils.h.j2 +++ b/dash-pipeline/SAI/templates/utils.h.j2 @@ -140,6 +140,27 @@ void ipaddrSetVal(const sai_ip_address_t &value, T &t, int bits = -1){ } } +template +void ipaddrSetMask(const sai_attribute_value_t &value, T &t, int bits = -1){ + ipaddrSetMask(value.ipaddr, t); +} + +template +void ipaddrSetMask(const sai_ip_address_t &value, T &t, int bits = -1){ + switch(value.addr_family) { + case SAI_IP_ADDR_FAMILY_IPV4: { + uint32_t mask = value.addr.ip4; + t->set_mask(&mask, 4); + } + break; + case SAI_IP_ADDR_FAMILY_IPV6: { + t->set_mask(const_cast(&value.addr.ip6[0]), 16); + } + break; + default: assert(0 && "unrecognzed value.ipaddr.addr_family"); + } +} + template void macSetVal(const sai_attribute_value_t &value, T &t, int bits = -1){ t->set_value(const_cast(&value.mac[0]), 6); diff --git a/dash-pipeline/bmv2/dash_metadata.p4 b/dash-pipeline/bmv2/dash_metadata.p4 index 444ed5153..c03f33fa5 100644 --- a/dash-pipeline/bmv2/dash_metadata.p4 +++ b/dash-pipeline/bmv2/dash_metadata.p4 @@ -62,6 +62,13 @@ struct metadata_t { bit<16> stage3_dash_acl_group_id; bit<16> stage4_dash_acl_group_id; bit<16> stage5_dash_acl_group_id; + bit<1> meter_policy_en; + bit<1> mapping_meter_class_override; + bit<16> meter_policy_id; + bit<16> policy_meter_class; + bit<16> route_meter_class; + bit<16> mapping_meter_class; + bit<16> meter_class; tag_map_t src_tag_map; tag_map_t dst_tag_map; } diff --git a/dash-pipeline/bmv2/dash_outbound.p4 b/dash-pipeline/bmv2/dash_outbound.p4 index 05857c5ea..7e1c82db7 100644 --- a/dash-pipeline/bmv2/dash_outbound.p4 +++ b/dash-pipeline/bmv2/dash_outbound.p4 @@ -9,19 +9,32 @@ control outbound(inout headers_t hdr, inout metadata_t meta) { - action route_vnet(bit<16> dst_vnet_id) { + action set_route_meter_attrs(bit<1> meter_policy_en, + bit<16> meter_class) { + meta.meter_policy_en = meter_policy_en; + meta.meter_class = meter_class; + } + action route_vnet(bit<16> dst_vnet_id, + bit<1> meter_policy_en, + bit<16> meter_class) { meta.dst_vnet_id = dst_vnet_id; + set_route_meter_attrs(meter_policy_en, meter_class); } action route_vnet_direct(bit<16> dst_vnet_id, bit<1> is_overlay_ip_v4_or_v6, - IPv4ORv6Address overlay_ip) { + IPv4ORv6Address overlay_ip, + bit<1> meter_policy_en, + bit<16> meter_class) { meta.dst_vnet_id = dst_vnet_id; meta.lkup_dst_ip_addr = overlay_ip; meta.is_lkup_dst_ip_v6 = is_overlay_ip_v4_or_v6; + set_route_meter_attrs(meter_policy_en, meter_class); } - action route_direct() { + action route_direct(bit<1> meter_policy_en, + bit<16> meter_class) { + set_route_meter_attrs(meter_policy_en, meter_class); /* send to underlay router without any encap */ } @@ -42,7 +55,9 @@ control outbound(inout headers_t hdr, bit<1> is_underlay_sip_v4_or_v6, IPv4ORv6Address underlay_sip, dash_encapsulation_t dash_encapsulation, - bit<24> tunnel_key) { + bit<24> tunnel_key, + bit<1> meter_policy_en, + bit<16> meter_class) { /* Assume the overlay addresses provided are always IPv6 and the original are IPv4 */ /* assert(is_overlay_dip_v4_or_v6 == 1 && is_overlay_sip_v4_or_v6 == 1); assert(is_overlay_dip_mask_v4_or_v6 == 1 && is_overlay_sip_mask_v4_or_v6 == 1); @@ -62,6 +77,7 @@ control outbound(inout headers_t hdr, meta.encap_data.overlay_dmac = hdr.ethernet.dst_addr; meta.encap_data.dash_encapsulation = dash_encapsulation; meta.encap_data.service_tunnel_key = tunnel_key; + set_route_meter_attrs(meter_policy_en, meter_class); } #ifdef TARGET_BMV2_V1MODEL @@ -104,11 +120,15 @@ control outbound(inout headers_t hdr, action set_tunnel_mapping(IPv4Address underlay_dip, EthernetAddress overlay_dmac, - bit<1> use_dst_vnet_vni) { + bit<1> use_dst_vnet_vni, + bit<16> meter_class, + bit<1> meter_class_override) { if (use_dst_vnet_vni == 1) meta.vnet_id = meta.dst_vnet_id; meta.encap_data.overlay_dmac = overlay_dmac; meta.encap_data.underlay_dip = underlay_dip; + meta.meter_class = meter_class; + meta.mapping_meter_class_override = meter_class_override; } #ifdef TARGET_BMV2_V1MODEL diff --git a/dash-pipeline/bmv2/dash_pipeline.p4 b/dash-pipeline/bmv2/dash_pipeline.p4 index 24fa1052f..d8eff832c 100644 --- a/dash-pipeline/bmv2/dash_pipeline.p4 +++ b/dash-pipeline/bmv2/dash_pipeline.p4 @@ -113,6 +113,8 @@ control dash_ingress( @Sai[type="sai_uint32_t"] bit<24> vm_vni, bit<16> vnet_id, + bit<16> v4_meter_policy_id, + bit<16> v6_meter_policy_id, ACL_GROUPS_PARAM(inbound_v4), ACL_GROUPS_PARAM(inbound_v6), ACL_GROUPS_PARAM(outbound_v4), @@ -133,12 +135,14 @@ control dash_ingress( } else { ACL_GROUPS_COPY_TO_META(inbound_v6); } + meta.meter_policy_id = v6_meter_policy_id; } else { if (meta.direction == dash_direction_t.OUTBOUND) { ACL_GROUPS_COPY_TO_META(outbound_v4); } else { ACL_GROUPS_COPY_TO_META(inbound_v4); } + meta.meter_policy_id = v4_meter_policy_id; } } @@ -231,6 +235,98 @@ control dash_ingress( const default_action = deny; } + action set_meter_policy_attrs(@Sai[type="sai_ip_addr_family_t", isresourcetype="true"] bit<32> ip_addr_family) { + if (ip_addr_family == 0) /* SAI_IP_ADDR_FAMILY_IPV4 */ { + if (meta.is_overlay_ip_v6 == 1) { + meta.dropped = true; + } + } else { + if (meta.is_overlay_ip_v6 == 0) { + meta.dropped = true; + } + } + } + + @name("meter_policy|dash_meter") + @Sai[isobject="true"] + table meter_policy { + key = { + meta.meter_policy_id : exact @name("meta.meter_policy_id:meter_policy_id"); + } + actions = { + set_meter_policy_attrs(); + } + } + + action meter_rule_action(bit<16> meter_class) { + meta.policy_meter_class = meter_class; + } + + @name("meter_rule|dash_meter") + @Sai[isobject="true"] + table meter_rule { + key = { + meta.meter_policy_id: exact @name("meta.meter_policy_id:meter_policy_id") @Sai[type="sai_object_id_t", isresourcetype="true", objects="METER_POLICY"]; + hdr.ipv4.dst_addr : ternary @name("hdr.ipv4.dst_addr:dip"); + } + + actions = { + meter_rule_action; + @defaultonly deny; + } + const default_action = deny; + } + + action meter_bucket_action( + @Sai[type="sai_uint32_t", isreadonly="true"] bit<32> outbound_bytes_counter, + @Sai[type="sai_uint32_t", isreadonly="true"] bit<32> inbound_bytes_counter) { + // read only counters for SAI api generation + } + + @name("meter_bucket|dash_meter") + @Sai[isobject="true"] + table meter_bucket { + key = { + meta.eni_id: exact @name("meta.eni_id:eni_id"); + meta.meter_class: exact @name("meta.meter_class:meter_class"); + } + actions = { + meter_bucket_action; + } + } + +#ifdef TARGET_BMV2_V1MODEL + direct_counter(CounterType.bytes) meter_bucket_outbound_counter; +#endif + @name("meter_bucket_outbound|dash_meter") + @Sai[ignoretable="true"] + table meter_bucket_outbound { + key = { + meta.meter_class: exact @name("meta.meter_class:meter_class"); + meta.eni_id: exact @name("meta.eni_id:eni_id"); + } + actions = { NoAction; } +#ifdef TARGET_BMV2_V1MODEL + counters = meter_bucket_outbound_counter; +#endif + } + +#ifdef TARGET_BMV2_V1MODEL + direct_counter(CounterType.bytes) meter_bucket_inbound_counter; +#endif + @name("meter_bucket_inbound|dash_meter") + @Sai[ignoretable="true"] + table meter_bucket_inbound { + key = { + meta.meter_class: exact @name("meta.meter_class:meter_class"); + meta.eni_id: exact @name("meta.eni_id:eni_id"); + } + actions = { NoAction; } +#ifdef TARGET_BMV2_V1MODEL + counters = meter_bucket_inbound_counter; +#endif + } + action set_eni(bit<16> eni_id) { meta.eni_id = eni_id; } @@ -388,6 +484,29 @@ control dash_ingress( inbound.apply(hdr, meta); } + if (meta.meter_policy_en == 1) { + meter_policy.apply(); + meter_rule.apply(); + } + + { + if (meta.meter_policy_en == 1) { + meta.meter_class = meta.policy_meter_class; + } else { + meta.meter_class = meta.route_meter_class; + } + if ((meta.meter_class == 0) || (meta.mapping_meter_class_override == 1)) { + meta.meter_class = meta.mapping_meter_class; + } + } + + meter_bucket.apply(); + if (meta.direction == dash_direction_t.OUTBOUND) { + meter_bucket_outbound.apply(); + } else if (meta.direction == dash_direction_t.INBOUND) { + meter_bucket_inbound.apply(); + } + eni_meter.apply(); if (meta.dropped) { diff --git a/dash-pipeline/tests/libsai/vnet_out/vnet_out.cpp b/dash-pipeline/tests/libsai/vnet_out/vnet_out.cpp index f450ab199..acbfcbab8 100644 --- a/dash-pipeline/tests/libsai/vnet_out/vnet_out.cpp +++ b/dash-pipeline/tests/libsai/vnet_out/vnet_out.cpp @@ -141,6 +141,14 @@ int main(int argc, char **argv) attr.value.u32 = vnet_id; attrs.push_back(attr); + attr.id = SAI_ENI_ATTR_V4_METER_POLICY_ID; + attr.value.oid = SAI_NULL_OBJECT_ID; + attrs.push_back(attr); + + attr.id = SAI_ENI_ATTR_V6_METER_POLICY_ID; + attr.value.oid = SAI_NULL_OBJECT_ID; + attrs.push_back(attr); + std::unordered_map acl_group_ids = { {SAI_ENI_ATTR_INBOUND_V4_STAGE1_DASH_ACL_GROUP_ID, in_acl_group_id}, {SAI_ENI_ATTR_INBOUND_V4_STAGE2_DASH_ACL_GROUP_ID, in_acl_group_id}, diff --git a/dash-pipeline/tests/saithrift/pytest/vnet/test_saithrift_vnet.py b/dash-pipeline/tests/saithrift/pytest/vnet/test_saithrift_vnet.py index fa2089dec..acb9cd20e 100644 --- a/dash-pipeline/tests/saithrift/pytest/vnet/test_saithrift_vnet.py +++ b/dash-pipeline/tests/saithrift/pytest/vnet/test_saithrift_vnet.py @@ -41,6 +41,8 @@ def test_sai_thrift_create_eni(saithrift_client): vm_underlay_dip=vm_underlay_dip, vm_vni=9, vnet_id=vnet, + v4_meter_policy_id = 0, + v6_meter_policy_id = 0, inbound_v4_stage1_dash_acl_group_id = in_acl_group_id, inbound_v4_stage2_dash_acl_group_id = in_acl_group_id, inbound_v4_stage3_dash_acl_group_id = in_acl_group_id, diff --git a/test/test-cases/functional/ptf/sai_dash_utils.py b/test/test-cases/functional/ptf/sai_dash_utils.py index 333adc995..5a62bef8e 100644 --- a/test/test-cases/functional/ptf/sai_dash_utils.py +++ b/test/test-cases/functional/ptf/sai_dash_utils.py @@ -143,6 +143,8 @@ def eni_create(self, **kwargs): "vm_underlay_dip": sai_ipaddress("0.0.0.0"), "vm_vni": 1, "vnet_id": 1, + "v4_meter_policy_id": 0, + "v6_meter_policy_id": 0, "inbound_v4_stage1_dash_acl_group_id": 0, "inbound_v4_stage2_dash_acl_group_id": 0, "inbound_v4_stage3_dash_acl_group_id": 0, @@ -283,7 +285,8 @@ def outbound_routing_vnet_direct_create(self, eni_id, lpm, dst_vnet_id, sai_thrift_create_outbound_routing_entry(self.client, outbound_routing_entry, dst_vnet_id=dst_vnet_id, action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET_DIRECT, - overlay_ip=sai_ipaddress(overlay_ip), counter_id=counter_id) + overlay_ip=sai_ipaddress(overlay_ip), counter_id=counter_id, + meter_policy_en=False, meter_class=0) self.assertEqual(self.status(), SAI_STATUS_SUCCESS) self.add_teardown_obj(self.outbound_routing_vnet_direct_remove, outbound_routing_entry) @@ -296,7 +299,8 @@ def outbound_routing_direct_create(self, eni_id, lpm, counter_id=None): switch_id=self.switch_id, eni_id=eni_id, destination=sai_ipprefix(lpm)) sai_thrift_create_outbound_routing_entry(self.client, outbound_routing_entry, counter_id=counter_id, - action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT) + action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT, + meter_policy_en=False, meter_class=0) self.assertEqual(self.status(), SAI_STATUS_SUCCESS) self.add_teardown_obj(self.outbound_routing_vnet_direct_remove, outbound_routing_entry) @@ -311,7 +315,8 @@ def outbound_routing_vnet_create(self, eni_id, lpm, dst_vnet_id, counter_id=None sai_thrift_create_outbound_routing_entry(self.client, outbound_routing_entry, dst_vnet_id=dst_vnet_id, counter_id=counter_id, - action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET) + action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET, + meter_policy_en=False, meter_class=0) self.assertEqual(self.status(), SAI_STATUS_SUCCESS) self.add_teardown_obj(self.outbound_routing_vnet_direct_remove, outbound_routing_entry) @@ -330,7 +335,8 @@ def outbound_ca_to_pa_create(self, dst_vnet_id, dip, underlay_dip, sai_thrift_create_outbound_ca_to_pa_entry(self.client, ca_to_pa_entry, underlay_dip=sai_ipaddress(underlay_dip), use_dst_vnet_vni=use_dst_vnet_vni, - overlay_dmac=overlay_dmac) + overlay_dmac=overlay_dmac, + meter_class=0, meter_class_override=False) self.assertEqual(self.status(), SAI_STATUS_SUCCESS) self.add_teardown_obj(self.outbound_ca_to_pa_remove, ca_to_pa_entry) diff --git a/test/test-cases/functional/ptf/saidashacl.py b/test/test-cases/functional/ptf/saidashacl.py index 9249d6c51..8a5f3983c 100644 --- a/test/test-cases/functional/ptf/saidashacl.py +++ b/test/test-cases/functional/ptf/saidashacl.py @@ -208,6 +208,8 @@ def setUpSwitch(self): vm_underlay_dip=vm_underlay_dip, vm_vni=9, vnet_id=self.vnet, + v4_meter_policy_id=0, + v6_meter_policy_id=0, inbound_v4_stage1_dash_acl_group_id=self.in_v4_stage1_acl_group_id, inbound_v4_stage2_dash_acl_group_id=self.in_v4_stage2_acl_group_id, inbound_v4_stage3_dash_acl_group_id=self.in_v4_stage3_acl_group_id, @@ -223,7 +225,6 @@ def setUpSwitch(self): inbound_v6_stage3_dash_acl_group_id=self.in_v6_stage3_acl_group_id, inbound_v6_stage4_dash_acl_group_id=0, inbound_v6_stage5_dash_acl_group_id=0, - outbound_v6_stage1_dash_acl_group_id=self.out_v6_stage1_acl_group_id, outbound_v6_stage2_dash_acl_group_id=self.out_v6_stage2_acl_group_id, outbound_v6_stage3_dash_acl_group_id=self.out_v6_stage3_acl_group_id, @@ -247,7 +248,8 @@ def setUpSwitch(self): switch_id=self.switch_id, eni_id=self.eni, destination=ca_prefix) self.create_entry(sai_thrift_create_outbound_routing_entry, sai_thrift_remove_outbound_routing_entry, - self.ore, action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET, dst_vnet_id=self.vnet) + self.ore, action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET, dst_vnet_id=self.vnet, + meter_policy_en=False, meter_class=0) underlay_dip = sai_thrift_ip_address_t(addr_family=SAI_IP_ADDR_FAMILY_IPV4, addr=sai_thrift_ip_addr_t(ip4=self.dst_pa_ip)) @@ -255,7 +257,8 @@ def setUpSwitch(self): switch_id=self.switch_id, dst_vnet_id=self.vnet, dip=dip) self.create_entry(sai_thrift_create_outbound_ca_to_pa_entry, sai_thrift_remove_outbound_ca_to_pa_entry, - self.ocpe, underlay_dip=underlay_dip, overlay_dmac=self.dst_ca_mac, use_dst_vnet_vni=True) + self.ocpe, underlay_dip=underlay_dip, overlay_dmac=self.dst_ca_mac, use_dst_vnet_vni=True, + meter_class=0, meter_class_override=False) def setupTest(self): self.tests.append(AclRuleTest(self, diff --git a/test/test-cases/functional/ptf/saidasheni.py b/test/test-cases/functional/ptf/saidasheni.py index 9c521b612..761c036ba 100644 --- a/test/test-cases/functional/ptf/saidasheni.py +++ b/test/test-cases/functional/ptf/saidasheni.py @@ -130,6 +130,8 @@ def createEniTest(self): vm_underlay_dip=self.vm_underlay_dip, vm_vni=self.vm_vni, vnet_id=self.vm_vnet, + v4_meter_policy_id=0, + v6_meter_policy_id=0, inbound_v4_stage1_dash_acl_group_id=self.in_acl_group_id, inbound_v4_stage2_dash_acl_group_id=self.in_acl_group_id, inbound_v4_stage3_dash_acl_group_id=self.in_acl_group_id, diff --git a/test/test-cases/functional/ptf/saidashvnet_sanity.py b/test/test-cases/functional/ptf/saidashvnet_sanity.py index 094e81f5c..0e5849a72 100644 --- a/test/test-cases/functional/ptf/saidashvnet_sanity.py +++ b/test/test-cases/functional/ptf/saidashvnet_sanity.py @@ -62,6 +62,8 @@ def configureVnet(self): vm_underlay_dip=vm_underlay_dip, vm_vni=9, vnet_id=self.vnet, + v4_meter_policy_id = 0, + v6_meter_policy_id = 0, # TODO: Enable ACL rule #inbound_v4_stage1_dash_acl_group_id = self.in_acl_group_id, #inbound_v4_stage2_dash_acl_group_id = self.in_acl_group_id, @@ -115,14 +117,16 @@ def configureVnet(self): self.ore = sai_thrift_outbound_routing_entry_t(switch_id=self.switch_id, eni_id=self.eni, destination=ca_prefix) status = sai_thrift_create_outbound_routing_entry(self.client, self.ore, action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET, - dst_vnet_id=self.vnet) + dst_vnet_id=self.vnet, + meter_policy_en=False, meter_class=0) assert(status == SAI_STATUS_SUCCESS) underlay_dip = sai_thrift_ip_address_t(addr_family=SAI_IP_ADDR_FAMILY_IPV4, addr=sai_thrift_ip_addr_t(ip4=self.dst_pa_ip)) self.ocpe = sai_thrift_outbound_ca_to_pa_entry_t(switch_id=self.switch_id, dst_vnet_id=self.vnet, dip=dip) status = sai_thrift_create_outbound_ca_to_pa_entry(self.client, self.ocpe, underlay_dip = underlay_dip, - overlay_dmac=self.dst_ca_mac, use_dst_vnet_vni = True) + overlay_dmac=self.dst_ca_mac, use_dst_vnet_vni = True, + meter_class=0, meter_class_override=False) assert(status == SAI_STATUS_SUCCESS) print(f"\n{self.__class__.__name__} configureVnet OK") diff --git a/test/test-cases/functional/saic/config_bidir_setup_commands.py b/test/test-cases/functional/saic/config_bidir_setup_commands.py index e61db1a01..1457d85d4 100644 --- a/test/test-cases/functional/saic/config_bidir_setup_commands.py +++ b/test/test-cases/functional/saic/config_bidir_setup_commands.py @@ -117,7 +117,9 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE2_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE3_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", - "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0" + "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, { @@ -151,7 +153,9 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE2_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE3_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", - "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0" + "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, { @@ -185,7 +189,9 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE2_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE3_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", - "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0" + "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, @@ -236,7 +242,9 @@ }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, { @@ -250,7 +258,9 @@ }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, { @@ -264,7 +274,9 @@ }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, { @@ -336,7 +348,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", NETWORK_VTEP_IP, "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", INNER_DST_MAC, - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] }, { @@ -351,7 +365,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", NETWORK_VTEP_IP, "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", INNER_DST_MAC2, - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] }, { @@ -366,7 +382,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", ENI_VTEP_IP, "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", INNER_SRC_MAC, - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] } ] diff --git a/test/test-cases/functional/saic/config_inbound_setup_commands.py b/test/test-cases/functional/saic/config_inbound_setup_commands.py index 8862a16f2..8eb829d2d 100644 --- a/test/test-cases/functional/saic/config_inbound_setup_commands.py +++ b/test/test-cases/functional/saic/config_inbound_setup_commands.py @@ -148,6 +148,10 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", + "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", + "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, @@ -209,6 +213,10 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", + "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", + "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, diff --git a/test/test-cases/functional/saic/config_outbound_setup_commands.json b/test/test-cases/functional/saic/config_outbound_setup_commands.json index ddaf81518..a8d6ec526 100644 --- a/test/test-cases/functional/saic/config_outbound_setup_commands.json +++ b/test/test-cases/functional/saic/config_outbound_setup_commands.json @@ -91,7 +91,9 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE2_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE3_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", - "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0" + "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, { @@ -125,7 +127,9 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE2_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE3_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", - "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0" + "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, @@ -164,7 +168,9 @@ }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, { @@ -178,7 +184,9 @@ }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, @@ -194,7 +202,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", "221.0.2.101", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:1b:6e:00:00:01", - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] }, { @@ -209,7 +219,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", "221.0.1.11", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:1A:C5:00:00:01", - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] } ] diff --git a/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_eni.py b/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_eni.py index e80491573..9d1179806 100644 --- a/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_eni.py +++ b/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_eni.py @@ -84,6 +84,10 @@ def test_vnet_eni_create(self, dpu): "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", + "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", + "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, diff --git a/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_in_route.py b/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_in_route.py index b0c21cf4d..42c09c0b1 100644 --- a/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_in_route.py +++ b/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_in_route.py @@ -90,6 +90,10 @@ def test_vnet_inbound_routing_entry_create_setup(self, dpu): "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", + "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", + "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, diff --git a/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_out_route.py b/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_out_route.py index d42a7b5a1..12d337324 100644 --- a/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_out_route.py +++ b/test/test-cases/functional/saic/sai-api/test_sai_api_vnet_out_route.py @@ -89,6 +89,10 @@ def test_vnet_outbound_routing_entry_create(self, dpu): "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", + "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", + "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, @@ -109,7 +113,9 @@ def test_vnet_outbound_routing_entry_create(self, dpu): }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, ] @@ -146,7 +152,9 @@ def test_vnet_outbound_routing_entry_set(self, dpu): }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, ] diff --git a/test/test-cases/functional/saic/tutorial/test_sai_vnet_outbound_small_scale_config_via_dpugen_create.json b/test/test-cases/functional/saic/tutorial/test_sai_vnet_outbound_small_scale_config_via_dpugen_create.json index 80e4750e7..1c0ff3b13 100644 --- a/test/test-cases/functional/saic/tutorial/test_sai_vnet_outbound_small_scale_config_via_dpugen_create.json +++ b/test/test-cases/functional/saic/tutorial/test_sai_vnet_outbound_small_scale_config_via_dpugen_create.json @@ -132,6 +132,10 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", + "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", + "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, @@ -193,6 +197,10 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", + "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", + "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, @@ -235,7 +243,11 @@ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", - "$vnet_#5000" + "$vnet_#5000", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", + "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", + "0" ] }, { @@ -251,7 +263,11 @@ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", - "$vnet_#6000" + "$vnet_#6000", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", + "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", + "0" ] }, { @@ -269,7 +285,11 @@ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:1B:6E:00:00:01", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", - "True" + "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", + "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", + "False" ] }, { @@ -287,7 +307,11 @@ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:1B:6E:18:00:01", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", - "True" + "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", + "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", + "False" ] } ] diff --git a/test/test-cases/scale/saic/vnet_inbound_setup_commands.json b/test/test-cases/scale/saic/vnet_inbound_setup_commands.json index e43e09c09..20113fdd3 100644 --- a/test/test-cases/scale/saic/vnet_inbound_setup_commands.json +++ b/test/test-cases/scale/saic/vnet_inbound_setup_commands.json @@ -110,6 +110,10 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", + "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", + "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, diff --git a/test/test-cases/scale/saic/vnet_outbound_setup_commands_scale.json b/test/test-cases/scale/saic/vnet_outbound_setup_commands_scale.json index 564e8798a..5005fddd6 100644 --- a/test/test-cases/scale/saic/vnet_outbound_setup_commands_scale.json +++ b/test/test-cases/scale/saic/vnet_outbound_setup_commands_scale.json @@ -126,7 +126,9 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE2_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE3_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", - "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0" + "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, { @@ -160,7 +162,9 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE2_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE3_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", - "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0" + "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, { @@ -198,7 +202,9 @@ }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet_#0" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet_#0", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, { @@ -212,7 +218,9 @@ }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet_#1" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet_#1", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, { @@ -226,7 +234,9 @@ }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet_#2" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet_#2", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, { @@ -240,7 +250,9 @@ }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet_#3" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet_#3", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, { @@ -270,7 +282,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", "172.16.2.20", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:DD:DD:DD:DD:01", - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] }, { @@ -285,7 +299,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", "172.16.3.20", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:DD:DD:DD:DD:02", - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] }, { @@ -300,7 +316,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", "172.16.4.20", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:DD:DD:DD:DD:03", - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] }, { @@ -315,7 +333,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", "172.16.5.20", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:DD:DD:DD:DD:04", - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] }, { @@ -330,7 +350,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", "172.16.6.20", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:DD:DD:DD:DD:05", - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] }, { @@ -345,7 +367,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", "172.16.7.20", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:DD:DD:DD:DD:06", - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] }, { @@ -360,7 +384,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", "172.16.8.20", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:DD:DD:DD:DD:07", - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] } ] diff --git a/test/test-cases/scale/saic/vnet_outbound_setup_commands_simple.json b/test/test-cases/scale/saic/vnet_outbound_setup_commands_simple.json index 087132275..133adf5ae 100644 --- a/test/test-cases/scale/saic/vnet_outbound_setup_commands_simple.json +++ b/test/test-cases/scale/saic/vnet_outbound_setup_commands_simple.json @@ -78,7 +78,9 @@ "SAI_ENI_ATTR_OUTBOUND_V6_STAGE2_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE3_DASH_ACL_GROUP_ID", "0", "SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID", "0", - "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0" + "SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID", "0", + "SAI_ENI_ATTR_V4_METER_POLICY_ID", "0", + "SAI_ENI_ATTR_V6_METER_POLICY_ID", "0" ] }, { @@ -104,7 +106,9 @@ }, "attributes": [ "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET", - "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet" + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_POLICY_EN", "False", + "SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS", "0" ] }, { @@ -119,7 +123,9 @@ "attributes": [ "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", "172.16.1.20", "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", "00:DD:DD:DD:00:00", - "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True" + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS", "0", + "SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OVERRIDE", "False" ] } ]